@gooddollar/goodprotocol
Version:
GoodDollar Protocol
1,271 lines • 94.4 kB
JSON
{
"_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