UNPKG

@gooddollar/goodprotocol

Version:
1,271 lines 94.4 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GoodDollarMintBurnWrapper", "sourceName": "contracts/utils/GoodDollarMintBurnWrapper.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Burned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalMintCapIn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "perTxCapIn", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "bpsIn", "type": "uint32" }, { "indexed": false, "internalType": "uint256", "name": "totalMintCapOut", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "perTxCapOut", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "bpsOut", "type": "uint32" }, { "indexed": false, "internalType": "bool", "name": "rewardsRole", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "isUpdate", "type": "bool" } ], "name": "MinterSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "Paused", "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": "rewarder", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sent", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "minted", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "outstandingMintDebt", "type": "uint256" } ], "name": "SendOrMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint128", "name": "newFrequency", "type": "uint128" } ], "name": "UpdateFrequencySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "BRIDGE_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": "GUARDIAN_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": "PAUSE_ALL_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSE_BURN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSE_MINT_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSE_REWARDS_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSE_ROUTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARDS_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROUTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "globalLimitIn", "type": "uint256" }, { "internalType": "uint256", "name": "perTxLimitIn", "type": "uint256" }, { "internalType": "uint32", "name": "bpsPerDayIn", "type": "uint32" }, { "internalType": "uint256", "name": "globalLimitOut", "type": "uint256" }, { "internalType": "uint256", "name": "perTxLimitOut", "type": "uint256" }, { "internalType": "uint32", "name": "bpsPerDayOut", "type": "uint32" }, { "internalType": "bool", "name": "withRewardsRole", "type": "bool" } ], "name": "addMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "avatar", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentDay", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dao", "outputs": [ { "internalType": "contract Controller", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "contract INameService", "name": "_nameService", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "minterOutLimits", "outputs": [ { "internalType": "uint256", "name": "maxOut", "type": "uint256" }, { "internalType": "uint256", "name": "capOut", "type": "uint256" }, { "internalType": "uint256", "name": "totalOut", "type": "uint256" }, { "internalType": "uint128", "name": "dailyCapOut", "type": "uint128" }, { "internalType": "uint128", "name": "burnedToday", "type": "uint128" }, { "internalType": "uint32", "name": "bpsPerDayOut", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "minterSupply", "outputs": [ { "internalType": "uint256", "name": "maxIn", "type": "uint256" }, { "internalType": "uint256", "name": "capIn", "type": "uint256" }, { "internalType": "uint256", "name": "totalIn", "type": "uint256" }, { "internalType": "uint128", "name": "dailyCapIn", "type": "uint128" }, { "internalType": "uint128", "name": "mintedToday", "type": "uint128" }, { "internalType": "uint128", "name": "lastUpdate", "type": "uint128" }, { "internalType": "uint128", "name": "totalRewards", "type": "uint128" }, { "internalType": "uint32", "name": "bpsPerDayIn", "type": "uint32" }, { "internalType": "uint128", "name": "lastDayReset", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nameService", "outputs": [ { "internalType": "contract INameService", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nativeToken", "outputs": [ { "internalType": "contract IGoodDollar", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "onTokenTransfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "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": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "sendOrMint", "outputs": [ { "internalType": "uint256", "name": "totalSent", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "globalLimitIn", "type": "uint256" }, { "internalType": "uint256", "name": "perTxLimitIn", "type": "uint256" }, { "internalType": "uint32", "name": "bpsPerDayIn", "type": "uint32" }, { "internalType": "uint256", "name": "globalLimitOut", "type": "uint256" }, { "internalType": "uint256", "name": "perTxLimitOut", "type": "uint256" }, { "internalType": "uint32", "name": "bpsPerDayOut", "type": "uint32" } ], "name": "setMinterCaps", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "inSeconds", "type": "uint128" } ], "name": "setUpdateFrequency", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalMintCap_unused", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalMintDebt", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRewards", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateAvatar", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateFrequency", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ], "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161420c61004c600039600081816110a6015281816110e6015281816113a7015281816113e7015261145f015261420c6000f3fe60806040526004361061024f5760003560e01c806301ffc9a71461025457806306fdde03146102895780630e15561a146102ab57806317eebf21146102e05780631b3c90a81461030e578063248a9ca31461032557806324ea54f4146103455780632f2ff15d146103675780632f4dae9f1461038757806330d643b5146103a7578063313ce567146103db57806336568abe146104025780633659cfe6146104225780633e6326fc1461044257806340c10f19146104705780634162169f14610490578063485cc955146104b15780634f1ef286146104d15780634f31e2b5146104e457806352d1902d146105055780635955b5921461051a5780635ad411611461053c5780635aef7de61461055c5780635c9302c91461057d578063673ea0861461059e57806370a08231146105c65780638da5cb5b146105e65780639010d07c146105fb57806391d148541461061b578063956092121461063b57806395d89b41146107135780639ac25d08146107285780639dc29fac1461073d5780639e9e46661461075d578063a19ff6801461077d578063a217fddf14610728578063a2309ff81461079f578063a4c0ed36146107b6578063abccdb52146107d6578063b32ad1a6146107f6578063b5bfddea14610818578063ca15c8731461084c578063ca4fb87c1461086c578063d53913931461088e578063d547741f146108b0578063d56b73a4146108d0578063e1758bd814610975578063e47cbcbe1461098a578063ed56531a146109a1578063f1755339146109c1578063fc0c546a146109e1578063fe2e98b914610a02575b600080fd5b34801561026057600080fd5b5061027461026f36600461382c565b610a24565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b5061029e610a4f565b604051610280919061387a565b3480156102b757600080fd5b50610169546102d390600160801b90046001600160801b031681565b60405161028091906138ad565b3480156102ec57600080fd5b506103006102fb3660046138d6565b610ac7565b604051908152602001610280565b34801561031a57600080fd5b50610323610de3565b005b34801561033157600080fd5b50610300610340366004613902565b610f0d565b34801561035157600080fd5b506103006000805160206141b783398151915281565b34801561037357600080fd5b5061032361038236600461391b565b610f22565b34801561039357600080fd5b506103236103a2366004613902565b610f43565b3480156103b357600080fd5b506103007f7a05a596cb0ce7fdea8a1e1ec73be300bdb35097c944ce1897202f7a13122eb281565b3480156103e757600080fd5b506103f0610fb3565b60405160ff9091168152602001610280565b34801561040e57600080fd5b5061032361041d36600461391b565b611022565b34801561042e57600080fd5b5061032361043d36600461394b565b61109c565b34801561044e57600080fd5b5061013054610463906001600160a01b031681565b6040516102809190613968565b34801561047c57600080fd5b5061027461048b3660046138d6565b611164565b34801561049c57600080fd5b5061012e54610463906001600160a01b031681565b3480156104bd57600080fd5b506103236104cc36600461397c565b6111d8565b6103236104df366004613a6d565b61139d565b3480156104f057600080fd5b50610169546102d3906001600160801b031681565b34801561051157600080fd5b50610300611452565b34801561052657600080fd5b5061030060008051602061419783398151915281565b34801561054857600080fd5b50610323610557366004613ae3565b611500565b34801561056857600080fd5b5061012f54610463906001600160a01b031681565b34801561058957600080fd5b50610168546102d3906001600160801b031681565b3480156105aa57600080fd5b50610168546102d390600160801b90046001600160801b031681565b3480156105d257600080fd5b506103006105e136600461394b565b611590565b3480156105f257600080fd5b50610463611603565b34801561060757600080fd5b50610463610616366004613b64565b61160b565b34801561062757600080fd5b5061027461063636600461391b565b61162a565b34801561064757600080fd5b506106ba61065636600461394b565b610163602052600090815260409020805460018201546002830154600384015460048501546005909501549394929391926001600160801b0380831693600160801b93849004821693838316930482169163ffffffff821691600160201b90041689565b60408051998a5260208a0198909852968801959095526001600160801b0393841660608801529183166080870152821660a0860152811660c085015263ffffffff90911660e08401521661010082015261012001610280565b34801561071f57600080fd5b5061029e611655565b34801561073457600080fd5b50610300600081565b34801561074957600080fd5b506102746107583660046138d6565b6116a0565b34801561076957600080fd5b50610274610778366004613902565b61175b565b34801561078957600080fd5b5061030060008051602061413083398151915281565b3480156107ab57600080fd5b506103006101655481565b3480156107c257600080fd5b506102746107d1366004613b86565b611770565b3480156107e257600080fd5b506103236107f1366004613bde565b611908565b34801561080257600080fd5b5061030060008051602061406b83398151915281565b34801561082457600080fd5b506103007f52ba824bfabc2bcfcdf7f0edbb486ebb05e1836c90e78047efeb949990f72e5f81565b34801561085857600080fd5b50610300610867366004613902565b61197d565b34801561087857600080fd5b5061030060008051602061411083398151915281565b34801561089a57600080fd5b5061030060008051602061417783398151915281565b3480156108bc57600080fd5b506103236108cb36600461391b565b611994565b3480156108dc57600080fd5b506109366108eb36600461394b565b61016a60205260009081526040902080546001820154600283015460038401546004909401549293919290916001600160801b0380821692600160801b909204169063ffffffff1686565b604080519687526020870195909552938501929092526001600160801b03908116606085015216608083015263ffffffff1660a082015260c001610280565b34801561098157600080fd5b506104636119b0565b34801561099657600080fd5b506103006101645481565b3480156109ad57600080fd5b506103236109bc366004613902565b611a39565b3480156109cd57600080fd5b506103236109dc366004613c4a565b611a9e565b3480156109ed57600080fd5b5061016654610463906001600160a01b031681565b348015610a0e57600080fd5b5061030060008051602061408b83398151915281565b60006001600160e01b03198216635a05180f60e01b1480610a495750610a4982611b51565b92915050565b61016654604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde039160048083019260009291908290030181865afa158015610a9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ac29190810190613c73565b905090565b6000600080516020614110833981519152610ae181611b86565b60008051602061408b833981519152610af98161175b565b158015610b0d5750610b0b600061175b565b155b610b325760405162461bcd60e51b8152600401610b2990613ce0565b60405180910390fd5b610b3b33611b90565b33600090815261016360205260408120600301546001600160801b031615610b9b573360009081526101636020526040902060030154610b8d906001600160801b03600160801b820481169116613d27565b6001600160801b0316610b9d565b845b610166546040516370a0823160e01b8152919250600091610c1d916001600160a01b0316906370a0823190610bd6903090600401613968565b602060405180830381865afa158015610bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190613d47565b87611e03565b90506000610c34610c2e8389613d60565b84611e03565b9050610c408183613d73565b3360009081526101636020526040902060040180549197508791601090610c78908490600160801b90046001600160801b0316613d86565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508561016960108282829054906101000a90046001600160801b0316610cc19190613d86565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508061016960008282829054906101000a90046001600160801b0316610d0a9190613d86565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000811115610d4157610d418882611e19565b8115610d5f5761016654610d5f906001600160a01b031689846121ff565b80600003610d6f57610d6f612255565b61016954604080513381526001600160a01b038b1660208201528082018a905260608101859052608081018490526001600160801b0390921660a0830152517fdea51570922020f525c1f30d8c1c57bd3cffe5632d70d13aaf8f8451388dbd959181900360c00190a1505050505092915050565b6101305460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6b9190613da6565b61012e80546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea9190613da6565b61012f80546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526065602052604090206001015490565b610f2b82610f0d565b610f3481611b86565b610f3e83836123a8565b505050565b604080518082019091526000805160206141b78339815191528152600060208201819052610f799082905b60200201513361162a565b80610f8a5750610f8a816001610f6e565b610fa65760405162461bcd60e51b8152600401610b2990613dd9565b610faf826123ca565b5050565b610166546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610ffe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac29190613dff565b6001600160a01b03811633146110925760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b29565b610faf8282612476565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110e45760405162461bcd60e51b8152600401610b2990613e22565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611116612498565b6001600160a01b03161461113c5760405162461bcd60e51b8152600401610b2990613e5c565b611145816124b4565b60408051600080825260208201909252611161918391906124bc565b50565b600060008051602061417783398151915261117e81611b86565b61118733611b90565b6111918484611e19565b7f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f03385856040516111c493929190613e96565b60405180910390a1600191505b5092915050565b600054610100900460ff16158080156111f85750600054600160ff909116105b80611219575061120730612627565b158015611219575060005460ff166001145b61127c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b29565b6000805460ff19166001179055801561129f576000805461ff0019166101001790555b6112a7612636565b6112b0826126a3565b6001600160a01b0383166112fb5760405162461bcd60e51b81526020600482015260126024820152717a65726f2061646d696e206164647265737360701b6044820152606401610b29565b6113036119b0565b61016680546001600160a01b0319166001600160a01b0392831617905561016880546001600160801b031661127560871b17905561012f5461134891600091166126c7565b6113536000846126c7565b8015610f3e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113e55760405162461bcd60e51b8152600401610b2990613e22565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611417612498565b6001600160a01b03161461143d5760405162461bcd60e51b8152600401610b2990613e5c565b611446826124b4565b610faf828260016124bc565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114ed5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610b29565b506000805160206140cb83398151915290565b600061150b81611b86565b8115611546576115296000805160206141108339815191528a610f22565b6115416000805160206141778339815191528a611994565b611576565b61155e6000805160206141778339815191528a610f22565b6115766000805160206141108339815191528a611994565b611585898989898989896126d1565b505050505050505050565b610166546040516370a0823160e01b81526000916001600160a01b0316906370a08231906115c2908590600401613968565b602060405180830381865afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190613d47565b6000610ac281805b60008281526097602052604081206116239083612973565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61016654604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b419160048083019260009291908290030181865afa158015610a9a573d6000803e3d6000fd5b60006000805160206141778339815191526116ba81611b86565b6000805160206141978339815191526116d28161175b565b1580156116e657506116e4600061175b565b155b6117025760405162461bcd60e51b8152600401610b2990613ce0565b61170b33611b90565b611715858561297f565b7f6ab368f832c266c8eb942b84fbcaa20aedc24a699d2a05fae2568028733b1d0933868660405161174893929190613e96565b60405180910390a1506001949350505050565b600090815260c9602052604090205460ff1690565b610166546000906001600160a01b0316331461178b57600080fd5b600080838060200190518101906117a29190613eba565b91509150806000036117e55760405162461bcd60e51b815260206004820152600c60248201526b1e995c9bc818da185a5b925960a21b6044820152606401610b29565b6001600160a01b0382166117f957856117fb565b815b6101305460405163bf40fac160e01b815260206004820152601160248201527026aaa62a24a1a420a4a72fa927aaaa22a960791b60448201529193506001600160a01b03169063bf40fac190606401602060405180830381865afa158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b9190613da6565b60405163241dc2df60e01b81523060048201526001600160a01b0384811660248301526044820188905260648201849052919091169063241dc2df90608401600060405180830381600087803b1580156118e457600080fd5b505af11580156118f8573d6000803e3d6000fd5b5060019998505050505050505050565b604080518082019091526000805160206141b78339815191528152600060208201819052611937908290610f6e565b806119485750611948816001610f6e565b6119645760405162461bcd60e51b8152600401610b2990613dd9565b611973888888888888886126d1565b5050505050505050565b6000818152609760205260408120610a4990612cb2565b61199d82610f0d565b6119a681611b86565b610f3e8383612476565b6101305460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac29190613da6565b604080518082019091526000805160206141b78339815191528152600060208201819052611a68908290610f6e565b80611a795750611a79816001610f6e565b611a955760405162461bcd60e51b8152600401610b2990613dd9565b610faf82612cbc565b604080518082019091526000805160206141b78339815191528152600060208201819052611acd908290610f6e565b80611ade5750611ade816001610f6e565b611afa5760405162461bcd60e51b8152600401610b2990613dd9565b61016880546001600160801b03808516600160801b0291161790556040517f5497ec04d2873f2e2d376db2bb24e7e57851278c75fc1fcc9aab4db5fb70d22390611b459084906138ad565b60405180910390a15050565b60006001600160e01b03198216637965db0b60e01b1480610a4957506301ffc9a760e01b6001600160e01b0319831614610a49565b6111618133612d41565b6001600160a01b03811660009081526101636020526040812060040154611bc0906001600160801b031642613d60565b9050600061016660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c9190613d47565b61016854909150600160801b90046001600160801b03168210611d52576001600160a01b0383166000908152610163602052604090206005015461271090611c8a9063ffffffff1683613ee8565b611c949190613f15565b6001600160a01b03841660009081526101636020908152604080832060030180546001600160801b0319166001600160801b03959095169490941790935561016a9052206004015461271090611cf09063ffffffff1683613ee8565b611cfa9190613f15565b6001600160a01b038416600090815261016a6020908152604080832060030180546001600160801b03199081166001600160801b03968716179091556101639092529091206004018054909116429092169190911790555b611d5a612d9a565b6001600160a01b03831660009081526101636020526040902060050154610168546001600160801b03908116600160201b9092041614610f3e5750506001600160a01b0316600090815261016360208181526040808420600380820180546001600160801b0390811690915561016a855292909520909401805482169055610168549290915260059092018054600160201b600160a01b03191691909216600160201b02179055565b6000818310611e125781611623565b5090919050565b60008051602061406b833981519152611e318161175b565b158015611e455750611e43600061175b565b155b611e615760405162461bcd60e51b8152600401610b2990613ce0565b306001600160a01b03841603611ea85760405162461bcd60e51b815260206004820152600c60248201526b36b4b73a103a379039b2b63360a11b6044820152606401610b29565b33600090815261016360205260409020541580611ed5575033600090815261016360205260409020548211155b611f175760405162461bcd60e51b81526020600482015260136024820152721b5a5b9d195c881b585e08195e18d959591959606a1b6044820152606401610b29565b33600090815261016360205260409020600301546001600160801b03161580611f8a57503360009081526101636020526040902060030154611f6a908390600160801b90046001600160801b0316613d73565b33600090815261016360205260409020600301546001600160801b031610155b611fd25760405162461bcd60e51b81526020600482015260196024820152781b5a5b9d195c8819185a5b1e4818d85c08195e18d959591959603a1b6044820152606401610b29565b336000908152610163602052604090206003018054839190601090612008908490600160801b90046001600160801b0316613d86565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550816101636000336001600160a01b03166001600160a01b0316815260200190815260200160002060020160008282546120659190613d73565b9091555050336000908152610163602052604090206001015415806120a3575033600090815261016360205260409020600181015460029091015411155b6120bf5760405162461bcd60e51b8152600401610b2990613f29565b8161016560008282546120d29190613d73565b909155505033600090815261016a6020526040902060020154821161211f5733600090815261016a602052604081206002018054849290612114908490613d60565b909155506121349050565b33600090815261016a60205260408120600201555b61012e5461012f54604051633203f21960e11b8152600481018590526001600160a01b03868116602483015291821660448201526000929190911690636407e432906064016020604051808303816000875af1158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc9190613f56565b9050806121f95760405162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b6044820152606401610b29565b50505050565b610f3e8363a9059cbb60e01b848460405160240161221e929190613f73565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612dca565b61016954610166546040516370a0823160e01b81526000926122e3926001600160801b03909116916001600160a01b03909116906370a082319061229d903090600401613968565b602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190613d47565b611e03565b9050801561116157610169805482919060009061230a9084906001600160801b0316613d27565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508061016560008282546123419190613d60565b909155505061016654604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561238d57600080fd5b505af11580156123a1573d6000803e3d6000fd5b5050505050565b6123b28282612e9c565b6000828152609760205260409020610f3e9082612f22565b806123d48161175b565b806123e457506123e4600061175b565b61242e5760405162461bcd60e51b815260206004820152601b60248201527a14185d5cd8589b1950dbdb9d1c9bdb0e881b9bdd081c185d5cd959602a1b6044820152606401610b29565b600082815260c9602052604090819020805460ff19169055517fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a90611b459084815260200190565b6124808282612f37565b6000828152609760205260409020610f3e9082612f9e565b6000805160206140cb833981519152546001600160a01b031690565b611161612fb3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156124ef57610f3e83613077565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612549575060408051601f3d908101601f1916820190925261254691810190613d47565b60015b6125ac5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b29565b6000805160206140cb833981519152811461261b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b29565b50610f3e838383613111565b6001600160a01b03163b151590565b600054610100900460ff166126a15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610b29565b565b61013080546001600160a01b0319166001600160a01b038316179055611161610de3565b610faf82826123a8565b6001600160a01b03871660009081526101636020908152604080832061016a90925282206004820154919290916001600160801b03161515906127226000805160206141108339815191528c61162a565b600185018b905589855560058501805463ffffffff191663ffffffff8b16908117909155600480870180546001600160801b031916426001600160801b031617905561016654604080516318160ddd60e01b81529051949550612710946001600160a01b03909216926318160ddd9282820192602092908290030181865afa1580156127b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d69190613d47565b6127e09190613ee8565b6127ea9190613f8c565b8460030160006101000a8154816001600160801b0302191690836001600160801b031602179055506127108563ffffffff1661016660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190613d47565b61289e9190613ee8565b6128a89190613f8c565b6003840180546001600160801b0319166001600160801b03929092169190911790556001830187905585835560048301805463ffffffff191663ffffffff878116918217909255604080516001600160a01b038f168152602081018e90529081018c9052918a1660608301526080820189905260a0820188905260c082015281151560e08201528215156101008201527f58c3ceb7d4f068706ddc92911fae8701fac2c91c60bcc1b56ec7a6f56001aa5e906101200160405180910390a15050505050505050505050565b60006116238383613136565b6000805160206141308339815191526129978161175b565b1580156129ab57506129a9600061175b565b155b6129c75760405162461bcd60e51b8152600401610b2990613ce0565b33600090815261016a602052604090205415806129f4575033600090815261016a60205260409020548211155b612a3b5760405162461bcd60e51b81526020600482015260186024820152771b5a5b9d195c88189d5c9b881b585e08195e18d95959195960421b6044820152606401610b29565b33600090815261016a60205260409020600301546001600160801b03161580612aae575033600090815261016a6020526040902060030154612a8e908390600160801b90046001600160801b0316613d73565b33600090815261016a60205260409020600301546001600160801b031610155b612afa5760405162461bcd60e51b815260206004820152601e60248201527f6d696e746572206275726e206461696c792063617020657863656564656400006044820152606401610b29565b33600090815261016a602052604090206003018054839190601090612b30908490600160801b90046001600160801b0316613d86565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508161016a6000336001600160a01b03166001600160a01b031681526020019081526020016000206002016000828254612b8d9190613d73565b909155505033600090815261016a60205260409020600101541580612bcb575033600090815261016a60205260409020600181015460029091015411155b612be75760405162461bcd60e51b8152600401610b2990613f29565b816101655410612c0f57816101656000828254612c049190613d60565b90915550612c169050565b6000610165555b33600090815261016360205260409020600201548211612c5e57336000908152610163602052604081206002018054849290612c53908490613d60565b90915550612c739050565b33600090815261016360205260408120600201555b306001600160a01b03841603612c9a5761016654610f3e906001600160a01b031683613160565b61016654610f3e906001600160a01b031684846131ad565b6000610a49825490565b80612cc68161175b565b158015612cda5750612cd8600061175b565b155b612cf65760405162461bcd60e51b8152600401610b2990613ce0565b600082815260c9602052604090819020805460ff19166001179055517f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3190611b459084815260200190565b612d4b828261162a565b610faf57612d58816131c9565b612d638360206131db565b604051602001612d74929190613fb2565b604080