UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

852 lines 79.3 kB
{ "_format": "hh-sol-artifact-1", "contractName": "WitnetEncodingLib", "sourceName": "contracts/libs/WitnetEncodingLib.sol", "abi": [ { "inputs": [], "name": "EmptyBuffer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "range", "type": "uint256" } ], "name": "IndexOutOfBounds", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "InvalidLengthEncoding", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expected", "type": "uint256" }, { "internalType": "uint256", "name": "given", "type": "uint256" } ], "name": "MissingArgs", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "read", "type": "uint256" }, { "internalType": "uint256", "name": "expected", "type": "uint256" } ], "name": "UnexpectedMajorType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "method", "type": "uint8" }, { "internalType": "string", "name": "schema", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" } ], "name": "UnsupportedDataRequestMethod", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "unexpected", "type": "uint256" } ], "name": "UnsupportedMajorType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "datatype", "type": "uint8" }, { "internalType": "uint256", "name": "maxlength", "type": "uint256" } ], "name": "UnsupportedRadonDataType", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "name": "UnsupportedRadonFilterArgs", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonFilterOpcode", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonReducerOpcode", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "UnsupportedRadonReducerScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "UnsupportedRadonScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" }, { "internalType": "uint256", "name": "cursor", "type": "uint256" }, { "internalType": "uint8", "name": "opcode", "type": "uint8" } ], "name": "UnsupportedRadonScriptOpcode", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "name": "UnsupportedRadonTallyScript", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "Witnet.RadonReducerOpcodes" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "reducer", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "bytecode", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "Witnet.RadonReducerOpcodes" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint8", "name": "minConsensusPercentage", "type": "uint8" }, { "internalType": "uint64", "name": "witnessReward", "type": "uint64" }, { "internalType": "uint64", "name": "witnessCollateral", "type": "uint64" }, { "internalType": "uint64", "name": "minerCommitRevealFee", "type": "uint64" } ], "internalType": "struct Witnet.RadonSLA", "name": "sla", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" }, { "internalType": "uint256", "name": "majorType", "type": "uint256" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "n", "type": "uint64" }, { "internalType": "bytes1", "name": "t", "type": "bytes1" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "buf", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "Witnet.RadonDataRequestMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval[]", "name": "sources", "type": "tuple[]" }, { "internalType": "string[][]", "name": "args", "type": "string[][]" }, { "internalType": "bytes", "name": "aggregatorInnerBytecode", "type": "bytes" }, { "internalType": "bytes", "name": "tallyInnerBytecode", "type": "bytes" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter", "name": "filter", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "bytecode", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "Witnet.RadonDataRequestMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "source", "type": "tuple" } ], "name": "encode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "string[]", "name": "args", "type": "string[]" } ], "name": "replaceCborStringsFromBytes", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "Witnet.RadonDataRequestMethods" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "self", "type": "tuple" }, { "internalType": "string[]", "name": "args", "type": "string[]" } ], "name": "replaceWildcards", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "Witnet.RadonDataTypes" }, { "internalType": "uint16", "name": "maxDataSize", "type": "uint16" } ], "name": "validate", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "Witnet.RadonDataRequestMethods" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "name": "validate", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint8", "name": "minConsensusPercentage", "type": "uint8" }, { "internalType": "uint64", "name": "witnessReward", "type": "uint64" }, { "internalType": "uint64", "name": "witnessCollateral", "type": "uint64" }, { "internalType": "uint64", "name": "minerCommitRevealFee", "type": "uint64" } ], "internalType": "struct Witnet.RadonSLA", "name": "sla", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter", "name": "filter", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "Witnet.RadonReducerOpcodes" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "Witnet.RadonFilterOpcodes" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "reducer", "type": "tuple" } ], "name": "validate", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "script", "type": "bytes" } ], "name": "verifyRadonScriptResultDataType", "outputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "Witnet.RadonDataTypes" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x613a22610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101205760003560e01c8063a8c06a13116100ac578063c5f3674a1161007b578063c5f3674a14610251578063daf4b0ef14610264578063dfaecd1114610277578063f3106f781461028a578063fa5dce12146102aa57600080fd5b8063a8c06a1314610205578063a97b1d3114610218578063acbade1f1461022b578063b6349ebd1461023e57600080fd5b8063203003b1116100f3578063203003b1146101a45780632461ccf3146101b75780632d81a542146101cc5780633b1e539b146101df5780636a11b2a8146101f257600080fd5b80630160730f1461012557806312496a1b1461015057806317464727146101705780631c02d22b14610191575b600080fd5b6101386101333660046129b8565b6102bd565b60405161ffff90911681526020015b60405180910390f35b61016361015e366004612aea565b610449565b6040516101479190612b76565b61018361017e366004612ca9565b610456565b604051908152602001610147565b61016361019f366004612dd3565b61055f565b6101636101b2366004612ec2565b6105f9565b6101ca6101c5366004612f05565b61061a565b005b6101636101da366004612f05565b6108b5565b6101ca6101ed3660046130fc565b61092c565b610163610200366004612aea565b6109f7565b61016361021336600461315f565b610a00565b6101ca6102263660046131a3565b610b50565b6101636102393660046131d7565b610c14565b61016361024c36600461329a565b610d7d565b61016361025f3660046131a3565b610eb9565b6101ca610272366004612dd3565b610f7b565b6101636102853660046133c7565b61107d565b61029d610298366004612aea565b6110e4565b6040516101479190613413565b6101636102b836600461342d565b6110f9565b6000808360138111156102d2576102d26133fd565b14806102ef575060078360138111156102ed576102ed6133fd565b145b8061030b57506003836013811115610309576103096133fd565b145b8061032757506001836013811115610325576103256133fd565b145b8061034357506006836013811115610341576103416133fd565b145b156103a6578161ffff1660000361039457826013811115610366576103666133fd565b604051637aba172760e01b815260ff909116600482015261ffff831660248201526044015b60405180910390fd5b61039f826003613477565b9050610443565b60048360138111156103ba576103ba6133fd565b14806103d7575060058360138111156103d5576103d56133fd565b145b806103f3575060028360138111156103f1576103f16133fd565b145b1561040057506009610443565b826013811115610412576104126133fd565b61041b846113e6565b604051637aba172760e01b815260ff909216600483015261ffff16602482015260440161038b565b92915050565b6060610443826002610a00565b60008085511180156104b057506001866004811115610477576104776133fd565b148061049457506003866004811115610492576104926133fd565b145b806104b0575060048660048111156104ae576104ae6133fd565b145b806104ef575060028660048111156104ca576104ca6133fd565b1480156104d657508451155b80156104e157508251155b80156104ef57506001825110155b61052557856004811115610505576105056133fd565b858585604051633a3cb62160e01b815260040161038b9493929190613518565b858585858560405160200161053e959493929190613565565b60405160208183030381529060405280519060200120905095945050505050565b606060005b8260200151518110156105c357816105988460200151838151811061058b5761058b6135d4565b6020026020010151610eb9565b6040516020016105a99291906135ea565b60408051601f198184030181529190529150600101610564565b50806105d283600001516105f9565b6040516020016105e39291906135ea565b6040516020818303038152906040529050919050565b606061044382600b811115610610576106106133fd565b600160fc1b610c14565b80604001516001600160401b03166000036106775760405162461bcd60e51b815260206004820152602960248201526000805160206139cd8339815191526044820152681b9bc81c995dd85c9960ba1b606482015260840161038b565b805160ff166000036106ce5760405162461bcd60e51b815260206004820152602c60248201526000805160206139cd83398151915260448201526b6e6f207769746e657373657360a01b606482015260840161038b565b607f816000015160ff16111561073a5760405162461bcd60e51b815260206004820152603960248201526000805160206139cd83398151915260448201527f746f6f206d616e79207769746e657373657320283e3132372900000000000000606482015260840161038b565b6033816020015160ff16108061075757506063816020015160ff16115b156107c25760405162461bcd60e51b815260206004820152604160248201526000805160206139cd83398151915260448201527f636f6e73656e7375732070657263656e74616765206f7574206f662072616e676064820152606560f81b608482015260a40161038b565b60608101516001600160401b0316156108215760405162461bcd60e51b815260206004820152602d60248201526000805160206139cd83398151915260448201526c1b9bc818dbdb1b185d195c985b609a1b606482015260840161038b565b607f81604001518260600151610837919061362f565b6001600160401b031611156108b25760405162461bcd60e51b815260206004820152604760248201526000805160206139cd83398151915260448201527f636f6c6c61746572616c2f72657761726420726174696f20746f6f206869676860648201526620283e3132372960c81b608482015260a40161038b565b50565b60606108c98260400151601060f81b610c14565b82516108dc9060ff16600360fb1b610c14565b60808401516108ef90600160fd1b610c14565b60208501516109059060ff16600560fb1b610c14565b606086015161091890600360fc1b610c14565b6040516020016105e3959493929190613655565b61093a826060015182611454565b6060830152608082015161094e9082611454565b608083015260c0820151610962908261107d565b60c083015260005b8260a00151518110156109f2576109b58360a001518281518110610990576109906135d4565b60200260200101516001600281106109aa576109aa6135d4565b602002015183611454565b8360a0015182815181106109cb576109cb6135d4565b60200260200101516001600281106109e5576109e56135d4565b602002015260010161096a565b505050565b60606104438260035b81516060906017811015610a41578060ff16600584901b1784604051602001610a2a9291906136c0565b604051602081830303815290604052915050610443565b600583901b606060ff8311610a88576040516001600160f81b031960f885901b166020820152601892909217916021015b6040516020818303038152906040529050610b1b565b61ffff8311610ab7576040516001600160f01b031960f085901b16602082015260199290921791602201610a72565b63ffffffff8311610ae8576040516001600160e01b031960e085901b166020820152601a9290921791602401610a72565b6040516001600160c01b031960c085901b166020820152601b929092179160280160405160208183030381529060405290505b818187604051602001610b30939291906136ef565b6040516020818303038152906040529350505050610443565b5092915050565b600581516009811115610b6557610b656133fd565b03610baa578060200151516000036108b25780516009811115610b8a57610b8a6133fd565b81602001516040516319037b1360e31b815260040161038b929190613734565b600881516009811115610bbf57610bbf6133fd565b03610be257602081015151156108b25780516009811115610b8a57610b8a6133fd565b80516009811115610bf557610bf56133fd565b60405163ddb08eaf60e01b815260ff909116600482015260240161038b565b60608260025b607f826001600160401b03161115610c47576007826001600160401b0316901c9150600181019050610c1a565b806001600160401b03166001600160401b03811115610c6857610c686129eb565b6040519080825280601f01601f191660200182016040528015610c92576020820181803683370190505b5092508491508383600081518110610cac57610cac6135d4565b60200101906001600160f81b031916908160001a90535060015b816001600160401b0316816001600160401b03161015610d355782607f1660801760f81b84826001600160401b031681518110610d0557610d056135d4565b60200101906001600160f81b031916908160001a90535060079290921c6701ffffffffffffff1691600101610cc6565b50607f60f81b83600183036001600160401b031681518110610d5957610d596135d4565b0160200180519091166001600160f81b03191690600082901a905350505092915050565b6060600086516001600160401b03811115610d9a57610d9a6129eb565b604051908082528060200260200182016040528015610dcd57816020015b6060815260200190600190039081610db85790505b50905060005b8751811015610e5f57610e18888281518110610df157610df16135d4565b6020026020010151888381518110610e0b57610e0b6135d4565b602002602001015161092c565b610e3a888281518110610e2d57610e2d6135d4565b60200260200101516110f9565b828281518110610e4c57610e4c6135d4565b6020908102919091010152600101610dd3565b50610e698161146b565b8551610e7990600d60f91b610c14565b86610e898751602260f81b610c14565b87604051602001610e9e959493929190613655565b60405160208183030381529060405291505095945050505050565b6060610ede82600001516009811115610ed457610ed46133fd565b600160fb1b610c14565b600083602001515111610f005760405180602001604052806000815250610f38565b602083015151610f1490600960f91b610c14565b602080850151604051610f289392016135ea565b6040516020818303038152906040525b604051602001610f499291906135ea565b6040516020818303038152906040529050610f698151600a60f81b610c14565b816040516020016105e39291906135ea565b60038151600b811115610f9057610f906133fd565b1480610fae575060078151600b811115610fac57610fac6133fd565b145b80610fcb575060028151600b811115610fc957610fc96133fd565b145b80610fe85750600b8151600b811115610fe657610fe66133fd565b145b80611005575060058151600b811115611003576110036133fd565b145b61103b578051600b81111561101c5761101c6133fd565b60405163a1165d6360e01b815260ff909116600482015260240161038b565b60005b8160200151518110156110795761107182602001518281518110611064576110646135d4565b6020026020010151610b50565b60010161103e565b5050565b6060600061108a846114c1565b90505b805180515160209091015110156110db57600360ff16816040015160ff16036110ca576110ba81846114ed565b6110c381611582565b905061108d565b6110c36110d6826115aa565b611582565b51519392505050565b60006104436110f2836114c1565b600061176f565b6060600061111683602001516004811115610ed457610ed46133fd565b90506060600084606001515111156111645760608401515161113c90600960f91b610c14565b84606001516040516020016111529291906135ea565b60405160208183030381529060405290505b60c084015151606090156111ae5760c08501515161118690600d60f91b610c14565b8560c0015160405160200161119c9291906135ea565b60405160208183030381529060405290505b608085015151606090156111f8576080860151516111d090601160f91b610c14565b86608001516040516020016111e69291906135ea565b60405160208183030381529060405290505b60a0860151516060901561136c5760005b8760a001515181101561136a57600061125b8960a001518381518110611231576112316135d4565b602002602001015160006002811061124b5761124b6135d4565b602002015151600560f91b610c14565b8960a001518381518110611271576112716135d4565b602002602001015160006002811061128b5761128b6135d4565b60200201516112d38b60a0015185815181106112a9576112a96135d4565b60200260200101516001600281106112c3576112c36135d4565b602002015151600960f91b610c14565b8b60a0015185815181106112e9576112e96135d4565b6020026020010151600160028110611303576113036135d4565b602002015160405160200161131b9493929190613750565b60405160208183030381529060405290508261133c8251602a60f81b610c14565b8260405160200161134f939291906137a7565b60408051601f19818403018152919052925050600101611209565b505b60008151835185518751895161138291906137ea565b61138c91906137ea565b61139691906137ea565b6113a091906137ea565b90506113b081600960f91b610c14565b86868686866040516020016113ca969594939291906137fd565b6040516020818303038152906040529650505050505050919050565b600060048260138111156113fc576113fc6133fd565b148061141957506005826013811115611417576114176133fd565b145b1561142657506009919050565b600282601381111561143a5761143a6133fd565b0361144757506001919050565b506000919050565b919050565b6060600061146284846118fe565b50949350505050565b60405160208101600060015b845181116114ab576020818102860151805190918201611498868284611b95565b5093840193929092019150600101611477565b5080835260208101604051016040525050919050565b6114c9612950565b60408051808201909152828152600060208201526114e681611bd9565b9392505050565b60808201518251602001516001600160401b0390911690600061150f85611cf9565b905060008061151e83876118fe565b90925090508015611579576000611534836109f7565b9050611540868661387c565b8851602001528351611560906115579088906137ea565b89519083611e02565b8051885160200180516115749083906137ea565b905250505b50505050505050565b61158a612950565b815180515160209091015110156115a657815161044390611bd9565b5090565b6115b2612950565b604082015160ff1615806115cd5750604082015160ff166001145b806116065750604082015160ff1660071480156115f257506019826060015160ff1610155b80156116065750601b826060015160ff1611155b156116395761161482611f2e565b6001600160401b0316826000015160200181815161163291906137ea565b9052505090565b604082015160ff16600314806116565750604082015160ff166002145b1561169a57600061166f83600001518460600151611f9b565b9050806001600160401b0316836000015160200181815161169091906137ea565b9052506115a69050565b604082015160ff16600414806116b75750604082015160ff166005145b156116e0576116ce82600001518360600151611f9b565b6001600160401b031660808301525090565b604082015160ff1660071415806117125750816060015160ff166014141580156117125750816060015160ff16601514155b156115a65760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b606482015260840161038b565b6000600460ff16836040015160ff160361180c57600061178e8461205c565b905060018151111561180257826117d5576117d081600283516117b1919061387c565b815181106117c1576117c16135d4565b6020026020010151600161176f565b6117fa565b6117fa816000815181106117eb576117eb6135d4565b6020026020010151600061176f565b915050610443565b6000915050610443565b604083015160ff166118d55782516020015160006118298561220c565b905060006040518060a001604052806080815260200161394d60809139518211611884576040518060a001604052806080815260200161394d608091398281518110611877576118776135d4565b016020015160f81c611887565b60ff5b9050601360ff821611156118b657855151604051631aef51bd60e31b815261038b91908590859060040161388f565b8060ff1660138111156118cb576118cb6133fd565b9350505050610443565b604080840151905161800560e51b81526000600482015260ff909116602482015260440161038b565b60606000806000905060008080600080600080600060038d511015611932578c60009a509a50505050505050505050611b8e565b6040518d51909b5060208e810197508c019450600119015b808a1015611b1e57601760fa1b6001600160f81b0319168e8b81518110611973576119736135d4565b01602001516001600160f81b0319161480156119bf5750601760fa1b6001600160f81b0319168e8b600201815181106119ae576119ae6135d4565b01602001516001600160f81b031916145b80156119fc5750600360fc1b6001600160f81b0319168e8b600101815181106119ea576119ea6135d4565b01602001516001600160f81b03191610155b8015611a395750603960f81b6001600160f81b0319168e8b60010181518110611a2757611a276135d4565b01602001516001600160f81b03191611155b15611b1357888a039750888a1115611a6657611a5685888a611b95565b9587016003019593870193611a6d565b6003870196505b6000600360fc1b60f81c8f8c60010181518110611a8c57611a8c6135d4565b602001015160f81c60f81b60f81c0360ff1690508d518110611ad0578d516040516306786e0760e21b8152600183016004820152602481019190915260440161038b565b600181016020028e0151945084519350602085019250611af1868486611b95565b506001909a01996003999099019889985087830195909501949382019361194a565b60019099019861194a565b508c5198508415611b6f5787891115611b5c57611b458487611b408b8d61387c565b611b95565b611b4f888a61387c565b611b5990866137ea565b94505b848b526020850160405101604052611b84565b8c60009a509a50505050505050505050611b8e565b5050505050505050505b9250929050565b5b60208110611bb5578151835260209283019290910190601f1901611b96565b80156109f257905182516020929092036101000a6000190180199091169116179052565b611be1612950565b8151518290600003611c06576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015611c8957611c268961226f565b955081611c32816138bb565b6007600589901c169650601f881695509250506005198501611c81576020890151611c5d8a86611f9b565b9350808a60200151611c6f919061387c565b611c7990846137ea565b925050611c17565b506000611c17565b600760ff86161115611cb35760405163bd2ac87960e01b815260ff8616600482015260240161038b565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b60608160038060ff16826040015160ff1614611d3957604080830151905161800560e51b815260ff9182166004820152908216602482015260440161038b565b611d4b84600001518560600151611f9b565b6001600160401b03166080850181905267fffffffffffffffe1901611de85760005b80611de2576000611d86866000015187604001516122d1565b90506001600160401b038082161015611dd75784611db0611da860048461362f565b885190612377565b604051602001611dc19291906135ea565b6040516020818303038152906040529450611ddc565b600191505b50611d6d565b50611dfb565b60808401518451611df891612377565b92505b5050919050565b60208301518351518391611e159161387c565b611e209060016137ea565b80821115611e4b576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b60408051600380825260808201909252600091816020015b6060815260200190600190039081611e63579050509050611e8a86600088602001516124fe565b81600081518110611e9d57611e9d6135d4565b60200260200101819052508381600181518110611ebc57611ebc6135d4565b6020026020010181905250611efd86868860200151611edb91906137ea565b60208901518951518991611eee9161387c565b611ef8919061387c565b6124fe565b81600281518110611f1057611f106135d4565b6020026020010181905250611f248161146b565b9095525050505050565b60006018826060015160ff161015611f4857506000919050565b601c826060015160ff161015611f775760188260600151611f6991906138d4565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff909116600482015260240161038b565b600060188260ff161015611fb3575060ff8116610443565b8160ff16601803611fd157611fc78361226f565b60ff169050610443565b8160ff16601903611ff057611fe5836125a4565b61ffff169050610443565b8160ff16601a036120115761200483612610565b63ffffffff169050610443565b8160ff16601b036120255761039f8361266f565b8160ff16601f0361203e57506001600160401b03610443565b604051636d785b1360e01b815260ff8316600482015260240161038b565b60608160048060ff16826040015160ff161461209c57604080830151905161800560e51b815260ff9182166004820152908216602482015260440161038b565b60006120b085600001518660600151611f9b565b90506120bd8160016138ed565b6001600160401b03166001600160401b038111156120dd576120dd6129eb565b60405190808252806020026020018201604052801561211657816020015b612103612950565b8152602001906001900390816120fb5790505b50935060005b816001600160401b03168110156121dc5761213686611582565b9550612141866126ce565b858281518110612153576121536135d4565b6020026020010181905250600460ff16866040015160ff16036121ac57600061217b8761205c565b9050806001825161218c919061387c565b8151811061219c5761219c6135d4565b60200260200101519650506121d4565b600560ff16866040015160ff16036121c957600061217b87612766565b6121d2866115aa565b505b60010161211c565b508484826001600160401b0316815181106121f9576121f96135d4565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461224c57604080830151905161800560e51b815260ff9182166004820152908216602482015260440161038b565b61225e84600001518560600151611f9b565b6001600160401b0316949350505050565b60008160200151826000015151808211156122a7576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b83516020850180518083016001015195509081906122c4826138bb565b8152505050505050919050565b6000806122dd8461226f565b90508060ff1660ff036122fa576001600160401b03915050610443565b6123078482601f16611f9b565b91506001600160401b038083161061233d57604051636d785b1360e01b81526001600160401b038316600482015260240161038b565b60ff83166007600583901c1614610b495760405161800560e51b81526007600583901c16600482015260ff8416602482015260440161038b565b6060816001600160401b03166001600160401b0381111561239a5761239a6129eb565b6040519080825280601f01601f1916602001820160405280156123c4576020820181803683370190505b50905060005b826001600160401b0316816001600160401b031610156124f55760006123ef8561226f565b905060808116156124b65760e08160ff16101561242b5761240f8561226f565b603f16600682601f1660ff16901b1790506001840393506124b6565b60f08160ff161015612470576124408561226f565b603f16600661244e8761226f565b603f1660ff16901b600c83600f1660ff16901b171790506002840393506124b6565b6124798561226f565b603f1660066124878761226f565b603f16901b600c6124978861226f565b603f1660ff16901b601284600f1660ff16901b17171790506003840393505b8060f81b83836001600160401b0316815181106124d5576124d56135d4565b60200101906001600160f81b031916908160001a905350506001016123ca565b50908152919050565b606061250a82846137ea565b84515180821115612538576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b85516000856001600160401b03811115612554576125546129eb565b6040519080825280601f01601f19166020018201604052801561257e576020820181803683370190505b5090506020808201908389010161259682828a611b95565b509098975050505050505050565b6000816020015160026125b791906137ea565b825151808211156125e5576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b835160208501805160028184018101519650909161260382846137ea565b9052509395945050505050565b60008160200151600461262391906137ea565b82515180821115612651576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b835160208501805160048184018101519650909161260382846137ea565b60008160200151600861268291906137ea565b825151808211156126b0576040516363a056dd60e01b8152600481018390526024810182905260440161038b565b835160208501805160088184018101519650909161260382846137ea565b6126d6612950565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff16146127a657604080830151905161800560e51b815260ff9182166004820152908216602482015260440161038b565b60006127ba85600001518660600151611f9b565b6127c590600261390d565b90506127d28160016138ed565b6001600160401b03166001600160401b038111156127f2576127f26129eb565b60405190808252806020026020018201604052801561282b57816020015b612818612950565b8152602001906001900390816128105790505b50935060005b816001600160401b03168110156121dc5761284b86611582565b9550612856866126ce565b858281518110612868576128686135d4565b602090810291909101015261287e600282613938565b1580156128935750604086015160ff16600314155b156128c157604080870151905161800560e51b815260ff90911660048201526003602482015260440161038b565b604086015160ff16600414806128de5750604086015160ff166005145b1561293d57604086015160009060ff16600414612903576128fe87612766565b61290c565b61290c8761205c565b9050806001825161291d919061387c565b8151811061292d5761292d6135d4565b6020026020010151965050612948565b612946866115aa565b505b600101612831565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b80356014811061144f57600080fd5b803561ffff8116811461144f57600080fd5b600080604083850312156129cb57600080fd5b6129d483612997565b91506129e2602084016129a6565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a2357612a236129eb565b60405290565b60405160e081016001600160401b0381118282101715612a2357612a236129eb565b604051601f8201601f191681016001600160401b0381118282101715612a7357612a736129eb565b604052919050565b600082601f830112612a8c57600080fd5b81356001600160401b03811115612aa557612aa56129eb565b612ab8601f8201601f1916602001612a4b565b818152846020838601011115612acd57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612afc57600080fd5b81356001600160401b03811115612b1257600080fd5b612b1e84828501612a7b565b949350505050565b60005b83811015612b41578181015183820152602001612b29565b50506000910152565b60008151808452612b62816020860160208601612b26565b601f01601f19169290920160200192915050565b6020815260006114e66020830184612b4a565b80356005811061144f57600080fd5b60006001600160401b03821115612bb157612bb16129eb565b5060051b60200190565b600082601f830112612bcc57600080fd5b81356020612be1612bdc83612b98565b612a4b565b82815260059290921b84018101918181019086841115612c0057600080fd5b8286015b84811015612c9e5780356001600160401b0380821115612c245760008081fd5b818901915089603f830112612c395760008081fd5b612c41612a01565b80606084018c811115612c545760008081fd5b8885015b81811015612c8c57803585811115612c705760008081fd5b612c7e8f8c838a0101612a7b565b855250928901928901612c58565b50508652505050918301918301612c04565b509695505050505050565b600080600080600060a08688031215612cc157600080fd5b612cca86612b89565b945060208601356001600160401b0380821115612ce657600080fd5b612cf289838a01612a7b565b95506040880135915080821115612d0857600080fd5b612d1489838a01612a7b565b94506060880135915080821115612d2a57600080fd5b612d3689838a01612bbb565b93506080880135915080821115612d4c57600080fd5b50612d5988828901612a7b565b9150509295509295909350565b8035600c811061144f57600080fd5b600060408284031215612d8757600080fd5b612d8f612a01565b90508135600a8110612da057600080fd5b815260208201356001600160401b03811115612dbb57600080fd5b612dc784828501612a7b565b60208301525092915050565b60006020808385031215612de657600080fd5b82356001600160401b0380821115612dfd57600080fd5b9084019060408287031215612e1157600080fd5b612e19612a01565b612e2283612d66565b81528383013582811115612e3557600080fd5b80840193505086601f840112612e4a57600080fd5b8235612e58612bdc82612b98565b81815260059190911b84018501908581019089831115612e7757600080fd5b8686015b83811015612eaf57803586811115612e935760008081fd5b612ea18c8a838b0101612d75565b845250918701918701612e7b565b5095830195909552509695505050505050565b600060208284031215612ed457600080fd5b6114e682612d66565b803560ff8116811461144f57600080fd5b80356001600160401b038116811461144f57600080fd5b600060a08284031215612f1757600080fd5b60405160a081018181106001600160401b0382111715612f3957612f396129eb565b604052612f4583612edd565b8152612f5360208401612edd565b6020820152612f6460408401612eee565b6040820152612f7560608401612eee565b6060820152612f8660808401612eee565b60808201529392505050565b600060e08284031215612fa457600080fd5b612fac612a29565b9050612fb782612edd565b8152612fc560208301612b89565b6020820152612fd660408301612997565b604082015260608201356001600160401b0380821115612ff557600080fd5b61300185838601612a7b565b6060840152608084013591508082111561301a57600080fd5b61302685838601612a7b565b608084015260a084013591508082111561303f57600080fd5b61304b85838601612bbb565b60a084015260c084013591508082111561306457600080fd5b5061307184828501612a7b565b60c08301525092915050565b600082601f83011261308e57600080fd5b8135602061309e612bdc83612b98565b82815260059290921b840181019181810190868411156130bd57600080fd5b8286015b84811015612c9e5780356001600160401b038111156130e05760008081fd5b6130ee8986838b0101612a7b565b8452509183019183016130c1565b6000806040838503121561310f57600080fd5b82356001600160401b038082111561312657600080fd5b61313286838701612f92565b9350602085013591508082111561314857600080fd5b506131558582860161307d565b9150509250929050565b6000806040838503121561317257600080fd5b82356001600160401b0381111561318857600080fd5b61319485828601612a7b565b95602094909401359450505050565b6000602082840312156131b557600080fd5b81356001600160401b038111156131cb57600080fd5b612b1e84828501612d75565b600080604083850312156131ea57600080fd5b6131f383612eee565b915060208301356001600160f81b03198116811461321057600080fd5b809150509250929050565b600082601f83011261322c57600080fd5b8135602061323c612bdc83612b98565b82815260059290921b8401810191818101908684111561325b57600080fd5b8286015b84811015612c9e5780356001600160401b0381111561327e5760008081fd5b61328c8986838b010161307d565b84525091830191830161325f565b600080600080600060a086880312156132b257600080fd5b85356001600160401b03808211156132c957600080fd5b818801915088601f8301126132dd57600080fd5b813560206132ed612bdc83612b98565b82815260059290921b8401810191818101908c84111561330c57600080fd5b8286015b84811015613344578035868111156133285760008081fd5b6133368f86838b0101612f92565b845250918301918301613310565b509950508901359250508082111561335b57600080fd5b61336789838a0161321b565b9550604088013591508082111561337d57600080fd5b61338989838a01612a7b565b9450606088013591508082111561339f57600080fd5b506133ac88828901612a7b565b9250506133bb608087016129a6565b90509295509295909350565b600080604083850312156133da57600080fd5b82356001600160401b03808211156133f157600080fd5b61313286838701612a7b565b634e487b7160e01b600052602160045260246000fd5b6020810160148310613427576134276133fd565b91905290565b60006020828403121561343f57600080fd5b81356001600160401b0381111561345557600080fd5b612b1e84828501612f92565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610b4957610b49613461565b600082825180855260208086019550808260051b8401018186016000805b8581101561350a57868403601f19018a5282518460408101845b60028110156134f55787820383526134e3828551612b4a565b938901939289019291506001016134ca565b509b87019b95505050918401916001016134b0565b509198975050505050505050565b60ff851681526080602082015260006135346080830186612b4a565b82810360408401526135468186612b4a565b9050828103606084015261355a8185613492565b979650505050505050565b600060058710613577576135776133fd565b86825260a0602083015261358e60a0830187612b4a565b82810360408401526135a08187612b4a565b905082810360608401526135b48186613492565b905082810360808401526135c88185612b4a565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b600083516135fc818460208801612b26565b835190830190613610818360208801612b26565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061364957613649613619565b92169190910492915050565b60008651613667818460208b01612b26565b86519083019061367b818360208b01612b26565b865191019061368e818360208a01612b26565b85519101906136a1818360208901612b26565b84519101906136b4818360208801612b26565b01979650505050505050565b60ff60f81b8360f81b168152600082516136e1816001850160208701612b26565b919091016001019392505050565b60ff60f81b8460f81b16815260008351613710816001850160208801612b26565b835190830190613727816001840160208801612b26565b0160010195945050505050565b60ff83168152604060208201526000612b1e6040830184612b4a565b60008551613762818460208a01612b26565b855190830190613776818360208a01612b26565b8551910190613789818360208901612b26565b845191019061379c818360208801612b26565b019695505050505050565b600084516137b9818460208901612b26565b8451908301906137cd818360208901612b26565b84519101906137e0818360208801612b26565b0195945050505050565b8082018082111561044357610443613461565b6000875160206138108285838d01612b26565b8851918401916138238184848d01612b26565b88519201916138358184848c01612b26565b87519201916138478184848b01612b26565b86519201916138598184848a01612b26565b855192019161386b8184848901612b26565b919091019998505050505050505050565b8181038181111561044357610443613461565b6060815260006138a26060830186612b4a565b905083602083015260ff83166040830152949350505050565b6000600182016138cd576138cd613461565b5060010190565b60ff828116828216039081111561044357610443613461565b6001600160401b03818116838216019080821115610b4957610b49613461565b6001600160401b0381811683821602808216919082811461393057613930613461565b505092915050565b60008261394757613947613619565b50069056fe10ffffffffffffffffffffffffffffff040100010203050406071311ff0101ff07ff02ffffffffffffffffffffffffff070304ff04ffffffffffffff03ffffff0405070202ff0404040403ffffffffff05070402040205050505ff04ff04ffff07010203050406070101ff06ffff06ff0203050404000106060707070701ffff5769746e6574456e636f64696e674c69623a20696e76616c696420534c413a20a26469706673582212208702ee065e424e08f6de12765bd73eff8f49d68f919b3411bdd3079b55689cf764736f6c63430008190033", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106101205760003560e01c8063a8c06a13116100ac578063c5f3674a1161007b578063c5f3674a14610251578063daf4b0ef14610264578063dfaecd1114610277578063f3106f781461028a578063fa5dce12146102aa57600080fd5b8063a8c06a1314610205578063a97b1d3114610218578063acbade1f1461022b578063b6349ebd1461023e57600080fd5b8063203003b1116100f3578063203003b1146101a45780632461ccf3146101b75780632d81a542146101cc5780633b1e539b146101df5780636a11b2a8146101f2