From b0e5d98b016c17da7ebbc9fe5c7361b05eaab3e0 Mon Sep 17 00:00:00 2001 From: SonYoungsung Date: Fri, 12 Jan 2024 14:37:17 +0900 Subject: [PATCH] Feat : SDK - getContract ethers contracts instance --- contracts/data/tonstarter/data.json | 2 +- contracts/data/tosv2/abi/LibStaking.json | 127 ++ contracts/data/tosv2/abi/LibTreasury.json | 30 + contracts/data/tosv2/abi/LockTOS.json | 1443 +++++++++++++ contracts/data/tosv2/abi/StakingV2.json | 1825 +++++++++++++++++ contracts/data/tosv2/abi/StakingV2Proxy.json | 999 +++++++++ .../data/tosv2/abi/TOSValueCalculator.json | 735 +++++++ contracts/data/tosv2/abi/Treasury.json | 1444 +++++++++++++ contracts/data/tosv2/abi/TreasuryProxy.json | 1052 ++++++++++ contracts/data/tosv2/data.json | 2 + contracts/src/trimAbis.ts | 13 +- contracts/tokamak.contractlist.json | 47 +- src/utils/coercion.ts | 4 +- src/utils/contract.ts | 5 +- test/index.test.ts | 4 +- tokamak.contractlist.json | 47 +- 16 files changed, 7681 insertions(+), 98 deletions(-) create mode 100644 contracts/data/tosv2/abi/LibStaking.json create mode 100644 contracts/data/tosv2/abi/LibTreasury.json create mode 100644 contracts/data/tosv2/abi/LockTOS.json create mode 100644 contracts/data/tosv2/abi/StakingV2.json create mode 100644 contracts/data/tosv2/abi/StakingV2Proxy.json create mode 100644 contracts/data/tosv2/abi/TOSValueCalculator.json create mode 100644 contracts/data/tosv2/abi/Treasury.json create mode 100644 contracts/data/tosv2/abi/TreasuryProxy.json diff --git a/contracts/data/tonstarter/data.json b/contracts/data/tonstarter/data.json index 9571031..ea8ec3d 100644 --- a/contracts/data/tonstarter/data.json +++ b/contracts/data/tonstarter/data.json @@ -25,7 +25,7 @@ "L1StosInL2": "0x5c8ee41536721D2e31352259D3A84419B09d716F", "L1StosInL2Proxy": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", "LockIdNftForRegister": "0x48f60aAf60D5E162b2DebFD4F70c88fE01b7c331", - "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b116342138", + "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b1163421385", "L2UniversalStos": "0xF9d75D5814e1C3D734342bD5Ed0637b9c49c3f69", "L2UniversalStosProxy": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", "L2DividendPoolForStos": "0x310AeC1C6Ab68DD1DB4bf9B885835BD73BdEb958", diff --git a/contracts/data/tosv2/abi/LibStaking.json b/contracts/data/tosv2/abi/LibStaking.json new file mode 100644 index 0000000..fe4907b --- /dev/null +++ b/contracts/data/tosv2/abi/LibStaking.json @@ -0,0 +1,127 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibStaking", + "sourceName": "contracts/libraries/LibStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "principal", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "n", + "type": "uint256" + } + ], + "name": "compound", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lockTos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_periodWeeks", + "type": "uint256" + } + ], + "name": "getUnlockTime", + "outputs": [ + { + "internalType": "uint256", + "name": "sTosEpochUnit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unlockTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_runwayTOS", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_totalTOS", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rebasePerEpoch", + "type": "uint256" + } + ], + "name": "possibleEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int128", + "name": "x", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "n", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "int128", + "name": "r", + "type": "int128" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x6108c961003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c806343b440821461005b578063ae581bc214610081578063b022e588146100a7578063f3c85eba146100cf575b600080fd5b61006e610069366004610776565b6100e2565b6040519081526020015b60405180910390f35b61009461008f36600461072e565b610166565b604051600f9190910b8152602001610078565b6100ba6100b53660046106ef565b6101c9565b60408051928352602083019190915201610078565b61006e6100dd366004610776565b610274565b6000806101096101046100f587876102af565b6100ff60016102ed565b61030a565b61033e565b905060006829724fe657ff75db8061013461010461012f87670de0b6b3a76400006107a1565b6102ed565b61013e91906107ec565b9050600061015861014f8484610378565b600f0b60401d90565b60070b979650505050505050565b600061017260016102ed565b90505b81156101c357610186600283610853565b600114156101ac5761019881846103de565b90506101a560018361083c565b9150610175565b6101b683846103de565b92506101a56002836107b9565b92915050565b600080846001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561020557600080fd5b505afa158015610219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023d919061075e565b915061024982846107cd565b61025390856107a1565b90508161026081836107b9565b61026a91906107cd565b9050935093915050565b60006102a76102a161029b61028960016102ed565b6100ff87670de0b6b3a76400006102af565b84610166565b85610414565b949350505050565b6000816102bb57600080fd5b60006102c7848461047c565b905060016001607f1b036001600160801b03821611156102e657600080fd5b9392505050565b600060016001603f1b0382111561030357600080fd5b5060401b90565b6000600f83810b9083900b0160016001607f1b03198112801590610335575060016001607f1b038113155b6102e657600080fd5b60008082600f0b1361034f57600080fd5b608061035a83610615565b600f0b6fb17217f7d1cf79abc9e3b39803f2f6af02901c9050919050565b600081600f0b6000141561038b57600080fd5b600082600f0b604085600f0b901b816103b457634e487b7160e01b600052601260045260246000fd5b05905060016001607f1b03198112801590610335575060016001607f1b038113156102e657600080fd5b6000600f83810b9083900b0260401d60016001607f1b03198112801590610335575060016001607f1b038113156102e657600080fd5b600081610423575060006101c3565b600083600f0b121561043457600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b0381111561046357600080fd5b60401b811981111561047457600080fd5b019392505050565b60008161048857600080fd5b60006001600160c01b0384116104c15782604085901b816104b957634e487b7160e01b600052601260045260246000fd5b049050610601565b60c084811c600160201b81106104d9576020918201911c5b6201000081106104eb576010918201911c5b61010081106104fc576008918201911c5b6010811061050c576004918201911c5b6004811061051c576002918201911c5b6002811061052b576001820191505b60bf820360018603901c6001018260ff0387901b8161055a57634e487b7160e01b600052601260045260246000fd5b0492506001600160801b0383111561057157600080fd5b608085901c83026001600160801b038616840260c088901c604089901b8281101561059d576001820391505b608084901b929003828110156105b4576001820391505b829003608084901c82146105d857634e487b7160e01b600052600160045260246000fd5b8881816105f557634e487b7160e01b600052601260045260246000fd5b04870196505050505050505b6001600160801b038111156102e657600080fd5b60008082600f0b1361062657600080fd5b6000600f83900b600160401b8112610640576040918201911d5b600160201b8112610653576020918201911d5b620100008112610665576010918201911d5b6101008112610676576008918201911d5b60108112610686576004918201911d5b60048112610696576002918201911d5b600281126106a5576001820191505b603f19820160401b600f85900b607f8490031b6001603f1b5b60008113156106e45790800260ff81901c8281029390930192607f011c9060011d6106be565b509095945050505050565b600080600060608486031215610703578283fd5b83356001600160a01b0381168114610719578384fd5b95602085013595506040909401359392505050565b60008060408385031215610740578182fd5b823580600f0b8114610750578283fd5b946020939093013593505050565b60006020828403121561076f578081fd5b5051919050565b60008060006060848603121561078a578283fd5b505081359360208301359350604090920135919050565b600082198211156107b4576107b4610867565b500190565b6000826107c8576107c861087d565b500490565b60008160001904831182151516156107e7576107e7610867565b500290565b6000600f82810b9084900b828112801560016001607f1b031983018412161561081757610817610867565b60016001607f1b038201831381161561083257610832610867565b5090039392505050565b60008282101561084e5761084e610867565b500390565b6000826108625761086261087d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212200eda2c7a208da652f53ccc36a71a5eb79ed4fb1f4e6d17369004ed73c5495c7664736f6c63430008040033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c806343b440821461005b578063ae581bc214610081578063b022e588146100a7578063f3c85eba146100cf575b600080fd5b61006e610069366004610776565b6100e2565b6040519081526020015b60405180910390f35b61009461008f36600461072e565b610166565b604051600f9190910b8152602001610078565b6100ba6100b53660046106ef565b6101c9565b60408051928352602083019190915201610078565b61006e6100dd366004610776565b610274565b6000806101096101046100f587876102af565b6100ff60016102ed565b61030a565b61033e565b905060006829724fe657ff75db8061013461010461012f87670de0b6b3a76400006107a1565b6102ed565b61013e91906107ec565b9050600061015861014f8484610378565b600f0b60401d90565b60070b979650505050505050565b600061017260016102ed565b90505b81156101c357610186600283610853565b600114156101ac5761019881846103de565b90506101a560018361083c565b9150610175565b6101b683846103de565b92506101a56002836107b9565b92915050565b600080846001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561020557600080fd5b505afa158015610219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023d919061075e565b915061024982846107cd565b61025390856107a1565b90508161026081836107b9565b61026a91906107cd565b9050935093915050565b60006102a76102a161029b61028960016102ed565b6100ff87670de0b6b3a76400006102af565b84610166565b85610414565b949350505050565b6000816102bb57600080fd5b60006102c7848461047c565b905060016001607f1b036001600160801b03821611156102e657600080fd5b9392505050565b600060016001603f1b0382111561030357600080fd5b5060401b90565b6000600f83810b9083900b0160016001607f1b03198112801590610335575060016001607f1b038113155b6102e657600080fd5b60008082600f0b1361034f57600080fd5b608061035a83610615565b600f0b6fb17217f7d1cf79abc9e3b39803f2f6af02901c9050919050565b600081600f0b6000141561038b57600080fd5b600082600f0b604085600f0b901b816103b457634e487b7160e01b600052601260045260246000fd5b05905060016001607f1b03198112801590610335575060016001607f1b038113156102e657600080fd5b6000600f83810b9083900b0260401d60016001607f1b03198112801590610335575060016001607f1b038113156102e657600080fd5b600081610423575060006101c3565b600083600f0b121561043457600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b0381111561046357600080fd5b60401b811981111561047457600080fd5b019392505050565b60008161048857600080fd5b60006001600160c01b0384116104c15782604085901b816104b957634e487b7160e01b600052601260045260246000fd5b049050610601565b60c084811c600160201b81106104d9576020918201911c5b6201000081106104eb576010918201911c5b61010081106104fc576008918201911c5b6010811061050c576004918201911c5b6004811061051c576002918201911c5b6002811061052b576001820191505b60bf820360018603901c6001018260ff0387901b8161055a57634e487b7160e01b600052601260045260246000fd5b0492506001600160801b0383111561057157600080fd5b608085901c83026001600160801b038616840260c088901c604089901b8281101561059d576001820391505b608084901b929003828110156105b4576001820391505b829003608084901c82146105d857634e487b7160e01b600052600160045260246000fd5b8881816105f557634e487b7160e01b600052601260045260246000fd5b04870196505050505050505b6001600160801b038111156102e657600080fd5b60008082600f0b1361062657600080fd5b6000600f83900b600160401b8112610640576040918201911d5b600160201b8112610653576020918201911d5b620100008112610665576010918201911d5b6101008112610676576008918201911d5b60108112610686576004918201911d5b60048112610696576002918201911d5b600281126106a5576001820191505b603f19820160401b600f85900b607f8490031b6001603f1b5b60008113156106e45790800260ff81901c8281029390930192607f011c9060011d6106be565b509095945050505050565b600080600060608486031215610703578283fd5b83356001600160a01b0381168114610719578384fd5b95602085013595506040909401359392505050565b60008060408385031215610740578182fd5b823580600f0b8114610750578283fd5b946020939093013593505050565b60006020828403121561076f578081fd5b5051919050565b60008060006060848603121561078a578283fd5b505081359360208301359350604090920135919050565b600082198211156107b4576107b4610867565b500190565b6000826107c8576107c861087d565b500490565b60008160001904831182151516156107e7576107e7610867565b500290565b6000600f82810b9084900b828112801560016001607f1b031983018412161561081757610817610867565b60016001607f1b038201831381161561083257610832610867565b5090039392505050565b60008282101561084e5761084e610867565b500390565b6000826108625761086261087d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212200eda2c7a208da652f53ccc36a71a5eb79ed4fb1f4e6d17369004ed73c5495c7664736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/abi/LibTreasury.json b/contracts/data/tosv2/abi/LibTreasury.json new file mode 100644 index 0000000..cbedf43 --- /dev/null +++ b/contracts/data/tosv2/abi/LibTreasury.json @@ -0,0 +1,30 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibTreasury", + "sourceName": "contracts/libraries/LibTreasury.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "role", + "type": "uint256" + } + ], + "name": "getSatatus", + "outputs": [ + { + "internalType": "enum LibTreasury.STATUS", + "name": "_status", + "type": "LibTreasury.STATUS" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x61018d61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063a273ca221461003a575b600080fd5b61004d610048366004610117565b610063565b60405161005a919061012f565b60405180910390f35b6000600182141561007657506001919050565b600282141561008757506002919050565b600382141561009857506003919050565b60048214156100a957506004919050565b60058214156100ba57506005919050565b60068214156100cb57506006919050565b60078214156100dc57506007919050565b60088214156100ed57506008919050565b60098214156100fe57506009919050565b600a82141561010f5750600a919050565b506000919050565b600060208284031215610128578081fd5b5035919050565b60208101600b831061015157634e487b7160e01b600052602160045260246000fd5b9190529056fea2646970667358221220203bbb7e42af0260e350e4e78bf7ede2123661d11df3a79439060c68b62c25b164736f6c63430008040033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063a273ca221461003a575b600080fd5b61004d610048366004610117565b610063565b60405161005a919061012f565b60405180910390f35b6000600182141561007657506001919050565b600282141561008757506002919050565b600382141561009857506003919050565b60048214156100a957506004919050565b60058214156100ba57506005919050565b60068214156100cb57506006919050565b60078214156100dc57506007919050565b60088214156100ed57506008919050565b60098214156100fe57506009919050565b600a82141561010f5750600a919050565b506000919050565b600060208284031215610128578081fd5b5035919050565b60208101600b831061015157634e487b7160e01b600052602160045260246000fd5b9190529056fea2646970667358221220203bbb7e42af0260e350e4e78bf7ede2123661d11df3a79439060c68b62c25b164736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/abi/LockTOS.json b/contracts/data/tosv2/abi/LockTOS.json new file mode 100644 index 0000000..4031b71 --- /dev/null +++ b/contracts/data/tosv2/abi/LockTOS.json @@ -0,0 +1,1443 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LockTOSv2Logic0", + "sourceName": "contracts/stake/LockTOSv2Logic0.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LockAmountIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTime", + "type": "uint256" + } + ], + "name": "LockCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LockDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTime", + "type": "uint256" + } + ], + "name": "LockUnlockTimeIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LockWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BURNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MULTIPLIER", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeHolders", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "activeLocksOf", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "allHolders", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allLocks", + "outputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "withdrawn", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "balanceOfAt", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "balanceOfLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "balanceOfLockAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_unlockWeeks", + "type": "uint256" + } + ], + "name": "createLockByStaker", + "outputs": [ + { + "internalType": "uint256", + "name": "lockId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cumulativeEpochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "cumulativeTOSAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentStakedTotalTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "depositFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "epochUnit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalCheckpoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "inUse", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "increaseAmountByStaker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_lockIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_values", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "curTime", + "type": "uint256" + } + ], + "name": "increaseAmountOfIds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_unlockWeeks", + "type": "uint256" + } + ], + "name": "increaseUnlockTimeByStaker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockIdCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lockPointHistory", + "outputs": [ + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lock_", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lockedBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "withdrawn", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "locksInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "locksOf", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "migratedL2", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "needCheckpoint", + "outputs": [ + { + "internalType": "bool", + "name": "need", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pointHistory", + "outputs": [ + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "pointHistoryOf", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "bias", + "type": "int256" + }, + { + "internalType": "int256", + "name": "slope", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibLockTOS.Point[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxTime", + "type": "uint256" + } + ], + "name": "setMaxTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_staker", + "type": "address" + } + ], + "name": "setStaker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "slopeChanges", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakeRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "staker", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "totalLockedAmountOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "totalSupplyAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "uniqueUsers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userLocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "withdrawAllByStaker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_lockId", + "type": "uint256" + } + ], + "name": "withdrawByStaker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "withdrawableAmountOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "withdrawableLocksOf", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052600160075534801561001557600080fd5b5061453e806100256000396000f3fe608060405234801561001057600080fd5b50600436106103715760003560e01c80639010d07c116101d5578063c577365611610105578063dd383394116100a8578063dd3833941461074a578063e43cb6661461075d578063ea31e89514610770578063eb86b34214610778578063ed50c6991461078b578063efe2b7201461079e578063f52a36f7146107b1578063f52dde6d146107c4578063fd2dcecf146107d757610371565b8063c5773656146106c4578063c5dc1e5f146106d9578063c79acdda146106f9578063c80a3aa61461070c578063ca15c87314610714578063cd29ca0e14610727578063d53913931461072f578063d547741f1461073757610371565b8063a29a43bb11610178578063a29a43bb1461062d578063aa33fedb14610640578063afae883e14610653578063b2e9a1b71461065b578063b534ad5614610663578063b911135f1461066b578063b94419e01461067e578063c0a37b3f14610691578063c3f9ab58146106a457610371565b80639010d07c146105ab57806391d14854146105be578063981b24d0146105d157806398b777e7146105e45780639ce56305146105f75780639f7166a41461060a578063a1f5f50e1461061d578063a217fddf1461062557610371565b806341c04d5e116102b057806363d5a3d91161025357806363d5a3d914610521578063642cf649146105345780636830483514610547578063704802751461054f57806370a082311461056257806375829def1461057557806375b238fc1461058857806389f395de146105905780638ad4c4471461059857610371565b806341c04d5e1461048d5780634cf5fbf5146104955780634ee2cd7e146104a857806350d2a276146104bb578063550d01a3146104db5780635d16a6f9146104ee5780635ebaf1db1461051157806363a8fd891461051957610371565b806322e67e711161031857806322e67e7114610407578063248a9ca31461040f57806324d7806c14610422578063282c51f31461043557806329cb924d1461043d5780632f2ff15d1461044557806336568abe14610458578063367b7b231461046b57610371565b8063059f8b1614610376578063086c46f4146103945780630b7858ba146103a75780630db9cb0c146103bc5780631785f53c146103cf57806318160ddd146103e45780631ac40e66146103ec5780631b831944146103f4575b600080fd5b61037e6107df565b60405161038b9190613fa4565b60405180910390f35b61037e6103a2366004613c5f565b6107eb565b6103af6108b7565b60405161038b9190613f99565b61037e6103ca366004613ca2565b6108fb565b6103e26103dd366004613c5f565b610b11565b005b61037e610b70565b6103e2610c42565b6103e2610402366004613cd4565b610c4a565b61037e610f1c565b61037e61041d366004613dbc565b610f22565b6103af610430366004613c5f565b610f37565b61037e610f57565b61037e610f7b565b6103e2610453366004613dd4565b610f7f565b6103e2610466366004613dd4565b610fe6565b61047e610479366004613dff565b611047565b60405161038b93929190613fad565b61037e611089565b6103e26104a3366004613ca2565b6110ad565b61037e6104b6366004613c79565b611233565b6104ce6104c9366004613e20565b6112f0565b60405161038b9190613e60565b6103af6104e9366004613c5f565b61130b565b6105016104fc366004613c79565b611320565b60405161038b94939291906142e4565b6104ce611355565b6103af611369565b61050161052f366004613dbc565b611372565b61037e610542366004613dff565b61139c565b6104ce611415565b6103e261055d366004613c5f565b611429565b61037e610570366004613c5f565b611485565b6103e2610583366004613c5f565b611539565b61037e61165a565b6104ce61166c565b61047e6105a6366004613dbc565b61167b565b6104ce6105b9366004613dff565b6116ae565b6103af6105cc366004613dd4565b6116cd565b61037e6105df366004613dbc565b6116e5565b6103e26105f2366004613dbc565b61177b565b61047e610605366004613dbc565b6117c4565b6103e2610618366004613c5f565b6117e3565b6103af611989565b61037e611999565b6103e261063b366004613c5f565b61199e565b61037e61064e366004613c79565b611a63565b61037e611a94565b6103af611a9a565b61037e611aa3565b6104ce610679366004613dbc565b611aa9565b61037e61068c366004613dbc565b611ac4565b6103e261069f366004613c79565b611b78565b6106b76106b2366004613c5f565b611c24565b60405161038b9190613f61565b6106cc611c90565b60405161038b9190613ebb565b6106ec6106e7366004613dbc565b611e25565b60405161038b9190613f08565b6103af610707366004613dbc565b611eb5565b6106cc611eca565b61037e610722366004613dbc565b611f2c565b61037e611f43565b61037e611f49565b6103e2610745366004613dd4565b611f6d565b6106b7610758366004613c5f565b611fc6565b6106b761076b366004613c5f565b61222a565b61037e6123f4565b61037e610786366004613c5f565b61247a565b6104ce610799366004613dbc565b612564565b6103e26107ac366004613ca2565b61258e565b61037e6107bf366004613dbc565b6125f0565b6103e26107d2366004613ca2565b612602565b61037e6127eb565b670de0b6b3a764000081565b6001600160a01b0381166000908152600d602052604081205481805b828110156108ad576001600160a01b0385166000908152600d6020526040812080548390811061083357fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381019390935260028101549383018490526003015460ff161515606083015292509061089e9085906127f1565b93505050806001019050610807565b509150505b919050565b600954600090806108cc5760019150506108f8565b600154600960018303815481106108df57fe5b9060005260206000209060030201600201544203119150505b90565b60145460009061010090046001600160a01b03163314610950576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b600083116109795760405162461bcd60e51b81526004016109709061412d565b60405180910390fd5b600082116109995760405162461bcd60e51b8152600401610970906141f8565b6005546109a690836127f1565b6005556006546109b690846127f1565b6006556001546000906109d5906109ce90859061284b565b42906127f1565b6001549091506109ef906109e983826128a4565b9061284b565b90506002544282031115610a155760405162461bcd60e51b815260040161097090614022565b6001600160a01b0385166000908152600d6020526040902054610a7e57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0387161790555b600454610a8c9060016127f1565b60048190559150610a9f858386846128e6565b6001600160a01b0385166000908152600d6020908152604080832080546001810182559084529190922001839055517f71fc552ee832a9004ea0bdb07cb6dd9d641eb2cb53b3cfe88c8fdcff886734a090610b01908790859088908690613e95565b60405180910390a1509392505050565b610b1a33610f37565b610b555760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b610b6d60008051602061444783398151915282610fe6565b50565b600954600090610b82575060006108f8565b60098054600091610bd8916000198101908110610b9b57fe5b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505042612aea565b90506000610c09610bfe610bf9846040015142612be990919063ffffffff16565b612c2b565b602084015190612c73565b9050610c3b670de0b6b3a764000082846000015113610c29576000610c35565b8351610c359084612d1c565b906128a4565b9250505090565b610b6d612d81565b610c5333610f37565b610c8e5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b60008451118015610ca0575082518451145b8015610cad575081518451145b610cc95760405162461bcd60e51b815260040161097090614082565b835160005b81811015610f14576000868281518110610ce457fe5b602002602001015190506000868381518110610cfc57fe5b602002602001015190506000868481518110610d1457fe5b6020908102919091018101516001600160a01b0385166000908152600b835260408082208683528452908190208151608081018352815481526001820154948101949094526002810154918401919091526003015460ff161580156060840181905291935090610d845750600082115b15610f0457600654610d9690836127f1565b5060408051608081018252825181526020808401519082015281830151918101829052600060608201528291610dcc90856127f1565b6040820152610ddc81838b612f7a565b6001600160a01b0386166000908152600b60209081526040808320888452825280832084518155828501805160018084019190915583870180516002808601919091556060890180516003968701805491151560ff19928316179055600c9098529588208951815593519284019290925551828201819055935191909201805491151591909416179092559054610e8491610bf99190610c3590670de0b6b3a764000061284b565b90506000610eac610ea5610bf98d8660200151612be990919063ffffffff16565b8390612c73565b6040805160608101825291825260208083019485528282018e815260008b8152600a83529283208054600181810183559185529290932093516003909202909301908155935190840155516002909201919091555050505b505060019092019150610cce9050565b505050505050565b60025481565b60009081526010602052604090206002015490565b6000610f51600080516020614447833981519152836116cd565b92915050565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b4290565b600082815260106020526040902060020154610f9d906105cc613172565b610fd85760405162461bcd60e51b815260040180806020018281038252602f815260200180614364602f913960400191505060405180910390fd5b610fe28282613176565b5050565b610fee613172565b6001600160a01b0316816001600160a01b03161461103d5760405162461bcd60e51b815260040180806020018281038252602f8152602001806144da602f913960400191505060405180910390fd5b610fe282826131df565b600a602052816000526040600020818154811061106357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b13081565b60145461010090046001600160a01b031633146110ff576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6000811161111f5760405162461bcd60e51b81526004016109709061412d565b6001600160a01b0383166000908152600b6020908152604080832085845282529182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526111945760405162461bcd60e51b815260040161097090614102565b80516111b25760405162461bcd60e51b8152600401610970906142b7565b428160200151116111d55760405162461bcd60e51b8152600401610970906140a8565b6006546111e290836127f1565b6006556111f284848460006128e6565b7fea44bc904f77b1be47cd5b840b00f19b7238f88d7524fa5a86629282bfe6bcc584848460405161122593929190613e74565b60405180910390a150505050565b6001600160a01b0382166000908152600d602090815260408083208054825181850281018501909352808352849383018282801561129057602002820191906000526020600020905b81548152602001906001019080831161127c575b505050505090508051600014156112ab576000915050610f51565b60005b81518110156112e8576112de6112d78383815181106112c957fe5b60200260200101518661139c565b84906127f1565b92506001016112ae565b505092915050565b6013602052600090815260409020546001600160a01b031681565b60126020526000908152604090205460ff1681565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff1684565b60145461010090046001600160a01b031681565b60005460ff1681565b600c6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6000828152600a60205260408120819081906113b89085613248565b91509150816113cc57600092505050610f51565b60006113eb610bfe610bf9846040015188612be990919063ffffffff16565b905061140b670de0b6b3a764000082846000015113610c29576000610c35565b9695505050505050565b60005461010090046001600160a01b031681565b61143233610f37565b61146d5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b610b6d60008051602061444783398151915282610f7f565b6001600160a01b0381166000908152600d60209081526040808320805482518185028101850190935280835284938301828280156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b505050505090508051600014156114fd5760009150506108b2565b60005b8151811015611532576115286112d783838151811061151b57fe5b6020026020010151611ac4565b9250600101611500565b5050919050565b61154233610f37565b61157d5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b6001600160a01b0381166115d3576040805162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b604482015290519081900360640190fd5b336001600160a01b038216141561162a576040805162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604482015290519081900360640190fd5b61164260008051602061444783398151915282610f7f565b610b6d60008051602061444783398151915233610fe6565b60008051602061444783398151915281565b6003546001600160a01b031681565b6009818154811061168b57600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b60008281526010602052604081206116c69083613340565b9392505050565b60008281526010602052604081206116c6908361334c565b6009546000906116f7575060006108b2565b600080611705600985613248565b9150915081611719576000925050506108b2565b6117238185612aea565b90506000611741610bf9836040015187612be990919063ffffffff16565b8260200151029050611772670de0b6b3a764000082846000015113611767576000610c35565b8351839003906128a4565b95945050505050565b61178433610f37565b6117bf5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b600255565b6000908152600c60205260409020805460018201546002909201549092565b6007546001146118055760405162461bcd60e51b815260040161097090614285565b600060075560145461010090046001600160a01b0316331461185c576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600d6020526040902080546118805750611981565b60005b815481101561197e576000600c600084848154811061189e57fe5b6000918252602080832090910154835282810193909352604091820190208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615801560608301819052919250906119155750600083838154811061190857fe5b9060005260206000200154115b8015611925575060008160400151115b80156119315750805115155b8015611941575060008160200151115b80156119505750428160200151105b15611975576119758484848154811061196557fe5b9060005260206000200154613361565b50600101611883565b50505b506001600755565b600054600160a81b900460ff1681565b600081565b6119a733610f37565b6119e25760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b6001600160a01b038116611a085760405162461bcd60e51b815260040161097090614164565b6014546001600160a01b03828116610100909204161415611a3b5760405162461bcd60e51b81526004016109709061422f565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600d6020528160005260406000208181548110611a7f57600080fd5b90600052602060002001600091509150505481565b60045481565b60145460ff1681565b60055481565b6011602052600090815260409020546001600160a01b031681565b6000818152600a602052604081205480611ae25760009150506108b2565b6000838152600a6020526040812080546000198401908110611b0057fe5b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000611b58610bfe610bf9846040015142612be990919063ffffffff16565b9050611772670de0b6b3a764000082846000015113610c29576000610c35565b600754600114611b9a5760405162461bcd60e51b815260040161097090614285565b600060075560145461010090046001600160a01b03163314611bf1576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b60008111611c115760405162461bcd60e51b815260040161097090614059565b611c1b8282613361565b50506001600755565b6001600160a01b0381166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015611c8457602002820191906000526020600020905b815481526020019060010190808311611c70575b50505050509050919050565b6008546060906000906001600160401b0381118015611cae57600080fd5b50604051908082528060200260200182016040528015611cd8578160200160208202803683370190505b5090506000805b600854811015611d4f576000611d1560088381548110611cfb57fe5b6000918252602090912001546001600160a01b031661222a565b805190915015611d465782806001019350506001848381518110611d3557fe5b911515602092830291909101909101525b50600101611cdf565b506000816001600160401b0381118015611d6857600080fd5b50604051908082528060200260200182016040528015611d92578160200160208202803683370190505b5090506000805b600854811015611e1b57848181518110611daf57fe5b602002602001015115611e135760088181548110611dc957fe5b600091825260209091200154835160018401936001600160a01b039092169185918110611df257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101611d99565b5090935050505090565b6060600a6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611eaa5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611e5a565b505050509050919050565b600f6020526000908152604090205460ff1681565b60606008805480602002602001604051908101604052809291908181526020018280548015611f2257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f04575b5050505050905090565b6000818152601060205260408120610f519061352a565b60065481565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b600082815260106020526040902060020154611f8b906105cc613172565b61103d5760405162461bcd60e51b81526004018080602001828103825260308152602001806143d66030913960400191505060405180910390fd5b60145460609061010090046001600160a01b0316331461201b576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d602052604081205490805b828110156120f9576001600160a01b0385166000908152600d6020526040812080548390811061206357fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff1615156060840152925042108015906120d5575060008160400151115b80156120e357506060810151155b156120ef576001909301925b5050600101612037565b506000816001600160401b038111801561211257600080fd5b5060405190808252806020026020018201604052801561213c578160200160208202803683370190505b5090506000915060005b83811015612221576001600160a01b0386166000908152600d6020526040812080548390811061217257fe5b60009182526020808320909101546001600160a01b038a168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff1615156060840152925042108015906121e4575060008160400151115b80156121f257506060810151155b15612217578184868060010197508151811061220a57fe5b6020026020010181815250505b5050600101612146565b50949350505050565b6001600160a01b0381166000908152600d6020526040812054606091805b828110156122eb576001600160a01b0385166000908152600d6020526040812080548390811061227457fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210156122e1576001909301925b5050600101612248565b506000816001600160401b038111801561230457600080fd5b5060405190808252806020026020018201604052801561232e578160200160208202803683370190505b5090506000915060005b83811015612221576001600160a01b0386166000908152600d6020526040812080548390811061236457fe5b60009182526020808320909101546001600160a01b038a168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210156123ea57818486806001019750815181106123dd57fe5b6020026020010181815250505b5050600101612338565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612425903090600401613e60565b60206040518083038186803b15801561243d57600080fd5b505afa158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124759190613e48565b905090565b6001600160a01b0381166000908152600d602052604081205481805b828110156108ad576001600160a01b0385166000908152600d602052604081208054839081106124c257fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210801590612534575060008160400151115b801561254257506060810151155b1561255a5760408101516125579085906127f1565b93505b5050600101612496565b6008818154811061257457600080fd5b6000918252602090912001546001600160a01b0316905081565b60145461010090046001600160a01b031633146125e0576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6125eb8383836110ad565b505050565b600e6020526000908152604090205481565b60145461010090046001600160a01b03163314612654576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b600081116126745760405162461bcd60e51b8152600401610970906141f8565b60055461268190826127f1565b6005556001600160a01b0383166000908152600b602090815260408083208584528252808320815160808101835281548152600180830154948201949094526002820154928101929092526003015460ff161515606082015290549091906126f9906126ee90859061284b565b6020840151906127f1565b60015490915061270d906109e983826128a4565b9050600254428203106127325760405162461bcd60e51b815260040161097090614022565b428260200151116127555760405162461bcd60e51b81526004016109709061418a565b808260200151106127785760405162461bcd60e51b8152600401610970906141c1565b600082604001511161279c5760405162461bcd60e51b815260040161097090613ff2565b6127a985856000846128e6565b7fb8596b0e78133666b86648f60233cc2d078144d06df7874ea9f612a3ccc3e2fb8585836040516127dc93929190613e74565b60405180910390a15050505050565b60015481565b6000828201838110156116c6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261285a57506000610f51565b8282028284828161286757fe5b04146116c65760405162461bcd60e51b81526004018080602001828103825260218152602001806144266021913960400191505060405180910390fd5b60006116c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613535565b6007546001146129085760405162461bcd60e51b815260040161097090614285565b600060078190556001600160a01b0385168152600b602090815260408083208684528252808320815160808082018452825482526001830154828601908152600284015483860190815260039094015460ff161515606080850191909152855192830186528351835290519582019590955291519282018390529281019390935290919061299690856127f1565b604082015282156129a957602081018390525b80516129b3574281525b6129bd81836135d7565b6001600160a01b0386166000908152600b60209081526040808320888452825280832084518155828501805160018084019190915583870180516002808601919091556060890180516003968701805491151560ff19928316179055600c9098529588208951815593519284019290925551828201819055935191909201805491151591909416179092559054612a6591610bf99190610c3590670de0b6b3a764000061284b565b90506000612a86610ea5610bf9428660200151612be990919063ffffffff16565b6040805160608101825291825260208083019485524283830190815260009a8b52600a8252918a20805460018181018355918c5291909a20925160039091029092019182559251818901559151600290920191909155505050600792909255505050565b612af2613bbb565b6001546040840151600091612b0b916109e990826128a4565b90505b828114612be157612b33612b2d600154836127f190919063ffffffff16565b846137a7565b6000818152600e6020526040808220549087015192935091612b6690610bf990612b5e908690612be9565b6001546137a7565b9050612b8a612b82828860200151612c7390919063ffffffff16565b875190612d1c565b86526020860151612b9b90836137bd565b60208701528551600012612bb0576000612bb3565b85515b86526020860151600012612bc8576000612bce565b85602001515b6020870152505060408401819052612b0e565b509192915050565b60006116c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000600160ff1b8210612c6f5760405162461bcd60e51b815260040180806020018281038252602881526020018061448e6028913960400191505060405180910390fd5b5090565b600082612c8257506000610f51565b82600019148015612c965750600160ff1b82145b15612cd25760405162461bcd60e51b81526004018080602001828103825260278152602001806144676027913960400191505060405180910390fd5b82820282848281612cdf57fe5b05146116c65760405162461bcd60e51b81526004018080602001828103825260278152602001806144676027913960400191505060405180910390fd5b6000818303818312801590612d315750838113155b80612d465750600083128015612d4657508381135b6116c65760405162461bcd60e51b81526004018080602001828103825260248152602001806144b66024913960400191505060405180910390fd5b612d89613bbb565b600954429015612de357600980546000198101908110612da557fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509150612e03565b604051806060016040528060008152602001600081526020018281525091505b6001546040830151600091612e1c916109e990826128a4565b90505b818114612f7557612e44612e3e600154836127f190919063ffffffff16565b836137a7565b6000818152600e6020526040808220549086015192935091612e6f90610bf990612b5e908690612be9565b9050612e93612e8b828760200151612c7390919063ffffffff16565b865190612d1c565b85526020850151612ea490836137bd565b60208601528451600012612eb9576000612ebc565b84515b85526020850151600012612ed1576000612ed7565b84602001515b60208601908152604086018481526009805460018101825560009190915287517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af60039092029182015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0830155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b19091015550612e1f9050565b505090565b60408051606080820183526000808352602080840182905283850182905284519283018552818352828101829052938201529185015183929083108015612fc5575060008660400151115b1561301d57612ff2610bf9600254610c35670de0b6b3a76400008a6040015161284b90919063ffffffff16565b60208084019190915286015161301090610bfe90610bf99086612be9565b8252602086015160408301525b828560200151118015613034575060008560400151115b1561309757613061610bf9600254610c35670de0b6b3a7640000896040015161284b90919063ffffffff16565b60208083019190915285015161308a9061307f90610bf99086612be9565b602083015190612c73565b8152602085015160408201525b60006130a1612d81565b825184519192506130bd916130b591612d1c565b8251906137bd565b8152602080830151908401516130e2916130d79190612d1c565b6020830151906137bd565b602082015280516000126130f75760006130fa565b80515b8152602081015160001261310f576000613115565b80602001515b602082015260098054829190600019810190811061312f57fe5b906000526020600020906003020160008201518160000155602082015181600101556040820151816002015590505061316983838761387c565b50505050505050565b3390565b600082815260106020526040902061318e908261393f565b15610fe25761319b613172565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526010602052604090206131f79082613954565b15610fe257613204613172565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000613252613bbb565b83546132615760009150613339565b83546000905b808260010110156132bb5760006132836002610c3585856127f1565b90508587828154811061329257fe5b906000526020600020906003020160020154116132b1578092506132b5565b8091505b50613267565b848683815481106132c857fe5b906000526020600020906003020160020154116133325760018683815481106132ed57fe5b90600052602060002090600302018060405180606001604052908160008201548152602001600182015481526020016002820154815250509050935093505050613339565b6000935050505b9250929050565b60006116c68383613969565b60006116c6836001600160a01b0384166139cd565b6001600160a01b0382166000908152600b6020908152604080832084845282529182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526133d65760405162461bcd60e51b8152600401610970906140d7565b80516133f45760405162461bcd60e51b8152600401610970906142b7565b428160200151106134175760405162461bcd60e51b815260040161097090614255565b600081604001511161343b5760405162461bcd60e51b815260040161097090613fc3565b60408051608081018252600080825260208201819052918101919091526001606082015261346981836135d7565b6040808301516001600160a01b0386166000908152600b60209081528382208783528152838220855181558186018051600180840191909155878701805160028086019190915560608a0180516003968701805491151560ff19928316179055600c909752968990208a51815593519284019290925551908201559251920180549215159290911691909117905590517ff1206247bdd5e2e0cfc00bea4cf05fb8dc479ebee686f9549043179cc7013b30906127dc90879087908590613e74565b6000610f51826139e5565b600081836135c15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561358657818101518382015260200161356e565b50505050905090810190601f1680156135b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135cd57fe5b0495945050505050565b60408051606080820183526000808352602080840182905283850182905284519283018552818352828101829052938201529184015142929083108015613622575060008560400151115b1561367a5761364f610bf9600254610c35670de0b6b3a7640000896040015161284b90919063ffffffff16565b60208084019190915285015161366d90610bfe90610bf99086612be9565b8252602085015160408301525b828460200151118015613691575060008460400151115b156136e9576136be610bf9600254610c35670de0b6b3a7640000886040015161284b90919063ffffffff16565b6020808301919091528401516136dc9061307f90610bf99086612be9565b8152602084015160408201525b60006136f3612d81565b82518451919250613707916130b591612d1c565b815260208083015190840151613721916130d79190612d1c565b60208201528051600012613736576000613739565b80515b8152602081015160001261374e576000613754565b80602001515b602082015260098054829190600019810190811061376e57fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020155905050610f1483836139e9565b60008183106137b657816116c6565b5090919050565b60008282018183128015906137d25750838112155b806137e757506000831280156137e757508381125b6116c65760405162461bcd60e51b81526004018080602001828103825260218152602001806143b56021913960400191505060405180910390fd5b600081848411156138745760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561358657818101518382015260200161356e565b505050900390565b6040808401516000908152600e6020528181205484830180518352929091205491519091908310156138f25760208401516138b89082906137bd565b90508460400151846040015114156138dd5760208501516138da908290612d1c565b90505b6040808501516000908152600e602052208190555b82856040015111801561390c575083604001518560400151115b15613938576020850151613921908390612d1c565b6040808701516000908152600e6020522081905591505b5050505050565b60006116c6836001600160a01b038416613aab565b60006116c6836001600160a01b038416613af5565b815460009082106139ab5760405162461bcd60e51b81526004018080602001828103825260228152602001806143426022913960400191505060405180910390fd5b8260000182815481106139ba57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6040808301516000908152600e602052818120548383018051835292909120549151909190421015613a5f576020830151613a259082906137bd565b9050836040015183604001511415613a4a576020840151613a47908290612d1c565b90505b6040808401516000908152600e602052208190555b428460400151118015613a79575082604001518460400151115b15613aa5576020840151613a8e908390612d1c565b6040808601516000908152600e6020522081905591505b50505050565b6000613ab783836139cd565b613aed57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f51565b506000610f51565b60008181526001830160205260408120548015613bb15783546000198083019190810190600090879083908110613b2857fe5b9060005260206000200154905080876000018481548110613b4557fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080613b7557fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f51565b6000915050610f51565b60405180606001604052806000815260200160008152602001600081525090565b80356001600160a01b03811681146108b257600080fd5b600082601f830112613c03578081fd5b81356020613c18613c1383614324565b614301565b8281528181019085830183850287018401881015613c34578586fd5b855b85811015613c5257813584529284019290840190600101613c36565b5090979650505050505050565b600060208284031215613c70578081fd5b6116c682613bdc565b60008060408385031215613c8b578081fd5b613c9483613bdc565b946020939093013593505050565b600080600060608486031215613cb6578081fd5b613cbf84613bdc565b95602085013595506040909401359392505050565b60008060008060808587031215613ce9578081fd5b84356001600160401b0380821115613cff578283fd5b818701915087601f830112613d12578283fd5b81356020613d22613c1383614324565b82815281810190858301838502870184018d1015613d3e578788fd5b8796505b84871015613d6757613d5381613bdc565b835260019690960195918301918301613d42565b5098505088013592505080821115613d7d578283fd5b613d8988838901613bf3565b94506040870135915080821115613d9e578283fd5b50613dab87828801613bf3565b949793965093946060013593505050565b600060208284031215613dcd578081fd5b5035919050565b60008060408385031215613de6578182fd5b82359150613df660208401613bdc565b90509250929050565b60008060408385031215613e11578182fd5b50508035926020909101359150565b600060208284031215613e31578081fd5b81356001600160e01b0319811681146116c6578182fd5b600060208284031215613e59578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6020808252825182820181905260009190848201906040850190845b81811015613efc5783516001600160a01b031683529284019291840191600101613ed7565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015613f545781518051855286810151878601528501518585015260609093019290850190600101613f25565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613efc57835183529284019291840191600101613f7d565b901515815260200190565b90815260200190565b9283526020830191909152604082015260600190565b6020808252601590820152744e6f20616d6f756e7420746f20776974686472617760581b604082015260600190565b6020808252601690820152754e6f206578697374696e67206c6f636b656420544f5360501b604082015260600190565b6020808252601a908201527f4d617820756e6c6f636b2074696d652069732033207965617273000000000000604082015260600190565b6020808252600f908201526e5f6c6f636b4964206973207a65726f60881b604082015260600190565b6020808252600c908201526b0eee4dedcce40d8cadccee8d60a31b604082015260600190565b602080825260159082015274131bd8dac81d1a5b59481a5cc8199a5b9a5cda1959605a1b604082015260600190565b60208082526011908201527020b63932b0b23c903bb4ba34323930bbb760791b604082015260600190565b6020808252601190820152702637b1b59034b9903bb4ba34323930bbb760791b604082015260600190565b6020808252601f908201527f56616c7565206c6f636b65642073686f756c64206265206e6f6e2d7a65726f00604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6020808252601a908201527f4c6f636b2074696d6520616c72656164792066696e6973686564000000000000604082015260600190565b6020808252601d908201527f4e6577206c6f636b2074696d65206d7573742062652067726561746572000000604082015260600190565b6020808252601e908201527f556e6c6f636b20706572696f64206c657373207468616e2061207765656b0000604082015260600190565b6020808252600c908201526b73616d65206164647265737360a01b604082015260600190565b602080825260169082015275131bd8dac81d1a5b59481b9bdd08199a5b9a5cda195960521b604082015260600190565b6020808252601890820152774c6f636b496420697320616c726561647920696e2075736560401b604082015260600190565b602080825260139082015272131bd8dac8191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b938452602084019290925260408301521515606082015260800190565b6040518181016001600160401b038111828210171561431c57fe5b604052919050565b60006001600160401b0382111561433757fe5b506020908102019056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7441636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d696e5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6563616c6c6572206973206e6f74207374616b6572000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec425369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220f0459648f8e904128544c9faca3ef9eb21d0e403a71e83bda32bb585f905ef3864736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103715760003560e01c80639010d07c116101d5578063c577365611610105578063dd383394116100a8578063dd3833941461074a578063e43cb6661461075d578063ea31e89514610770578063eb86b34214610778578063ed50c6991461078b578063efe2b7201461079e578063f52a36f7146107b1578063f52dde6d146107c4578063fd2dcecf146107d757610371565b8063c5773656146106c4578063c5dc1e5f146106d9578063c79acdda146106f9578063c80a3aa61461070c578063ca15c87314610714578063cd29ca0e14610727578063d53913931461072f578063d547741f1461073757610371565b8063a29a43bb11610178578063a29a43bb1461062d578063aa33fedb14610640578063afae883e14610653578063b2e9a1b71461065b578063b534ad5614610663578063b911135f1461066b578063b94419e01461067e578063c0a37b3f14610691578063c3f9ab58146106a457610371565b80639010d07c146105ab57806391d14854146105be578063981b24d0146105d157806398b777e7146105e45780639ce56305146105f75780639f7166a41461060a578063a1f5f50e1461061d578063a217fddf1461062557610371565b806341c04d5e116102b057806363d5a3d91161025357806363d5a3d914610521578063642cf649146105345780636830483514610547578063704802751461054f57806370a082311461056257806375829def1461057557806375b238fc1461058857806389f395de146105905780638ad4c4471461059857610371565b806341c04d5e1461048d5780634cf5fbf5146104955780634ee2cd7e146104a857806350d2a276146104bb578063550d01a3146104db5780635d16a6f9146104ee5780635ebaf1db1461051157806363a8fd891461051957610371565b806322e67e711161031857806322e67e7114610407578063248a9ca31461040f57806324d7806c14610422578063282c51f31461043557806329cb924d1461043d5780632f2ff15d1461044557806336568abe14610458578063367b7b231461046b57610371565b8063059f8b1614610376578063086c46f4146103945780630b7858ba146103a75780630db9cb0c146103bc5780631785f53c146103cf57806318160ddd146103e45780631ac40e66146103ec5780631b831944146103f4575b600080fd5b61037e6107df565b60405161038b9190613fa4565b60405180910390f35b61037e6103a2366004613c5f565b6107eb565b6103af6108b7565b60405161038b9190613f99565b61037e6103ca366004613ca2565b6108fb565b6103e26103dd366004613c5f565b610b11565b005b61037e610b70565b6103e2610c42565b6103e2610402366004613cd4565b610c4a565b61037e610f1c565b61037e61041d366004613dbc565b610f22565b6103af610430366004613c5f565b610f37565b61037e610f57565b61037e610f7b565b6103e2610453366004613dd4565b610f7f565b6103e2610466366004613dd4565b610fe6565b61047e610479366004613dff565b611047565b60405161038b93929190613fad565b61037e611089565b6103e26104a3366004613ca2565b6110ad565b61037e6104b6366004613c79565b611233565b6104ce6104c9366004613e20565b6112f0565b60405161038b9190613e60565b6103af6104e9366004613c5f565b61130b565b6105016104fc366004613c79565b611320565b60405161038b94939291906142e4565b6104ce611355565b6103af611369565b61050161052f366004613dbc565b611372565b61037e610542366004613dff565b61139c565b6104ce611415565b6103e261055d366004613c5f565b611429565b61037e610570366004613c5f565b611485565b6103e2610583366004613c5f565b611539565b61037e61165a565b6104ce61166c565b61047e6105a6366004613dbc565b61167b565b6104ce6105b9366004613dff565b6116ae565b6103af6105cc366004613dd4565b6116cd565b61037e6105df366004613dbc565b6116e5565b6103e26105f2366004613dbc565b61177b565b61047e610605366004613dbc565b6117c4565b6103e2610618366004613c5f565b6117e3565b6103af611989565b61037e611999565b6103e261063b366004613c5f565b61199e565b61037e61064e366004613c79565b611a63565b61037e611a94565b6103af611a9a565b61037e611aa3565b6104ce610679366004613dbc565b611aa9565b61037e61068c366004613dbc565b611ac4565b6103e261069f366004613c79565b611b78565b6106b76106b2366004613c5f565b611c24565b60405161038b9190613f61565b6106cc611c90565b60405161038b9190613ebb565b6106ec6106e7366004613dbc565b611e25565b60405161038b9190613f08565b6103af610707366004613dbc565b611eb5565b6106cc611eca565b61037e610722366004613dbc565b611f2c565b61037e611f43565b61037e611f49565b6103e2610745366004613dd4565b611f6d565b6106b7610758366004613c5f565b611fc6565b6106b761076b366004613c5f565b61222a565b61037e6123f4565b61037e610786366004613c5f565b61247a565b6104ce610799366004613dbc565b612564565b6103e26107ac366004613ca2565b61258e565b61037e6107bf366004613dbc565b6125f0565b6103e26107d2366004613ca2565b612602565b61037e6127eb565b670de0b6b3a764000081565b6001600160a01b0381166000908152600d602052604081205481805b828110156108ad576001600160a01b0385166000908152600d6020526040812080548390811061083357fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381019390935260028101549383018490526003015460ff161515606083015292509061089e9085906127f1565b93505050806001019050610807565b509150505b919050565b600954600090806108cc5760019150506108f8565b600154600960018303815481106108df57fe5b9060005260206000209060030201600201544203119150505b90565b60145460009061010090046001600160a01b03163314610950576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b600083116109795760405162461bcd60e51b81526004016109709061412d565b60405180910390fd5b600082116109995760405162461bcd60e51b8152600401610970906141f8565b6005546109a690836127f1565b6005556006546109b690846127f1565b6006556001546000906109d5906109ce90859061284b565b42906127f1565b6001549091506109ef906109e983826128a4565b9061284b565b90506002544282031115610a155760405162461bcd60e51b815260040161097090614022565b6001600160a01b0385166000908152600d6020526040902054610a7e57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0387161790555b600454610a8c9060016127f1565b60048190559150610a9f858386846128e6565b6001600160a01b0385166000908152600d6020908152604080832080546001810182559084529190922001839055517f71fc552ee832a9004ea0bdb07cb6dd9d641eb2cb53b3cfe88c8fdcff886734a090610b01908790859088908690613e95565b60405180910390a1509392505050565b610b1a33610f37565b610b555760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b610b6d60008051602061444783398151915282610fe6565b50565b600954600090610b82575060006108f8565b60098054600091610bd8916000198101908110610b9b57fe5b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505042612aea565b90506000610c09610bfe610bf9846040015142612be990919063ffffffff16565b612c2b565b602084015190612c73565b9050610c3b670de0b6b3a764000082846000015113610c29576000610c35565b8351610c359084612d1c565b906128a4565b9250505090565b610b6d612d81565b610c5333610f37565b610c8e5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b60008451118015610ca0575082518451145b8015610cad575081518451145b610cc95760405162461bcd60e51b815260040161097090614082565b835160005b81811015610f14576000868281518110610ce457fe5b602002602001015190506000868381518110610cfc57fe5b602002602001015190506000868481518110610d1457fe5b6020908102919091018101516001600160a01b0385166000908152600b835260408082208683528452908190208151608081018352815481526001820154948101949094526002810154918401919091526003015460ff161580156060840181905291935090610d845750600082115b15610f0457600654610d9690836127f1565b5060408051608081018252825181526020808401519082015281830151918101829052600060608201528291610dcc90856127f1565b6040820152610ddc81838b612f7a565b6001600160a01b0386166000908152600b60209081526040808320888452825280832084518155828501805160018084019190915583870180516002808601919091556060890180516003968701805491151560ff19928316179055600c9098529588208951815593519284019290925551828201819055935191909201805491151591909416179092559054610e8491610bf99190610c3590670de0b6b3a764000061284b565b90506000610eac610ea5610bf98d8660200151612be990919063ffffffff16565b8390612c73565b6040805160608101825291825260208083019485528282018e815260008b8152600a83529283208054600181810183559185529290932093516003909202909301908155935190840155516002909201919091555050505b505060019092019150610cce9050565b505050505050565b60025481565b60009081526010602052604090206002015490565b6000610f51600080516020614447833981519152836116cd565b92915050565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b4290565b600082815260106020526040902060020154610f9d906105cc613172565b610fd85760405162461bcd60e51b815260040180806020018281038252602f815260200180614364602f913960400191505060405180910390fd5b610fe28282613176565b5050565b610fee613172565b6001600160a01b0316816001600160a01b03161461103d5760405162461bcd60e51b815260040180806020018281038252602f8152602001806144da602f913960400191505060405180910390fd5b610fe282826131df565b600a602052816000526040600020818154811061106357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b13081565b60145461010090046001600160a01b031633146110ff576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6000811161111f5760405162461bcd60e51b81526004016109709061412d565b6001600160a01b0383166000908152600b6020908152604080832085845282529182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526111945760405162461bcd60e51b815260040161097090614102565b80516111b25760405162461bcd60e51b8152600401610970906142b7565b428160200151116111d55760405162461bcd60e51b8152600401610970906140a8565b6006546111e290836127f1565b6006556111f284848460006128e6565b7fea44bc904f77b1be47cd5b840b00f19b7238f88d7524fa5a86629282bfe6bcc584848460405161122593929190613e74565b60405180910390a150505050565b6001600160a01b0382166000908152600d602090815260408083208054825181850281018501909352808352849383018282801561129057602002820191906000526020600020905b81548152602001906001019080831161127c575b505050505090508051600014156112ab576000915050610f51565b60005b81518110156112e8576112de6112d78383815181106112c957fe5b60200260200101518661139c565b84906127f1565b92506001016112ae565b505092915050565b6013602052600090815260409020546001600160a01b031681565b60126020526000908152604090205460ff1681565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff1684565b60145461010090046001600160a01b031681565b60005460ff1681565b600c6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6000828152600a60205260408120819081906113b89085613248565b91509150816113cc57600092505050610f51565b60006113eb610bfe610bf9846040015188612be990919063ffffffff16565b905061140b670de0b6b3a764000082846000015113610c29576000610c35565b9695505050505050565b60005461010090046001600160a01b031681565b61143233610f37565b61146d5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b610b6d60008051602061444783398151915282610f7f565b6001600160a01b0381166000908152600d60209081526040808320805482518185028101850190935280835284938301828280156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b505050505090508051600014156114fd5760009150506108b2565b60005b8151811015611532576115286112d783838151811061151b57fe5b6020026020010151611ac4565b9250600101611500565b5050919050565b61154233610f37565b61157d5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b6001600160a01b0381166115d3576040805162461bcd60e51b815260206004820152601860248201527741636365737369626c653a207a65726f206164647265737360401b604482015290519081900360640190fd5b336001600160a01b038216141561162a576040805162461bcd60e51b815260206004820152601660248201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604482015290519081900360640190fd5b61164260008051602061444783398151915282610f7f565b610b6d60008051602061444783398151915233610fe6565b60008051602061444783398151915281565b6003546001600160a01b031681565b6009818154811061168b57600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b60008281526010602052604081206116c69083613340565b9392505050565b60008281526010602052604081206116c6908361334c565b6009546000906116f7575060006108b2565b600080611705600985613248565b9150915081611719576000925050506108b2565b6117238185612aea565b90506000611741610bf9836040015187612be990919063ffffffff16565b8260200151029050611772670de0b6b3a764000082846000015113611767576000610c35565b8351839003906128a4565b95945050505050565b61178433610f37565b6117bf5760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b600255565b6000908152600c60205260409020805460018201546002909201549092565b6007546001146118055760405162461bcd60e51b815260040161097090614285565b600060075560145461010090046001600160a01b0316331461185c576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600d6020526040902080546118805750611981565b60005b815481101561197e576000600c600084848154811061189e57fe5b6000918252602080832090910154835282810193909352604091820190208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615801560608301819052919250906119155750600083838154811061190857fe5b9060005260206000200154115b8015611925575060008160400151115b80156119315750805115155b8015611941575060008160200151115b80156119505750428160200151105b15611975576119758484848154811061196557fe5b9060005260206000200154613361565b50600101611883565b50505b506001600755565b600054600160a81b900460ff1681565b600081565b6119a733610f37565b6119e25760405162461bcd60e51b81526004018080602001828103825260228152602001806143936022913960400191505060405180910390fd5b6001600160a01b038116611a085760405162461bcd60e51b815260040161097090614164565b6014546001600160a01b03828116610100909204161415611a3b5760405162461bcd60e51b81526004016109709061422f565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600d6020528160005260406000208181548110611a7f57600080fd5b90600052602060002001600091509150505481565b60045481565b60145460ff1681565b60055481565b6011602052600090815260409020546001600160a01b031681565b6000818152600a602052604081205480611ae25760009150506108b2565b6000838152600a6020526040812080546000198401908110611b0057fe5b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000611b58610bfe610bf9846040015142612be990919063ffffffff16565b9050611772670de0b6b3a764000082846000015113610c29576000610c35565b600754600114611b9a5760405162461bcd60e51b815260040161097090614285565b600060075560145461010090046001600160a01b03163314611bf1576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b60008111611c115760405162461bcd60e51b815260040161097090614059565b611c1b8282613361565b50506001600755565b6001600160a01b0381166000908152600d6020908152604091829020805483518184028101840190945280845260609392830182828015611c8457602002820191906000526020600020905b815481526020019060010190808311611c70575b50505050509050919050565b6008546060906000906001600160401b0381118015611cae57600080fd5b50604051908082528060200260200182016040528015611cd8578160200160208202803683370190505b5090506000805b600854811015611d4f576000611d1560088381548110611cfb57fe5b6000918252602090912001546001600160a01b031661222a565b805190915015611d465782806001019350506001848381518110611d3557fe5b911515602092830291909101909101525b50600101611cdf565b506000816001600160401b0381118015611d6857600080fd5b50604051908082528060200260200182016040528015611d92578160200160208202803683370190505b5090506000805b600854811015611e1b57848181518110611daf57fe5b602002602001015115611e135760088181548110611dc957fe5b600091825260209091200154835160018401936001600160a01b039092169185918110611df257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101611d99565b5090935050505090565b6060600a6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611eaa5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611e5a565b505050509050919050565b600f6020526000908152604090205460ff1681565b60606008805480602002602001604051908101604052809291908181526020018280548015611f2257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f04575b5050505050905090565b6000818152601060205260408120610f519061352a565b60065481565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b600082815260106020526040902060020154611f8b906105cc613172565b61103d5760405162461bcd60e51b81526004018080602001828103825260308152602001806143d66030913960400191505060405180910390fd5b60145460609061010090046001600160a01b0316331461201b576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d602052604081205490805b828110156120f9576001600160a01b0385166000908152600d6020526040812080548390811061206357fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff1615156060840152925042108015906120d5575060008160400151115b80156120e357506060810151155b156120ef576001909301925b5050600101612037565b506000816001600160401b038111801561211257600080fd5b5060405190808252806020026020018201604052801561213c578160200160208202803683370190505b5090506000915060005b83811015612221576001600160a01b0386166000908152600d6020526040812080548390811061217257fe5b60009182526020808320909101546001600160a01b038a168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff1615156060840152925042108015906121e4575060008160400151115b80156121f257506060810151155b15612217578184868060010197508151811061220a57fe5b6020026020010181815250505b5050600101612146565b50949350505050565b6001600160a01b0381166000908152600d6020526040812054606091805b828110156122eb576001600160a01b0385166000908152600d6020526040812080548390811061227457fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210156122e1576001909301925b5050600101612248565b506000816001600160401b038111801561230457600080fd5b5060405190808252806020026020018201604052801561232e578160200160208202803683370190505b5090506000915060005b83811015612221576001600160a01b0386166000908152600d6020526040812080548390811061236457fe5b60009182526020808320909101546001600160a01b038a168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210156123ea57818486806001019750815181106123dd57fe5b6020026020010181815250505b5050600101612338565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612425903090600401613e60565b60206040518083038186803b15801561243d57600080fd5b505afa158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124759190613e48565b905090565b6001600160a01b0381166000908152600d602052604081205481805b828110156108ad576001600160a01b0385166000908152600d602052604081208054839081106124c257fe5b60009182526020808320909101546001600160a01b0389168352600b8252604080842082855283529283902083516080810185528154815260018201549381018490526002820154948101949094526003015460ff161515606084015292504210801590612534575060008160400151115b801561254257506060810151155b1561255a5760408101516125579085906127f1565b93505b5050600101612496565b6008818154811061257457600080fd5b6000918252602090912001546001600160a01b0316905081565b60145461010090046001600160a01b031633146125e0576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b6125eb8383836110ad565b505050565b600e6020526000908152604090205481565b60145461010090046001600160a01b03163314612654576040805162461bcd60e51b81526020600482015260146024820152600080516020614406833981519152604482015290519081900360640190fd5b600081116126745760405162461bcd60e51b8152600401610970906141f8565b60055461268190826127f1565b6005556001600160a01b0383166000908152600b602090815260408083208584528252808320815160808101835281548152600180830154948201949094526002820154928101929092526003015460ff161515606082015290549091906126f9906126ee90859061284b565b6020840151906127f1565b60015490915061270d906109e983826128a4565b9050600254428203106127325760405162461bcd60e51b815260040161097090614022565b428260200151116127555760405162461bcd60e51b81526004016109709061418a565b808260200151106127785760405162461bcd60e51b8152600401610970906141c1565b600082604001511161279c5760405162461bcd60e51b815260040161097090613ff2565b6127a985856000846128e6565b7fb8596b0e78133666b86648f60233cc2d078144d06df7874ea9f612a3ccc3e2fb8585836040516127dc93929190613e74565b60405180910390a15050505050565b60015481565b6000828201838110156116c6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261285a57506000610f51565b8282028284828161286757fe5b04146116c65760405162461bcd60e51b81526004018080602001828103825260218152602001806144266021913960400191505060405180910390fd5b60006116c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613535565b6007546001146129085760405162461bcd60e51b815260040161097090614285565b600060078190556001600160a01b0385168152600b602090815260408083208684528252808320815160808082018452825482526001830154828601908152600284015483860190815260039094015460ff161515606080850191909152855192830186528351835290519582019590955291519282018390529281019390935290919061299690856127f1565b604082015282156129a957602081018390525b80516129b3574281525b6129bd81836135d7565b6001600160a01b0386166000908152600b60209081526040808320888452825280832084518155828501805160018084019190915583870180516002808601919091556060890180516003968701805491151560ff19928316179055600c9098529588208951815593519284019290925551828201819055935191909201805491151591909416179092559054612a6591610bf99190610c3590670de0b6b3a764000061284b565b90506000612a86610ea5610bf9428660200151612be990919063ffffffff16565b6040805160608101825291825260208083019485524283830190815260009a8b52600a8252918a20805460018181018355918c5291909a20925160039091029092019182559251818901559151600290920191909155505050600792909255505050565b612af2613bbb565b6001546040840151600091612b0b916109e990826128a4565b90505b828114612be157612b33612b2d600154836127f190919063ffffffff16565b846137a7565b6000818152600e6020526040808220549087015192935091612b6690610bf990612b5e908690612be9565b6001546137a7565b9050612b8a612b82828860200151612c7390919063ffffffff16565b875190612d1c565b86526020860151612b9b90836137bd565b60208701528551600012612bb0576000612bb3565b85515b86526020860151600012612bc8576000612bce565b85602001515b6020870152505060408401819052612b0e565b509192915050565b60006116c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000600160ff1b8210612c6f5760405162461bcd60e51b815260040180806020018281038252602881526020018061448e6028913960400191505060405180910390fd5b5090565b600082612c8257506000610f51565b82600019148015612c965750600160ff1b82145b15612cd25760405162461bcd60e51b81526004018080602001828103825260278152602001806144676027913960400191505060405180910390fd5b82820282848281612cdf57fe5b05146116c65760405162461bcd60e51b81526004018080602001828103825260278152602001806144676027913960400191505060405180910390fd5b6000818303818312801590612d315750838113155b80612d465750600083128015612d4657508381135b6116c65760405162461bcd60e51b81526004018080602001828103825260248152602001806144b66024913960400191505060405180910390fd5b612d89613bbb565b600954429015612de357600980546000198101908110612da557fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509150612e03565b604051806060016040528060008152602001600081526020018281525091505b6001546040830151600091612e1c916109e990826128a4565b90505b818114612f7557612e44612e3e600154836127f190919063ffffffff16565b836137a7565b6000818152600e6020526040808220549086015192935091612e6f90610bf990612b5e908690612be9565b9050612e93612e8b828760200151612c7390919063ffffffff16565b865190612d1c565b85526020850151612ea490836137bd565b60208601528451600012612eb9576000612ebc565b84515b85526020850151600012612ed1576000612ed7565b84602001515b60208601908152604086018481526009805460018101825560009190915287517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af60039092029182015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0830155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b19091015550612e1f9050565b505090565b60408051606080820183526000808352602080840182905283850182905284519283018552818352828101829052938201529185015183929083108015612fc5575060008660400151115b1561301d57612ff2610bf9600254610c35670de0b6b3a76400008a6040015161284b90919063ffffffff16565b60208084019190915286015161301090610bfe90610bf99086612be9565b8252602086015160408301525b828560200151118015613034575060008560400151115b1561309757613061610bf9600254610c35670de0b6b3a7640000896040015161284b90919063ffffffff16565b60208083019190915285015161308a9061307f90610bf99086612be9565b602083015190612c73565b8152602085015160408201525b60006130a1612d81565b825184519192506130bd916130b591612d1c565b8251906137bd565b8152602080830151908401516130e2916130d79190612d1c565b6020830151906137bd565b602082015280516000126130f75760006130fa565b80515b8152602081015160001261310f576000613115565b80602001515b602082015260098054829190600019810190811061312f57fe5b906000526020600020906003020160008201518160000155602082015181600101556040820151816002015590505061316983838761387c565b50505050505050565b3390565b600082815260106020526040902061318e908261393f565b15610fe25761319b613172565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526010602052604090206131f79082613954565b15610fe257613204613172565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000613252613bbb565b83546132615760009150613339565b83546000905b808260010110156132bb5760006132836002610c3585856127f1565b90508587828154811061329257fe5b906000526020600020906003020160020154116132b1578092506132b5565b8091505b50613267565b848683815481106132c857fe5b906000526020600020906003020160020154116133325760018683815481106132ed57fe5b90600052602060002090600302018060405180606001604052908160008201548152602001600182015481526020016002820154815250509050935093505050613339565b6000935050505b9250929050565b60006116c68383613969565b60006116c6836001600160a01b0384166139cd565b6001600160a01b0382166000908152600b6020908152604080832084845282529182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526133d65760405162461bcd60e51b8152600401610970906140d7565b80516133f45760405162461bcd60e51b8152600401610970906142b7565b428160200151106134175760405162461bcd60e51b815260040161097090614255565b600081604001511161343b5760405162461bcd60e51b815260040161097090613fc3565b60408051608081018252600080825260208201819052918101919091526001606082015261346981836135d7565b6040808301516001600160a01b0386166000908152600b60209081528382208783528152838220855181558186018051600180840191909155878701805160028086019190915560608a0180516003968701805491151560ff19928316179055600c909752968990208a51815593519284019290925551908201559251920180549215159290911691909117905590517ff1206247bdd5e2e0cfc00bea4cf05fb8dc479ebee686f9549043179cc7013b30906127dc90879087908590613e74565b6000610f51826139e5565b600081836135c15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561358657818101518382015260200161356e565b50505050905090810190601f1680156135b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135cd57fe5b0495945050505050565b60408051606080820183526000808352602080840182905283850182905284519283018552818352828101829052938201529184015142929083108015613622575060008560400151115b1561367a5761364f610bf9600254610c35670de0b6b3a7640000896040015161284b90919063ffffffff16565b60208084019190915285015161366d90610bfe90610bf99086612be9565b8252602085015160408301525b828460200151118015613691575060008460400151115b156136e9576136be610bf9600254610c35670de0b6b3a7640000886040015161284b90919063ffffffff16565b6020808301919091528401516136dc9061307f90610bf99086612be9565b8152602084015160408201525b60006136f3612d81565b82518451919250613707916130b591612d1c565b815260208083015190840151613721916130d79190612d1c565b60208201528051600012613736576000613739565b80515b8152602081015160001261374e576000613754565b80602001515b602082015260098054829190600019810190811061376e57fe5b9060005260206000209060030201600082015181600001556020820151816001015560408201518160020155905050610f1483836139e9565b60008183106137b657816116c6565b5090919050565b60008282018183128015906137d25750838112155b806137e757506000831280156137e757508381125b6116c65760405162461bcd60e51b81526004018080602001828103825260218152602001806143b56021913960400191505060405180910390fd5b600081848411156138745760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561358657818101518382015260200161356e565b505050900390565b6040808401516000908152600e6020528181205484830180518352929091205491519091908310156138f25760208401516138b89082906137bd565b90508460400151846040015114156138dd5760208501516138da908290612d1c565b90505b6040808501516000908152600e602052208190555b82856040015111801561390c575083604001518560400151115b15613938576020850151613921908390612d1c565b6040808701516000908152600e6020522081905591505b5050505050565b60006116c6836001600160a01b038416613aab565b60006116c6836001600160a01b038416613af5565b815460009082106139ab5760405162461bcd60e51b81526004018080602001828103825260228152602001806143426022913960400191505060405180910390fd5b8260000182815481106139ba57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6040808301516000908152600e602052818120548383018051835292909120549151909190421015613a5f576020830151613a259082906137bd565b9050836040015183604001511415613a4a576020840151613a47908290612d1c565b90505b6040808401516000908152600e602052208190555b428460400151118015613a79575082604001518460400151115b15613aa5576020840151613a8e908390612d1c565b6040808601516000908152600e6020522081905591505b50505050565b6000613ab783836139cd565b613aed57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f51565b506000610f51565b60008181526001830160205260408120548015613bb15783546000198083019190810190600090879083908110613b2857fe5b9060005260206000200154905080876000018481548110613b4557fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080613b7557fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f51565b6000915050610f51565b60405180606001604052806000815260200160008152602001600081525090565b80356001600160a01b03811681146108b257600080fd5b600082601f830112613c03578081fd5b81356020613c18613c1383614324565b614301565b8281528181019085830183850287018401881015613c34578586fd5b855b85811015613c5257813584529284019290840190600101613c36565b5090979650505050505050565b600060208284031215613c70578081fd5b6116c682613bdc565b60008060408385031215613c8b578081fd5b613c9483613bdc565b946020939093013593505050565b600080600060608486031215613cb6578081fd5b613cbf84613bdc565b95602085013595506040909401359392505050565b60008060008060808587031215613ce9578081fd5b84356001600160401b0380821115613cff578283fd5b818701915087601f830112613d12578283fd5b81356020613d22613c1383614324565b82815281810190858301838502870184018d1015613d3e578788fd5b8796505b84871015613d6757613d5381613bdc565b835260019690960195918301918301613d42565b5098505088013592505080821115613d7d578283fd5b613d8988838901613bf3565b94506040870135915080821115613d9e578283fd5b50613dab87828801613bf3565b949793965093946060013593505050565b600060208284031215613dcd578081fd5b5035919050565b60008060408385031215613de6578182fd5b82359150613df660208401613bdc565b90509250929050565b60008060408385031215613e11578182fd5b50508035926020909101359150565b600060208284031215613e31578081fd5b81356001600160e01b0319811681146116c6578182fd5b600060208284031215613e59578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6020808252825182820181905260009190848201906040850190845b81811015613efc5783516001600160a01b031683529284019291840191600101613ed7565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015613f545781518051855286810151878601528501518585015260609093019290850190600101613f25565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613efc57835183529284019291840191600101613f7d565b901515815260200190565b90815260200190565b9283526020830191909152604082015260600190565b6020808252601590820152744e6f20616d6f756e7420746f20776974686472617760581b604082015260600190565b6020808252601690820152754e6f206578697374696e67206c6f636b656420544f5360501b604082015260600190565b6020808252601a908201527f4d617820756e6c6f636b2074696d652069732033207965617273000000000000604082015260600190565b6020808252600f908201526e5f6c6f636b4964206973207a65726f60881b604082015260600190565b6020808252600c908201526b0eee4dedcce40d8cadccee8d60a31b604082015260600190565b602080825260159082015274131bd8dac81d1a5b59481a5cc8199a5b9a5cda1959605a1b604082015260600190565b60208082526011908201527020b63932b0b23c903bb4ba34323930bbb760791b604082015260600190565b6020808252601190820152702637b1b59034b9903bb4ba34323930bbb760791b604082015260600190565b6020808252601f908201527f56616c7565206c6f636b65642073686f756c64206265206e6f6e2d7a65726f00604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6020808252601a908201527f4c6f636b2074696d6520616c72656164792066696e6973686564000000000000604082015260600190565b6020808252601d908201527f4e6577206c6f636b2074696d65206d7573742062652067726561746572000000604082015260600190565b6020808252601e908201527f556e6c6f636b20706572696f64206c657373207468616e2061207765656b0000604082015260600190565b6020808252600c908201526b73616d65206164647265737360a01b604082015260600190565b602080825260169082015275131bd8dac81d1a5b59481b9bdd08199a5b9a5cda195960521b604082015260600190565b6020808252601890820152774c6f636b496420697320616c726561647920696e2075736560401b604082015260600190565b602080825260139082015272131bd8dac8191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b938452602084019290925260408301521515606082015260800190565b6040518181016001600160401b038111828210171561431c57fe5b604052919050565b60006001600160401b0382111561433757fe5b506020908102019056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7441636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d696e5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6563616c6c6572206973206e6f74207374616b6572000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec425369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220f0459648f8e904128544c9faca3ef9eb21d0e403a71e83bda32bb585f905ef3864736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/abi/StakingV2.json b/contracts/data/tosv2/abi/StakingV2.json new file mode 100644 index 0000000..54a0d69 --- /dev/null +++ b/contracts/data/tosv2/abi/StakingV2.json @@ -0,0 +1,1825 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "StakingV2", + "sourceName": "contracts/StakingV2.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "ClaimdForNonLock", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "IncreasedAmountForSimpleStake", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockWeeks", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosPrincipal", + "type": "uint256" + } + ], + "name": "IncreasedBeforeEndOrNonEnd", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalLTOS", + "type": "uint256" + } + ], + "name": "Rebased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodWeeks", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosPrincipal", + "type": "uint256" + } + ], + "name": "ResetStakedGetStosAfterLock", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + } + ], + "name": "StakedByBond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodWeeks", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosPrincipal", + "type": "uint256" + } + ], + "name": "StakedGetStos", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodWeeks", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stosPrincipal", + "type": "uint256" + } + ], + "name": "StakedGetStosByBond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "Unstaked", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allStakings", + "outputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "basicBondPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimLtos", + "type": "uint256" + } + ], + "name": "claimForSimpleType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + } + ], + "name": "claimableLtos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "connectId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "length_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "generateMarketId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + } + ], + "name": "getLtosToTos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + } + ], + "name": "getLtosToTosPossibleIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "getTosToLtos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "getTosToLtosPossibleIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "increaseAmountForSimpleStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_unlockWeeks", + "type": "uint256" + } + ], + "name": "increaseBeforeEndOrNonEnd", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "increaseBeforeEndOrNonEnd", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "index_", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockTOS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketIdCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_stakeIds", + "type": "uint256[]" + } + ], + "name": "multiUnstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "possibleIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rebaseIndex", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rebasePerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + } + ], + "name": "remainedLtos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_addAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_claimAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_periodWeeks", + "type": "uint256" + } + ], + "name": "resetStakeGetStosAfterLock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_claimAmount", + "type": "uint256" + } + ], + "name": "resetStakeGetStosAfterLock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_addAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_periodWeeks", + "type": "uint256" + } + ], + "name": "resetStakeGetStosAfterLock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "runwayTos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runwayTosPossibleIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "secondsToNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tos", + "type": "address" + }, + { + "internalType": "address", + "name": "_lockTOS", + "type": "address" + }, + { + "internalType": "address", + "name": "_treasury", + "type": "address" + } + ], + "name": "setAddressInfos", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_period", + "type": "uint256" + } + ], + "name": "setBasicBondPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "setIndex", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rebasePerEpoch", + "type": "uint256" + } + ], + "name": "setRebasePerEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + } + ], + "name": "stakeByBond", + "outputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_periodWeeks", + "type": "uint256" + } + ], + "name": "stakeGetStos", + "outputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_marketId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_periodWeeks", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tosPrice", + "type": "uint256" + } + ], + "name": "stakeGetStosByBond", + "outputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "stakeInfo", + "outputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ltos", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "stakedOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakedOfAll", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingIdCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "stakingOf", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingPrincipal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "period", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenId", + "type": "uint256[]" + } + ], + "name": "syncStos", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalLtos", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferPolicyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "treasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stakeId", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userStakingIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userStakings", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052600160065534801561001557600080fd5b506158e180620000266000396000f3fe608060405234801561001057600080fd5b50600436106103535760003560e01c806378ad1405116101c657806378ad1405146106c657806379be7bd0146106cf5780637cc0fee6146106e257806381045ead146106f55780638356ca4f146106fd57806383a5683a1461071057806389f395de14610723578063900cf0cf1461073657806391d14854146107595780639483c1d71461076c57806396f1557c1461077457806397b4293714610787578063980b10971461079a57806398842ff6146107ad5780639a202d47146107b55780639a794e66146107bd5780639e9e792f146107d0578063a052e69e146107f0578063a217fddf146107f9578063a694fc3a14610801578063a7110dc314610814578063b24352b11461083f578063b84ef08114610852578063b88ad1e314610865578063bba4307e14610878578063bbad8ac91461088b578063be72f2d31461089e578063c68450bf146108a6578063ca16910f146108b9578063d547741f146108cc578063d7fe4a49146108df578063e6500b21146108f2578063e75f77e1146108fa578063f1c8c9221461090d578063f47f2f1d14610920578063f558138214610933578063fad1c85c1461093c57600080fd5b806301ffc9a714610358578063037859af146103805780630e1e998f146103a057806311f1c8bf146103b757806317ed177a146103ca5780631e725567146103dd57806322985246146103f2578063248a9ca31461040757806324d7806c1461041a578063265705b11461042d57806328ea9ff0146104405780632e17de78146104485780632f2ff15d1461045b57806330e06e8b1461046e578063332b01f31461047657806336568abe14610489578063385030b41461049c57806340a5737f146104a557806341c04d5e146104b857806347e1b372146104cd57806349ec9883146104d55780634e533572146104e85780634e6c4466146105865780635720bf3a146105b15780635746248f146105ba5780635dc3c29a146105cd5780635f3383521461061457806361d027b31461061c57806365cb3a831461062f578063660fe73f146106375780636d1c789f1461064a578063704802751461065357806370a082311461066657806375829def1461067957806375b238fc1461068c57806377d73dc6146106b3575b600080fd5b61036b610366366004615119565b61094f565b60405190151581526020015b60405180910390f35b61039361038e366004614ebb565b610986565b6040516103779190615359565b6103a9600b5481565b604051908152602001610377565b6103a96103c53660046150d6565b6109f2565b6103a96103d83660046150d6565b610a0d565b6103f06103eb366004615159565b610a22565b005b6103a960008051602061588c83398151915281565b6103a96104153660046150d6565b610cf1565b61036b610428366004614ebb565b610d06565b6103f061043b366004614ed5565b610d20565b6103a9610e7b565b6103f06104563660046150d6565b61101e565b6103f06104693660046150ee565b6112d5565b6103a96112f7565b6103a9610484366004614f40565b6113b0565b6103f06104973660046150ee565b611543565b6103a9600a5481565b6103f06104b33660046150d6565b6115c1565b6103a960008051602061584c83398151915281565b6103f06115eb565b6103f06104e33660046150d6565b6117f0565b6105546104f63660046150d6565b6000908152600f6020908152604091829020825160a08101845281546001600160a01b031680825260018301549382018490526002830154948201859052600383015460608301819052600490930154608090920182905294929392565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610377565b600354610599906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b6103a960095481565b6103a96105c8366004614f17565b61181a565b6105546105db3660046150d6565b600f60205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b6103a961184b565b600454610599906001600160a01b031681565b6103f061185d565b6103a96106453660046150d6565b61189a565b6103a9600c5481565b6103f0610661366004614ebb565b6118c0565b6103a9610674366004614ebb565b611900565b6103f0610687366004614ebb565b6119d6565b6103a97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103a96106c13660046150d6565b611a89565b6103a960055481565b6103a96106dd3660046150d6565b611aa1565b6103a96106f03660046150d6565b611abe565b6005546103a9565b6103f061070b366004614ebb565b611b12565b6103f061071e366004615159565b611b9c565b600254610599906001600160a01b031681565b600054600154610744919082565b60408051928352602083019190915201610377565b61036b6107673660046150ee565b611d56565b6103a9611d81565b6103f0610782366004614ebb565b611da4565b6103a96107953660046150d6565b611dd4565b6103a96107a8366004614f78565b611ded565b6103a961210d565b6103f06121bc565b6103f06107cb366004615077565b612208565b6103a96107de3660046150d6565b60106020526000908152604090205481565b6103a960085481565b6103a9600081565b6103a961080f3660046150d6565b612296565b6103a9610822366004614f17565b600e60209081526000928352604080842090915290825290205481565b6103f061084d3660046151f5565b61237d565b6103f0610860366004614ebb565b612735565b6103f061087336600461519d565b612772565b6103f0610886366004615159565b612e56565b6103f0610899366004615159565b6130a9565b6103f0613448565b6103f06108b4366004614fb9565b613478565b6103a96108c7366004615159565b613693565b6103f06108da3660046150ee565b613858565b6103f06108ed36600461519d565b613875565b6103a9613bf1565b6103f06109083660046150d6565b613c7c565b6103f061091b366004614ebb565b613d05565b61036b61092e366004614ebb565b613da9565b6103a960075481565b61036b61094a366004614ebb565b613db5565b60006001600160e01b03198216637965db0b60e01b148061098057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0381166000908152600d60209081526040918290208054835181840281018401909452808452606093928301828280156109e657602002820191906000526020600020905b8154815260200190600101908083116109d2575b50505050509050919050565b6000818152600f602052604081206002015461098090611aa1565b6000908152600f602052604090206002015490565b8180610a495760405162461bcd60e51b8152600401610a409061561f565b60405180910390fd5b8180610a675760405162461bcd60e51b8152600401610a409061561f565b60008481526010602052604090205415610ac35760405162461bcd60e51b815260206004820152601d60248201527f7468697320697320666f72206e6f6e2d6c6f636b2070726f647563742e0000006044820152606401610a40565b6000848152600f6020526040902080546001600160a01b03163314610afa5760405162461bcd60e51b8152600401610a4090615526565b42816003015410610b485760405162461bcd60e51b815260206004820152601860248201527732b732103a34b6b2903430b9903737ba103830b9b9b2b21760411b6044820152606401610a40565b8060020154841115610b935760405162461bcd60e51b81526020600482015260146024820152731b1d1bdcc81a5cc81a5b9cdd59999a58da595b9d60621b6044820152606401610a40565b610b9b6115eb565b6000610baa8260020154611dd4565b90506000610bb786611dd4565b905060008360010154831115610bd9576001840154610bd690846157a0565b90505b86846002016000828254610bed91906157a0565b925050819055508660076000828254610c0691906157a0565b909155505060018401548290610c1d908390615749565b610c2791906157a0565b60018501556008548290610c3c908390615749565b610c4691906157a0565b60085560048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc79491610c7a91339187910161530d565b600060405180830381600087803b158015610c9457600080fd5b505af1158015610ca8573d6000803e3d6000fd5b505050507f5ac7224c417abee0b26a4daa9b5221c45297a5429fc56e11bc9170dabc15d33c33838a604051610cdf939291906152b1565b60405180910390a15050505050505050565b60009081526011602052604090206001015490565b600061098060008051602061584c83398151915283611d56565b610d2933613db5565b610d455760405162461bcd60e51b8152600401610a409061564b565b826001600160a01b038116610d6c5760405162461bcd60e51b8152600401610a40906154f7565b826001600160a01b038116610d935760405162461bcd60e51b8152600401610a40906154f7565b826001600160a01b038116610dba5760405162461bcd60e51b8152600401610a40906154f7565b6002546001600160a01b038781169116141580610de557506003546001600160a01b03868116911614155b80610dfe57506004546001600160a01b03858116911614155b610e395760405162461bcd60e51b815260206004820152600c60248201526b73616d65206164647265737360a01b6044820152606401610a40565b5050600280546001600160a01b039586166001600160a01b03199182161790915560038054948616948216949094179093555060048054919093169116179055565b6005546001546000919042106110195760005460018054909190610e9f90426157a0565b1115610ecd57600054600154610eb590426157a0565b610ebf9190615761565b610eca906001615749565b90505b8060011415610f1057670de0b6b3a7640000600954670de0b6b3a7640000610ef59190615749565b610eff9084615781565b610f099190615761565b9150610fa0565b6005546009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9263f3c85eba92610f4d928690600401615733565b60206040518083038186803b158015610f6557600080fd5b505af4158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9d9190615141565b91505b6000610faa613bf1565b90506000670de0b6b3a764000060055485610fc591906157a0565b600754610fd29190615781565b610fdc9190615761565b90508181111561101557600554600754610ffe84670de0b6b3a7640000615781565b6110089190615761565b6110129190615749565b93505b5050505b919050565b808061103c5760405162461bcd60e51b8152600401610a409061561f565b6000828152600f6020526040902080546001600160a01b0316331461109b5760405162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba1039ba30b5b2b91760591b6044820152606401610a40565b428160030154106110e85760405162461bcd60e51b815260206004820152601760248201527632b732103a34b6b2903430b9b713ba103830b9b9b2b21760491b6044820152606401610a40565b6110f06115eb565b60006110ff8260020154611dd4565b9050600081116111495760405162461bcd60e51b81526020600482015260156024820152741e995c9bc818db185a5b58589b1948185b5bdd5b9d605a1b6044820152606401610a40565b81600101546008600082825461115f91906157a0565b909155505060028201546007805460009061117b9084906157a0565b909155506000905061118d3386613dcf565b90506111998582613f7a565b60008581526010602052604090205415611230576003546000868152601060205260409081902054905163c0a37b3f60e01b81526001600160a01b039092169163c0a37b3f916111ee9133919060040161530d565b600060405180830381600087803b15801561120857600080fd5b505af115801561121c573d6000803e3d6000fd5b505050600086815260106020526040812055505b60048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc7949161126191339187910161530d565b600060405180830381600087803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505050507f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e3383876040516112c6939291906152b1565b60405180910390a15050505050565b6112de82610cf1565b6112e88133613ffc565b6112f28383614060565b505050565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b815260040161132b92919061571c565b60206040518083038186803b15801561134357600080fd5b505afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b91906150b6565b6113975760405162461bcd60e51b8152600401610a4090615584565b600c80549060006113a7836157fa565b91905055905090565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b81526004016113e492919061571c565b60206040518083038186803b1580156113fc57600080fd5b505afa158015611410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143491906150b6565b6114505760405162461bcd60e51b8152600401610a4090615584565b846001600160a01b0381166114775760405162461bcd60e51b8152600401610a40906154f7565b84806114955760405162461bcd60e51b8152600401610a409061561f565b84806114b35760405162461bcd60e51b8152600401610a409061561f565b6114bc886140e6565b6114c461418c565b93506114d088856141a7565b6114d86115eb565b60006114f489868a600a54426114ee9190615749565b8b6141ea565b90507f10b677c7a9f17c8fa541bdcc53b14beb96651665c3ef380c8df860dbd8f3545e8989838a898b60405161152f96959493929190615326565b60405180910390a150505050949350505050565b6001600160a01b03811633146115b35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a40565b6115bd82826142d4565b5050565b6115ca33613db5565b6115e65760405162461bcd60e51b8152600401610a409061564b565b600555565b60015442106117ee576000546001805490919061160890426157a0565b11156116365760005460015461161e90426157a0565b6116289190615761565b611633906001615749565b90505b600054611644908290615781565b60018054600090611656908490615749565b909155506000905060018214156116a457670de0b6b3a7640000600954670de0b6b3a76400006116869190615749565b6005546116939190615781565b61169d9190615761565b9050611734565b6005546009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9263f3c85eba926116e1928790600401615733565b60206040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190615141565b90505b600061173e613bf1565b6005549091506000670de0b6b3a764000061175983866157a0565b6007546117669190615781565b6117709190615761565b9050828111156117a65760075461178f84670de0b6b3a7640000615781565b6117999190615761565b6117a39083615749565b93505b818411156117e85760058490556007546040517fd1a8a452d776b1b6802824ca2e8489c6448e2cb0963f552a9a19ab4ae064ca58916112c69185918891615733565b50505050505b565b6117f933613db5565b6118155760405162461bcd60e51b8152600401610a409061564b565b600955565b600d602052816000526040600020818154811061183657600080fd5b90600052602060002001600091509150505481565b6000611858600754611aa1565b905090565b61186633613db5565b6118825760405162461bcd60e51b8152600401610a409061564b565b6117ee60008051602061588c83398151915233611543565b60006118a4610e7b565b6118b683670de0b6b3a7640000615781565b6109809190615761565b6118c933613da9565b6118e55760405162461bcd60e51b8152600401610a409061546c565b6118fd60008051602061584c833981519152826112d5565b50565b6001600160a01b0381166000908152600d602090815260408083208054825181850281018501909352808352849383018282801561195d57602002820191906000526020600020905b815481526020019060010190808311611949575b505050505090508051600014156119775750600092915050565b60005b81518110156119cf576119b38282815181106119a657634e487b7160e01b600052603260045260246000fd5b6020026020010151610a0d565b6119bd9084615749565b92506119c8816157fa565b905061197a565b5050919050565b6119df33610d06565b806119ee57506119ee33613da9565b611a0a5760405162461bcd60e51b8152600401610a40906153f8565b6001600160a01b038116611a305760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415611a595760405162461bcd60e51b8152600401610a4090615554565b611a7160008051602061584c833981519152826112d5565b6118fd60008051602061584c83398151915233611543565b6005546000906118b683670de0b6b3a7640000615781565b6000670de0b6b3a7640000611ab4610e7b565b6118b69084615781565b60008180611ade5760405162461bcd60e51b8152600401610a409061561f565b6000838152600f6020526040902060030154421115611b0757611b0083610a0d565b9150611b0c565b600091505b50919050565b611b1b33613da9565b611b375760405162461bcd60e51b8152600401610a409061546c565b6001600160a01b038116611b5d5760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415611b865760405162461bcd60e51b8152600401610a4090615554565b611b916000826112d5565b6118fd600033611543565b8180611bba5760405162461bcd60e51b8152600401610a409061561f565b8180611bd85760405162461bcd60e51b8152600401610a409061561f565b6000848152600f6020526040902080546001600160a01b03163314611c0f5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e60209081526040808320888452909152902054600114611c795760405162461bcd60e51b815260206004820152601f60248201527f69742773206e6f742073696d706c65207374616b696e672070726f64756374006044820152606401610a40565b611c816115eb565b6000611c8c85611a89565b905084826001016000828254611ca29190615749565b9250508190555080826002016000828254611cbd9190615749565b925050819055508460086000828254611cd69190615749565b925050819055508060076000828254611cef9190615749565b9091555050600454600254611d13916001600160a01b03918216913391168861433b565b7f3580fad54ac878fb39f354ed4980379c99975b958cc12f96c2342daf1a943384338688604051611d46939291906152b1565b60405180910390a1505050505050565b60009182526011602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000426000600101541015611d965750600090565b6001546118589042906157a0565b611dad33613da9565b611dc95760405162461bcd60e51b8152600401610a409061546c565b6118fd600082614456565b6000670de0b6b3a7640000600554836118b69190615781565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b8152600401611e2192919061571c565b60206040518083038186803b158015611e3957600080fd5b505afa158015611e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7191906150b6565b611e8d5760405162461bcd60e51b8152600401610a4090615584565b856001600160a01b038116611eb45760405162461bcd60e51b8152600401610a40906154f7565b600086118015611ec45750600084115b8015611ed05750600085115b611eec5760405162461bcd60e51b8152600401610a4090615694565b6003546040516316045cb160e31b8152600091829173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891611f37916001600160a01b03169042908b906004016152b1565b604080518083038186803b158015611f4e57600080fd5b505af4158015611f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f86919061517a565b9150915060008211611fcf5760405162461bcd60e51b81526020600482015260126024820152711e995c9bc81cdd1bdcd15c1bd8da155b9a5d60721b6044820152606401610a40565b600081116120115760405162461bcd60e51b815260206004820152600f60248201526e7a65726f20756e6c6f636b54696d6560881b6044820152606401610a40565b61201a896140e6565b61202261418c565b935061202e89856141a7565b6120366115eb565b60006120458a868b858c6141ea565b90506000806120568c8c8b88614460565b915091508160106000898152602001908152602001600020819055507fe3cd05b44cf9a64ec6c44b15776a7af54f595a214f12b62950054db4faeef15e8c8c858c8e8c888f896040516120f6999897969594939291906001600160a01b03999099168952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b60405180910390a150505050505095945050505050565b600480546040805163688d653160e11b8152905160009384936001600160a01b03169263d11aca629281830192602092829003018186803b15801561215157600080fd5b505afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190615141565b90506000612198600754611aa1565b9050808210156121ab5760009250505090565b6121b581836157a0565b9250505090565b6121c533610d06565b806121d457506121d433613da9565b6121f05760405162461bcd60e51b8152600401610a40906153f8565b6117ee60008051602061584c83398151915233611543565b806122435760405162461bcd60e51b815260206004820152600b60248201526a6e6f207374616b6549647360a81b6044820152606401610a40565b8060005b818110156122905761227e84848381811061227257634e487b7160e01b600052603260045260246000fd5b9050602002013561101e565b80612288816157fa565b915050612247565b50505050565b600081806122b65760405162461bcd60e51b8152600401610a409061561f565b6004546002546122d5916001600160a01b03918216913391168661433b565b6122de336140e6565b336000908152600d602052604090208054600190811061230e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015491506123236115eb565b61233b338385612334426001615749565b60006141ea565b507f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9033848460405161236f939291906152b1565b60405180910390a150919050565b600083118061238c5750600082115b806123975750600081115b6123b35760405162461bcd60e51b8152600401610a40906153d0565b600084815260106020908152604080832054600f835292819020815160a08101835281546001600160a01b03168082526001830154948201949094526002820154928101929092526003810154606083015260040154608082015290331461242d5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e602090815260408083208984529091529020546001106124675760405162461bcd60e51b8152600401610a40906154b4565b61246f6115eb565b600061247e8260400151611dd4565b9050808511156124a05760405162461bcd60e51b8152600401610a40906155ea565b82156124bb576124b63388858560600151614653565b6124de565b428260600151106124de5760405162461bcd60e51b8152600401610a40906155b4565b851561250357600454600254612503916001600160a01b03918216913391168961433b565b60008085156125ab576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891612552916001600160a01b03169042908b906004016152b1565b604080518083038186803b15801561256957600080fd5b505af415801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a1919061517a565b909250905061263b565b600360009054906101000a90046001600160a01b03166001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126319190615141565b9150836060015190505b61264789828a8a614777565b6000808a881561268c5761265b8b87615749565b95506126678a876157a0565b955061267533878b88614460565b600083815260106020526040902082905590935091505b89156126f65760048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc794916126c39133918f910161530d565b600060405180830381600087803b1580156126dd57600080fd5b505af11580156126f1573d6000803e3d6000fd5b505050505b60008051602061586c833981519152338c8c8c85888860405161271f97969594939291906152d2565b60405180910390a1505050505050505050505050565b61273e33613da9565b61275a5760405162461bcd60e51b8152600401610a409061546c565b6118fd60008051602061588c833981519152826112d5565b82806127905760405162461bcd60e51b8152600401610a409061561f565b600083118061279f5750600082115b6127eb5760405162461bcd60e51b815260206004820152601d60248201527f7a65726f205f616d6f756e7420616e64205f756e6c6f636b5765656b730000006044820152606401610a40565b6000848152600f6020908152604091829020825160a08101845281546001600160a01b031680825260018301549382019390935260028201549381019390935260038101546060840152600401546080830152331461285c5760405162461bcd60e51b8152600401610a4090615526565b82156128dd57336000908152600e602090815260408083208884529091529020546001106128dd5760405162461bcd60e51b815260206004820152602860248201527f697427732073696d706c65207374616b696e672070726f647563742c2063616e60448201526713ba103637b1b59760c11b6064820152608401610a40565b6128e56115eb565b6128f1338686866149e5565b6003546040805163fd2dcecf60e01b815290516000926001600160a01b03169163fd2dcecf916004808301926020929190829003018186803b15801561293657600080fd5b505afa15801561294a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296e9190615141565b600087815260106020908152604080832054338452600e83528184208b85529092528220549293509160011080156129a4575081155b80156129b05750600086115b156129ef576129d6336129c56107958b610a0d565b6129cf908a615749565b8886614460565b60008a8152601060205260409020919091559050612e2f565b336000908152600e602090815260408083208b84529091529020546001108015612a195750600082115b15612e2f57600354604051639ce5630560e01b81526004810184905260009182916001600160a01b0390911690639ce563059060240160606040518083038186803b158015612a6757600080fd5b505afa158015612a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9f91906151c8565b92509250504282118015612ab65750428660600151115b612ad25760405162461bcd60e51b8152600401610a40906156b8565b87612c0157600080546060880151612aeb9042906157a0565b612af59190615761565b6009546040516379e42f5d60e11b815291925060009173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba91612b37918f918790600401615733565b60206040518083038186803b158015612b4f57600080fd5b505af4158015612b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b879190615141565b9050612b938184615749565b60035460405163077f15b960e51b81529196506001600160a01b03169063efe2b72090612bc89033908a9086906004016152b1565b600060405180830381600087803b158015612be257600080fd5b505af1158015612bf6573d6000803e3d6000fd5b505050505050612e2c565b8715612e2c576000805481908190612c19898d615781565b612c239190615761565b6009546040516379e42f5d60e11b815291925073__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba91612c63918891908690600401615733565b60206040518083038186803b158015612c7b57600080fd5b505af4158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb39190615141565b9250612cbf84846157a0565b92508b15612d865760008054612cd58a8e615781565b612cdf42896157a0565b612ce99190615749565b612cf39190615761565b905073__$23c3f0c4d39c3898c699ac978f80cfe781$__63f3c85eba8e600954846040518463ffffffff1660e01b8152600401612d3293929190615733565b60206040518083038186803b158015612d4a57600080fd5b505af4158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d829190615141565b9250505b81612d918486615749565b612d9b9190615749565b6003549096506001600160a01b031663b839c0a53389612dbb8688615749565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606481018e9052608401600060405180830381600087803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b505050505050505b50505b60008051602061582c8339815191523388888b8686604051610cdf96959493929190615326565b60008111612e765760405162461bcd60e51b8152600401610a4090615694565b6000828152600f6020526040902080546001600160a01b03163314612ead5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e60209081526040808320868452909152902054600110612ee75760405162461bcd60e51b8152600401610a40906154b4565b612eef6115eb565b6000612efe8260020154611dd4565b905080831115612f205760405162461bcd60e51b8152600401610a40906155ea565b60008481526010602052604090205480612f5c5742836003015410612f575760405162461bcd60e51b8152600401610a40906155b4565b612f6c565b612f6c3386838660030154614653565b6000612f7785611a89565b905060008460010154841115612f99576001850154612f9690856157a0565b90505b81856002016000828254612fad91906157a0565b925050819055508160076000828254612fc691906157a0565b909155505060018501548690612fdd908390615749565b612fe791906157a0565b60018601556008548690612ffc908390615749565b61300691906157a0565b60085560048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc7949161303a9133918b910161530d565b600060405180830381600087803b15801561305457600080fd5b505af1158015613068573d6000803e3d6000fd5b5050505060008051602061586c8339815191523360008860008b60008060405161309897969594939291906152d2565b60405180910390a150505050505050565b81806130c75760405162461bcd60e51b8152600401610a409061561f565b81806130e55760405162461bcd60e51b8152600401610a409061561f565b6000848152600f6020526040902080546001600160a01b0316331461311c5760405162461bcd60e51b8152600401610a4090615526565b60045460025461313b916001600160a01b03918216913391168761433b565b6131436115eb565b600061314e85611a89565b9050848260010160008282546131649190615749565b925050819055508082600201600082825461317f9190615749565b9250508190555084600860008282546131989190615749565b9250508190555080600760008282546131b19190615749565b9091555050600086815260106020908152604080832054338452600e83528184208a855290925282205490919060011080156131ed5750600082115b1561342057600354604051639ce5630560e01b81526004810184905260009182916001600160a01b0390911690639ce563059060240160606040518083038186803b15801561323b57600080fd5b505afa15801561324f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327391906151c8565b9250925050428211801561328a5750428660030154115b6132a65760405162461bcd60e51b8152600401610a40906156b8565b6000805460038801546132ba9042906157a0565b6132c49190615761565b9050806001141561330957670de0b6b3a7640000600954670de0b6b3a76400006132ee9190615749565b6132f8908c615781565b6133029190615761565b93506133a1565b60018111156133a1576009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba9161334e918e918690600401615733565b60206040518083038186803b15801561336657600080fd5b505af415801561337a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339e9190615141565b93505b831561341c5760035460405163077f15b960e51b81526001600160a01b039091169063efe2b720906133db903390899089906004016152b1565b600060405180830381600087803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b5050505083826134199190615749565b93505b5050505b60008051602061582c833981519152338860008b8686604051610cdf96959493929190615326565b61345133613da9565b61346d5760405162461bcd60e51b8152600401610a409061546c565b6117ee600033611543565b61348133610d06565b80613490575061349033613da9565b6134ac5760405162461bcd60e51b8152600401610a40906153f8565b866134e75760405162461bcd60e51b815260206004820152600b60248201526a0f4cae4de40d8cadccee8d60ab1b6044820152606401610a40565b86851461352d5760405162461bcd60e51b81526020600482015260146024820152730eee4dedcce40c4c2d8c2dcc6ca40d8cadccee8d60631b6044820152606401610a40565b8683146135725760405162461bcd60e51b81526020600482015260136024820152720eee4dedcce40e0cae4d2dec840d8cadccee8d606b1b6044820152606401610a40565b8681146135b85760405162461bcd60e51b81526020600482015260146024820152730eee4dedcce40e8ded6cadc92c840d8cadccee8d60631b6044820152606401610a40565b60005b87811015613688576136758989838181106135e657634e487b7160e01b600052603260045260246000fd5b90506020020160208101906135fb9190614ebb565b88888481811061361b57634e487b7160e01b600052603260045260246000fd5b9050602002013587878581811061364257634e487b7160e01b600052603260045260246000fd5b9050602002013586868681811061366957634e487b7160e01b600052603260045260246000fd5b90506020020135614ab9565b5080613680816157fa565b9150506135bb565b505050505050505050565b600082806136b35760405162461bcd60e51b8152600401610a409061561f565b82806136d15760405162461bcd60e51b8152600401610a409061561f565b600954806136f15760405162461bcd60e51b8152600401610a409061561f565b6003546040516316045cb160e31b8152600091829173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e5889161373c916001600160a01b03169042908c906004016152b1565b604080518083038186803b15801561375357600080fd5b505af4158015613767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378b919061517a565b6004546002549294509092506137b0916001600160a01b03908116913391168b61433b565b6137b9336140e6565b6137c161418c565b95506137cd33876141a7565b6137d56115eb565b6137e333878a8460006141ea565b506000806137f3338b8b87614460565b60008a815260106020526040908190208390555191935091507ff46503b8d1f95e046084d2a40bac278932cd394b6ef745d41548422b8182af28906138439033908d908d908d9088908890615326565b60405180910390a15050505050505092915050565b61386182610cf1565b61386b8133613ffc565b6112f283836142d4565b60008211806138845750600081115b6138a05760405162461bcd60e51b8152600401610a40906153d0565b6000838152600f6020526040902080546001600160a01b031633146138d75760405162461bcd60e51b8152600401610a4090615526565b336000908152600e602090815260408083208784529091529020546001106139115760405162461bcd60e51b8152600401610a40906154b4565b600084815260106020526040902054801561393b576139363386838560030154614653565b61395e565b4282600301541061395e5760405162461bcd60e51b8152600401610a40906155b4565b831561398357600454600254613983916001600160a01b03918216913391168761433b565b6000808415613a2b576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e588916139d2916001600160a01b03169042908a906004016152b1565b604080518083038186803b1580156139e957600080fd5b505af41580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a21919061517a565b9092509050613abb565b600360009054906101000a90046001600160a01b03166001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a7957600080fd5b505afa158015613a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab19190615141565b9150836003015490505b613ac36115eb565b6000613ad28560020154611dd4565b90506000613adf88611a89565b905060008660010154831115613b01576001870154613afe90846157a0565b90505b81876002016000828254613b159190615749565b90915550506003870184905560018701548190613b33908b90615749565b613b3d9190615749565b60018801556008548190613b52908b90615749565b613b5c9190615749565b6008819055508160076000828254613b749190615749565b9091555060009050808b8a15613bb057613b9933613b928e89615749565b8d8b614460565b600083815260106020526040902082905590935091505b60008051602061586c833981519152338d60008e858888604051613bda97969594939291906152d2565b60405180910390a150505050505050505050505050565b600480546040805163688d653160e11b8152905160009384936001600160a01b03169263d11aca629281830192602092829003018186803b158015613c3557600080fd5b505afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d9190615141565b90506000612198600754611dd4565b613c8533613db5565b613ca15760405162461bcd60e51b8152600401610a409061564b565b8080613cbf5760405162461bcd60e51b8152600401610a409061561f565b81600a541415613cff5760405162461bcd60e51b815260206004820152600b60248201526a1cd85b59481c195c9a5bd960aa1b6044820152606401610a40565b50600a55565b613d0e33613db5565b613d2a5760405162461bcd60e51b8152600401610a409061564b565b6001600160a01b038116613d505760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415613d795760405162461bcd60e51b8152600401610a4090615554565b613d9160008051602061588c833981519152826112d5565b6118fd60008051602061588c83398151915233611543565b60006109808183611d56565b600061098060008051602061588c83398151915283611d56565b6001600160a01b0382166000908152600e60209081526040808320848452909152902054600181118015613e1a57506001600160a01b0383166000908152600d602052604090205481105b15610980576001600160a01b0383166000908152600d6020526040902054613e44906001906157a0565b811015613f13576001600160a01b0383166000908152600d602052604081208054613e71906001906157a0565b81548110613e8f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600d6000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110613ee157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b0386168152600e8252604080822093825292909152208190555b6001600160a01b0383166000818152600e602090815260408083208684528252808320839055928252600d905220805480613f5e57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905592915050565b6001811115613fbb57506000908152600f6020526040812080546001600160a01b031916815560018101829055600281018290556003810182905560040155565b80600114156115bd57506000908152600f6020526040812080546001600160a01b031916815560018101829055600281018290556003810182905560040155565b6140068282611d56565b6115bd5761401e816001600160a01b03166014614b3e565b614029836020614b3e565b60405160200161403a929190615242565b60408051601f198184030181529082905262461bcd60e51b8252610a409160040161539d565b61406a8282611d56565b6115bd5760008281526011602090815260408083206001600160a01b03851684529091529020805460ff191660011790556140a23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381166000908152600d60205260409020546118fd576001600160a01b0381166000908152600d602090815260408220805460018101825590835290822001819055600b80549161413d836157fa565b90915550506001600160a01b03166000818152600e60209081526040808320600b80548552908352818420600190819055948452600d8352908320905481549485018255908352912090910155565b6000600b6000815461419d906157fa565b9182905550919050565b6001600160a01b039091166000908152600d602081815260408084208054600e845282862087875284529185208290559282526001810183559183529091200155565b600060065460011461420e5760405162461bcd60e51b8152600401610a40906156ea565b6000600681905561421e85611a89565b6040805160a0810182526001600160a01b038a8116825260208083018a8152838501868152606085018b8152608086018b815260008f8152600f909552968420955186546001600160a01b0319169516949094178555905160018501555160028401559051600383015591516004909101556008805492935087929091906142a7908490615749565b9250508190555080600760008282546142c09190615749565b909155505060016006559695505050505050565b6142de8282611d56565b156115bd5760008281526011602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161439f9190615226565b6000604051808303816000865af19150503d80600081146143dc576040519150601f19603f3d011682016040523d82523d6000602084013e6143e1565b606091505b509150915081801561440b57508051158061440b57508080602001905181019061440b91906150b6565b61444e5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610a40565b505050505050565b6115bd8282614060565b6000806006546001146144855760405162461bcd60e51b8152600401610a40906156ea565b60006006819055600954905473__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba918891906144ba888a615781565b6144c49190615761565b6040518463ffffffff1660e01b81526004016144e293929190615733565b60206040518083038186803b1580156144fa57600080fd5b505af415801561450e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145329190615141565b90506000811161457d5760405162461bcd60e51b81526020600482015260166024820152751e995c9bc818dbdb5c1bdd5b99195908185b5bdd5b9d60521b6044820152606401610a40565b60035460405163036e72c360e21b81526001600160a01b0390911690630db9cb0c906145b1908990859089906004016152b1565b602060405180830381600087803b1580156145cb57600080fd5b505af11580156145df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146039190615141565b9150600082116146435760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81cdd1bdcd25960aa1b6044820152606401610a40565b6001600655909590945092505050565b600354604051639ce5630560e01b8152600481018490526000916001600160a01b031690639ce563059060240160606040518083038186803b15801561469857600080fd5b505afa1580156146ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d091906151c8565b5091505042811080156146e257504282105b6146fe5760405162461bcd60e51b8152600401610a40906155b4565b60035460405163c0a37b3f60e01b81526001600160a01b039091169063c0a37b3f90614730908890879060040161530d565b600060405180830381600087803b15801561474a57600080fd5b505af115801561475e573d6000803e3d6000fd5b5050506000948552505060106020525050604081205550565b6006546001146147995760405162461bcd60e51b8152600401610a40906156ea565b60006006819055848152600f60205260409020821515806147ba5750600082115b806147c55750600084115b6148005760405162461bcd60e51b815260206004820152600c60248201526b7a65726f20416d6f756e747360a01b6044820152606401610a40565b60008160020154116148405760405162461bcd60e51b81526020600482015260096024820152687a65726f206c746f7360b81b6044820152606401610a40565b600061484f8260020154611dd4565b9050808311156148a05760405162461bcd60e51b815260206004820152601c60248201527b1cdd185ad948185b5bdd5b9d081a5cc81a5b9cdd59999a58da595b9d60221b6044820152606401610a40565b60008085156148b5576148b286611a89565b91505b84156148c7576148c485611a89565b90505b6003840187905560018401546000908411156148ef5760018501546148ec90856157a0565b90505b821561492857828560020160008282546149099190615749565b9250508190555082600760008282546149229190615749565b90915550505b8115614961578185600201600082825461494291906157a0565b92505081905550816007600082825461495b91906157a0565b90915550505b60008711806149705750600081115b8061497b5750600086115b156149d55785818887600101546149929190615749565b61499c9190615749565b6149a691906157a0565b6001860155600854869082906149bd908a90615749565b6149c79190615749565b6149d191906157a0565b6008555b5050600160065550505050505050565b8115614a0a57600454600254614a0a916001600160a01b03918216918791168561433b565b6000808215614aae576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891614a5a916001600160a01b03169060009088906004016152b1565b604080518083038186803b158015614a7157600080fd5b505af4158015614a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa9919061517a565b925090505b61444e858584614d26565b60008380614ad95760405162461bcd60e51b8152600401610a409061561f565b8380614af75760405162461bcd60e51b8152600401610a409061561f565b614b00876140e6565b614b0861418c565b9250614b1487846141a7565b614b228784888860006141ea565b5050506000818152601060205260409020919091559392505050565b60606000614b4d836002615781565b614b58906002615749565b6001600160401b03811115614b7d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015614ba7576020820181803683370190505b509050600360fc1b81600081518110614bd057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614c0d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000614c31846002615781565b614c3c906001615749565b90505b6001811115614cd0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614c7e57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110614ca257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93614cc9816157e3565b9050614c3f565b508315614d1f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a40565b9392505050565b600654600114614d485760405162461bcd60e51b8152600401610a40906156ea565b600060065581151580614d5b5750600081115b614da75760405162461bcd60e51b815260206004820181905260248201527f7a65726f20616d6f756e7420616e64205f696e6372656173655365636f6e64736044820152606401610a40565b6000838152600f602052604090208215614e30576000614dc684611a89565b905083826001016000828254614ddc9190615749565b9250508190555080826002016000828254614df79190615749565b925050819055508360086000828254614e109190615749565b925050819055508060076000828254614e299190615749565b9091555050505b8115614e505781816003016000828254614e4a9190615749565b90915550505b505060016006555050565b80356001600160a01b038116811461101957600080fd5b60008083601f840112614e83578182fd5b5081356001600160401b03811115614e99578182fd5b6020830191508360208260051b8501011115614eb457600080fd5b9250929050565b600060208284031215614ecc578081fd5b614d1f82614e5b565b600080600060608486031215614ee9578182fd5b614ef284614e5b565b9250614f0060208501614e5b565b9150614f0e60408501614e5b565b90509250925092565b60008060408385031215614f29578182fd5b614f3283614e5b565b946020939093013593505050565b60008060008060808587031215614f55578081fd5b614f5e85614e5b565b966020860135965060408601359560600135945092505050565b600080600080600060a08688031215614f8f578081fd5b614f9886614e5b565b97602087013597506040870135966060810135965060800135945092505050565b6000806000806000806000806080898b031215614fd4578283fd5b88356001600160401b0380821115614fea578485fd5b614ff68c838d01614e72565b909a50985060208b013591508082111561500e578485fd5b61501a8c838d01614e72565b909850965060408b0135915080821115615032578485fd5b61503e8c838d01614e72565b909650945060608b0135915080821115615056578384fd5b506150638b828c01614e72565b999c989b5096995094979396929594505050565b60008060208385031215615089578182fd5b82356001600160401b0381111561509e578283fd5b6150aa85828601614e72565b90969095509350505050565b6000602082840312156150c7578081fd5b81518015158114614d1f578182fd5b6000602082840312156150e7578081fd5b5035919050565b60008060408385031215615100578182fd5b8235915061511060208401614e5b565b90509250929050565b60006020828403121561512a578081fd5b81356001600160e01b031981168114614d1f578182fd5b600060208284031215615152578081fd5b5051919050565b6000806040838503121561516b578081fd5b50508035926020909101359150565b6000806040838503121561518c578182fd5b505080516020909101519092909150565b6000806000606084860312156151b1578081fd5b505081359360208301359350604090920135919050565b6000806000606084860312156151dc578081fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561520a578182fd5b5050823594602084013594506040840135936060013592509050565b600082516152388184602087016157b7565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516152748160178501602088016157b7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516152a58160288401602088016157b7565b01602801949350505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03979097168752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b6020808252825182820181905260009190848201906040850190845b8181101561539157835183529284019291840191600101615375565b50909695505050505050565b60208152600082518060208401526153bc8160408501602087016157b7565b601f01601f19169190910160400192915050565b6020808252600e908201526d185b1b081e995c9bc81a5b9c1d5d60921b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526023908201527f69742773206e6f7420666f722073696d706c65207374616b65206f7220656d706040820152623a3c9760e91b606082015260800190565b6020808252601590820152745374616b696e673a207a65726f206164647265737360581b604082015260600190565b60208082526014908201527331b0b63632b91034b9903737ba1039ba30b5b2b960611b604082015260600190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526016908201527539b2b73232b91034b9903737ba1030903137b73232b960511b604082015260600190565b6020808252601c908201527b1b1bd8dac8195b99081d1a5b59481a185cc81b9bdd081c185cdcd95960221b604082015260600190565b6020808252601b908201527a1c995b585a5b9959151bdcc81a5cc81a5b9cdd59999a58da595b9d602a1b604082015260600190565b60208082526012908201527114dd185ada5b99ce881e995c9bc81d5a5b9d60721b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6020808252600a90820152691e995c9bc81a5b9c1d5d60b21b604082015260600190565b6020808252601890820152771b1bd8dac8195b99081d1a5b59481a185cc81c185cdcd95960421b604082015260600190565b6020808252601890820152774c6f636b496420697320616c726561647920696e2075736560401b604082015260600190565b9182526001600160a01b0316602082015260400190565b9283526020830191909152604082015260600190565b6000821982111561575c5761575c615815565b500190565b60008261577c57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561579b5761579b615815565b500290565b6000828210156157b2576157b2615815565b500390565b60005b838110156157d25781810151838201526020016157ba565b838111156122905750506000910152565b6000816157f2576157f2615815565b506000190190565b600060001982141561580e5761580e615815565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4ed3cb428b71401f7eebc41b131a378b44ab9e704fc3fbd44909b1792ecb4ad052eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130b96969612f881e3e16987f7cc8e53854fbdcd75a94b1f85e911129b7fe279b5cfb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a26469706673582212202a17cb5e6bae9f2e3f1a6ae880c5d149acea2cff1c46805f7341386b81473a9d64736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103535760003560e01c806378ad1405116101c657806378ad1405146106c657806379be7bd0146106cf5780637cc0fee6146106e257806381045ead146106f55780638356ca4f146106fd57806383a5683a1461071057806389f395de14610723578063900cf0cf1461073657806391d14854146107595780639483c1d71461076c57806396f1557c1461077457806397b4293714610787578063980b10971461079a57806398842ff6146107ad5780639a202d47146107b55780639a794e66146107bd5780639e9e792f146107d0578063a052e69e146107f0578063a217fddf146107f9578063a694fc3a14610801578063a7110dc314610814578063b24352b11461083f578063b84ef08114610852578063b88ad1e314610865578063bba4307e14610878578063bbad8ac91461088b578063be72f2d31461089e578063c68450bf146108a6578063ca16910f146108b9578063d547741f146108cc578063d7fe4a49146108df578063e6500b21146108f2578063e75f77e1146108fa578063f1c8c9221461090d578063f47f2f1d14610920578063f558138214610933578063fad1c85c1461093c57600080fd5b806301ffc9a714610358578063037859af146103805780630e1e998f146103a057806311f1c8bf146103b757806317ed177a146103ca5780631e725567146103dd57806322985246146103f2578063248a9ca31461040757806324d7806c1461041a578063265705b11461042d57806328ea9ff0146104405780632e17de78146104485780632f2ff15d1461045b57806330e06e8b1461046e578063332b01f31461047657806336568abe14610489578063385030b41461049c57806340a5737f146104a557806341c04d5e146104b857806347e1b372146104cd57806349ec9883146104d55780634e533572146104e85780634e6c4466146105865780635720bf3a146105b15780635746248f146105ba5780635dc3c29a146105cd5780635f3383521461061457806361d027b31461061c57806365cb3a831461062f578063660fe73f146106375780636d1c789f1461064a578063704802751461065357806370a082311461066657806375829def1461067957806375b238fc1461068c57806377d73dc6146106b3575b600080fd5b61036b610366366004615119565b61094f565b60405190151581526020015b60405180910390f35b61039361038e366004614ebb565b610986565b6040516103779190615359565b6103a9600b5481565b604051908152602001610377565b6103a96103c53660046150d6565b6109f2565b6103a96103d83660046150d6565b610a0d565b6103f06103eb366004615159565b610a22565b005b6103a960008051602061588c83398151915281565b6103a96104153660046150d6565b610cf1565b61036b610428366004614ebb565b610d06565b6103f061043b366004614ed5565b610d20565b6103a9610e7b565b6103f06104563660046150d6565b61101e565b6103f06104693660046150ee565b6112d5565b6103a96112f7565b6103a9610484366004614f40565b6113b0565b6103f06104973660046150ee565b611543565b6103a9600a5481565b6103f06104b33660046150d6565b6115c1565b6103a960008051602061584c83398151915281565b6103f06115eb565b6103f06104e33660046150d6565b6117f0565b6105546104f63660046150d6565b6000908152600f6020908152604091829020825160a08101845281546001600160a01b031680825260018301549382018490526002830154948201859052600383015460608301819052600490930154608090920182905294929392565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610377565b600354610599906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b6103a960095481565b6103a96105c8366004614f17565b61181a565b6105546105db3660046150d6565b600f60205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b6103a961184b565b600454610599906001600160a01b031681565b6103f061185d565b6103a96106453660046150d6565b61189a565b6103a9600c5481565b6103f0610661366004614ebb565b6118c0565b6103a9610674366004614ebb565b611900565b6103f0610687366004614ebb565b6119d6565b6103a97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6103a96106c13660046150d6565b611a89565b6103a960055481565b6103a96106dd3660046150d6565b611aa1565b6103a96106f03660046150d6565b611abe565b6005546103a9565b6103f061070b366004614ebb565b611b12565b6103f061071e366004615159565b611b9c565b600254610599906001600160a01b031681565b600054600154610744919082565b60408051928352602083019190915201610377565b61036b6107673660046150ee565b611d56565b6103a9611d81565b6103f0610782366004614ebb565b611da4565b6103a96107953660046150d6565b611dd4565b6103a96107a8366004614f78565b611ded565b6103a961210d565b6103f06121bc565b6103f06107cb366004615077565b612208565b6103a96107de3660046150d6565b60106020526000908152604090205481565b6103a960085481565b6103a9600081565b6103a961080f3660046150d6565b612296565b6103a9610822366004614f17565b600e60209081526000928352604080842090915290825290205481565b6103f061084d3660046151f5565b61237d565b6103f0610860366004614ebb565b612735565b6103f061087336600461519d565b612772565b6103f0610886366004615159565b612e56565b6103f0610899366004615159565b6130a9565b6103f0613448565b6103f06108b4366004614fb9565b613478565b6103a96108c7366004615159565b613693565b6103f06108da3660046150ee565b613858565b6103f06108ed36600461519d565b613875565b6103a9613bf1565b6103f06109083660046150d6565b613c7c565b6103f061091b366004614ebb565b613d05565b61036b61092e366004614ebb565b613da9565b6103a960075481565b61036b61094a366004614ebb565b613db5565b60006001600160e01b03198216637965db0b60e01b148061098057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0381166000908152600d60209081526040918290208054835181840281018401909452808452606093928301828280156109e657602002820191906000526020600020905b8154815260200190600101908083116109d2575b50505050509050919050565b6000818152600f602052604081206002015461098090611aa1565b6000908152600f602052604090206002015490565b8180610a495760405162461bcd60e51b8152600401610a409061561f565b60405180910390fd5b8180610a675760405162461bcd60e51b8152600401610a409061561f565b60008481526010602052604090205415610ac35760405162461bcd60e51b815260206004820152601d60248201527f7468697320697320666f72206e6f6e2d6c6f636b2070726f647563742e0000006044820152606401610a40565b6000848152600f6020526040902080546001600160a01b03163314610afa5760405162461bcd60e51b8152600401610a4090615526565b42816003015410610b485760405162461bcd60e51b815260206004820152601860248201527732b732103a34b6b2903430b9903737ba103830b9b9b2b21760411b6044820152606401610a40565b8060020154841115610b935760405162461bcd60e51b81526020600482015260146024820152731b1d1bdcc81a5cc81a5b9cdd59999a58da595b9d60621b6044820152606401610a40565b610b9b6115eb565b6000610baa8260020154611dd4565b90506000610bb786611dd4565b905060008360010154831115610bd9576001840154610bd690846157a0565b90505b86846002016000828254610bed91906157a0565b925050819055508660076000828254610c0691906157a0565b909155505060018401548290610c1d908390615749565b610c2791906157a0565b60018501556008548290610c3c908390615749565b610c4691906157a0565b60085560048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc79491610c7a91339187910161530d565b600060405180830381600087803b158015610c9457600080fd5b505af1158015610ca8573d6000803e3d6000fd5b505050507f5ac7224c417abee0b26a4daa9b5221c45297a5429fc56e11bc9170dabc15d33c33838a604051610cdf939291906152b1565b60405180910390a15050505050505050565b60009081526011602052604090206001015490565b600061098060008051602061584c83398151915283611d56565b610d2933613db5565b610d455760405162461bcd60e51b8152600401610a409061564b565b826001600160a01b038116610d6c5760405162461bcd60e51b8152600401610a40906154f7565b826001600160a01b038116610d935760405162461bcd60e51b8152600401610a40906154f7565b826001600160a01b038116610dba5760405162461bcd60e51b8152600401610a40906154f7565b6002546001600160a01b038781169116141580610de557506003546001600160a01b03868116911614155b80610dfe57506004546001600160a01b03858116911614155b610e395760405162461bcd60e51b815260206004820152600c60248201526b73616d65206164647265737360a01b6044820152606401610a40565b5050600280546001600160a01b039586166001600160a01b03199182161790915560038054948616948216949094179093555060048054919093169116179055565b6005546001546000919042106110195760005460018054909190610e9f90426157a0565b1115610ecd57600054600154610eb590426157a0565b610ebf9190615761565b610eca906001615749565b90505b8060011415610f1057670de0b6b3a7640000600954670de0b6b3a7640000610ef59190615749565b610eff9084615781565b610f099190615761565b9150610fa0565b6005546009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9263f3c85eba92610f4d928690600401615733565b60206040518083038186803b158015610f6557600080fd5b505af4158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9d9190615141565b91505b6000610faa613bf1565b90506000670de0b6b3a764000060055485610fc591906157a0565b600754610fd29190615781565b610fdc9190615761565b90508181111561101557600554600754610ffe84670de0b6b3a7640000615781565b6110089190615761565b6110129190615749565b93505b5050505b919050565b808061103c5760405162461bcd60e51b8152600401610a409061561f565b6000828152600f6020526040902080546001600160a01b0316331461109b5760405162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba1039ba30b5b2b91760591b6044820152606401610a40565b428160030154106110e85760405162461bcd60e51b815260206004820152601760248201527632b732103a34b6b2903430b9b713ba103830b9b9b2b21760491b6044820152606401610a40565b6110f06115eb565b60006110ff8260020154611dd4565b9050600081116111495760405162461bcd60e51b81526020600482015260156024820152741e995c9bc818db185a5b58589b1948185b5bdd5b9d605a1b6044820152606401610a40565b81600101546008600082825461115f91906157a0565b909155505060028201546007805460009061117b9084906157a0565b909155506000905061118d3386613dcf565b90506111998582613f7a565b60008581526010602052604090205415611230576003546000868152601060205260409081902054905163c0a37b3f60e01b81526001600160a01b039092169163c0a37b3f916111ee9133919060040161530d565b600060405180830381600087803b15801561120857600080fd5b505af115801561121c573d6000803e3d6000fd5b505050600086815260106020526040812055505b60048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc7949161126191339187910161530d565b600060405180830381600087803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505050507f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e3383876040516112c6939291906152b1565b60405180910390a15050505050565b6112de82610cf1565b6112e88133613ffc565b6112f28383614060565b505050565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b815260040161132b92919061571c565b60206040518083038186803b15801561134357600080fd5b505afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b91906150b6565b6113975760405162461bcd60e51b8152600401610a4090615584565b600c80549060006113a7836157fa565b91905055905090565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b81526004016113e492919061571c565b60206040518083038186803b1580156113fc57600080fd5b505afa158015611410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143491906150b6565b6114505760405162461bcd60e51b8152600401610a4090615584565b846001600160a01b0381166114775760405162461bcd60e51b8152600401610a40906154f7565b84806114955760405162461bcd60e51b8152600401610a409061561f565b84806114b35760405162461bcd60e51b8152600401610a409061561f565b6114bc886140e6565b6114c461418c565b93506114d088856141a7565b6114d86115eb565b60006114f489868a600a54426114ee9190615749565b8b6141ea565b90507f10b677c7a9f17c8fa541bdcc53b14beb96651665c3ef380c8df860dbd8f3545e8989838a898b60405161152f96959493929190615326565b60405180910390a150505050949350505050565b6001600160a01b03811633146115b35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a40565b6115bd82826142d4565b5050565b6115ca33613db5565b6115e65760405162461bcd60e51b8152600401610a409061564b565b600555565b60015442106117ee576000546001805490919061160890426157a0565b11156116365760005460015461161e90426157a0565b6116289190615761565b611633906001615749565b90505b600054611644908290615781565b60018054600090611656908490615749565b909155506000905060018214156116a457670de0b6b3a7640000600954670de0b6b3a76400006116869190615749565b6005546116939190615781565b61169d9190615761565b9050611734565b6005546009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9263f3c85eba926116e1928790600401615733565b60206040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190615141565b90505b600061173e613bf1565b6005549091506000670de0b6b3a764000061175983866157a0565b6007546117669190615781565b6117709190615761565b9050828111156117a65760075461178f84670de0b6b3a7640000615781565b6117999190615761565b6117a39083615749565b93505b818411156117e85760058490556007546040517fd1a8a452d776b1b6802824ca2e8489c6448e2cb0963f552a9a19ab4ae064ca58916112c69185918891615733565b50505050505b565b6117f933613db5565b6118155760405162461bcd60e51b8152600401610a409061564b565b600955565b600d602052816000526040600020818154811061183657600080fd5b90600052602060002001600091509150505481565b6000611858600754611aa1565b905090565b61186633613db5565b6118825760405162461bcd60e51b8152600401610a409061564b565b6117ee60008051602061588c83398151915233611543565b60006118a4610e7b565b6118b683670de0b6b3a7640000615781565b6109809190615761565b6118c933613da9565b6118e55760405162461bcd60e51b8152600401610a409061546c565b6118fd60008051602061584c833981519152826112d5565b50565b6001600160a01b0381166000908152600d602090815260408083208054825181850281018501909352808352849383018282801561195d57602002820191906000526020600020905b815481526020019060010190808311611949575b505050505090508051600014156119775750600092915050565b60005b81518110156119cf576119b38282815181106119a657634e487b7160e01b600052603260045260246000fd5b6020026020010151610a0d565b6119bd9084615749565b92506119c8816157fa565b905061197a565b5050919050565b6119df33610d06565b806119ee57506119ee33613da9565b611a0a5760405162461bcd60e51b8152600401610a40906153f8565b6001600160a01b038116611a305760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415611a595760405162461bcd60e51b8152600401610a4090615554565b611a7160008051602061584c833981519152826112d5565b6118fd60008051602061584c83398151915233611543565b6005546000906118b683670de0b6b3a7640000615781565b6000670de0b6b3a7640000611ab4610e7b565b6118b69084615781565b60008180611ade5760405162461bcd60e51b8152600401610a409061561f565b6000838152600f6020526040902060030154421115611b0757611b0083610a0d565b9150611b0c565b600091505b50919050565b611b1b33613da9565b611b375760405162461bcd60e51b8152600401610a409061546c565b6001600160a01b038116611b5d5760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415611b865760405162461bcd60e51b8152600401610a4090615554565b611b916000826112d5565b6118fd600033611543565b8180611bba5760405162461bcd60e51b8152600401610a409061561f565b8180611bd85760405162461bcd60e51b8152600401610a409061561f565b6000848152600f6020526040902080546001600160a01b03163314611c0f5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e60209081526040808320888452909152902054600114611c795760405162461bcd60e51b815260206004820152601f60248201527f69742773206e6f742073696d706c65207374616b696e672070726f64756374006044820152606401610a40565b611c816115eb565b6000611c8c85611a89565b905084826001016000828254611ca29190615749565b9250508190555080826002016000828254611cbd9190615749565b925050819055508460086000828254611cd69190615749565b925050819055508060076000828254611cef9190615749565b9091555050600454600254611d13916001600160a01b03918216913391168861433b565b7f3580fad54ac878fb39f354ed4980379c99975b958cc12f96c2342daf1a943384338688604051611d46939291906152b1565b60405180910390a1505050505050565b60009182526011602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000426000600101541015611d965750600090565b6001546118589042906157a0565b611dad33613da9565b611dc95760405162461bcd60e51b8152600401610a409061546c565b6118fd600082614456565b6000670de0b6b3a7640000600554836118b69190615781565b6004546000906001600160a01b0316634cf158586009336040518363ffffffff1660e01b8152600401611e2192919061571c565b60206040518083038186803b158015611e3957600080fd5b505afa158015611e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7191906150b6565b611e8d5760405162461bcd60e51b8152600401610a4090615584565b856001600160a01b038116611eb45760405162461bcd60e51b8152600401610a40906154f7565b600086118015611ec45750600084115b8015611ed05750600085115b611eec5760405162461bcd60e51b8152600401610a4090615694565b6003546040516316045cb160e31b8152600091829173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891611f37916001600160a01b03169042908b906004016152b1565b604080518083038186803b158015611f4e57600080fd5b505af4158015611f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f86919061517a565b9150915060008211611fcf5760405162461bcd60e51b81526020600482015260126024820152711e995c9bc81cdd1bdcd15c1bd8da155b9a5d60721b6044820152606401610a40565b600081116120115760405162461bcd60e51b815260206004820152600f60248201526e7a65726f20756e6c6f636b54696d6560881b6044820152606401610a40565b61201a896140e6565b61202261418c565b935061202e89856141a7565b6120366115eb565b60006120458a868b858c6141ea565b90506000806120568c8c8b88614460565b915091508160106000898152602001908152602001600020819055507fe3cd05b44cf9a64ec6c44b15776a7af54f595a214f12b62950054db4faeef15e8c8c858c8e8c888f896040516120f6999897969594939291906001600160a01b03999099168952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b60405180910390a150505050505095945050505050565b600480546040805163688d653160e11b8152905160009384936001600160a01b03169263d11aca629281830192602092829003018186803b15801561215157600080fd5b505afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190615141565b90506000612198600754611aa1565b9050808210156121ab5760009250505090565b6121b581836157a0565b9250505090565b6121c533610d06565b806121d457506121d433613da9565b6121f05760405162461bcd60e51b8152600401610a40906153f8565b6117ee60008051602061584c83398151915233611543565b806122435760405162461bcd60e51b815260206004820152600b60248201526a6e6f207374616b6549647360a81b6044820152606401610a40565b8060005b818110156122905761227e84848381811061227257634e487b7160e01b600052603260045260246000fd5b9050602002013561101e565b80612288816157fa565b915050612247565b50505050565b600081806122b65760405162461bcd60e51b8152600401610a409061561f565b6004546002546122d5916001600160a01b03918216913391168661433b565b6122de336140e6565b336000908152600d602052604090208054600190811061230e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015491506123236115eb565b61233b338385612334426001615749565b60006141ea565b507f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9033848460405161236f939291906152b1565b60405180910390a150919050565b600083118061238c5750600082115b806123975750600081115b6123b35760405162461bcd60e51b8152600401610a40906153d0565b600084815260106020908152604080832054600f835292819020815160a08101835281546001600160a01b03168082526001830154948201949094526002820154928101929092526003810154606083015260040154608082015290331461242d5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e602090815260408083208984529091529020546001106124675760405162461bcd60e51b8152600401610a40906154b4565b61246f6115eb565b600061247e8260400151611dd4565b9050808511156124a05760405162461bcd60e51b8152600401610a40906155ea565b82156124bb576124b63388858560600151614653565b6124de565b428260600151106124de5760405162461bcd60e51b8152600401610a40906155b4565b851561250357600454600254612503916001600160a01b03918216913391168961433b565b60008085156125ab576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891612552916001600160a01b03169042908b906004016152b1565b604080518083038186803b15801561256957600080fd5b505af415801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a1919061517a565b909250905061263b565b600360009054906101000a90046001600160a01b03166001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126319190615141565b9150836060015190505b61264789828a8a614777565b6000808a881561268c5761265b8b87615749565b95506126678a876157a0565b955061267533878b88614460565b600083815260106020526040902082905590935091505b89156126f65760048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc794916126c39133918f910161530d565b600060405180830381600087803b1580156126dd57600080fd5b505af11580156126f1573d6000803e3d6000fd5b505050505b60008051602061586c833981519152338c8c8c85888860405161271f97969594939291906152d2565b60405180910390a1505050505050505050505050565b61273e33613da9565b61275a5760405162461bcd60e51b8152600401610a409061546c565b6118fd60008051602061588c833981519152826112d5565b82806127905760405162461bcd60e51b8152600401610a409061561f565b600083118061279f5750600082115b6127eb5760405162461bcd60e51b815260206004820152601d60248201527f7a65726f205f616d6f756e7420616e64205f756e6c6f636b5765656b730000006044820152606401610a40565b6000848152600f6020908152604091829020825160a08101845281546001600160a01b031680825260018301549382019390935260028201549381019390935260038101546060840152600401546080830152331461285c5760405162461bcd60e51b8152600401610a4090615526565b82156128dd57336000908152600e602090815260408083208884529091529020546001106128dd5760405162461bcd60e51b815260206004820152602860248201527f697427732073696d706c65207374616b696e672070726f647563742c2063616e60448201526713ba103637b1b59760c11b6064820152608401610a40565b6128e56115eb565b6128f1338686866149e5565b6003546040805163fd2dcecf60e01b815290516000926001600160a01b03169163fd2dcecf916004808301926020929190829003018186803b15801561293657600080fd5b505afa15801561294a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296e9190615141565b600087815260106020908152604080832054338452600e83528184208b85529092528220549293509160011080156129a4575081155b80156129b05750600086115b156129ef576129d6336129c56107958b610a0d565b6129cf908a615749565b8886614460565b60008a8152601060205260409020919091559050612e2f565b336000908152600e602090815260408083208b84529091529020546001108015612a195750600082115b15612e2f57600354604051639ce5630560e01b81526004810184905260009182916001600160a01b0390911690639ce563059060240160606040518083038186803b158015612a6757600080fd5b505afa158015612a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9f91906151c8565b92509250504282118015612ab65750428660600151115b612ad25760405162461bcd60e51b8152600401610a40906156b8565b87612c0157600080546060880151612aeb9042906157a0565b612af59190615761565b6009546040516379e42f5d60e11b815291925060009173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba91612b37918f918790600401615733565b60206040518083038186803b158015612b4f57600080fd5b505af4158015612b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b879190615141565b9050612b938184615749565b60035460405163077f15b960e51b81529196506001600160a01b03169063efe2b72090612bc89033908a9086906004016152b1565b600060405180830381600087803b158015612be257600080fd5b505af1158015612bf6573d6000803e3d6000fd5b505050505050612e2c565b8715612e2c576000805481908190612c19898d615781565b612c239190615761565b6009546040516379e42f5d60e11b815291925073__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba91612c63918891908690600401615733565b60206040518083038186803b158015612c7b57600080fd5b505af4158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb39190615141565b9250612cbf84846157a0565b92508b15612d865760008054612cd58a8e615781565b612cdf42896157a0565b612ce99190615749565b612cf39190615761565b905073__$23c3f0c4d39c3898c699ac978f80cfe781$__63f3c85eba8e600954846040518463ffffffff1660e01b8152600401612d3293929190615733565b60206040518083038186803b158015612d4a57600080fd5b505af4158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d829190615141565b9250505b81612d918486615749565b612d9b9190615749565b6003549096506001600160a01b031663b839c0a53389612dbb8688615749565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606481018e9052608401600060405180830381600087803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b505050505050505b50505b60008051602061582c8339815191523388888b8686604051610cdf96959493929190615326565b60008111612e765760405162461bcd60e51b8152600401610a4090615694565b6000828152600f6020526040902080546001600160a01b03163314612ead5760405162461bcd60e51b8152600401610a4090615526565b336000908152600e60209081526040808320868452909152902054600110612ee75760405162461bcd60e51b8152600401610a40906154b4565b612eef6115eb565b6000612efe8260020154611dd4565b905080831115612f205760405162461bcd60e51b8152600401610a40906155ea565b60008481526010602052604090205480612f5c5742836003015410612f575760405162461bcd60e51b8152600401610a40906155b4565b612f6c565b612f6c3386838660030154614653565b6000612f7785611a89565b905060008460010154841115612f99576001850154612f9690856157a0565b90505b81856002016000828254612fad91906157a0565b925050819055508160076000828254612fc691906157a0565b909155505060018501548690612fdd908390615749565b612fe791906157a0565b60018601556008548690612ffc908390615749565b61300691906157a0565b60085560048054604051632a97f1e560e21b81526001600160a01b039091169163aa5fc7949161303a9133918b910161530d565b600060405180830381600087803b15801561305457600080fd5b505af1158015613068573d6000803e3d6000fd5b5050505060008051602061586c8339815191523360008860008b60008060405161309897969594939291906152d2565b60405180910390a150505050505050565b81806130c75760405162461bcd60e51b8152600401610a409061561f565b81806130e55760405162461bcd60e51b8152600401610a409061561f565b6000848152600f6020526040902080546001600160a01b0316331461311c5760405162461bcd60e51b8152600401610a4090615526565b60045460025461313b916001600160a01b03918216913391168761433b565b6131436115eb565b600061314e85611a89565b9050848260010160008282546131649190615749565b925050819055508082600201600082825461317f9190615749565b9250508190555084600860008282546131989190615749565b9250508190555080600760008282546131b19190615749565b9091555050600086815260106020908152604080832054338452600e83528184208a855290925282205490919060011080156131ed5750600082115b1561342057600354604051639ce5630560e01b81526004810184905260009182916001600160a01b0390911690639ce563059060240160606040518083038186803b15801561323b57600080fd5b505afa15801561324f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327391906151c8565b9250925050428211801561328a5750428660030154115b6132a65760405162461bcd60e51b8152600401610a40906156b8565b6000805460038801546132ba9042906157a0565b6132c49190615761565b9050806001141561330957670de0b6b3a7640000600954670de0b6b3a76400006132ee9190615749565b6132f8908c615781565b6133029190615761565b93506133a1565b60018111156133a1576009546040516379e42f5d60e11b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba9161334e918e918690600401615733565b60206040518083038186803b15801561336657600080fd5b505af415801561337a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339e9190615141565b93505b831561341c5760035460405163077f15b960e51b81526001600160a01b039091169063efe2b720906133db903390899089906004016152b1565b600060405180830381600087803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b5050505083826134199190615749565b93505b5050505b60008051602061582c833981519152338860008b8686604051610cdf96959493929190615326565b61345133613da9565b61346d5760405162461bcd60e51b8152600401610a409061546c565b6117ee600033611543565b61348133610d06565b80613490575061349033613da9565b6134ac5760405162461bcd60e51b8152600401610a40906153f8565b866134e75760405162461bcd60e51b815260206004820152600b60248201526a0f4cae4de40d8cadccee8d60ab1b6044820152606401610a40565b86851461352d5760405162461bcd60e51b81526020600482015260146024820152730eee4dedcce40c4c2d8c2dcc6ca40d8cadccee8d60631b6044820152606401610a40565b8683146135725760405162461bcd60e51b81526020600482015260136024820152720eee4dedcce40e0cae4d2dec840d8cadccee8d606b1b6044820152606401610a40565b8681146135b85760405162461bcd60e51b81526020600482015260146024820152730eee4dedcce40e8ded6cadc92c840d8cadccee8d60631b6044820152606401610a40565b60005b87811015613688576136758989838181106135e657634e487b7160e01b600052603260045260246000fd5b90506020020160208101906135fb9190614ebb565b88888481811061361b57634e487b7160e01b600052603260045260246000fd5b9050602002013587878581811061364257634e487b7160e01b600052603260045260246000fd5b9050602002013586868681811061366957634e487b7160e01b600052603260045260246000fd5b90506020020135614ab9565b5080613680816157fa565b9150506135bb565b505050505050505050565b600082806136b35760405162461bcd60e51b8152600401610a409061561f565b82806136d15760405162461bcd60e51b8152600401610a409061561f565b600954806136f15760405162461bcd60e51b8152600401610a409061561f565b6003546040516316045cb160e31b8152600091829173__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e5889161373c916001600160a01b03169042908c906004016152b1565b604080518083038186803b15801561375357600080fd5b505af4158015613767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378b919061517a565b6004546002549294509092506137b0916001600160a01b03908116913391168b61433b565b6137b9336140e6565b6137c161418c565b95506137cd33876141a7565b6137d56115eb565b6137e333878a8460006141ea565b506000806137f3338b8b87614460565b60008a815260106020526040908190208390555191935091507ff46503b8d1f95e046084d2a40bac278932cd394b6ef745d41548422b8182af28906138439033908d908d908d9088908890615326565b60405180910390a15050505050505092915050565b61386182610cf1565b61386b8133613ffc565b6112f283836142d4565b60008211806138845750600081115b6138a05760405162461bcd60e51b8152600401610a40906153d0565b6000838152600f6020526040902080546001600160a01b031633146138d75760405162461bcd60e51b8152600401610a4090615526565b336000908152600e602090815260408083208784529091529020546001106139115760405162461bcd60e51b8152600401610a40906154b4565b600084815260106020526040902054801561393b576139363386838560030154614653565b61395e565b4282600301541061395e5760405162461bcd60e51b8152600401610a40906155b4565b831561398357600454600254613983916001600160a01b03918216913391168761433b565b6000808415613a2b576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e588916139d2916001600160a01b03169042908a906004016152b1565b604080518083038186803b1580156139e957600080fd5b505af41580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a21919061517a565b9092509050613abb565b600360009054906101000a90046001600160a01b03166001600160a01b031663fd2dcecf6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a7957600080fd5b505afa158015613a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab19190615141565b9150836003015490505b613ac36115eb565b6000613ad28560020154611dd4565b90506000613adf88611a89565b905060008660010154831115613b01576001870154613afe90846157a0565b90505b81876002016000828254613b159190615749565b90915550506003870184905560018701548190613b33908b90615749565b613b3d9190615749565b60018801556008548190613b52908b90615749565b613b5c9190615749565b6008819055508160076000828254613b749190615749565b9091555060009050808b8a15613bb057613b9933613b928e89615749565b8d8b614460565b600083815260106020526040902082905590935091505b60008051602061586c833981519152338d60008e858888604051613bda97969594939291906152d2565b60405180910390a150505050505050505050505050565b600480546040805163688d653160e11b8152905160009384936001600160a01b03169263d11aca629281830192602092829003018186803b158015613c3557600080fd5b505afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d9190615141565b90506000612198600754611dd4565b613c8533613db5565b613ca15760405162461bcd60e51b8152600401610a409061564b565b8080613cbf5760405162461bcd60e51b8152600401610a409061561f565b81600a541415613cff5760405162461bcd60e51b815260206004820152600b60248201526a1cd85b59481c195c9a5bd960aa1b6044820152606401610a40565b50600a55565b613d0e33613db5565b613d2a5760405162461bcd60e51b8152600401610a409061564b565b6001600160a01b038116613d505760405162461bcd60e51b8152600401610a409061543a565b336001600160a01b0382161415613d795760405162461bcd60e51b8152600401610a4090615554565b613d9160008051602061588c833981519152826112d5565b6118fd60008051602061588c83398151915233611543565b60006109808183611d56565b600061098060008051602061588c83398151915283611d56565b6001600160a01b0382166000908152600e60209081526040808320848452909152902054600181118015613e1a57506001600160a01b0383166000908152600d602052604090205481105b15610980576001600160a01b0383166000908152600d6020526040902054613e44906001906157a0565b811015613f13576001600160a01b0383166000908152600d602052604081208054613e71906001906157a0565b81548110613e8f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600d6000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110613ee157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b0386168152600e8252604080822093825292909152208190555b6001600160a01b0383166000818152600e602090815260408083208684528252808320839055928252600d905220805480613f5e57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905592915050565b6001811115613fbb57506000908152600f6020526040812080546001600160a01b031916815560018101829055600281018290556003810182905560040155565b80600114156115bd57506000908152600f6020526040812080546001600160a01b031916815560018101829055600281018290556003810182905560040155565b6140068282611d56565b6115bd5761401e816001600160a01b03166014614b3e565b614029836020614b3e565b60405160200161403a929190615242565b60408051601f198184030181529082905262461bcd60e51b8252610a409160040161539d565b61406a8282611d56565b6115bd5760008281526011602090815260408083206001600160a01b03851684529091529020805460ff191660011790556140a23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381166000908152600d60205260409020546118fd576001600160a01b0381166000908152600d602090815260408220805460018101825590835290822001819055600b80549161413d836157fa565b90915550506001600160a01b03166000818152600e60209081526040808320600b80548552908352818420600190819055948452600d8352908320905481549485018255908352912090910155565b6000600b6000815461419d906157fa565b9182905550919050565b6001600160a01b039091166000908152600d602081815260408084208054600e845282862087875284529185208290559282526001810183559183529091200155565b600060065460011461420e5760405162461bcd60e51b8152600401610a40906156ea565b6000600681905561421e85611a89565b6040805160a0810182526001600160a01b038a8116825260208083018a8152838501868152606085018b8152608086018b815260008f8152600f909552968420955186546001600160a01b0319169516949094178555905160018501555160028401559051600383015591516004909101556008805492935087929091906142a7908490615749565b9250508190555080600760008282546142c09190615749565b909155505060016006559695505050505050565b6142de8282611d56565b156115bd5760008281526011602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161439f9190615226565b6000604051808303816000865af19150503d80600081146143dc576040519150601f19603f3d011682016040523d82523d6000602084013e6143e1565b606091505b509150915081801561440b57508051158061440b57508080602001905181019061440b91906150b6565b61444e5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610a40565b505050505050565b6115bd8282614060565b6000806006546001146144855760405162461bcd60e51b8152600401610a40906156ea565b60006006819055600954905473__$23c3f0c4d39c3898c699ac978f80cfe781$__9163f3c85eba918891906144ba888a615781565b6144c49190615761565b6040518463ffffffff1660e01b81526004016144e293929190615733565b60206040518083038186803b1580156144fa57600080fd5b505af415801561450e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145329190615141565b90506000811161457d5760405162461bcd60e51b81526020600482015260166024820152751e995c9bc818dbdb5c1bdd5b99195908185b5bdd5b9d60521b6044820152606401610a40565b60035460405163036e72c360e21b81526001600160a01b0390911690630db9cb0c906145b1908990859089906004016152b1565b602060405180830381600087803b1580156145cb57600080fd5b505af11580156145df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146039190615141565b9150600082116146435760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81cdd1bdcd25960aa1b6044820152606401610a40565b6001600655909590945092505050565b600354604051639ce5630560e01b8152600481018490526000916001600160a01b031690639ce563059060240160606040518083038186803b15801561469857600080fd5b505afa1580156146ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d091906151c8565b5091505042811080156146e257504282105b6146fe5760405162461bcd60e51b8152600401610a40906155b4565b60035460405163c0a37b3f60e01b81526001600160a01b039091169063c0a37b3f90614730908890879060040161530d565b600060405180830381600087803b15801561474a57600080fd5b505af115801561475e573d6000803e3d6000fd5b5050506000948552505060106020525050604081205550565b6006546001146147995760405162461bcd60e51b8152600401610a40906156ea565b60006006819055848152600f60205260409020821515806147ba5750600082115b806147c55750600084115b6148005760405162461bcd60e51b815260206004820152600c60248201526b7a65726f20416d6f756e747360a01b6044820152606401610a40565b60008160020154116148405760405162461bcd60e51b81526020600482015260096024820152687a65726f206c746f7360b81b6044820152606401610a40565b600061484f8260020154611dd4565b9050808311156148a05760405162461bcd60e51b815260206004820152601c60248201527b1cdd185ad948185b5bdd5b9d081a5cc81a5b9cdd59999a58da595b9d60221b6044820152606401610a40565b60008085156148b5576148b286611a89565b91505b84156148c7576148c485611a89565b90505b6003840187905560018401546000908411156148ef5760018501546148ec90856157a0565b90505b821561492857828560020160008282546149099190615749565b9250508190555082600760008282546149229190615749565b90915550505b8115614961578185600201600082825461494291906157a0565b92505081905550816007600082825461495b91906157a0565b90915550505b60008711806149705750600081115b8061497b5750600086115b156149d55785818887600101546149929190615749565b61499c9190615749565b6149a691906157a0565b6001860155600854869082906149bd908a90615749565b6149c79190615749565b6149d191906157a0565b6008555b5050600160065550505050505050565b8115614a0a57600454600254614a0a916001600160a01b03918216918791168561433b565b6000808215614aae576003546040516316045cb160e31b815273__$23c3f0c4d39c3898c699ac978f80cfe781$__9163b022e58891614a5a916001600160a01b03169060009088906004016152b1565b604080518083038186803b158015614a7157600080fd5b505af4158015614a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa9919061517a565b925090505b61444e858584614d26565b60008380614ad95760405162461bcd60e51b8152600401610a409061561f565b8380614af75760405162461bcd60e51b8152600401610a409061561f565b614b00876140e6565b614b0861418c565b9250614b1487846141a7565b614b228784888860006141ea565b5050506000818152601060205260409020919091559392505050565b60606000614b4d836002615781565b614b58906002615749565b6001600160401b03811115614b7d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015614ba7576020820181803683370190505b509050600360fc1b81600081518110614bd057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614c0d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000614c31846002615781565b614c3c906001615749565b90505b6001811115614cd0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614c7e57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110614ca257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93614cc9816157e3565b9050614c3f565b508315614d1f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a40565b9392505050565b600654600114614d485760405162461bcd60e51b8152600401610a40906156ea565b600060065581151580614d5b5750600081115b614da75760405162461bcd60e51b815260206004820181905260248201527f7a65726f20616d6f756e7420616e64205f696e6372656173655365636f6e64736044820152606401610a40565b6000838152600f602052604090208215614e30576000614dc684611a89565b905083826001016000828254614ddc9190615749565b9250508190555080826002016000828254614df79190615749565b925050819055508360086000828254614e109190615749565b925050819055508060076000828254614e299190615749565b9091555050505b8115614e505781816003016000828254614e4a9190615749565b90915550505b505060016006555050565b80356001600160a01b038116811461101957600080fd5b60008083601f840112614e83578182fd5b5081356001600160401b03811115614e99578182fd5b6020830191508360208260051b8501011115614eb457600080fd5b9250929050565b600060208284031215614ecc578081fd5b614d1f82614e5b565b600080600060608486031215614ee9578182fd5b614ef284614e5b565b9250614f0060208501614e5b565b9150614f0e60408501614e5b565b90509250925092565b60008060408385031215614f29578182fd5b614f3283614e5b565b946020939093013593505050565b60008060008060808587031215614f55578081fd5b614f5e85614e5b565b966020860135965060408601359560600135945092505050565b600080600080600060a08688031215614f8f578081fd5b614f9886614e5b565b97602087013597506040870135966060810135965060800135945092505050565b6000806000806000806000806080898b031215614fd4578283fd5b88356001600160401b0380821115614fea578485fd5b614ff68c838d01614e72565b909a50985060208b013591508082111561500e578485fd5b61501a8c838d01614e72565b909850965060408b0135915080821115615032578485fd5b61503e8c838d01614e72565b909650945060608b0135915080821115615056578384fd5b506150638b828c01614e72565b999c989b5096995094979396929594505050565b60008060208385031215615089578182fd5b82356001600160401b0381111561509e578283fd5b6150aa85828601614e72565b90969095509350505050565b6000602082840312156150c7578081fd5b81518015158114614d1f578182fd5b6000602082840312156150e7578081fd5b5035919050565b60008060408385031215615100578182fd5b8235915061511060208401614e5b565b90509250929050565b60006020828403121561512a578081fd5b81356001600160e01b031981168114614d1f578182fd5b600060208284031215615152578081fd5b5051919050565b6000806040838503121561516b578081fd5b50508035926020909101359150565b6000806040838503121561518c578182fd5b505080516020909101519092909150565b6000806000606084860312156151b1578081fd5b505081359360208301359350604090920135919050565b6000806000606084860312156151dc578081fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561520a578182fd5b5050823594602084013594506040840135936060013592509050565b600082516152388184602087016157b7565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516152748160178501602088016157b7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516152a58160288401602088016157b7565b01602801949350505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03979097168752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b6020808252825182820181905260009190848201906040850190845b8181101561539157835183529284019291840191600101615375565b50909695505050505050565b60208152600082518060208401526153bc8160408501602087016157b7565b601f01601f19169190910160400192915050565b6020808252600e908201526d185b1b081e995c9bc81a5b9c1d5d60921b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526023908201527f69742773206e6f7420666f722073696d706c65207374616b65206f7220656d706040820152623a3c9760e91b606082015260800190565b6020808252601590820152745374616b696e673a207a65726f206164647265737360581b604082015260600190565b60208082526014908201527331b0b63632b91034b9903737ba1039ba30b5b2b960611b604082015260600190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526016908201527539b2b73232b91034b9903737ba1030903137b73232b960511b604082015260600190565b6020808252601c908201527b1b1bd8dac8195b99081d1a5b59481a185cc81b9bdd081c185cdcd95960221b604082015260600190565b6020808252601b908201527a1c995b585a5b9959151bdcc81a5cc81a5b9cdd59999a58da595b9d602a1b604082015260600190565b60208082526012908201527114dd185ada5b99ce881e995c9bc81d5a5b9d60721b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6020808252600a90820152691e995c9bc81a5b9c1d5d60b21b604082015260600190565b6020808252601890820152771b1bd8dac8195b99081d1a5b59481a185cc81c185cdcd95960421b604082015260600190565b6020808252601890820152774c6f636b496420697320616c726561647920696e2075736560401b604082015260600190565b9182526001600160a01b0316602082015260400190565b9283526020830191909152604082015260600190565b6000821982111561575c5761575c615815565b500190565b60008261577c57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561579b5761579b615815565b500290565b6000828210156157b2576157b2615815565b500390565b60005b838110156157d25781810151838201526020016157ba565b838111156122905750506000910152565b6000816157f2576157f2615815565b506000190190565b600060001982141561580e5761580e615815565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4ed3cb428b71401f7eebc41b131a378b44ab9e704fc3fbd44909b1792ecb4ad052eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130b96969612f881e3e16987f7cc8e53854fbdcd75a94b1f85e911129b7fe279b5cfb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a26469706673582212202a17cb5e6bae9f2e3f1a6ae880c5d149acea2cff1c46805f7341386b81473a9d64736f6c63430008040033", + "linkReferences": { + "contracts/libraries/LibStaking.sol": { + "LibStaking": [ + { + "length": 20, + "start": 3915 + }, + { + "length": 20, + "start": 5855 + }, + { + "length": 20, + "start": 7977 + }, + { + "length": 20, + "start": 9540 + }, + { + "length": 20, + "start": 11059 + }, + { + "length": 20, + "start": 11358 + }, + { + "length": 20, + "start": 11549 + }, + { + "length": 20, + "start": 13130 + }, + { + "length": 20, + "start": 14126 + }, + { + "length": 20, + "start": 14788 + }, + { + "length": 20, + "start": 17593 + }, + { + "length": 20, + "start": 19019 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/libraries/LibStaking.sol": { + "LibStaking": [ + { + "length": 20, + "start": 3877 + }, + { + "length": 20, + "start": 5817 + }, + { + "length": 20, + "start": 7939 + }, + { + "length": 20, + "start": 9502 + }, + { + "length": 20, + "start": 11021 + }, + { + "length": 20, + "start": 11320 + }, + { + "length": 20, + "start": 11511 + }, + { + "length": 20, + "start": 13092 + }, + { + "length": 20, + "start": 14088 + }, + { + "length": 20, + "start": 14750 + }, + { + "length": 20, + "start": 17555 + }, + { + "length": 20, + "start": 18981 + } + ] + } + } +} diff --git a/contracts/data/tosv2/abi/StakingV2Proxy.json b/contracts/data/tosv2/abi/StakingV2Proxy.json new file mode 100644 index 0000000..e58bb0f --- /dev/null +++ b/contracts/data/tosv2/abi/StakingV2Proxy.json @@ -0,0 +1,999 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "StakingV2Proxy", + "sourceName": "contracts/StakingV2Proxy.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" + } + ], + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOS", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allStakings", + "outputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "LTOS", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "marketId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "basicBondPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "connectId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "length_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "index_", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tos", + "type": "address" + }, + { + "internalType": "uint256[3]", + "name": "_epoch", + "type": "uint256[3]" + }, + { + "internalType": "address", + "name": "_lockTOS", + "type": "address" + }, + { + "internalType": "address", + "name": "_treasury", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_basicBondPeriod", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lockTOS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lockTOSId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketIdCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rebasePerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + }, + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakingIdCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingPrincipal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "startEpochTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalLTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferPolicyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "treasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userStakingIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "userStakings", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405260016008553480156200001657600080fd5b50620000437f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1308062000082565b6200006f7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b13033620000cd565b6200007c600033620000cd565b62000181565b600082815260146020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620000d98282620000dd565b5050565b60008281526014602090815260408083206001600160a01b038516845290915290205460ff16620000d95760008281526014602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200013d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6120b880620001916000396000f3fe6080604052600436106102535760003560e01c806301ffc9a7146102a65780630e1e998f146102db5780631814a5b1146102ff5780632298524614610315578063248a9ca31461033757806324d7806c146103575780632f2ff15d1461037757806336568abe146103975780633659cfe6146103b7578063385030b4146103d757806341c04d5e146103ed5780634a5df50f1461040f5780634e6c44661461042f57806350d2a27614610467578063550d01a31461049d5780635720bf3a146104cd5780635746248f146104e35780635c60da1b146105035780635cc797d8146105185780635dc3c29a1461053857806361d027b3146105be57806363a8fd89146105de57806365cb3a83146105f85780636d1c789f1461060d578063704802751461062357806375829def1461064357806375b238fc1461066357806378ad1405146106975780637cb00d25146106ad5780637cd5f663146106cd5780638356ca4f146106ed5780638acf45fd1461070d5780638b8f4a651461073a5780638d4fdb401461075a578063900cf0cf1461077a57806391d14854146107b457806396f1557c146107d45780639a202d47146107f45780639e9e792f14610809578063a052e69e14610836578063a217fddf1461084c578063a7110dc314610861578063b84ef08114610899578063b911135f146108b9578063be72f2d3146108ef578063d547741f14610904578063df160b3f14610924578063ef6b95151461093a578063f1c8c9221461095a578063f47f2f1d1461097a578063f86464081461099a578063fad1c85c146109ba5761029c565b3661029c5760405162461bcd60e51b815260206004820152601460248201527331b0b73737ba103932b1b2b4bb329022ba3432b960611b60448201526064015b60405180910390fd5b6102a46109da565b005b3480156102b257600080fd5b506102c66102c1366004611d33565b610a83565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506102f1600d5481565b6040519081526020016102d2565b34801561030b57600080fd5b506102f160065481565b34801561032157600080fd5b506102f160008051602061206383398151915281565b34801561034357600080fd5b506102f1610352366004611cf9565b610aba565b34801561036357600080fd5b506102c6610372366004611aff565b610acf565b34801561038357600080fd5b506102a4610392366004611d11565b610ae9565b3480156103a357600080fd5b506102a46103b2366004611d11565b610b06565b3480156103c357600080fd5b506102a46103d2366004611aff565b610b84565b3480156103e357600080fd5b506102f1600c5481565b3480156103f957600080fd5b506102f160008051602061202383398151915281565b34801561041b57600080fd5b506102a461042a366004611c6a565b610c8a565b34801561043b57600080fd5b5060015461044f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d2565b34801561047357600080fd5b5061044f610482366004611d33565b6018602052600090815260409020546001600160a01b031681565b3480156104a957600080fd5b506102c66104b8366004611aff565b60176020526000908152604090205460ff1681565b3480156104d957600080fd5b506102f1600b5481565b3480156104ef57600080fd5b506102f16104fe366004611c06565b610f12565b34801561050f57600080fd5b5061044f610f43565b34801561052457600080fd5b506102a4610533366004611bd4565b610f54565b34801561054457600080fd5b5061058c610553366004611cf9565b601160205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102d2565b3480156105ca57600080fd5b5060025461044f906001600160a01b031681565b3480156105ea57600080fd5b506015546102c69060ff1681565b34801561060457600080fd5b506102a4610f83565b34801561061957600080fd5b506102f1600e5481565b34801561062f57600080fd5b506102a461063e366004611aff565b610fc2565b34801561064f57600080fd5b506102a461065e366004611aff565b611002565b34801561066f57600080fd5b506102f17fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b3480156106a357600080fd5b506102f160075481565b3480156106b957600080fd5b506102a46106c8366004611cdf565b6110b5565b3480156106d957600080fd5b506102a46106e8366004611c2f565b6110fc565b3480156106f957600080fd5b506102a4610708366004611aff565b61112c565b34801561071957600080fd5b506102f1610728366004611cf9565b60136020526000908152604090205481565b34801561074657600080fd5b5061044f610755366004611cf9565b6111b6565b34801561076657600080fd5b5061044f610775366004611d33565b6111c1565b34801561078657600080fd5b5060035460045460055461079992919083565b604080519384526020840192909252908201526060016102d2565b3480156107c057600080fd5b506102c66107cf366004611d11565b611299565b3480156107e057600080fd5b506102a46107ef366004611aff565b6112c4565b34801561080057600080fd5b506102a46112f4565b34801561081557600080fd5b506102f1610824366004611cf9565b60126020526000908152604090205481565b34801561084257600080fd5b506102f1600a5481565b34801561085857600080fd5b506102f1600081565b34801561086d57600080fd5b506102f161087c366004611c06565b601060209081526000928352604080842090915290825290205481565b3480156108a557600080fd5b506102a46108b4366004611aff565b611340565b3480156108c557600080fd5b5061044f6108d4366004611cf9565b6016602052600090815260409020546001600160a01b031681565b3480156108fb57600080fd5b506102a461137d565b34801561091057600080fd5b506102a461091f366004611d11565b6113ad565b34801561093057600080fd5b506102f160095481565b34801561094657600080fd5b506102a4610955366004611b19565b6113ca565b34801561096657600080fd5b506102a4610975366004611aff565b6115c8565b34801561098657600080fd5b506102c6610995366004611aff565b61166c565b3480156109a657600080fd5b5060005461044f906001600160a01b031681565b3480156109c657600080fd5b506102c66109d5366004611aff565b611678565b60006109f16000356001600160e01b0319166111c1565b90506001600160a01b03811615801590610a0e575060155460ff16155b610a5a5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610293565b3660008037600080366000845af43d6000803e808015610a79573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610ab457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526014602052604090206001015490565b6000610ab460008051602061202383398151915283611299565b610af282610aba565b610afc8133611692565b610a7e83836116f6565b6001600160a01b0381163314610b765760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610293565b610b80828261177c565b5050565b610b8d3361166c565b610ba95760405162461bcd60e51b815260040161029390611e71565b6001600160a01b038116610bef5760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b6044820152606401610293565b806001600160a01b0316610c0360006117e3565b6001600160a01b03161415610c465760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610293565b610c5381600060016117fe565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c933361166c565b610caf5760405162461bcd60e51b815260040161029390611e71565b81610cfc5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610293565b6001600160a01b03811660009081526017602052604090205460ff16610d5f5760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b6044820152606401610293565b60005b82811015610f0c57816001600160a01b031660186000868685818110610d9857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dad9190611d33565b6001600160e01b03191681526020810191909152604001600020546001600160a01b03161415610e1f5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610293565b8160186000868685818110610e4457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e599190611d33565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558216848483818110610eaf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ec49190611d33565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610f0481611fdb565b915050610d62565b50505050565b600f6020528160005260406000208181548110610f2e57600080fd5b90600052602060002001600091509150505481565b6000610f4f60006117e3565b905090565b610f5d3361166c565b610f795760405162461bcd60e51b815260040161029390611e71565b610b808282611887565b610f8c33611678565b610fa85760405162461bcd60e51b815260040161029390611f18565b610fc060008051602061206383398151915233610b06565b565b610fcb3361166c565b610fe75760405162461bcd60e51b815260040161029390611e71565b610fff60008051602061202383398151915282610ae9565b50565b61100b33610acf565b8061101a575061101a3361166c565b6110365760405162461bcd60e51b815260040161029390611dfd565b6001600160a01b03811661105c5760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b03821614156110855760405162461bcd60e51b815260040161029390611ee8565b61109d60008051602061202383398151915282610ae9565b610fff60008051602061202383398151915233610b06565b6110be33610acf565b806110cd57506110cd3361166c565b6110e95760405162461bcd60e51b815260040161029390611dfd565b6015805460ff1916911515919091179055565b6111053361166c565b6111215760405162461bcd60e51b815260040161029390611e71565b610a7e8383836117fe565b6111353361166c565b6111515760405162461bcd60e51b815260040161029390611e71565b6001600160a01b0381166111775760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b03821614156111a05760405162461bcd60e51b815260040161029390611ee8565b6111ab600082610ae9565b610fff600033610b06565b6000610ab4826117e3565b6001600160e01b031981166000908152601860205260408120546001600160a01b031661120f575050600080526016602052600080516020612043833981519152546001600160a01b031690565b6001600160e01b031982166000908152601860209081526040808320546001600160a01b03168352601790915290205460ff161561126d57506001600160e01b0319166000908152601860205260409020546001600160a01b031690565b5050600080526016602052600080516020612043833981519152546001600160a01b031690565b919050565b60009182526014602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6112cd3361166c565b6112e95760405162461bcd60e51b815260040161029390611e71565b610fff6000826118e6565b6112fd33610acf565b8061130c575061130c3361166c565b6113285760405162461bcd60e51b815260040161029390611dfd565b610fc060008051602061202383398151915233610b06565b6113493361166c565b6113655760405162461bcd60e51b815260040161029390611e71565b610fff60008051602061206383398151915282610ae9565b6113863361166c565b6113a25760405162461bcd60e51b815260040161029390611e71565b610fc0600033610b06565b6113b682610aba565b6113c08133611692565b610a7e838361177c565b6113d33361166c565b6113ef5760405162461bcd60e51b815260040161029390611e71565b846001600160a01b0381166114165760405162461bcd60e51b815260040161029390611eb9565b836001600160a01b03811661143d5760405162461bcd60e51b815260040161029390611eb9565b836001600160a01b0381166114645760405162461bcd60e51b815260040161029390611eb9565b83806114a75760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce881e995c9bc81d5a5b9d60721b6044820152606401610293565b8751158015906114ba5750604088015115155b6114f95760405162461bcd60e51b815260206004820152601060248201526f7a65726f2065706f63682076616c756560801b6044820152606401610293565b6000546001600160a01b0316156115495760405162461bcd60e51b815260206004820152601460248201527330b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610293565b5050600080546001600160a01b03199081166001600160a01b03998a161790915560018054821696891696909617909555505060028054909316919094161790556040805160608101825282518082526020808501519083018190529383015191909201819052600391909155600491909155600555600c5542600655565b6115d133611678565b6115ed5760405162461bcd60e51b815260040161029390611f18565b6001600160a01b0381166116135760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b038216141561163c5760405162461bcd60e51b815260040161029390611ee8565b61165460008051602061206383398151915282610ae9565b610fff60008051602061206383398151915233610b06565b6000610ab48183611299565b6000610ab460008051602061206383398151915283611299565b61169c8282611299565b610b80576116b4816001600160a01b031660146118f0565b6116bf8360206118f0565b6040516020016116d0929190611d5b565b60408051601f198184030181529082905262461bcd60e51b825261029391600401611dca565b6117008282611299565b610b805760008281526014602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117383390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117868282611299565b15610b805760008281526014602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601660205260409020546001600160a01b031690565b6001600160a01b0383163b6118535760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b6044820152606401610293565b801561188157600082815260166020526040902080546001600160a01b0319166001600160a01b0385161790555b610a7e83825b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610b8082826116f6565b606060006118ff836002611f79565b61190a906002611f61565b6001600160401b0381111561192f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611959576020820181803683370190505b509050600360fc1b8160008151811061198257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119bf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006119e3846002611f79565b6119ee906001611f61565b90505b6001811115611a82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a5457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a7b81611fc4565b90506119f1565b508315611ad15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610293565b9392505050565b80356001600160a01b038116811461129457600080fd5b8035801515811461129457600080fd5b600060208284031215611b10578081fd5b611ad182611ad8565b600080600080600060e08688031215611b30578081fd5b611b3986611ad8565b9450602087603f880112611b4b578182fd5b604051606081016001600160401b0381118282101715611b6d57611b6d61200c565b6040528088830160808a018b811115611b84578586fd5b855b6003811015611ba357823584529285019291850191600101611b86565b50839850611bb081611ad8565b97505050505050611bc360a08701611ad8565b9497939650919460c0013592915050565b60008060408385031215611be6578182fd5b611bef83611ad8565b9150611bfd60208401611aef565b90509250929050565b60008060408385031215611c18578182fd5b611c2183611ad8565b946020939093013593505050565b600080600060608486031215611c43578283fd5b611c4c84611ad8565b925060208401359150611c6160408501611aef565b90509250925092565b600080600060408486031215611c7e578283fd5b83356001600160401b0380821115611c94578485fd5b818601915086601f830112611ca7578485fd5b813581811115611cb5578586fd5b8760208260051b8501011115611cc9578586fd5b602092830195509350611c619186019050611ad8565b600060208284031215611cf0578081fd5b611ad182611aef565b600060208284031215611d0a578081fd5b5035919050565b60008060408385031215611d23578182fd5b82359150611bfd60208401611ad8565b600060208284031215611d44578081fd5b81356001600160e01b031981168114611ad1578182fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611d8d816017850160208801611f98565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611dbe816028840160208801611f98565b01602801949350505050565b6020815260008251806020840152611de9816040850160208701611f98565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b6020808252601590820152745374616b696e673a207a65726f206164647265737360581b604082015260600190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b60008219821115611f7457611f74611ff6565b500190565b6000816000190483118215151615611f9357611f93611ff6565b500290565b60005b83811015611fb3578181015183820152602001611f9b565b83811115610f0c5750506000910152565b600081611fd357611fd3611ff6565b506000190190565b6000600019821415611fef57611fef611ff6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1300263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153ddfb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220c1d05002dda655d17f93ead28cd0089fac9e19e42bf4fb3874339c3c5e7048bd64736f6c63430008040033", + "deployedBytecode": "0x6080604052600436106102535760003560e01c806301ffc9a7146102a65780630e1e998f146102db5780631814a5b1146102ff5780632298524614610315578063248a9ca31461033757806324d7806c146103575780632f2ff15d1461037757806336568abe146103975780633659cfe6146103b7578063385030b4146103d757806341c04d5e146103ed5780634a5df50f1461040f5780634e6c44661461042f57806350d2a27614610467578063550d01a31461049d5780635720bf3a146104cd5780635746248f146104e35780635c60da1b146105035780635cc797d8146105185780635dc3c29a1461053857806361d027b3146105be57806363a8fd89146105de57806365cb3a83146105f85780636d1c789f1461060d578063704802751461062357806375829def1461064357806375b238fc1461066357806378ad1405146106975780637cb00d25146106ad5780637cd5f663146106cd5780638356ca4f146106ed5780638acf45fd1461070d5780638b8f4a651461073a5780638d4fdb401461075a578063900cf0cf1461077a57806391d14854146107b457806396f1557c146107d45780639a202d47146107f45780639e9e792f14610809578063a052e69e14610836578063a217fddf1461084c578063a7110dc314610861578063b84ef08114610899578063b911135f146108b9578063be72f2d3146108ef578063d547741f14610904578063df160b3f14610924578063ef6b95151461093a578063f1c8c9221461095a578063f47f2f1d1461097a578063f86464081461099a578063fad1c85c146109ba5761029c565b3661029c5760405162461bcd60e51b815260206004820152601460248201527331b0b73737ba103932b1b2b4bb329022ba3432b960611b60448201526064015b60405180910390fd5b6102a46109da565b005b3480156102b257600080fd5b506102c66102c1366004611d33565b610a83565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506102f1600d5481565b6040519081526020016102d2565b34801561030b57600080fd5b506102f160065481565b34801561032157600080fd5b506102f160008051602061206383398151915281565b34801561034357600080fd5b506102f1610352366004611cf9565b610aba565b34801561036357600080fd5b506102c6610372366004611aff565b610acf565b34801561038357600080fd5b506102a4610392366004611d11565b610ae9565b3480156103a357600080fd5b506102a46103b2366004611d11565b610b06565b3480156103c357600080fd5b506102a46103d2366004611aff565b610b84565b3480156103e357600080fd5b506102f1600c5481565b3480156103f957600080fd5b506102f160008051602061202383398151915281565b34801561041b57600080fd5b506102a461042a366004611c6a565b610c8a565b34801561043b57600080fd5b5060015461044f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d2565b34801561047357600080fd5b5061044f610482366004611d33565b6018602052600090815260409020546001600160a01b031681565b3480156104a957600080fd5b506102c66104b8366004611aff565b60176020526000908152604090205460ff1681565b3480156104d957600080fd5b506102f1600b5481565b3480156104ef57600080fd5b506102f16104fe366004611c06565b610f12565b34801561050f57600080fd5b5061044f610f43565b34801561052457600080fd5b506102a4610533366004611bd4565b610f54565b34801561054457600080fd5b5061058c610553366004611cf9565b601160205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102d2565b3480156105ca57600080fd5b5060025461044f906001600160a01b031681565b3480156105ea57600080fd5b506015546102c69060ff1681565b34801561060457600080fd5b506102a4610f83565b34801561061957600080fd5b506102f1600e5481565b34801561062f57600080fd5b506102a461063e366004611aff565b610fc2565b34801561064f57600080fd5b506102a461065e366004611aff565b611002565b34801561066f57600080fd5b506102f17fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b3480156106a357600080fd5b506102f160075481565b3480156106b957600080fd5b506102a46106c8366004611cdf565b6110b5565b3480156106d957600080fd5b506102a46106e8366004611c2f565b6110fc565b3480156106f957600080fd5b506102a4610708366004611aff565b61112c565b34801561071957600080fd5b506102f1610728366004611cf9565b60136020526000908152604090205481565b34801561074657600080fd5b5061044f610755366004611cf9565b6111b6565b34801561076657600080fd5b5061044f610775366004611d33565b6111c1565b34801561078657600080fd5b5060035460045460055461079992919083565b604080519384526020840192909252908201526060016102d2565b3480156107c057600080fd5b506102c66107cf366004611d11565b611299565b3480156107e057600080fd5b506102a46107ef366004611aff565b6112c4565b34801561080057600080fd5b506102a46112f4565b34801561081557600080fd5b506102f1610824366004611cf9565b60126020526000908152604090205481565b34801561084257600080fd5b506102f1600a5481565b34801561085857600080fd5b506102f1600081565b34801561086d57600080fd5b506102f161087c366004611c06565b601060209081526000928352604080842090915290825290205481565b3480156108a557600080fd5b506102a46108b4366004611aff565b611340565b3480156108c557600080fd5b5061044f6108d4366004611cf9565b6016602052600090815260409020546001600160a01b031681565b3480156108fb57600080fd5b506102a461137d565b34801561091057600080fd5b506102a461091f366004611d11565b6113ad565b34801561093057600080fd5b506102f160095481565b34801561094657600080fd5b506102a4610955366004611b19565b6113ca565b34801561096657600080fd5b506102a4610975366004611aff565b6115c8565b34801561098657600080fd5b506102c6610995366004611aff565b61166c565b3480156109a657600080fd5b5060005461044f906001600160a01b031681565b3480156109c657600080fd5b506102c66109d5366004611aff565b611678565b60006109f16000356001600160e01b0319166111c1565b90506001600160a01b03811615801590610a0e575060155460ff16155b610a5a5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c73650000006044820152606401610293565b3660008037600080366000845af43d6000803e808015610a79573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610ab457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526014602052604090206001015490565b6000610ab460008051602061202383398151915283611299565b610af282610aba565b610afc8133611692565b610a7e83836116f6565b6001600160a01b0381163314610b765760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610293565b610b80828261177c565b5050565b610b8d3361166c565b610ba95760405162461bcd60e51b815260040161029390611e71565b6001600160a01b038116610bef5760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b6044820152606401610293565b806001600160a01b0316610c0360006117e3565b6001600160a01b03161415610c465760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610293565b610c5381600060016117fe565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610c933361166c565b610caf5760405162461bcd60e51b815260040161029390611e71565b81610cfc5760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610293565b6001600160a01b03811660009081526017602052604090205460ff16610d5f5760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b6044820152606401610293565b60005b82811015610f0c57816001600160a01b031660186000868685818110610d9857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dad9190611d33565b6001600160e01b03191681526020810191909152604001600020546001600160a01b03161415610e1f5760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610293565b8160186000868685818110610e4457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e599190611d33565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558216848483818110610eaf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ec49190611d33565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a380610f0481611fdb565b915050610d62565b50505050565b600f6020528160005260406000208181548110610f2e57600080fd5b90600052602060002001600091509150505481565b6000610f4f60006117e3565b905090565b610f5d3361166c565b610f795760405162461bcd60e51b815260040161029390611e71565b610b808282611887565b610f8c33611678565b610fa85760405162461bcd60e51b815260040161029390611f18565b610fc060008051602061206383398151915233610b06565b565b610fcb3361166c565b610fe75760405162461bcd60e51b815260040161029390611e71565b610fff60008051602061202383398151915282610ae9565b50565b61100b33610acf565b8061101a575061101a3361166c565b6110365760405162461bcd60e51b815260040161029390611dfd565b6001600160a01b03811661105c5760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b03821614156110855760405162461bcd60e51b815260040161029390611ee8565b61109d60008051602061202383398151915282610ae9565b610fff60008051602061202383398151915233610b06565b6110be33610acf565b806110cd57506110cd3361166c565b6110e95760405162461bcd60e51b815260040161029390611dfd565b6015805460ff1916911515919091179055565b6111053361166c565b6111215760405162461bcd60e51b815260040161029390611e71565b610a7e8383836117fe565b6111353361166c565b6111515760405162461bcd60e51b815260040161029390611e71565b6001600160a01b0381166111775760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b03821614156111a05760405162461bcd60e51b815260040161029390611ee8565b6111ab600082610ae9565b610fff600033610b06565b6000610ab4826117e3565b6001600160e01b031981166000908152601860205260408120546001600160a01b031661120f575050600080526016602052600080516020612043833981519152546001600160a01b031690565b6001600160e01b031982166000908152601860209081526040808320546001600160a01b03168352601790915290205460ff161561126d57506001600160e01b0319166000908152601860205260409020546001600160a01b031690565b5050600080526016602052600080516020612043833981519152546001600160a01b031690565b919050565b60009182526014602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6112cd3361166c565b6112e95760405162461bcd60e51b815260040161029390611e71565b610fff6000826118e6565b6112fd33610acf565b8061130c575061130c3361166c565b6113285760405162461bcd60e51b815260040161029390611dfd565b610fc060008051602061202383398151915233610b06565b6113493361166c565b6113655760405162461bcd60e51b815260040161029390611e71565b610fff60008051602061206383398151915282610ae9565b6113863361166c565b6113a25760405162461bcd60e51b815260040161029390611e71565b610fc0600033610b06565b6113b682610aba565b6113c08133611692565b610a7e838361177c565b6113d33361166c565b6113ef5760405162461bcd60e51b815260040161029390611e71565b846001600160a01b0381166114165760405162461bcd60e51b815260040161029390611eb9565b836001600160a01b03811661143d5760405162461bcd60e51b815260040161029390611eb9565b836001600160a01b0381166114645760405162461bcd60e51b815260040161029390611eb9565b83806114a75760405162461bcd60e51b815260206004820152601260248201527114dd185ada5b99ce881e995c9bc81d5a5b9d60721b6044820152606401610293565b8751158015906114ba5750604088015115155b6114f95760405162461bcd60e51b815260206004820152601060248201526f7a65726f2065706f63682076616c756560801b6044820152606401610293565b6000546001600160a01b0316156115495760405162461bcd60e51b815260206004820152601460248201527330b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610293565b5050600080546001600160a01b03199081166001600160a01b03998a161790915560018054821696891696909617909555505060028054909316919094161790556040805160608101825282518082526020808501519083018190529383015191909201819052600391909155600491909155600555600c5542600655565b6115d133611678565b6115ed5760405162461bcd60e51b815260040161029390611f18565b6001600160a01b0381166116135760405162461bcd60e51b815260040161029390611e3f565b336001600160a01b038216141561163c5760405162461bcd60e51b815260040161029390611ee8565b61165460008051602061206383398151915282610ae9565b610fff60008051602061206383398151915233610b06565b6000610ab48183611299565b6000610ab460008051602061206383398151915283611299565b61169c8282611299565b610b80576116b4816001600160a01b031660146118f0565b6116bf8360206118f0565b6040516020016116d0929190611d5b565b60408051601f198184030181529082905262461bcd60e51b825261029391600401611dca565b6117008282611299565b610b805760008281526014602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117383390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117868282611299565b15610b805760008281526014602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601660205260409020546001600160a01b031690565b6001600160a01b0383163b6118535760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b6044820152606401610293565b801561188157600082815260166020526040902080546001600160a01b0319166001600160a01b0385161790555b610a7e83825b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610b8082826116f6565b606060006118ff836002611f79565b61190a906002611f61565b6001600160401b0381111561192f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611959576020820181803683370190505b509050600360fc1b8160008151811061198257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119bf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006119e3846002611f79565b6119ee906001611f61565b90505b6001811115611a82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a5457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a7b81611fc4565b90506119f1565b508315611ad15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610293565b9392505050565b80356001600160a01b038116811461129457600080fd5b8035801515811461129457600080fd5b600060208284031215611b10578081fd5b611ad182611ad8565b600080600080600060e08688031215611b30578081fd5b611b3986611ad8565b9450602087603f880112611b4b578182fd5b604051606081016001600160401b0381118282101715611b6d57611b6d61200c565b6040528088830160808a018b811115611b84578586fd5b855b6003811015611ba357823584529285019291850191600101611b86565b50839850611bb081611ad8565b97505050505050611bc360a08701611ad8565b9497939650919460c0013592915050565b60008060408385031215611be6578182fd5b611bef83611ad8565b9150611bfd60208401611aef565b90509250929050565b60008060408385031215611c18578182fd5b611c2183611ad8565b946020939093013593505050565b600080600060608486031215611c43578283fd5b611c4c84611ad8565b925060208401359150611c6160408501611aef565b90509250925092565b600080600060408486031215611c7e578283fd5b83356001600160401b0380821115611c94578485fd5b818601915086601f830112611ca7578485fd5b813581811115611cb5578586fd5b8760208260051b8501011115611cc9578586fd5b602092830195509350611c619186019050611ad8565b600060208284031215611cf0578081fd5b611ad182611aef565b600060208284031215611d0a578081fd5b5035919050565b60008060408385031215611d23578182fd5b82359150611bfd60208401611ad8565b600060208284031215611d44578081fd5b81356001600160e01b031981168114611ad1578182fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611d8d816017850160208801611f98565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611dbe816028840160208801611f98565b01602801949350505050565b6020815260008251806020840152611de9816040850160208701611f98565b601f01601f19169190910160400192915050565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b6020808252601590820152745374616b696e673a207a65726f206164647265737360581b604082015260600190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b60008219821115611f7457611f74611ff6565b500190565b6000816000190483118215151615611f9357611f93611ff6565b500290565b60005b83811015611fb3578181015183820152602001611f9b565b83811115610f0c5750506000910152565b600081611fd357611fd3611ff6565b506000190190565b6000600019821415611fef57611fef611ff6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1300263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153ddfb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a2646970667358221220c1d05002dda655d17f93ead28cd0089fac9e19e42bf4fb3874339c3c5e7048bd64736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/abi/TOSValueCalculator.json b/contracts/data/tosv2/abi/TOSValueCalculator.json new file mode 100644 index 0000000..cf27420 --- /dev/null +++ b/contracts/data/tosv2/abi/TOSValueCalculator.json @@ -0,0 +1,735 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TOSValueCalculator", + "sourceName": "contracts/TOSValueCalculator.sol", + "abi": [ + { + "inputs": [], + "name": "UniswapV3Factory", + "outputs": [ + { + "internalType": "contract IIUniswapV3Factory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "computePoolAddress", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "convertAssetBalanceToWethOrTos", + "outputs": [ + { + "internalType": "bool", + "name": "existedWethPool", + "type": "bool" + }, + { + "internalType": "bool", + "name": "existedTosPool", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "priceWethOrTosPerAsset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "convertedAmmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ethTosPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "existPool", + "outputs": [ + { + "internalType": "bool", + "name": "isWeth", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isTos", + "type": "bool" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "npm", + "type": "address" + }, + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getAmounts", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "getAssetPricePerTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + } + ], + "name": "getDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "token0Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Decimals", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20address", + "type": "address" + }, + { + "internalType": "address", + "name": "_ethERC20Pool", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getETHERC20PoolERC20Price", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20address", + "type": "address" + }, + { + "internalType": "address", + "name": "_ethERC20Pool", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getETHERC20PoolETHPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getETHPricePerTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "getETHtoken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20Address", + "type": "address" + }, + { + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "getETHtoken0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "name": "getPriceToken0", + "outputs": [ + { + "internalType": "uint256", + "name": "priceX96", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "name": "getPriceToken1", + "outputs": [ + { + "internalType": "uint256", + "name": "priceX96", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "twapInterval", + "type": "uint32" + } + ], + "name": "getSqrtTwapX96", + "outputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20address", + "type": "address" + }, + { + "internalType": "address", + "name": "_tosERC20Pool", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getTOSERC20PoolERC20Price", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20address", + "type": "address" + }, + { + "internalType": "address", + "name": "_tosERC20Pool", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getTOSERC20PoolTOSPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "getTOSPricePerAsset", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTOSPricePerETH", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTOSWETHPoolETHPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "getTOStoken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20Addresss", + "type": "address" + }, + { + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "getTOStoken0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getTokenIdAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getTokenIdETHValue", + "outputs": [ + { + "internalType": "uint256", + "name": "ethValue", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getWETHPoolTOSPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tos", + "type": "address" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address", + "name": "_npm", + "type": "address" + }, + { + "internalType": "address", + "name": "_basicpool", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniswapV3factory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "npm_", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "tickCheck", + "outputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506130dc806100206000396000f3fe608060405234801561001057600080fd5b50600436106101755760003560e01c80630411b9491461017a5780630446db5d146101aa57806305613bc2146101cb57806306224570146101d35780630e601833146101e65780631459457a146102315780631556e835146102a057806316a34914146102b35780632840aa9b146102c6578063371b9763146102d95780633fc8cef3146102e157806347628f60146102f4578063486a586a1461030757806355ecf5a81461031a57806358e01df81461035757806368afaca81461036a578063740fcd2014610372578063767509051461039a578063809ca5cf146103ad57806380f21ae4146103c057806387cf9690146103d357806389f395de146103e65780638e549a45146103f9578063a84782ab14610401578063bb6f48ba14610414578063c2241d7d14610449578063d20aecad14610488578063eaf695721461049b578063f9e62d3a146104ae578063fab70f9d146104c1578063ff2862ef146104d4575b600080fd5b60005461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101bd6101b8366004612868565b6104e7565b6040519081526020016101a1565b6101bd61074b565b6101bd6101e1366004612868565b6107cd565b6101f96101f4366004612948565b610859565b60408051951515865293151560208601526001600160a01b03928316938501939093528116606084015216608082015260a0016101a1565b61029e61023f3660046128d8565b600180546001600160a01b03199081166001600160a01b03978816179091556002805482169587169590951790945560038054851693861693909317909255600480548416918516919091179055600080549092169216919091179055565b005b60045461018d906001600160a01b031681565b6101bd6102c1366004612868565b610a34565b6101bd6102d43660046129d2565b610b6a565b6101bd610d4d565b60025461018d906001600160a01b031681565b61018d610302366004612a2a565b610d6a565b6101bd610315366004612868565b610f8d565b61032d610328366004612948565b611104565b604080516001600160a01b03948516815292841660208401529216918101919091526060016101a1565b60035461018d906001600160a01b031681565b6101bd6111e4565b6103856103803660046128a0565b61128a565b604080519283526020830191909152016101a1565b6101bd6103a83660046129ff565b61137a565b6101bd6103bb366004612948565b611600565b6101bd6103ce366004612868565b6116d0565b6101bd6103e1366004612948565b6117fc565b60015461018d906001600160a01b031681565b6101bd611895565b6101bd61040f366004612948565b61192f565b6104276104223660046129ff565b61197b565b60408051941515855292151560208501529183015260608201526080016101a1565b61045c610457366004612bc0565b611af5565b60408051600294850b81529290930b60208301526001600160801b0316918101919091526060016101a1565b610385610496366004612992565b611b8e565b6103856104a93660046129ff565b611d31565b6101bd6104bc366004612948565b611d58565b6101bd6104cf3660046129d2565b611da4565b6101bd6104e2366004612868565b611f79565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190612b29565b5050505050915050600061064a846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190612884565b856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561061257600080fd5b505afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190612884565b5090506107438261065c83600a612e97565b866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561069557600080fd5b505afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190612884565b876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190612884565b612000565b949350505050565b6001546000908190610768906001600160a01b0316610bb8611da4565b905080600214801561077a5750806003145b1561078757600091505090565b806107a7576004546107a1906001600160a01b03166104e7565b91505090565b80600114156107c5576004546107a1906001600160a01b0316610f8d565b600091505090565b60015460009081908190819081906107f1906001600160a01b031687610bb8610859565b94509450945094505083801561081457506001546001600160a01b038381169116145b156108255761082283610f8d565b94505b83801561083f57506001546001600160a01b038281169116145b156108505761084d836104e7565b94505b50505050919050565b6000808080806001600160a01b038816158061087c57506001600160a01b038716155b1561089557506000935083925082915081905080610a29565b6108a0888888611104565b90505080935050826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190612884565b9150826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098b9190612884565b90506001600160a01b03821615806109aa57506001600160a01b038116155b156109c357506000935083925082915081905080610a29565b6002546001600160a01b03838116911614806109ec57506002546001600160a01b038281169116145b156109f657600194505b6001546001600160a01b0383811691161480610a1f57506001546001600160a01b038281169116145b15610a2957600193505b939792965093509350565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7057600080fd5b505afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190612884565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190612884565b6001549091506001600160a01b0383811691161415610b40575060009392505050565b6001546001600160a01b0382811691161415610b60575060019392505050565b5060039392505050565b60008054600254604051630b4c774160e11b815283926001600160a01b0390811692631698ee8292610ba6929091169088908890600401612cca565b60206040518083038186803b158015610bbe57600080fd5b505afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190612884565b90506001600160a01b038116610c10576002915050610d47565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4b57600080fd5b505afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c839190612884565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612884565b6002549091506001600160a01b0383811691161415610d1d5760009350505050610d47565b6002546001600160a01b0382811691161415610d3f5760019350505050610d47565b600393505050505b92915050565b6002546000908190610768906001600160a01b0316610bb8611da4565b600063ffffffff8216610df757826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610db057600080fd5b505afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612b29565b50949550610d47945050505050565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110610e3a57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610e7757634e487b7160e01b600052603260045260246000fd5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd90610ebb908590600401612cf2565b60006040518083038186803b158015610ed357600080fd5b505afa158015610ee7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f0f9190810190612a5f565b509050610f848460030b82600081518110610f3a57634e487b7160e01b600052603260045260246000fd5b602002602001015183600181518110610f6357634e487b7160e01b600052603260045260246000fd5b6020026020010151610f759190612f5e565b610f7f9190612e02565b612109565b95945050505050565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110019190612b29565b50505050509150506000611047846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b915061074390508261105a83600a612e97565b866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb9190612884565b876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561070657600080fd5b600083837fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b546001600160a01b038083169084161115611144578592508691505b6000546040516001600160a01b039091169061116890859085908990602001612cca565b60405160208183030381529060405280519060200120826040516020016111bf939291906001600160f81b0319815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b6040516020818303038152906040528051906020012060001c93505093509350939050565b60015460025460009182918291829182918291611210916001600160a01b039081169116610bb8610859565b945094509450945094508480156112245750835b801561123d57506002546001600160a01b038381169116145b1561124e5761124b83610f8d565b95505b8480156112585750835b801561127157506002546001600160a01b038281169116145b156112825761127f836104e7565b95505b505050505090565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190612bd8565b836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190612bd8565b915091509250929050565b60035460405163133f757160e31b8152600481018390526000918291829182916001600160a01b03909116906399fbab88906024016101806040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190612bf0565b505050505050509450945094505050600061141a87610a34565b90506000806114298989611d31565b91509150826000141561151357670de0b6b3a7640000611447610d4d565b6114519084612f3f565b61145b9190612e40565b965061148d6040518060400160405280600e81526020016d65746856616c756531203a20257360901b81525088612517565b670de0b6b3a7640000806114a2878c88611d58565b6114aa610d4d565b6114b49085612f3f565b6114be9190612f3f565b6114c89190612e40565b6114d29190612e40565b6114dc9088612dea565b965061150e6040518060400160405280600e81526020016d65746856616c756532203a20257360901b81525088612517565b6115f4565b82600114156115f457670de0b6b3a764000061152d610d4d565b6115379083612f3f565b6115419190612e40565b96506115736040518060400160405280600e81526020016d65746856616c756533203a20257360901b81525088612517565b670de0b6b3a764000080611588888c88611d58565b611590610d4d565b61159a9086612f3f565b6115a49190612f3f565b6115ae9190612e40565b6115b89190612e40565b6115c29088612dea565b96506115f46040518060400160405280600e81526020016d65746856616c756534203a20257360901b81525088612517565b50505050505092915050565b60008061160d8584610b6a565b905060008160021480156116215750816003145b15611631576000925050506116c9565b600254600090819061164c906001600160a01b03168961128a565b915091508082116116605760009250611675565b80821115611675576116728183612fd5565b92505b836116a35761168583600a612e97565b61168e88610f8d565b6116989190612e40565b9450505050506116c9565b83600114156116c0576116b783600a612e97565b61168e886104e7565b60009450505050505b9392505050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190612884565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561178157600080fd5b505afa158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190612884565b6002549091506001600160a01b03838116911614156117dc575060009392505050565b6002546001600160a01b0382811691161415610b60575060019392505050565b6000806118098584611da4565b9050600081600214801561181d5750816003145b1561182d576000925050506116c9565b6001546000908190611848906001600160a01b03168961128a565b9150915080821061185c5760009250611871565b808210156118715761186e8282612fd5565b92505b83611881576116b783600a612e97565b83600114156116c05761168583600a612e97565b600154600254600091829182918291829182916118c1916001600160a01b039081169116610bb8610859565b945094509450945094508480156118d55750835b80156118ee57506001546001600160a01b038381169116145b156118ff576118fc83610f8d565b95505b8480156119095750835b801561127157506001546001600160a01b03828116911614156112825761127f836104e7565b60008061193c8584610b6a565b905060008160021480156119505750816003145b15611960576000925050506116c9565b6002546000908190611848906001600160a01b03168961128a565b6000806000806000806000806119a98a600260009054906101000a90046001600160a01b0316610bb8610859565b9450945094505093508315611a375760019750896001600160a01b0316826001600160a01b031614156119e6576119df836104e7565b9550611a0c565b896001600160a01b0316816001600160a01b03161415611a0c57611a0983610f8d565b95505b8515611a3257670de0b6b3a7640000611a25878b612f3f565b611a2f9190612e40565b94505b611ae8565b600154600090819081908190611a5a908f906001600160a01b0316610bb8610859565b9450945094509450508315611ae35760019a508d6001600160a01b0316826001600160a01b03161415611a9757611a90836104e7565b9950611abd565b8d6001600160a01b0316816001600160a01b03161415611abd57611aba83610f8d565b99505b8915611ae357670de0b6b3a7640000611ad68b8f612f3f565b611ae09190612e40565b98505b505050505b5050505092959194509250565b60035460405163133f757160e31b815260048101839052600091829182916001600160a01b0316906399fbab88906024016101806040518083038186803b158015611b3f57600080fd5b505afa158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190612bf0565b50949e939d50919b50919950505050505050505050565b6000806000846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015611bcc57600080fd5b505afa158015611be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c049190612b29565b50505050505090506000806000886001600160a01b03166399fbab88886040518263ffffffff1660e01b8152600401611c3f91815260200190565b6101806040518083038186803b158015611c5857600080fd5b505afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190612bf0565b5050505097509750975050505050506000611caa84612109565b90506000611cb784612109565b9050611cc586838386612560565b60408051808201909152600b81526a030b6b7bab73a181012b9960ad1b60208201529199509750611cf69089612517565b611d236040518060400160405280600b81526020016a030b6b7bab73a189012b9960ad1b81525088612517565b505050505050935093915050565b6003546000908190611d4d906001600160a01b03168585611b8e565b909590945092505050565b600080611d658584611da4565b90506000816002148015611d795750816003145b15611d89576000925050506116c9565b600154600090819061164c906001600160a01b03168961128a565b60008054600154604051630b4c774160e11b815283926001600160a01b0390811692631698ee8292611de0929091169088908890600401612cca565b60206040518083038186803b158015611df857600080fd5b505afa158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e309190612884565b90506001600160a01b038116611e4a576002915050610d47565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8557600080fd5b505afa158015611e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612884565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611efa57600080fd5b505afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190612884565b6001549091506001600160a01b0383811691161415611f575760009350505050610d47565b6001546001600160a01b0382811691161415610d3f5760019350505050610d47565b6001546000908190819081908190611f9d906001600160a01b031687610bb8610859565b945094509450945050838015611fc45750856001600160a01b0316826001600160a01b0316145b15611fd557611fd283610f8d565b94505b83801561083f5750856001600160a01b0316816001600160a01b031614156108505761084d836104e7565b60008061200c86612109565b90506001600160801b036001600160a01b0382161161209257600061203a6001600160a01b03831680612f3f565b9050836001600160a01b0316856001600160a01b0316106120725761206d600160c01b876001600160801b0316836125fc565b61208a565b61208a81876001600160801b0316600160c01b6125fc565b925050612100565b60006120ac6001600160a01b03831680600160401b6125fc565b9050836001600160a01b0316856001600160a01b0316106120e4576120df600160801b876001600160801b0316836125fc565b6120fc565b6120fc81876001600160801b0316600160801b6125fc565b9250505b50949350505050565b60008060008360020b12612120578260020b61212d565b8260020b61212d90613021565b905061213c620d89e719613000565b60020b8111156121765760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661218a57600160801b61219c565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156121d15760806121cc826ffff97272373d413259a46990580e213a612f3f565b901c90505b60048216156121fb5760806121f6826ffff2e50f5f656932ef12357cf3c7fdcc612f3f565b901c90505b6008821615612225576080612220826fffe5caca7e10e4e61c3624eaa0941cd0612f3f565b901c90505b601082161561224f57608061224a826fffcb9843d60f6159c9db58835c926644612f3f565b901c90505b6020821615612279576080612274826fff973b41fa98c081472e6896dfb254c0612f3f565b901c90505b60408216156122a357608061229e826fff2ea16466c96a3843ec78b326b52861612f3f565b901c90505b60808216156122cd5760806122c8826ffe5dee046a99a2a811c461f1969c3053612f3f565b901c90505b6101008216156122f85760806122f3826ffcbe86c7900a88aedcffc83b479aa3a4612f3f565b901c90505b61020082161561232357608061231e826ff987a7253ac413176f2b074cf7815e54612f3f565b901c90505b61040082161561234e576080612349826ff3392b0822b70005940c7a398e4b70f3612f3f565b901c90505b610800821615612379576080612374826fe7159475a2c29b7443b29c7fa6e889d9612f3f565b901c90505b6110008216156123a457608061239f826fd097f3bdfd2022b8845ad8f792aa5825612f3f565b901c90505b6120008216156123cf5760806123ca826fa9f746462d870fdf8a65dc1f90e061e5612f3f565b901c90505b6140008216156123fa5760806123f5826f70d869a156d2a1b890bb3df62baf32f7612f3f565b901c90505b618000821615612425576080612420826f31be135f97d08fd981231505542fcfa6612f3f565b901c90505b6201000082161561245157608061244c826f09aa508b5b7a84e1c677de54f3e99bc9612f3f565b901c90505b6202000082161561247c576080612477826e5d6af8dedb81196699c329225ee604612f3f565b901c90505b620400008216156124a65760806124a1826d2216e584f5fa1ea926041bedfe98612f3f565b901c90505b620800008216156124ce5760806124c9826b048a170391f7dc42444e8fa2612f3f565b901c90505b60008460020b13156124e9576124e681600019612e40565b90505b6124f7600160201b82612fec565b15612503576001612506565b60005b6107439060ff16602083901c612dea565b61255c828260405160240161252d929190612d3c565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526126c5565b5050565b600080836001600160a01b0316856001600160a01b03161115612581579293925b846001600160a01b0316866001600160a01b0316116125ac576125a58585856126e6565b91506125f3565b836001600160a01b0316866001600160a01b031610156125e5576125d18685856126e6565b91506125de858785612750565b90506125f3565b6125f0858585612750565b90505b94509492505050565b600080821161260a57600080fd5b6000806000198587098587029250828110838203039150508060001415612636575082900490506116c9565b80841161264257600080fd5b60008486880980840393811190920391905060008561266381600019612fd5565b61266e906001612dea565b16958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050509392505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000826001600160a01b0316846001600160a01b03161115612706579192915b6001600160a01b038416612746600160601b600160e01b03606085901b1661272e8787612fad565b6001600160a01b0316866001600160a01b03166125fc565b6107439190612e40565b6000826001600160a01b0316846001600160a01b03161115612770579192915b6107436001600160801b0383166127878686612fad565b6001600160a01b0316600160601b6125fc565b80516127a58161307d565b919050565b600082601f8301126127ba578081fd5b815160206127cf6127ca83612dc7565b612d97565b80838252828201915082860187848660051b89010111156127ee578586fd5b855b858110156128155781516128038161307d565b845292840192908401906001016127f0565b5090979650505050505050565b8051600281900b81146127a557600080fd5b80516001600160801b03811681146127a557600080fd5b805161ffff811681146127a557600080fd5b80516127a581613095565b600060208284031215612879578081fd5b81356116c98161307d565b600060208284031215612895578081fd5b81516116c98161307d565b600080604083850312156128b2578081fd5b82356128bd8161307d565b915060208301356128cd8161307d565b809150509250929050565b600080600080600060a086880312156128ef578081fd5b85356128fa8161307d565b9450602086013561290a8161307d565b9350604086013561291a8161307d565b9250606086013561292a8161307d565b9150608086013561293a8161307d565b809150509295509295909350565b60008060006060848603121561295c578283fd5b83356129678161307d565b925060208401356129778161307d565b9150604084013561298781613095565b809150509250925092565b6000806000606084860312156129a6578283fd5b83356129b18161307d565b925060208401356129c18161307d565b929592945050506040919091013590565b600080604083850312156129e4578182fd5b82356129ef8161307d565b915060208301356128cd81613095565b60008060408385031215612a11578182fd5b8235612a1c8161307d565b946020939093013593505050565b60008060408385031215612a3c578182fd5b8235612a478161307d565b9150602083013563ffffffff811681146128cd578182fd5b60008060408385031215612a71578182fd5b82516001600160401b0380821115612a87578384fd5b818501915085601f830112612a9a578384fd5b81516020612aaa6127ca83612dc7565b8083825282820191508286018a848660051b8901011115612ac9578889fd5b8896505b84871015612af95780518060060b8114612ae557898afd5b835260019690960195918301918301612acd565b5091880151919650909350505080821115612b12578283fd5b50612b1f858286016127aa565b9150509250929050565b600080600080600080600060e0888a031215612b43578485fd5b8751612b4e8161307d565b9650612b5c60208901612822565b9550612b6a6040890161284b565b9450612b786060890161284b565b9350612b866080890161284b565b925060a088015160ff81168114612b9b578283fd5b60c08901519092508015158114612bb0578182fd5b8091505092959891949750929550565b600060208284031215612bd1578081fd5b5035919050565b600060208284031215612be9578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215612c12578586fd5b8c516001600160601b0381168114612c28578687fd5b9b50612c3660208e0161279a565b9a50612c4460408e0161279a565b9950612c5260608e0161279a565b9850612c6060808e0161285d565b9750612c6e60a08e01612822565b9650612c7c60c08e01612822565b9550612c8a60e08e01612834565b94506101008d015193506101208d01519250612ca96101408e01612834565b9150612cb86101608e01612834565b90509295989b509295989b509295989b565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015612d3057835163ffffffff1683529284019291840191600101612d0e565b50909695505050505050565b6040815260008351806040840152815b81811015612d695760208187018101516060868401015201612d4c565b81811115612d7a5782606083860101525b50602083019390935250601f91909101601f191601606001919050565b604051601f8201601f191681016001600160401b0381118282101715612dbf57612dbf613067565b604052919050565b60006001600160401b03821115612de057612de0613067565b5060051b60200190565b60008219821115612dfd57612dfd61303b565b500190565b60008160060b8360060b80612e1957612e19613051565b667fffffffffffff19821460001982141615612e3757612e3761303b565b90059392505050565b600082612e4f57612e4f613051565b500490565b600181815b80851115612e8f578160001904821115612e7557612e7561303b565b80851615612e8257918102915b93841c9390800290612e59565b509250929050565b60006116c98383600082612ead57506001610d47565b81612eba57506000610d47565b8160018114612ed05760028114612eda57612ef6565b6001915050610d47565b60ff841115612eeb57612eeb61303b565b50506001821b610d47565b5060208310610133831016604e8410600b8410161715612f19575081810a610d47565b612f238383612e54565b8060001904821115612f3757612f3761303b565b029392505050565b6000816000190483118215151615612f5957612f5961303b565b500290565b60008160060b8360060b82811281667fffffffffffff1901831281151615612f8857612f8861303b565b81667fffffffffffff018313811615612fa357612fa361303b565b5090039392505050565b60006001600160a01b0383811690831681811015612fcd57612fcd61303b565b039392505050565b600082821015612fe757612fe761303b565b500390565b600082612ffb57612ffb613051565b500690565b60008160020b627fffff1981141561301a5761301a61303b565b9003919050565b6000600160ff1b8214156130375761303761303b565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461309257600080fd5b50565b62ffffff8116811461309257600080fdfea26469706673582212207652418ebd7e1c363ac02f791894e9e3735b9bc4f2519a29dc05743488d6974764736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101755760003560e01c80630411b9491461017a5780630446db5d146101aa57806305613bc2146101cb57806306224570146101d35780630e601833146101e65780631459457a146102315780631556e835146102a057806316a34914146102b35780632840aa9b146102c6578063371b9763146102d95780633fc8cef3146102e157806347628f60146102f4578063486a586a1461030757806355ecf5a81461031a57806358e01df81461035757806368afaca81461036a578063740fcd2014610372578063767509051461039a578063809ca5cf146103ad57806380f21ae4146103c057806387cf9690146103d357806389f395de146103e65780638e549a45146103f9578063a84782ab14610401578063bb6f48ba14610414578063c2241d7d14610449578063d20aecad14610488578063eaf695721461049b578063f9e62d3a146104ae578063fab70f9d146104c1578063ff2862ef146104d4575b600080fd5b60005461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101bd6101b8366004612868565b6104e7565b6040519081526020016101a1565b6101bd61074b565b6101bd6101e1366004612868565b6107cd565b6101f96101f4366004612948565b610859565b60408051951515865293151560208601526001600160a01b03928316938501939093528116606084015216608082015260a0016101a1565b61029e61023f3660046128d8565b600180546001600160a01b03199081166001600160a01b03978816179091556002805482169587169590951790945560038054851693861693909317909255600480548416918516919091179055600080549092169216919091179055565b005b60045461018d906001600160a01b031681565b6101bd6102c1366004612868565b610a34565b6101bd6102d43660046129d2565b610b6a565b6101bd610d4d565b60025461018d906001600160a01b031681565b61018d610302366004612a2a565b610d6a565b6101bd610315366004612868565b610f8d565b61032d610328366004612948565b611104565b604080516001600160a01b03948516815292841660208401529216918101919091526060016101a1565b60035461018d906001600160a01b031681565b6101bd6111e4565b6103856103803660046128a0565b61128a565b604080519283526020830191909152016101a1565b6101bd6103a83660046129ff565b61137a565b6101bd6103bb366004612948565b611600565b6101bd6103ce366004612868565b6116d0565b6101bd6103e1366004612948565b6117fc565b60015461018d906001600160a01b031681565b6101bd611895565b6101bd61040f366004612948565b61192f565b6104276104223660046129ff565b61197b565b60408051941515855292151560208501529183015260608201526080016101a1565b61045c610457366004612bc0565b611af5565b60408051600294850b81529290930b60208301526001600160801b0316918101919091526060016101a1565b610385610496366004612992565b611b8e565b6103856104a93660046129ff565b611d31565b6101bd6104bc366004612948565b611d58565b6101bd6104cf3660046129d2565b611da4565b6101bd6104e2366004612868565b611f79565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190612b29565b5050505050915050600061064a846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d99190612884565b856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561061257600080fd5b505afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190612884565b5090506107438261065c83600a612e97565b866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561069557600080fd5b505afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190612884565b876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190612884565b612000565b949350505050565b6001546000908190610768906001600160a01b0316610bb8611da4565b905080600214801561077a5750806003145b1561078757600091505090565b806107a7576004546107a1906001600160a01b03166104e7565b91505090565b80600114156107c5576004546107a1906001600160a01b0316610f8d565b600091505090565b60015460009081908190819081906107f1906001600160a01b031687610bb8610859565b94509450945094505083801561081457506001546001600160a01b038381169116145b156108255761082283610f8d565b94505b83801561083f57506001546001600160a01b038281169116145b156108505761084d836104e7565b94505b50505050919050565b6000808080806001600160a01b038816158061087c57506001600160a01b038716155b1561089557506000935083925082915081905080610a29565b6108a0888888611104565b90505080935050826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190612884565b9150826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098b9190612884565b90506001600160a01b03821615806109aa57506001600160a01b038116155b156109c357506000935083925082915081905080610a29565b6002546001600160a01b03838116911614806109ec57506002546001600160a01b038281169116145b156109f657600194505b6001546001600160a01b0383811691161480610a1f57506001546001600160a01b038281169116145b15610a2957600193505b939792965093509350565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7057600080fd5b505afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190612884565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190612884565b6001549091506001600160a01b0383811691161415610b40575060009392505050565b6001546001600160a01b0382811691161415610b60575060019392505050565b5060039392505050565b60008054600254604051630b4c774160e11b815283926001600160a01b0390811692631698ee8292610ba6929091169088908890600401612cca565b60206040518083038186803b158015610bbe57600080fd5b505afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190612884565b90506001600160a01b038116610c10576002915050610d47565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4b57600080fd5b505afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c839190612884565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612884565b6002549091506001600160a01b0383811691161415610d1d5760009350505050610d47565b6002546001600160a01b0382811691161415610d3f5760019350505050610d47565b600393505050505b92915050565b6002546000908190610768906001600160a01b0316610bb8611da4565b600063ffffffff8216610df757826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610db057600080fd5b505afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612b29565b50949550610d47945050505050565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110610e3a57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110610e7757634e487b7160e01b600052603260045260246000fd5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd90610ebb908590600401612cf2565b60006040518083038186803b158015610ed357600080fd5b505afa158015610ee7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f0f9190810190612a5f565b509050610f848460030b82600081518110610f3a57634e487b7160e01b600052603260045260246000fd5b602002602001015183600181518110610f6357634e487b7160e01b600052603260045260246000fd5b6020026020010151610f759190612f5e565b610f7f9190612e02565b612109565b95945050505050565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110019190612b29565b50505050509150506000611047846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a157600080fd5b915061074390508261105a83600a612e97565b866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb9190612884565b876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561070657600080fd5b600083837fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b546001600160a01b038083169084161115611144578592508691505b6000546040516001600160a01b039091169061116890859085908990602001612cca565b60405160208183030381529060405280519060200120826040516020016111bf939291906001600160f81b0319815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b6040516020818303038152906040528051906020012060001c93505093509350939050565b60015460025460009182918291829182918291611210916001600160a01b039081169116610bb8610859565b945094509450945094508480156112245750835b801561123d57506002546001600160a01b038381169116145b1561124e5761124b83610f8d565b95505b8480156112585750835b801561127157506002546001600160a01b038281169116145b156112825761127f836104e7565b95505b505050505090565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190612bd8565b836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190612bd8565b915091509250929050565b60035460405163133f757160e31b8152600481018390526000918291829182916001600160a01b03909116906399fbab88906024016101806040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190612bf0565b505050505050509450945094505050600061141a87610a34565b90506000806114298989611d31565b91509150826000141561151357670de0b6b3a7640000611447610d4d565b6114519084612f3f565b61145b9190612e40565b965061148d6040518060400160405280600e81526020016d65746856616c756531203a20257360901b81525088612517565b670de0b6b3a7640000806114a2878c88611d58565b6114aa610d4d565b6114b49085612f3f565b6114be9190612f3f565b6114c89190612e40565b6114d29190612e40565b6114dc9088612dea565b965061150e6040518060400160405280600e81526020016d65746856616c756532203a20257360901b81525088612517565b6115f4565b82600114156115f457670de0b6b3a764000061152d610d4d565b6115379083612f3f565b6115419190612e40565b96506115736040518060400160405280600e81526020016d65746856616c756533203a20257360901b81525088612517565b670de0b6b3a764000080611588888c88611d58565b611590610d4d565b61159a9086612f3f565b6115a49190612f3f565b6115ae9190612e40565b6115b89190612e40565b6115c29088612dea565b96506115f46040518060400160405280600e81526020016d65746856616c756534203a20257360901b81525088612517565b50505050505092915050565b60008061160d8584610b6a565b905060008160021480156116215750816003145b15611631576000925050506116c9565b600254600090819061164c906001600160a01b03168961128a565b915091508082116116605760009250611675565b80821115611675576116728183612fd5565b92505b836116a35761168583600a612e97565b61168e88610f8d565b6116989190612e40565b9450505050506116c9565b83600114156116c0576116b783600a612e97565b61168e886104e7565b60009450505050505b9392505050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190612884565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561178157600080fd5b505afa158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190612884565b6002549091506001600160a01b03838116911614156117dc575060009392505050565b6002546001600160a01b0382811691161415610b60575060019392505050565b6000806118098584611da4565b9050600081600214801561181d5750816003145b1561182d576000925050506116c9565b6001546000908190611848906001600160a01b03168961128a565b9150915080821061185c5760009250611871565b808210156118715761186e8282612fd5565b92505b83611881576116b783600a612e97565b83600114156116c05761168583600a612e97565b600154600254600091829182918291829182916118c1916001600160a01b039081169116610bb8610859565b945094509450945094508480156118d55750835b80156118ee57506001546001600160a01b038381169116145b156118ff576118fc83610f8d565b95505b8480156119095750835b801561127157506001546001600160a01b03828116911614156112825761127f836104e7565b60008061193c8584610b6a565b905060008160021480156119505750816003145b15611960576000925050506116c9565b6002546000908190611848906001600160a01b03168961128a565b6000806000806000806000806119a98a600260009054906101000a90046001600160a01b0316610bb8610859565b9450945094505093508315611a375760019750896001600160a01b0316826001600160a01b031614156119e6576119df836104e7565b9550611a0c565b896001600160a01b0316816001600160a01b03161415611a0c57611a0983610f8d565b95505b8515611a3257670de0b6b3a7640000611a25878b612f3f565b611a2f9190612e40565b94505b611ae8565b600154600090819081908190611a5a908f906001600160a01b0316610bb8610859565b9450945094509450508315611ae35760019a508d6001600160a01b0316826001600160a01b03161415611a9757611a90836104e7565b9950611abd565b8d6001600160a01b0316816001600160a01b03161415611abd57611aba83610f8d565b99505b8915611ae357670de0b6b3a7640000611ad68b8f612f3f565b611ae09190612e40565b98505b505050505b5050505092959194509250565b60035460405163133f757160e31b815260048101839052600091829182916001600160a01b0316906399fbab88906024016101806040518083038186803b158015611b3f57600080fd5b505afa158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190612bf0565b50949e939d50919b50919950505050505050505050565b6000806000846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015611bcc57600080fd5b505afa158015611be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c049190612b29565b50505050505090506000806000886001600160a01b03166399fbab88886040518263ffffffff1660e01b8152600401611c3f91815260200190565b6101806040518083038186803b158015611c5857600080fd5b505afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c909190612bf0565b5050505097509750975050505050506000611caa84612109565b90506000611cb784612109565b9050611cc586838386612560565b60408051808201909152600b81526a030b6b7bab73a181012b9960ad1b60208201529199509750611cf69089612517565b611d236040518060400160405280600b81526020016a030b6b7bab73a189012b9960ad1b81525088612517565b505050505050935093915050565b6003546000908190611d4d906001600160a01b03168585611b8e565b909590945092505050565b600080611d658584611da4565b90506000816002148015611d795750816003145b15611d89576000925050506116c9565b600154600090819061164c906001600160a01b03168961128a565b60008054600154604051630b4c774160e11b815283926001600160a01b0390811692631698ee8292611de0929091169088908890600401612cca565b60206040518083038186803b158015611df857600080fd5b505afa158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e309190612884565b90506001600160a01b038116611e4a576002915050610d47565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8557600080fd5b505afa158015611e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebd9190612884565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611efa57600080fd5b505afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190612884565b6001549091506001600160a01b0383811691161415611f575760009350505050610d47565b6001546001600160a01b0382811691161415610d3f5760019350505050610d47565b6001546000908190819081908190611f9d906001600160a01b031687610bb8610859565b945094509450945050838015611fc45750856001600160a01b0316826001600160a01b0316145b15611fd557611fd283610f8d565b94505b83801561083f5750856001600160a01b0316816001600160a01b031614156108505761084d836104e7565b60008061200c86612109565b90506001600160801b036001600160a01b0382161161209257600061203a6001600160a01b03831680612f3f565b9050836001600160a01b0316856001600160a01b0316106120725761206d600160c01b876001600160801b0316836125fc565b61208a565b61208a81876001600160801b0316600160c01b6125fc565b925050612100565b60006120ac6001600160a01b03831680600160401b6125fc565b9050836001600160a01b0316856001600160a01b0316106120e4576120df600160801b876001600160801b0316836125fc565b6120fc565b6120fc81876001600160801b0316600160801b6125fc565b9250505b50949350505050565b60008060008360020b12612120578260020b61212d565b8260020b61212d90613021565b905061213c620d89e719613000565b60020b8111156121765760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661218a57600160801b61219c565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156121d15760806121cc826ffff97272373d413259a46990580e213a612f3f565b901c90505b60048216156121fb5760806121f6826ffff2e50f5f656932ef12357cf3c7fdcc612f3f565b901c90505b6008821615612225576080612220826fffe5caca7e10e4e61c3624eaa0941cd0612f3f565b901c90505b601082161561224f57608061224a826fffcb9843d60f6159c9db58835c926644612f3f565b901c90505b6020821615612279576080612274826fff973b41fa98c081472e6896dfb254c0612f3f565b901c90505b60408216156122a357608061229e826fff2ea16466c96a3843ec78b326b52861612f3f565b901c90505b60808216156122cd5760806122c8826ffe5dee046a99a2a811c461f1969c3053612f3f565b901c90505b6101008216156122f85760806122f3826ffcbe86c7900a88aedcffc83b479aa3a4612f3f565b901c90505b61020082161561232357608061231e826ff987a7253ac413176f2b074cf7815e54612f3f565b901c90505b61040082161561234e576080612349826ff3392b0822b70005940c7a398e4b70f3612f3f565b901c90505b610800821615612379576080612374826fe7159475a2c29b7443b29c7fa6e889d9612f3f565b901c90505b6110008216156123a457608061239f826fd097f3bdfd2022b8845ad8f792aa5825612f3f565b901c90505b6120008216156123cf5760806123ca826fa9f746462d870fdf8a65dc1f90e061e5612f3f565b901c90505b6140008216156123fa5760806123f5826f70d869a156d2a1b890bb3df62baf32f7612f3f565b901c90505b618000821615612425576080612420826f31be135f97d08fd981231505542fcfa6612f3f565b901c90505b6201000082161561245157608061244c826f09aa508b5b7a84e1c677de54f3e99bc9612f3f565b901c90505b6202000082161561247c576080612477826e5d6af8dedb81196699c329225ee604612f3f565b901c90505b620400008216156124a65760806124a1826d2216e584f5fa1ea926041bedfe98612f3f565b901c90505b620800008216156124ce5760806124c9826b048a170391f7dc42444e8fa2612f3f565b901c90505b60008460020b13156124e9576124e681600019612e40565b90505b6124f7600160201b82612fec565b15612503576001612506565b60005b6107439060ff16602083901c612dea565b61255c828260405160240161252d929190612d3c565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526126c5565b5050565b600080836001600160a01b0316856001600160a01b03161115612581579293925b846001600160a01b0316866001600160a01b0316116125ac576125a58585856126e6565b91506125f3565b836001600160a01b0316866001600160a01b031610156125e5576125d18685856126e6565b91506125de858785612750565b90506125f3565b6125f0858585612750565b90505b94509492505050565b600080821161260a57600080fd5b6000806000198587098587029250828110838203039150508060001415612636575082900490506116c9565b80841161264257600080fd5b60008486880980840393811190920391905060008561266381600019612fd5565b61266e906001612dea565b16958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050509392505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000826001600160a01b0316846001600160a01b03161115612706579192915b6001600160a01b038416612746600160601b600160e01b03606085901b1661272e8787612fad565b6001600160a01b0316866001600160a01b03166125fc565b6107439190612e40565b6000826001600160a01b0316846001600160a01b03161115612770579192915b6107436001600160801b0383166127878686612fad565b6001600160a01b0316600160601b6125fc565b80516127a58161307d565b919050565b600082601f8301126127ba578081fd5b815160206127cf6127ca83612dc7565b612d97565b80838252828201915082860187848660051b89010111156127ee578586fd5b855b858110156128155781516128038161307d565b845292840192908401906001016127f0565b5090979650505050505050565b8051600281900b81146127a557600080fd5b80516001600160801b03811681146127a557600080fd5b805161ffff811681146127a557600080fd5b80516127a581613095565b600060208284031215612879578081fd5b81356116c98161307d565b600060208284031215612895578081fd5b81516116c98161307d565b600080604083850312156128b2578081fd5b82356128bd8161307d565b915060208301356128cd8161307d565b809150509250929050565b600080600080600060a086880312156128ef578081fd5b85356128fa8161307d565b9450602086013561290a8161307d565b9350604086013561291a8161307d565b9250606086013561292a8161307d565b9150608086013561293a8161307d565b809150509295509295909350565b60008060006060848603121561295c578283fd5b83356129678161307d565b925060208401356129778161307d565b9150604084013561298781613095565b809150509250925092565b6000806000606084860312156129a6578283fd5b83356129b18161307d565b925060208401356129c18161307d565b929592945050506040919091013590565b600080604083850312156129e4578182fd5b82356129ef8161307d565b915060208301356128cd81613095565b60008060408385031215612a11578182fd5b8235612a1c8161307d565b946020939093013593505050565b60008060408385031215612a3c578182fd5b8235612a478161307d565b9150602083013563ffffffff811681146128cd578182fd5b60008060408385031215612a71578182fd5b82516001600160401b0380821115612a87578384fd5b818501915085601f830112612a9a578384fd5b81516020612aaa6127ca83612dc7565b8083825282820191508286018a848660051b8901011115612ac9578889fd5b8896505b84871015612af95780518060060b8114612ae557898afd5b835260019690960195918301918301612acd565b5091880151919650909350505080821115612b12578283fd5b50612b1f858286016127aa565b9150509250929050565b600080600080600080600060e0888a031215612b43578485fd5b8751612b4e8161307d565b9650612b5c60208901612822565b9550612b6a6040890161284b565b9450612b786060890161284b565b9350612b866080890161284b565b925060a088015160ff81168114612b9b578283fd5b60c08901519092508015158114612bb0578182fd5b8091505092959891949750929550565b600060208284031215612bd1578081fd5b5035919050565b600060208284031215612be9578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215612c12578586fd5b8c516001600160601b0381168114612c28578687fd5b9b50612c3660208e0161279a565b9a50612c4460408e0161279a565b9950612c5260608e0161279a565b9850612c6060808e0161285d565b9750612c6e60a08e01612822565b9650612c7c60c08e01612822565b9550612c8a60e08e01612834565b94506101008d015193506101208d01519250612ca96101408e01612834565b9150612cb86101608e01612834565b90509295989b509295989b509295989b565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015612d3057835163ffffffff1683529284019291840191600101612d0e565b50909695505050505050565b6040815260008351806040840152815b81811015612d695760208187018101516060868401015201612d4c565b81811115612d7a5782606083860101525b50602083019390935250601f91909101601f191601606001919050565b604051601f8201601f191681016001600160401b0381118282101715612dbf57612dbf613067565b604052919050565b60006001600160401b03821115612de057612de0613067565b5060051b60200190565b60008219821115612dfd57612dfd61303b565b500190565b60008160060b8360060b80612e1957612e19613051565b667fffffffffffff19821460001982141615612e3757612e3761303b565b90059392505050565b600082612e4f57612e4f613051565b500490565b600181815b80851115612e8f578160001904821115612e7557612e7561303b565b80851615612e8257918102915b93841c9390800290612e59565b509250929050565b60006116c98383600082612ead57506001610d47565b81612eba57506000610d47565b8160018114612ed05760028114612eda57612ef6565b6001915050610d47565b60ff841115612eeb57612eeb61303b565b50506001821b610d47565b5060208310610133831016604e8410600b8410161715612f19575081810a610d47565b612f238383612e54565b8060001904821115612f3757612f3761303b565b029392505050565b6000816000190483118215151615612f5957612f5961303b565b500290565b60008160060b8360060b82811281667fffffffffffff1901831281151615612f8857612f8861303b565b81667fffffffffffff018313811615612fa357612fa361303b565b5090039392505050565b60006001600160a01b0383811690831681811015612fcd57612fcd61303b565b039392505050565b600082821015612fe757612fe761303b565b500390565b600082612ffb57612ffb613051565b500690565b60008160020b627fffff1981141561301a5761301a61303b565b9003919050565b6000600160ff1b8214156130375761303761303b565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461309257600080fd5b50565b62ffffff8116811461309257600080fdfea26469706673582212207652418ebd7e1c363ac02f791894e9e3735b9bc4f2519a29dc05743488d6974764736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/abi/Treasury.json b/contracts/data/tosv2/abi/Treasury.json new file mode 100644 index 0000000..5bef188 --- /dev/null +++ b/contracts/data/tosv2/abi/Treasury.json @@ -0,0 +1,1444 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Treasury", + "sourceName": "contracts/Treasury.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "AddedBackingList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_tosPooladdress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint24", + "name": "_fee", + "type": "uint24" + } + ], + "name": "AddedBondAsset", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "DeletedBackingList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "status", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Permissioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "RequestedTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "_distribute", + "type": "bool" + } + ], + "name": "RquestedMint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addr", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "_percents", + "type": "uint256[]" + } + ], + "name": "SetFoundationDistributeInfo", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "mrRate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "SetMintRate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_mintRateDenominator", + "type": "uint256" + } + ], + "name": "SetMintRateDenominator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_poolAddressTOSETH", + "type": "address" + } + ], + "name": "SetPoolAddressTOSETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_uniswapFactory", + "type": "address" + } + ], + "name": "SetUniswapV3Factory", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BURNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "addBackingList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "addBondAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allBacking", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "allMinting", + "outputs": [ + { + "internalType": "address[]", + "name": "mintAddress", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "mintPercents", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "backingRateETHPerTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "backingReserve", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "backingReserveETH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "backingReserveTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "backings", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "calculator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "checkTosSolvency", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_checkMintRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "checkTosSolvencyAfterTOSMint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "deleteBackingList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_status", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_toDisable", + "type": "address" + } + ], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_status", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "enable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableStaking", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "foundationAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "foundationDistribute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "foundationTotalPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getETHPricePerTOS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMintRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTOSPricePerETH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "role", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasPermission", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "enum LibTreasury.STATUS", + "name": "_status", + "type": "uint8" + } + ], + "name": "indexInRegistry", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isBonder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isStaker", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lpTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintRateDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mintings", + "outputs": [ + { + "internalType": "address", + "name": "mintAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintPercents", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibTreasury.STATUS", + "name": "", + "type": "uint8" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "permissions", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolAddressTOSETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibTreasury.STATUS", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "registry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_mintAmount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_distribute", + "type": "bool" + } + ], + "name": "requestMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "requestTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_address", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_percents", + "type": "uint256[]" + } + ], + "name": "setFoundationDistributeInfo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_mrRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "setMR", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_mintRateDenominator", + "type": "uint256" + } + ], + "name": "setMintRateDenominator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddressTOSETH", + "type": "address" + } + ], + "name": "setPoolAddressTOSETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_uniswapFactory", + "type": "address" + } + ], + "name": "setUniswapV3Factory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakingV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tos", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBacking", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalMinting", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferPolicyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "viewMintingInfo", + "outputs": [ + { + "internalType": "address", + "name": "mintAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintPercents", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wethAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "withdrawEther", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c0604052601660808190527f54726561737572793a206e6f742061636365707465640000000000000000000060a09081526200004091600091906200012a565b506040805180820190915260168082527f54726561737572793a206e6f7420617070726f76656400000000000000000000602090920191825262000087916001916200012a565b506040805180820190915260178082527f54726561737572793a20696e76616c696420746f6b656e0000000000000000006020909201918252620000ce916002916200012a565b5060408051808201909152601f8082527f54726561737572793a20696e73756666696369656e7420726573657276657300602090920191825262000115916003916200012a565b503480156200012357600080fd5b506200020d565b8280546200013890620001d0565b90600052602060002090601f0160209004810192826200015c5760008555620001a7565b82601f106200017757805160ff1916838001178555620001a7565b82800160010185558215620001a7579182015b82811115620001a75782518255916020019190600101906200018a565b50620001b5929150620001b9565b5090565b5b80821115620001b55760008155600101620001ba565b600181811c90821680620001e557607f821691505b602082108114156200020757634e487b7160e01b600052602260045260246000fd5b50919050565b6143c5806200021d6000396000f3fe608060405234801561001057600080fd5b50600436106103535760003560e01c806393988b53116101c657806393988b531461064857806396f0bd611461067257806396f1557c1461067a578063976b58e91461068d5780639982f45e146106965780639a202d47146106a95780639ea64985146106b1578063a217fddf146106c4578063a44b8287146106cc578063aa5fc794146106df578063aa7e445c146106f2578063af933b57146106fa578063b11a35ea1461070d578063b3bc8ae814610715578063b84ef0811461071d578063be72f2d314610730578063c5bb95bc14610738578063c62a0bd814610740578063ca0dcf1614610753578063ca2c2a591461075c578063ce3e39c01461076f578063d11aca6214610782578063d53913931461078a578063d547741f146107b1578063d6f9b343146107c4578063da9c8864146107da578063daea85c5146107ed578063dc4655a114610800578063e170c19a14610813578063e2cfcfee14610826578063eb2cd25814610839578063f1c8c92214610841578063f2ccf1ea14610854578063f47f2f1d14610867578063f908ed371461087a578063fad1c85c14610883578063ffc12dae1461089657600080fd5b806301ffc9a71461035857806314fba479146103805780631bb5e2dc146103925780631cf29893146103a55780631f770e7b146103ba57806321320fcc146103cf57806322985246146103e2578063248a9ca3146103f757806324d7806c1461040a578063282c51f31461041d5780632f2ff15d14610444578063330dd3451461045757806333f21cd51461048557806336568abe1461048d5780633e0f19a0146104a05780633eb970a7146104b357806340def7f7146104c657806341c04d5e146104d95780634cf15858146104ee5780634f0e0ef3146105015780635b5491821461052157806365cb3a831461053457806368afaca81461053c5780636f1e853314610544578063704802751461055757806375829def1461056a57806375b238fc1461057d57806376f2766c146105a4578063794dde64146105c55780638356ca4f146105d857806385e36cc2146105eb57806388611736146105f457806389f395de146106075780638d71bc5b1461061a5780638e549a451461062d57806391d1485414610635575b600080fd5b61036b610366366004613c6f565b6108a9565b60405190151581526020015b60405180910390f35b6011545b604051908152602001610377565b6103846103a0366004613c2c565b6108e0565b6103ad610901565b6040516103779190613f12565b6103cd6103c8366004613ae8565b610963565b005b61036b6103dd366004613c2c565b6109c5565b61038460008051602061437083398151915281565b610384610405366004613c2c565b610a94565b61036b610418366004613ae8565b610aa9565b6103847f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b6103cd610452366004613c44565b610ac3565b61036b610465366004613cb3565b600f60209081526000928352604080842090915290825290205460ff1681565b610384610ae5565b6103cd61049b366004613c44565b610af4565b6103cd6104ae366004613c44565b610b6e565b6103cd6104c1366004613d5e565b6110c6565b6103cd6104d4366004613d3a565b61123d565b61038460008051602061433083398151915281565b61036b6104fc366004613c44565b6113b4565b600654610514906001600160a01b031681565b6040516103779190613e4d565b600754610514906001600160a01b031681565b6103cd6114b3565b6103846114f2565b61036b610552366004613ae8565b611636565b6103cd610565366004613ae8565b61168f565b6103cd610578366004613ae8565b6116cf565b6103847fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6105b76105b2366004613c2c565b611782565b604051610377929190613e7c565b6103cd6105d3366004613c44565b6117ba565b6103cd6105e6366004613ae8565b611a8a565b610384600c5481565b600854610514906001600160a01b031681565b600454610514906001600160a01b031681565b600954610514906001600160a01b031681565b610384611b14565b61036b610643366004613c44565b611c17565b61065b610656366004613b02565b611c42565b604080519215158352602083019190915201610377565b600a54610384565b6103cd610688366004613ae8565b611d70565b610384600d5481565b6103cd6106a4366004613b61565b611da0565b6103cd6120f4565b6103cd6106bf366004613ae8565b612140565b610384600081565b6105146106da366004613cde565b6121d8565b6103cd6106ed366004613b38565b612210565b6103cd612338565b6103cd610708366004613ae8565b61248a565b61038461254a565b610384612ac2565b6103cd61072b366004613ae8565b612af1565b6103cd612b2e565b610384612b5e565b6103cd61074e366004613ae8565b612bee565b610384600a5481565b61036b61076a366004613d5e565b612c97565b600554610514906001600160a01b031681565b610384612d5f565b6103847ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6103cd6107bf366004613c44565b612e07565b6107cc612e24565b604051610377929190613f25565b6105146107e8366004613c2c565b612fd1565b6103cd6107fb366004613ae8565b612ffb565b61036b61080e366004613ae8565b6130b4565b6103cd610821366004613c2c565b6130c0565b6103cd610834366004613ae8565b613148565b601054610384565b6103cd61084f366004613ae8565b6131e6565b6103cd610862366004613ae8565b61328a565b61036b610875366004613ae8565b61345f565b610384600b5481565b61036b610891366004613ae8565b61346b565b6105b76108a4366004613c2c565b613485565b60006001600160e01b03198216637965db0b60e01b14806108da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b601281815481106108f057600080fd5b600091825260209091200154905081565b6060601080548060200260200160405190810160405280929190818152602001828054801561095957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161093b575b5050505050905090565b61096c3361346b565b6109915760405162461bcd60e51b8152600401610988906141c3565b60405180910390fd5b806001600160a01b0381166109b85760405162461bcd60e51b815260040161098890614054565b6109c182613503565b5050565b6000600b54600a546109d561254a565b6109df919061426a565b6109e9919061424a565b82600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3857600080fd5b505afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190613d22565b610a7a9190614232565b11610a8757506001919050565b506000919050565b919050565b60009081526013602052604090206001015490565b60006108da60008051602061433083398151915283611c17565b610acc82610a94565b610ad681336135ef565b610ae08383613653565b505050565b6000610aef61254a565b905090565b6001600160a01b0381163314610b645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610988565b6109c182826136d9565b610b773361346b565b610b935760405162461bcd60e51b8152600401610988906141c3565b604051632e31150760e11b81526004810183905260009073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__90635c622a0e9060240160206040518083038186803b158015610be157600080fd5b505af4158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190613c97565b9050600081600a811115610c3d57634e487b7160e01b600052602160045260246000fd5b1415610c5b5760405162461bcd60e51b815260040161098890614083565b600f600082600a811115610c7f57634e487b7160e01b600052602160045260246000fd5b600a811115610c9e57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff161515600114610d0e5760405162461bcd60e51b81526020600482015260126024820152716861736e2774207065726d697373696f6e7360701b6044820152606401610988565b6000600f600083600a811115610d3457634e487b7160e01b600052602160045260246000fd5b600a811115610d5357634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b03871682529092528120805460ff19169215159290921790915580610d948484611c42565b91509150818015610df857506000600e600085600a811115610dc657634e487b7160e01b600052602160045260246000fd5b600a811115610de557634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054115b15611077576001600e600085600a811115610e2357634e487b7160e01b600052602160045260246000fd5b600a811115610e4257634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054610e5d9190614289565b811015610fe657600e600084600a811115610e8857634e487b7160e01b600052602160045260246000fd5b600a811115610ea757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206001600e600086600a811115610edb57634e487b7160e01b600052602160045260246000fd5b600a811115610efa57634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054610f159190614289565b81548110610f3357634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031690600e9085600a811115610f6b57634e487b7160e01b600052602160045260246000fd5b600a811115610f8a57634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000208281548110610fb757634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600e600084600a81111561100a57634e487b7160e01b600052602160045260246000fd5b600a81111561102957634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002080548061105457634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555b82600a81111561109757634e487b7160e01b600052602160045260246000fd5b6000805160206143508339815191528560006040516110b7929190613e61565b60405180910390a25050505050565b6110cf3361346b565b6110eb5760405162461bcd60e51b8152600401610988906141c3565b81600a541415806110fc5750600081115b6111185760405162461bcd60e51b8152600401610988906140ac565b6111228282612c97565b6111655760405162461bcd60e51b8152602060048201526014602482015273756e617661696c61626c65206d696e745261746560601b6044820152606401610988565b81600a541461117457600a8290555b80156111ff57600480546040516340c10f1960e01b81526001600160a01b03909116916340c10f19916111ab913091869101613e7c565b602060405180830381600087803b1580156111c557600080fd5b505af11580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fd9190613bc9565b505b60408051838152602081018390527fe4cc2e96dce6da59e211b63b86e93c1e8da883b98fd0d184adc684dc66fc7ed591015b60405180910390a15050565b81806112815760405162461bcd60e51b8152602060048201526013602482015272151c99585cdd5c9e4e881e995c9bc81d5a5b9d606a1b6044820152606401610988565b61128a336130b4565b6001906112aa5760405162461bcd60e51b81526004016109889190613fae565b50600480546040516340c10f1960e01b81526001600160a01b03909116916340c10f19916112dc913091889101613e7c565b602060405180830381600087803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190613bc9565b5081801561133e57506000600d54115b15611374576064600d5484611353919061426a565b61135d919061424a565b600c600082825461136e9190614232565b90915550505b6040805184815283151560208201527f60037f60bce79115878858b94d45b5bfb7387cce97d88ca2fdd51ce8f33d820491015b60405180910390a1505050565b6000600f600073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__635c622a0e866040518263ffffffff1660e01b81526004016113f391815260200190565b60206040518083038186803b15801561140b57600080fd5b505af415801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613c97565b600a81111561146257634e487b7160e01b600052602160045260246000fd5b600a81111561148157634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff16905092915050565b6114bc3361346b565b6114d85760405162461bcd60e51b8152600401610988906141c3565b6114f060008051602061437083398151915233610af4565b565b6009546000906001600160a01b03161580159061159b5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561155857600080fd5b505afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190613cfb565b6001600160801b0316155b156115b057600a54600b54610aef919061424a565b600560009054906101000a90046001600160a01b03166001600160a01b03166368afaca86040518163ffffffff1660e01b815260040160206040518083038186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef9190613d22565b6000600f81600a5b600a81111561165d57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b039095168152939091529091205460ff16919050565b6116983361345f565b6116b45760405162461bcd60e51b81526004016109889061414b565b6116cc60008051602061433083398151915282610ac3565b50565b6116d833610aa9565b806116e757506116e73361345f565b6117035760405162461bcd60e51b8152600401610988906140d7565b6001600160a01b0381166117295760405162461bcd60e51b815260040161098890614119565b336001600160a01b03821614156117525760405162461bcd60e51b815260040161098890614193565b61176a60008051602061433083398151915282610ac3565b6116cc60008051602061433083398151915233610af4565b6011818154811061179257600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6117c33361346b565b6117df5760405162461bcd60e51b8152600401610988906141c3565b604051632e31150760e11b81526004810183905260009073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__90635c622a0e9060240160206040518083038186803b15801561182d57600080fd5b505af4158015611841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118659190613c97565b9050600081600a81111561188957634e487b7160e01b600052602160045260246000fd5b14156118a75760405162461bcd60e51b815260040161098890614083565b600f600082600a8111156118cb57634e487b7160e01b600052602160045260246000fd5b600a8111156118ea57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff161561194f5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610988565b6001600f600083600a81111561197557634e487b7160e01b600052602160045260246000fd5b600a81111561199457634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b03871682529092528120805460ff1916921515929092179091556119d48383611c42565b50905080611a5b57600e600083600a811115611a0057634e487b7160e01b600052602160045260246000fd5b600a811115611a1f57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b0385161790555b83600080516020614350833981519152846001604051611a7c929190613e61565b60405180910390a250505050565b611a933361345f565b611aaf5760405162461bcd60e51b81526004016109889061414b565b6001600160a01b038116611ad55760405162461bcd60e51b815260040161098890614119565b336001600160a01b0382161415611afe5760405162461bcd60e51b815260040161098890614193565b611b09600082610ac3565b6116cc600033610af4565b6009546000906001600160a01b031615801590611bbd5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190613cfb565b6001600160801b0316155b15611bc95750600a5490565b600560009054906101000a90046001600160a01b03166001600160a01b0316638e549a456040518163ffffffff1660e01b815260040160206040518083038186803b1580156115fe57600080fd5b60009182526013602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000806000600e600085600a811115611c6b57634e487b7160e01b600052602160045260246000fd5b600a811115611c8a57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611cec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cce575b5050505050905060005b8151811015611d5f57818181518110611d1f57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316866001600160a01b03161415611d4d57600193509150611d699050565b80611d57816142e3565b915050611cf6565b5060008092509250505b9250929050565b611d793361345f565b611d955760405162461bcd60e51b81526004016109889061414b565b6116cc600082613740565b611da93361346b565b611dc55760405162461bcd60e51b8152600401610988906141c3565b82611e005760405162461bcd60e51b815260206004820152600b60248201526a0f4cae4de40d8cadccee8d60ab1b6044820152606401610988565b828114611e3e5760405162461bcd60e51b815260206004820152600c60248201526b0eee4dedcce40d8cadccee8d60a31b6044820152606401610988565b6000600d81905583905b81811015611f84576000868683818110611e7257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e879190613ae8565b6001600160a01b03161415611ecd5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610988565b6000848483818110611eef57634e487b7160e01b600052603260045260246000fd5b9050602002013511611f345760405162461bcd60e51b815260206004820152600e60248201526d7a65726f205f70657263656e747360901b6044820152606401610988565b838382818110611f5457634e487b7160e01b600052603260045260246000fd5b90506020020135600d6000828254611f6c9190614232565b90915550819050611f7c816142e3565b915050611e48565b506064600d5410611fc95760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67205f70657263656e747360881b6044820152606401610988565b611fd560116000613a49565b60005b818110156120af576011604051806040016040528088888581811061200d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120229190613ae8565b6001600160a01b0316815260200186868581811061205057634e487b7160e01b600052603260045260246000fd5b60209081029290920135909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b03909216919091178155920151919092015550806120a7816142e3565b915050611fd8565b507ffcb8b54542c57e79d857f0e43e5697d82605478358e9bfd65755f1ac4f7c467c858585856040516120e59493929190613e95565b60405180910390a15050505050565b6120fd33610aa9565b8061210c575061210c3361345f565b6121285760405162461bcd60e51b8152600401610988906140d7565b6114f060008051602061433083398151915233610af4565b612149336130b4565b61218c5760405162461bcd60e51b815260206004820152601460248201527331b0b63632b91034b9903737ba103137b73232b960611b6044820152606401610988565b6001600160a01b0381166121cf5760405162461bcd60e51b815260206004820152600a6024820152691e995c9bc8185cdcd95d60b21b6044820152606401610988565b6116cc81613503565b600e60205281600052604060002081815481106121f457600080fd5b6000918252602090912001546001600160a01b03169150829050565b61221933611636565b6001906122395760405162461bcd60e51b81526004016109889190613fae565b506001600160a01b038216158015906122525750600081115b6122995760405162461bcd60e51b81526020600482015260186024820152771e995c9bc81c9958da5c1a595b9d081bdc88185b5bdd5b9d60421b6044820152606401610988565b806122a2612d5f565b10156122f05760405162461bcd60e51b815260206004820181905260248201527f74726561737572792062616c616e636520697320696e73756666696369656e746044820152606401610988565b600454612307906001600160a01b0316838361374a565b7fac14ca7b339c0e7e9533002fffbecb915441d1cce29e21355ecccfe1b21508518282604051611231929190613e7c565b6123413361346b565b61235d5760405162461bcd60e51b8152600401610988906141c3565b6000600c54118015612370575060115415155b6123ba5760405162461bcd60e51b815260206004820152601b60248201527a273790333ab732399037b9103737903234b9ba3934b13aba34b7b760291b6044820152606401610988565b600c5460005b6011548110156124845760006064601183815481106123ef57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154600c5461240e919061426a565b612418919061424a565b90506124248184614289565b92506124716011838154811061244a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546004546001600160a01b0390811691168361374a565b508061247c816142e3565b9150506123c0565b50600c55565b6124933361346b565b6124af5760405162461bcd60e51b8152600401610988906141c3565b806001600160a01b0381166124d65760405162461bcd60e51b815260040161098890614054565b600047116125155760405162461bcd60e51b815260206004820152600c60248201526b7a65726f2062616c616e636560a01b6044820152606401610988565b6040516001600160a01b038316904780156108fc02916000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b60055460408051630d15f59560e31b815290516000928392839283926001600160a01b0316916368afaca8916004808301926020929190829003018186803b15801561259557600080fd5b505afa1580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190613d22565b60105490915060005b81811015612a0457600654601080546001600160a01b03909216918390811061260f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156126bf576006546040516370a0823160e01b81526001600160a01b03909116906370a082319061265a903090600401613e4d565b60206040518083038186803b15801561267257600080fd5b505afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190613d22565b6126b49086614232565b9450600193506129f2565b60006001600160a01b0316601082815481106126eb57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316148015906127525750600454601080546001600160a01b03909216918390811061273a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614155b156129f2576000806000600560009054906101000a90046001600160a01b03166001600160a01b031663bb6f48ba601086815481106127a157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b0390921691889081106127db57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190612814903090600401613e4d565b60206040518083038186803b15801561282c57600080fd5b505afa158015612840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128649190613d22565b6040518363ffffffff1660e01b8152600401612881929190613e7c565b60806040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d19190613be5565b9350509250925082156128ef576128e88189614232565b97506129ee565b81156129ee576009546001600160a01b03161580159061299b5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561295857600080fd5b505afa15801561296c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129909190613cfb565b6001600160801b0316155b156129c457600a54600b546129b0908361426a565b6129ba919061424a565b6128e89089614232565b670de0b6b3a76400006129d7878361426a565b6129e1919061424a565b6129eb9089614232565b97505b5050505b806129fc816142e3565b9150506125d6565b5082158015612a1d57506006546001600160a01b031615155b15612aaf576006546040516370a0823160e01b81526001600160a01b03909116906370a0823190612a52903090600401613e4d565b60206040518083038186803b158015612a6a57600080fd5b505afa158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190613d22565b612aac9085614232565b93505b612ab94785614232565b95945050505050565b6000670de0b6b3a7640000612ad5611b14565b612add61254a565b612ae7919061426a565b610aef919061424a565b612afa3361345f565b612b165760405162461bcd60e51b81526004016109889061414b565b6116cc60008051602061437083398151915282610ac3565b612b373361345f565b612b535760405162461bcd60e51b81526004016109889061414b565b6114f0600033610af4565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bae57600080fd5b505afa158015612bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be69190613d22565b612ae761254a565b612bf73361346b565b612c135760405162461bcd60e51b8152600401610988906141c3565b6009546001600160a01b0382811691161415612c415760405162461bcd60e51b81526004016109889061420c565b600980546001600160a01b0319166001600160a01b0383161790556040517fc01e12e9bd0b3827f706592d13f881c40e918e90ffd9e3bb9b771643a608685290612c8c908390613e4d565b60405180910390a150565b6000600b5483612ca561254a565b612caf919061426a565b612cb9919061424a565b82600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d0857600080fd5b505afa158015612d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d409190613d22565b612d4a9190614232565b11612d57575060016108da565b5060006108da565b600480546040516370a0823160e01b815260009283926001600160a01b0316916370a0823191612d9191309101613e4d565b60206040518083038186803b158015612da957600080fd5b505afa158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de19190613d22565b9050600c548110612dff57600c54612df99082614289565b91505090565b600091505090565b612e1082610a94565b612e1a81336135ef565b610ae083836136d9565b6011546060908190806001600160401b03811115612e5257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612e7b578160200160208202803683370190505b509250806001600160401b03811115612ea457634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ecd578160200160208202803683370190505b50915060005b81811015612fcb5760118181548110612efc57634e487b7160e01b600052603260045260246000fd5b600091825260209091206002909102015484516001600160a01b0390911690859083908110612f3b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505060118181548110612f7c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154838281518110612fae57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280612fc3816142e3565b915050612ed3565b50509091565b60108181548110612fe157600080fd5b6000918252602090912001546001600160a01b0316905081565b6130043361346b565b6130205760405162461bcd60e51b8152600401610988906141c3565b6004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916130629185916d0166bb7f0435c9e717bb45005915602d1b9101613e7c565b602060405180830381600087803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c19190613bc9565b6000600f81600961163e565b6130c93361346b565b6130e55760405162461bcd60e51b8152600401610988906141c3565b80600b54141580156130f75750600081115b6131135760405162461bcd60e51b8152600401610988906140ac565b600b8190556040518181527f9ff242a6ecf76b19e165c80131c467a8fce34056d7bd44c8ff30726836e580bc90602001612c8c565b6131513361346b565b61316d5760405162461bcd60e51b8152600401610988906141c3565b6007546001600160a01b038281169116141561319b5760405162461bcd60e51b81526004016109889061420c565b600780546001600160a01b0319166001600160a01b0383161790556040517f844bdf9a7473f7dee84b48585eff441c1ed9044b2e04508067ad71b9194cdf0b90612c8c908390613e4d565b6131ef3361346b565b61320b5760405162461bcd60e51b8152600401610988906141c3565b6001600160a01b0381166132315760405162461bcd60e51b815260040161098890614119565b336001600160a01b038216141561325a5760405162461bcd60e51b815260040161098890614193565b61327260008051602061437083398151915282610ac3565b6116cc60008051602061437083398151915233610af4565b6132933361346b565b6132af5760405162461bcd60e51b8152600401610988906141c3565b806001600160a01b0381166132d65760405162461bcd60e51b815260040161098890614054565b60105460005b81811015613459576010818154811061330557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03858116911614156134475761332f600183614289565b8110156133ca576010613343600184614289565b8154811061336157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061339b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60108054806133e957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556040517e5e4bdc7ff4f434ef45e9b73093b5ee11ebd056f46704bb4f66e059f18b14259061343a908690613e4d565b60405180910390a1613459565b80613451816142e3565b9150506132dc565b50505050565b60006108da8183611c17565b60006108da60008051602061437083398151915283611c17565b600080601183815481106134a957634e487b7160e01b600052603260045260246000fd5b6000918252602090912060029091020154601180546001600160a01b0390921691859081106134e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015491509150915091565b601054600090815b8181101561356e576010818154811061353457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b038581169116141561355c576001925061356e565b80613566816142e3565b91505061350b565b5081610ae057601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0385161790556040517f51d46aa62889dada289ca574cb63cef7f51a70de054ed7feac6b783e6f7bd4a8906113a7908590613e4d565b6135f98282611c17565b6109c157613611816001600160a01b03166014613861565b61361c836020613861565b60405160200161362d929190613dde565b60408051601f198184030181529082905262461bcd60e51b825261098891600401613f7b565b61365d8282611c17565b6109c15760008281526013602090815260408083206001600160a01b03851684529091529020805460ff191660011790556136953390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6136e38282611c17565b156109c15760008281526013602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6109c18282613653565b600080846001600160a01b031663a9059cbb60e01b8585604051602401613772929190613e7c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516137b09190613dc2565b6000604051808303816000865af19150503d80600081146137ed576040519150601f19603f3d011682016040523d82523d6000602084013e6137f2565b606091505b509150915081801561381c57508051158061381c57508080602001905181019061381c9190613bc9565b61385a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610988565b5050505050565b6060600061387083600261426a565b61387b906002614232565b6001600160401b038111156138a057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156138ca576020820181803683370190505b509050600360fc1b816000815181106138f357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061393057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061395484600261426a565b61395f906001614232565b90505b60018111156139f3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139a157634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106139c557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936139ec816142cc565b9050613962565b508315613a425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610988565b9392505050565b50805460008255600202906000526020600020908101906116cc91905b80821115613a8b5780546001600160a01b031916815560006001820155600201613a66565b5090565b80356001600160a01b0381168114610a8f57600080fd5b60008083601f840112613ab7578182fd5b5081356001600160401b03811115613acd578182fd5b6020830191508360208260051b8501011115611d6957600080fd5b600060208284031215613af9578081fd5b613a4282613a8f565b60008060408385031215613b14578081fd5b613b1d83613a8f565b91506020830135613b2d81614322565b809150509250929050565b60008060408385031215613b4a578182fd5b613b5383613a8f565b946020939093013593505050565b60008060008060408587031215613b76578182fd5b84356001600160401b0380821115613b8c578384fd5b613b9888838901613aa6565b90965094506020870135915080821115613bb0578384fd5b50613bbd87828801613aa6565b95989497509550505050565b600060208284031215613bda578081fd5b8151613a4281614314565b60008060008060808587031215613bfa578384fd5b8451613c0581614314565b6020860151909450613c1681614314565b6040860151606090960151949790965092505050565b600060208284031215613c3d578081fd5b5035919050565b60008060408385031215613c56578182fd5b82359150613c6660208401613a8f565b90509250929050565b600060208284031215613c80578081fd5b81356001600160e01b031981168114613a42578182fd5b600060208284031215613ca8578081fd5b8151613a4281614322565b60008060408385031215613cc5578182fd5b8235613cd081614322565b9150613c6660208401613a8f565b60008060408385031215613cf0578182fd5b8235613b5381614322565b600060208284031215613d0c578081fd5b81516001600160801b0381168114613a42578182fd5b600060208284031215613d33578081fd5b5051919050565b60008060408385031215613d4c578182fd5b823591506020830135613b2d81614314565b60008060408385031215613d70578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015613db75781516001600160a01b031687529582019590820190600101613d92565b509495945050505050565b60008251613dd48184602087016142a0565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613e108160178501602088016142a0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613e418160288401602088016142a0565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6040808252810184905260008560608301825b87811015613ed6576001600160a01b03613ec184613a8f565b16825260209283019290910190600101613ea8565b5083810360208501528481526001600160fb1b03851115613ef5578283fd5b8460051b9150818660208301370160200190815295945050505050565b602081526000613a426020830184613d7f565b604081526000613f386040830185613d7f565b828103602084810191909152845180835285820192820190845b81811015613f6e57845183529383019391830191600101613f52565b5090979650505050505050565b6020815260008251806020840152613f9a8160408501602087016142a0565b601f01601f19169190910160400192915050565b6000602080835281845483600182811c915080831680613fcf57607f831692505b858310811415613fed57634e487b7160e01b87526022600452602487fd5b87860183815260200181801561400a576001811461401b57614045565b60ff19861682528782019650614045565b60008b815260209020895b8681101561403f57815484820152908501908901614026565b83019750505b50949998505050505050505050565b60208082526015908201527454726561737572793a7a65726f206164647265737360581b604082015260600190565b6020808252600f908201526e2727a722903832b936b4b9b9b4b7b760891b604082015260600190565b602080825260119082015270636865636b20696e7075742076616c756560781b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6020808252600c908201526b73616d65206164647265737360a01b604082015260600190565b60008219821115614245576142456142fe565b500190565b60008261426557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614284576142846142fe565b500290565b60008282101561429b5761429b6142fe565b500390565b60005b838110156142bb5781810151838201526020016142a3565b838111156134595750506000910152565b6000816142db576142db6142fe565b506000190190565b60006000198214156142f7576142f76142fe565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146116cc57600080fd5b600b81106116cc57600080fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1303c6eb44f3a083ba65fca4eae750beac5efa33a89dec0e50004b62cbb835cc0b6fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a26469706673582212208286ef803f43c5d6c2a28719068561c00e8bf744bd0ad5f9fed6b8160165582864736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103535760003560e01c806393988b53116101c657806393988b531461064857806396f0bd611461067257806396f1557c1461067a578063976b58e91461068d5780639982f45e146106965780639a202d47146106a95780639ea64985146106b1578063a217fddf146106c4578063a44b8287146106cc578063aa5fc794146106df578063aa7e445c146106f2578063af933b57146106fa578063b11a35ea1461070d578063b3bc8ae814610715578063b84ef0811461071d578063be72f2d314610730578063c5bb95bc14610738578063c62a0bd814610740578063ca0dcf1614610753578063ca2c2a591461075c578063ce3e39c01461076f578063d11aca6214610782578063d53913931461078a578063d547741f146107b1578063d6f9b343146107c4578063da9c8864146107da578063daea85c5146107ed578063dc4655a114610800578063e170c19a14610813578063e2cfcfee14610826578063eb2cd25814610839578063f1c8c92214610841578063f2ccf1ea14610854578063f47f2f1d14610867578063f908ed371461087a578063fad1c85c14610883578063ffc12dae1461089657600080fd5b806301ffc9a71461035857806314fba479146103805780631bb5e2dc146103925780631cf29893146103a55780631f770e7b146103ba57806321320fcc146103cf57806322985246146103e2578063248a9ca3146103f757806324d7806c1461040a578063282c51f31461041d5780632f2ff15d14610444578063330dd3451461045757806333f21cd51461048557806336568abe1461048d5780633e0f19a0146104a05780633eb970a7146104b357806340def7f7146104c657806341c04d5e146104d95780634cf15858146104ee5780634f0e0ef3146105015780635b5491821461052157806365cb3a831461053457806368afaca81461053c5780636f1e853314610544578063704802751461055757806375829def1461056a57806375b238fc1461057d57806376f2766c146105a4578063794dde64146105c55780638356ca4f146105d857806385e36cc2146105eb57806388611736146105f457806389f395de146106075780638d71bc5b1461061a5780638e549a451461062d57806391d1485414610635575b600080fd5b61036b610366366004613c6f565b6108a9565b60405190151581526020015b60405180910390f35b6011545b604051908152602001610377565b6103846103a0366004613c2c565b6108e0565b6103ad610901565b6040516103779190613f12565b6103cd6103c8366004613ae8565b610963565b005b61036b6103dd366004613c2c565b6109c5565b61038460008051602061437083398151915281565b610384610405366004613c2c565b610a94565b61036b610418366004613ae8565b610aa9565b6103847f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b6103cd610452366004613c44565b610ac3565b61036b610465366004613cb3565b600f60209081526000928352604080842090915290825290205460ff1681565b610384610ae5565b6103cd61049b366004613c44565b610af4565b6103cd6104ae366004613c44565b610b6e565b6103cd6104c1366004613d5e565b6110c6565b6103cd6104d4366004613d3a565b61123d565b61038460008051602061433083398151915281565b61036b6104fc366004613c44565b6113b4565b600654610514906001600160a01b031681565b6040516103779190613e4d565b600754610514906001600160a01b031681565b6103cd6114b3565b6103846114f2565b61036b610552366004613ae8565b611636565b6103cd610565366004613ae8565b61168f565b6103cd610578366004613ae8565b6116cf565b6103847fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6105b76105b2366004613c2c565b611782565b604051610377929190613e7c565b6103cd6105d3366004613c44565b6117ba565b6103cd6105e6366004613ae8565b611a8a565b610384600c5481565b600854610514906001600160a01b031681565b600454610514906001600160a01b031681565b600954610514906001600160a01b031681565b610384611b14565b61036b610643366004613c44565b611c17565b61065b610656366004613b02565b611c42565b604080519215158352602083019190915201610377565b600a54610384565b6103cd610688366004613ae8565b611d70565b610384600d5481565b6103cd6106a4366004613b61565b611da0565b6103cd6120f4565b6103cd6106bf366004613ae8565b612140565b610384600081565b6105146106da366004613cde565b6121d8565b6103cd6106ed366004613b38565b612210565b6103cd612338565b6103cd610708366004613ae8565b61248a565b61038461254a565b610384612ac2565b6103cd61072b366004613ae8565b612af1565b6103cd612b2e565b610384612b5e565b6103cd61074e366004613ae8565b612bee565b610384600a5481565b61036b61076a366004613d5e565b612c97565b600554610514906001600160a01b031681565b610384612d5f565b6103847ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6103cd6107bf366004613c44565b612e07565b6107cc612e24565b604051610377929190613f25565b6105146107e8366004613c2c565b612fd1565b6103cd6107fb366004613ae8565b612ffb565b61036b61080e366004613ae8565b6130b4565b6103cd610821366004613c2c565b6130c0565b6103cd610834366004613ae8565b613148565b601054610384565b6103cd61084f366004613ae8565b6131e6565b6103cd610862366004613ae8565b61328a565b61036b610875366004613ae8565b61345f565b610384600b5481565b61036b610891366004613ae8565b61346b565b6105b76108a4366004613c2c565b613485565b60006001600160e01b03198216637965db0b60e01b14806108da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b601281815481106108f057600080fd5b600091825260209091200154905081565b6060601080548060200260200160405190810160405280929190818152602001828054801561095957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161093b575b5050505050905090565b61096c3361346b565b6109915760405162461bcd60e51b8152600401610988906141c3565b60405180910390fd5b806001600160a01b0381166109b85760405162461bcd60e51b815260040161098890614054565b6109c182613503565b5050565b6000600b54600a546109d561254a565b6109df919061426a565b6109e9919061424a565b82600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3857600080fd5b505afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190613d22565b610a7a9190614232565b11610a8757506001919050565b506000919050565b919050565b60009081526013602052604090206001015490565b60006108da60008051602061433083398151915283611c17565b610acc82610a94565b610ad681336135ef565b610ae08383613653565b505050565b6000610aef61254a565b905090565b6001600160a01b0381163314610b645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610988565b6109c182826136d9565b610b773361346b565b610b935760405162461bcd60e51b8152600401610988906141c3565b604051632e31150760e11b81526004810183905260009073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__90635c622a0e9060240160206040518083038186803b158015610be157600080fd5b505af4158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190613c97565b9050600081600a811115610c3d57634e487b7160e01b600052602160045260246000fd5b1415610c5b5760405162461bcd60e51b815260040161098890614083565b600f600082600a811115610c7f57634e487b7160e01b600052602160045260246000fd5b600a811115610c9e57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff161515600114610d0e5760405162461bcd60e51b81526020600482015260126024820152716861736e2774207065726d697373696f6e7360701b6044820152606401610988565b6000600f600083600a811115610d3457634e487b7160e01b600052602160045260246000fd5b600a811115610d5357634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b03871682529092528120805460ff19169215159290921790915580610d948484611c42565b91509150818015610df857506000600e600085600a811115610dc657634e487b7160e01b600052602160045260246000fd5b600a811115610de557634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054115b15611077576001600e600085600a811115610e2357634e487b7160e01b600052602160045260246000fd5b600a811115610e4257634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054610e5d9190614289565b811015610fe657600e600084600a811115610e8857634e487b7160e01b600052602160045260246000fd5b600a811115610ea757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206001600e600086600a811115610edb57634e487b7160e01b600052602160045260246000fd5b600a811115610efa57634e487b7160e01b600052602160045260246000fd5b8152602081019190915260400160002054610f159190614289565b81548110610f3357634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031690600e9085600a811115610f6b57634e487b7160e01b600052602160045260246000fd5b600a811115610f8a57634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000208281548110610fb757634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600e600084600a81111561100a57634e487b7160e01b600052602160045260246000fd5b600a81111561102957634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002080548061105457634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555b82600a81111561109757634e487b7160e01b600052602160045260246000fd5b6000805160206143508339815191528560006040516110b7929190613e61565b60405180910390a25050505050565b6110cf3361346b565b6110eb5760405162461bcd60e51b8152600401610988906141c3565b81600a541415806110fc5750600081115b6111185760405162461bcd60e51b8152600401610988906140ac565b6111228282612c97565b6111655760405162461bcd60e51b8152602060048201526014602482015273756e617661696c61626c65206d696e745261746560601b6044820152606401610988565b81600a541461117457600a8290555b80156111ff57600480546040516340c10f1960e01b81526001600160a01b03909116916340c10f19916111ab913091869101613e7c565b602060405180830381600087803b1580156111c557600080fd5b505af11580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fd9190613bc9565b505b60408051838152602081018390527fe4cc2e96dce6da59e211b63b86e93c1e8da883b98fd0d184adc684dc66fc7ed591015b60405180910390a15050565b81806112815760405162461bcd60e51b8152602060048201526013602482015272151c99585cdd5c9e4e881e995c9bc81d5a5b9d606a1b6044820152606401610988565b61128a336130b4565b6001906112aa5760405162461bcd60e51b81526004016109889190613fae565b50600480546040516340c10f1960e01b81526001600160a01b03909116916340c10f19916112dc913091889101613e7c565b602060405180830381600087803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190613bc9565b5081801561133e57506000600d54115b15611374576064600d5484611353919061426a565b61135d919061424a565b600c600082825461136e9190614232565b90915550505b6040805184815283151560208201527f60037f60bce79115878858b94d45b5bfb7387cce97d88ca2fdd51ce8f33d820491015b60405180910390a1505050565b6000600f600073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__635c622a0e866040518263ffffffff1660e01b81526004016113f391815260200190565b60206040518083038186803b15801561140b57600080fd5b505af415801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613c97565b600a81111561146257634e487b7160e01b600052602160045260246000fd5b600a81111561148157634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff16905092915050565b6114bc3361346b565b6114d85760405162461bcd60e51b8152600401610988906141c3565b6114f060008051602061437083398151915233610af4565b565b6009546000906001600160a01b03161580159061159b5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561155857600080fd5b505afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190613cfb565b6001600160801b0316155b156115b057600a54600b54610aef919061424a565b600560009054906101000a90046001600160a01b03166001600160a01b03166368afaca86040518163ffffffff1660e01b815260040160206040518083038186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef9190613d22565b6000600f81600a5b600a81111561165d57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b039095168152939091529091205460ff16919050565b6116983361345f565b6116b45760405162461bcd60e51b81526004016109889061414b565b6116cc60008051602061433083398151915282610ac3565b50565b6116d833610aa9565b806116e757506116e73361345f565b6117035760405162461bcd60e51b8152600401610988906140d7565b6001600160a01b0381166117295760405162461bcd60e51b815260040161098890614119565b336001600160a01b03821614156117525760405162461bcd60e51b815260040161098890614193565b61176a60008051602061433083398151915282610ac3565b6116cc60008051602061433083398151915233610af4565b6011818154811061179257600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6117c33361346b565b6117df5760405162461bcd60e51b8152600401610988906141c3565b604051632e31150760e11b81526004810183905260009073__$9cfa9b0e3c0a9a6ba047022cc53a6c3f44$__90635c622a0e9060240160206040518083038186803b15801561182d57600080fd5b505af4158015611841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118659190613c97565b9050600081600a81111561188957634e487b7160e01b600052602160045260246000fd5b14156118a75760405162461bcd60e51b815260040161098890614083565b600f600082600a8111156118cb57634e487b7160e01b600052602160045260246000fd5b600a8111156118ea57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff161561194f5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610988565b6001600f600083600a81111561197557634e487b7160e01b600052602160045260246000fd5b600a81111561199457634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604090810160009081206001600160a01b03871682529092528120805460ff1916921515929092179091556119d48383611c42565b50905080611a5b57600e600083600a811115611a0057634e487b7160e01b600052602160045260246000fd5b600a811115611a1f57634e487b7160e01b600052602160045260246000fd5b8152602080820192909252604001600090812080546001810182559082529190200180546001600160a01b0319166001600160a01b0385161790555b83600080516020614350833981519152846001604051611a7c929190613e61565b60405180910390a250505050565b611a933361345f565b611aaf5760405162461bcd60e51b81526004016109889061414b565b6001600160a01b038116611ad55760405162461bcd60e51b815260040161098890614119565b336001600160a01b0382161415611afe5760405162461bcd60e51b815260040161098890614193565b611b09600082610ac3565b6116cc600033610af4565b6009546000906001600160a01b031615801590611bbd5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190613cfb565b6001600160801b0316155b15611bc95750600a5490565b600560009054906101000a90046001600160a01b03166001600160a01b0316638e549a456040518163ffffffff1660e01b815260040160206040518083038186803b1580156115fe57600080fd5b60009182526013602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000806000600e600085600a811115611c6b57634e487b7160e01b600052602160045260246000fd5b600a811115611c8a57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611cec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cce575b5050505050905060005b8151811015611d5f57818181518110611d1f57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316866001600160a01b03161415611d4d57600193509150611d699050565b80611d57816142e3565b915050611cf6565b5060008092509250505b9250929050565b611d793361345f565b611d955760405162461bcd60e51b81526004016109889061414b565b6116cc600082613740565b611da93361346b565b611dc55760405162461bcd60e51b8152600401610988906141c3565b82611e005760405162461bcd60e51b815260206004820152600b60248201526a0f4cae4de40d8cadccee8d60ab1b6044820152606401610988565b828114611e3e5760405162461bcd60e51b815260206004820152600c60248201526b0eee4dedcce40d8cadccee8d60a31b6044820152606401610988565b6000600d81905583905b81811015611f84576000868683818110611e7257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e879190613ae8565b6001600160a01b03161415611ecd5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610988565b6000848483818110611eef57634e487b7160e01b600052603260045260246000fd5b9050602002013511611f345760405162461bcd60e51b815260206004820152600e60248201526d7a65726f205f70657263656e747360901b6044820152606401610988565b838382818110611f5457634e487b7160e01b600052603260045260246000fd5b90506020020135600d6000828254611f6c9190614232565b90915550819050611f7c816142e3565b915050611e48565b506064600d5410611fc95760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67205f70657263656e747360881b6044820152606401610988565b611fd560116000613a49565b60005b818110156120af576011604051806040016040528088888581811061200d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120229190613ae8565b6001600160a01b0316815260200186868581811061205057634e487b7160e01b600052603260045260246000fd5b60209081029290920135909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b03909216919091178155920151919092015550806120a7816142e3565b915050611fd8565b507ffcb8b54542c57e79d857f0e43e5697d82605478358e9bfd65755f1ac4f7c467c858585856040516120e59493929190613e95565b60405180910390a15050505050565b6120fd33610aa9565b8061210c575061210c3361345f565b6121285760405162461bcd60e51b8152600401610988906140d7565b6114f060008051602061433083398151915233610af4565b612149336130b4565b61218c5760405162461bcd60e51b815260206004820152601460248201527331b0b63632b91034b9903737ba103137b73232b960611b6044820152606401610988565b6001600160a01b0381166121cf5760405162461bcd60e51b815260206004820152600a6024820152691e995c9bc8185cdcd95d60b21b6044820152606401610988565b6116cc81613503565b600e60205281600052604060002081815481106121f457600080fd5b6000918252602090912001546001600160a01b03169150829050565b61221933611636565b6001906122395760405162461bcd60e51b81526004016109889190613fae565b506001600160a01b038216158015906122525750600081115b6122995760405162461bcd60e51b81526020600482015260186024820152771e995c9bc81c9958da5c1a595b9d081bdc88185b5bdd5b9d60421b6044820152606401610988565b806122a2612d5f565b10156122f05760405162461bcd60e51b815260206004820181905260248201527f74726561737572792062616c616e636520697320696e73756666696369656e746044820152606401610988565b600454612307906001600160a01b0316838361374a565b7fac14ca7b339c0e7e9533002fffbecb915441d1cce29e21355ecccfe1b21508518282604051611231929190613e7c565b6123413361346b565b61235d5760405162461bcd60e51b8152600401610988906141c3565b6000600c54118015612370575060115415155b6123ba5760405162461bcd60e51b815260206004820152601b60248201527a273790333ab732399037b9103737903234b9ba3934b13aba34b7b760291b6044820152606401610988565b600c5460005b6011548110156124845760006064601183815481106123ef57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154600c5461240e919061426a565b612418919061424a565b90506124248184614289565b92506124716011838154811061244a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546004546001600160a01b0390811691168361374a565b508061247c816142e3565b9150506123c0565b50600c55565b6124933361346b565b6124af5760405162461bcd60e51b8152600401610988906141c3565b806001600160a01b0381166124d65760405162461bcd60e51b815260040161098890614054565b600047116125155760405162461bcd60e51b815260206004820152600c60248201526b7a65726f2062616c616e636560a01b6044820152606401610988565b6040516001600160a01b038316904780156108fc02916000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b60055460408051630d15f59560e31b815290516000928392839283926001600160a01b0316916368afaca8916004808301926020929190829003018186803b15801561259557600080fd5b505afa1580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190613d22565b60105490915060005b81811015612a0457600654601080546001600160a01b03909216918390811061260f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156126bf576006546040516370a0823160e01b81526001600160a01b03909116906370a082319061265a903090600401613e4d565b60206040518083038186803b15801561267257600080fd5b505afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190613d22565b6126b49086614232565b9450600193506129f2565b60006001600160a01b0316601082815481106126eb57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316148015906127525750600454601080546001600160a01b03909216918390811061273a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614155b156129f2576000806000600560009054906101000a90046001600160a01b03166001600160a01b031663bb6f48ba601086815481106127a157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b0390921691889081106127db57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190612814903090600401613e4d565b60206040518083038186803b15801561282c57600080fd5b505afa158015612840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128649190613d22565b6040518363ffffffff1660e01b8152600401612881929190613e7c565b60806040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d19190613be5565b9350509250925082156128ef576128e88189614232565b97506129ee565b81156129ee576009546001600160a01b03161580159061299b5750600960009054906101000a90046001600160a01b03166001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561295857600080fd5b505afa15801561296c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129909190613cfb565b6001600160801b0316155b156129c457600a54600b546129b0908361426a565b6129ba919061424a565b6128e89089614232565b670de0b6b3a76400006129d7878361426a565b6129e1919061424a565b6129eb9089614232565b97505b5050505b806129fc816142e3565b9150506125d6565b5082158015612a1d57506006546001600160a01b031615155b15612aaf576006546040516370a0823160e01b81526001600160a01b03909116906370a0823190612a52903090600401613e4d565b60206040518083038186803b158015612a6a57600080fd5b505afa158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190613d22565b612aac9085614232565b93505b612ab94785614232565b95945050505050565b6000670de0b6b3a7640000612ad5611b14565b612add61254a565b612ae7919061426a565b610aef919061424a565b612afa3361345f565b612b165760405162461bcd60e51b81526004016109889061414b565b6116cc60008051602061437083398151915282610ac3565b612b373361345f565b612b535760405162461bcd60e51b81526004016109889061414b565b6114f0600033610af4565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bae57600080fd5b505afa158015612bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be69190613d22565b612ae761254a565b612bf73361346b565b612c135760405162461bcd60e51b8152600401610988906141c3565b6009546001600160a01b0382811691161415612c415760405162461bcd60e51b81526004016109889061420c565b600980546001600160a01b0319166001600160a01b0383161790556040517fc01e12e9bd0b3827f706592d13f881c40e918e90ffd9e3bb9b771643a608685290612c8c908390613e4d565b60405180910390a150565b6000600b5483612ca561254a565b612caf919061426a565b612cb9919061424a565b82600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d0857600080fd5b505afa158015612d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d409190613d22565b612d4a9190614232565b11612d57575060016108da565b5060006108da565b600480546040516370a0823160e01b815260009283926001600160a01b0316916370a0823191612d9191309101613e4d565b60206040518083038186803b158015612da957600080fd5b505afa158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de19190613d22565b9050600c548110612dff57600c54612df99082614289565b91505090565b600091505090565b612e1082610a94565b612e1a81336135ef565b610ae083836136d9565b6011546060908190806001600160401b03811115612e5257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612e7b578160200160208202803683370190505b509250806001600160401b03811115612ea457634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ecd578160200160208202803683370190505b50915060005b81811015612fcb5760118181548110612efc57634e487b7160e01b600052603260045260246000fd5b600091825260209091206002909102015484516001600160a01b0390911690859083908110612f3b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505060118181548110612f7c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154838281518110612fae57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280612fc3816142e3565b915050612ed3565b50509091565b60108181548110612fe157600080fd5b6000918252602090912001546001600160a01b0316905081565b6130043361346b565b6130205760405162461bcd60e51b8152600401610988906141c3565b6004805460405163095ea7b360e01b81526001600160a01b039091169163095ea7b3916130629185916d0166bb7f0435c9e717bb45005915602d1b9101613e7c565b602060405180830381600087803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c19190613bc9565b6000600f81600961163e565b6130c93361346b565b6130e55760405162461bcd60e51b8152600401610988906141c3565b80600b54141580156130f75750600081115b6131135760405162461bcd60e51b8152600401610988906140ac565b600b8190556040518181527f9ff242a6ecf76b19e165c80131c467a8fce34056d7bd44c8ff30726836e580bc90602001612c8c565b6131513361346b565b61316d5760405162461bcd60e51b8152600401610988906141c3565b6007546001600160a01b038281169116141561319b5760405162461bcd60e51b81526004016109889061420c565b600780546001600160a01b0319166001600160a01b0383161790556040517f844bdf9a7473f7dee84b48585eff441c1ed9044b2e04508067ad71b9194cdf0b90612c8c908390613e4d565b6131ef3361346b565b61320b5760405162461bcd60e51b8152600401610988906141c3565b6001600160a01b0381166132315760405162461bcd60e51b815260040161098890614119565b336001600160a01b038216141561325a5760405162461bcd60e51b815260040161098890614193565b61327260008051602061437083398151915282610ac3565b6116cc60008051602061437083398151915233610af4565b6132933361346b565b6132af5760405162461bcd60e51b8152600401610988906141c3565b806001600160a01b0381166132d65760405162461bcd60e51b815260040161098890614054565b60105460005b81811015613459576010818154811061330557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03858116911614156134475761332f600183614289565b8110156133ca576010613343600184614289565b8154811061336157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061339b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60108054806133e957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556040517e5e4bdc7ff4f434ef45e9b73093b5ee11ebd056f46704bb4f66e059f18b14259061343a908690613e4d565b60405180910390a1613459565b80613451816142e3565b9150506132dc565b50505050565b60006108da8183611c17565b60006108da60008051602061437083398151915283611c17565b600080601183815481106134a957634e487b7160e01b600052603260045260246000fd5b6000918252602090912060029091020154601180546001600160a01b0390921691859081106134e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015491509150915091565b601054600090815b8181101561356e576010818154811061353457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b038581169116141561355c576001925061356e565b80613566816142e3565b91505061350b565b5081610ae057601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0385161790556040517f51d46aa62889dada289ca574cb63cef7f51a70de054ed7feac6b783e6f7bd4a8906113a7908590613e4d565b6135f98282611c17565b6109c157613611816001600160a01b03166014613861565b61361c836020613861565b60405160200161362d929190613dde565b60408051601f198184030181529082905262461bcd60e51b825261098891600401613f7b565b61365d8282611c17565b6109c15760008281526013602090815260408083206001600160a01b03851684529091529020805460ff191660011790556136953390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6136e38282611c17565b156109c15760008281526013602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6109c18282613653565b600080846001600160a01b031663a9059cbb60e01b8585604051602401613772929190613e7c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516137b09190613dc2565b6000604051808303816000865af19150503d80600081146137ed576040519150601f19603f3d011682016040523d82523d6000602084013e6137f2565b606091505b509150915081801561381c57508051158061381c57508080602001905181019061381c9190613bc9565b61385a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610988565b5050505050565b6060600061387083600261426a565b61387b906002614232565b6001600160401b038111156138a057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156138ca576020820181803683370190505b509050600360fc1b816000815181106138f357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061393057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061395484600261426a565b61395f906001614232565b90505b60018111156139f3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139a157634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106139c557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936139ec816142cc565b9050613962565b508315613a425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610988565b9392505050565b50805460008255600202906000526020600020908101906116cc91905b80821115613a8b5780546001600160a01b031916815560006001820155600201613a66565b5090565b80356001600160a01b0381168114610a8f57600080fd5b60008083601f840112613ab7578182fd5b5081356001600160401b03811115613acd578182fd5b6020830191508360208260051b8501011115611d6957600080fd5b600060208284031215613af9578081fd5b613a4282613a8f565b60008060408385031215613b14578081fd5b613b1d83613a8f565b91506020830135613b2d81614322565b809150509250929050565b60008060408385031215613b4a578182fd5b613b5383613a8f565b946020939093013593505050565b60008060008060408587031215613b76578182fd5b84356001600160401b0380821115613b8c578384fd5b613b9888838901613aa6565b90965094506020870135915080821115613bb0578384fd5b50613bbd87828801613aa6565b95989497509550505050565b600060208284031215613bda578081fd5b8151613a4281614314565b60008060008060808587031215613bfa578384fd5b8451613c0581614314565b6020860151909450613c1681614314565b6040860151606090960151949790965092505050565b600060208284031215613c3d578081fd5b5035919050565b60008060408385031215613c56578182fd5b82359150613c6660208401613a8f565b90509250929050565b600060208284031215613c80578081fd5b81356001600160e01b031981168114613a42578182fd5b600060208284031215613ca8578081fd5b8151613a4281614322565b60008060408385031215613cc5578182fd5b8235613cd081614322565b9150613c6660208401613a8f565b60008060408385031215613cf0578182fd5b8235613b5381614322565b600060208284031215613d0c578081fd5b81516001600160801b0381168114613a42578182fd5b600060208284031215613d33578081fd5b5051919050565b60008060408385031215613d4c578182fd5b823591506020830135613b2d81614314565b60008060408385031215613d70578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015613db75781516001600160a01b031687529582019590820190600101613d92565b509495945050505050565b60008251613dd48184602087016142a0565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613e108160178501602088016142a0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613e418160288401602088016142a0565b01602801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6040808252810184905260008560608301825b87811015613ed6576001600160a01b03613ec184613a8f565b16825260209283019290910190600101613ea8565b5083810360208501528481526001600160fb1b03851115613ef5578283fd5b8460051b9150818660208301370160200190815295945050505050565b602081526000613a426020830184613d7f565b604081526000613f386040830185613d7f565b828103602084810191909152845180835285820192820190845b81811015613f6e57845183529383019391830191600101613f52565b5090979650505050505050565b6020815260008251806020840152613f9a8160408501602087016142a0565b601f01601f19169190910160400192915050565b6000602080835281845483600182811c915080831680613fcf57607f831692505b858310811415613fed57634e487b7160e01b87526022600452602487fd5b87860183815260200181801561400a576001811461401b57614045565b60ff19861682528782019650614045565b60008b815260209020895b8681101561403f57815484820152908501908901614026565b83019750505b50949998505050505050505050565b60208082526015908201527454726561737572793a7a65726f206164647265737360581b604082015260600190565b6020808252600f908201526e2727a722903832b936b4b9b9b4b7b760891b604082015260600190565b602080825260119082015270636865636b20696e7075742076616c756560781b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6020808252600c908201526b73616d65206164647265737360a01b604082015260600190565b60008219821115614245576142456142fe565b500190565b60008261426557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614284576142846142fe565b500290565b60008282101561429b5761429b6142fe565b500390565b60005b838110156142bb5781810151838201526020016142a3565b838111156134595750506000910152565b6000816142db576142db6142fe565b506000190190565b60006000198214156142f7576142f76142fe565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146116cc57600080fd5b600b81106116cc57600080fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b1303c6eb44f3a083ba65fca4eae750beac5efa33a89dec0e50004b62cbb835cc0b6fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311a26469706673582212208286ef803f43c5d6c2a28719068561c00e8bf744bd0ad5f9fed6b8160165582864736f6c63430008040033", + "linkReferences": { + "contracts/libraries/LibTreasury.sol": { + "LibTreasury": [ + { + "length": 20, + "start": 3529 + }, + { + "length": 20, + "start": 5593 + }, + { + "length": 20, + "start": 6677 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/libraries/LibTreasury.sol": { + "LibTreasury": [ + { + "length": 20, + "start": 2988 + }, + { + "length": 20, + "start": 5052 + }, + { + "length": 20, + "start": 6136 + } + ] + } + } +} diff --git a/contracts/data/tosv2/abi/TreasuryProxy.json b/contracts/data/tosv2/abi/TreasuryProxy.json new file mode 100644 index 0000000..554b51c --- /dev/null +++ b/contracts/data/tosv2/abi/TreasuryProxy.json @@ -0,0 +1,1052 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TreasuryProxy", + "sourceName": "contracts/TreasuryProxy.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "alive", + "type": "bool" + } + ], + "name": "SetAliveImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": true, + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "SetSelectorImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BURNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ETHbacking", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ETHliquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "POLICY_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROJECT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOS", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "addProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "aliveImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "backings", + "outputs": [ + { + "internalType": "address", + "name": "erc20Address", + "type": "address" + }, + { + "internalType": "address", + "name": "tosPoolAddress", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "backingsIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "calculator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getSelectorImplementation2", + "outputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "implementation2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tos", + "type": "address" + }, + { + "internalType": "address", + "name": "_calculator", + "type": "address" + }, + { + "internalType": "address", + "name": "_wethAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniswapV3Factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_stakingv2", + "type": "address" + }, + { + "internalType": "address", + "name": "_poolAddressTOSETH", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_minimumTOSPricePerETH", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isProxyAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lpTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumTOSPricePerETH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintRateDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mintings", + "outputs": [ + { + "internalType": "address", + "name": "mintAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintPercents", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseProxy", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibTreasury.STATUS", + "name": "", + "type": "uint8" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "permissions", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolAddressTOSETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "proxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibTreasury.STATUS", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "registry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removePolicy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "removeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "selectorImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setAliveImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_alive", + "type": "bool" + } + ], + "name": "setImplementation2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_pause", + "type": "bool" + } + ], + "name": "setProxyPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + }, + { + "internalType": "address", + "name": "_imp", + "type": "address" + } + ], + "name": "setSelectorImplementations2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakingv2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tosBacking", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalPercents", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferPolicyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "transferProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wethAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60c0604052601660808190527f54726561737572793a206e6f742061636365707465640000000000000000000060a09081526200004091600091906200028e565b506040805180820190915260168082527f54726561737572793a206e6f7420617070726f76656400000000000000000000602090920191825262000087916001916200028e565b506040805180820190915260178082527f54726561737572793a20696e76616c696420746f6b656e0000000000000000006020909201918252620000ce916002916200028e565b5060408051808201909152601f8082527f54726561737572793a20696e73756666696369656e7420726573657276657300602090920191825262000115916003916200028e565b503480156200012357600080fd5b50620001507f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130806200018f565b6200017c7f52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b13033620001da565b62000189600033620001da565b62000371565b600082815260176020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620001e68282620001ea565b5050565b60008281526017602090815260408083206001600160a01b038516845290915290205460ff16620001e65760008281526017602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200024a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200029c9062000334565b90600052602060002090601f016020900481019282620002c057600085556200030b565b82601f10620002db57805160ff19168380011785556200030b565b828001600101855582156200030b579182015b828111156200030b578251825591602001919060010190620002ee565b50620003199291506200031d565b5090565b5b808211156200031957600081556001016200031e565b600181811c908216806200034957607f821691505b602082108114156200036b57634e487b7160e01b600052602260045260246000fd5b50919050565b6121ca80620003816000396000f3fe60806040526004361061027f5760003560e01c806301ffc9a7146102905780631460e390146102c55780631bb5e2dc146102e55780632298524614610313578063248a9ca31461033557806324d7806c14610355578063282c51f3146103755780632f2ff15d146103a9578063330dd345146103c957806336568abe146104045780633659cfe6146104245780633f9ea9ee1461044457806341c04d5e1461045a5780634a5df50f1461047c5780634f0e0ef31461049c57806350d2a276146104d4578063550d01a31461050a5780635b5491821461053a5780635c60da1b1461055a5780635cc797d81461056f57806363a8fd891461058f57806365cb3a83146105a957806370480275146105be57806375829def146105de57806375b238fc146105fe57806376f2766c146106325780637cb00d25146106715780637cd5f663146106915780638356ca4f146106b15780638b8f4a65146106d15780638d4fdb40146106f15780638d71bc5b1461071157806391d148541461073157806396f1557c14610751578063986873a0146107715780639a202d4714610791578063a217fddf146107a6578063a44b8287146107bb578063b2749bca146107db578063b84ef081146107f1578063b911135f14610811578063be72f2d314610847578063ca0dcf161461085c578063ce3e39c014610872578063d1d823fa14610892578063d5391393146108a8578063d547741f146108dc578063da9c8864146108fc578063e9e33e1614610947578063f1c8c9221461095d578063f3e291fb1461097d578063f47f2f1d14610993578063f8646408146109b3578063f908ed37146109d3578063fad1c85c146109e9578063ff86f06114610a0957610286565b3661028657005b61028e610a36565b005b34801561029c57600080fd5b506102b06102ab366004611e09565b610ae4565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004611c55565b610b1b565b3480156102f157600080fd5b50610305610300366004611dcf565b610d3d565b6040519081526020016102bc565b34801561031f57600080fd5b5061030560008051602061215583398151915281565b34801561034157600080fd5b50610305610350366004611dcf565b610d5e565b34801561036157600080fd5b506102b0610370366004611c3b565b610d73565b34801561038157600080fd5b506103057f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b3480156103b557600080fd5b5061028e6103c4366004611de7565b610d8d565b3480156103d557600080fd5b506102b06103e4366004611e31565b600760209081526000928352604080842090915290825290205460ff1681565b34801561041057600080fd5b5061028e61041f366004611de7565b610daa565b34801561043057600080fd5b5061028e61043f366004611c3b565b610e28565b34801561045057600080fd5b5061030560115481565b34801561046657600080fd5b5061030560008051602061213583398151915281565b34801561048857600080fd5b5061028e610497366004611d40565b610f2e565b3480156104a857600080fd5b506008546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016102bc565b3480156104e057600080fd5b506104bc6104ef366004611e09565b601b602052600090815260409020546001600160a01b031681565b34801561051657600080fd5b506102b0610525366004611c3b565b601a6020526000908152604090205460ff1681565b34801561054657600080fd5b506009546104bc906001600160a01b031681565b34801561056657600080fd5b506104bc6111b6565b34801561057b57600080fd5b5061028e61058a366004611cd3565b6111c7565b34801561059b57600080fd5b506018546102b09060ff1681565b3480156105b557600080fd5b5061028e6111f6565b3480156105ca57600080fd5b5061028e6105d9366004611c3b565b611235565b3480156105ea57600080fd5b5061028e6105f9366004611c3b565b611275565b34801561060a57600080fd5b506103057fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561063e57600080fd5b5061065261064d366004611dcf565b611328565b604080516001600160a01b0390931683526020830191909152016102bc565b34801561067d57600080fd5b5061028e61068c366004611db5565b611360565b34801561069d57600080fd5b5061028e6106ac366004611d05565b6113a7565b3480156106bd57600080fd5b5061028e6106cc366004611c3b565b6113d7565b3480156106dd57600080fd5b506104bc6106ec366004611dcf565b611461565b3480156106fd57600080fd5b506104bc61070c366004611e09565b61146c565b34801561071d57600080fd5b50600b546104bc906001600160a01b031681565b34801561073d57600080fd5b506102b061074c366004611de7565b611544565b34801561075d57600080fd5b5061028e61076c366004611c3b565b61156f565b34801561077d57600080fd5b50600a546104bc906001600160a01b031681565b34801561079d57600080fd5b5061028e61159f565b3480156107b257600080fd5b50610305600081565b3480156107c757600080fd5b506104bc6107d6366004611e5a565b6115eb565b3480156107e757600080fd5b5061030560125481565b3480156107fd57600080fd5b5061028e61080c366004611c3b565b611623565b34801561081d57600080fd5b506104bc61082c366004611dcf565b6019602052600090815260409020546001600160a01b031681565b34801561085357600080fd5b5061028e611660565b34801561086857600080fd5b50610305600f5481565b34801561087e57600080fd5b506005546104bc906001600160a01b031681565b34801561089e57600080fd5b50610305600e5481565b3480156108b457600080fd5b506103057ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156108e857600080fd5b5061028e6108f7366004611de7565b611690565b34801561090857600080fd5b5061091c610917366004611dcf565b6116ad565b604080516001600160a01b03948516815293909216602084015262ffffff16908201526060016102bc565b34801561095357600080fd5b50610305600c5481565b34801561096957600080fd5b5061028e610978366004611c3b565b6116f5565b34801561098957600080fd5b50610305600d5481565b34801561099f57600080fd5b506102b06109ae366004611c3b565b611799565b3480156109bf57600080fd5b506004546104bc906001600160a01b031681565b3480156109df57600080fd5b5061030560105481565b3480156109f557600080fd5b506102b0610a04366004611c3b565b6117a5565b348015610a1557600080fd5b50610305610a24366004611c3b565b60146020526000908152604090205481565b6000610a4d6000356001600160e01b03191661146c565b90506001600160a01b03811615801590610a6a575060185460ff16155b610abb5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610ada573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610b1557506301ffc9a760e01b6001600160e01b03198316145b92915050565b866001600160a01b038116610b425760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610b695760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610b905760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610bb75760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610bde5760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610c055760405162461bcd60e51b8152600401610ab290611f25565b8680610c495760405162461bcd60e51b8152602060048201526013602482015272151c99585cdd5c9e4e881e995c9bc81d5a5b9d606a1b6044820152606401610ab2565b610c5233611799565b610c6e5760405162461bcd60e51b8152600401610ab290611fc8565b6004546001600160a01b031615610cbd5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610ab2565b5050600480546001600160a01b03199081166001600160a01b039e8f16179091556005805482169c8e169c909c17909b555050600880548a16988b16989098179097555050600980548716948816949094179093556001601055600a8054861692871692909217909155600b805490941694169390931790915550601155565b60168181548110610d4d57600080fd5b600091825260209091200154905081565b60009081526017602052604090206001015490565b6000610b1560008051602061213583398151915283611544565b610d9682610d5e565b610da081336117bf565b610adf8383611823565b6001600160a01b0381163314610e1a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ab2565b610e2482826118a9565b5050565b610e3133611799565b610e4d5760405162461bcd60e51b8152600401610ab290611fc8565b6001600160a01b038116610e935760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b6044820152606401610ab2565b806001600160a01b0316610ea76000611910565b6001600160a01b03161415610eea5760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610ab2565b610ef7816000600161192b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610f3733611799565b610f535760405162461bcd60e51b8152600401610ab290611fc8565b81610fa05760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610ab2565b6001600160a01b0381166000908152601a602052604090205460ff166110035760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b6044820152606401610ab2565b60005b828110156111b057816001600160a01b0316601b600086868581811061103c57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110519190611e09565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031614156110c35760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610ab2565b81601b60008686858181106110e857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110fd9190611e09565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061115357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111689190611e09565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806111a881612103565b915050611006565b50505050565b60006111c26000611910565b905090565b6111d033611799565b6111ec5760405162461bcd60e51b8152600401610ab290611fc8565b610e2482826119b4565b6111ff336117a5565b61121b5760405162461bcd60e51b8152600401610ab290612040565b61123360008051602061215583398151915233610daa565b565b61123e33611799565b61125a5760405162461bcd60e51b8152600401610ab290611fc8565b61127260008051602061213583398151915282610d8d565b50565b61127e33610d73565b8061128d575061128d33611799565b6112a95760405162461bcd60e51b8152600401610ab290611f54565b6001600160a01b0381166112cf5760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b03821614156112f85760405162461bcd60e51b8152600401610ab290612010565b61131060008051602061213583398151915282610d8d565b61127260008051602061213583398151915233610daa565b6015818154811061133857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b61136933610d73565b80611378575061137833611799565b6113945760405162461bcd60e51b8152600401610ab290611f54565b6018805460ff1916911515919091179055565b6113b033611799565b6113cc5760405162461bcd60e51b8152600401610ab290611fc8565b610adf83838361192b565b6113e033611799565b6113fc5760405162461bcd60e51b8152600401610ab290611fc8565b6001600160a01b0381166114225760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b038216141561144b5760405162461bcd60e51b8152600401610ab290612010565b611456600082610d8d565b611272600033610daa565b6000610b1582611910565b6001600160e01b031981166000908152601b60205260408120546001600160a01b03166114ba575050600080526019602052600080516020612175833981519152546001600160a01b031690565b6001600160e01b031982166000908152601b60209081526040808320546001600160a01b03168352601a90915290205460ff161561151857506001600160e01b0319166000908152601b60205260409020546001600160a01b031690565b5050600080526019602052600080516020612175833981519152546001600160a01b031690565b919050565b60009182526017602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61157833611799565b6115945760405162461bcd60e51b8152600401610ab290611fc8565b611272600082611a13565b6115a833610d73565b806115b757506115b733611799565b6115d35760405162461bcd60e51b8152600401610ab290611f54565b61123360008051602061213583398151915233610daa565b6006602052816000526040600020818154811061160757600080fd5b6000918252602090912001546001600160a01b03169150829050565b61162c33611799565b6116485760405162461bcd60e51b8152600401610ab290611fc8565b61127260008051602061215583398151915282610d8d565b61166933611799565b6116855760405162461bcd60e51b8152600401610ab290611fc8565b611233600033610daa565b61169982610d5e565b6116a381336117bf565b610adf83836118a9565b601381815481106116bd57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900462ffffff1683565b6116fe336117a5565b61171a5760405162461bcd60e51b8152600401610ab290612040565b6001600160a01b0381166117405760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b03821614156117695760405162461bcd60e51b8152600401610ab290612010565b61178160008051602061215583398151915282610d8d565b61127260008051602061215583398151915233610daa565b6000610b158183611544565b6000610b1560008051602061215583398151915283611544565b6117c98282611544565b610e24576117e1816001600160a01b03166014611a1d565b6117ec836020611a1d565b6040516020016117fd929190611e83565b60408051601f198184030181529082905262461bcd60e51b8252610ab291600401611ef2565b61182d8282611544565b610e245760008281526017602090815260408083206001600160a01b03851684529091529020805460ff191660011790556118653390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6118b38282611544565b15610e245760008281526017602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601960205260409020546001600160a01b031690565b6001600160a01b0383163b6119805760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b6044820152606401610ab2565b80156119ae57600082815260196020526040902080546001600160a01b0319166001600160a01b0385161790555b610adf83825b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610e248282611823565b60606000611a2c8360026120a1565b611a37906002612089565b6001600160401b03811115611a5c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a86576020820181803683370190505b509050600360fc1b81600081518110611aaf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611aec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611b108460026120a1565b611b1b906001612089565b90505b6001811115611baf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b5d57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611b8157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611ba8816120ec565b9050611b1e565b508315611bfe5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ab2565b9392505050565b80356001600160a01b038116811461153f57600080fd5b8035801515811461153f57600080fd5b8035600b811061153f57600080fd5b600060208284031215611c4c578081fd5b611bfe82611c05565b600080600080600080600060e0888a031215611c6f578283fd5b611c7888611c05565b9650611c8660208901611c05565b9550611c9460408901611c05565b9450611ca260608901611c05565b9350611cb060808901611c05565b9250611cbe60a08901611c05565b915060c0880135905092959891949750929550565b60008060408385031215611ce5578182fd5b611cee83611c05565b9150611cfc60208401611c1c565b90509250929050565b600080600060608486031215611d19578283fd5b611d2284611c05565b925060208401359150611d3760408501611c1c565b90509250925092565b600080600060408486031215611d54578283fd5b83356001600160401b0380821115611d6a578485fd5b818601915086601f830112611d7d578485fd5b813581811115611d8b578586fd5b8760208260051b8501011115611d9f578586fd5b602092830195509350611d379186019050611c05565b600060208284031215611dc6578081fd5b611bfe82611c1c565b600060208284031215611de0578081fd5b5035919050565b60008060408385031215611df9578182fd5b82359150611cfc60208401611c05565b600060208284031215611e1a578081fd5b81356001600160e01b031981168114611bfe578182fd5b60008060408385031215611e43578182fd5b611e4c83611c2c565b9150611cfc60208401611c05565b60008060408385031215611e6c578182fd5b611e7583611c2c565b946020939093013593505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611eb58160178501602088016120c0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ee68160288401602088016120c0565b01602801949350505050565b6020815260008251806020840152611f118160408501602087016120c0565b601f01601f19169190910160400192915050565b60208082526015908201527454726561737572793a7a65726f206164647265737360581b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6000821982111561209c5761209c61211e565b500190565b60008160001904831182151516156120bb576120bb61211e565b500290565b60005b838110156120db5781810151838201526020016120c3565b838111156111b05750506000910152565b6000816120fb576120fb61211e565b506000190190565b60006000198214156121175761211761211e565b5060010190565b634e487b7160e01b600052601160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311d2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b2a26469706673582212203138d3b100cbb274e54872c91a00093384dd8058bc6504f72a77a2019c07240264736f6c63430008040033", + "deployedBytecode": "0x60806040526004361061027f5760003560e01c806301ffc9a7146102905780631460e390146102c55780631bb5e2dc146102e55780632298524614610313578063248a9ca31461033557806324d7806c14610355578063282c51f3146103755780632f2ff15d146103a9578063330dd345146103c957806336568abe146104045780633659cfe6146104245780633f9ea9ee1461044457806341c04d5e1461045a5780634a5df50f1461047c5780634f0e0ef31461049c57806350d2a276146104d4578063550d01a31461050a5780635b5491821461053a5780635c60da1b1461055a5780635cc797d81461056f57806363a8fd891461058f57806365cb3a83146105a957806370480275146105be57806375829def146105de57806375b238fc146105fe57806376f2766c146106325780637cb00d25146106715780637cd5f663146106915780638356ca4f146106b15780638b8f4a65146106d15780638d4fdb40146106f15780638d71bc5b1461071157806391d148541461073157806396f1557c14610751578063986873a0146107715780639a202d4714610791578063a217fddf146107a6578063a44b8287146107bb578063b2749bca146107db578063b84ef081146107f1578063b911135f14610811578063be72f2d314610847578063ca0dcf161461085c578063ce3e39c014610872578063d1d823fa14610892578063d5391393146108a8578063d547741f146108dc578063da9c8864146108fc578063e9e33e1614610947578063f1c8c9221461095d578063f3e291fb1461097d578063f47f2f1d14610993578063f8646408146109b3578063f908ed37146109d3578063fad1c85c146109e9578063ff86f06114610a0957610286565b3661028657005b61028e610a36565b005b34801561029c57600080fd5b506102b06102ab366004611e09565b610ae4565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004611c55565b610b1b565b3480156102f157600080fd5b50610305610300366004611dcf565b610d3d565b6040519081526020016102bc565b34801561031f57600080fd5b5061030560008051602061215583398151915281565b34801561034157600080fd5b50610305610350366004611dcf565b610d5e565b34801561036157600080fd5b506102b0610370366004611c3b565b610d73565b34801561038157600080fd5b506103057f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b3480156103b557600080fd5b5061028e6103c4366004611de7565b610d8d565b3480156103d557600080fd5b506102b06103e4366004611e31565b600760209081526000928352604080842090915290825290205460ff1681565b34801561041057600080fd5b5061028e61041f366004611de7565b610daa565b34801561043057600080fd5b5061028e61043f366004611c3b565b610e28565b34801561045057600080fd5b5061030560115481565b34801561046657600080fd5b5061030560008051602061213583398151915281565b34801561048857600080fd5b5061028e610497366004611d40565b610f2e565b3480156104a857600080fd5b506008546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016102bc565b3480156104e057600080fd5b506104bc6104ef366004611e09565b601b602052600090815260409020546001600160a01b031681565b34801561051657600080fd5b506102b0610525366004611c3b565b601a6020526000908152604090205460ff1681565b34801561054657600080fd5b506009546104bc906001600160a01b031681565b34801561056657600080fd5b506104bc6111b6565b34801561057b57600080fd5b5061028e61058a366004611cd3565b6111c7565b34801561059b57600080fd5b506018546102b09060ff1681565b3480156105b557600080fd5b5061028e6111f6565b3480156105ca57600080fd5b5061028e6105d9366004611c3b565b611235565b3480156105ea57600080fd5b5061028e6105f9366004611c3b565b611275565b34801561060a57600080fd5b506103057fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b34801561063e57600080fd5b5061065261064d366004611dcf565b611328565b604080516001600160a01b0390931683526020830191909152016102bc565b34801561067d57600080fd5b5061028e61068c366004611db5565b611360565b34801561069d57600080fd5b5061028e6106ac366004611d05565b6113a7565b3480156106bd57600080fd5b5061028e6106cc366004611c3b565b6113d7565b3480156106dd57600080fd5b506104bc6106ec366004611dcf565b611461565b3480156106fd57600080fd5b506104bc61070c366004611e09565b61146c565b34801561071d57600080fd5b50600b546104bc906001600160a01b031681565b34801561073d57600080fd5b506102b061074c366004611de7565b611544565b34801561075d57600080fd5b5061028e61076c366004611c3b565b61156f565b34801561077d57600080fd5b50600a546104bc906001600160a01b031681565b34801561079d57600080fd5b5061028e61159f565b3480156107b257600080fd5b50610305600081565b3480156107c757600080fd5b506104bc6107d6366004611e5a565b6115eb565b3480156107e757600080fd5b5061030560125481565b3480156107fd57600080fd5b5061028e61080c366004611c3b565b611623565b34801561081d57600080fd5b506104bc61082c366004611dcf565b6019602052600090815260409020546001600160a01b031681565b34801561085357600080fd5b5061028e611660565b34801561086857600080fd5b50610305600f5481565b34801561087e57600080fd5b506005546104bc906001600160a01b031681565b34801561089e57600080fd5b50610305600e5481565b3480156108b457600080fd5b506103057ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156108e857600080fd5b5061028e6108f7366004611de7565b611690565b34801561090857600080fd5b5061091c610917366004611dcf565b6116ad565b604080516001600160a01b03948516815293909216602084015262ffffff16908201526060016102bc565b34801561095357600080fd5b50610305600c5481565b34801561096957600080fd5b5061028e610978366004611c3b565b6116f5565b34801561098957600080fd5b50610305600d5481565b34801561099f57600080fd5b506102b06109ae366004611c3b565b611799565b3480156109bf57600080fd5b506004546104bc906001600160a01b031681565b3480156109df57600080fd5b5061030560105481565b3480156109f557600080fd5b506102b0610a04366004611c3b565b6117a5565b348015610a1557600080fd5b50610305610a24366004611c3b565b60146020526000908152604090205481565b6000610a4d6000356001600160e01b03191661146c565b90506001600160a01b03811615801590610a6a575060185460ff16155b610abb5760405162461bcd60e51b815260206004820152601d60248201527f50726f78793a20696d706c204f522070726f78792069732066616c736500000060448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610ada573d6000f35b3d6000fd5b505050565b60006001600160e01b03198216637965db0b60e01b1480610b1557506301ffc9a760e01b6001600160e01b03198316145b92915050565b866001600160a01b038116610b425760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610b695760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610b905760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610bb75760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610bde5760405162461bcd60e51b8152600401610ab290611f25565b866001600160a01b038116610c055760405162461bcd60e51b8152600401610ab290611f25565b8680610c495760405162461bcd60e51b8152602060048201526013602482015272151c99585cdd5c9e4e881e995c9bc81d5a5b9d606a1b6044820152606401610ab2565b610c5233611799565b610c6e5760405162461bcd60e51b8152600401610ab290611fc8565b6004546001600160a01b031615610cbd5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610ab2565b5050600480546001600160a01b03199081166001600160a01b039e8f16179091556005805482169c8e169c909c17909b555050600880548a16988b16989098179097555050600980548716948816949094179093556001601055600a8054861692871692909217909155600b805490941694169390931790915550601155565b60168181548110610d4d57600080fd5b600091825260209091200154905081565b60009081526017602052604090206001015490565b6000610b1560008051602061213583398151915283611544565b610d9682610d5e565b610da081336117bf565b610adf8383611823565b6001600160a01b0381163314610e1a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ab2565b610e2482826118a9565b5050565b610e3133611799565b610e4d5760405162461bcd60e51b8152600401610ab290611fc8565b6001600160a01b038116610e935760405162461bcd60e51b815260206004820152600d60248201526c696e707574206973207a65726f60981b6044820152606401610ab2565b806001600160a01b0316610ea76000611910565b6001600160a01b03161415610eea5760405162461bcd60e51b815260206004820152600960248201526839b0b6b29030b2323960b91b6044820152606401610ab2565b610ef7816000600161192b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b610f3733611799565b610f535760405162461bcd60e51b8152600401610ab290611fc8565b81610fa05760405162461bcd60e51b815260206004820181905260248201527f50726f78793a205f73656c6563746f727327732073697a65206973207a65726f6044820152606401610ab2565b6001600160a01b0381166000908152601a602052604090205460ff166110035760405162461bcd60e51b815260206004820152601860248201527750726f78793a205f696d70206973206e6f7420616c69766560401b6044820152606401610ab2565b60005b828110156111b057816001600160a01b0316601b600086868581811061103c57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110519190611e09565b6001600160e01b03191681526020810191909152604001600020546001600160a01b031614156110c35760405162461bcd60e51b815260206004820152601d60248201527f4c69717569646974795661756c7450726f78793a2073616d6520696d700000006044820152606401610ab2565b81601b60008686858181106110e857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110fd9190611e09565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055821684848381811061115357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111689190611e09565b6001600160e01b0319167f14ebc1c32aa68f4d766e89f3e546cee249f7df25183fc10ab1568d91c2ce9b7b60405160405180910390a3806111a881612103565b915050611006565b50505050565b60006111c26000611910565b905090565b6111d033611799565b6111ec5760405162461bcd60e51b8152600401610ab290611fc8565b610e2482826119b4565b6111ff336117a5565b61121b5760405162461bcd60e51b8152600401610ab290612040565b61123360008051602061215583398151915233610daa565b565b61123e33611799565b61125a5760405162461bcd60e51b8152600401610ab290611fc8565b61127260008051602061213583398151915282610d8d565b50565b61127e33610d73565b8061128d575061128d33611799565b6112a95760405162461bcd60e51b8152600401610ab290611f54565b6001600160a01b0381166112cf5760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b03821614156112f85760405162461bcd60e51b8152600401610ab290612010565b61131060008051602061213583398151915282610d8d565b61127260008051602061213583398151915233610daa565b6015818154811061133857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b61136933610d73565b80611378575061137833611799565b6113945760405162461bcd60e51b8152600401610ab290611f54565b6018805460ff1916911515919091179055565b6113b033611799565b6113cc5760405162461bcd60e51b8152600401610ab290611fc8565b610adf83838361192b565b6113e033611799565b6113fc5760405162461bcd60e51b8152600401610ab290611fc8565b6001600160a01b0381166114225760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b038216141561144b5760405162461bcd60e51b8152600401610ab290612010565b611456600082610d8d565b611272600033610daa565b6000610b1582611910565b6001600160e01b031981166000908152601b60205260408120546001600160a01b03166114ba575050600080526019602052600080516020612175833981519152546001600160a01b031690565b6001600160e01b031982166000908152601b60209081526040808320546001600160a01b03168352601a90915290205460ff161561151857506001600160e01b0319166000908152601b60205260409020546001600160a01b031690565b5050600080526019602052600080516020612175833981519152546001600160a01b031690565b919050565b60009182526017602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61157833611799565b6115945760405162461bcd60e51b8152600401610ab290611fc8565b611272600082611a13565b6115a833610d73565b806115b757506115b733611799565b6115d35760405162461bcd60e51b8152600401610ab290611f54565b61123360008051602061213583398151915233610daa565b6006602052816000526040600020818154811061160757600080fd5b6000918252602090912001546001600160a01b03169150829050565b61162c33611799565b6116485760405162461bcd60e51b8152600401610ab290611fc8565b61127260008051602061215583398151915282610d8d565b61166933611799565b6116855760405162461bcd60e51b8152600401610ab290611fc8565b611233600033610daa565b61169982610d5e565b6116a381336117bf565b610adf83836118a9565b601381815481106116bd57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900462ffffff1683565b6116fe336117a5565b61171a5760405162461bcd60e51b8152600401610ab290612040565b6001600160a01b0381166117405760405162461bcd60e51b8152600401610ab290611f96565b336001600160a01b03821614156117695760405162461bcd60e51b8152600401610ab290612010565b61178160008051602061215583398151915282610d8d565b61127260008051602061215583398151915233610daa565b6000610b158183611544565b6000610b1560008051602061215583398151915283611544565b6117c98282611544565b610e24576117e1816001600160a01b03166014611a1d565b6117ec836020611a1d565b6040516020016117fd929190611e83565b60408051601f198184030181529082905262461bcd60e51b8252610ab291600401611ef2565b61182d8282611544565b610e245760008281526017602090815260408083206001600160a01b03851684529091529020805460ff191660011790556118653390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6118b38282611544565b15610e245760008281526017602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000908152601960205260409020546001600160a01b031690565b6001600160a01b0383163b6119805760405162461bcd60e51b815260206004820152601b60248201527a50726f78793a206e6f7420636f6e7472616374206164647265737360281b6044820152606401610ab2565b80156119ae57600082815260196020526040902080546001600160a01b0319166001600160a01b0385161790555b610adf83825b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f72558d9bfba4210f9ef095c782589484151f6d90f7a81bb3cb9b33efc695d324910160405180910390a25050565b610e248282611823565b60606000611a2c8360026120a1565b611a37906002612089565b6001600160401b03811115611a5c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a86576020820181803683370190505b509050600360fc1b81600081518110611aaf57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611aec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611b108460026120a1565b611b1b906001612089565b90505b6001811115611baf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b5d57634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611b8157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611ba8816120ec565b9050611b1e565b508315611bfe5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ab2565b9392505050565b80356001600160a01b038116811461153f57600080fd5b8035801515811461153f57600080fd5b8035600b811061153f57600080fd5b600060208284031215611c4c578081fd5b611bfe82611c05565b600080600080600080600060e0888a031215611c6f578283fd5b611c7888611c05565b9650611c8660208901611c05565b9550611c9460408901611c05565b9450611ca260608901611c05565b9350611cb060808901611c05565b9250611cbe60a08901611c05565b915060c0880135905092959891949750929550565b60008060408385031215611ce5578182fd5b611cee83611c05565b9150611cfc60208401611c1c565b90509250929050565b600080600060608486031215611d19578283fd5b611d2284611c05565b925060208401359150611d3760408501611c1c565b90509250925092565b600080600060408486031215611d54578283fd5b83356001600160401b0380821115611d6a578485fd5b818601915086601f830112611d7d578485fd5b813581811115611d8b578586fd5b8760208260051b8501011115611d9f578586fd5b602092830195509350611d379186019050611c05565b600060208284031215611dc6578081fd5b611bfe82611c1c565b600060208284031215611de0578081fd5b5035919050565b60008060408385031215611df9578182fd5b82359150611cfc60208401611c05565b600060208284031215611e1a578081fd5b81356001600160e01b031981168114611bfe578182fd5b60008060408385031215611e43578182fd5b611e4c83611c2c565b9150611cfc60208401611c05565b60008060408385031215611e6c578182fd5b611e7583611c2c565b946020939093013593505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351611eb58160178501602088016120c0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ee68160288401602088016120c0565b01602801949350505050565b6020815260008251806020840152611f118160408501602087016120c0565b601f01601f19169190910160400192915050565b60208082526015908201527454726561737572793a7a65726f206164647265737360581b604082015260600190565b60208082526022908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2061646d60408201526134b760f11b606082015260800190565b60208082526018908201527741636365737369626c653a207a65726f206164647265737360401b604082015260600190565b60208082526028908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e2070726f6040820152673c3c9030b236b4b760c11b606082015260800190565b60208082526016908201527520b1b1b2b9b9b4b136329d1039b0b6b29030b236b4b760511b604082015260600190565b60208082526029908201527f41636365737369626c653a2043616c6c6572206973206e6f7420616e20706f6c60408201526834b1bc9030b236b4b760b91b606082015260800190565b6000821982111561209c5761209c61211e565b500190565b60008160001904831182151516156120bb576120bb61211e565b500290565b60005b838110156120db5781810151838201526020016120c3565b838111156111b05750506000910152565b6000816120fb576120fb61211e565b506000190190565b60006000198214156121175761211761211e565b5060010190565b634e487b7160e01b600052601160045260246000fdfe52eafc11f6f81f86878bffd31109a0d92f37506527754f00788853ff9f63b130fb5864e8ff833c3cb2d2d08505e82ff02a43554c74a35d4f5a64e85261278311d2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b2a26469706673582212203138d3b100cbb274e54872c91a00093384dd8058bc6504f72a77a2019c07240264736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/data/tosv2/data.json b/contracts/data/tosv2/data.json index 2d9b203..0fec66d 100644 --- a/contracts/data/tosv2/data.json +++ b/contracts/data/tosv2/data.json @@ -6,6 +6,7 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x69b4A202Fa4039B42ab23ADB725aA7b1e9EEBD79", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" @@ -17,6 +18,7 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x8Fb966Bfb690a8304a5CdE54d9Ed6F7645b26576", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" diff --git a/contracts/src/trimAbis.ts b/contracts/src/trimAbis.ts index 6ee796b..8580229 100644 --- a/contracts/src/trimAbis.ts +++ b/contracts/src/trimAbis.ts @@ -23,23 +23,16 @@ const trimAbis = () => { 'utf8', (err) => { if (err) { - console.error(`Error writing JSON file :`, err) + console.error(`Error writing JSON file : ${abiFileName}`, err) } else { - console.log(`JSON file has been written successfully.`) + console.log(`${abiFileName}.json has been written successfully.`) } } ) } - // if (firstChar !== '[') { - // fs.writeFile( - // path.join(__dirname, `${abi}.json`), - // JSON.stringify(abi.abi), - // 'utf8', - // (err) => {} - // ) - // } } } + console.log('****Process to trim abis is done.****') } trimAbis() diff --git a/contracts/tokamak.contractlist.json b/contracts/tokamak.contractlist.json index d0d0254..3a52ca7 100644 --- a/contracts/tokamak.contractlist.json +++ b/contracts/tokamak.contractlist.json @@ -8,15 +8,10 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x69b4A202Fa4039B42ab23ADB725aA7b1e9EEBD79", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", - "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x1F98431c8aD98523631AE4a59f267346ea31F984", - "QUOTER_CONTRACT_ADDRESS": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", - "SWAP_ROUTER_ADDRESS": "0xE592427A0AEce92De3Edee1F18E0157C05861564", - "SWAP_ROUTER_ADDRESS2": "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", - "NONFUNGIBLE_POSITION_MANAGER": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", - "UNIVERSIAL_ROUTER": "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad" + "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" }, "5": { "L1StandardBridge": "0x7377F3D0F64d7a54Cf367193eb74a052ff8578FD", @@ -29,13 +24,7 @@ "L1ProjectManager": "0x8756873b21545FD49056A6a2a7a06D3dA388FEB9", "L1ProjectManagerProxy": "0x3eD0776A8E323a294cd704c02a349ca1B83554da", "L1StosToL2": "0x55D09E4139277c1957F1b8DF5372a12f8e490990", - "L1StosToL2Proxy": "0x25280A873ef2702fF581260a7e15F246A3c52Efb", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x1F98431c8aD98523631AE4a59f267346ea31F984", - "QUOTER_CONTRACT_ADDRESS": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", - "SWAP_ROUTER_ADDRESS": "0xE592427A0AEce92De3Edee1F18E0157C05861564", - "SWAP_ROUTER_ADDRESS2": "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", - "NONFUNGIBLE_POSITION_MANAGER": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", - "UNIVERSIAL_ROUTER": "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad" + "L1StosToL2Proxy": "0x25280A873ef2702fF581260a7e15F246A3c52Efb" }, "5050": { "L2StandardBridge": "0x4200000000000000000000000000000000000010", @@ -53,7 +42,7 @@ "L1StosInL2": "0x5c8ee41536721D2e31352259D3A84419B09d716F", "L1StosInL2Proxy": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", "LockIdNftForRegister": "0x48f60aAf60D5E162b2DebFD4F70c88fE01b7c331", - "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b116342138", + "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b1163421385", "L2UniversalStos": "0xF9d75D5814e1C3D734342bD5Ed0637b9c49c3f69", "L2UniversalStosProxy": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", "L2DividendPoolForStos": "0x310AeC1C6Ab68DD1DB4bf9B885835BD73BdEb958", @@ -61,24 +50,10 @@ "L2AirdropStosVault": "0xfd0c0AA6505125eFab34A2195F1b9C99AFE8fB06", "L2AirdropStosVaultProxy": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", "L2AirdropTonVault": "0x8Ee62Ba51D361F860c0A65C01b9d50dc031d7f5d", - "L2AirdropTonVaultProxy": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x2Ae8FeE7B4f4ef27088fa8a550C91A045A3128b5", - "QUOTER_CONTRACT_ADDRESS": "0x32cdAd6cd559EcFE87Be49167F2F68A1Df08c9E9", - "SWAP_ROUTER_ADDRESS": "0x0DD8EA3A5A8900CE36A7302E600C4B8A3ef23B8d", - "SWAP_ROUTER_ADDRESS2": "0x2032206029B014233c3130CF3dc740Cd7fAAAa2d", - "NONFUNGIBLE_POSITION_MANAGER": "0x2F54b0f87e7cE7C4FA13BFd21DE6D868d1836B8C", - "UNIVERSIAL_ROUTER": "0x159a4218c245557d6db59A5D8de9db8348F98155", - "TICK_LENS": "0x7bc3e9BeDB9f7A9a1b901b3FE6AAa7930f08f7AA" + "L2AirdropTonVaultProxy": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb" }, "55004": { - "L2StandardBridge": "0x4200000000000000000000000000000000000010", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x755Ba335013C07CE35C9A2dd5746617Ac4c6c799", - "QUOTER_CONTRACT_ADDRESS": "0xAd6c4B17ae46D70D5FA8649fE9387Bc361bB9FDb", - "SWAP_ROUTER_ADDRESS": "0xE15204fd488C33C26FF56efF14997Da8997E58Bf", - "SWAP_ROUTER_ADDRESS2": "0x758FD95dCEc6F7DbA6A957C9eEaa1d8859D0B3dF", - "NONFUNGIBLE_POSITION_MANAGER": "0xfAFc55Bcdc6e7a74C21DD51531D14e5DD9f29613", - "UNIVERSIAL_ROUTER": "0x5731FFdA58ff57F5211a675FD4709Da5Fd6B9775", - "TICK_LENS": "0xCcD40170Ad931A47a92Be55d618DbdD1E4A82BDA" + "L2StandardBridge": "0x4200000000000000000000000000000000000010" }, "1155511": { "BondDepository": "0xbBe7881cC14a509FD8F53Ce650fE065C385d98D7", @@ -87,17 +62,9 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x8Fb966Bfb690a8304a5CdE54d9Ed6F7645b26576", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" - }, - "11155111": { - "POOL_FACTORY_CONTRACT_ADDRESS": "0x0227628f3F023bb0B980b67D528571c95c6DaC1c", - "QUOTER_CONTRACT_ADDRESS": "0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3", - "SWAP_ROUTER_ADDRESS": "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E", - "SWAP_ROUTER_ADDRESS2": "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E", - "NONFUNGIBLE_POSITION_MANAGER": "0x1238536071E1c677A632429e3655c799b22cDA52", - "UNIVERSIAL_ROUTER": "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD", - "TICK_LENS": "0xd7f33bcdb21b359c8ee6f0251d30e94832baad07" } } \ No newline at end of file diff --git a/src/utils/coercion.ts b/src/utils/coercion.ts index a9d620e..5064c04 100644 --- a/src/utils/coercion.ts +++ b/src/utils/coercion.ts @@ -61,10 +61,10 @@ export const toNumber = (num: NumberLike): number => { */ export const toAddress = (addr: AddressLike): string => { if (typeof addr === 'string') { - assert(ethers.utils.isAddress(addr), 'Invalid address') + assert(ethers.utils.isAddress(addr), `${addr} : Invalid address`) return ethers.utils.getAddress(addr) } else { - assert(ethers.utils.isAddress(addr.address), 'Invalid address') + assert(ethers.utils.isAddress(addr.address), `${addr} : Invalid address`) return ethers.utils.getAddress(addr.address) } } diff --git a/src/utils/contract.ts b/src/utils/contract.ts index f1c14cd..ca8fc0b 100644 --- a/src/utils/contract.ts +++ b/src/utils/contract.ts @@ -112,11 +112,11 @@ export const getAllContracts = ( const addresses: L1Contracts | L2Contracts = CONTRACT_ADDRESSES[chainId] || undefined - console.log('addresses', addresses) - // Attach all L1 contracts. const contracts = {} as L1Contracts | L2Contracts for (const [contractName, contractAddress] of Object.entries(addresses)) { + console.log('******************') + console.log(contractName, contractAddress) contracts[contractName] = getContract( contractName as keyof L1Contracts, chainId, @@ -125,7 +125,6 @@ export const getAllContracts = ( signerOrProvider: opts.signerOrProvider, } ) - console.log(contracts) } return contracts diff --git a/test/index.test.ts b/test/index.test.ts index 8053abe..a8260c2 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -19,8 +19,8 @@ const getABI = (fileType) => { const init = () => { // console.log(getABI('L1Bridge')) - const d = new TitanSDK({ chainId: 5050, signerOrProvider: '' }) - console.log(d) + const sdk = new TitanSDK({ chainId: 5050, signerOrProvider: '' }) + console.log(sdk.contracts) } init() diff --git a/tokamak.contractlist.json b/tokamak.contractlist.json index 0c5ed49..43c2015 100644 --- a/tokamak.contractlist.json +++ b/tokamak.contractlist.json @@ -8,15 +8,10 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x69b4A202Fa4039B42ab23ADB725aA7b1e9EEBD79", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", - "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x1F98431c8aD98523631AE4a59f267346ea31F984", - "QUOTER_CONTRACT_ADDRESS": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", - "SWAP_ROUTER_ADDRESS": "0xE592427A0AEce92De3Edee1F18E0157C05861564", - "SWAP_ROUTER_ADDRESS2": "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", - "NONFUNGIBLE_POSITION_MANAGER": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", - "UNIVERSIAL_ROUTER": "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad" + "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" }, "5": { "L1StandardBridge": "0x7377F3D0F64d7a54Cf367193eb74a052ff8578FD", @@ -29,13 +24,7 @@ "L1ProjectManager": "0x8756873b21545FD49056A6a2a7a06D3dA388FEB9", "L1ProjectManagerProxy": "0x3eD0776A8E323a294cd704c02a349ca1B83554da", "L1StosToL2": "0x55D09E4139277c1957F1b8DF5372a12f8e490990", - "L1StosToL2Proxy": "0x25280A873ef2702fF581260a7e15F246A3c52Efb", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x1F98431c8aD98523631AE4a59f267346ea31F984", - "QUOTER_CONTRACT_ADDRESS": "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6", - "SWAP_ROUTER_ADDRESS": "0xE592427A0AEce92De3Edee1F18E0157C05861564", - "SWAP_ROUTER_ADDRESS2": "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", - "NONFUNGIBLE_POSITION_MANAGER": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", - "UNIVERSIAL_ROUTER": "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad" + "L1StosToL2Proxy": "0x25280A873ef2702fF581260a7e15F246A3c52Efb" }, "5050": { "L2StandardBridge": "0x4200000000000000000000000000000000000010", @@ -53,7 +42,7 @@ "L1StosInL2": "0x5c8ee41536721D2e31352259D3A84419B09d716F", "L1StosInL2Proxy": "0xa12431D37095CA8e3C04Eb1a4e7cE235718F10bF", "LockIdNftForRegister": "0x48f60aAf60D5E162b2DebFD4F70c88fE01b7c331", - "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b116342138", + "LockIdNftForRegisterProxy": "0x4b3fB26396C6740341cB36E2D3325b1163421385", "L2UniversalStos": "0xF9d75D5814e1C3D734342bD5Ed0637b9c49c3f69", "L2UniversalStosProxy": "0x58B4C2FEf19f5CDdd944AadD8DC99cCC71bfeFDc", "L2DividendPoolForStos": "0x310AeC1C6Ab68DD1DB4bf9B885835BD73BdEb958", @@ -61,24 +50,10 @@ "L2AirdropStosVault": "0xfd0c0AA6505125eFab34A2195F1b9C99AFE8fB06", "L2AirdropStosVaultProxy": "0xC74b529Ad06E70fA51CDDAD11857D53E6354523d", "L2AirdropTonVault": "0x8Ee62Ba51D361F860c0A65C01b9d50dc031d7f5d", - "L2AirdropTonVaultProxy": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x2Ae8FeE7B4f4ef27088fa8a550C91A045A3128b5", - "QUOTER_CONTRACT_ADDRESS": "0x32cdAd6cd559EcFE87Be49167F2F68A1Df08c9E9", - "SWAP_ROUTER_ADDRESS": "0x0DD8EA3A5A8900CE36A7302E600C4B8A3ef23B8d", - "SWAP_ROUTER_ADDRESS2": "0x2032206029B014233c3130CF3dc740Cd7fAAAa2d", - "NONFUNGIBLE_POSITION_MANAGER": "0x2F54b0f87e7cE7C4FA13BFd21DE6D868d1836B8C", - "UNIVERSIAL_ROUTER": "0x159a4218c245557d6db59A5D8de9db8348F98155", - "TICK_LENS": "0x7bc3e9BeDB9f7A9a1b901b3FE6AAa7930f08f7AA" + "L2AirdropTonVaultProxy": "0x58d9c33a7650BA96Da46Fc223Bd4d6c389f907Cb" }, "55004": { - "L2StandardBridge": "0x4200000000000000000000000000000000000010", - "POOL_FACTORY_CONTRACT_ADDRESS": "0x755Ba335013C07CE35C9A2dd5746617Ac4c6c799", - "QUOTER_CONTRACT_ADDRESS": "0xAd6c4B17ae46D70D5FA8649fE9387Bc361bB9FDb", - "SWAP_ROUTER_ADDRESS": "0xE15204fd488C33C26FF56efF14997Da8997E58Bf", - "SWAP_ROUTER_ADDRESS2": "0x758FD95dCEc6F7DbA6A957C9eEaa1d8859D0B3dF", - "NONFUNGIBLE_POSITION_MANAGER": "0xfAFc55Bcdc6e7a74C21DD51531D14e5DD9f29613", - "UNIVERSIAL_ROUTER": "0x5731FFdA58ff57F5211a675FD4709Da5Fd6B9775", - "TICK_LENS": "0xCcD40170Ad931A47a92Be55d618DbdD1E4A82BDA" + "L2StandardBridge": "0x4200000000000000000000000000000000000010" }, "1155511": { "BondDepository": "0xbBe7881cC14a509FD8F53Ce650fE065C385d98D7", @@ -87,17 +62,9 @@ "StakingV2": "0x40694B3e38E93cdec517d2e854f6f05402A304CC", "StakingV2Proxy": "0x80d1c91393C4B516f70Bc95d94b1D85667964531", "LibTreasury": "0x0ad659558851f6ba8a8094614303F56d42f8f39A", + "LockTOS": "0x8Fb966Bfb690a8304a5CdE54d9Ed6F7645b26576", "Treasury": "0x09207BdB146E41dadad015aB3d835f66498b0A0c", "TreasuryProxy": "0xFD7C2c54a0A755a46793A91449806A4b14E3eEe8", "TOSValueCalculator": "0xDF0fCfadAF9F095C509F620A6C2BAFd7B6AD8C22" - }, - "11155111": { - "POOL_FACTORY_CONTRACT_ADDRESS": "0x0227628f3F023bb0B980b67D528571c95c6DaC1c", - "QUOTER_CONTRACT_ADDRESS": "0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3", - "SWAP_ROUTER_ADDRESS": "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E", - "SWAP_ROUTER_ADDRESS2": "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E", - "NONFUNGIBLE_POSITION_MANAGER": "0x1238536071E1c677A632429e3655c799b22cDA52", - "UNIVERSIAL_ROUTER": "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD", - "TICK_LENS": "0xd7f33bcdb21b359c8ee6f0251d30e94832baad07" } }