From 448b2c9270c54e0516694e71ee31b385e7eebd12 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Tue, 23 Jan 2024 19:28:18 +0000 Subject: [PATCH] refactor and test: adjusting to the last version of registries --- abis/0.8.21/ServiceStakingMechUsage.json | 1113 ------------- abis/0.8.21/ServiceStakingTokenMechUsage.json | 1216 --------------- abis/0.8.23/ServiceStakingMechUsage.json | 1275 +++++++++++++++ abis/0.8.23/ServiceStakingTokenMechUsage.json | 1378 +++++++++++++++++ .../mech_usage/ServiceStakingMechUsage.sol | 2 +- .../ServiceStakingTokenMechUsage.sol | 2 +- hardhat.config.js | 4 +- lib/autonolas-registries | 2 +- lib/forge-std | 2 +- test/ServiceStakingMechUsage.js | 1 + test/ServiceStakingMechUsages.t.sol | 16 +- 11 files changed, 2669 insertions(+), 2342 deletions(-) delete mode 100644 abis/0.8.21/ServiceStakingMechUsage.json delete mode 100644 abis/0.8.21/ServiceStakingTokenMechUsage.json create mode 100644 abis/0.8.23/ServiceStakingMechUsage.json create mode 100644 abis/0.8.23/ServiceStakingTokenMechUsage.json diff --git a/abis/0.8.21/ServiceStakingMechUsage.json b/abis/0.8.21/ServiceStakingMechUsage.json deleted file mode 100644 index 939fccf..0000000 --- a/abis/0.8.21/ServiceStakingMechUsage.json +++ /dev/null @@ -1,1113 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceStakingMechUsage", - "sourceName": "contracts/mech_usage/ServiceStakingMechUsage.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "maxNumServices", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "rewardsPerSecond", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minStakingDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "livenessPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "livenessRatio", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "agentIds", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "threshold", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "internalType": "struct ServiceStakingBase.StakingParams", - "name": "_stakingParams", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_serviceRegistry", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_proxyHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_agentMech", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "LowerThan", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxNumServices", - "type": "uint256" - } - ], - "name": "MaxNumServicesReached", - "type": "error" - }, - { - "inputs": [], - "name": "NoRewardsAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceNotStaked", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceConfiguration", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroMechAgentAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "availableRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "numServices", - "type": "uint256" - } - ], - "name": "Checkpoint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "availableRewards", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - } - ], - "name": "ServiceStaked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - } - ], - "name": "ServiceUnstaked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "agentIds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "agentMech", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "availableRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "calculateServiceStakingReward", - "outputs": [ - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "checkpoint", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[][]", - "name": "", - "type": "uint256[][]" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "configHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAgentIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNextRewardCheckpointTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "tsNext", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getServiceIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getServiceInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "internalType": "struct ServiceInfo", - "name": "sInfo", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "isServiceStaked", - "outputs": [ - { - "internalType": "bool", - "name": "isStaked", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "livenessPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "livenessRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceInfo", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxNumServices", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "numAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsPerSecond", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "serviceRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "setServiceIds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "threshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tsCheckpoint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x6101e06040523480156200001257600080fd5b5060405162002a3438038062002a348339810160408190526200003591620003a7565b808484848282828260000151600014806200005257506020830151155b806200006057506060830151155b806200006e57506080830151155b806200007c575060a0830151155b156200009b57604051637c946ed760e01b815260040160405180910390fd5b600283604001511015620000d757604080840151905163491a2bb160e01b81526004810191909152600260248201526044015b60405180910390fd5b6001600160a01b038216620000ff5760405163d92e233d60e01b815260040160405180910390fd5b82516080908152602084015160a0908152604085015160c052606085015160e09081529185015161010090815290850151610120526001600160a01b038416610180529084015161014052830151610160526000805b8460c00151518110156200023757818560c0015182815181106200017d576200017d6200049e565b602002602001015111620001c9578460c001518181518110620001a457620001a46200049e565b6020026020010151604051632ab10b0b60e21b8152600401620000ce91815260200190565b8460c001518181518110620001e257620001e26200049e565b6020908102919091010151600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0181905591506200022f81620004b4565b905062000155565b50816200025757604051637c946ed760e01b815260040160405180910390fd5b506101a0525050426002555050506001600160a01b0381166200028c5760405162ca95f960e81b815260040160405180910390fd5b6001600160a01b03166101c05250620004dc92505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715620002e057620002e0620002a4565b60405290565b600082601f830112620002f857600080fd5b815160206001600160401b0380831115620003175762000317620002a4565b8260051b604051601f19603f830116810181811084821117156200033f576200033f620002a4565b6040529384528581018301938381019250878511156200035e57600080fd5b83870191505b848210156200037f5781518352918301919083019062000364565b979650505050505050565b80516001600160a01b0381168114620003a257600080fd5b919050565b60008060008060808587031215620003be57600080fd5b84516001600160401b0380821115620003d657600080fd5b908601906101208289031215620003ec57600080fd5b620003f6620002ba565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c0830151828111156200043f57600080fd5b6200044d8a828601620002e6565b60c08301525060e0838101519082015261010092830151928101929092525093506200047c602086016200038a565b92506040850151915062000493606086016200038a565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060018201620004d557634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612453620005e1600039600081816104170152611c1d0152600081816104830152610feb0152600081816105f50152818161099601528181610da701526111f001526000818161066b01528181610e6f0152610e9e01526000818161032701528181610ee50152610f190152600081816103af0152610e2d0152600081816103e30152611de401526000818161035b0152818161166e015261176201526000818161069f01528181611acc0152611b080152600081816106d30152611a130152600081816102ad01528181610d2e0152610d6201526124536000f3fe6080604052600436106101bb5760003560e01c8063a694fc3a116100ec578063e1f1176d1161008a578063eb338c9611610064578063eb338c96146106f5578063f189e85a14610715578063f4dce7141461072a578063ffa1ad741461073f57600080fd5b8063e1f1176d14610659578063e77cdcc91461068d578063eacdaabc146106c157600080fd5b8063b69ef8a8116100c6578063b69ef8a8146105a6578063c2c4c5c1146105bc578063cbcf252a146105e3578063cd25fe381461061757600080fd5b8063a694fc3a146104e8578063a74466ad14610508578063b15087601461058457600080fd5b80635829c5ec1161015957806378e061361161013357806378e0613614610451578063809cee2f1461047157806382a8ea58146104a5578063879d9090146104d257600080fd5b80635829c5ec1461039d578063592cf3fb146103d157806375af4b6d1461040557600080fd5b80633e732997116101955780633e732997146102ff57806342cde4e81461031557806352c824f51461034957806356e760581461037d57600080fd5b8063150b7a021461023957806316a751721461029b5780632e17de78146102dd57600080fd5b36610234576000346000546101d09190611eaa565b90506000346001546101e29190611eaa565b60008390556001819055604080513481526020810185905290810182905290915033907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2005b600080fd5b34801561024557600080fd5b50610265610254366004611ed2565b630a85bd0160e11b95945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156102a757600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610292565b3480156102e957600080fd5b506102fd6102f8366004611f71565b61077d565b005b34801561030b57600080fd5b506102cf60025481565b34801561032157600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038957600080fd5b506102cf610398366004611f71565b610a60565b3480156103a957600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041157600080fd5b506104397f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610292565b34801561045d57600080fd5b506102cf61046c366004611f71565b610a81565b34801561047d57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b157600080fd5b506104c56104c0366004611f71565b610c20565b6040516102929190611fc5565b3480156104de57600080fd5b506102cf60015481565b3480156104f457600080fd5b506102fd610503366004611f71565b610d06565b34801561051457600080fd5b50610559610523366004611f71565b600460208190526000918252604090912080546001820154600383015492909301546001600160a01b0391821693909116919084565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610292565b34801561059057600080fd5b506105996112ad565b6040516102929190612022565b3480156105b257600080fd5b506102cf60005481565b3480156105c857600080fd5b506105d1611305565b60405161029296959493929190612035565b3480156105ef57600080fd5b506104397f000000000000000000000000000000000000000000000000000000000000000081565b34801561062357600080fd5b50610649610632366004611f71565b600090815260046020526040902060030154151590565b6040519015158152602001610292565b34801561066557600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069957600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106cd57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561070157600080fd5b506102cf610710366004611f71565b611604565b34801561072157600080fd5b50610599611614565b34801561073657600080fd5b506102cf61166a565b34801561074b57600080fd5b50610770604051806040016040528060058152602001640302e312e360dc1b81525081565b60405161029291906120e6565b600081815260046020526040902060018101546001600160a01b031633146107d457600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6000806107df611305565b9550505050509150806107f7576107f4611614565b91505b60005b8251811015610834578483828151811061081657610816612134565b602002602001015103156108345761082d8161214a565b90506107fa565b6004840154600285018054604080516020808402820181019092528281526000939092909183018282801561088857602002820191906000526020600020905b815481526020019060010190808311610874575b5050506003890154895460008c8152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff199081168255600182018054909116905595965091946001600160a01b03909116935091506108e96002830182611e13565b506000600382018190556004909101556005805461090990600190612163565b8154811061091957610919612134565b90600052602060002001546005868154811061093757610937612134565b600091825260209091200155600580548061095457610954612176565b600082815260208120820160001990810191909155019055604051632142170760e11b8152306004820152336024820152604481018a90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b505050506000841115610a0557610a05818561169f565b806001600160a01b0316336001600160a01b03168a7f246ee6115bfd84e00097b16569c2ff2f822026bb9595a82cd2c1e69d4b6ea50c868887604051610a4d9392919061218c565b60405180910390a4505050505050505050565b60038181548110610a7057600080fd5b600091825260209091200154905081565b6000818152600460209081526040808320815160a08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610b0157602002820191906000526020600020905b815481526020019060010190808311610aed575b50505050508152602001600382015481526020016004820154815250509050806080015191508060600151600003610b4f5760405163e0606b6360e01b8152600481018490526024016107cb565b6000806000806000610b5f61174b565b50509450945094509450945060005b84811015610c145788838281518110610b8957610b89612134565b602002602001015103610c045785841115610bdf578386838381518110610bb257610bb2612134565b6020026020010151610bc491906121b1565b610bce91906121c8565b610bd89089611eaa565b9750610c14565b818181518110610bf157610bf1612134565b602002602001015188610bd89190611eaa565b610c0d8161214a565b9050610b6e565b50505050505050919050565b610c646040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081525090565b600082815260046020908152604091829020825160a08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610ce257602002820191906000526020600020905b815481526020019060010190808311610cce575b50505050508152602001600382015481526020016004820154815250509050919050565b600154600003610d295760405163afb0be3360e01b815260040160405180910390fd5b6005547f00000000000000000000000000000000000000000000000000000000000000008103610d8e5760405163fd20861560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024016107cb565b60405163ef0e239b60e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1e9190810190612310565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610e6d57604051637ad404bf60e11b8152600481018490526024016107cb565b7f000000000000000000000000000000000000000000000000000000000000000015801590610ec0575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610ee157604051637ad404bf60e11b8152600481018490526024016107cb565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610f3b5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610f5c57604051637ad404bf60e11b8152600481018490526024016107cb565b60048160c001516005811115610f7457610f746123ee565b14610fb3578060c001516005811115610f8f57610f8f6123ee565b604051633c053f9d60e21b81526004810191909152602481018490526044016107cb565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461103857602082015160405162a2307960e51b81526001600160a01b0390911660048201526024016107cb565b60035480156111095760e08301515181811461106a57604051637ad404bf60e11b8152600481018790526024016107cb565b60005b81811015611106578460e00151818151811061108b5761108b612134565b602002602001015163ffffffff16600382815481106110ac576110ac612134565b9060005260206000200154146110f657600381815481106110cf576110cf612134565b9060005260206000200154604051632ab10b0b60e21b81526004016107cb91815260200190565b6110ff8161214a565b905061106d565b50505b6111258584600001516bffffffffffffffffffffffff16611aca565b600085815260046020908152604082209085015181546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161783556001830180549091163317905590919061117a90611b38565b80519091506111929060028401906020840190611e34565b50426003830155600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505084602001516001600160a01b0316336001600160a01b0316887f5d43ac9b1b213902df90d405b0006308578486b6c62182c5df202ed572c844e48460405161129c9190612022565b60405180910390a450505050505050565b606060038054806020026020016040519081016040528092919081815260200182805480156112fb57602002820191906000526020600020905b8154815260200190600101908083116112e7575b5050505050905090565b606080600060608060008060008060008060008061132161174b565b96509650965096509650965096506000861115611525576000878611156114945760008060015b898110156113e657888b88838151811061136457611364612134565b602002602001015161137691906121b1565b61138091906121c8565b925061138c8383611eaa565b91508781815181106113a0576113a0612134565b60200260200101519350826004600086815260200190815260200160002060040160008282546113d09190611eaa565b909155506113df90508161214a565b9050611348565b50878a876000815181106113fc576113fc612134565b602002602001015161140e91906121b1565b61141891906121c8565b91506114248282611eaa565b90508660008151811061143957611439612134565b60200260200101519250808a111561146257611455818b612163565b61145f9083611eaa565b91505b60008381526004602081905260408220018054849290611483908490611eaa565b9091555060009a5061151e92505050565b60005b87811015611510578581815181106114b1576114b1612134565b602002602001015191508481815181106114cd576114cd612134565b60200260200101516004600084815260200190815260200160002060040160008282546114fa9190611eaa565b9091555061150990508161214a565b9050611497565b5061151b8689612163565b97505b5060018790555b8051156115ef5760005b82518110156115ac57600083828151811061154c5761154c612134565b6020026020010151905082828151811061156857611568612134565b6020026020010151600460008381526020019081526020016000206002019080519060200190611599929190611e34565b5050806115a59061214a565b905061152f565b50426002556040805188815260208101889052600199507f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a15b909c909b509399509097509550929350915050565b60058181548110610a7057600080fd5b606060058054806020026020016040519081016040528092919081815260200182805480156112fb57602002820191906000526020600020908154815260200190600101908083116112e7575050505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000060025461169a9190611eaa565b905090565b806000808282546116b09190612163565b90915550506040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611700576040519150601f19603f3d011682016040523d82523d6000602084013e611705565b606091505b50509050806117465760405163cd3f165960e01b8152600060048201523060248201526001600160a01b0384166044820152606481018390526084016107cb565b505050565b6002546001549060009081906060908190819081907f000000000000000000000000000000000000000000000000000000000000000061178b8242612163565b101580156117995750600088115b15611ac0576005548067ffffffffffffffff8111156117ba576117ba6121ea565b6040519080825280602002602001820160405280156117e3578160200160208202803683370190505b5093508067ffffffffffffffff8111156117ff576117ff6121ea565b604051908082528060200260200182016040528015611828578160200160208202803683370190505b5095508067ffffffffffffffff811115611844576118446121ea565b60405190808252806020026020018201604052801561186d578160200160208202803683370190505b5094508067ffffffffffffffff811115611889576118896121ea565b6040519080825280602002602001820160405280156118bc57816020015b60608152602001906001900390816118a75790505b50925060005b81811015611abd57600581815481106118dd576118dd612134565b90600052602060002001548582815181106118fa576118fa612134565b60200260200101818152505060006004600087848151811061191e5761191e612134565b6020908102919091018101518252810191909152604001600020805490915061194f906001600160a01b0316611b38565b85838151811061196157611961612134565b6020908102919091010152600381015484908181111561197f578091505b6119898242612163565b90506000611a038886815181106119a2576119a2612134565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156119f857602002820191906000526020600020905b8154815260200190600101908083116119e4575b505050505084611b49565b90508015611aa8576000611a37837f00000000000000000000000000000000000000000000000000000000000000006121b1565b9050611a43818e611eaa565b9c50808b8f81518110611a5857611a58612134565b602002602001018181525050898681518110611a7657611a76612134565b60200260200101518c8f81518110611a9057611a90612134565b6020908102919091010152611aa48e61214a565b9d50505b5050505080611ab69061214a565b90506118c2565b50505b5090919293949596565b7f0000000000000000000000000000000000000000000000000000000000000000811015611b345760405163491a2bb160e01b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016107cb565b5050565b6060611b4382611b5e565b92915050565b6000611b56848484611cac565b949350505050565b6040805160028082526060808301845292602083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190612404565b81600081518110611bf357611bf3612134565b6020908102919091010152604051637af7347360e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c889190612404565b81600181518110611c9b57611c9b612134565b602002602001018181525050919050565b60008082118015611cf0575082600081518110611ccb57611ccb612134565b602002602001015184600081518110611ce657611ce6612134565b6020026020010151115b8015611d2f575082600181518110611d0a57611d0a612134565b602002602001015184600181518110611d2557611d25612134565b6020026020010151115b15611e0c57600083600081518110611d4957611d49612134565b602002602001015185600081518110611d6457611d64612134565b6020026020010151611d769190612163565b9050600084600181518110611d8d57611d8d612134565b602002602001015186600181518110611da857611da8612134565b6020026020010151611dba9190612163565b9050818111611e0957600084611dd883670de0b6b3a76400006121b1565b611de291906121c8565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50505b9392505050565b5080546000825590600052602060002090810190611e319190611e7f565b50565b828054828255906000526020600020908101928215611e6f579160200282015b82811115611e6f578251825591602001919060010190611e54565b50611e7b929150611e7f565b5090565b5b80821115611e7b5760008155600101611e80565b634e487b7160e01b600052601160045260246000fd5b80820180821115611b4357611b43611e94565b6001600160a01b0381168114611e3157600080fd5b600080600080600060808688031215611eea57600080fd5b8535611ef581611ebd565b94506020860135611f0581611ebd565b935060408601359250606086013567ffffffffffffffff80821115611f2957600080fd5b818801915088601f830112611f3d57600080fd5b813581811115611f4c57600080fd5b896020828501011115611f5e57600080fd5b9699959850939650602001949392505050565b600060208284031215611f8357600080fd5b5035919050565b600081518084526020808501945080840160005b83811015611fba57815187529582019590820190600101611f9e565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160a0606084015261200260c0840182611f8a565b905060608401516080840152608084015160a08401528091505092915050565b602081526000611e0c6020830184611f8a565b60c08152600061204860c0830189611f8a565b6020838203818501528189518084528284019150828160051b850101838c0160005b8381101561209857601f19878403018552612086838351611f8a565b9486019492509085019060010161206a565b50508a604088015286810360608801526120b2818b611f8a565b94505050505082810360808401526120ca8186611f8a565b9150506120db60a083018415159052565b979650505050505050565b600060208083528351808285015260005b81811015612113578581018301518582016040015282016120f7565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b60006001820161215c5761215c611e94565b5060010190565b81810381811115611b4357611b43611e94565b634e487b7160e01b600052603160045260246000fd5b60608152600061219f6060830186611f8a565b60208301949094525060400152919050565b8082028115828204841417611b4357611b43611e94565b6000826121e557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612224576122246121ea565b60405290565b80516bffffffffffffffffffffffff8116811461224657600080fd5b919050565b805161224681611ebd565b805163ffffffff8116811461224657600080fd5b80516006811061224657600080fd5b600082601f83011261228a57600080fd5b8151602067ffffffffffffffff808311156122a7576122a76121ea565b8260051b604051601f19603f830116810181811084821117156122cc576122cc6121ea565b6040529384528581018301938381019250878511156122ea57600080fd5b83870191505b848210156120db5761230182612256565b835291830191908301906122f0565b60006020828403121561232257600080fd5b815167ffffffffffffffff8082111561233a57600080fd5b90830190610100828603121561234f57600080fd5b612357612200565b6123608361222a565b815261236e6020840161224b565b60208201526040830151604082015261238960608401612256565b606082015261239a60808401612256565b60808201526123ab60a08401612256565b60a08201526123bc60c0840161226a565b60c082015260e0830151828111156123d357600080fd5b6123df87828601612279565b60e08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561241657600080fd5b505191905056fea2646970667358221220d0ed0dbf857d059581672cadbd30f4756de4459e1f5997713e8c9fd73eb26dff64736f6c63430008150033", - "deployedBytecode": "0x6080604052600436106101bb5760003560e01c8063a694fc3a116100ec578063e1f1176d1161008a578063eb338c9611610064578063eb338c96146106f5578063f189e85a14610715578063f4dce7141461072a578063ffa1ad741461073f57600080fd5b8063e1f1176d14610659578063e77cdcc91461068d578063eacdaabc146106c157600080fd5b8063b69ef8a8116100c6578063b69ef8a8146105a6578063c2c4c5c1146105bc578063cbcf252a146105e3578063cd25fe381461061757600080fd5b8063a694fc3a146104e8578063a74466ad14610508578063b15087601461058457600080fd5b80635829c5ec1161015957806378e061361161013357806378e0613614610451578063809cee2f1461047157806382a8ea58146104a5578063879d9090146104d257600080fd5b80635829c5ec1461039d578063592cf3fb146103d157806375af4b6d1461040557600080fd5b80633e732997116101955780633e732997146102ff57806342cde4e81461031557806352c824f51461034957806356e760581461037d57600080fd5b8063150b7a021461023957806316a751721461029b5780632e17de78146102dd57600080fd5b36610234576000346000546101d09190611eaa565b90506000346001546101e29190611eaa565b60008390556001819055604080513481526020810185905290810182905290915033907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2005b600080fd5b34801561024557600080fd5b50610265610254366004611ed2565b630a85bd0160e11b95945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156102a757600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610292565b3480156102e957600080fd5b506102fd6102f8366004611f71565b61077d565b005b34801561030b57600080fd5b506102cf60025481565b34801561032157600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038957600080fd5b506102cf610398366004611f71565b610a60565b3480156103a957600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561041157600080fd5b506104397f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610292565b34801561045d57600080fd5b506102cf61046c366004611f71565b610a81565b34801561047d57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b157600080fd5b506104c56104c0366004611f71565b610c20565b6040516102929190611fc5565b3480156104de57600080fd5b506102cf60015481565b3480156104f457600080fd5b506102fd610503366004611f71565b610d06565b34801561051457600080fd5b50610559610523366004611f71565b600460208190526000918252604090912080546001820154600383015492909301546001600160a01b0391821693909116919084565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610292565b34801561059057600080fd5b506105996112ad565b6040516102929190612022565b3480156105b257600080fd5b506102cf60005481565b3480156105c857600080fd5b506105d1611305565b60405161029296959493929190612035565b3480156105ef57600080fd5b506104397f000000000000000000000000000000000000000000000000000000000000000081565b34801561062357600080fd5b50610649610632366004611f71565b600090815260046020526040902060030154151590565b6040519015158152602001610292565b34801561066557600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069957600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106cd57600080fd5b506102cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561070157600080fd5b506102cf610710366004611f71565b611604565b34801561072157600080fd5b50610599611614565b34801561073657600080fd5b506102cf61166a565b34801561074b57600080fd5b50610770604051806040016040528060058152602001640302e312e360dc1b81525081565b60405161029291906120e6565b600081815260046020526040902060018101546001600160a01b031633146107d457600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6000806107df611305565b9550505050509150806107f7576107f4611614565b91505b60005b8251811015610834578483828151811061081657610816612134565b602002602001015103156108345761082d8161214a565b90506107fa565b6004840154600285018054604080516020808402820181019092528281526000939092909183018282801561088857602002820191906000526020600020905b815481526020019060010190808311610874575b5050506003890154895460008c8152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff199081168255600182018054909116905595965091946001600160a01b03909116935091506108e96002830182611e13565b506000600382018190556004909101556005805461090990600190612163565b8154811061091957610919612134565b90600052602060002001546005868154811061093757610937612134565b600091825260209091200155600580548061095457610954612176565b600082815260208120820160001990810191909155019055604051632142170760e11b8152306004820152336024820152604481018a90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b505050506000841115610a0557610a05818561169f565b806001600160a01b0316336001600160a01b03168a7f246ee6115bfd84e00097b16569c2ff2f822026bb9595a82cd2c1e69d4b6ea50c868887604051610a4d9392919061218c565b60405180910390a4505050505050505050565b60038181548110610a7057600080fd5b600091825260209091200154905081565b6000818152600460209081526040808320815160a08101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610b0157602002820191906000526020600020905b815481526020019060010190808311610aed575b50505050508152602001600382015481526020016004820154815250509050806080015191508060600151600003610b4f5760405163e0606b6360e01b8152600481018490526024016107cb565b6000806000806000610b5f61174b565b50509450945094509450945060005b84811015610c145788838281518110610b8957610b89612134565b602002602001015103610c045785841115610bdf578386838381518110610bb257610bb2612134565b6020026020010151610bc491906121b1565b610bce91906121c8565b610bd89089611eaa565b9750610c14565b818181518110610bf157610bf1612134565b602002602001015188610bd89190611eaa565b610c0d8161214a565b9050610b6e565b50505050505050919050565b610c646040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081525090565b600082815260046020908152604091829020825160a08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610ce257602002820191906000526020600020905b815481526020019060010190808311610cce575b50505050508152602001600382015481526020016004820154815250509050919050565b600154600003610d295760405163afb0be3360e01b815260040160405180910390fd5b6005547f00000000000000000000000000000000000000000000000000000000000000008103610d8e5760405163fd20861560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024016107cb565b60405163ef0e239b60e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1e9190810190612310565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610e6d57604051637ad404bf60e11b8152600481018490526024016107cb565b7f000000000000000000000000000000000000000000000000000000000000000015801590610ec0575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610ee157604051637ad404bf60e11b8152600481018490526024016107cb565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610f3b5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610f5c57604051637ad404bf60e11b8152600481018490526024016107cb565b60048160c001516005811115610f7457610f746123ee565b14610fb3578060c001516005811115610f8f57610f8f6123ee565b604051633c053f9d60e21b81526004810191909152602481018490526044016107cb565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461103857602082015160405162a2307960e51b81526001600160a01b0390911660048201526024016107cb565b60035480156111095760e08301515181811461106a57604051637ad404bf60e11b8152600481018790526024016107cb565b60005b81811015611106578460e00151818151811061108b5761108b612134565b602002602001015163ffffffff16600382815481106110ac576110ac612134565b9060005260206000200154146110f657600381815481106110cf576110cf612134565b9060005260206000200154604051632ab10b0b60e21b81526004016107cb91815260200190565b6110ff8161214a565b905061106d565b50505b6111258584600001516bffffffffffffffffffffffff16611aca565b600085815260046020908152604082209085015181546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161783556001830180549091163317905590919061117a90611b38565b80519091506111929060028401906020840190611e34565b50426003830155600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b5050505084602001516001600160a01b0316336001600160a01b0316887f5d43ac9b1b213902df90d405b0006308578486b6c62182c5df202ed572c844e48460405161129c9190612022565b60405180910390a450505050505050565b606060038054806020026020016040519081016040528092919081815260200182805480156112fb57602002820191906000526020600020905b8154815260200190600101908083116112e7575b5050505050905090565b606080600060608060008060008060008060008061132161174b565b96509650965096509650965096506000861115611525576000878611156114945760008060015b898110156113e657888b88838151811061136457611364612134565b602002602001015161137691906121b1565b61138091906121c8565b925061138c8383611eaa565b91508781815181106113a0576113a0612134565b60200260200101519350826004600086815260200190815260200160002060040160008282546113d09190611eaa565b909155506113df90508161214a565b9050611348565b50878a876000815181106113fc576113fc612134565b602002602001015161140e91906121b1565b61141891906121c8565b91506114248282611eaa565b90508660008151811061143957611439612134565b60200260200101519250808a111561146257611455818b612163565b61145f9083611eaa565b91505b60008381526004602081905260408220018054849290611483908490611eaa565b9091555060009a5061151e92505050565b60005b87811015611510578581815181106114b1576114b1612134565b602002602001015191508481815181106114cd576114cd612134565b60200260200101516004600084815260200190815260200160002060040160008282546114fa9190611eaa565b9091555061150990508161214a565b9050611497565b5061151b8689612163565b97505b5060018790555b8051156115ef5760005b82518110156115ac57600083828151811061154c5761154c612134565b6020026020010151905082828151811061156857611568612134565b6020026020010151600460008381526020019081526020016000206002019080519060200190611599929190611e34565b5050806115a59061214a565b905061152f565b50426002556040805188815260208101889052600199507f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a15b909c909b509399509097509550929350915050565b60058181548110610a7057600080fd5b606060058054806020026020016040519081016040528092919081815260200182805480156112fb57602002820191906000526020600020908154815260200190600101908083116112e7575050505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000060025461169a9190611eaa565b905090565b806000808282546116b09190612163565b90915550506040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611700576040519150601f19603f3d011682016040523d82523d6000602084013e611705565b606091505b50509050806117465760405163cd3f165960e01b8152600060048201523060248201526001600160a01b0384166044820152606481018390526084016107cb565b505050565b6002546001549060009081906060908190819081907f000000000000000000000000000000000000000000000000000000000000000061178b8242612163565b101580156117995750600088115b15611ac0576005548067ffffffffffffffff8111156117ba576117ba6121ea565b6040519080825280602002602001820160405280156117e3578160200160208202803683370190505b5093508067ffffffffffffffff8111156117ff576117ff6121ea565b604051908082528060200260200182016040528015611828578160200160208202803683370190505b5095508067ffffffffffffffff811115611844576118446121ea565b60405190808252806020026020018201604052801561186d578160200160208202803683370190505b5094508067ffffffffffffffff811115611889576118896121ea565b6040519080825280602002602001820160405280156118bc57816020015b60608152602001906001900390816118a75790505b50925060005b81811015611abd57600581815481106118dd576118dd612134565b90600052602060002001548582815181106118fa576118fa612134565b60200260200101818152505060006004600087848151811061191e5761191e612134565b6020908102919091018101518252810191909152604001600020805490915061194f906001600160a01b0316611b38565b85838151811061196157611961612134565b6020908102919091010152600381015484908181111561197f578091505b6119898242612163565b90506000611a038886815181106119a2576119a2612134565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156119f857602002820191906000526020600020905b8154815260200190600101908083116119e4575b505050505084611b49565b90508015611aa8576000611a37837f00000000000000000000000000000000000000000000000000000000000000006121b1565b9050611a43818e611eaa565b9c50808b8f81518110611a5857611a58612134565b602002602001018181525050898681518110611a7657611a76612134565b60200260200101518c8f81518110611a9057611a90612134565b6020908102919091010152611aa48e61214a565b9d50505b5050505080611ab69061214a565b90506118c2565b50505b5090919293949596565b7f0000000000000000000000000000000000000000000000000000000000000000811015611b345760405163491a2bb160e01b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016107cb565b5050565b6060611b4382611b5e565b92915050565b6000611b56848484611cac565b949350505050565b6040805160028082526060808301845292602083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190612404565b81600081518110611bf357611bf3612134565b6020908102919091010152604051637af7347360e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015611c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c889190612404565b81600181518110611c9b57611c9b612134565b602002602001018181525050919050565b60008082118015611cf0575082600081518110611ccb57611ccb612134565b602002602001015184600081518110611ce657611ce6612134565b6020026020010151115b8015611d2f575082600181518110611d0a57611d0a612134565b602002602001015184600181518110611d2557611d25612134565b6020026020010151115b15611e0c57600083600081518110611d4957611d49612134565b602002602001015185600081518110611d6457611d64612134565b6020026020010151611d769190612163565b9050600084600181518110611d8d57611d8d612134565b602002602001015186600181518110611da857611da8612134565b6020026020010151611dba9190612163565b9050818111611e0957600084611dd883670de0b6b3a76400006121b1565b611de291906121c8565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50505b9392505050565b5080546000825590600052602060002090810190611e319190611e7f565b50565b828054828255906000526020600020908101928215611e6f579160200282015b82811115611e6f578251825591602001919060010190611e54565b50611e7b929150611e7f565b5090565b5b80821115611e7b5760008155600101611e80565b634e487b7160e01b600052601160045260246000fd5b80820180821115611b4357611b43611e94565b6001600160a01b0381168114611e3157600080fd5b600080600080600060808688031215611eea57600080fd5b8535611ef581611ebd565b94506020860135611f0581611ebd565b935060408601359250606086013567ffffffffffffffff80821115611f2957600080fd5b818801915088601f830112611f3d57600080fd5b813581811115611f4c57600080fd5b896020828501011115611f5e57600080fd5b9699959850939650602001949392505050565b600060208284031215611f8357600080fd5b5035919050565b600081518084526020808501945080840160005b83811015611fba57815187529582019590820190600101611f9e565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160a0606084015261200260c0840182611f8a565b905060608401516080840152608084015160a08401528091505092915050565b602081526000611e0c6020830184611f8a565b60c08152600061204860c0830189611f8a565b6020838203818501528189518084528284019150828160051b850101838c0160005b8381101561209857601f19878403018552612086838351611f8a565b9486019492509085019060010161206a565b50508a604088015286810360608801526120b2818b611f8a565b94505050505082810360808401526120ca8186611f8a565b9150506120db60a083018415159052565b979650505050505050565b600060208083528351808285015260005b81811015612113578581018301518582016040015282016120f7565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b60006001820161215c5761215c611e94565b5060010190565b81810381811115611b4357611b43611e94565b634e487b7160e01b600052603160045260246000fd5b60608152600061219f6060830186611f8a565b60208301949094525060400152919050565b8082028115828204841417611b4357611b43611e94565b6000826121e557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612224576122246121ea565b60405290565b80516bffffffffffffffffffffffff8116811461224657600080fd5b919050565b805161224681611ebd565b805163ffffffff8116811461224657600080fd5b80516006811061224657600080fd5b600082601f83011261228a57600080fd5b8151602067ffffffffffffffff808311156122a7576122a76121ea565b8260051b604051601f19603f830116810181811084821117156122cc576122cc6121ea565b6040529384528581018301938381019250878511156122ea57600080fd5b83870191505b848210156120db5761230182612256565b835291830191908301906122f0565b60006020828403121561232257600080fd5b815167ffffffffffffffff8082111561233a57600080fd5b90830190610100828603121561234f57600080fd5b612357612200565b6123608361222a565b815261236e6020840161224b565b60208201526040830151604082015261238960608401612256565b606082015261239a60808401612256565b60808201526123ab60a08401612256565b60a08201526123bc60c0840161226a565b60c082015260e0830151828111156123d357600080fd5b6123df87828601612279565b60e08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561241657600080fd5b505191905056fea2646970667358221220d0ed0dbf857d059581672cadbd30f4756de4459e1f5997713e8c9fd73eb26dff64736f6c63430008150033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/abis/0.8.21/ServiceStakingTokenMechUsage.json b/abis/0.8.21/ServiceStakingTokenMechUsage.json deleted file mode 100644 index 6eb68a9..0000000 --- a/abis/0.8.21/ServiceStakingTokenMechUsage.json +++ /dev/null @@ -1,1216 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ServiceStakingTokenMechUsage", - "sourceName": "contracts/mech_usage/ServiceStakingTokenMechUsage.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "maxNumServices", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "rewardsPerSecond", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minStakingDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "livenessPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "livenessRatio", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numAgentInstances", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "agentIds", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "threshold", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "configHash", - "type": "bytes32" - } - ], - "internalType": "struct ServiceStakingBase.StakingParams", - "name": "_stakingParams", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_serviceRegistry", - "type": "address" - }, - { - "internalType": "address", - "name": "_serviceRegistryTokenUtility", - "type": "address" - }, - { - "internalType": "address", - "name": "_stakingToken", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_proxyHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_agentMech", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "AgentInstanceRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentInstancesSlotsFilled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "AgentNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "AgentNotInService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "componentId", - "type": "uint256" - } - ], - "name": "ComponentNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "HashExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectAgentBondingValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "sent", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "IncorrectRegistrationDepositValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "LowerThan", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "manager", - "type": "address" - } - ], - "name": "ManagerOnly", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxNumServices", - "type": "uint256" - } - ], - "name": "MaxNumServicesReached", - "type": "error" - }, - { - "inputs": [], - "name": "NoRewardsAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "provided", - "type": "address" - }, - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OnlyOwnServiceMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "OperatorHasNoInstances", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "Overflow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "Paused", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyGuard", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceMustBeInactive", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "ServiceNotStaked", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TokenTransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - } - ], - "name": "UnauthorizedMultisig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "ValueLowerThan", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "agentId", - "type": "uint256" - } - ], - "name": "WrongAgentId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numValues1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numValues2", - "type": "uint256" - } - ], - "name": "WrongArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceConfiguration", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "state", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "WrongServiceState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { - "internalType": "address", - "name": "provided", - "type": "address" - } - ], - "name": "WrongStakingToken", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxThreshold", - "type": "uint256" - } - ], - "name": "WrongThreshold", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroMechAgentAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroValue", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "availableRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "numServices", - "type": "uint256" - } - ], - "name": "Checkpoint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "availableRewards", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - } - ], - "name": "ServiceStaked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - } - ], - "name": "ServiceUnstaked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "agentIds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "agentMech", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "availableRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "calculateServiceStakingReward", - "outputs": [ - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "checkpoint", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[][]", - "name": "", - "type": "uint256[][]" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "configHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getAgentIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNextRewardCheckpointTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "tsNext", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getServiceIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "getServiceInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "nonces", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "internalType": "struct ServiceInfo", - "name": "sInfo", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "isServiceStaked", - "outputs": [ - { - "internalType": "bool", - "name": "isStaked", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "livenessPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "livenessRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "mapServiceInfo", - "outputs": [ - { - "internalType": "address", - "name": "multisig", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tsStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxNumServices", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "numAgentInstances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsPerSecond", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "serviceRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "serviceRegistryTokenUtility", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "setServiceIds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stakingToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "threshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tsCheckpoint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "serviceId", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6102206040523480156200001257600080fd5b5060405162002c7638038062002c768339810160408190526200003591620003f8565b8086868686868484828260000151600014806200005457506020830151155b806200006257506060830151155b806200007057506080830151155b806200007e575060a0830151155b156200009d57604051637c946ed760e01b815260040160405180910390fd5b600283604001511015620000d957604080840151905163491a2bb160e01b81526004810191909152600260248201526044015b60405180910390fd5b6001600160a01b038216620001015760405163d92e233d60e01b815260040160405180910390fd5b82516080908152602084015160a0908152604085015160c052606085015160e09081529185015161010090815290850151610120526001600160a01b038416610180529084015161014052830151610160526000805b8460c00151518110156200023957818560c0015182815181106200017f576200017f62000513565b602002602001015111620001cb578460c001518181518110620001a657620001a662000513565b6020026020010151604051632ab10b0b60e21b8152600401620000d091815260200190565b8460c001518181518110620001e457620001e462000513565b6020908102919091010151600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018190559150620002318162000529565b905062000157565b50816200025957604051637c946ed760e01b815260040160405180910390fd5b506101a0525050426002556001600160a01b03821615806200028257506001600160a01b038316155b15620002a15760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b039081166101e0529081166101c05283169150620002db90505760405162ca95f960e81b815260040160405180910390fd5b6001600160a01b0316610200525062000551945050505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715620003315762000331620002f5565b60405290565b600082601f8301126200034957600080fd5b815160206001600160401b0380831115620003685762000368620002f5565b8260051b604051601f19603f83011681018181108482111715620003905762000390620002f5565b604052938452858101830193838101925087851115620003af57600080fd5b83870191505b84821015620003d057815183529183019190830190620003b5565b979650505050505050565b80516001600160a01b0381168114620003f357600080fd5b919050565b60008060008060008060c087890312156200041257600080fd5b86516001600160401b03808211156200042a57600080fd5b90880190610120828b0312156200044057600080fd5b6200044a6200030b565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c0830151828111156200049357600080fd5b620004a18c82860162000337565b60c08301525060e083810151908201526101009283015192810192909252509550620004d060208801620003db565b9450620004e060408801620003db565b9350620004f060608801620003db565b9250608087015191506200050760a08801620003db565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000600182016200054a57634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516125e76200068f600039600081816103ac0152611d7c015260008181610385015281816111de0152818161160301528181611a8c0152611ad00152600081816102790152611a120152600081816103e60152610e910152600081816105030152818161083c01528181610c4d015261109601526000818161055f01528181610d150152610d440152600081816102d601528181610d8b0152610dbf0152600081816103370152610cd301526000818161035e0152611f430152600081816102fd015281816115b6015261168701526000818161058601528181611b070152611b5e0152600081816105ad015261193801526000818161024401528181610bd40152610c0801526125e76000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063879d90901161010f578063cd25fe38116100a2578063eb338c9611610071578063eb338c96146105cf578063f189e85a146105e2578063f4dce714146105ea578063ffa1ad74146105f257600080fd5b8063cd25fe3814610525578063e1f1176d1461055a578063e77cdcc914610581578063eacdaabc146105a857600080fd5b8063b69ef8a8116100de578063b69ef8a8146104c8578063b6b55f25146104d1578063c2c4c5c1146104e4578063cbcf252a146104fe57600080fd5b8063879d909014610428578063a694fc3a14610431578063a74466ad14610444578063b1508760146104b357600080fd5b806356e760581161018757806375af4b6d1161015657806375af4b6d146103a757806378e06136146103ce578063809cee2f146103e157806382a8ea581461040857600080fd5b806356e760581461031f5780635829c5ec14610332578063592cf3fb1461035957806372f702f31461038057600080fd5b80632e17de78116101c35780632e17de78146102b35780633e732997146102c857806342cde4e8146102d157806352c824f5146102f857600080fd5b8063150b7a02146101ea57806316a751721461023f5780632871405114610274575b600080fd5b6102096101f8366004612008565b630a85bd0160e11b95945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6102667f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610236565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b6102c66102c13660046120a7565b610623565b005b61026660025481565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61026661032d3660046120a7565b610906565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b6102666103dc3660046120a7565b610927565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61041b6104163660046120a7565b610ac6565b60405161023691906120fb565b61026660015481565b6102c661043f3660046120a7565b610bac565b6104886104523660046120a7565b600460208190526000918252604090912080546001820154600383015492909301546001600160a01b0391821693909116919084565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610236565b6104bb611153565b6040516102369190612158565b61026660005481565b6102c66104df3660046120a7565b6111ab565b6104ec61124d565b6040516102369695949392919061216b565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b61054a6105333660046120a7565b600090815260046020526040902060030154151590565b6040519015158152602001610236565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666105dd3660046120a7565b61154c565b6104bb61155c565b6102666115b2565b610616604051806040016040528060058152602001640302e312e360dc1b81525081565b604051610236919061221c565b600081815260046020526040902060018101546001600160a01b0316331461067a57600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b60008061068561124d565b95505050505091508061069d5761069a61155c565b91505b60005b82518110156106da57848382815181106106bc576106bc61226a565b602002602001015103156106da576106d381612296565b90506106a0565b6004840154600285018054604080516020808402820181019092528281526000939092909183018282801561072e57602002820191906000526020600020905b81548152602001906001019080831161071a575b5050506003890154895460008c8152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff199081168255600182018054909116905595965091946001600160a01b039091169350915061078f6002830182611f72565b50600060038201819055600490910155600580546107af906001906122af565b815481106107bf576107bf61226a565b9060005260206000200154600586815481106107dd576107dd61226a565b60009182526020909120015560058054806107fa576107fa6122c2565b600082815260208120820160001990810191909155019055604051632142170760e11b8152306004820152336024820152604481018a90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b5050505060008411156108ab576108ab81856115e7565b806001600160a01b0316336001600160a01b03168a7f246ee6115bfd84e00097b16569c2ff2f822026bb9595a82cd2c1e69d4b6ea50c8688876040516108f3939291906122d8565b60405180910390a4505050505050505050565b6003818154811061091657600080fd5b600091825260209091200154905081565b6000818152600460209081526040808320815160a08101835281546001600160a01b03908116825260018301541681850152600282018054845181870281018701865281815287969395860193909291908301828280156109a757602002820191906000526020600020905b815481526020019060010190808311610993575b505050505081526020016003820154815260200160048201548152505090508060800151915080606001516000036109f55760405163e0606b6360e01b815260048101849052602401610671565b6000806000806000610a05611670565b50509450945094509450945060005b84811015610aba5788838281518110610a2f57610a2f61226a565b602002602001015103610aaa5785841115610a85578386838381518110610a5857610a5861226a565b6020026020010151610a6a91906122fd565b610a749190612314565b610a7e9089612336565b9750610aba565b818181518110610a9757610a9761226a565b602002602001015188610a7e9190612336565b610ab381612296565b9050610a14565b50505050505050919050565b610b0a6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081525090565b600082815260046020908152604091829020825160a08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610b8857602002820191906000526020600020905b815481526020019060010190808311610b74575b50505050508152602001600382015481526020016004820154815250509050919050565b600154600003610bcf5760405163afb0be3360e01b815260040160405180910390fd5b6005547f00000000000000000000000000000000000000000000000000000000000000008103610c345760405163fd20861560e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610671565b60405163ef0e239b60e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc4919081019061246f565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610d1357604051637ad404bf60e11b815260048101849052602401610671565b7f000000000000000000000000000000000000000000000000000000000000000015801590610d66575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610d8757604051637ad404bf60e11b815260048101849052602401610671565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610de15750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610e0257604051637ad404bf60e11b815260048101849052602401610671565b60048160c001516005811115610e1a57610e1a61254d565b14610e59578060c001516005811115610e3557610e3561254d565b604051633c053f9d60e21b8152600481019190915260248101849052604401610671565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f000000000000000000000000000000000000000000000000000000000000000014610ede57602082015160405162a2307960e51b81526001600160a01b039091166004820152602401610671565b6003548015610faf5760e083015151818114610f1057604051637ad404bf60e11b815260048101879052602401610671565b60005b81811015610fac578460e001518181518110610f3157610f3161226a565b602002602001015163ffffffff1660038281548110610f5257610f5261226a565b906000526020600020015414610f9c5760038181548110610f7557610f7561226a565b9060005260206000200154604051632ab10b0b60e21b815260040161067191815260200190565b610fa581612296565b9050610f13565b50505b610fcb8584600001516bffffffffffffffffffffffff166119ef565b600085815260046020908152604082209085015181546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161783556001830180549091163317905590919061102090611b90565b80519091506110389060028401906020840190611f93565b50426003830155600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b5050505084602001516001600160a01b0316336001600160a01b0316887f5d43ac9b1b213902df90d405b0006308578486b6c62182c5df202ed572c844e4846040516111429190612158565b60405180910390a450505050505050565b606060038054806020026020016040519081016040528092919081815260200182805480156111a157602002820191906000526020600020905b81548152602001906001019080831161118d575b5050505050905090565b6000816000546111bb9190612336565b90506000826001546111cd9190612336565b6000839055600181905590506112057f0000000000000000000000000000000000000000000000000000000000000000333086611ba1565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b6060806000606080600080600080600080600080611269611670565b9650965096509650965096509650600086111561146d576000878611156113dc5760008060015b8981101561132e57888b8883815181106112ac576112ac61226a565b60200260200101516112be91906122fd565b6112c89190612314565b92506112d48383612336565b91508781815181106112e8576112e861226a565b60200260200101519350826004600086815260200190815260200160002060040160008282546113189190612336565b90915550611327905081612296565b9050611290565b50878a876000815181106113445761134461226a565b602002602001015161135691906122fd565b6113609190612314565b915061136c8282612336565b9050866000815181106113815761138161226a565b60200260200101519250808a11156113aa5761139d818b6122af565b6113a79083612336565b91505b600083815260046020819052604082200180548492906113cb908490612336565b9091555060009a5061146692505050565b60005b87811015611458578581815181106113f9576113f961226a565b602002602001015191508481815181106114155761141561226a565b60200260200101516004600084815260200190815260200160002060040160008282546114429190612336565b90915550611451905081612296565b90506113df565b5061146386896122af565b97505b5060018790555b8051156115375760005b82518110156114f45760008382815181106114945761149461226a565b602002602001015190508282815181106114b0576114b061226a565b60200260200101516004600083815260200190815260200160002060020190805190602001906114e1929190611f93565b5050806114ed90612296565b9050611477565b50426002556040805188815260208101889052600199507f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a15b909c909b509399509097509550929350915050565b6005818154811061091657600080fd5b606060058054806020026020016040519081016040528092919081815260200182805480156111a1576020028201919060005260206000209081548152602001906001019080831161118d575050505050905090565b60007f00000000000000000000000000000000000000000000000000000000000000006002546115e29190612336565b905090565b806000808282546115f891906122af565b9091555061162990507f00000000000000000000000000000000000000000000000000000000000000008383611c2b565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161166491815260200190565b60405180910390a25050565b6002546001549060009081906060908190819081907f00000000000000000000000000000000000000000000000000000000000000006116b082426122af565b101580156116be5750600088115b156119e5576005548067ffffffffffffffff8111156116df576116df612349565b604051908082528060200260200182016040528015611708578160200160208202803683370190505b5093508067ffffffffffffffff81111561172457611724612349565b60405190808252806020026020018201604052801561174d578160200160208202803683370190505b5095508067ffffffffffffffff81111561176957611769612349565b604051908082528060200260200182016040528015611792578160200160208202803683370190505b5094508067ffffffffffffffff8111156117ae576117ae612349565b6040519080825280602002602001820160405280156117e157816020015b60608152602001906001900390816117cc5790505b50925060005b818110156119e257600581815481106118025761180261226a565b906000526020600020015485828151811061181f5761181f61226a565b6020026020010181815250506000600460008784815181106118435761184361226a565b60209081029190910181015182528101919091526040016000208054909150611874906001600160a01b0316611b90565b8583815181106118865761188661226a565b602090810291909101015260038101548490818111156118a4578091505b6118ae82426122af565b905060006119288886815181106118c7576118c761226a565b60200260200101518560020180548060200260200160405190810160405280929190818152602001828054801561191d57602002820191906000526020600020905b815481526020019060010190808311611909575b505050505084611ca8565b905080156119cd57600061195c837f00000000000000000000000000000000000000000000000000000000000000006122fd565b9050611968818e612336565b9c50808b8f8151811061197d5761197d61226a565b60200260200101818152505089868151811061199b5761199b61226a565b60200260200101518c8f815181106119b5576119b561226a565b60209081029190910101526119c98e612296565b9d50505b50505050806119db90612296565b90506117e7565b50505b5090919293949596565b604051633cebfa4f60e01b81526004810183905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c9190612563565b91509150816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614611b0557604051630b80380d60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015283166024820152604401610671565b7f0000000000000000000000000000000000000000000000000000000000000000816bffffffffffffffffffffffff161015611b8a57604051632b30b24760e21b81526bffffffffffffffffffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610671565b50505050565b6060611b9b82611cbd565b92915050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080611c245760405163abae3d6d60e01b81526001600160a01b03808716600483015280861660248301528416604482015260648101839052608401610671565b5050505050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080611b8a5760405163abae3d6d60e01b81526001600160a01b0380861660048301523060248301528416604482015260648101839052608401610671565b6000611cb5848484611e0b565b949350505050565b6040805160028082526060808301845292602083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190612598565b81600081518110611d5257611d5261226a565b6020908102919091010152604051637af7347360e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de79190612598565b81600181518110611dfa57611dfa61226a565b602002602001018181525050919050565b60008082118015611e4f575082600081518110611e2a57611e2a61226a565b602002602001015184600081518110611e4557611e4561226a565b6020026020010151115b8015611e8e575082600181518110611e6957611e6961226a565b602002602001015184600181518110611e8457611e8461226a565b6020026020010151115b15611f6b57600083600081518110611ea857611ea861226a565b602002602001015185600081518110611ec357611ec361226a565b6020026020010151611ed591906122af565b9050600084600181518110611eec57611eec61226a565b602002602001015186600181518110611f0757611f0761226a565b6020026020010151611f1991906122af565b9050818111611f6857600084611f3783670de0b6b3a76400006122fd565b611f419190612314565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50505b9392505050565b5080546000825590600052602060002090810190611f909190611fde565b50565b828054828255906000526020600020908101928215611fce579160200282015b82811115611fce578251825591602001919060010190611fb3565b50611fda929150611fde565b5090565b5b80821115611fda5760008155600101611fdf565b6001600160a01b0381168114611f9057600080fd5b60008060008060006080868803121561202057600080fd5b853561202b81611ff3565b9450602086013561203b81611ff3565b935060408601359250606086013567ffffffffffffffff8082111561205f57600080fd5b818801915088601f83011261207357600080fd5b81358181111561208257600080fd5b89602082850101111561209457600080fd5b9699959850939650602001949392505050565b6000602082840312156120b957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156120f0578151875295820195908201906001016120d4565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160a0606084015261213860c08401826120c0565b905060608401516080840152608084015160a08401528091505092915050565b602081526000611f6b60208301846120c0565b60c08152600061217e60c08301896120c0565b6020838203818501528189518084528284019150828160051b850101838c0160005b838110156121ce57601f198784030185526121bc8383516120c0565b948601949250908501906001016121a0565b50508a604088015286810360608801526121e8818b6120c0565b945050505050828103608084015261220081866120c0565b91505061221160a083018415159052565b979650505050505050565b600060208083528351808285015260005b818110156122495785810183015185820160400152820161222d565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122a8576122a8612280565b5060010190565b81810381811115611b9b57611b9b612280565b634e487b7160e01b600052603160045260246000fd5b6060815260006122eb60608301866120c0565b60208301949094525060400152919050565b8082028115828204841417611b9b57611b9b612280565b60008261233157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611b9b57611b9b612280565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561238357612383612349565b60405290565b80516bffffffffffffffffffffffff811681146123a557600080fd5b919050565b80516123a581611ff3565b805163ffffffff811681146123a557600080fd5b8051600681106123a557600080fd5b600082601f8301126123e957600080fd5b8151602067ffffffffffffffff8083111561240657612406612349565b8260051b604051601f19603f8301168101818110848211171561242b5761242b612349565b60405293845285810183019383810192508785111561244957600080fd5b83870191505b8482101561221157612460826123b5565b8352918301919083019061244f565b60006020828403121561248157600080fd5b815167ffffffffffffffff8082111561249957600080fd5b9083019061010082860312156124ae57600080fd5b6124b661235f565b6124bf83612389565b81526124cd602084016123aa565b6020820152604083015160408201526124e8606084016123b5565b60608201526124f9608084016123b5565b608082015261250a60a084016123b5565b60a082015261251b60c084016123c9565b60c082015260e08301518281111561253257600080fd5b61253e878286016123d8565b60e08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b6000806040838503121561257657600080fd5b825161258181611ff3565b915061258f60208401612389565b90509250929050565b6000602082840312156125aa57600080fd5b505191905056fea26469706673582212203a642760d34faf6f4735553cf1254f450da8c520b28b804a01756e29698d486064736f6c63430008150033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063879d90901161010f578063cd25fe38116100a2578063eb338c9611610071578063eb338c96146105cf578063f189e85a146105e2578063f4dce714146105ea578063ffa1ad74146105f257600080fd5b8063cd25fe3814610525578063e1f1176d1461055a578063e77cdcc914610581578063eacdaabc146105a857600080fd5b8063b69ef8a8116100de578063b69ef8a8146104c8578063b6b55f25146104d1578063c2c4c5c1146104e4578063cbcf252a146104fe57600080fd5b8063879d909014610428578063a694fc3a14610431578063a74466ad14610444578063b1508760146104b357600080fd5b806356e760581161018757806375af4b6d1161015657806375af4b6d146103a757806378e06136146103ce578063809cee2f146103e157806382a8ea581461040857600080fd5b806356e760581461031f5780635829c5ec14610332578063592cf3fb1461035957806372f702f31461038057600080fd5b80632e17de78116101c35780632e17de78146102b35780633e732997146102c857806342cde4e8146102d157806352c824f5146102f857600080fd5b8063150b7a02146101ea57806316a751721461023f5780632871405114610274575b600080fd5b6102096101f8366004612008565b630a85bd0160e11b95945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6102667f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610236565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b6102c66102c13660046120a7565b610623565b005b61026660025481565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61026661032d3660046120a7565b610906565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b6102666103dc3660046120a7565b610927565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b61041b6104163660046120a7565b610ac6565b60405161023691906120fb565b61026660015481565b6102c661043f3660046120a7565b610bac565b6104886104523660046120a7565b600460208190526000918252604090912080546001820154600383015492909301546001600160a01b0391821693909116919084565b604080516001600160a01b039586168152949093166020850152918301526060820152608001610236565b6104bb611153565b6040516102369190612158565b61026660005481565b6102c66104df3660046120a7565b6111ab565b6104ec61124d565b6040516102369695949392919061216b565b61029b7f000000000000000000000000000000000000000000000000000000000000000081565b61054a6105333660046120a7565b600090815260046020526040902060030154151590565b6040519015158152602001610236565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666105dd3660046120a7565b61154c565b6104bb61155c565b6102666115b2565b610616604051806040016040528060058152602001640302e312e360dc1b81525081565b604051610236919061221c565b600081815260046020526040902060018101546001600160a01b0316331461067a57600181015460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b60008061068561124d565b95505050505091508061069d5761069a61155c565b91505b60005b82518110156106da57848382815181106106bc576106bc61226a565b602002602001015103156106da576106d381612296565b90506106a0565b6004840154600285018054604080516020808402820181019092528281526000939092909183018282801561072e57602002820191906000526020600020905b81548152602001906001019080831161071a575b5050506003890154895460008c8152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff199081168255600182018054909116905595965091946001600160a01b039091169350915061078f6002830182611f72565b50600060038201819055600490910155600580546107af906001906122af565b815481106107bf576107bf61226a565b9060005260206000200154600586815481106107dd576107dd61226a565b60009182526020909120015560058054806107fa576107fa6122c2565b600082815260208120820160001990810191909155019055604051632142170760e11b8152306004820152336024820152604481018a90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b5050505060008411156108ab576108ab81856115e7565b806001600160a01b0316336001600160a01b03168a7f246ee6115bfd84e00097b16569c2ff2f822026bb9595a82cd2c1e69d4b6ea50c8688876040516108f3939291906122d8565b60405180910390a4505050505050505050565b6003818154811061091657600080fd5b600091825260209091200154905081565b6000818152600460209081526040808320815160a08101835281546001600160a01b03908116825260018301541681850152600282018054845181870281018701865281815287969395860193909291908301828280156109a757602002820191906000526020600020905b815481526020019060010190808311610993575b505050505081526020016003820154815260200160048201548152505090508060800151915080606001516000036109f55760405163e0606b6360e01b815260048101849052602401610671565b6000806000806000610a05611670565b50509450945094509450945060005b84811015610aba5788838281518110610a2f57610a2f61226a565b602002602001015103610aaa5785841115610a85578386838381518110610a5857610a5861226a565b6020026020010151610a6a91906122fd565b610a749190612314565b610a7e9089612336565b9750610aba565b818181518110610a9757610a9761226a565b602002602001015188610a7e9190612336565b610ab381612296565b9050610a14565b50505050505050919050565b610b0a6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081525090565b600082815260046020908152604091829020825160a08101845281546001600160a01b0390811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610b8857602002820191906000526020600020905b815481526020019060010190808311610b74575b50505050508152602001600382015481526020016004820154815250509050919050565b600154600003610bcf5760405163afb0be3360e01b815260040160405180910390fd5b6005547f00000000000000000000000000000000000000000000000000000000000000008103610c345760405163fd20861560e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610671565b60405163ef0e239b60e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ef0e239b90602401600060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc4919081019061246f565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014610d1357604051637ad404bf60e11b815260048101849052602401610671565b7f000000000000000000000000000000000000000000000000000000000000000015801590610d66575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b15610d8757604051637ad404bf60e11b815260048101849052602401610671565b60007f0000000000000000000000000000000000000000000000000000000000000000118015610de15750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15610e0257604051637ad404bf60e11b815260048101849052602401610671565b60048160c001516005811115610e1a57610e1a61254d565b14610e59578060c001516005811115610e3557610e3561254d565b604051633c053f9d60e21b8152600481019190915260248101849052604401610671565b600081602001516001600160a01b0316803b806020016040519081016040528181526000908060200190933c805190602001209050807f000000000000000000000000000000000000000000000000000000000000000014610ede57602082015160405162a2307960e51b81526001600160a01b039091166004820152602401610671565b6003548015610faf5760e083015151818114610f1057604051637ad404bf60e11b815260048101879052602401610671565b60005b81811015610fac578460e001518181518110610f3157610f3161226a565b602002602001015163ffffffff1660038281548110610f5257610f5261226a565b906000526020600020015414610f9c5760038181548110610f7557610f7561226a565b9060005260206000200154604051632ab10b0b60e21b815260040161067191815260200190565b610fa581612296565b9050610f13565b50505b610fcb8584600001516bffffffffffffffffffffffff166119ef565b600085815260046020908152604082209085015181546001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff199182161783556001830180549091163317905590919061102090611b90565b80519091506110389060028401906020840190611f93565b50426003830155600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001879055604051632142170760e11b8152336004820152306024820152604481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e90606401600060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b5050505084602001516001600160a01b0316336001600160a01b0316887f5d43ac9b1b213902df90d405b0006308578486b6c62182c5df202ed572c844e4846040516111429190612158565b60405180910390a450505050505050565b606060038054806020026020016040519081016040528092919081815260200182805480156111a157602002820191906000526020600020905b81548152602001906001019080831161118d575b5050505050905090565b6000816000546111bb9190612336565b90506000826001546111cd9190612336565b6000839055600181905590506112057f0000000000000000000000000000000000000000000000000000000000000000333086611ba1565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b6060806000606080600080600080600080600080611269611670565b9650965096509650965096509650600086111561146d576000878611156113dc5760008060015b8981101561132e57888b8883815181106112ac576112ac61226a565b60200260200101516112be91906122fd565b6112c89190612314565b92506112d48383612336565b91508781815181106112e8576112e861226a565b60200260200101519350826004600086815260200190815260200160002060040160008282546113189190612336565b90915550611327905081612296565b9050611290565b50878a876000815181106113445761134461226a565b602002602001015161135691906122fd565b6113609190612314565b915061136c8282612336565b9050866000815181106113815761138161226a565b60200260200101519250808a11156113aa5761139d818b6122af565b6113a79083612336565b91505b600083815260046020819052604082200180548492906113cb908490612336565b9091555060009a5061146692505050565b60005b87811015611458578581815181106113f9576113f961226a565b602002602001015191508481815181106114155761141561226a565b60200260200101516004600084815260200190815260200160002060040160008282546114429190612336565b90915550611451905081612296565b90506113df565b5061146386896122af565b97505b5060018790555b8051156115375760005b82518110156114f45760008382815181106114945761149461226a565b602002602001015190508282815181106114b0576114b061226a565b60200260200101516004600083815260200190815260200160002060020190805190602001906114e1929190611f93565b5050806114ed90612296565b9050611477565b50426002556040805188815260208101889052600199507f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a15b909c909b509399509097509550929350915050565b6005818154811061091657600080fd5b606060058054806020026020016040519081016040528092919081815260200182805480156111a1576020028201919060005260206000209081548152602001906001019080831161118d575050505050905090565b60007f00000000000000000000000000000000000000000000000000000000000000006002546115e29190612336565b905090565b806000808282546115f891906122af565b9091555061162990507f00000000000000000000000000000000000000000000000000000000000000008383611c2b565b816001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161166491815260200190565b60405180910390a25050565b6002546001549060009081906060908190819081907f00000000000000000000000000000000000000000000000000000000000000006116b082426122af565b101580156116be5750600088115b156119e5576005548067ffffffffffffffff8111156116df576116df612349565b604051908082528060200260200182016040528015611708578160200160208202803683370190505b5093508067ffffffffffffffff81111561172457611724612349565b60405190808252806020026020018201604052801561174d578160200160208202803683370190505b5095508067ffffffffffffffff81111561176957611769612349565b604051908082528060200260200182016040528015611792578160200160208202803683370190505b5094508067ffffffffffffffff8111156117ae576117ae612349565b6040519080825280602002602001820160405280156117e157816020015b60608152602001906001900390816117cc5790505b50925060005b818110156119e257600581815481106118025761180261226a565b906000526020600020015485828151811061181f5761181f61226a565b6020026020010181815250506000600460008784815181106118435761184361226a565b60209081029190910181015182528101919091526040016000208054909150611874906001600160a01b0316611b90565b8583815181106118865761188661226a565b602090810291909101015260038101548490818111156118a4578091505b6118ae82426122af565b905060006119288886815181106118c7576118c761226a565b60200260200101518560020180548060200260200160405190810160405280929190818152602001828054801561191d57602002820191906000526020600020905b815481526020019060010190808311611909575b505050505084611ca8565b905080156119cd57600061195c837f00000000000000000000000000000000000000000000000000000000000000006122fd565b9050611968818e612336565b9c50808b8f8151811061197d5761197d61226a565b60200260200101818152505089868151811061199b5761199b61226a565b60200260200101518c8f815181106119b5576119b561226a565b60209081029190910101526119c98e612296565b9d50505b50505050806119db90612296565b90506117e7565b50505b5090919293949596565b604051633cebfa4f60e01b81526004810183905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c9190612563565b91509150816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614611b0557604051630b80380d60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015283166024820152604401610671565b7f0000000000000000000000000000000000000000000000000000000000000000816bffffffffffffffffffffffff161015611b8a57604051632b30b24760e21b81526bffffffffffffffffffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610671565b50505050565b6060611b9b82611cbd565b92915050565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d1160016000511416171691506000606052806040525080611c245760405163abae3d6d60e01b81526001600160a01b03808716600483015280861660248301528416604482015260648101839052608401610671565b5050505050565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080611b8a5760405163abae3d6d60e01b81526001600160a01b0380861660048301523060248301528416604482015260648101839052608401610671565b6000611cb5848484611e0b565b949350505050565b6040805160028082526060808301845292602083019080368337019050509050816001600160a01b031663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190612598565b81600081518110611d5257611d5261226a565b6020908102919091010152604051637af7347360e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de79190612598565b81600181518110611dfa57611dfa61226a565b602002602001018181525050919050565b60008082118015611e4f575082600081518110611e2a57611e2a61226a565b602002602001015184600081518110611e4557611e4561226a565b6020026020010151115b8015611e8e575082600181518110611e6957611e6961226a565b602002602001015184600181518110611e8457611e8461226a565b6020026020010151115b15611f6b57600083600081518110611ea857611ea861226a565b602002602001015185600081518110611ec357611ec361226a565b6020026020010151611ed591906122af565b9050600084600181518110611eec57611eec61226a565b602002602001015186600181518110611f0757611f0761226a565b6020026020010151611f1991906122af565b9050818111611f6857600084611f3783670de0b6b3a76400006122fd565b611f419190612314565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50505b9392505050565b5080546000825590600052602060002090810190611f909190611fde565b50565b828054828255906000526020600020908101928215611fce579160200282015b82811115611fce578251825591602001919060010190611fb3565b50611fda929150611fde565b5090565b5b80821115611fda5760008155600101611fdf565b6001600160a01b0381168114611f9057600080fd5b60008060008060006080868803121561202057600080fd5b853561202b81611ff3565b9450602086013561203b81611ff3565b935060408601359250606086013567ffffffffffffffff8082111561205f57600080fd5b818801915088601f83011261207357600080fd5b81358181111561208257600080fd5b89602082850101111561209457600080fd5b9699959850939650602001949392505050565b6000602082840312156120b957600080fd5b5035919050565b600081518084526020808501945080840160005b838110156120f0578151875295820195908201906001016120d4565b509495945050505050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015160a0606084015261213860c08401826120c0565b905060608401516080840152608084015160a08401528091505092915050565b602081526000611f6b60208301846120c0565b60c08152600061217e60c08301896120c0565b6020838203818501528189518084528284019150828160051b850101838c0160005b838110156121ce57601f198784030185526121bc8383516120c0565b948601949250908501906001016121a0565b50508a604088015286810360608801526121e8818b6120c0565b945050505050828103608084015261220081866120c0565b91505061221160a083018415159052565b979650505050505050565b600060208083528351808285015260005b818110156122495785810183015185820160400152820161222d565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122a8576122a8612280565b5060010190565b81810381811115611b9b57611b9b612280565b634e487b7160e01b600052603160045260246000fd5b6060815260006122eb60608301866120c0565b60208301949094525060400152919050565b8082028115828204841417611b9b57611b9b612280565b60008261233157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611b9b57611b9b612280565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561238357612383612349565b60405290565b80516bffffffffffffffffffffffff811681146123a557600080fd5b919050565b80516123a581611ff3565b805163ffffffff811681146123a557600080fd5b8051600681106123a557600080fd5b600082601f8301126123e957600080fd5b8151602067ffffffffffffffff8083111561240657612406612349565b8260051b604051601f19603f8301168101818110848211171561242b5761242b612349565b60405293845285810183019383810192508785111561244957600080fd5b83870191505b8482101561221157612460826123b5565b8352918301919083019061244f565b60006020828403121561248157600080fd5b815167ffffffffffffffff8082111561249957600080fd5b9083019061010082860312156124ae57600080fd5b6124b661235f565b6124bf83612389565b81526124cd602084016123aa565b6020820152604083015160408201526124e8606084016123b5565b60608201526124f9608084016123b5565b608082015261250a60a084016123b5565b60a082015261251b60c084016123c9565b60c082015260e08301518281111561253257600080fd5b61253e878286016123d8565b60e08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b6000806040838503121561257657600080fd5b825161258181611ff3565b915061258f60208401612389565b90509250929050565b6000602082840312156125aa57600080fd5b505191905056fea26469706673582212203a642760d34faf6f4735553cf1254f450da8c520b28b804a01756e29698d486064736f6c63430008150033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/abis/0.8.23/ServiceStakingMechUsage.json b/abis/0.8.23/ServiceStakingMechUsage.json new file mode 100644 index 0000000..fbd45d6 --- /dev/null +++ b/abis/0.8.23/ServiceStakingMechUsage.json @@ -0,0 +1,1275 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceStakingMechUsage", + "sourceName": "contracts/mech_usage/ServiceStakingMechUsage.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxNumServices", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardsPerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakingDeposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minNumStakingPeriods", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumInactivityPeriods", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "livenessPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "livenessRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "agentIds", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "internalType": "struct ServiceStakingBase.StakingParams", + "name": "_stakingParams", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_serviceRegistry", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_proxyHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_agentMech", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "LowerThan", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxNumServices", + "type": "uint256" + } + ], + "name": "MaxNumServicesReached", + "type": "error" + }, + { + "inputs": [], + "name": "NoRewardsAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tsProvided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tsExpected", + "type": "uint256" + } + ], + "name": "NotEnoughTimeStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceNotUnstaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceConfiguration", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroMechAgentAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "availableRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "availableRewards", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + } + ], + "name": "ServiceStaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "ServiceUnstaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "multisigs", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceInactivity", + "type": "uint256[]" + } + ], + "name": "ServicesEvicted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "agentIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "agentMech", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "availableRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "balance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "calculateServiceStakingLastReward", + "outputs": [ + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "calculateServiceStakingReward", + "outputs": [ + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "evictServiceIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "configHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAgentIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextRewardCheckpointTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "tsNext", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getServiceIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getServiceInfo", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tsStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "inactivity", + "type": "uint256" + } + ], + "internalType": "struct ServiceInfo", + "name": "sInfo", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getServiceStakingState", + "outputs": [ + { + "internalType": "enum ServiceStakingBase.ServiceStakingState", + "name": "stakingState", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "livenessPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "livenessRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceInfo", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tsStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "inactivity", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxInactivityDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumInactivityPeriods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumServices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStakingDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStakingDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proxyHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsPerSecond", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "serviceRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "setServiceIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "threshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tsCheckpoint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6102406040523480156200001257600080fd5b5060405162003eaf38038062003eaf833981016040819052620000359162000440565b808484848282828260000151600014806200005257506020830151155b8062000060575060a0830151155b806200006e575060c0830151155b806200007c575060e0830151155b806200008a57506060830151155b806200009857506080830151155b15620000b757604051637c946ed760e01b815260040160405180910390fd5b826080015183606001511015620000f9576060830151608084015160405163491a2bb160e01b8152600481019290925260248201526044015b60405180910390fd5b6002836040015110156200013157604080840151905163491a2bb160e01b8152600481019190915260026024820152604401620000f0565b6001600160a01b038216620001595760405163d92e233d60e01b815260040160405180910390fd5b82516080908152602084015160a0908152604085015160c09081529185015160e0908152908501516101005290840151610120908152908401516101409081526001600160a01b0384166101a0529084015161016052830151610180526000805b846101000151518110156200029657818561010001518281518110620001e457620001e462000550565b602002602001015111620002315784610100015181815181106200020c576200020c62000550565b6020026020010151604051632ab10b0b60e21b8152600401620000f091815260200190565b84610100015181815181106200024b576200024b62000550565b602090810291909101015160048054600181810183556000929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905590925001620001ba565b5081620002b657604051637c946ed760e01b815260040160405180910390fd5b6101c0829052610100516060850151620002d1919062000566565b6101e052610100516080850151620002ea919062000566565b610200525050426003555050506001600160a01b03831691506200032290505760405162ca95f960e81b815260040160405180910390fd5b6001600160a01b031661022052506200059292505050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156200037657620003766200033a565b60405290565b600082601f8301126200038e57600080fd5b815160206001600160401b0380831115620003ad57620003ad6200033a565b8260051b604051601f19603f83011681018181108482111715620003d557620003d56200033a565b6040529384526020818701810194908101925087851115620003f657600080fd5b6020870191505b848210156200041857815183529183019190830190620003fd565b979650505050505050565b80516001600160a01b03811681146200043b57600080fd5b919050565b600080600080608085870312156200045757600080fd5b84516001600160401b03808211156200046f57600080fd5b9086019061016082890312156200048557600080fd5b6200048f62000350565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015183811115620004ee57600080fd5b620004fc8b8287016200037c565b9183019190915250610120838101519082015261014092830151928101929092525093506200052e6020860162000423565b925060408501519150620005456060860162000423565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176200058c57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516137db620006d4600039600081816104c10152612bd101526000818161086e01528181611c910152611f0d0152600081816102920152818161098501526109f001526000818161053a01526113a701526000818161075401528181610c90015281816110c701528181611624015261217e015260008181610788015281816111d301526112020152600081816103d1015281816112620152611296015260008181610459015261117801526000818161048d0152612dad01526000818161040501528181611fbf01526122f6015260006105b10152600081816107bc01526120d20152600081816107f001526125f90152600081816103650152818161101c015261106901526137db6000f3fe6080604052600436106102025760003560e01c8063a0ed60e01161011d578063cbcf252a116100b0578063eb338c961161007f578063f4dce71411610064578063f4dce71414610847578063f86ad2b61461085c578063ffa1ad741461089057600080fd5b8063eb338c9614610812578063f189e85a1461083257600080fd5b8063cbcf252a14610742578063e1f1176d14610776578063e77cdcc9146107aa578063eacdaabc146107de57600080fd5b8063b69ef8a8116100ec578063b69ef8a8146106b9578063c2c4c5c1146106cf578063c889921d146106f5578063cae2a5f01461071557600080fd5b8063a0ed60e01461059f578063a694fc3a146105d3578063a74466ad146105f3578063b15087601461069757600080fd5b806356e760581161019557806378e061361161016457806378e0613614610508578063809cee2f1461052857806382a8ea581461055c578063879d90901461058957600080fd5b806356e76058146104275780635829c5ec14610447578063592cf3fb1461047b57806375af4b6d146104af57600080fd5b80632e17de78116101d15780632e17de78146103875780633e732997146103a957806342cde4e8146103bf57806352c824f5146103f357600080fd5b806308ae7e541461028057806314b19c5a146102c7578063150b7a02146102dd57806316a751721461035357600080fd5b3661027b576000346001546102179190612e8b565b90506000346002546102299190612e8b565b60018390556002819055604080513481526020810185905290810182905290915033907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2005b600080fd5b34801561028c57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102b460005481565b3480156102e957600080fd5b506103226102f8366004612ec0565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102be565b34801561035f57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561039357600080fd5b506103a76103a2366004612f5f565b6108e6565b005b3480156103b557600080fd5b506102b460035481565b3480156103cb57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ff57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043357600080fd5b506102b4610442366004612f5f565b610d78565b34801561045357600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561048757600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bb57600080fd5b506104e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102be565b34801561051457600080fd5b506102b4610523366004612f5f565b610d99565b34801561053457600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561056857600080fd5b5061057c610577366004612f5f565b610e70565b6040516102be9190612fb4565b34801561059557600080fd5b506102b460025481565b3480156105ab57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b506103a76105ee366004612f5f565b610f8e565b3480156105ff57600080fd5b5061065761060e366004612f5f565b60056020819052600091825260409091208054600182015460038301546004840154939094015473ffffffffffffffffffffffffffffffffffffffff9283169492909116929085565b6040805173ffffffffffffffffffffffffffffffffffffffff9687168152959094166020860152928401919091526060830152608082015260a0016102be565b3480156106a357600080fd5b506106ac61170c565b6040516102be9190613028565b3480156106c557600080fd5b506102b460015481565b3480156106db57600080fd5b506106e4611764565b6040516102be95949392919061303b565b34801561070157600080fd5b506102b4610710366004612f5f565b611d99565b34801561072157600080fd5b50610735610730366004612f5f565b611e55565b6040516102be9190613137565b34801561074e57600080fd5b506104e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561078257600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b657600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ea57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561081e57600080fd5b506102b461082d366004612f5f565b611f55565b34801561083e57600080fd5b506106ac611f65565b34801561085357600080fd5b506102b4611fbb565b34801561086857600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561089c57600080fd5b506108d96040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102be9190613178565b6000818152600560205260409020600181015473ffffffffffffffffffffffffffffffffffffffff1633146109705760018101546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b6003810154600061098182426131e5565b90507f000000000000000000000000000000000000000000000000000000000000000081111580156109b557506000600254115b15610a1c576040517fba2bbc6b00000000000000000000000000000000000000000000000000000000815260048101859052602481018290527f00000000000000000000000000000000000000000000000000000000000000006044820152606401610967565b600080610a27611764565b945050505091508151600003610a8857610a3f611f65565b9150815167ffffffffffffffff811115610a5b57610a5b6131f8565b604051908082528060200260200182016040528015610a84578160200160208202803683370190505b5090505b6000805b8351821015610ae95787838381518110610aa857610aa8613227565b60200260200101510315610ae95787848381518110610ac957610ac9613227565b602002602001015103610ade57506001610ae9565b816001019150610a8c565b60048701546002880180546040805160208084028201810190925282815260009390929091830182828015610b3d57602002820191906000526020600020905b815481526020019060010190808311610b29575b50508c5460008f815260056020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054909116905595965073ffffffffffffffffffffffffffffffffffffffff9091169493509150610bb190506002830182612ddb565b50600060038201819055600482018190556005909101558315610c405760068054610bde906001906131e5565b81548110610bee57610bee613227565b906000526020600020015460068681548110610c0c57610c0c613227565b6000918252602090912001556006805480610c2957610c29613256565b600190038181906000526020600020016000905590555b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018c905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610cd457600080fd5b505af1158015610ce8573d6000803e3d6000fd5b505050506000831115610cff57610cff8184611ff0565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610d6393929190613285565b60405180910390a45050505050505050505050565b60048181548110610d8857600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610e2657602002820191906000526020600020905b815481526020019060010190808311610e12575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610e5f83611d99565b610e699083612e8b565b9392505050565b610ed56040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610f6057602002820191906000526020600020905b815481526020019060010190808311610f4c575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610fca576040517fafb0be3300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600560205260409020600381015415611017576040517fb4817ce700000000000000000000000000000000000000000000000000000000815260048101839052602401610967565b6006547f00000000000000000000000000000000000000000000000000000000000000008103611095576040517ffd2086150000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610967565b6040517fef0e239b000000000000000000000000000000000000000000000000000000008152600481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef0e239b90602401600060405180830381865afa158015611123573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111699190810190613433565b9050806080015163ffffffff167f0000000000000000000000000000000000000000000000000000000000000000146111d1576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b7f000000000000000000000000000000000000000000000000000000000000000015801590611224575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b1561125e576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b60007f00000000000000000000000000000000000000000000000000000000000000001180156112b85750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b156112f2576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b60048160c00151600581111561130a5761130a613108565b14611362578060c00151600581111561132557611325613108565b6040517ff014fe74000000000000000000000000000000000000000000000000000000008152600481019190915260248101859052604401610967565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461141b5760208201516040517f14460f2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610967565b60045480156115165760e083015151818114611466576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101889052602401610967565b60005b81811015611513578460e00151818151811061148757611487613227565b602002602001015163ffffffff16600482815481106114a8576114a8613227565b90600052602060002001541461150b57600481815481106114cb576114cb613227565b90600052602060002001546040517faac42c2c00000000000000000000000000000000000000000000000000000000815260040161096791815260200190565b600101611469565b50505b6115378684600001516bffffffffffffffffffffffff168560e001516120d0565b6020830151855473ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617875560018701805490911633179055600090611595906122ca565b80519091506115ad9060028801906020840190612dfc565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018790556040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342842e0e90606401600060405180830381600087803b15801561167d57600080fd5b505af1158015611691573d6000803e3d6000fd5b50505050836020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb600054856040516116fb929190613511565b60405180910390a450505050505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561175a57602002820191906000526020600020905b815481526020019060010190808311611746575b5050505050905090565b60608060608060606000806000806000806000806117806122db565b97509750975097509750975097509750606080845167ffffffffffffffff8111156117ad576117ad6131f8565b6040519080825280602002602001820160405280156117d6578160200160208202803683370190505b509a5060008915611b69578967ffffffffffffffff8111156117fa576117fa6131f8565b604051908082528060200260200182016040528015611823578160200160208202803683370190505b5092508967ffffffffffffffff81111561183f5761183f6131f8565b604051908082528060200260200182016040528015611868578160200160208202803683370190505b5091508a891115611a725760008060015b8c811015611965578b8e8b838151811061189557611895613227565b60200260200101516118a7919061352a565b6118b19190613541565b92506118bd8383612e8b565b91508a81815181106118d1576118d1613227565b602002602001015193508a81815181106118ed576118ed613227565b602002602001015186828151811061190757611907613227565b6020026020010181815250508285828151811061192657611926613227565b602002602001018181525050826005600086815260200190815260200160002060040160008282546119589190612e8b565b9091555050600101611879565b508a8d8a60008151811061197b5761197b613227565b602002602001015161198d919061352a565b6119979190613541565b91506119a38282612e8b565b9050896000815181106119b8576119b8613227565b60200260200101519250896000815181106119d5576119d5613227565b6020026020010151856000815181106119f0576119f0613227565b602002602001018181525050808d1115611a1b57611a0e818e6131e5565b611a189083612e8b565b91505b8184600081518110611a2f57611a2f613227565b60200260200101818152505081600560008581526020019081526020016000206004016000828254611a619190612e8b565b9091555060009d50611b6392505050565b60005b8a811015611b5557888181518110611a8f57611a8f613227565b60200260200101519150888181518110611aab57611aab613227565b6020026020010151848281518110611ac557611ac5613227565b602002602001018181525050878181518110611ae357611ae3613227565b6020026020010151838281518110611afd57611afd613227565b602002602001018181525050878181518110611b1b57611b1b613227565b6020026020010151600560008481526020019081526020016000206004016000828254611b489190612e8b565b9091555050600101611a75565b50611b60898c6131e5565b9a505b60028b90555b855115611d83576000995060005b8651811015611d1c57868181518110611b9257611b92613227565b60200260200101519150858181518110611bae57611bae613227565b6020026020010151600560008481526020019081526020016000206002019080519060200190611bdf929190612dfc565b506000858281518110611bf457611bf4613227565b60200260200101511115611d0157848181518110611c1457611c14613227565b60200260200101516005600084815260200190815260200160002060050154611c3d9190612e8b565b858281518110611c4f57611c4f613227565b602002602001018181525050848181518110611c6d57611c6d613227565b602002602001015160056000848152602001908152602001600020600501819055507f0000000000000000000000000000000000000000000000000000000000000000858281518110611cc257611cc2613227565b60200260200101511115611cfc57818d8281518110611ce357611ce3613227565b60209081029190910101528a611cf88161357c565b9b50505b611d14565b6000828152600560208190526040822001555b600101611b77565b508915611d2e57611d2e8c858c6126e6565b42600355600054611d40816001612e8b565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee66690611d79908f90889088906135b4565b60405180910390a2505b50939e929d509b50919950969750505050505050565b600080600080600080611daa6122db565b5050509450945094509450945060005b84811015611e4a5787838281518110611dd557611dd5613227565b602002602001015103611e425785841115611e21578386838381518110611dfe57611dfe613227565b6020026020010151611e10919061352a565b611e1a9190613541565b9650611e4a565b818181518110611e3357611e33613227565b60200260200101519650611e4a565b600101611dba565b505050505050919050565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611ee257602002820191906000526020600020905b815481526020019060010190808311611ece575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611f405760029150611f4f565b606081015115611f4f57600191505b50919050565b60068181548110610d8857600080fd5b6060600680548060200260200160405190810160405280929190818152602001828054801561175a5760200282019190600052602060002090815481526020019060010190808311611746575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611feb9190612e8b565b905090565b806001600082825461200291906131e5565b909155505060405160009073ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d806000811461205f576040519150601f19603f3d011682016040523d82523d6000602084013e612064565b606091505b50509050806120cb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526000600482015230602482015273ffffffffffffffffffffffffffffffffffffffff8416604482015260648101839052608401610967565b505050565b7f000000000000000000000000000000000000000000000000000000000000000080831015612135576040517f491a2bb10000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610967565b6040517f1de286ba00000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631de286ba90602401600060405180830381865afa1580156121c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261220b91908101906135e9565b9150915060005b828110156122c1578382828151811061222d5761222d613227565b6020026020010151602001516bffffffffffffffffffffffff1610156122b95781818151811061225f5761225f613227565b602002602001015160200151846040517f491a2bb10000000000000000000000000000000000000000000000000000000081526004016109679291906bffffffffffffffffffffffff929092168252602082015260400190565b600101612212565b50505050505050565b60606122d582612adf565b92915050565b600080600060608060608060606000600354905060025498507f0000000000000000000000000000000000000000000000000000000000000000814261232191906131e5565b1015801561232f5750600089115b156126db576006548067ffffffffffffffff811115612350576123506131f8565b604051908082528060200260200182016040528015612379578160200160208202803683370190505b5094508067ffffffffffffffff811115612395576123956131f8565b6040519080825280602002602001820160405280156123be578160200160208202803683370190505b5096508067ffffffffffffffff8111156123da576123da6131f8565b604051908082528060200260200182016040528015612403578160200160208202803683370190505b5095508067ffffffffffffffff81111561241f5761241f6131f8565b60405190808252806020026020018201604052801561245257816020015b606081526020019060019003908161243d5790505b5093508067ffffffffffffffff81111561246e5761246e6131f8565b604051908082528060200260200182016040528015612497578160200160208202803683370190505b50925060005b818110156126d857600681815481106124b8576124b8613227565b90600052602060002001548682815181106124d5576124d5613227565b6020026020010181815250506000600560008884815181106124f9576124f9613227565b602090810291909101810151825281019190915260400160002080549091506125379073ffffffffffffffffffffffffffffffffffffffff166122ca565b86838151811061254957612549613227565b60209081029190910101526003810154849081811115612567578091505b61257182426131e5565b905060006125eb89868151811061258a5761258a613227565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156125e057602002820191906000526020600020905b8154815260200190600101908083116125cc575b505050505084612c60565b905080156126a95761261d827f000000000000000000000000000000000000000000000000000000000000000061352a565b8b8f8151811061262f5761262f613227565b6020026020010181815250508a8e8151811061264d5761264d613227565b60200260200101518d6126609190612e8b565b9c5089858151811061267457612674613227565b60200260200101518c8f8151811061268e5761268e613227565b60209081029190910101526126a28e61357c565b9d506126c9565b818886815181106126bc576126bc613227565b6020026020010181815250505b5050505080600101905061249d565b50505b509091929394959697565b825160008267ffffffffffffffff811115612703576127036131f8565b60405190808252806020026020018201604052801561272c578160200160208202803683370190505b50905060008367ffffffffffffffff81111561274a5761274a6131f8565b604051908082528060200260200182016040528015612773578160200160208202803683370190505b50905060008467ffffffffffffffff811115612791576127916131f8565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b50905060008567ffffffffffffffff8111156127d8576127d86131f8565b604051908082528060200260200182016040528015612801578160200160208202803683370190505b50905060008667ffffffffffffffff81111561281f5761281f6131f8565b604051908082528060200260200182016040528015612848578160200160208202803683370190505b50905060008060005b888110156129dc5760008c828151811061286d5761286d613227565b602002602001015111156129d4578b818151811061288d5761288d613227565b60200260200101519150818884815181106128aa576128aa613227565b60209081029190910181019190915260008381526005909152604090206001810154885173ffffffffffffffffffffffffffffffffffffffff909116908990869081106128f9576128f9613227565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101528154885191169088908690811061293557612935613227565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b828151811061298157612981613227565b602002602001015186858151811061299b5761299b613227565b602002602001018181525050818585815181106129ba576129ba613227565b6020908102919091010152836129cf8161357c565b945050505b600101612851565b50885b8015612a9157886129ef816136b8565b99506000905084612a016001846131e5565b81518110612a1157612a11613227565b6020026020010151905060068a81548110612a2e57612a2e613227565b906000526020600020015460068281548110612a4c57612a4c613227565b6000918252602090912001556006805480612a6957612a69613256565b600190038181906000526020600020016000905590555080612a8a906136b8565b90506129df565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd5695288888888604051612aca9493929190613734565b60405180910390a25050505050505050505050565b60408051600280825260608083018452926020830190803683370190505090508173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e919061378c565b81600081518110612b8157612b81613227565b60209081029190910101526040517f7af7347300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015612c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3c919061378c565b81600181518110612c4f57612c4f613227565b602002602001018181525050919050565b6000612c6d848484612c75565b949350505050565b60008082118015612cb9575082600081518110612c9457612c94613227565b602002602001015184600081518110612caf57612caf613227565b6020026020010151115b8015612cf8575082600181518110612cd357612cd3613227565b602002602001015184600181518110612cee57612cee613227565b6020026020010151115b15610e6957600083600081518110612d1257612d12613227565b602002602001015185600081518110612d2d57612d2d613227565b6020026020010151612d3f91906131e5565b9050600084600181518110612d5657612d56613227565b602002602001015186600181518110612d7157612d71613227565b6020026020010151612d8391906131e5565b9050818111612dd257600084612da183670de0b6b3a764000061352a565b612dab9190613541565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50509392505050565b5080546000825590600052602060002090810190612df99190612e47565b50565b828054828255906000526020600020908101928215612e37579160200282015b82811115612e37578251825591602001919060010190612e1c565b50612e43929150612e47565b5090565b5b80821115612e435760008155600101612e48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156122d5576122d5612e5c565b73ffffffffffffffffffffffffffffffffffffffff81168114612df957600080fd5b600080600080600060808688031215612ed857600080fd5b8535612ee381612e9e565b94506020860135612ef381612e9e565b935060408601359250606086013567ffffffffffffffff80821115612f1757600080fd5b818801915088601f830112612f2b57600080fd5b813581811115612f3a57600080fd5b896020828501011115612f4c57600080fd5b9699959850939650602001949392505050565b600060208284031215612f7157600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015612fa957815187529582019590820190600101612f8d565b509495945050505050565b60208152600073ffffffffffffffffffffffffffffffffffffffff80845116602084015280602085015116604084015250604083015160c06060840152612ffe60e0840182612f78565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610e696020830184612f78565b60a08152600061304e60a0830188612f78565b6020838203818501528188518084528284019150828160051b850101838b0160005b838110156130bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526130aa838351612f78565b94860194925090850190600101613070565b505086810360408801526130d0818b612f78565b94505050505082810360608401526130e88186612f78565b905082810360808401526130fc8185612f78565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613172577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b818110156131a65785810183015185820160400152820161318a565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b818103818111156122d5576122d5612e5c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815260606020820152600061329e6060830185612f78565b9050826040830152949350505050565b604051610100810167ffffffffffffffff811182821017156132d2576132d26131f8565b60405290565b6040805190810167ffffffffffffffff811182821017156132d2576132d26131f8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613342576133426131f8565b604052919050565b80516bffffffffffffffffffffffff8116811461336657600080fd5b919050565b805161336681612e9e565b805163ffffffff8116811461336657600080fd5b80516006811061336657600080fd5b600067ffffffffffffffff8211156133b3576133b36131f8565b5060051b60200190565b600082601f8301126133ce57600080fd5b815160206133e36133de83613399565b6132fb565b8083825260208201915060208460051b87010193508684111561340557600080fd5b602086015b848110156134285761341b81613376565b835291830191830161340a565b509695505050505050565b60006020828403121561344557600080fd5b815167ffffffffffffffff8082111561345d57600080fd5b90830190610100828603121561347257600080fd5b61347a6132ae565b6134838361334a565b81526134916020840161336b565b6020820152604083015160408201526134ac60608401613376565b60608201526134bd60808401613376565b60808201526134ce60a08401613376565b60a08201526134df60c0840161338a565b60c082015260e0830151828111156134f657600080fd5b613502878286016133bd565b60e08301525095945050505050565b828152604060208201526000612c6d6040830184612f78565b80820281158282048414176122d5576122d5612e5c565b600082613577577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ad576135ad612e5c565b5060010190565b8381526060602082015260006135cd6060830185612f78565b82810360408401526135df8185612f78565b9695505050505050565b60008060408084860312156135fd57600080fd5b8351925060208085015167ffffffffffffffff81111561361c57600080fd5b8501601f8101871361362d57600080fd5b805161363b6133de82613399565b81815260069190911b8201830190838101908983111561365a57600080fd5b928401925b828410156136a85785848b0312156136775760008081fd5b61367f6132d8565b61368885613376565b815261369586860161334a565b818701528252928501929084019061365f565b8096505050505050509250929050565b6000816136c7576136c7612e5c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008151808452602080850194506020840160005b83811015612fa957815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613702565b6080815260006137476080830187612f78565b828103602084015261375981876136ed565b9050828103604084015261376d81866136ed565b905082810360608401526137818185612f78565b979650505050505050565b60006020828403121561379e57600080fd5b505191905056fea26469706673582212205e541a7c167a01375a45a026d229c6304dd5367ef8e906e4a1fff93ef167c11264736f6c63430008170033", + "deployedBytecode": "0x6080604052600436106102025760003560e01c8063a0ed60e01161011d578063cbcf252a116100b0578063eb338c961161007f578063f4dce71411610064578063f4dce71414610847578063f86ad2b61461085c578063ffa1ad741461089057600080fd5b8063eb338c9614610812578063f189e85a1461083257600080fd5b8063cbcf252a14610742578063e1f1176d14610776578063e77cdcc9146107aa578063eacdaabc146107de57600080fd5b8063b69ef8a8116100ec578063b69ef8a8146106b9578063c2c4c5c1146106cf578063c889921d146106f5578063cae2a5f01461071557600080fd5b8063a0ed60e01461059f578063a694fc3a146105d3578063a74466ad146105f3578063b15087601461069757600080fd5b806356e760581161019557806378e061361161016457806378e0613614610508578063809cee2f1461052857806382a8ea581461055c578063879d90901461058957600080fd5b806356e76058146104275780635829c5ec14610447578063592cf3fb1461047b57806375af4b6d146104af57600080fd5b80632e17de78116101d15780632e17de78146103875780633e732997146103a957806342cde4e8146103bf57806352c824f5146103f357600080fd5b806308ae7e541461028057806314b19c5a146102c7578063150b7a02146102dd57806316a751721461035357600080fd5b3661027b576000346001546102179190612e8b565b90506000346002546102299190612e8b565b60018390556002819055604080513481526020810185905290810182905290915033907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2005b600080fd5b34801561028c57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102b460005481565b3480156102e957600080fd5b506103226102f8366004612ec0565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102be565b34801561035f57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561039357600080fd5b506103a76103a2366004612f5f565b6108e6565b005b3480156103b557600080fd5b506102b460035481565b3480156103cb57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ff57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043357600080fd5b506102b4610442366004612f5f565b610d78565b34801561045357600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561048757600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bb57600080fd5b506104e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102be565b34801561051457600080fd5b506102b4610523366004612f5f565b610d99565b34801561053457600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561056857600080fd5b5061057c610577366004612f5f565b610e70565b6040516102be9190612fb4565b34801561059557600080fd5b506102b460025481565b3480156105ab57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b506103a76105ee366004612f5f565b610f8e565b3480156105ff57600080fd5b5061065761060e366004612f5f565b60056020819052600091825260409091208054600182015460038301546004840154939094015473ffffffffffffffffffffffffffffffffffffffff9283169492909116929085565b6040805173ffffffffffffffffffffffffffffffffffffffff9687168152959094166020860152928401919091526060830152608082015260a0016102be565b3480156106a357600080fd5b506106ac61170c565b6040516102be9190613028565b3480156106c557600080fd5b506102b460015481565b3480156106db57600080fd5b506106e4611764565b6040516102be95949392919061303b565b34801561070157600080fd5b506102b4610710366004612f5f565b611d99565b34801561072157600080fd5b50610735610730366004612f5f565b611e55565b6040516102be9190613137565b34801561074e57600080fd5b506104e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561078257600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b657600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ea57600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561081e57600080fd5b506102b461082d366004612f5f565b611f55565b34801561083e57600080fd5b506106ac611f65565b34801561085357600080fd5b506102b4611fbb565b34801561086857600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561089c57600080fd5b506108d96040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102be9190613178565b6000818152600560205260409020600181015473ffffffffffffffffffffffffffffffffffffffff1633146109705760018101546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b6003810154600061098182426131e5565b90507f000000000000000000000000000000000000000000000000000000000000000081111580156109b557506000600254115b15610a1c576040517fba2bbc6b00000000000000000000000000000000000000000000000000000000815260048101859052602481018290527f00000000000000000000000000000000000000000000000000000000000000006044820152606401610967565b600080610a27611764565b945050505091508151600003610a8857610a3f611f65565b9150815167ffffffffffffffff811115610a5b57610a5b6131f8565b604051908082528060200260200182016040528015610a84578160200160208202803683370190505b5090505b6000805b8351821015610ae95787838381518110610aa857610aa8613227565b60200260200101510315610ae95787848381518110610ac957610ac9613227565b602002602001015103610ade57506001610ae9565b816001019150610a8c565b60048701546002880180546040805160208084028201810190925282815260009390929091830182828015610b3d57602002820191906000526020600020905b815481526020019060010190808311610b29575b50508c5460008f815260056020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054909116905595965073ffffffffffffffffffffffffffffffffffffffff9091169493509150610bb190506002830182612ddb565b50600060038201819055600482018190556005909101558315610c405760068054610bde906001906131e5565b81548110610bee57610bee613227565b906000526020600020015460068681548110610c0c57610c0c613227565b6000918252602090912001556006805480610c2957610c29613256565b600190038181906000526020600020016000905590555b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018c905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610cd457600080fd5b505af1158015610ce8573d6000803e3d6000fd5b505050506000831115610cff57610cff8184611ff0565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610d6393929190613285565b60405180910390a45050505050505050505050565b60048181548110610d8857600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610e2657602002820191906000526020600020905b815481526020019060010190808311610e12575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610e5f83611d99565b610e699083612e8b565b9392505050565b610ed56040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610f6057602002820191906000526020600020905b815481526020019060010190808311610f4c575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610fca576040517fafb0be3300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600560205260409020600381015415611017576040517fb4817ce700000000000000000000000000000000000000000000000000000000815260048101839052602401610967565b6006547f00000000000000000000000000000000000000000000000000000000000000008103611095576040517ffd2086150000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610967565b6040517fef0e239b000000000000000000000000000000000000000000000000000000008152600481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef0e239b90602401600060405180830381865afa158015611123573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111699190810190613433565b9050806080015163ffffffff167f0000000000000000000000000000000000000000000000000000000000000000146111d1576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b7f000000000000000000000000000000000000000000000000000000000000000015801590611224575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b1561125e576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b60007f00000000000000000000000000000000000000000000000000000000000000001180156112b85750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b156112f2576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101859052602401610967565b60048160c00151600581111561130a5761130a613108565b14611362578060c00151600581111561132557611325613108565b6040517ff014fe74000000000000000000000000000000000000000000000000000000008152600481019190915260248101859052604401610967565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c805190602001209050807f00000000000000000000000000000000000000000000000000000000000000001461141b5760208201516040517f14460f2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610967565b60045480156115165760e083015151818114611466576040517ff5a8097e00000000000000000000000000000000000000000000000000000000815260048101889052602401610967565b60005b81811015611513578460e00151818151811061148757611487613227565b602002602001015163ffffffff16600482815481106114a8576114a8613227565b90600052602060002001541461150b57600481815481106114cb576114cb613227565b90600052602060002001546040517faac42c2c00000000000000000000000000000000000000000000000000000000815260040161096791815260200190565b600101611469565b50505b6115378684600001516bffffffffffffffffffffffff168560e001516120d0565b6020830151855473ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617875560018701805490911633179055600090611595906122ca565b80519091506115ad9060028801906020840190612dfc565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018790556040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342842e0e90606401600060405180830381600087803b15801561167d57600080fd5b505af1158015611691573d6000803e3d6000fd5b50505050836020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb600054856040516116fb929190613511565b60405180910390a450505050505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561175a57602002820191906000526020600020905b815481526020019060010190808311611746575b5050505050905090565b60608060608060606000806000806000806000806117806122db565b97509750975097509750975097509750606080845167ffffffffffffffff8111156117ad576117ad6131f8565b6040519080825280602002602001820160405280156117d6578160200160208202803683370190505b509a5060008915611b69578967ffffffffffffffff8111156117fa576117fa6131f8565b604051908082528060200260200182016040528015611823578160200160208202803683370190505b5092508967ffffffffffffffff81111561183f5761183f6131f8565b604051908082528060200260200182016040528015611868578160200160208202803683370190505b5091508a891115611a725760008060015b8c811015611965578b8e8b838151811061189557611895613227565b60200260200101516118a7919061352a565b6118b19190613541565b92506118bd8383612e8b565b91508a81815181106118d1576118d1613227565b602002602001015193508a81815181106118ed576118ed613227565b602002602001015186828151811061190757611907613227565b6020026020010181815250508285828151811061192657611926613227565b602002602001018181525050826005600086815260200190815260200160002060040160008282546119589190612e8b565b9091555050600101611879565b508a8d8a60008151811061197b5761197b613227565b602002602001015161198d919061352a565b6119979190613541565b91506119a38282612e8b565b9050896000815181106119b8576119b8613227565b60200260200101519250896000815181106119d5576119d5613227565b6020026020010151856000815181106119f0576119f0613227565b602002602001018181525050808d1115611a1b57611a0e818e6131e5565b611a189083612e8b565b91505b8184600081518110611a2f57611a2f613227565b60200260200101818152505081600560008581526020019081526020016000206004016000828254611a619190612e8b565b9091555060009d50611b6392505050565b60005b8a811015611b5557888181518110611a8f57611a8f613227565b60200260200101519150888181518110611aab57611aab613227565b6020026020010151848281518110611ac557611ac5613227565b602002602001018181525050878181518110611ae357611ae3613227565b6020026020010151838281518110611afd57611afd613227565b602002602001018181525050878181518110611b1b57611b1b613227565b6020026020010151600560008481526020019081526020016000206004016000828254611b489190612e8b565b9091555050600101611a75565b50611b60898c6131e5565b9a505b60028b90555b855115611d83576000995060005b8651811015611d1c57868181518110611b9257611b92613227565b60200260200101519150858181518110611bae57611bae613227565b6020026020010151600560008481526020019081526020016000206002019080519060200190611bdf929190612dfc565b506000858281518110611bf457611bf4613227565b60200260200101511115611d0157848181518110611c1457611c14613227565b60200260200101516005600084815260200190815260200160002060050154611c3d9190612e8b565b858281518110611c4f57611c4f613227565b602002602001018181525050848181518110611c6d57611c6d613227565b602002602001015160056000848152602001908152602001600020600501819055507f0000000000000000000000000000000000000000000000000000000000000000858281518110611cc257611cc2613227565b60200260200101511115611cfc57818d8281518110611ce357611ce3613227565b60209081029190910101528a611cf88161357c565b9b50505b611d14565b6000828152600560208190526040822001555b600101611b77565b508915611d2e57611d2e8c858c6126e6565b42600355600054611d40816001612e8b565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee66690611d79908f90889088906135b4565b60405180910390a2505b50939e929d509b50919950969750505050505050565b600080600080600080611daa6122db565b5050509450945094509450945060005b84811015611e4a5787838281518110611dd557611dd5613227565b602002602001015103611e425785841115611e21578386838381518110611dfe57611dfe613227565b6020026020010151611e10919061352a565b611e1a9190613541565b9650611e4a565b818181518110611e3357611e33613227565b60200260200101519650611e4a565b600101611dba565b505050505050919050565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611ee257602002820191906000526020600020905b815481526020019060010190808311611ece575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611f405760029150611f4f565b606081015115611f4f57600191505b50919050565b60068181548110610d8857600080fd5b6060600680548060200260200160405190810160405280929190818152602001828054801561175a5760200282019190600052602060002090815481526020019060010190808311611746575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611feb9190612e8b565b905090565b806001600082825461200291906131e5565b909155505060405160009073ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d806000811461205f576040519150601f19603f3d011682016040523d82523d6000602084013e612064565b606091505b50509050806120cb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526000600482015230602482015273ffffffffffffffffffffffffffffffffffffffff8416604482015260648101839052608401610967565b505050565b7f000000000000000000000000000000000000000000000000000000000000000080831015612135576040517f491a2bb10000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610967565b6040517f1de286ba00000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631de286ba90602401600060405180830381865afa1580156121c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261220b91908101906135e9565b9150915060005b828110156122c1578382828151811061222d5761222d613227565b6020026020010151602001516bffffffffffffffffffffffff1610156122b95781818151811061225f5761225f613227565b602002602001015160200151846040517f491a2bb10000000000000000000000000000000000000000000000000000000081526004016109679291906bffffffffffffffffffffffff929092168252602082015260400190565b600101612212565b50505050505050565b60606122d582612adf565b92915050565b600080600060608060608060606000600354905060025498507f0000000000000000000000000000000000000000000000000000000000000000814261232191906131e5565b1015801561232f5750600089115b156126db576006548067ffffffffffffffff811115612350576123506131f8565b604051908082528060200260200182016040528015612379578160200160208202803683370190505b5094508067ffffffffffffffff811115612395576123956131f8565b6040519080825280602002602001820160405280156123be578160200160208202803683370190505b5096508067ffffffffffffffff8111156123da576123da6131f8565b604051908082528060200260200182016040528015612403578160200160208202803683370190505b5095508067ffffffffffffffff81111561241f5761241f6131f8565b60405190808252806020026020018201604052801561245257816020015b606081526020019060019003908161243d5790505b5093508067ffffffffffffffff81111561246e5761246e6131f8565b604051908082528060200260200182016040528015612497578160200160208202803683370190505b50925060005b818110156126d857600681815481106124b8576124b8613227565b90600052602060002001548682815181106124d5576124d5613227565b6020026020010181815250506000600560008884815181106124f9576124f9613227565b602090810291909101810151825281019190915260400160002080549091506125379073ffffffffffffffffffffffffffffffffffffffff166122ca565b86838151811061254957612549613227565b60209081029190910101526003810154849081811115612567578091505b61257182426131e5565b905060006125eb89868151811061258a5761258a613227565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156125e057602002820191906000526020600020905b8154815260200190600101908083116125cc575b505050505084612c60565b905080156126a95761261d827f000000000000000000000000000000000000000000000000000000000000000061352a565b8b8f8151811061262f5761262f613227565b6020026020010181815250508a8e8151811061264d5761264d613227565b60200260200101518d6126609190612e8b565b9c5089858151811061267457612674613227565b60200260200101518c8f8151811061268e5761268e613227565b60209081029190910101526126a28e61357c565b9d506126c9565b818886815181106126bc576126bc613227565b6020026020010181815250505b5050505080600101905061249d565b50505b509091929394959697565b825160008267ffffffffffffffff811115612703576127036131f8565b60405190808252806020026020018201604052801561272c578160200160208202803683370190505b50905060008367ffffffffffffffff81111561274a5761274a6131f8565b604051908082528060200260200182016040528015612773578160200160208202803683370190505b50905060008467ffffffffffffffff811115612791576127916131f8565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b50905060008567ffffffffffffffff8111156127d8576127d86131f8565b604051908082528060200260200182016040528015612801578160200160208202803683370190505b50905060008667ffffffffffffffff81111561281f5761281f6131f8565b604051908082528060200260200182016040528015612848578160200160208202803683370190505b50905060008060005b888110156129dc5760008c828151811061286d5761286d613227565b602002602001015111156129d4578b818151811061288d5761288d613227565b60200260200101519150818884815181106128aa576128aa613227565b60209081029190910181019190915260008381526005909152604090206001810154885173ffffffffffffffffffffffffffffffffffffffff909116908990869081106128f9576128f9613227565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101528154885191169088908690811061293557612935613227565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b828151811061298157612981613227565b602002602001015186858151811061299b5761299b613227565b602002602001018181525050818585815181106129ba576129ba613227565b6020908102919091010152836129cf8161357c565b945050505b600101612851565b50885b8015612a9157886129ef816136b8565b99506000905084612a016001846131e5565b81518110612a1157612a11613227565b6020026020010151905060068a81548110612a2e57612a2e613227565b906000526020600020015460068281548110612a4c57612a4c613227565b6000918252602090912001556006805480612a6957612a69613256565b600190038181906000526020600020016000905590555080612a8a906136b8565b90506129df565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd5695288888888604051612aca9493929190613734565b60405180910390a25050505050505050505050565b60408051600280825260608083018452926020830190803683370190505090508173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6e919061378c565b81600081518110612b8157612b81613227565b60209081029190910101526040517f7af7347300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015612c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3c919061378c565b81600181518110612c4f57612c4f613227565b602002602001018181525050919050565b6000612c6d848484612c75565b949350505050565b60008082118015612cb9575082600081518110612c9457612c94613227565b602002602001015184600081518110612caf57612caf613227565b6020026020010151115b8015612cf8575082600181518110612cd357612cd3613227565b602002602001015184600181518110612cee57612cee613227565b6020026020010151115b15610e6957600083600081518110612d1257612d12613227565b602002602001015185600081518110612d2d57612d2d613227565b6020026020010151612d3f91906131e5565b9050600084600181518110612d5657612d56613227565b602002602001015186600181518110612d7157612d71613227565b6020026020010151612d8391906131e5565b9050818111612dd257600084612da183670de0b6b3a764000061352a565b612dab9190613541565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50509392505050565b5080546000825590600052602060002090810190612df99190612e47565b50565b828054828255906000526020600020908101928215612e37579160200282015b82811115612e37578251825591602001919060010190612e1c565b50612e43929150612e47565b5090565b5b80821115612e435760008155600101612e48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156122d5576122d5612e5c565b73ffffffffffffffffffffffffffffffffffffffff81168114612df957600080fd5b600080600080600060808688031215612ed857600080fd5b8535612ee381612e9e565b94506020860135612ef381612e9e565b935060408601359250606086013567ffffffffffffffff80821115612f1757600080fd5b818801915088601f830112612f2b57600080fd5b813581811115612f3a57600080fd5b896020828501011115612f4c57600080fd5b9699959850939650602001949392505050565b600060208284031215612f7157600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015612fa957815187529582019590820190600101612f8d565b509495945050505050565b60208152600073ffffffffffffffffffffffffffffffffffffffff80845116602084015280602085015116604084015250604083015160c06060840152612ffe60e0840182612f78565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610e696020830184612f78565b60a08152600061304e60a0830188612f78565b6020838203818501528188518084528284019150828160051b850101838b0160005b838110156130bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526130aa838351612f78565b94860194925090850190600101613070565b505086810360408801526130d0818b612f78565b94505050505082810360608401526130e88186612f78565b905082810360808401526130fc8185612f78565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613172577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b818110156131a65785810183015185820160400152820161318a565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b818103818111156122d5576122d5612e5c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815260606020820152600061329e6060830185612f78565b9050826040830152949350505050565b604051610100810167ffffffffffffffff811182821017156132d2576132d26131f8565b60405290565b6040805190810167ffffffffffffffff811182821017156132d2576132d26131f8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613342576133426131f8565b604052919050565b80516bffffffffffffffffffffffff8116811461336657600080fd5b919050565b805161336681612e9e565b805163ffffffff8116811461336657600080fd5b80516006811061336657600080fd5b600067ffffffffffffffff8211156133b3576133b36131f8565b5060051b60200190565b600082601f8301126133ce57600080fd5b815160206133e36133de83613399565b6132fb565b8083825260208201915060208460051b87010193508684111561340557600080fd5b602086015b848110156134285761341b81613376565b835291830191830161340a565b509695505050505050565b60006020828403121561344557600080fd5b815167ffffffffffffffff8082111561345d57600080fd5b90830190610100828603121561347257600080fd5b61347a6132ae565b6134838361334a565b81526134916020840161336b565b6020820152604083015160408201526134ac60608401613376565b60608201526134bd60808401613376565b60808201526134ce60a08401613376565b60a08201526134df60c0840161338a565b60c082015260e0830151828111156134f657600080fd5b613502878286016133bd565b60e08301525095945050505050565b828152604060208201526000612c6d6040830184612f78565b80820281158282048414176122d5576122d5612e5c565b600082613577577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ad576135ad612e5c565b5060010190565b8381526060602082015260006135cd6060830185612f78565b82810360408401526135df8185612f78565b9695505050505050565b60008060408084860312156135fd57600080fd5b8351925060208085015167ffffffffffffffff81111561361c57600080fd5b8501601f8101871361362d57600080fd5b805161363b6133de82613399565b81815260069190911b8201830190838101908983111561365a57600080fd5b928401925b828410156136a85785848b0312156136775760008081fd5b61367f6132d8565b61368885613376565b815261369586860161334a565b818701528252928501929084019061365f565b8096505050505050509250929050565b6000816136c7576136c7612e5c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008151808452602080850194506020840160005b83811015612fa957815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613702565b6080815260006137476080830187612f78565b828103602084015261375981876136ed565b9050828103604084015261376d81866136ed565b905082810360608401526137818185612f78565b979650505050505050565b60006020828403121561379e57600080fd5b505191905056fea26469706673582212205e541a7c167a01375a45a026d229c6304dd5367ef8e906e4a1fff93ef167c11264736f6c63430008170033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.23/ServiceStakingTokenMechUsage.json b/abis/0.8.23/ServiceStakingTokenMechUsage.json new file mode 100644 index 0000000..b96d03a --- /dev/null +++ b/abis/0.8.23/ServiceStakingTokenMechUsage.json @@ -0,0 +1,1378 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ServiceStakingTokenMechUsage", + "sourceName": "contracts/mech_usage/ServiceStakingTokenMechUsage.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxNumServices", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardsPerSecond", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakingDeposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minNumStakingPeriods", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumInactivityPeriods", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "livenessPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "livenessRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numAgentInstances", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "agentIds", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "configHash", + "type": "bytes32" + } + ], + "internalType": "struct ServiceStakingBase.StakingParams", + "name": "_stakingParams", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_serviceRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_serviceRegistryTokenUtility", + "type": "address" + }, + { + "internalType": "address", + "name": "_stakingToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_proxyHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_agentMech", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "LowerThan", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxNumServices", + "type": "uint256" + } + ], + "name": "MaxNumServicesReached", + "type": "error" + }, + { + "inputs": [], + "name": "NoRewardsAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tsProvided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tsExpected", + "type": "uint256" + } + ], + "name": "NotEnoughTimeStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceNotUnstaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TokenTransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "ValueLowerThan", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceConfiguration", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "address", + "name": "provided", + "type": "address" + } + ], + "name": "WrongStakingToken", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroMechAgentAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "availableRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "availableRewards", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + } + ], + "name": "ServiceStaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "ServiceUnstaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "multisigs", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "serviceInactivity", + "type": "uint256[]" + } + ], + "name": "ServicesEvicted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "agentIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "agentMech", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "availableRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "balance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "calculateServiceStakingLastReward", + "outputs": [ + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "calculateServiceStakingReward", + "outputs": [ + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "evictServiceIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "configHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "epochCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAgentIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextRewardCheckpointTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "tsNext", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getServiceIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getServiceInfo", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "nonces", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tsStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "inactivity", + "type": "uint256" + } + ], + "internalType": "struct ServiceInfo", + "name": "sInfo", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "getServiceStakingState", + "outputs": [ + { + "internalType": "enum ServiceStakingBase.ServiceStakingState", + "name": "stakingState", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "livenessPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "livenessRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapServiceInfo", + "outputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tsStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "inactivity", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxInactivityDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumInactivityPeriods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumServices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStakingDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStakingDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numAgentInstances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proxyHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsPerSecond", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "serviceRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "serviceRegistryTokenUtility", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "setServiceIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakingToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "threshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tsCheckpoint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6102806040523480156200001257600080fd5b50604051620040123803806200401283398101604081905262000035916200048f565b8086868686868484828260000151600014806200005457506020830151155b8062000062575060a0830151155b8062000070575060c0830151155b806200007e575060e0830151155b806200008c57506060830151155b806200009a57506080830151155b15620000b957604051637c946ed760e01b815260040160405180910390fd5b826080015183606001511015620000fb576060830151608084015160405163491a2bb160e01b8152600481019290925260248201526044015b60405180910390fd5b6002836040015110156200013357604080840151905163491a2bb160e01b8152600481019190915260026024820152604401620000f2565b6001600160a01b0382166200015b5760405163d92e233d60e01b815260040160405180910390fd5b82516080908152602084015160a0908152604085015160c09081529185015160e0908152908501516101005290840151610120908152908401516101409081526001600160a01b0384166101a0529084015161016052830151610180526000805b846101000151518110156200029857818561010001518281518110620001e657620001e6620005c3565b602002602001015111620002335784610100015181815181106200020e576200020e620005c3565b6020026020010151604051632ab10b0b60e21b8152600401620000f291815260200190565b84610100015181815181106200024d576200024d620005c3565b602090810291909101015160048054600181810183556000929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905590925001620001bc565b5081620002b857604051637c946ed760e01b815260040160405180910390fd5b6101c0829052610100516060850151620002d39190620005d9565b6101e052610100516080850151620002ec9190620005d9565b6102005250504260035550506001600160a01b03821615806200031657506001600160a01b038316155b15620003355760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b039081166102405290811661022052831691506200036f90505760405162ca95f960e81b815260040160405180910390fd5b6001600160a01b0316610260525062000605945050505050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b0381118282101715620003c557620003c562000389565b60405290565b600082601f830112620003dd57600080fd5b815160206001600160401b0380831115620003fc57620003fc62000389565b8260051b604051601f19603f8301168101818110848211171562000424576200042462000389565b60405293845260208187018101949081019250878511156200044557600080fd5b6020870191505b8482101562000467578151835291830191908301906200044c565b979650505050505050565b80516001600160a01b03811681146200048a57600080fd5b919050565b60008060008060008060c08789031215620004a957600080fd5b86516001600160401b0380821115620004c157600080fd5b90880190610160828b031215620004d757600080fd5b620004e16200039f565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e082015261010080840151838111156200054057600080fd5b6200054e8d828701620003cb565b918301919091525061012083810151908201526101409283015192810192909252509550620005806020880162000472565b9450620005906040880162000472565b9350620005a06060880162000472565b925060808701519150620005b760a0880162000472565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417620005ff57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605161389262000780600039600081816104790152612d760152600081816104520152818161162c01528181611f440152818161208e01526121050152600081816103390152818161200701526121ca01526000818161071001528181611bc80152611e440152600081816102660152818161081a01526108850152600081816104b3015261123c01526000818161065101528181610b2501528181610f5c01526114b90152600081816106780152818161106801526110970152600081816103a3015281816110f7015261112b015260008181610404015261100d01526000818161042b0152612f520152600081816103ca01528181611ef601526123d90152600061050301526000818161069f015261213c0152600081816106c601526126dc01526000818161031201528181610eb10152610efe01526138926000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c8063a0ed60e011610145578063cbcf252a116100bd578063eb338c961161008c578063f4dce71411610071578063f4dce71414610703578063f86ad2b61461070b578063ffa1ad741461073257600080fd5b8063eb338c96146106e8578063f189e85a146106fb57600080fd5b8063cbcf252a1461064c578063e1f1176d14610673578063e77cdcc91461069a578063eacdaabc146106c157600080fd5b8063b69ef8a811610114578063c2c4c5c1116100f9578063c2c4c5c114610600578063c889921d14610619578063cae2a5f01461062c57600080fd5b8063b69ef8a8146105e4578063b6b55f25146105ed57600080fd5b8063a0ed60e0146104fe578063a694fc3a14610525578063a74466ad14610538578063b1508760146105cf57600080fd5b806356e76058116101d857806375af4b6d116101a7578063809cee2f1161018c578063809cee2f146104ae57806382a8ea58146104d5578063879d9090146104f557600080fd5b806375af4b6d1461047457806378e061361461049b57600080fd5b806356e76058146103ec5780635829c5ec146103ff578063592cf3fb1461042657806372f702f31461044d57600080fd5b8063287140511161022f5780633e732997116102145780633e7329971461039557806342cde4e81461039e57806352c824f5146103c557600080fd5b806328714051146103345780632e17de781461038057600080fd5b806308ae7e541461026157806314b19c5a1461029b578063150b7a02146102a457806316a751721461030d575b600080fd5b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61028860005481565b6102dc6102b2366004613023565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610292565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610292565b61039361038e3660046130c2565b61077b565b005b61028860035481565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102886103fa3660046130c2565b610c0d565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6102886104a93660046130c2565b610c2e565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6104e86104e33660046130c2565b610d05565b6040516102929190613117565b61028860025481565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6103936105333660046130c2565b610e23565b61058f6105463660046130c2565b60056020819052600091825260409091208054600182015460038301546004840154939094015473ffffffffffffffffffffffffffffffffffffffff9283169492909116929085565b6040805173ffffffffffffffffffffffffffffffffffffffff9687168152959094166020860152928401919091526060830152608082015260a001610292565b6105d76115a1565b604051610292919061318b565b61028860015481565b6103936105fb3660046130c2565b6115f9565b61060861169b565b60405161029295949392919061319e565b6102886106273660046130c2565b611cd0565b61063f61063a3660046130c2565b611d8c565b604051610292919061329a565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102886106f63660046130c2565b611e8c565b6105d7611e9c565b610288611ef2565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61076e6040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161029291906132db565b6000818152600560205260409020600181015473ffffffffffffffffffffffffffffffffffffffff1633146108055760018101546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b600381015460006108168242613377565b90507f0000000000000000000000000000000000000000000000000000000000000000811115801561084a57506000600254115b156108b1576040517fba2bbc6b00000000000000000000000000000000000000000000000000000000815260048101859052602481018290527f000000000000000000000000000000000000000000000000000000000000000060448201526064016107fc565b6000806108bc61169b565b94505050509150815160000361091d576108d4611e9c565b9150815167ffffffffffffffff8111156108f0576108f061338a565b604051908082528060200260200182016040528015610919578160200160208202803683370190505b5090505b6000805b835182101561097e578783838151811061093d5761093d6133b9565b6020026020010151031561097e578784838151811061095e5761095e6133b9565b6020026020010151036109735750600161097e565b816001019150610921565b600487015460028801805460408051602080840282018101909252828152600093909290918301828280156109d257602002820191906000526020600020905b8154815260200190600101908083116109be575b50508c5460008f815260056020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054909116905595965073ffffffffffffffffffffffffffffffffffffffff9091169493509150610a4690506002830182612f80565b50600060038201819055600482018190556005909101558315610ad55760068054610a7390600190613377565b81548110610a8357610a836133b9565b906000526020600020015460068681548110610aa157610aa16133b9565b6000918252602090912001556006805480610abe57610abe6133e8565b600190038181906000526020600020016000905590555b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018c905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610b6957600080fd5b505af1158015610b7d573d6000803e3d6000fd5b505050506000831115610b9457610b948184611f27565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610bf893929190613417565b60405180910390a45050505050505050505050565b60048181548110610c1d57600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610cbb57602002820191906000526020600020905b815481526020019060010190808311610ca7575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610cf483611cd0565b610cfe9083613440565b9392505050565b610d6a6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610df557602002820191906000526020600020905b815481526020019060010190808311610de1575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610e5f576040517fafb0be3300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600560205260409020600381015415610eac576040517fb4817ce7000000000000000000000000000000000000000000000000000000008152600481018390526024016107fc565b6006547f00000000000000000000000000000000000000000000000000000000000000008103610f2a576040517ffd2086150000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201526024016107fc565b6040517fef0e239b000000000000000000000000000000000000000000000000000000008152600481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef0e239b90602401600060405180830381865afa158015610fb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ffe919081019061358f565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014611066576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b7f0000000000000000000000000000000000000000000000000000000000000000158015906110b9575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b156110f3576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b60007f000000000000000000000000000000000000000000000000000000000000000011801561114d5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15611187576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b60048160c00151600581111561119f5761119f61326b565b146111f7578060c0015160058111156111ba576111ba61326b565b6040517ff014fe740000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016107fc565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c805190602001209050807f0000000000000000000000000000000000000000000000000000000000000000146112b05760208201516040517f14460f2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107fc565b60045480156113ab5760e0830151518181146112fb576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018890526024016107fc565b60005b818110156113a8578460e00151818151811061131c5761131c6133b9565b602002602001015163ffffffff166004828154811061133d5761133d6133b9565b9060005260206000200154146113a05760048181548110611360576113606133b9565b90600052602060002001546040517faac42c2c0000000000000000000000000000000000000000000000000000000081526004016107fc91815260200190565b6001016112fe565b50505b6113cc8684600001516bffffffffffffffffffffffff168560e00151611fbe565b6020830151855473ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161787556001870180549091163317905560009061142a906122e4565b80519091506114429060028801906020840190612fa1565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018790556040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342842e0e90606401600060405180830381600087803b15801561151257600080fd5b505af1158015611526573d6000803e3d6000fd5b50505050836020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb6000548560405161159092919061366d565b60405180910390a450505050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156115ef57602002820191906000526020600020905b8154815260200190600101908083116115db575b5050505050905090565b6000816001546116099190613440565b905060008260025461161b9190613440565b6001839055600281905590506116537f00000000000000000000000000000000000000000000000000000000000000003330866122f5565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b60608060608060606000806000806000806000806116b76123be565b97509750975097509750975097509750606080845167ffffffffffffffff8111156116e4576116e461338a565b60405190808252806020026020018201604052801561170d578160200160208202803683370190505b509a5060008915611aa0578967ffffffffffffffff8111156117315761173161338a565b60405190808252806020026020018201604052801561175a578160200160208202803683370190505b5092508967ffffffffffffffff8111156117765761177661338a565b60405190808252806020026020018201604052801561179f578160200160208202803683370190505b5091508a8911156119a95760008060015b8c81101561189c578b8e8b83815181106117cc576117cc6133b9565b60200260200101516117de9190613686565b6117e8919061369d565b92506117f48383613440565b91508a8181518110611808576118086133b9565b602002602001015193508a8181518110611824576118246133b9565b602002602001015186828151811061183e5761183e6133b9565b6020026020010181815250508285828151811061185d5761185d6133b9565b6020026020010181815250508260056000868152602001908152602001600020600401600082825461188f9190613440565b90915550506001016117b0565b508a8d8a6000815181106118b2576118b26133b9565b60200260200101516118c49190613686565b6118ce919061369d565b91506118da8282613440565b9050896000815181106118ef576118ef6133b9565b602002602001015192508960008151811061190c5761190c6133b9565b602002602001015185600081518110611927576119276133b9565b602002602001018181525050808d111561195257611945818e613377565b61194f9083613440565b91505b8184600081518110611966576119666133b9565b602002602001018181525050816005600085815260200190815260200160002060040160008282546119989190613440565b9091555060009d50611a9a92505050565b60005b8a811015611a8c578881815181106119c6576119c66133b9565b602002602001015191508881815181106119e2576119e26133b9565b60200260200101518482815181106119fc576119fc6133b9565b602002602001018181525050878181518110611a1a57611a1a6133b9565b6020026020010151838281518110611a3457611a346133b9565b602002602001018181525050878181518110611a5257611a526133b9565b6020026020010151600560008481526020019081526020016000206004016000828254611a7f9190613440565b90915550506001016119ac565b50611a97898c613377565b9a505b60028b90555b855115611cba576000995060005b8651811015611c5357868181518110611ac957611ac96133b9565b60200260200101519150858181518110611ae557611ae56133b9565b6020026020010151600560008481526020019081526020016000206002019080519060200190611b16929190612fa1565b506000858281518110611b2b57611b2b6133b9565b60200260200101511115611c3857848181518110611b4b57611b4b6133b9565b60200260200101516005600084815260200190815260200160002060050154611b749190613440565b858281518110611b8657611b866133b9565b602002602001018181525050848181518110611ba457611ba46133b9565b602002602001015160056000848152602001908152602001600020600501819055507f0000000000000000000000000000000000000000000000000000000000000000858281518110611bf957611bf96133b9565b60200260200101511115611c3357818d8281518110611c1a57611c1a6133b9565b60209081029190910101528a611c2f816136d8565b9b50505b611c4b565b6000828152600560208190526040822001555b600101611aae565b508915611c6557611c658c858c6127c9565b42600355600054611c77816001613440565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee66690611cb0908f9088908890613710565b60405180910390a2505b50939e929d509b50919950969750505050505050565b600080600080600080611ce16123be565b5050509450945094509450945060005b84811015611d815787838281518110611d0c57611d0c6133b9565b602002602001015103611d795785841115611d58578386838381518110611d3557611d356133b9565b6020026020010151611d479190613686565b611d51919061369d565b9650611d81565b818181518110611d6a57611d6a6133b9565b60200260200101519650611d81565b600101611cf1565b505050505050919050565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611e1957602002820191906000526020600020905b815481526020019060010190808311611e05575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611e775760029150611e86565b606081015115611e8657600191505b50919050565b60068181548110610c1d57600080fd5b606060068054806020026020016040519081016040528092919081815260200182805480156115ef57602002820191906000526020600020908154815260200190600101908083116115db575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611f229190613440565b905090565b8060016000828254611f399190613377565b90915550611f6a90507f00000000000000000000000000000000000000000000000000000000000000008383612bc2565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611fb291815260200190565b60405180910390a25050565b6040517f3cebfa4f00000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa15801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190613745565b915091508173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461213a576040517f5c01c06800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152831660248201526044016107fc565b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff82168111156121ba576040517facc2c91c0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152602481018290526044016107fc565b60005b84518110156122db5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166375c1f93489888581518110612217576122176133b9565b60200260200101516040518363ffffffff1660e01b815260040161224b92919091825263ffffffff16602082015260400190565b602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c919061377a565b9050828110156122d2576040517facc2c91c00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016107fc565b506001016121bd565b50505050505050565b60606122ef82612c84565b92915050565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806123b7576040517fabae3d6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152808616602483015284166044820152606481018390526084016107fc565b5050505050565b600080600060608060608060606000600354905060025498507f000000000000000000000000000000000000000000000000000000000000000081426124049190613377565b101580156124125750600089115b156127be576006548067ffffffffffffffff8111156124335761243361338a565b60405190808252806020026020018201604052801561245c578160200160208202803683370190505b5094508067ffffffffffffffff8111156124785761247861338a565b6040519080825280602002602001820160405280156124a1578160200160208202803683370190505b5096508067ffffffffffffffff8111156124bd576124bd61338a565b6040519080825280602002602001820160405280156124e6578160200160208202803683370190505b5095508067ffffffffffffffff8111156125025761250261338a565b60405190808252806020026020018201604052801561253557816020015b60608152602001906001900390816125205790505b5093508067ffffffffffffffff8111156125515761255161338a565b60405190808252806020026020018201604052801561257a578160200160208202803683370190505b50925060005b818110156127bb576006818154811061259b5761259b6133b9565b90600052602060002001548682815181106125b8576125b86133b9565b6020026020010181815250506000600560008884815181106125dc576125dc6133b9565b6020908102919091018101518252810191909152604001600020805490915061261a9073ffffffffffffffffffffffffffffffffffffffff166122e4565b86838151811061262c5761262c6133b9565b6020908102919091010152600381015484908181111561264a578091505b6126548242613377565b905060006126ce89868151811061266d5761266d6133b9565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156126c357602002820191906000526020600020905b8154815260200190600101908083116126af575b505050505084612e05565b9050801561278c57612700827f0000000000000000000000000000000000000000000000000000000000000000613686565b8b8f81518110612712576127126133b9565b6020026020010181815250508a8e81518110612730576127306133b9565b60200260200101518d6127439190613440565b9c50898581518110612757576127576133b9565b60200260200101518c8f81518110612771576127716133b9565b60209081029190910101526127858e6136d8565b9d506127ac565b8188868151811061279f5761279f6133b9565b6020026020010181815250505b50505050806001019050612580565b50505b509091929394959697565b825160008267ffffffffffffffff8111156127e6576127e661338a565b60405190808252806020026020018201604052801561280f578160200160208202803683370190505b50905060008367ffffffffffffffff81111561282d5761282d61338a565b604051908082528060200260200182016040528015612856578160200160208202803683370190505b50905060008467ffffffffffffffff8111156128745761287461338a565b60405190808252806020026020018201604052801561289d578160200160208202803683370190505b50905060008567ffffffffffffffff8111156128bb576128bb61338a565b6040519080825280602002602001820160405280156128e4578160200160208202803683370190505b50905060008667ffffffffffffffff8111156129025761290261338a565b60405190808252806020026020018201604052801561292b578160200160208202803683370190505b50905060008060005b88811015612abf5760008c8281518110612950576129506133b9565b60200260200101511115612ab7578b8181518110612970576129706133b9565b602002602001015191508188848151811061298d5761298d6133b9565b60209081029190910181019190915260008381526005909152604090206001810154885173ffffffffffffffffffffffffffffffffffffffff909116908990869081106129dc576129dc6133b9565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015281548851911690889086908110612a1857612a186133b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b8281518110612a6457612a646133b9565b6020026020010151868581518110612a7e57612a7e6133b9565b60200260200101818152505081858581518110612a9d57612a9d6133b9565b602090810291909101015283612ab2816136d8565b945050505b600101612934565b50885b8015612b745788612ad281613793565b99506000905084612ae4600184613377565b81518110612af457612af46133b9565b6020026020010151905060068a81548110612b1157612b116133b9565b906000526020600020015460068281548110612b2f57612b2f6133b9565b6000918252602090912001556006805480612b4c57612b4c6133e8565b600190038181906000526020600020016000905590555080612b6d90613793565b9050612ac2565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd5695288888888604051612bad949392919061380f565b60405180910390a25050505050505050505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080612c7e576040517fabae3d6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015230602483015284166044820152606481018390526084016107fc565b50505050565b60408051600280825260608083018452926020830190803683370190505090508173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d13919061377a565b81600081518110612d2657612d266133b9565b60209081029190910101526040517f7af7347300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de1919061377a565b81600181518110612df457612df46133b9565b602002602001018181525050919050565b6000612e12848484612e1a565b949350505050565b60008082118015612e5e575082600081518110612e3957612e396133b9565b602002602001015184600081518110612e5457612e546133b9565b6020026020010151115b8015612e9d575082600181518110612e7857612e786133b9565b602002602001015184600181518110612e9357612e936133b9565b6020026020010151115b15610cfe57600083600081518110612eb757612eb76133b9565b602002602001015185600081518110612ed257612ed26133b9565b6020026020010151612ee49190613377565b9050600084600181518110612efb57612efb6133b9565b602002602001015186600181518110612f1657612f166133b9565b6020026020010151612f289190613377565b9050818111612f7757600084612f4683670de0b6b3a7640000613686565b612f50919061369d565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50509392505050565b5080546000825590600052602060002090810190612f9e9190612fec565b50565b828054828255906000526020600020908101928215612fdc579160200282015b82811115612fdc578251825591602001919060010190612fc1565b50612fe8929150612fec565b5090565b5b80821115612fe85760008155600101612fed565b73ffffffffffffffffffffffffffffffffffffffff81168114612f9e57600080fd5b60008060008060006080868803121561303b57600080fd5b853561304681613001565b9450602086013561305681613001565b935060408601359250606086013567ffffffffffffffff8082111561307a57600080fd5b818801915088601f83011261308e57600080fd5b81358181111561309d57600080fd5b8960208285010111156130af57600080fd5b9699959850939650602001949392505050565b6000602082840312156130d457600080fd5b5035919050565b60008151808452602080850194506020840160005b8381101561310c578151875295820195908201906001016130f0565b509495945050505050565b60208152600073ffffffffffffffffffffffffffffffffffffffff80845116602084015280602085015116604084015250604083015160c0606084015261316160e08401826130db565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610cfe60208301846130db565b60a0815260006131b160a08301886130db565b6020838203818501528188518084528284019150828160051b850101838b0160005b8381101561321f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301855261320d8383516130db565b948601949250908501906001016131d3565b50508681036040880152613233818b6130db565b945050505050828103606084015261324b81866130db565b9050828103608084015261325f81856130db565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b81811015613309578581018301518582016040015282016132ed565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156122ef576122ef613348565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815260606020820152600061343060608301856130db565b9050826040830152949350505050565b808201808211156122ef576122ef613348565b604051610100810167ffffffffffffffff811182821017156134775761347761338a565b60405290565b80516bffffffffffffffffffffffff8116811461349957600080fd5b919050565b805161349981613001565b805163ffffffff8116811461349957600080fd5b80516006811061349957600080fd5b600082601f8301126134dd57600080fd5b8151602067ffffffffffffffff808311156134fa576134fa61338a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561353d5761353d61338a565b604052938452602081870181019490810192508785111561355d57600080fd5b6020870191505b8482101561358457613575826134a9565b83529183019190830190613564565b979650505050505050565b6000602082840312156135a157600080fd5b815167ffffffffffffffff808211156135b957600080fd5b9083019061010082860312156135ce57600080fd5b6135d6613453565b6135df8361347d565b81526135ed6020840161349e565b602082015260408301516040820152613608606084016134a9565b6060820152613619608084016134a9565b608082015261362a60a084016134a9565b60a082015261363b60c084016134bd565b60c082015260e08301518281111561365257600080fd5b61365e878286016134cc565b60e08301525095945050505050565b828152604060208201526000612e1260408301846130db565b80820281158282048414176122ef576122ef613348565b6000826136d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361370957613709613348565b5060010190565b83815260606020820152600061372960608301856130db565b828103604084015261373b81856130db565b9695505050505050565b6000806040838503121561375857600080fd5b825161376381613001565b91506137716020840161347d565b90509250929050565b60006020828403121561378c57600080fd5b5051919050565b6000816137a2576137a2613348565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008151808452602080850194506020840160005b8381101561310c57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016137dd565b60808152600061382260808301876130db565b828103602084015261383481876137c8565b9050828103604084015261384881866137c8565b9050828103606084015261358481856130db56fea2646970667358221220aa141a0549078132003b9a70c4c27f1f544bf1569679893a8bc259e027ef835564736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025c5760003560e01c8063a0ed60e011610145578063cbcf252a116100bd578063eb338c961161008c578063f4dce71411610071578063f4dce71414610703578063f86ad2b61461070b578063ffa1ad741461073257600080fd5b8063eb338c96146106e8578063f189e85a146106fb57600080fd5b8063cbcf252a1461064c578063e1f1176d14610673578063e77cdcc91461069a578063eacdaabc146106c157600080fd5b8063b69ef8a811610114578063c2c4c5c1116100f9578063c2c4c5c114610600578063c889921d14610619578063cae2a5f01461062c57600080fd5b8063b69ef8a8146105e4578063b6b55f25146105ed57600080fd5b8063a0ed60e0146104fe578063a694fc3a14610525578063a74466ad14610538578063b1508760146105cf57600080fd5b806356e76058116101d857806375af4b6d116101a7578063809cee2f1161018c578063809cee2f146104ae57806382a8ea58146104d5578063879d9090146104f557600080fd5b806375af4b6d1461047457806378e061361461049b57600080fd5b806356e76058146103ec5780635829c5ec146103ff578063592cf3fb1461042657806372f702f31461044d57600080fd5b8063287140511161022f5780633e732997116102145780633e7329971461039557806342cde4e81461039e57806352c824f5146103c557600080fd5b806328714051146103345780632e17de781461038057600080fd5b806308ae7e541461026157806314b19c5a1461029b578063150b7a02146102a457806316a751721461030d575b600080fd5b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61028860005481565b6102dc6102b2366004613023565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610292565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610292565b61039361038e3660046130c2565b61077b565b005b61028860035481565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102886103fa3660046130c2565b610c0d565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6102886104a93660046130c2565b610c2e565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6104e86104e33660046130c2565b610d05565b6040516102929190613117565b61028860025481565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6103936105333660046130c2565b610e23565b61058f6105463660046130c2565b60056020819052600091825260409091208054600182015460038301546004840154939094015473ffffffffffffffffffffffffffffffffffffffff9283169492909116929085565b6040805173ffffffffffffffffffffffffffffffffffffffff9687168152959094166020860152928401919091526060830152608082015260a001610292565b6105d76115a1565b604051610292919061318b565b61028860015481565b6103936105fb3660046130c2565b6115f9565b61060861169b565b60405161029295949392919061319e565b6102886106273660046130c2565b611cd0565b61063f61063a3660046130c2565b611d8c565b604051610292919061329a565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b6102886106f63660046130c2565b611e8c565b6105d7611e9c565b610288611ef2565b6102887f000000000000000000000000000000000000000000000000000000000000000081565b61076e6040518060400160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161029291906132db565b6000818152600560205260409020600181015473ffffffffffffffffffffffffffffffffffffffff1633146108055760018101546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b600381015460006108168242613377565b90507f0000000000000000000000000000000000000000000000000000000000000000811115801561084a57506000600254115b156108b1576040517fba2bbc6b00000000000000000000000000000000000000000000000000000000815260048101859052602481018290527f000000000000000000000000000000000000000000000000000000000000000060448201526064016107fc565b6000806108bc61169b565b94505050509150815160000361091d576108d4611e9c565b9150815167ffffffffffffffff8111156108f0576108f061338a565b604051908082528060200260200182016040528015610919578160200160208202803683370190505b5090505b6000805b835182101561097e578783838151811061093d5761093d6133b9565b6020026020010151031561097e578784838151811061095e5761095e6133b9565b6020026020010151036109735750600161097e565b816001019150610921565b600487015460028801805460408051602080840282018101909252828152600093909290918301828280156109d257602002820191906000526020600020905b8154815260200190600101908083116109be575b50508c5460008f815260056020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018054909116905595965073ffffffffffffffffffffffffffffffffffffffff9091169493509150610a4690506002830182612f80565b50600060038201819055600482018190556005909101558315610ad55760068054610a7390600190613377565b81548110610a8357610a836133b9565b906000526020600020015460068681548110610aa157610aa16133b9565b6000918252602090912001556006805480610abe57610abe6133e8565b600190038181906000526020600020016000905590555b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018c905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610b6957600080fd5b505af1158015610b7d573d6000803e3d6000fd5b505050506000831115610b9457610b948184611f27565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7f950733f4c0bf951b8e770f3cc619a4288e7b59b1236d59aeaf2c238488e8ae816000548688604051610bf893929190613417565b60405180910390a45050505050505050505050565b60048181548110610c1d57600080fd5b600091825260209091200154905081565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015610cbb57602002820191906000526020600020905b815481526020019060010190808311610ca7575b505050505081526020016003820154815260200160048201548152602001600582015481525050905080608001519150610cf483611cd0565b610cfe9083613440565b9392505050565b610d6a6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016000815260200160008152602001600081525090565b600082815260056020908152604091829020825160c081018452815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168184015260028201805485518186028101860187528181529295939493860193830182828015610df557602002820191906000526020600020905b815481526020019060010190808311610de1575b5050505050815260200160038201548152602001600482015481526020016005820154815250509050919050565b600254600003610e5f576040517fafb0be3300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600560205260409020600381015415610eac576040517fb4817ce7000000000000000000000000000000000000000000000000000000008152600481018390526024016107fc565b6006547f00000000000000000000000000000000000000000000000000000000000000008103610f2a576040517ffd2086150000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201526024016107fc565b6040517fef0e239b000000000000000000000000000000000000000000000000000000008152600481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef0e239b90602401600060405180830381865afa158015610fb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ffe919081019061358f565b9050806080015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014611066576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b7f0000000000000000000000000000000000000000000000000000000000000000158015906110b9575080604001517f000000000000000000000000000000000000000000000000000000000000000014155b156110f3576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b60007f000000000000000000000000000000000000000000000000000000000000000011801561114d5750806060015163ffffffff167f000000000000000000000000000000000000000000000000000000000000000014155b15611187576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018590526024016107fc565b60048160c00151600581111561119f5761119f61326b565b146111f7578060c0015160058111156111ba576111ba61326b565b6040517ff014fe740000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016107fc565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c805190602001209050807f0000000000000000000000000000000000000000000000000000000000000000146112b05760208201516040517f14460f2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107fc565b60045480156113ab5760e0830151518181146112fb576040517ff5a8097e000000000000000000000000000000000000000000000000000000008152600481018890526024016107fc565b60005b818110156113a8578460e00151818151811061131c5761131c6133b9565b602002602001015163ffffffff166004828154811061133d5761133d6133b9565b9060005260206000200154146113a05760048181548110611360576113606133b9565b90600052602060002001546040517faac42c2c0000000000000000000000000000000000000000000000000000000081526004016107fc91815260200190565b6001016112fe565b50505b6113cc8684600001516bffffffffffffffffffffffff168560e00151611fbe565b6020830151855473ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161787556001870180549091163317905560009061142a906122e4565b80519091506114429060028801906020840190612fa1565b50426003870155600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018790556040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342842e0e90606401600060405180830381600087803b15801561151257600080fd5b505af1158015611526573d6000803e3d6000fd5b50505050836020015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16887faa6b005b4958114a0c90492461c24af6525ae0178db7fbf44125ae9217c69ccb6000548560405161159092919061366d565b60405180910390a450505050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156115ef57602002820191906000526020600020905b8154815260200190600101908083116115db575b5050505050905090565b6000816001546116099190613440565b905060008260025461161b9190613440565b6001839055600281905590506116537f00000000000000000000000000000000000000000000000000000000000000003330866122f5565b604080518481526020810184905290810182905233907f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e9060600160405180910390a2505050565b60608060608060606000806000806000806000806116b76123be565b97509750975097509750975097509750606080845167ffffffffffffffff8111156116e4576116e461338a565b60405190808252806020026020018201604052801561170d578160200160208202803683370190505b509a5060008915611aa0578967ffffffffffffffff8111156117315761173161338a565b60405190808252806020026020018201604052801561175a578160200160208202803683370190505b5092508967ffffffffffffffff8111156117765761177661338a565b60405190808252806020026020018201604052801561179f578160200160208202803683370190505b5091508a8911156119a95760008060015b8c81101561189c578b8e8b83815181106117cc576117cc6133b9565b60200260200101516117de9190613686565b6117e8919061369d565b92506117f48383613440565b91508a8181518110611808576118086133b9565b602002602001015193508a8181518110611824576118246133b9565b602002602001015186828151811061183e5761183e6133b9565b6020026020010181815250508285828151811061185d5761185d6133b9565b6020026020010181815250508260056000868152602001908152602001600020600401600082825461188f9190613440565b90915550506001016117b0565b508a8d8a6000815181106118b2576118b26133b9565b60200260200101516118c49190613686565b6118ce919061369d565b91506118da8282613440565b9050896000815181106118ef576118ef6133b9565b602002602001015192508960008151811061190c5761190c6133b9565b602002602001015185600081518110611927576119276133b9565b602002602001018181525050808d111561195257611945818e613377565b61194f9083613440565b91505b8184600081518110611966576119666133b9565b602002602001018181525050816005600085815260200190815260200160002060040160008282546119989190613440565b9091555060009d50611a9a92505050565b60005b8a811015611a8c578881815181106119c6576119c66133b9565b602002602001015191508881815181106119e2576119e26133b9565b60200260200101518482815181106119fc576119fc6133b9565b602002602001018181525050878181518110611a1a57611a1a6133b9565b6020026020010151838281518110611a3457611a346133b9565b602002602001018181525050878181518110611a5257611a526133b9565b6020026020010151600560008481526020019081526020016000206004016000828254611a7f9190613440565b90915550506001016119ac565b50611a97898c613377565b9a505b60028b90555b855115611cba576000995060005b8651811015611c5357868181518110611ac957611ac96133b9565b60200260200101519150858181518110611ae557611ae56133b9565b6020026020010151600560008481526020019081526020016000206002019080519060200190611b16929190612fa1565b506000858281518110611b2b57611b2b6133b9565b60200260200101511115611c3857848181518110611b4b57611b4b6133b9565b60200260200101516005600084815260200190815260200160002060050154611b749190613440565b858281518110611b8657611b866133b9565b602002602001018181525050848181518110611ba457611ba46133b9565b602002602001015160056000848152602001908152602001600020600501819055507f0000000000000000000000000000000000000000000000000000000000000000858281518110611bf957611bf96133b9565b60200260200101511115611c3357818d8281518110611c1a57611c1a6133b9565b60209081029190910101528a611c2f816136d8565b9b50505b611c4b565b6000828152600560208190526040822001555b600101611aae565b508915611c6557611c658c858c6127c9565b42600355600054611c77816001613440565b60005560405181907f06a98bdd4732811ab3214800ed1ada2dce66a2bce301d250c3ca7d6b461ee66690611cb0908f9088908890613710565b60405180910390a2505b50939e929d509b50919950969750505050505050565b600080600080600080611ce16123be565b5050509450945094509450945060005b84811015611d815787838281518110611d0c57611d0c6133b9565b602002602001015103611d795785841115611d58578386838381518110611d3557611d356133b9565b6020026020010151611d479190613686565b611d51919061369d565b9650611d81565b818181518110611d6a57611d6a6133b9565b60200260200101519650611d81565b600101611cf1565b505050505050919050565b6000818152600560209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff90811682526001830154168185015260028201805484518187028101870186528181528796939586019390929190830182828015611e1957602002820191906000526020600020905b815481526020019060010190808311611e05575b50505050508152602001600382015481526020016004820154815260200160058201548152505090507f00000000000000000000000000000000000000000000000000000000000000008160a001511115611e775760029150611e86565b606081015115611e8657600191505b50919050565b60068181548110610c1d57600080fd5b606060068054806020026020016040519081016040528092919081815260200182805480156115ef57602002820191906000526020600020908154815260200190600101908083116115db575050505050905090565b60007f0000000000000000000000000000000000000000000000000000000000000000600354611f229190613440565b905090565b8060016000828254611f399190613377565b90915550611f6a90507f00000000000000000000000000000000000000000000000000000000000000008383612bc2565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051611fb291815260200190565b60405180910390a25050565b6040517f3cebfa4f00000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633cebfa4f906024016040805180830381865afa15801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190613745565b915091508173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461213a576040517f5c01c06800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152831660248201526044016107fc565b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff82168111156121ba576040517facc2c91c0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152602481018290526044016107fc565b60005b84518110156122db5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166375c1f93489888581518110612217576122176133b9565b60200260200101516040518363ffffffff1660e01b815260040161224b92919091825263ffffffff16602082015260400190565b602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c919061377a565b9050828110156122d2576040517facc2c91c00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016107fc565b506001016121bd565b50505050505050565b60606122ef82612c84565b92915050565b60006040517f23b872dd000000000000000000000000000000000000000000000000000000006000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806123b7576040517fabae3d6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152808616602483015284166044820152606481018390526084016107fc565b5050505050565b600080600060608060608060606000600354905060025498507f000000000000000000000000000000000000000000000000000000000000000081426124049190613377565b101580156124125750600089115b156127be576006548067ffffffffffffffff8111156124335761243361338a565b60405190808252806020026020018201604052801561245c578160200160208202803683370190505b5094508067ffffffffffffffff8111156124785761247861338a565b6040519080825280602002602001820160405280156124a1578160200160208202803683370190505b5096508067ffffffffffffffff8111156124bd576124bd61338a565b6040519080825280602002602001820160405280156124e6578160200160208202803683370190505b5095508067ffffffffffffffff8111156125025761250261338a565b60405190808252806020026020018201604052801561253557816020015b60608152602001906001900390816125205790505b5093508067ffffffffffffffff8111156125515761255161338a565b60405190808252806020026020018201604052801561257a578160200160208202803683370190505b50925060005b818110156127bb576006818154811061259b5761259b6133b9565b90600052602060002001548682815181106125b8576125b86133b9565b6020026020010181815250506000600560008884815181106125dc576125dc6133b9565b6020908102919091018101518252810191909152604001600020805490915061261a9073ffffffffffffffffffffffffffffffffffffffff166122e4565b86838151811061262c5761262c6133b9565b6020908102919091010152600381015484908181111561264a578091505b6126548242613377565b905060006126ce89868151811061266d5761266d6133b9565b6020026020010151856002018054806020026020016040519081016040528092919081815260200182805480156126c357602002820191906000526020600020905b8154815260200190600101908083116126af575b505050505084612e05565b9050801561278c57612700827f0000000000000000000000000000000000000000000000000000000000000000613686565b8b8f81518110612712576127126133b9565b6020026020010181815250508a8e81518110612730576127306133b9565b60200260200101518d6127439190613440565b9c50898581518110612757576127576133b9565b60200260200101518c8f81518110612771576127716133b9565b60209081029190910101526127858e6136d8565b9d506127ac565b8188868151811061279f5761279f6133b9565b6020026020010181815250505b50505050806001019050612580565b50505b509091929394959697565b825160008267ffffffffffffffff8111156127e6576127e661338a565b60405190808252806020026020018201604052801561280f578160200160208202803683370190505b50905060008367ffffffffffffffff81111561282d5761282d61338a565b604051908082528060200260200182016040528015612856578160200160208202803683370190505b50905060008467ffffffffffffffff8111156128745761287461338a565b60405190808252806020026020018201604052801561289d578160200160208202803683370190505b50905060008567ffffffffffffffff8111156128bb576128bb61338a565b6040519080825280602002602001820160405280156128e4578160200160208202803683370190505b50905060008667ffffffffffffffff8111156129025761290261338a565b60405190808252806020026020018201604052801561292b578160200160208202803683370190505b50905060008060005b88811015612abf5760008c8281518110612950576129506133b9565b60200260200101511115612ab7578b8181518110612970576129706133b9565b602002602001015191508188848151811061298d5761298d6133b9565b60209081029190910181019190915260008381526005909152604090206001810154885173ffffffffffffffffffffffffffffffffffffffff909116908990869081106129dc576129dc6133b9565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015281548851911690889086908110612a1857612a186133b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b8281518110612a6457612a646133b9565b6020026020010151868581518110612a7e57612a7e6133b9565b60200260200101818152505081858581518110612a9d57612a9d6133b9565b602090810291909101015283612ab2816136d8565b945050505b600101612934565b50885b8015612b745788612ad281613793565b99506000905084612ae4600184613377565b81518110612af457612af46133b9565b6020026020010151905060068a81548110612b1157612b116133b9565b906000526020600020015460068281548110612b2f57612b2f6133b9565b6000918252602090912001556006805480612b4c57612b4c6133e8565b600190038181906000526020600020016000905590555080612b6d90613793565b9050612ac2565b506000547fd19a3d42ed383465e4058c322d9411aeac76ddb8454d22e139fc99808bd5695288888888604051612bad949392919061380f565b60405180910390a25050505050505050505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000006000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080612c7e576040517fabae3d6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015230602483015284166044820152606481018390526084016107fc565b50505050565b60408051600280825260608083018452926020830190803683370190505090508173ffffffffffffffffffffffffffffffffffffffff1663affed0e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d13919061377a565b81600081518110612d2657612d266133b9565b60209081029190910101526040517f7af7347300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637af7347390602401602060405180830381865afa158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de1919061377a565b81600181518110612df457612df46133b9565b602002602001018181525050919050565b6000612e12848484612e1a565b949350505050565b60008082118015612e5e575082600081518110612e3957612e396133b9565b602002602001015184600081518110612e5457612e546133b9565b6020026020010151115b8015612e9d575082600181518110612e7857612e786133b9565b602002602001015184600181518110612e9357612e936133b9565b6020026020010151115b15610cfe57600083600081518110612eb757612eb76133b9565b602002602001015185600081518110612ed257612ed26133b9565b6020026020010151612ee49190613377565b9050600084600181518110612efb57612efb6133b9565b602002602001015186600181518110612f1657612f166133b9565b6020026020010151612f289190613377565b9050818111612f7757600084612f4683670de0b6b3a7640000613686565b612f50919061369d565b7f000000000000000000000000000000000000000000000000000000000000000011159350505b50509392505050565b5080546000825590600052602060002090810190612f9e9190612fec565b50565b828054828255906000526020600020908101928215612fdc579160200282015b82811115612fdc578251825591602001919060010190612fc1565b50612fe8929150612fec565b5090565b5b80821115612fe85760008155600101612fed565b73ffffffffffffffffffffffffffffffffffffffff81168114612f9e57600080fd5b60008060008060006080868803121561303b57600080fd5b853561304681613001565b9450602086013561305681613001565b935060408601359250606086013567ffffffffffffffff8082111561307a57600080fd5b818801915088601f83011261308e57600080fd5b81358181111561309d57600080fd5b8960208285010111156130af57600080fd5b9699959850939650602001949392505050565b6000602082840312156130d457600080fd5b5035919050565b60008151808452602080850194506020840160005b8381101561310c578151875295820195908201906001016130f0565b509495945050505050565b60208152600073ffffffffffffffffffffffffffffffffffffffff80845116602084015280602085015116604084015250604083015160c0606084015261316160e08401826130db565b905060608401516080840152608084015160a084015260a084015160c08401528091505092915050565b602081526000610cfe60208301846130db565b60a0815260006131b160a08301886130db565b6020838203818501528188518084528284019150828160051b850101838b0160005b8381101561321f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301855261320d8383516130db565b948601949250908501906001016131d3565b50508681036040880152613233818b6130db565b945050505050828103606084015261324b81866130db565b9050828103608084015261325f81856130db565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106132d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020808352835180602085015260005b81811015613309578581018301518582016040015282016132ed565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156122ef576122ef613348565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815260606020820152600061343060608301856130db565b9050826040830152949350505050565b808201808211156122ef576122ef613348565b604051610100810167ffffffffffffffff811182821017156134775761347761338a565b60405290565b80516bffffffffffffffffffffffff8116811461349957600080fd5b919050565b805161349981613001565b805163ffffffff8116811461349957600080fd5b80516006811061349957600080fd5b600082601f8301126134dd57600080fd5b8151602067ffffffffffffffff808311156134fa576134fa61338a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561353d5761353d61338a565b604052938452602081870181019490810192508785111561355d57600080fd5b6020870191505b8482101561358457613575826134a9565b83529183019190830190613564565b979650505050505050565b6000602082840312156135a157600080fd5b815167ffffffffffffffff808211156135b957600080fd5b9083019061010082860312156135ce57600080fd5b6135d6613453565b6135df8361347d565b81526135ed6020840161349e565b602082015260408301516040820152613608606084016134a9565b6060820152613619608084016134a9565b608082015261362a60a084016134a9565b60a082015261363b60c084016134bd565b60c082015260e08301518281111561365257600080fd5b61365e878286016134cc565b60e08301525095945050505050565b828152604060208201526000612e1260408301846130db565b80820281158282048414176122ef576122ef613348565b6000826136d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361370957613709613348565b5060010190565b83815260606020820152600061372960608301856130db565b828103604084015261373b81856130db565b9695505050505050565b6000806040838503121561375857600080fd5b825161376381613001565b91506137716020840161347d565b90509250929050565b60006020828403121561378c57600080fd5b5051919050565b6000816137a2576137a2613348565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008151808452602080850194506020840160005b8381101561310c57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016137dd565b60808152600061382260808301876130db565b828103602084015261383481876137c8565b9050828103604084015261384881866137c8565b9050828103606084015261358481856130db56fea2646970667358221220aa141a0549078132003b9a70c4c27f1f544bf1569679893a8bc259e027ef835564736f6c63430008170033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/mech_usage/ServiceStakingMechUsage.sol b/contracts/mech_usage/ServiceStakingMechUsage.sol index 212129d..c78f59c 100644 --- a/contracts/mech_usage/ServiceStakingMechUsage.sol +++ b/contracts/mech_usage/ServiceStakingMechUsage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; +pragma solidity ^0.8.23; import {MechAgentMod} from "./MechAgentMod.sol"; import {ServiceStakingNativeToken} from "../../lib/autonolas-registries/contracts/staking/ServiceStakingNativeToken.sol"; diff --git a/contracts/mech_usage/ServiceStakingTokenMechUsage.sol b/contracts/mech_usage/ServiceStakingTokenMechUsage.sol index cdd8c28..4cd10ba 100644 --- a/contracts/mech_usage/ServiceStakingTokenMechUsage.sol +++ b/contracts/mech_usage/ServiceStakingTokenMechUsage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; +pragma solidity ^0.8.23; import {MechAgentMod} from "./MechAgentMod.sol"; import {ServiceStakingToken} from "../../lib/autonolas-registries/contracts/staking/ServiceStakingToken.sol"; diff --git a/hardhat.config.js b/hardhat.config.js index 747b711..8b18484 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -102,11 +102,11 @@ module.exports = { solidity: { compilers: [ { - version: "0.8.21", + version: "0.8.23", settings: { optimizer: { enabled: true, - runs: 750, + runs: 1000000, }, }, } diff --git a/lib/autonolas-registries b/lib/autonolas-registries index 2ce07e8..551027b 160000 --- a/lib/autonolas-registries +++ b/lib/autonolas-registries @@ -1 +1 @@ -Subproject commit 2ce07e89e070230675727cf9c91d223d5f8e8ada +Subproject commit 551027b3bd24438d5644d334a2f5e21a0fc6bd11 diff --git a/lib/forge-std b/lib/forge-std index 2f11269..4513bc2 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 2f112697506eab12d433a65fdc31a639548fe365 +Subproject commit 4513bc2063f23c57bee6558799584b518d387a39 diff --git a/test/ServiceStakingMechUsage.js b/test/ServiceStakingMechUsage.js index b4b5182..875991f 100644 --- a/test/ServiceStakingMechUsage.js +++ b/test/ServiceStakingMechUsage.js @@ -38,6 +38,7 @@ describe("ServiceStakingMechUsage", function () { maxNumServices: 10, rewardsPerSecond: "1" + "0".repeat(15), minStakingDeposit: 10, + minNumStakingPeriods: 3, maxNumInactivityPeriods: 3, livenessPeriod: livenessPeriod, // Ten seconds livenessRatio: "1" + "0".repeat(16), // 0.01 transaction per second (TPS) diff --git a/test/ServiceStakingMechUsages.t.sol b/test/ServiceStakingMechUsages.t.sol index 404790a..83f3a29 100644 --- a/test/ServiceStakingMechUsages.t.sol +++ b/test/ServiceStakingMechUsages.t.sol @@ -1,4 +1,4 @@ -pragma solidity =0.8.21; +pragma solidity =0.8.23; import {IService} from "../lib/autonolas-registries/contracts/interfaces/IService.sol"; import "@gnosis.pm/safe-contracts/contracts/GnosisSafe.sol"; @@ -59,6 +59,8 @@ contract BaseSetup is Test { uint256 internal rewardsPerSecond = 0.0001 ether; // Minimum service staking deposit value required for staking uint256 internal minStakingDeposit = regDeposit; + // Min number of staking periods before the service can be unstaked + uint256 internal minNumStakingPeriods = 3; // Max number of accumulated inactivity periods after which the service is evicted uint256 internal maxNumInactivityPeriods = 3; // Liveness period @@ -109,8 +111,8 @@ contract BaseSetup is Test { // Deploy service staking native token and arbitrary ERC20 token ServiceStakingBase.StakingParams memory stakingParams = ServiceStakingBase.StakingParams(maxNumServices, - rewardsPerSecond, minStakingDeposit, maxNumInactivityPeriods, livenessPeriod, livenessRatio, - numAgentInstances, emptyArray, 0, bytes32(0)); + rewardsPerSecond, minStakingDeposit, minNumStakingPeriods, maxNumInactivityPeriods, livenessPeriod, + livenessRatio, numAgentInstances, emptyArray, 0, bytes32(0)); agentMech = new MockAgentMech(); serviceStakingMechUsage = new ServiceStakingMechUsage(stakingParams, address(serviceRegistry), multisigProxyHash, address(agentMech)); @@ -239,7 +241,7 @@ contract ServiceStakingMechUsages is BaseSetup { } // Move one day ahead - vm.warp(block.timestamp + serviceStakingMechUsage.maxAllowedInactivity() + 1); + vm.warp(block.timestamp + serviceStakingMechUsage.maxInactivityDuration() + 1); // Call the checkpoint serviceStakingMechUsage.checkpoint(); @@ -310,7 +312,7 @@ contract ServiceStakingMechUsages is BaseSetup { } // Move one day ahead - vm.warp(block.timestamp + serviceStakingMechUsage.maxAllowedInactivity() + 1); + vm.warp(block.timestamp + serviceStakingMechUsage.maxInactivityDuration() + 1); // Call the checkpoint serviceStakingMechUsage.checkpoint(); @@ -390,7 +392,7 @@ contract ServiceStakingMechUsages is BaseSetup { } // Move one day ahead - vm.warp(block.timestamp + serviceStakingMechUsage.maxAllowedInactivity() + 1); + vm.warp(block.timestamp + serviceStakingMechUsage.maxInactivityDuration() + 1); // Call the checkpoint serviceStakingMechUsage.checkpoint(); @@ -470,7 +472,7 @@ contract ServiceStakingMechUsages is BaseSetup { } // Move one day ahead - vm.warp(block.timestamp + serviceStakingMechUsage.maxAllowedInactivity() + 1); + vm.warp(block.timestamp + serviceStakingMechUsage.maxInactivityDuration() + 1); // Call the checkpoint serviceStakingTokenMechUsage.checkpoint();