@zoralabs/openzeppelin-contracts-upgradeable
Version:
Secure Smart Contract library for Solidity
891 lines • 73.7 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "TimelockControllerWith46MigrationUpgradeable",
"sourceName": "contracts/governance/TimelockControllerWith46MigrationUpgradeable.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "CallExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "CallSalt",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "CallScheduled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "Cancelled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldDuration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newDuration",
"type": "uint256"
}
],
"name": "MinDelayChange",
"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": "CANCELLER_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": "EXECUTOR_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PROPOSER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "TIMELOCK_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "cancel",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "payload",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "executeBatch",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getMinDelay",
"outputs": [
{
"internalType": "uint256",
"name": "duration",
"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": "id",
"type": "bytes32"
}
],
"name": "getTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "timestamp",
"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": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "hashOperation",
"outputs": [
{
"internalType": "bytes32",
"name": "hash",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "hashOperationBatch",
"outputs": [
{
"internalType": "bytes32",
"name": "hash",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperation",
"outputs": [
{
"internalType": "bool",
"name": "registered",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationDone",
"outputs": [
{
"internalType": "bool",
"name": "done",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationPending",
"outputs": [
{
"internalType": "bool",
"name": "pending",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "isOperationReady",
"outputs": [
{
"internalType": "bool",
"name": "ready",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "migrateTo46",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"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": "target",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "schedule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "targets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "payloads",
"type": "bytes[]"
},
{
"internalType": "bytes32",
"name": "predecessor",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "delay",
"type": "uint256"
}
],
"name": "scheduleBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newDelay",
"type": "uint256"
}
],
"name": "updateDelay",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50613575806100206000396000f3fe6080604052600436106101c65760003560e01c806364d62353116100f7578063b1c5f42711610095578063d547741f11610064578063d547741f146106ae578063e38335e5146106d7578063f23a6e61146106f3578063f27a0c9214610730576101cd565b8063b1c5f427146105ce578063bc197c811461060b578063c4d252f514610648578063d45c443514610671576101cd565b80638f61f4f5116100d15780638f61f4f51461051057806391d148541461053b578063a217fddf14610578578063b08e51c0146105a3576101cd565b806364d62353146104815780638065657f146104aa5780638f2a0bb0146104e7576101cd565b80631fb78738116101645780632f2ff15d1161013e5780632f2ff15d146103b557806331d50750146103de57806336568abe1461041b578063584b153e14610444576101cd565b80631fb7873814610324578063248a9ca31461033b5780632ab0f52914610378576101cd565b80630d3cf6fc116101a05780630d3cf6fc14610263578063134008d31461028e57806313bc9f20146102aa578063150b7a02146102e7576101cd565b806301d5062a146101d257806301ffc9a7146101fb57806307bd026514610238576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190611cb5565b61075b565b005b34801561020757600080fd5b50610222600480360381019061021d9190611dbc565b610833565b60405161022f9190611e04565b60405180910390f35b34801561024457600080fd5b5061024d6108ad565b60405161025a9190611e2e565b60405180910390f35b34801561026f57600080fd5b506102786108d1565b6040516102859190611e2e565b60405180910390f35b6102a860048036038101906102a39190611e49565b6108f5565b005b3480156102b657600080fd5b506102d160048036038101906102cc9190611ee3565b6109b2565b6040516102de9190611e04565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190612051565b6109d8565b60405161031b91906120e3565b60405180910390f35b34801561033057600080fd5b506103396109ec565b005b34801561034757600080fd5b50610362600480360381019061035d9190611ee3565b610af8565b60405161036f9190611e2e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190611ee3565b610b18565b6040516103ac9190611e04565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906120fe565b610b2d565b005b3480156103ea57600080fd5b5061040560048036038101906104009190611ee3565b610b4e565b6040516104129190611e04565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906120fe565b610b62565b005b34801561045057600080fd5b5061046b60048036038101906104669190611ee3565b610be5565b6040516104789190611e04565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a3919061213e565b610bfa565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190611e49565b610cad565b6040516104de9190611e2e565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061226d565b610cec565b005b34801561051c57600080fd5b50610525610eda565b6040516105329190611e2e565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906120fe565b610efe565b60405161056f9190611e04565b60405180910390f35b34801561058457600080fd5b5061058d610f69565b60405161059a9190611e2e565b60405180910390f35b3480156105af57600080fd5b506105b8610f70565b6040516105c59190611e2e565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061235c565b610f94565b6040516106029190611e2e565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906124fb565b610fd9565b60405161063f91906120e3565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190611ee3565b610fee565b005b34801561067d57600080fd5b5061069860048036038101906106939190611ee3565b6110a8565b6040516106a591906125d9565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d091906120fe565b6110c5565b005b6106f160048036038101906106ec919061235c565b6110e6565b005b3480156106ff57600080fd5b5061071a600480360381019061071591906125f4565b6112d0565b60405161072791906120e3565b60405180910390f35b34801561073c57600080fd5b506107456112e5565b60405161075291906125d9565b60405180910390f35b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610785816112ef565b6000610795898989898989610cad565b90506107a18184611303565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516107dd969594939291906126d8565b60405180910390a36000801b841461082857807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161081f9190611e2e565b60405180910390a25b505050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a657506108a5826113bd565b5b9050919050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610921816000610efe565b6109375761093681610931611437565b61143f565b5b6000610947888888888888610cad565b905061095381856114c4565b61095f88888888611565565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516109979493929190612734565b60405180910390a36109a88161161c565b5050505050505050565b6000806109be836110a8565b90506001811180156109d05750428111155b915050919050565b600063150b7a0260e01b9050949350505050565b7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5610a367fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610af8565b148015610a6d57506000801b610a6b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610af8565b145b610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa3906127f7565b60405180910390fd5b610af67ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7837f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5611680565b565b600060656000838152602001908152602001600020600101549050919050565b60006001610b25836110a8565b149050919050565b610b3682610af8565b610b3f816112ef565b610b4983836116dc565b505050565b600080610b5a836110a8565b119050919050565b610b6a611437565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90612889565b60405180910390fd5b610be182826117bd565b5050565b60006001610bf2836110a8565b119050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061291b565b60405180910390fd5b7f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560985482604051610c9b92919061293b565b60405180910390a18060988190555050565b6000868686868686604051602001610cca96959493929190612964565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610d16816112ef565b878790508a8a905014610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612a32565b60405180910390fd5b858590508a8a905014610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d90612a32565b60405180910390fd5b6000610db88b8b8b8b8b8b8b8b610f94565b9050610dc48184611303565b60005b8b8b9050811015610e895780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610e0857610e07612a52565b5b9050602002016020810190610e1d9190612a81565b8d8d86818110610e3057610e2f612a52565b5b905060200201358c8c87818110610e4a57610e49612a52565b5b9050602002810190610e5c9190612abd565b8c8b604051610e70969594939291906126d8565b60405180910390a380610e8290612b4f565b9050610dc7565b506000801b8414610ecd57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610ec49190611e2e565b60405180910390a25b5050505050505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b60008888888888888888604051602001610fb5989796959493929190612e30565b60405160208183030381529060405280519060200120905098975050505050505050565b600063bc197c8160e01b905095945050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783611018816112ef565b61102182610be5565b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790612f10565b60405180910390fd5b6097600083815260200190815260200160002060009055817fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7060405160405180910390a25050565b600060976000838152602001908152602001600020549050919050565b6110ce82610af8565b6110d7816112ef565b6110e183836117bd565b505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63611112816000610efe565b6111285761112781611122611437565b61143f565b5b868690508989905014611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790612a32565b60405180910390fd5b8484905089899050146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90612a32565b60405180910390fd5b60006111ca8a8a8a8a8a8a8a8a610f94565b90506111d681856114c4565b60005b8a8a90508110156112ba5760008b8b838181106111f9576111f8612a52565b5b905060200201602081019061120e9190612a81565b905060008a8a8481811061122557611224612a52565b5b9050602002013590503660008a8a8681811061124457611243612a52565b5b90506020028101906112569190612abd565b9150915061126684848484611565565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588686868660405161129d9493929190612734565b60405180910390a350505050806112b390612b4f565b90506111d9565b506112c48161161c565b50505050505050505050565b600063f23a6e6160e01b905095945050505050565b6000609854905090565b611300816112fb611437565b61143f565b50565b61130c82610b4e565b1561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390612fa2565b60405180910390fd5b6113546112e5565b811015611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90613034565b60405180910390fd5b80426113a29190613054565b60976000848152602001908152602001600020819055505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611430575061142f8261189f565b5b9050919050565b600033905090565b6114498282610efe565b6114c05761145681611909565b6114648360001c6020611936565b6040516020016114759291906131bc565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7919061322f565b60405180910390fd5b5050565b6114cd826109b2565b61150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906132c3565b60405180910390fd5b6000801b811480611522575061152181610b18565b5b611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613355565b60405180910390fd5b5050565b60008473ffffffffffffffffffffffffffffffffffffffff1684848460405161158f9291906133a5565b60006040518083038185875af1925050503d80600081146115cc576040519150601f19603f3d011682016040523d82523d6000602084013e6115d1565b606091505b5050905080611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613430565b60405180910390fd5b5050505050565b611625816109b2565b611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b906132c3565b60405180910390fd5b6001609760008381526020019081526020016000208190555050565b600061168b83610af8565b90508160656000858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b6116e68282610efe565b6117b95760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061175e611437565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6117c78282610efe565b1561189b5760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611840611437565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606061192f8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611936565b9050919050565b6060600060028360026119499190613450565b6119539190613054565b67ffffffffffffffff81111561196c5761196b611f26565b5b6040519080825280601f01601f19166020018201604052801561199e5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106119d6576119d5612a52565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a3a57611a39612a52565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611a7a9190613450565b611a849190613054565b90505b6001811115611b24577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611ac657611ac5612a52565b5b1a60f81b828281518110611add57611adc612a52565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611b1d906134aa565b9050611a87565b5060008414611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f9061351f565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bb182611b86565b9050919050565b611bc181611ba6565b8114611bcc57600080fd5b50565b600081359050611bde81611bb8565b92915050565b6000819050919050565b611bf781611be4565b8114611c0257600080fd5b50565b600081359050611c1481611bee565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c3f57611c3e611c1a565b5b8235905067ffffffffffffffff811115611c5c57611c5b611c1f565b5b602083019150836001820283011115611c7857611c77611c24565b5b9250929050565b6000819050919050565b611c9281611c7f565b8114611c9d57600080fd5b50565b600081359050611caf81611c89565b92915050565b600080600080600080600060c0888a031215611cd457611cd3611b7c565b5b6000611ce28a828b01611bcf565b9750506020611cf38a828b01611c05565b965050604088013567ffffffffffffffff811115611d1457611d13611b81565b5b611d208a828b01611c29565b95509550506060611d338a828b01611ca0565b9350506080611d448a828b01611ca0565b92505060a0611d558a828b01611c05565b91505092959891949750929550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d9981611d64565b8114611da457600080fd5b50565b600081359050611db681611d90565b92915050565b600060208284031215611dd257611dd1611b7c565b5b6000611de084828501611da7565b91505092915050565b60008115159050919050565b611dfe81611de9565b82525050565b6000602082019050611e196000830184611df5565b92915050565b611e2881611c7f565b82525050565b6000602082019050611e436000830184611e1f565b92915050565b60008060008060008060a08789031215611e6657611e65611b7c565b5b6000611e7489828a01611bcf565b9650506020611e8589828a01611c05565b955050604087013567ffffffffffffffff811115611ea657611ea5611b81565b5b611eb289828a01611c29565b94509450506060611ec589828a01611ca0565b9250506080611ed689828a01611ca0565b9150509295509295509295565b600060208284031215611ef957611ef8611b7c565b5b6000611f0784828501611ca0565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f5e82611f15565b810181811067ffffffffffffffff82111715611f7d57611f7c611f26565b5b80604052505050565b6000611f90611b72565b9050611f9c8282611f55565b919050565b600067ffffffffffffffff821115611fbc57611fbb611f26565b5b611fc582611f15565b9050602081019050919050565b82818337600083830152505050565b6000611ff4611fef84611fa1565b611f86565b9050828152602081018484840111156120105761200f611f10565b5b61201b848285611fd2565b509392505050565b600082601f83011261203857612037611c1a565b5b8135612048848260208601611fe1565b91505092915050565b6000806000806080858703121561206b5761206a611b7c565b5b600061207987828801611bcf565b945050602061208a87828801611bcf565b935050604061209b87828801611c05565b925050606085013567ffffffffffffffff8111156120bc576120bb611b81565b5b6120c887828801612023565b91505092959194509250565b6120dd81611d64565b82525050565b60006020820190506120f860008301846120d4565b92915050565b6000806040838503121561211557612114611b7c565b5b600061212385828601611ca0565b925050602061213485828601611bcf565b9150509250929050565b60006020828403121561215457612153611b7c565b5b600061216284828501611c05565b91505092915050565b60008083601f84011261218157612180611c1a565b5b8235905067ffffffffffffffff81111561219e5761219d611c1f565b5b6020830191508360208202830111156121ba576121b9611c24565b5b9250929050565b60008083601f8401126121d7576121d6611c1a565b5b8235905067ffffffffffffffff8111156121f4576121f3611c1f565b5b6020830191508360208202830111156122105761220f611c24565b5b9250929050565b60008083601f84011261222d5761222c611c1a565b5b8235905067ffffffffffffffff81111561224a57612249611c1f565b5b60208301915083602082028301111561226657612265611c24565b5b9250929050565b600080600080600080600080600060c08a8c03121561228f5761228e611b7c565b5b60008a013567ffffffffffffffff8111156122ad576122ac611b81565b5b6122b98c828d0161216b565b995099505060208a013567ffffffffffffffff8111156122dc576122db611b81565b5b6122e88c828d016121c1565b975097505060408a013567ffffffffffffffff81111561230b5761230a611b81565b5b6123178c828d01612217565b9550955050606061232a8c828d01611ca0565b935050608061233b8c828d01611ca0565b92505060a061234c8c828d01611c05565b9150509295985092959850929598565b60008060008060008060008060a0898b03121561237c5761237b611b7c565b5b600089013567ffffffffffffffff81111561239a57612399611b81565b5b6123a68b828c0161216b565b9850985050602089013567ffffffffffffffff8111156123c9576123c8611b81565b5b6123d58b828c016121c1565b9650965050604089013567ffffffffffffffff8111156123f8576123f7611b81565b5b6124048b828c01612217565b945094505060606124178b828c01611ca0565b92505060806124288b828c01611ca0565b9150509295985092959890939650565b600067ffffffffffffffff82111561245357612452611f26565b5b602082029050602081019050919050565b600061247761247284612438565b611f86565b9050808382526020820190506020840283018581111561249a57612499611c24565b5b835b818110156124c357806124af8882611c05565b84526020840193505060208101905061249c565b5050509392505050565b600082601f8301126124e2576124e1611c1a565b5b81356124f2848260208601612464565b91505092915050565b600080600080600060a0868803121561251757612516611b7c565b5b600061252588828901611bcf565b955050602061253688828901611bcf565b945050604086013567ffffffffffffffff81111561255757612556611b81565b5b612563888289016124cd565b935050606086013567ffffffffffffffff81111561258457612583611b81565b5b612590888289016124cd565b925050608086013567ffffffffffffffff8111156125b1576125b0611b81565b5b6125bd88828901612023565b9150509295509295909350565b6125d381611be4565b82525050565b60006020820190506125ee60008301846125ca565b92915050565b600080600080600060a086880312156126105761260f611b7c565b5b600061261e88828901611bcf565b955050602061262f88828901611bcf565b945050604061264088828901611c05565b935050606061265188828901611c05565b925050608086013567ffffffffffffffff81111561267257612671611b81565b5b61267e88828901612023565b9150509295509295909350565b61269481611ba6565b82525050565b600082825260208201905092915050565b60006126b7838561269a565b93506126c4838584611fd2565b6126cd83611f15565b840190509392505050565b600060a0820190506126ed600083018961268b565b6126fa60208301886125ca565b818103604083015261270d8186886126ab565b905061271c6060830185611e1f565b61272960808301846125ca565b979650505050505050565b6000606082019050612749600083018761268b565b61275660208301866125ca565b81810360408301526127698184866126ab565b905095945050505050565b600082825260208201905092915050565b7f54696d656c6f636b436f6e74726f6c6c65723a20616c7265616479206d69677260008201527f6174656400000000000000000000000000000000000000000000000000000000602082015250565b60006127e1602483612774565b91506127ec82612785565b604082019050919050565b60006020820190508181036000830152612810816127d4565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612873602f83612774565b915061287e82612817565b604082019050919050565b600060208201905081810360008301526128a281612866565b9050919050565b7f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060008201527f62652074696d656c6f636b000000000000000000000000000000000000000000602082015250565b6000612905602b83612774565b9150612910826128a9565b604082019050919050565b60006020820190508181036000830152612934816128f8565b9050919050565b600060408201905061295060008301856125ca565b61295d60208301846125ca565b9392505050565b600060a082019050612979600083018961268b565b61298660208301886125ca565b81810360408301526129998186886126ab565b90506129a86060830185611e1f565b6129b56080830184611e1f565b979650505050505050565b7f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160008201527f7463680000000000000000000000000000000000000000000000000000000000602082015250565b6000612a1c602383612774565b9150612a27826129c0565b604082019050919050565b60006020820190508181036000830152612a4b81612a0f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612a9757612a96611b7c565b5b6000612aa584828501611bcf565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612ada57612ad9612aae565b5b80840192508235915067ffffffffffffffff821115612afc57612afb612ab3565b5b602083019250600182023603831315612b1857612b17612ab8565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b5a82611be4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b8c57612b8b612b20565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b612bbb81611ba6565b82525050565b6000612bcd8383612bb2565b60208301905092915050565b6000612be86020840184611bcf565b905092915050565b6000602082019050919050565b6000612c098385612b97565b9350612c1482612ba8565b8060005b85811015612c4d57612c2a8284612bd9565b612c348882612bc1565b9750612c3f83612bf0565b925050600181019050612c18565b5085925050509392505050565b600082825260208201905092915050565b600080fd5b6000612c7c8385612c5a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612caf57612cae612c6b565b5b602083029250612cc0838584611fd2565b82840190509392505050565b600082825260208201905092915050565b6000819050919050565b600082825260208201905092915050565b6000612d048385612ce7565b9350612d11838584611fd2565b612d1a83611f15565b840190509392505050565b6000612d32848484612cf8565b90509392505050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612d6757612d66612d45565b5b83810192508235915060208301925067ffffffffffffffff821115612d8f57612d8e612d3b565b5b600182023603841315612da557612da4612d40565b5b509250929050565b6000602082019050919050565b6000612dc68385612ccc565b935083602084028501612dd884612cdd565b8060005b87811015612e1e578484038952612df38284612d4a565b612dfe868284612d25565b9550612e0984612dad565b935060208b019a505050600181019050612ddc565b50829750879450505050509392505050565b600060a0820190508181036000830152612e4b818a8c612bfd565b90508181036020830152612e6081888a612c70565b90508181036040830152612e75818688612dba565b9050612e846060830185611e1f565b612e916080830184611e1f565b9998505050505050505050565b7f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160008201527f6e6e6f742062652063616e63656c6c6564000000000000000000000000000000602082015250565b6000612efa603183612774565b9150612f0582612e9e565b604082019050919050565b60006020820190508181036000830152612f2981612eed565b9050919050565b7f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60008201527f7265616479207363686564756c65640000000000000000000000000000000000602082015250565b6000612f8c602f83612774565b9150612f9782612f30565b604082019050919050565b60006020820190508181036000830152612fbb81612f7f565b9050919050565b7f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460008201527f2064656c61790000000000000000000000000000000000000000000000000000602082015250565b600061301e602683612774565b915061302982612fc2565b604082019050919050565b6000602082019050818103600083015261304d81613011565b9050919050565b600061305f82611be4565b915061306a83611be4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561309f5761309e612b20565b5b828201905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006130eb6017836130aa565b91506130f6826130b5565b601782019050919050565b600081519050919050565b60005b8381101561312a57808201518184015260208101905061310f565b83811115613139576000848401525b50505050565b600061314a82613101565b61315481856130aa565b935061316481856020860161310c565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006131a66011836130aa565b91506131b182613170565b601182019050919050565b60006131c7826130de565b91506131d3828561313f565b91506131de82613199565b91506131ea828461313f565b91508190509392505050565b600061320182613101565b61320b8185612774565b935061321b81856020860161310c565b61322481611f15565b840191505092915050565b6000602082019050818103600083015261324981846131f6565b905092915050565b7f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360008201527f206e6f7420726561647900000000000000000000000000000000000000000000602082015250565b60006132ad602a83612774565b91506132b882613251565b604082019050919050565b600060208201905081810360008301526132dc816132a0565b9050919050565b7f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560008201527f6e64656e63790000000000000000000000000000000000000000000000000000602082015250565b600061333f602683612774565b915061334a826132e3565b604082019050919050565b6000602082019050818103600083015261336e81613332565b9050919050565b600081905092915050565b600061338c8385613375565b9350613399838584611fd2565b82840190509392505050565b60006133b2828486613380565b91508190509392505050565b7f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460008201527f72616e73616374696f6e20726576657274656400000000000000000000000000602082015250565b600061341a603383612774565b9150613425826133be565b604082019050919050565b600060208201905081810360008301526134498161340d565b9050919050565b600061345b82611be4565b915061346683611be4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561349f5761349e612b20565b5b828202905092915050565b60006134b582611be4565b9150600082036134c8576134c7612b20565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613509602083612774565b9150613514826134d3565b602082019050919050565b60006020820190508181036000830152613538816134fc565b905091905056fea26469706673582212207472e292c0357e758309583287cd71ddc781344a2aa71a1112b6ec927c479a1b64736f6c634300080d0033",
"deployedBytecode": "0x6080604052600436106101c65760003560e01c806364d62353116100f7578063b1c5f42711610095578063d547741f11610064578063d547741f146106ae578063e38335e5146106d7578063f23a6e61146106f3578063f27a0c9214610730576101cd565b8063b1c5f427146105ce578063bc197c811461060b578063c4d252f514610648578063d45c443514610671576101cd565b80638f61f4f5116100d15780638f61f4f51461051057806391d148541461053b578063a217fddf14610578578063b08e51c0146105a3576101cd565b806364d62353146104815780638065657f146104aa5780638f2a0bb0146104e7576101cd565b80631fb78738116101645780632f2ff15d1161013e5780632f2ff15d146103b557806331d50750146103de57806336568abe1461041b578063584b153e14610444576101cd565b80631fb7873814610324578063248a9ca31461033b5780632ab0f52914610378576101cd565b80630d3cf6fc116101a05780630d3cf6fc14610263578063134008d31461028e57806313bc9f20146102aa578063150b7a02146102e7576101cd565b806301d5062a146101d257806301ffc9a7146101fb57806307bd026514610238576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190611cb5565b61075b565b005b34801561020757600080fd5b50610222600480360381019061021d9190611dbc565b610833565b60405161022f9190611e04565b60405180910390f35b34801561024457600080fd5b5061024d6108ad565b60405161025a9190611e2e565b60405180910390f35b34801561026f57600080fd5b506102786108d1565b6040516102859190611e2e565b60405180910390f35b6102a860048036038101906102a39190611e49565b6108f5565b005b3480156102b657600080fd5b506102d160048036038101906102cc9190611ee3565b6109b2565b6040516102de9190611e04565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190612051565b6109d8565b60405161031b91906120e3565b60405180910390f35b34801561033057600080fd5b506103396109ec565b005b34801561034757600080fd5b50610362600480360381019061035d9190611ee3565b610af8565b60405161036f9190611e2e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190611ee3565b610b18565b6040516103ac9190611e04565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906120fe565b610b2d565b005b3480156103ea57600080fd5b5061040560048036038101906104009190611ee3565b610b4e565b6040516104129190611e04565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906120fe565b610b62565b005b34801561045057600080fd5b5061046b60048036038101906104669190611ee3565b610be5565b6040516104789190611e04565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a3919061213e565b610bfa565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190611e49565b610cad565b6040516104de9190611e2e565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061226d565b610cec565b005b34801561051c57600080fd5b50610525610eda565b6040516105329190611e2e565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906120fe565b610efe565b60405161056f9190611e04565b60405180910390f35b34801561058457600080fd5b5061058d610f69565b60405161059a9190611e2e565b60405180910390f35b3480156105af57600080fd5b506105b8610f70565b6040516105c59190611e2e565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061235c565b610f94565b6040516106029190611e2e565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906124fb565b610fd9565b60405161063f91906120e3565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190611ee3565b610fee565b005b34801561067d57600080fd5b5061069860048036038101906106939190611ee3565b6110a8565b6040516106a591906125d9565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d091906120fe565b6110c5565b005b6106f160048036038101906106ec919061235c565b6110e6565b005b3480156106ff57600080fd5b5061071a600480360381019061071591906125f4565b6112d0565b60405161072791906120e3565b60405180910390f35b34801561073c57600080fd5b506107456112e5565b60405161075291906125d9565b604