UNPKG

@tokamak-network/thanos-contracts

Version:
548 lines 97.3 kB
{ "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "FailedRelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "RelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "messageNonce", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gasLimit", "type": "uint256" } ], "name": "SentMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SentMessageExtension1", "type": "event" }, { "inputs": [], "name": "MESSAGE_VERSION", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_GAS_CALLDATA_OVERHEAD", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OTHER_MESSENGER", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PORTAL", "outputs": [ { "internalType": "contract OptimismPortal", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RELAY_CALL_OVERHEAD", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RELAY_CONSTANT_OVERHEAD", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RELAY_GAS_CHECK_BUFFER", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RELAY_RESERVED_GAS", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" } ], "name": "baseGas", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "failedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract OptimismPortal", "name": "_portal", "type": "address" }, { "internalType": "address", "name": "_nativeTokenAddress", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "messageNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nativeTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "onApprove", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "portal", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_nonce", "type": "uint256" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_minGasLimit", "type": "uint256" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "name": "relayMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" } ], "name": "sendMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" } ], "name": "sendNativeTokenMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "successfulMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "unpackOnApproveData", "outputs": [ { "internalType": "uint32", "name": "_minGasLimit", "type": "uint32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xDomainMessageSender", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "address": "0x556Ab37b5DDF003D4349024fa2aEA23D71971881", "args": [], "bytecode": "0x60a06040523480156200001157600080fd5b50734200000000000000000000000000000000000007608052620000376000806200003d565b62000227565b600054600390600160a81b900460ff1615801562000069575060005460ff808316600160a01b90920416105b620000d25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a81b1960ff8416600160a01b021661ffff60a01b1990911617600160a81b17905560f980546001600160a01b038086166001600160a01b03199283161790925560fa80549285169290911691909117905562000134620001a2565b60f9546001600160a01b03161580159062000159575060fa546001600160a01b031615155b506000805460ff60a81b1916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600054600160a81b900460ff16620002115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000c9565b60cc80546001600160a01b03191661dead179055565b608051612bc3620002586000396000818161043d01528181610615015281816118a90152611e750152612bc36000f3fe6080604052600436106101965760003560e01c80635644cfdf116100e15780639fce812c1161008a578063b28ade2511610064578063b28ade25146104bf578063d764ad0b146104df578063e0e593c5146104f2578063ecc704281461051257600080fd5b80639fce812c1461042b578063a4e7f8bd1461045f578063b1b1b2091461048f57600080fd5b806383a74074116100bb57806383a74074146103e65780638cbeeef2146102f757806392a162cf146103fd57600080fd5b80635644cfdf146103905780636425666b146103a65780636e296e45146103d157600080fd5b80633f827a5a116101435780634c1d6a691161011d5780634c1d6a69146102f75780634d0047ee1461030d57806354fd4d501461033a57600080fd5b80633f827a5a1461028f5780634273ca16146102b7578063485cc955146102d757600080fd5b80630ff754ea116101745780630ff754ea146102135780632828d7e8146102655780633dbb202b1461027a57600080fd5b806301ffc9a71461019b578063028f85f7146101d05780630c568498146101fe575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004612329565b610577565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101e5601081565b60405167ffffffffffffffff90911681526020016101c7565b34801561020a57600080fd5b506101e5603f81565b34801561021f57600080fd5b5060f9546102409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c7565b34801561027157600080fd5b506101e5604081565b61028d6102883660046123f2565b610610565b005b34801561029b57600080fd5b506102a4600181565b60405161ffff90911681526020016101c7565b3480156102c357600080fd5b506101bb6102d2366004612459565b610874565b3480156102e357600080fd5b5061028d6102f23660046124cc565b610ad5565b34801561030357600080fd5b506101e5619c4081565b34801561031957600080fd5b5060fa546102409073ffffffffffffffffffffffffffffffffffffffff1681565b34801561034657600080fd5b506103836040518060400160405280600581526020017f312e372e3100000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061257b565b34801561039c57600080fd5b506101e561138881565b3480156103b257600080fd5b5060f95473ffffffffffffffffffffffffffffffffffffffff16610240565b3480156103dd57600080fd5b50610240610d2e565b3480156103f257600080fd5b506101e562030d4081565b34801561040957600080fd5b5061041d6104183660046125bd565b610e15565b6040516101c792919061268c565b34801561043757600080fd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b34801561046b57600080fd5b506101bb61047a3660046126ab565b60ce6020526000908152604090205460ff1681565b34801561049b57600080fd5b506101bb6104aa3660046126ab565b60cb6020526000908152604090205460ff1681565b3480156104cb57600080fd5b506101e56104da3660046126c4565b610e5e565b61028d6104ed366004612718565b610ece565b3480156104fe57600080fd5b5061028d61050d36600461279e565b6118a4565b34801561051e57600080fd5b5061056960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101c7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061060a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107497f000000000000000000000000000000000000000000000000000000000000000061063f858585610e5e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006106ab60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106c79796959493929190612858565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a8c565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856107ce60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107e09594939291906128b7565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fa5460009073ffffffffffffffffffffffffffffffffffffffff163314610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f6f6e6c7920616363657074206e617469766520746f6b656e20617070726f766560448201527f2063616c6c6261636b000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60008061096585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e1592505050565b90925090508515610a365760fa546109959073ffffffffffffffffffffffffffffffffffffffff16893089611c57565b60fa5460f9546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291169063095ea7b3906044016020604051808303816000875af1158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190612905565b505b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290610a95908b908a9087906000908890600401612927565b600060405180830381600087803b158015610aaf57600080fd5b505af1158015610ac3573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b6000546003907501000000000000000000000000000000000000000000900460ff16158015610b23575060005460ff8083167401000000000000000000000000000000000000000090920416105b610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161091a565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff90911617750100000000000000000000000000000000000000000017905560f9805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fa805492851692909116919091179055610c8c611cf2565b60f95473ffffffffffffffffffffffffffffffffffffffff1615801590610cca575060fa5473ffffffffffffffffffffffffffffffffffffffff1615155b50600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161091a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b60006060600483511015610e3a57505060408051602081019091526000815262030d40905b825160208401805160e01c93509060048114610e57576004820192505b5050915091565b6000611388619c4080603f610e7a604063ffffffff881661299f565b610e8491906129cf565b610e8f60108861299f565b610e9c9062030d40612a1d565b610ea69190612a1d565b610eb09190612a1d565b610eba9190612a1d565b610ec49190612a1d565b90505b9392505050565b3415610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f000000000000000000000000000000000000000000000000606482015260840161091a565b60f087901c60028110611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161091a565b8061ffff1660000361110c576000611068878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611dcb915050565b600081815260cb602052604090205490915060ff161561110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161091a565b505b6000611152898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dea92505050565b905061115c611e0d565b156111b057600081815260ce602052604090205460ff161561118057611180612a49565b85156111ab5760fa546111ab9073ffffffffffffffffffffffffffffffffffffffff16333089611c57565b61124e565b600081815260ce602052604090205460ff1661124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161091a565b61125787611f03565b1561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161091a565b600081815260cb602052604090205460ff16156113a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161091a565b6113ca856113bb611388619c40612a1d565b67ffffffffffffffff16611f46565b15806113f0575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561150957600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161091a565b505061189b565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600186156115f15760fa546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a90529091169063095ea7b3906044016020604051808303816000875af11580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612905565b90505b600061164389619c405a6116059190612a78565b600089898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905087156117175760fa546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152600060248301529091169063095ea7b3906044016020604051808303816000875af11580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612905565b91505b8080156117215750815b1561178957600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611896565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161091a565b505050505b50505050505050565b61195b7f00000000000000000000000000000000000000000000000000000000000000006118d3858585610e5e565b867fd764ad0b0000000000000000000000000000000000000000000000000000000061193f60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338b8b898c8c6040516024016106c79796959493929190612858565b8473ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856119e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516119f29594939291906128b7565b60405180910390a260405184815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b905090565b3415611af4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44656e79206465706f736974696e672045544800000000000000000000000000604482015260640161091a565b8115611bc05760fa54611b1f9073ffffffffffffffffffffffffffffffffffffffff16333085611c57565b60fa5460f9546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe9190612905565b505b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290611c1f908790869088906000908890600401612a8f565b600060405180830381600087803b158015611c3957600080fd5b505af1158015611c4d573d6000803e3d6000fd5b5050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611cec908590611f7e565b50505050565b6000547501000000000000000000000000000000000000000000900460ff16611d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161091a565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6000611dd98585858561208f565b805190602001209050949350505050565b6000611dfa878787878787612128565b8051906020012090509695505050505050565b60f95460009073ffffffffffffffffffffffffffffffffffffffff1633148015611a87575060f954604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691639bf62d829160048083019260209291908290030181865afa158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee79190612adc565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061060a57505060f95473ffffffffffffffffffffffffffffffffffffffff90811691161490565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000611fe0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121c79092919063ffffffff16565b80519091501561208a5780806020019051810190611ffe9190612905565b61208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161091a565b505050565b6060848484846040516024016120a89493929190612af9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161214596959493929190612b43565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b6060610ec484846000858573ffffffffffffffffffffffffffffffffffffffff85163b612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161091a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122799190612b9a565b60006040518083038185875af1925050503d80600081146122b6576040519150601f19603f3d011682016040523d82523d6000602084013e6122bb565b606091505b50915091506122cb8282866122d6565b979650505050505050565b606083156122e5575081610ec7565b8251156122f55782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a919061257b565b60006020828403121561233b57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ec757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461238d57600080fd5b50565b60008083601f8401126123a257600080fd5b50813567ffffffffffffffff8111156123ba57600080fd5b6020830191508360208285010111156123d257600080fd5b9250929050565b803563ffffffff811681146123ed57600080fd5b919050565b6000806000806060858703121561240857600080fd5b84356124138161236b565b9350602085013567ffffffffffffffff81111561242f57600080fd5b61243b87828801612390565b909450925061244e9050604086016123d9565b905092959194509250565b60008060008060006080868803121561247157600080fd5b853561247c8161236b565b9450602086013561248c8161236b565b935060408601359250606086013567ffffffffffffffff8111156124af57600080fd5b6124bb88828901612390565b969995985093965092949392505050565b600080604083850312156124df57600080fd5b82356124ea8161236b565b915060208301356124fa8161236b565b809150509250929050565b60005b83811015612520578181015183820152602001612508565b83811115611cec5750506000910152565b60008151808452612549816020860160208601612505565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ec76020830184612531565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156125cf57600080fd5b813567ffffffffffffffff808211156125e757600080fd5b818401915084601f8301126125fb57600080fd5b81358181111561260d5761260d61258e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156126535761265361258e565b8160405282815287602084870101111561266c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b63ffffffff83168152604060208201526000610ec46040830184612531565b6000602082840312156126bd57600080fd5b5035919050565b6000806000604084860312156126d957600080fd5b833567ffffffffffffffff8111156126f057600080fd5b6126fc86828701612390565b909450925061270f9050602085016123d9565b90509250925092565b600080600080600080600060c0888a03121561273357600080fd5b8735965060208801356127458161236b565b955060408801356127558161236b565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561277f57600080fd5b61278b8a828b01612390565b989b979a50959850939692959293505050565b6000806000806000608086880312156127b657600080fd5b85356127c18161236b565b945060208601359350604086013567ffffffffffffffff8111156127e457600080fd5b6127f088828901612390565b90945092506128039050606087016123d9565b90509295509295909350565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526128aa60c08301848661280f565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006128e760808301868861280f565b905083604083015263ffffffff831660608301529695505050505050565b60006020828403121561291757600080fd5b81518015158114610ec757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015263ffffffff84166040820152821515606082015260a0608082015260006122cb60a0830184612531565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156129c6576129c6612970565b02949350505050565b600067ffffffffffffffff80841680612a11577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115612a4057612a40612970565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015612a8a57612a8a612970565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a0608082015260006122cb60a0830184612531565b600060208284031215612aee57600080fd5b8151610ec78161236b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152612b326080830185612531565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152612b8e60c0830184612531565b98975050505050505050565b60008251612bac818460208701612505565b919091019291505056fea164736f6c634300080f000a", "deployedBytecode": "0x6080604052600436106101965760003560e01c80635644cfdf116100e15780639fce812c1161008a578063b28ade2511610064578063b28ade25146104bf578063d764ad0b146104df578063e0e593c5146104f2578063ecc704281461051257600080fd5b80639fce812c1461042b578063a4e7f8bd1461045f578063b1b1b2091461048f57600080fd5b806383a74074116100bb57806383a74074146103e65780638cbeeef2146102f757806392a162cf146103fd57600080fd5b80635644cfdf146103905780636425666b146103a65780636e296e45146103d157600080fd5b80633f827a5a116101435780634c1d6a691161011d5780634c1d6a69146102f75780634d0047ee1461030d57806354fd4d501461033a57600080fd5b80633f827a5a1461028f5780634273ca16146102b7578063485cc955146102d757600080fd5b80630ff754ea116101745780630ff754ea146102135780632828d7e8146102655780633dbb202b1461027a57600080fd5b806301ffc9a71461019b578063028f85f7146101d05780630c568498146101fe575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004612329565b610577565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101e5601081565b60405167ffffffffffffffff90911681526020016101c7565b34801561020a57600080fd5b506101e5603f81565b34801561021f57600080fd5b5060f9546102409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c7565b34801561027157600080fd5b506101e5604081565b61028d6102883660046123f2565b610610565b005b34801561029b57600080fd5b506102a4600181565b60405161ffff90911681526020016101c7565b3480156102c357600080fd5b506101bb6102d2366004612459565b610874565b3480156102e357600080fd5b5061028d6102f23660046124cc565b610ad5565b34801561030357600080fd5b506101e5619c4081565b34801561031957600080fd5b5060fa546102409073ffffffffffffffffffffffffffffffffffffffff1681565b34801561034657600080fd5b506103836040518060400160405280600581526020017f312e372e3100000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061257b565b34801561039c57600080fd5b506101e561138881565b3480156103b257600080fd5b5060f95473ffffffffffffffffffffffffffffffffffffffff16610240565b3480156103dd57600080fd5b50610240610d2e565b3480156103f257600080fd5b506101e562030d4081565b34801561040957600080fd5b5061041d6104183660046125bd565b610e15565b6040516101c792919061268c565b34801561043757600080fd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b34801561046b57600080fd5b506101bb61047a3660046126ab565b60ce6020526000908152604090205460ff1681565b34801561049b57600080fd5b506101bb6104aa3660046126ab565b60cb6020526000908152604090205460ff1681565b3480156104cb57600080fd5b506101e56104da3660046126c4565b610e5e565b61028d6104ed366004612718565b610ece565b3480156104fe57600080fd5b5061028d61050d36600461279e565b6118a4565b34801561051e57600080fd5b5061056960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101c7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061060a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107497f000000000000000000000000000000000000000000000000000000000000000061063f858585610e5e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006106ab60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106c79796959493929190612858565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a8c565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856107ce60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107e09594939291906128b7565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fa5460009073ffffffffffffffffffffffffffffffffffffffff163314610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f6f6e6c7920616363657074206e617469766520746f6b656e20617070726f766560448201527f2063616c6c6261636b000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60008061096585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e1592505050565b90925090508515610a365760fa546109959073ffffffffffffffffffffffffffffffffffffffff16893089611c57565b60fa5460f9546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291169063095ea7b3906044016020604051808303816000875af1158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190612905565b505b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290610a95908b908a9087906000908890600401612927565b600060405180830381600087803b158015610aaf57600080fd5b505af1158015610ac3573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b6000546003907501000000000000000000000000000000000000000000900460ff16158015610b23575060005460ff8083167401000000000000000000000000000000000000000090920416105b610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161091a565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff90911617750100000000000000000000000000000000000000000017905560f9805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fa805492851692909116919091179055610c8c611cf2565b60f95473ffffffffffffffffffffffffffffffffffffffff1615801590610cca575060fa5473ffffffffffffffffffffffffffffffffffffffff1615155b50600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161091a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b60006060600483511015610e3a57505060408051602081019091526000815262030d40905b825160208401805160e01c93509060048114610e57576004820192505b5050915091565b6000611388619c4080603f610e7a604063ffffffff881661299f565b610e8491906129cf565b610e8f60108861299f565b610e9c9062030d40612a1d565b610ea69190612a1d565b610eb09190612a1d565b610eba9190612a1d565b610ec49190612a1d565b90505b9392505050565b3415610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f000000000000000000000000000000000000000000000000606482015260840161091a565b60f087901c60028110611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161091a565b8061ffff1660000361110c576000611068878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611dcb915050565b600081815260cb602052604090205490915060ff161561110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161091a565b505b6000611152898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dea92505050565b905061115c611e0d565b156111b057600081815260ce602052604090205460ff161561118057611180612a49565b85156111ab5760fa546111ab9073ffffffffffffffffffffffffffffffffffffffff16333089611c57565b61124e565b600081815260ce602052604090205460ff1661124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161091a565b61125787611f03565b1561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161091a565b600081815260cb602052604090205460ff16156113a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161091a565b6113ca856113bb611388619c40612a1d565b67ffffffffffffffff16611f46565b15806113f0575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561150957600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161091a565b505061189b565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600186156115f15760fa546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018a90529091169063095ea7b3906044016020604051808303816000875af11580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612905565b90505b600061164389619c405a6116059190612a78565b600089898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905087156117175760fa546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152600060248301529091169063095ea7b3906044016020604051808303816000875af11580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612905565b91505b8080156117215750815b1561178957600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611896565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161091a565b505050505b50505050505050565b61195b7f00000000000000000000000000000000000000000000000000000000000000006118d3858585610e5e565b867fd764ad0b0000000000000000000000000000000000000000000000000000000061193f60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338b8b898c8c6040516024016106c79796959493929190612858565b8473ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856119e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516119f29594939291906128b7565b60405180910390a260405184815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b905090565b3415611af4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44656e79206465706f736974696e672045544800000000000000000000000000604482015260640161091a565b8115611bc05760fa54611b1f9073ffffffffffffffffffffffffffffffffffffffff16333085611c57565b60fa5460f9546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe9190612905565b505b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290611c1f908790869088906000908890600401612a8f565b600060405180830381600087803b158015611c3957600080fd5b505af1158015611c4d573d6000803e3d6000fd5b5050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611cec908590611f7e565b50505050565b6000547501000000000000000000000000000000000000000000900460ff16611d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a2063