UNPKG

wrapped-wit-contracts

Version:
1,226 lines 116 kB
{ "_format": "hh-sol-artifact-1", "contractName": "WrappedWIT", "sourceName": "contracts/WrappedWIT.sol", "abi": [ { "inputs": [ { "internalType": "contract IWitOracleRadonRequestFactory", "name": "_witOracleRadonRequestFactory", "type": "address" }, { "internalType": "string", "name": "_witCustodianBech32", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "CrosschainBurn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "CrosschainMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "evmPrevCurator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "evmNewCurator", "type": "address" } ], "name": "CuratorshipTransferred", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "witUnwrapper", "type": "string" } ], "name": "NewUnwrapper", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "Witnet.Timestamp", "name": "timestamp", "type": "uint64" }, { "indexed": false, "internalType": "Witnet.TransactionHash", "name": "witDrtHash", "type": "bytes32" } ], "name": "ReserveUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "evmSender", "type": "address" }, { "indexed": false, "internalType": "string", "name": "witRecipient", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "Unwrapped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "witSender", "type": "string" }, { "indexed": false, "internalType": "address", "name": "evmRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "Witnet.TransactionHash", "name": "witVttHash", "type": "bytes32" } ], "name": "Wrapped", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "crosschainBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "crosschainMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "evmCurator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "Witnet.TransactionHash", "name": "_witnetValueTransferTransactionHash", "type": "bytes32" } ], "name": "getWrapTransactionLastQueryId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "Witnet.TransactionHash", "name": "_witnetValueTransferTransactionHash", "type": "bytes32" } ], "name": "getWrapTransactionStatus", "outputs": [ { "internalType": "enum IWrappedWIT.WrappingStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_evmCurator", "type": "address" }, { "internalType": "string", "name": "_witUnwrapperBech32", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "Witnet.TransactionHash", "name": "witDrTxHash", "type": "bytes32" }, { "internalType": "Witnet.RadonHash", "name": "queryRadHash", "type": "bytes32" }, { "components": [ { "internalType": "uint16", "name": "witResultMaxSize", "type": "uint16" }, { "internalType": "uint16", "name": "witCommitteeSize", "type": "uint16" }, { "internalType": "uint64", "name": "witUnitaryReward", "type": "uint64" } ], "internalType": "struct Witnet.QuerySLA", "name": "queryParams", "type": "tuple" }, { "internalType": "Witnet.Timestamp", "name": "resultTimestamp", "type": "uint64" }, { "internalType": "bytes", "name": "resultCborBytes", "type": "bytes" } ], "internalType": "struct Witnet.DataPushReport", "name": "report", "type": "tuple" }, { "internalType": "bytes", "name": "proof", "type": "bytes" } ], "name": "pushDataReport", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "queryId", "type": "uint256" }, { "internalType": "bytes", "name": "queryResult", "type": "bytes" } ], "name": "reportWitOracleQueryResult", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" } ], "name": "reportableFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint16", "name": "minWitnesses", "type": "uint16" }, { "internalType": "uint16", "name": "baseFeeOverhead100", "type": "uint16" }, { "internalType": "uint64", "name": "unitaryRewardNanowits", "type": "uint64" } ], "internalType": "struct IWrappedWIT.WitOracleSettings", "name": "_settings", "type": "tuple" } ], "name": "settleWitOracleSettings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "_witRpcProviders", "type": "string[]" } ], "name": "settleWitRpcProviders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_witUnwrapperBech32", "type": "string" } ], "name": "settleWitUnwrapper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalUnwraps", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newCurator", "type": "address" } ], "name": "transferCuratorship", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "value", "type": "uint64" }, { "internalType": "string", "name": "witRecipientBech32", "type": "string" } ], "name": "unwrap", "outputs": [ { "internalType": "uint256", "name": "evmUnwrapId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "witCustodian", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracle", "outputs": [ { "internalType": "contract WitOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracleCrossChainProofOfInclusionTemplate", "outputs": [ { "internalType": "contract IWitOracleRadonRequestModal", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracleCrossChainProofOfReserveTemplate", "outputs": [ { "internalType": "contract IWitOracleRadonRequestModal", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "evmGasPrice", "type": "uint256" } ], "name": "witOracleEstimateWrappingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracleProofOfReserveRadonBytecode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracleQuerySettings", "outputs": [ { "components": [ { "internalType": "uint16", "name": "minWitnesses", "type": "uint16" }, { "internalType": "uint16", "name": "baseFeeOverhead100", "type": "uint16" }, { "internalType": "uint64", "name": "unitaryRewardNanowits", "type": "uint64" } ], "internalType": "struct IWrappedWIT.WitOracleSettings", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witUnwrapper", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "Witnet.TransactionHash", "name": "_witnetValueTransferTransactionHash", "type": "bytes32" } ], "name": "wrap", "outputs": [ { "internalType": "uint256", "name": "_witOracleQueryId", "type": "uint256" } ], "stateMutability": "payable", "type": "function" } ], "bytecode": "0x610200604052348015610010575f5ffd5b5060405161633538038061633583398101604081905261002f91611105565b6040518060400160405280600b81526020016a15dc985c1c19590bd5d25560aa1b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600b81526020016a15dc985c1c19590815d25560aa1b8152506040518060400160405280600381526020016215d25560ea1b81525081600390816100bd9190611246565b5060046100ca8282611246565b506100da91508390506005610583565b610120526100e9816006610583565b61014052815160208084019190912060e052815190820120610100524660a05261017560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525061018c81466001146105b5565b6001600160601b0319166101c052805160208201206101e0526040805160018082528183019092525f91816020015b6101c3611091565b8152602001906001900390816101bb57905050905060405180604001604052806040518060400160405280600c81526020016b436f6e74656e742d5479706560a01b81525081526020016040518060400160405280601e81526020017f6170706c69636174696f6e2f6a736f6e3b636861727365743d5554462d380000815250815250815f8151811061025857610258611300565b6020026020010181905250826001600160a01b031663c96e201f60405180608001604052806003600481111561029057610290611314565b81526020016040518060800160405280604a81526020016162eb604a913981526020018481526020016040518060400160405280600f81526020016e83187782186666726573756c74186960881b81525081525060405180604001604052806002600b81111561030257610302611314565b81526020015f60405190808252806020026020018201604052801561034d57816020015b604080518082019091525f8152606060208201528152602001906001900390816103265790505b508152506040518363ffffffff1660e01b815260040161036e9291906113fa565b6020604051808303815f875af115801561038a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ae91906114f2565b6001600160a01b039081166101805260408051608081019091529084169063c96e201f9080600381526020016040518060a00160405280606b8152602001616180606b913981526020018481526020016040518060400160405280600f81526020016e83187782186666726573756c74186960881b81525081525060405180604001604052806002600b81111561044757610447611314565b81526020015f60405190808252806020026020018201604052801561049257816020015b604080518082019091525f81526060602082015281526020019060019003908161046b5790505b508152506040518363ffffffff1660e01b81526004016104b39291906113fa565b6020604051808303815f875af11580156104cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f391906114f2565b6001600160a01b03166101a0816001600160a01b031681525050826001600160a01b0316631014d3756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610549573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906114f2565b6001600160a01b031661016052506115b1915050565b5f60208351101561059e5761059783610672565b90506105af565b816105a98482611246565b5060ff90505b92915050565b5f816105c257602b6105c5565b602a5b60ff1683511461061c5760405162461bcd60e51b815260206004820152601660248201527f4265636833323a20696e76616c6964206c656e6774680000000000000000000060448201526064015b60405180910390fd5b610668838361064757604051806040016040528060048152602001631d1dda5d60e21b8152506106af565b604051806040016040528060038152602001621dda5d60ea1b8152506106af565b60601b9392505050565b5f5f829050601f8151111561069c578260405163305a27a960e01b81526004016106139190611514565b80516106a782611526565b179392505050565b5f5f5f6106dd856040516020016106c69190611549565b60408051601f19818403018152919052600161072f565b9150915061070b846040516020016106f59190611549565b60408051601f1981840301815291905283610ac7565b5f61071a826005600884610b28565b905061072581610b3f565b9695505050505050565b6060805f605a855111156107855760405162461bcd60e51b815260206004820152601d60248201527f4265636833323a20696e76616c696420737472696e67206c656e6774680000006044820152606401610613565b5f5b8551811015610887575f8682815181106107a3576107a3611300565b016020015160f81c9050602181108015906107c25750607e8160ff1611155b6108035760405162461bcd60e51b81526020600482015260126024820152712132b1b419991d103bb937b7339031b430b960711b6044820152606401610613565b60301960ff82160161087e578215801561081e575060018210155b801561082e575086518260070111155b61087a5760405162461bcd60e51b815260206004820152601660248201527f4265636833323a2077726f6e6720706f73206f662031000000000000000000006044820152606401610613565b8192505b50600101610787565b50806001600160401b038111156108a0576108a06110cf565b6040519080825280601f01601f1916602001820160405280156108ca576020820181803683370190505b5092505f5b81811015610924578581815181106108e9576108e9611300565b602001015160f81c60f81b84828151811061090657610906611300565b60200101906001600160f81b03191690815f1a9053506001016108cf565b50600181865103036001600160401b03811115610943576109436110cf565b60405190808252806020026020018201604052801561096c578160200160208202803683370190505b5091505f5b8251811015610a5d575f60405180610120016040528061010081526020016161eb610100913987848401600101815181106109ae576109ae611300565b0160200151815160f89190911c9081106109ca576109ca611300565b01602001516001600160f81b03199081169150819003610a2c5760405162461bcd60e51b815260206004820152601c60248201527f4265636833323a2062797465206e6f7420696e20616c706861626574000000006044820152606401610613565b8060f81c848381518110610a4257610a42611300565b60ff9092166020928302919091019091015250600101610971565b50610a69838386610b99565b610ab55760405162461bcd60e51b815260206004820152601660248201527f4265636833323a2077726f6e6720636865636b73756d000000000000000000006044820152606401610613565b50805160051901815290939092509050565b8080519060200120828051906020012014610b245760405162461bcd60e51b815260206004820152601460248201527f4265636833323a20687270206d69736d617463680000000000000000000000006044820152606401610613565b5050565b6060610b3685858585610cc3565b95945050505050565b5f8151601414610b915760405162461bcd60e51b815260206004820152601b60248201527f4265636833323a20696e76616c69642064617461206c656e67746800000000006044820152606401610613565b506014015190565b5f80610ba485610e97565b90505f84518251016001600160401b03811115610bc357610bc36110cf565b604051908082528060200260200182016040528015610bec578160200160208202803683370190505b5090505f5b8251811015610c4657828181518110610c0c57610c0c611300565b602002602001015160ff16828281518110610c2957610c29611300565b63ffffffff90921660209283029190910190910152600101610bf1565b505f5b8551811015610ca157858181518110610c6457610c64611300565b602002602001015160ff16828451830181518110610c8457610c84611300565b63ffffffff90921660209283029190910190910152600101610c49565b5063ffffffff8416610cb282610f97565b63ffffffff16149695505050505050565b60605f8080610cd5600180881b611564565b90505f5b8851811015610dd0575f898281518110610cf557610cf5611300565b6020908102919091010151905060ff8082168a1c1615610d7d5760405162461bcd60e51b815260206004820152603660248201527f4265636833323a2076616c7565206d757374206265206e6f6e2d6e656761746960448201527f766520616e642066697420696e2066726f6d62697473000000000000000000006064820152608401610613565b93881b60ff85161793928801925b878410610dc7576040519388900393610db190879087871c861660f81b90602001611583565b6040516020818303038152906040529550610d8b565b50600101610cd9565b508415610e18578115610e13578381610de98489611564565b85901b1660f81b604051602001610e01929190611583565b60405160208183030381529060405293505b610e8c565b86821080610e32575080610e2c8388611564565b84901b16155b610e8c5760405162461bcd60e51b815260206004820152602560248201527f4265636833323a20696e76616c69642070616464696e67206f722076616c75656044820152642073697a6560d81b6064820152608401610613565b505050949350505050565b606081518251016001016001600160401b03811115610eb857610eb86110cf565b604051908082528060200260200182016040528015610ee1578160200160208202803683370190505b5090505f5b8251811015610f91576005838281518110610f0357610f03611300565b602001015160f81c60f81b60f81c60ff16901c828281518110610f2857610f28611300565b602002602001019060ff16908160ff1681525050828181518110610f4e57610f4e611300565b602001015160f81c60f81b60f81c601f16828451830160010181518110610f7757610f77611300565b60ff90921660209283029190910190910152600101610ee6565b50919050565b6040805160a081018252633b6a57b281526326508e6d6020820152631ea119fa91810191909152633d4233dd6060820152632a1462b360808201525f90600190825b84518163ffffffff161015611088575f60198463ffffffff16901c9050858263ffffffff168151811061100e5761100e611300565b60200260200101516005856301ffffff1663ffffffff16901b1893505f5f90505b60058163ffffffff16101561107e57600163ffffffff8381169083161c8116900361107657838163ffffffff166005811061106c5761106c611300565b6020020151851894505b60010161102f565b5050600101610fd9565b50909392505050565b60405180604001604052806002905b60608152602001906001900390816110a05790505090565b6001600160a01b03811681146110cc575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156110fd5781810151838201526020016110e5565b50505f910152565b5f5f60408385031215611116575f5ffd5b8251611121816110b8565b60208401519092506001600160401b0381111561113c575f5ffd5b8301601f8101851361114c575f5ffd5b80516001600160401b03811115611165576111656110cf565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611193576111936110cf565b6040528181528282016020018710156111aa575f5ffd5b6111bb8260208301602086016110e3565b8093505050509250929050565b600181811c908216806111dc57607f821691505b602082108103610f9157634e487b7160e01b5f52602260045260245ffd5b601f82111561124157805f5260205f20601f840160051c8101602085101561121f5750805b601f840160051c820191505b8181101561123e575f815560010161122b565b50505b505050565b81516001600160401b0381111561125f5761125f6110cf565b6112738161126d84546111c8565b846111fa565b6020601f8211600181146112a5575f831561128e5750848201515b5f19600385901b1c1916600184901b17845561123e565b5f84815260208120601f198516915b828110156112d457878501518255602094850194600190920191016112b4565b50848210156112f157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f815180845261133f8160208601602086016110e3565b601f01601f19169290920160200192915050565b5f604083018251600c811061136a5761136a611314565b84526020838101516040828701528051928390526060600584901b870181019391909201918601905f5b818110156113ee57878503605f1901835283518051600a81106113b9576113b9611314565b8087525060208101519050604060208701526113d86040870182611328565b9550506020938401939290920191600101611394565b50929695505050505050565b604081525f83516005811061141157611411611314565b604083015260208401516080606084015261142f60c0840182611328565b6040860151848203603f19016080860152805180835291925060209081019181840191600582901b8501015f5b828110156114bc57858203601f19018452845182604081015f5b60028110156114a457858203835261148f828551611328565b60209485019493909301929150600101611476565b5060209788019796909601959350505060010161145c565b506060890151878203603f190160a089015294506114da8186611328565b9450505050508281036020840152610b368185611353565b5f60208284031215611502575f5ffd5b815161150d816110b8565b9392505050565b602081525f61150d6020830184611328565b80516020808301519190811015610f91575f1960209190910360031b1b16919050565b5f825161155a8184602087016110e3565b9190910192915050565b818103818111156105af57634e487b7160e01b5f52601160045260245ffd5b5f83516115948184602088016110e3565b6001600160f81b0319939093169190920190815260010192915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051614aff6116815f395f81816117a901526122fe01525f8181610dc20152610fdc01525f818161076c0152610a0001525f818161036e015261213401525f81816102dd015281816103fa015281816109d801528181610b9a015281816112cc0152818161137b0152818161166a015261186001525f611fd401525f611fa701525f611e8501525f611e5d01525f611db801525f611de201525f611e0c0152614aff5ff3fe608060405260043610610228575f3560e01c806370a0823111610129578063a9059cbb116100a8578063dd62ed3e1161006d578063dd62ed3e146106ba578063ddb2bf5c146106fe578063f399e22e1461071d578063f577caee1461073c578063f69a00b61461075b575f5ffd5b8063a9059cbb1461062a578063acb734bb14610649578063b9dcadf21461065d578063d505accf1461067c578063d6f29e811461069b575f5ffd5b80638a510f27116100ee5780638a510f271461058d57806395d89b41146105ac57806396fe8eb1146105c0578063a41942a4146105df578063a53cb851146105fe575f5ffd5b806370a08231146104ac57806377cc7a3a146104e05780637ecebe00146104ff57806384b0196e1461051e578063873234cf14610545575f5ffd5b80632b8c49e3116101b55780634c68df671161017a5780634c68df671461043e578063520a5495146104525780635f029ebe146104665780636d0d6a7e146104795780637090c8d614610498575f5ffd5b80632b8c49e314610390578063313ce567146103af5780633644e515146103ca57806347a10e56146103de5780634ba0d1501461042a575f5ffd5b80631014d375116101fb5780631014d375146102cc57806318160ddd146102ff57806318bf50771461031d57806323b872dd1461033e57806327ae68831461035d575f5ffd5b806301367f731461022c57806301ffc9a71461025d57806306fdde031461028c578063095ea7b3146102ad575b5f5ffd5b348015610237575f5ffd5b5061024061078e565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610268575f5ffd5b5061027c610277366004613902565b6107a6565b6040519015158152602001610254565b348015610297575f5ffd5b506102a06107dc565b6040516102549190613976565b3480156102b8575f5ffd5b5061027c6102c736600461399c565b61086c565b3480156102d7575f5ffd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b34801561030a575f5ffd5b506002545b604051908152602001610254565b348015610328575f5ffd5b5061033c61033736600461399c565b610883565b005b348015610349575f5ffd5b5061027c6103583660046139c6565b6108db565b348015610368575f5ffd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b34801561039b575f5ffd5b5061033c6103aa36600461399c565b6108fe565b3480156103ba575f5ffd5b5060405160098152602001610254565b3480156103d5575f5ffd5b5061030f61094e565b3480156103e9575f5ffd5b5061027c6103f8366004613a04565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b348015610435575f5ffd5b506102a061095c565b348015610449575f5ffd5b5061030f610984565b34801561045d575f5ffd5b5061030f61099f565b61030f610474366004613a1f565b6109c1565b348015610484575f5ffd5b5061033c610493366004613a7a565b610ad9565b3480156104a3575f5ffd5b506102a0610db2565b3480156104b7575f5ffd5b5061030f6104c6366004613a04565b6001600160a01b03165f9081526020819052604090205490565b3480156104eb575f5ffd5b5061030f6104fa366004613a1f565b610deb565b34801561050a575f5ffd5b5061030f610519366004613a04565b610e07565b348015610529575f5ffd5b50610532610e24565b6040516102549796959493929190613ae5565b348015610550575f5ffd5b50610559610e66565b60408051825161ffff908116825260208085015190911690820152918101516001600160401b031690820152606001610254565b348015610598575f5ffd5b5061030f6105a7366004613b9a565b610ec9565b3480156105b7575f5ffd5b506102a0611123565b3480156105cb575f5ffd5b5061033c6105da366004613c80565b611132565b3480156105ea575f5ffd5b5061033c6105f9366004613a04565b6111b6565b348015610609575f5ffd5b5061061d610618366004613a1f565b611276565b6040516102549190613da8565b348015610635575f5ffd5b5061027c61064436600461399c565b61136a565b348015610654575f5ffd5b506102a0611377565b348015610668575f5ffd5b5061033c610677366004613dc2565b611472565b348015610687575f5ffd5b5061033c610696366004613de9565b61152f565b3480156106a6575f5ffd5b5061033c6106b5366004613e55565b611665565b3480156106c5575f5ffd5b5061030f6106d4366004613e83565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610709575f5ffd5b5061030f610718366004613a1f565b61185a565b348015610728575f5ffd5b5061033c610737366004613eba565b611885565b348015610747575f5ffd5b5061033c610756366004613ed7565b611b96565b348015610766575f5ffd5b506102407f000000000000000000000000000000000000000000000000000000000000000081565b5f610797611c11565b546001600160a01b0316919050565b5f6001600160e01b03198216630cccc66560e21b14806107d657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546107eb90613f15565b80601f016020809104026020016040519081016040528092919081815260200182805461081790613f15565b80156108625780601f1061083957610100808354040283529160200191610862565b820191905f5260205f20905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b5f33610879818585611c35565b5060019392505050565b61088c33611c42565b6108968282611c71565b60405181815233906001600160a01b038416907fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea04906020015b60405180910390a35050565b5f336108e8858285611ca5565b6108f3858585611d1b565b506001949350505050565b61090733611c42565b6109118282611d78565b60405181815233906001600160a01b038416907fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd4906020016108cf565b5f610957611dac565b905090565b60606109576001461461096d611c11565b6002015460601b6001600160601b03191690611ed8565b5f61098d611c11565b600101546001600160401b0316919050565b5f6109a8611c11565b60010154600160401b90046001600160401b0316919050565b604051633752120b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018290525f9073__$928ef700fe09700756683be525388ce8a3$__90633752120b90606401602060405180830381865af4158015610a68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8c9190613f47565b90505f198103610ad45760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b60448201526064015b60405180910390fd5b919050565b610b36610ae4611c11565b6003015461ffff16610afc6080860160608701613f6d565b61ffff16101560405180604001604052806016815260200175696e73756666696369656e74207769746e657373657360501b815250611f29565b610b81610b51610b44611c11565b6005015460208601351490565b604051806040016040528060128152602001710d2dcecc2d8d2c840e4c2c8dedc40d0c2e6d60731b815250611f29565b604051633686b53f60e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d0d6a7e90610bd390879087908790600401613ff1565b5f604051808303815f875af1158015610bee573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c1591908101906141fd565b6040516367c4440f60e01b815290915073__$928ef700fe09700756683be525388ce8a3$__906367c4440f90610c4f9084906004016142ae565b602060405180830381865af4925050508015610c88575060408051601f3d908101601f19168201909252610c859181019061439a565b60015b610cfb57610c946143b5565b806308c379a003610cc25750610ca86143cd565b80610cb35750610cc4565b610cbc81611f33565b50610dac565b505b3d808015610ced576040519150601f19603f3d011682016040523d82523d5f602084013e610cf2565b606091505b50610cbc611f6a565b60608083015160408085015181516001600160401b0380871682529093166020840152908201527f8a01b18bdca3d556adc5e6a85f562b83d2c1933f166e93421ff507cfccb09a07910160405180910390a180610d56611c11565b600101805467ffffffffffffffff19166001600160401b03929092169190911790556060820151610d85611c11565b80546001600160401b0392909216600160c01b026001600160c01b03909216919091179055505b50505050565b60606109576001600160601b03197f00000000000000000000000000000000000000000000000000000000000000001646600114611ed8565b5f610df4611c11565b5f92835260060160205250604090205490565b6001600160a01b0381165f908152600760205260408120546107d6565b5f6060805f5f5f6060610e35611fa0565b610e3d611fcd565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b604080516060810182525f8082526020820181905291810191909152610e8a611c11565b604080516060810182526003929092015461ffff808216845262010000820416602084015264010000000090046001600160401b031690820152919050565b5f6001600160401b038416610edd336104c6565b1015610f205760405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b6044820152606401610acb565b5f610f29611c11565b600101546001600160401b0390811691508516811015610f8b5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420756e777261702074686174206d7563680000000000000000006044820152606401610acb565b5f610fcf85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050466001149150611ffa9050565b90506001600160601b03197f00000000000000000000000000000000000000000000000000000000000000008116908216036110415760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610acb565b61104b8683614463565b611053611c11565b600101805467ffffffffffffffff19166001600160401b0392831617905561107e9033908816611d78565b611086611c11565b60010180546008906110a790600160401b90046001600160401b0316614482565b91906101000a8154816001600160401b0302191690836001600160401b0316021790556001600160401b031692507f0ac1547df8510f30b54430e0e4e1e93ce326490aec9cebf0f78b8faa55dc1ded6110fd3390565b868689876040516111129594939291906144ac565b60405180910390a150509392505050565b6060600480546107eb90613f15565b61113a611c11565b546001600160a01b0316336001600160a01b03161461116b576040516282b42960e81b815260040160405180910390fd5b5f81511161117b5761117b6144ed565b80611184611c11565b600401908051906020019061119a92919061384c565b506111b3816111ae6001461461096d611c11565b6120ab565b50565b6111be611c11565b546001600160a01b0316336001600160a01b0316146111ef576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611205576112056144ed565b806001600160a01b0316611217611c11565b546040516001600160a01b03909116907fc63757acc12b39558fe5b88c5393e4b0353ffddaae3a2d07e121a8fc62d39c37905f90a380611255611c11565b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f5f611280611c11565b5f848152600691909101602052604081205491508190036112a357505f92915050565b5f1981036112b45750600392915050565b6001604051631bc1eaf360e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636f07abcc90602401602060405180830381865afa158015611319573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133d9190614501565b600681111561134e5761134e613d94565b1461135a57600261135d565b60015b9392505050565b50919050565b5f33610879818585611d1b565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f9919061451f565b6001600160a01b0316638a22776461140f611c11565b600501546040518263ffffffff1660e01b815260040161143191815260200190565b5f60405180830381865afa15801561144b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610957919081019061453a565b61147a611c11565b546001600160a01b0316336001600160a01b0316146114ab576040516282b42960e81b815260040160405180910390fd5b60036114ba6020830183613f6d565b61ffff16101580156114e0575060326114d96040830160208401613f6d565b61ffff1611155b80156115085750630bebc2006114fc6060830160408401614573565b6001600160401b031610155b611514576115146144ed565b8061151d611c11565b60030161152a828261458e565b505050565b834211156115535760405163313c898160e11b815260048101859052602401610acb565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861159e8c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6115f8826121bc565b90505f611607828787876121e8565b9050896001600160a01b0316816001600160a01b03161461164e576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610acb565b6116598a8a8a611c35565b50505050505050505050565b6116c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146040518060400160405280600e81526020016d696e76616c6964206f7261636c6560901b815250611f29565b604051635d933eb760e01b815273__$928ef700fe09700756683be525388ce8a3$__90635d933eb7906116fb90869086908690600401614613565b5f60405180830381865af492505050801561173757506040513d5f823e601f3d908101601f19168201604052611734919081019061462c565b60015b6117a4576117436143b5565b806308c379a00361176b57506117576143cd565b80611762575061176d565b610dac81611f33565b505b3d808015611796576040519150601f19603f3d0116