@venusprotocol/governance-contracts
Version:
### Prerequisites
750 lines • 69 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "OmnichainProposalSender",
"sourceName": "contracts/Cross-chain/OmnichainProposalSender.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract ILayerZeroEndpoint",
"name": "lzEndpoint_",
"type": "address"
},
{
"internalType": "address",
"name": "accessControlManager_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ZeroAddressNotAllowed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "executionHash",
"type": "bytes32"
}
],
"name": "ClearPayload",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "remoteChainId",
"type": "uint16"
},
{
"indexed": false,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "payload",
"type": "bytes"
}
],
"name": "ExecuteRemoteProposal",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "FallbackWithdraw",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "oldAccessControlManager",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newAccessControlManager",
"type": "address"
}
],
"name": "NewAccessControlManager",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "chainId",
"type": "uint16"
},
{
"indexed": false,
"internalType": "uint256",
"name": "oldMaxLimit",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newMaxLimit",
"type": "uint256"
}
],
"name": "SetMaxDailyLimit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "remoteChainId",
"type": "uint16"
},
{
"indexed": false,
"internalType": "bytes",
"name": "oldRemoteAddress",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "newRemoteAddress",
"type": "bytes"
}
],
"name": "SetTrustedRemoteAddress",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint16",
"name": "remoteChainId",
"type": "uint16"
},
{
"indexed": false,
"internalType": "bytes",
"name": "payload",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "adapterParams",
"type": "bytes"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "reason",
"type": "bytes"
}
],
"name": "StorePayload",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "chainId",
"type": "uint16"
}
],
"name": "TrustedRemoteRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "LZ_ENDPOINT",
"outputs": [
{
"internalType": "contract ILayerZeroEndpoint",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "accessControlManager",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"name": "chainIdToLast24HourCommandsSent",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"name": "chainIdToLast24HourWindowStart",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"name": "chainIdToLastProposalSentTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"name": "chainIdToMaxDailyLimit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
},
{
"internalType": "bytes",
"name": "payload_",
"type": "bytes"
},
{
"internalType": "bool",
"name": "useZro_",
"type": "bool"
},
{
"internalType": "bytes",
"name": "adapterParams_",
"type": "bytes"
}
],
"name": "estimateFees",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
},
{
"internalType": "bytes",
"name": "payload_",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "adapterParams_",
"type": "bytes"
},
{
"internalType": "address",
"name": "zroPaymentAddress_",
"type": "address"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to_",
"type": "address"
},
{
"internalType": "uint256",
"name": "pId_",
"type": "uint256"
},
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
},
{
"internalType": "bytes",
"name": "payload_",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "adapterParams_",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "originalValue_",
"type": "uint256"
}
],
"name": "fallbackWithdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "version_",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "chainId_",
"type": "uint16"
},
{
"internalType": "uint256",
"name": "configType_",
"type": "uint256"
}
],
"name": "getConfig",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proposalCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
}
],
"name": "removeTrustedRemote",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "pId_",
"type": "uint256"
},
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
},
{
"internalType": "bytes",
"name": "payload_",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "adapterParams_",
"type": "bytes"
},
{
"internalType": "address",
"name": "zroPaymentAddress_",
"type": "address"
},
{
"internalType": "uint256",
"name": "originalValue_",
"type": "uint256"
}
],
"name": "retryExecute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "accessControlManager_",
"type": "address"
}
],
"name": "setAccessControlManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "version_",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "chainId_",
"type": "uint16"
},
{
"internalType": "uint256",
"name": "configType_",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "config_",
"type": "bytes"
}
],
"name": "setConfig",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "chainId_",
"type": "uint16"
},
{
"internalType": "uint256",
"name": "limit_",
"type": "uint256"
}
],
"name": "setMaxDailyLimit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "version_",
"type": "uint16"
}
],
"name": "setSendVersion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "remoteChainId_",
"type": "uint16"
},
{
"internalType": "bytes",
"name": "newRemoteAddress_",
"type": "bytes"
}
],
"name": "setTrustedRemoteAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "storedExecutionHashes",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"name": "trustedRemoteLookup",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60a060405234801561001057600080fd5b5060405161346c38038061346c83398101604081905261002f91610120565b60016000558061003e3361008f565b6001805460ff60a01b19169055610054816100e1565b600280546001600160a01b0319166001600160a01b039290921691909117905561007d826100e1565b506001600160a01b031660805261015a565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038116610108576040516342bcdf7f60e11b815260040160405180910390fd5b50565b6001600160a01b038116811461010857600080fd5b6000806040838503121561013357600080fd5b825161013e8161010b565b602084015190925061014f8161010b565b809150509250929050565b6080516132cd61019f600039600081816104e0015281816105e80152818161070001528181611067015281816112270152818161164b0152611a3f01526132cd6000f3fe6080604052600436106101a15760003560e01c80637533d788116100e1578063b4a0bdf31161008a578063da35c66411610064578063da35c66414610502578063e0354d7f14610518578063e2222b0e14610545578063f2fde38b1461055857600080fd5b8063b4a0bdf314610481578063cbed8b9c146104ae578063cd4d1c64146104ce57600080fd5b80638da5cb5b116100bb5780638da5cb5b146103e857806393a61d6c14610434578063a6c3d1651461046157600080fd5b80637533d788146103865780637dbb533c146103a65780638456cb59146103d357600080fd5b806330fd54a01161014e5780634f4ba0f4116101285780634f4ba0f4146102e55780635c975abb146103125780635f6716f71461034d578063715018a61461037a57600080fd5b806330fd54a01461029d5780633f4ba83a146102bd5780633fd9d7ef146102d257600080fd5b806321b4eaa11161017f57806321b4eaa1146102285780632488eec81461025d5780632dbbec081461027d57600080fd5b806307e0db17146101a65780630e32cb86146101c85780631183a3b2146101e8575b600080fd5b3480156101b257600080fd5b506101c66101c136600461222e565b610578565b005b3480156101d457600080fd5b506101c66101e336600461226b565b61065c565b3480156101f457600080fd5b5061021561020336600461222e565b60046020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023457600080fd5b506102486102433660046122df565b6106fb565b6040805192835260208301919091520161021f565b34801561026957600080fd5b506101c6610278366004612374565b6107b2565b34801561028957600080fd5b506101c661029836600461222e565b610855565b3480156102a957600080fd5b506101c66102b836600461239e565b61097b565b3480156102c957600080fd5b506101c6610d11565b6101c66102e0366004612442565b610d59565b3480156102f157600080fd5b5061021561030036600461222e565b60036020526000908152604090205481565b34801561031e57600080fd5b5060015474010000000000000000000000000000000000000000900460ff16604051901515815260200161021f565b34801561035957600080fd5b5061036d6103683660046124d5565b6111dd565b60405161021f9190612561565b3480156101c657600080fd5b34801561039257600080fd5b5061036d6103a136600461222e565b6112b5565b3480156103b257600080fd5b506102156103c1366004612574565b60086020526000908152604090205481565b3480156103df57600080fd5b506101c661134f565b3480156103f457600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b34801561044057600080fd5b5061021561044f36600461222e565b60056020526000908152604090205481565b34801561046d57600080fd5b506101c661047c36600461258d565b611395565b34801561048d57600080fd5b5060025461040f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ba57600080fd5b506101c66104c93660046125e0565b6115ed565b3480156104da57600080fd5b5061040f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050e57600080fd5b5061021560075481565b34801561052457600080fd5b5061021561053336600461222e565b60066020526000908152604090205481565b6101c661055336600461264f565b6116b6565b34801561056457600080fd5b506101c661057336600461226b565b611ad8565b6105b66040518060400160405280601681526020017f73657453656e6456657273696f6e2875696e7431362900000000000000000000815250611b75565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307e0db1790602401600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b610664611c5a565b61066d81611cc1565b60025460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090600090a3600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340a7bb1089308a8a8a8a8a6040518863ffffffff1660e01b81526004016107639796959493929190612721565b6040805180830381865afa15801561077f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a39190612784565b91509150965096945050505050565b6107f06040518060400160405280602081526020017f7365744d61784461696c794c696d69742875696e7431362c75696e7432353629815250611b75565b61ffff82166000818152600360209081526040918290205482519081529081018490527f4dd31065e259d5284e44d1f9265710da72eafcf78dc925e3881189fc3b71f693910160405180910390a261ffff909116600090815260036020526040902055565b6108936040518060400160405280601b81526020017f72656d6f76655472757374656452656d6f74652875696e743136290000000000815250611b75565b61ffff8116600090815260096020526040902080546108b1906127a8565b905060000361092d5760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a207472757374656460448201527f2072656d6f7465206e6f7420666f756e6400000000000000000000000000000060648201526084015b60405180910390fd5b61ffff81166000908152600960205260408120610949916121c9565b60405161ffff8216907f6d5075c81d4d9e75bec6052f4e44f58f8a8cf1327544addbbf015fb06f83bd3790600090a250565b610983611c5a565b61098b611d0e565b61099488611cc1565b60008111610a0a5760405162461bcd60e51b815260206004820152602e60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20696e76616c696460448201527f206e617469766520616d6f756e740000000000000000000000000000000000006064820152608401610924565b6000849003610a815760405162461bcd60e51b815260206004820152602660248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20656d707479207060448201527f61796c6f616400000000000000000000000000000000000000000000000000006064820152608401610924565b60008781526008602052604090205480610b035760405162461bcd60e51b815260206004820152602a60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a206e6f2073746f7260448201527f6564207061796c6f6164000000000000000000000000000000000000000000006064820152608401610924565b6000878787878787604051602001610b20969594939291906127fb565b604051602081830303815290604052905081818051906020012014610bad5760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20696e76616c696460448201527f20657865637574696f6e20706172616d730000000000000000000000000000006064820152608401610924565b600089815260086020526040808220919091555173ffffffffffffffffffffffffffffffffffffffff8b16907f22fe8e8ead80ad0961d77107e806ba9bcf9ca3b175a9d446145646d39c36ab9690610c089086815260200190565b60405180910390a2887f2dc7ac5d08fd553243fc66b5f15262e3f3013e27abf660d7bb3fccf133322f6e83604051610c4291815260200190565b60405180910390a260008a73ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d8060008114610ca4576040519150601f19603f3d011682016040523d82523d6000602084013e610ca9565b606091505b5050905080610cfa5760405162461bcd60e51b815260206004820152600b60248201527f43616c6c206661696c65640000000000000000000000000000000000000000006044820152606401610924565b505050610d076001600055565b5050505050505050565b610d4f6040518060400160405280600981526020017f756e706175736528290000000000000000000000000000000000000000000000815250611b75565b610d57611d67565b565b610d61611de4565b610d826040518060600160405280602381526020016131f260239139611b75565b60003411610df85760405162461bcd60e51b815260206004820152602d60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2076616c7565206360448201527f616e6e6f74206265207a65726f000000000000000000000000000000000000006064820152608401610924565b6000849003610e6f5760405162461bcd60e51b815260206004820152602660248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20656d707479207060448201527f61796c6f616400000000000000000000000000000000000000000000000000006064820152608401610924565b61ffff861660009081526009602052604081208054610e8d906127a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb9906127a8565b8015610f065780601f10610edb57610100808354040283529160200191610f06565b820191906000526020600020905b815481529060010190602001808311610ee957829003601f168201915b505050505090508051600003610faa5760405162461bcd60e51b815260206004820152604260248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2064657374696e6160448201527f74696f6e20636861696e206973206e6f742061207472757374656420736f757260648201527f6365000000000000000000000000000000000000000000000000000000000000608482015260a401610924565b610fea8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4f92505050565b6000600760008154610ffb9061286f565b9190508190559050600087878360405160200161101a939291906128a7565b60408051601f19818403018152908290527fc5803100000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c58031009034906110aa908d908890879033908c908f908f906004016128cb565b6000604051808303818588803b1580156110c357600080fd5b505af1935050505080156110d5575060015b611193573d808015611103576040519150601f19603f3d011682016040523d82523d6000602084013e611108565b606091505b508982888834604051602001611122959493929190612933565b60408051601f198184030181528282528051602091820120600087815260089092529190205561ffff8b169084907f6d16111647e03d7f1cb2b71c02eafe3355b97dfc17af3de1b94ef39c8a9ee4d9906111859086908c908c9034908990612976565b60405180910390a3506111d2565b8861ffff167f95a4fcf4eb9be6f5cf2eb6830782870f8907bccc513f765388a9cb2dae2f325983836040516111c99291906129c2565b60405180910390a25b505050505050505050565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808516600483015283166024820152306044820152606481018290526060907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc90608401600060405180830381865afa158015611283573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ab9190810190612ab8565b90505b9392505050565b600960205260009081526040902080546112ce906127a8565b80601f01602080910402602001604051908101604052809291908181526020018280546112fa906127a8565b80156113475780601f1061131c57610100808354040283529160200191611347565b820191906000526020600020905b81548152906001019060200180831161132a57829003601f168201915b505050505081565b61138d6040518060400160405280600781526020017f7061757365282900000000000000000000000000000000000000000000000000815250611b75565b610d57611f3c565b6113b660405180606001604052806025815260200161321560259139611b75565b8261ffff166000036114305760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20636861696e496460448201527f206d757374206e6f74206265207a65726f0000000000000000000000000000006064820152608401610924565b61144561143d8284612af5565b60601c611cc1565b601481146114bb5760405162461bcd60e51b815260206004820152603d60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2072656d6f74652060448201527f61646472657373206d757374206265203230206279746573206c6f6e670000006064820152608401610924565b61ffff8316600090815260096020526040812080546114d9906127a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611505906127a8565b80156115525780601f1061152757610100808354040283529160200191611552565b820191906000526020600020905b81548152906001019060200180831161153557829003601f168201915b5050505050905082823060405160200161156e93929190612b3d565b60408051601f1981840301815291815261ffff86166000908152600960205220906115999082612bc3565b5061ffff84166000818152600960205260409081902090517fe84e609c32d71c678382f7c65cc051810a41dcaf660e55c9f8fcffeba4621a32916115df91859190612cbf565b60405180910390a250505050565b61160e60405180606001604052806026815260200161323a60269139611b75565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c906116889088908890889088908890600401612d78565b600060405180830381600087803b1580156116a257600080fd5b505af11580156111d2573d6000803e3d6000fd5b6116be611de4565b6116c6611d0e565b6116e760405180606001604052806038815260200161326060389139611b75565b61ffff871660009081526009602052604081208054611705906127a8565b80601f0160208091040260200160405190810160405280929190818152602001828054611731906127a8565b801561177e5780601f106117535761010080835404028352916020019161177e565b820191906000526020600020905b81548152906001019060200180831161176157829003601f168201915b5050505050905080516000036118225760405162461bcd60e51b815260206004820152604260248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2064657374696e6160448201527f74696f6e20636861696e206973206e6f742061207472757374656420736f757260648201527f6365000000000000000000000000000000000000000000000000000000000000608482015260a401610924565b600089815260086020526040902054806118a45760405162461bcd60e51b815260206004820152602a60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a206e6f2073746f7260448201527f6564207061796c6f6164000000000000000000000000000000000000000000006064820152608401610924565b600087900361191b5760405162461bcd60e51b815260206004820152602660248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20656d707479207060448201527f61796c6f616400000000000000000000000000000000000000000000000000006064820152608401610924565b6000611929888a018a612db1565b5090506119368a82611e4f565b818a8a8a8a8a89604051602001611952969594939291906127fb565b60405160208183030381529060405280519060200120146119db5760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20696e76616c696460448201527f20657865637574696f6e20706172616d730000000000000000000000000000006064820152608401610924565b60008b81526008602052604080822091909155518b907f2dc7ac5d08fd553243fc66b5f15262e3f3013e27abf660d7bb3fccf133322f6e90611a209085815260200190565b60405180910390a273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663c5803100611a6e3487612e2e565b8c868d8d338c8f8f6040518a63ffffffff1660e01b8152600401611a99989796959493929190612e47565b6000604051808303818588803b158015611ab257600080fd5b505af1158015611ac6573d6000803e3d6000fd5b5050505050505050610d076001600055565b611ae0611c5a565b73ffffffffffffffffffffffffffffffffffffffff8116611b695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610924565b611b7281611fab565b50565b6002546040517f18c5e8ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906318c5e8ab90611bcd9033908590600401612ebf565b602060405180830381865afa158015611bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0e9190612eee565b611b725760405162461bcd60e51b815260206004820152600d60248201527f6163636573732064656e696564000000000000000000000000000000000000006044820152606401610924565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610924565b73ffffffffffffffffffffffffffffffffffffffff8116611b72576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260005403611d605760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610924565b6002600055565b611d6f612022565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60015474010000000000000000000000000000000000000000900460ff1615610d575760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610924565b60008060008084806020019051810190611e6991906130bf565b50935093509350935082518451148015611e84575081518451145b8015611e91575080518451145b611f295760405162461bcd60e51b815260206004820152604560248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2070726f706f736160448201527f6c2066756e6374696f6e20696e666f726d6174696f6e206172697479206d697360648201527f6d61746368000000000000000000000000000000000000000000000000000000608482015260a401610924565b611f3486855161208c565b505050505050565b611f44611de4565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dba3390565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60015474010000000000000000000000000000000000000000900460ff16610d575760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610924565b61ffff8216600090815260056020908152604080832054600483528184205460038452828520546006909452919093205442939290620151806120cf85876131de565b11156120f35761ffff87166000908152600560205260409020859055859250612100565b6120fd8684612e2e565b92505b818311156121505760405162461bcd60e51b815260206004820181905260248201527f4461696c79205472616e73616374696f6e204c696d69742045786365656465646044820152606401610924565b84810361219f5760405162461bcd60e51b815260206004820152601f60248201527f4d756c7469706c65206272696467696e6720696e20612070726f706f73616c006044820152606401610924565b505061ffff9094166000908152600460209081526040808320969096556006905293909320555050565b5080546121d5906127a8565b6000825580601f106121e5575050565b601f016020900490600052602060002090810190611b7291905b8082111561221357600081556001016121ff565b5090565b803561ffff8116811461222957600080fd5b919050565b60006020828403121561224057600080fd5b6112ae82612217565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7257600080fd5b60006020828403121561227d57600080fd5b81356112ae81612249565b60008083601f84011261229a57600080fd5b50813567ffffffffffffffff8111156122b257600080fd5b6020830191508360208285010111156122ca57600080fd5b9250929050565b8015158114611b7257600080fd5b600080600080600080608087890312156122f857600080fd5b61230187612217565b9550602087013567ffffffffffffffff8082111561231e57600080fd5b61232a8a838b01612288565b90975095506040890135915061233f826122d1565b9093506060880135908082111561235557600080fd5b5061236289828a01612288565b979a9699509497509295939492505050565b6000806040838503121561238757600080fd5b61239083612217565b946020939093013593505050565b60008060008060008060008060c0898b0312156123ba57600080fd5b88356123c581612249565b9750602089013596506123da60408a01612217565b9550606089013567ffffffffffffffff808211156123f757600080fd5b6124038c838d01612288565b909750955060808b013591508082111561241c57600080fd5b506124298b828c01612288565b999c989b50969995989497949560a00135949350505050565b6000806000806000806080878903121561245b57600080fd5b61246487612217565b9550602087013567ffffffffffffffff8082111561248157600080fd5b61248d8a838b01612288565b909750955060408901359150808211156124a657600080fd5b506124b389828a01612288565b90945092505060608701356124c781612249565b809150509295509295509295565b6000806000606084860312156124ea57600080fd5b6124f384612217565b925061250160208501612217565b9150604084013590509250925092565b60005b8381101561252c578181015183820152602001612514565b50506000910152565b6000815180845261254d816020860160208601612511565b601f01601f19169290920160200192915050565b6020815260006112ae6020830184612535565b60006020828403121561258657600080fd5b5035919050565b6000806000604084860312156125a257600080fd5b6125ab84612217565b9250602084013567ffffffffffffffff8111156125c757600080fd5b6125d386828701612288565b9497909650939450505050565b6000806000806000608086880312156125f857600080fd5b61260186612217565b945061260f60208701612217565b935060408601359250606086013567ffffffffffffffff81111561263257600080fd5b61263e88828901612288565b969995985093965092949392505050565b60008060008060008060008060c0898b03121561266b57600080fd5b8835975061267b60208a01612217565b9650604089013567ffffffffffffffff8082111561269857600080fd5b6126a48c838d01612288565b909850965060608b01359150808211156126bd57600080fd5b506126ca8b828c01612288565b90955093505060808901356126de81612249565b8092505060a089013590509295985092959890939650565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff8816815273ffffffffffffffffffffffffffffffffffffffff8716602082015260a06040820152600061275b60a0830187896126f6565b851515606084015282810360808401526127768185876126f6565b9a9950505050505050505050565b6000806040838503121561279757600080fd5b505080516020909101519092909150565b600181811c908216806127bc57607f821691505b6020821081036127f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b61ffff871681526080602082015260006128196080830187896126f6565b828103604084015261282c8186886126f6565b915050826060830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128a0576128a0612840565b5060010190565b6040815260006128bb6040830185876126f6565b9050826020830152949350505050565b61ffff8816815260c0602082015260006128e860c0830189612535565b82810360408401526128fa8189612535565b73ffffffffffffffffffffffffffffffffffffffff88811660608601528716608085015283810360a085015290506127768185876126f6565b61ffff861681526080602082015260006129506080830187612535565b82810360408401526129638186886126f6565b9150508260608301529695505050505050565b6080815260006129896080830188612535565b828103602084015261299c8187896126f6565b905084604084015282810360608401526129b68185612535565b98975050505050505050565b8281526040602082015260006112ab6040830184612535565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a3357612a336129db565b604052919050565b600067ffffffffffffffff821115612a5557612a556129db565b50601f01601f191660200190565b6000612a76612a7184612a3b565b612a0a565b9050828152838383011115612a8a57600080fd5b6112ae836020830184612511565b600082601f830112612aa957600080fd5b6112ae83835160208501612a63565b600060208284031215612aca57600080fd5b815167ffffffffffffffff811115612ae157600080fd5b612aed84828501612a98565b949350505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015612b355780818660140360031b1b83161692505b505092915050565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b601f821115612bbe576000816000526020600020601f850160051c81016020861015612b9f5750805b601f850160051c820191505b81811015611f3457828155600101612bab565b505050565b815167ffffffffffffffff811115612bdd57612bdd6129db565b612bf181612beb84546127a8565b84612b76565b602080601f831160018114612c445760008415612c0e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f34565b600085815260208120601f198616915b82811015612c7357888601518255948401946001909101908401612c54565b5085821015612caf57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612cd26040830185612535565b60208382038185015260008554612ce8816127a8565b80855260018281168015612d035760018114612d3b57612d69565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008416868801528583151560051b8801019450612d69565b896000528560002060005b84811015612d61578154898201890152908301908701612d46565b880187019550505b50929998505050505050505050565b600061ffff808816835280871660208401525084604083015260806060830152612da66080830184866126f6565b979650505050505050565b60008060408385031215612dc457600080fd5b823567ffffffffffffffff811115612ddb57600080fd5b8301601f81018513612dec57600080fd5b8035612dfa612a7182612a3b565b818152866020838501011115612e0f57600080fd5b8160208401602083013760006020928201830152969401359450505050565b80820180821115612e4157612e41612840565b92915050565b61ffff8916815260c060208201526000612e6460c083018a612535565b8281036040840152612e7781898b6126f6565b73ffffffffffffffffffffffffffffffffffffffff88811660608601528716608085015283810360a08501529050612eb08185876126f6565b9b9a5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006112ab6040830184612535565b600060208284031215612f0057600080fd5b81516112ae816122d1565b600067ffffffffffffffff821115612f2557612f256129db565b5060051b60200190565b600082601f830112612f4057600080fd5b81516020612f50612a7183612f0b565b8083825260208201915060208460051b870101935086841115612f7257600080fd5b602086015b84811015612f8e5780518352918301918301612f77565b509695505050505050565b600082601f830112612faa57600080fd5b81516020612fba612a7183612f0b565b82815260059290921b84018101918181019086841115612fd957600080fd5b8286015b84811015612f8e57805167ffffffffffffffff811115612ffd5760008081fd5b8701603f8101891361300f5760008081fd5b613020898683015160408401612a63565b845250918301918301612fdd565b600082601f83011261303f57600080fd5b8151602061304f612a7183612f0b565b82815260059290921b8401810191818101908684111561306e57600080fd5b8286015b84811015612f8e57805167ffffffffffffffff8111156130925760008081fd5b6130a08986838b0101612a98565b845250918301918301613072565b805160ff8116811461222957600080fd5b600080600080600060a086880312156130d757600080fd5b855167ffffffffffffffff808211156130ef57600080fd5b818801915088601f83011261310357600080fd5b81516020613113612a7183612f0b565b82815260059290921b8401810191818101908c84111561313257600080fd5b948201945b8386101561315957855161314a81612249565b82529482019490820190613137565b918b015191995090935050508082111561317257600080fd5b61317e89838a01612f2f565b9550604088015191508082111561319457600080fd5b6131a089838a01612f99565b945060608801519150808211156131b657600080fd5b506131c38882890161302e565b9250506131d2608087016130ae565b90509295509295909350565b81810381811115612e4157612e4161284056fe657865637574652875696e7431362c62797465732c62797465732c61646472657373297365745472757374656452656d6f7465416464726573732875696e7431362c627974657329736574436f6e6669672875696e7431362c75696e7431362c75696e743235362c6279746573297265747279457865637574652875696e743235362c75696e7431362c62797465732c62797465732c616464726573732c75696e7432353629a26469706673582212207640aa01bf0fe0091e9a77ed4591e13da364297a13e8537adede0f95d517267664736f6c63430008190033",
"deployedBytecode": "0x6080604052600436106101a15760003560e01c80637533d788116100e1578063b4a0bdf31161008a578063da35c66411610064578063da35c66414610502578063e0354d7f14610518578063e2222b0e14610545578063f2fde38b1461055857600080fd5b8063b4a0bdf314610481578063cbed8b9c146104ae578063cd4d1c64146104ce57600080fd5b80638da5cb5b116100bb5780638da5cb5b146103e857806393a61d6c14610434578063a6c3d1651461046157600080fd5b80637533d788146103865780637dbb533c146103a65780638456cb59146103d357600080fd5b806330fd54a01161014e5780634f4ba0f4116101285780634f4ba0f4146102e55780635c975abb146103125780635f6716f71461034d578063715018a61461037a57600080fd5b806330fd54a01461029d5780633f4ba83a146102bd5780633fd9d7ef146102d257600080fd5b806321b4eaa11161017f57806321b4eaa1146102285780632488eec81461025d5780632dbbec081461027d57600080fd5b806307e0db17146101a65780630e32cb86146101c85780631183a3b2146101e8575b600080fd5b3480156101b257600080fd5b506101c66101c136600461222e565b610578565b005b3480156101d457600080fd5b506101c66101e336600461226b565b61065c565b3480156101f457600080fd5b5061021561020336600461222e565b60046020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023457600080fd5b506102486102433660046122df565b6106fb565b6040805192835260208301919091520161021f565b34801561026957600080fd5b506101c6610278366004612374565b6107b2565b34801561028957600080fd5b506101c661029836600461222e565b610855565b3480156102a957600080fd5b506101c66102b836600461239e565b61097b565b3480156102c957600080fd5b506101c6610d11565b6101c66102e0366004612442565b610d59565b3480156102f157600080fd5b5061021561030036600461222e565b60036020526000908152604090205481565b34801561031e57600080fd5b5060015474010000000000000000000000000000000000000000900460ff16604051901515815260200161021f565b34801561035957600080fd5b5061036d6103683660046124d5565b6111dd565b60405161021f9190612561565b3480156101c657600080fd5b34801561039257600080fd5b5061036d6103a136600461222e565b6112b5565b3480156103b257600080fd5b506102156103c1366004612574565b60086020526000908152604090205481565b3480156103df57600080fd5b506101c661134f565b3480156103f457600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b34801561044057600080fd5b5061021561044f36600461222e565b60056020526000908152604090205481565b34801561046d57600080fd5b506101c661047c36600461258d565b611395565b34801561048d57600080fd5b5060025461040f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ba57600080fd5b506101c66104c93660046125e0565b6115ed565b3480156104da57600080fd5b5061040f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050e57600080fd5b5061021560075481565b34801561052457600080fd5b5061021561053336600461222e565b60066020526000908152604090205481565b6101c661055336600461264f565b6116b6565b34801561056457600080fd5b506101c661057336600461226b565b611ad8565b6105b66040518060400160405280601681526020017f73657453656e6456657273696f6e2875696e7431362900000000000000000000815250611b75565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307e0db1790602401600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b610664611c5a565b61066d81611cc1565b60025460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090600090a3600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340a7bb1089308a8a8a8a8a6040518863ffffffff1660e01b81526004016107639796959493929190612721565b6040805180830381865afa15801561077f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a39190612784565b91509150965096945050505050565b6107f06040518060400160405280602081526020017f7365744d61784461696c794c696d69742875696e7431362c75696e7432353629815250611b75565b61ffff82166000818152600360209081526040918290205482519081529081018490527f4dd31065e259d5284e44d1f9265710da72eafcf78dc925e3881189fc3b71f693910160405180910390a261ffff909116600090815260036020526040902055565b6108936040518060400160405280601b81526020017f72656d6f76655472757374656452656d6f74652875696e743136290000000000815250611b75565b61ffff8116600090815260096020526040902080546108b1906127a8565b905060000361092d5760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a207472757374656460448201527f2072656d6f7465206e6f7420666f756e6400000000000000000000000000000060648201526084015b60405180910390fd5b61ffff81166000908152600960205260408120610949916121c9565b60405161ffff8216907f6d5075c81d4d9e75bec6052f4e44f58f8a8cf1327544addbbf015fb06f83bd3790600090a250565b610983611c5a565b61098b611d0e565b61099488611cc1565b60008111610a0a5760405162461bcd60e51b815260206004820152602e60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20696e76616c696460448201527f206e617469766520616d6f756e740000000000000000000000000000000000006064820152608401610924565b6000849003610a815760405162461bcd60e51b815260206004820152602660248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20656d707479207060448201527f61796c6f616400000000000000000000000000000000000000000000000000006064820152608401610924565b60008781526008602052604090205480610b035760405162461bcd60e51b815260206004820152602a60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a206e6f2073746f7260448201527f6564207061796c6f6164000000000000000000000000000000000000000000006064820152608401610924565b6000878787878787604051602001610b20969594939291906127fb565b604051602081830303815290604052905081818051906020012014610bad5760405162461bcd60e51b815260206004820152603160248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a20696e76616c696460448201527f20657865637574696f6e20706172616d730000000000000000000000000000006064820152608401610924565b600089815260086020526040808220919091555173ffffffffffffffffffffffffffffffffffffffff8b16907f22fe8e8ead80ad0961d77107e806ba9bcf9ca3b175a9d446145646d39c36ab9690610c089086815260200190565b60405180910390a2887f2dc7ac5d08fd553243fc66b5f15262e3f3013e27abf660d7bb3fccf133322f6e83604051610c4291815260200190565b60405180910390a260008a73ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d8060008114610ca4576040519150601f19603f3d011682016040523d82523d6000602084013e610ca9565b606091505b5050905080610cfa5760405162461bcd60e51b815260206004820152600b60248201527f43616c6c206661696c65640000000000000000000000000000000000000000006044820152606401610924565b505050610d076001600055565b5050505050505050565b610d4f6040518060400160405280600981526020017f756e706175736528290000000000000000000000000000000000000000000000815250611b75565b610d57611d67565b565b610d61611de4565b610d826040518060600160405280602381526020016131f260239139611b75565b60003411610df85760405162461bcd60e51b815260206004820152602d60248201527f4f6d6e69636861696e50726f706f73616c53656e6465723a2076616c7565206360448201527f616e6e6f7