witnet-solidity-bridge
Version:
Witnet Solidity Bridge contracts for EVM-compatible chains
231 lines • 2.03 MB
JSON
{
"contractName": "WitPriceFeedsLegacyDataLib",
"abi": [
{
"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": "read",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expected",
"type": "uint256"
}
],
"name": "UnexpectedMajorType",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "caption",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes4",
"name": "feedId",
"type": "bytes4"
}
],
"name": "WitFeedDeleted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "caption",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes4",
"name": "feedId",
"type": "bytes4"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "radHash",
"type": "bytes32"
}
],
"name": "WitFeedSettled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "caption",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes4",
"name": "feedId",
"type": "bytes4"
},
{
"indexed": false,
"internalType": "address",
"name": "solver",
"type": "address"
}
],
"name": "WitFeedSolverSettled",
"type": "event"
},
{
"inputs": [
{
"internalType": "contract IWitOracleQueriable",
"name": "witOracle",
"type": "IWitOracleQueriable"
},
{
"internalType": "bytes4",
"name": "feedId",
"type": "bytes4"
}
],
"name": "latestPrice",
"outputs": [
{
"components": [
{
"internalType": "uint64",
"name": "value",
"type": "uint64"
},
{
"internalType": "Witnet.Timestamp",
"name": "timestamp",
"type": "uint64"
},
{
"internalType": "Witnet.TransactionHash",
"name": "drTxHash",
"type": "bytes32"
},
{
"internalType": "enum IWitPriceFeedsLegacySolver.LatestUpdateStatus",
"name": "latestStatus",
"type": "IWitPriceFeedsLegacySolver.LatestUpdateStatus"
}
],
"internalType": "struct IWitPriceFeedsLegacySolver.Price",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "supportedFeeds",
"outputs": [
{
"internalType": "bytes4[]",
"name": "_ids",
"type": "bytes4[]"
},
{
"internalType": "string[]",
"name": "_captions",
"type": "string[]"
},
{
"internalType": "bytes32[]",
"name": "_solvers",
"type": "bytes32[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "initcode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "constructorParams",
"type": "bytes"
}
],
"name": "determinePriceSolverAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "caption",
"type": "string"
}
],
"name": "validateCaption",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"read\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"UnexpectedMajorType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"caption\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"feedId\",\"type\":\"bytes4\"}],\"name\":\"WitFeedDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"caption\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"feedId\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"radHash\",\"type\":\"bytes32\"}],\"name\":\"WitFeedSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"caption\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"feedId\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"}],\"name\":\"WitFeedSolverSettled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"initcode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"constructorParams\",\"type\":\"bytes\"}],\"name\":\"determinePriceSolverAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWitOracleQueriable\",\"name\":\"witOracle\",\"type\":\"IWitOracleQueriable\"},{\"internalType\":\"bytes4\",\"name\":\"feedId\",\"type\":\"bytes4\"}],\"name\":\"latestPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"},{\"internalType\":\"Witnet.Timestamp\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"Witnet.TransactionHash\",\"name\":\"drTxHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum IWitPriceFeedsLegacySolver.LatestUpdateStatus\",\"name\":\"latestStatus\",\"type\":\"IWitPriceFeedsLegacySolver.LatestUpdateStatus\"}],\"internalType\":\"struct IWitPriceFeedsLegacySolver.Price\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supportedFeeds\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"_ids\",\"type\":\"bytes4[]\"},{\"internalType\":\"string[]\",\"name\":\"_captions\",\"type\":\"string[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"_solvers\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"caption\",\"type\":\"string\"}],\"name\":\"validateCaption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Witnet Foundation.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"WitPriceFeedsLegacy data model.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/data/WitPriceFeedsLegacyDataLib.sol\":\"WitPriceFeedsLegacyDataLib\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/WitOracle.sol\":{\"keccak256\":\"0x7f20eab15140df459753dfa8e406b826918b56ebe2c46456f9d04345c02629d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0573ce3d48200c71d8235a1a8c055b706420b2037bd21336f3c61713c3b8349\",\"dweb:/ipfs/QmY7BnVaNXFtJs1BFdeaa7dQfvUVoZyfwtv9HuToCxUUHU\"]},\"project:/contracts/data/WitPriceFeedsLegacyDataLib.sol\":{\"keccak256\":\"0xd4eab3434b51c88c628faa9ff042122762f40d082002b0c1e8ccd167635452e1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2dc424d929cb930bb3f5da94117ab284b2b6062337e55d5a49034b4a8158fd22\",\"dweb:/ipfs/QmPXeUcbtSKK8gApymg7wwKSqRY3mMDB8RS643vofWCeMo\"]},\"project:/contracts/interfaces/IWitAppliance.sol\":{\"keccak256\":\"0xd207ca54a1049445a3d99eea497d9b34c6dbdd44d771eee825e4c031bd2f447e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f81de32d868ff2881ed6fe97cc897e40b4b11d23cbe53a0e23cf3e68f9c0f0a3\",\"dweb:/ipfs/QmeeXmzmK5MAzt7Hf5DB2L81efKtTzZg9VbQ8sUiTqEk5c\"]},\"project:/contracts/interfaces/IWitOracle.sol\":{\"keccak256\":\"0x26cbe2074c0b3f545a46d95fad5e2280b67edcd958e4ae0b88f3a018aa11b805\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5324bac61f65e3edb01c88b9b75ca17affd593be88da5753a93b3f5304d3f479\",\"dweb:/ipfs/QmcVmNV6smbFiPaxvuN8ShkqbDZsT1wfjnF7f3qs6ke7QG\"]},\"project:/contracts/interfaces/IWitOracleAppliance.sol\":{\"keccak256\":\"0xcd8e57eca7f8042c85a83264e2ff6d1cd7a9f1521831736d7f57bcc7800642e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c639668e9439d60770b5df77436088ae7bd0aeb1d1be446552a98b6c29138f0\",\"dweb:/ipfs/QmbN3f5YuKMSd2j9tjay3VEkiYibGWpbfbwRNyrxA8k4o4\"]},\"project:/contracts/interfaces/IWitOracleQueriable.sol\":{\"keccak256\":\"0xdb0da1e377a35a7d620f43cb583a876750a52d91da2b888f48042483ad9c4910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edfcdf3e96ec3c5de7438f82e3d5a1dc9af9eb29080044213dccb26ff978354c\",\"dweb:/ipfs/Qmap2FzSysh2fug88eortbsTM7itFygRzKc9HfV43ePMik\"]},\"project:/contracts/interfaces/IWitOracleQueriableEvents.sol\":{\"keccak256\":\"0x47c283e931006d35bd2599524f86724e45eae6fad2fdd9cdecd1c85a90ff3f8c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ad0520f99ec9298536ae9434f58caeb470c10dd3eaab1e4c7ed4cae9a97e2a2\",\"dweb:/ipfs/QmSuYCsSPweZfQc5Fbf9jYDdx4u7gwYCUdjhpcrrxmWZy6\"]},\"project:/contracts/interfaces/IWitOracleRadonRegistry.sol\":{\"keccak256\":\"0x437bbb89129311bd1cc8f6becd333df46109ec53b24d3159be942b225614071f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef9bcdf4a73cb126885478c994821b7fe2b87d9221b767b4c9342b89b0d6550a\",\"dweb:/ipfs/QmXzZXPMxjSiFpcEnhg6CjLFNxGCpDZt22xpUh7VHxNTGd\"]},\"project:/contracts/interfaces/legacy/IWitOracleLegacy.sol\":{\"keccak256\":\"0xd2929c9aa5a02d261d6d1a068a6b7231ae58d8f81f081ba89f2d3267a31fbbb5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://956b26323a02cf400c32012586954fc5dbc98b4d5b7a8b0533401cbda8619059\",\"dweb:/ipfs/QmSWdCRwL5t3atFM8osdaohLTqEEmY1FbnR6xrRCmw1GDM\"]},\"project:/contracts/interfaces/legacy/IWitOracleRequest.sol\":{\"keccak256\":\"0x0fb3f0ba03f4f7a0214ecb36df26525564cf51a8a2176cba92c185af8a1d419e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://340b7bdb92c3259519fe120eb3061b393e7a5e9c1b576a2fe4eab020af466b64\",\"dweb:/ipfs/QmRt4wMX9WdxFwfdFMUZ3zKMAW1grS7qLk1x1PDMJdEAVU\"]},\"project:/contracts/interfaces/legacy/IWitOracleRequestTemplate.sol\":{\"keccak256\":\"0x9e065ef5880c64eefff5fcfb1347fde6684e0e311f8c2350a6aefdbd1f8b0f22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://817de760c7cce9d00dcd4312aea6434d88abddf1c0e68ea7e8fb1e6c5165a445\",\"dweb:/ipfs/QmUNmtn85nFXbje2nRJQY2h65KJCVinDMMU6P2jQmo1Nij\"]},\"project:/contracts/interfaces/legacy/IWitPriceFeedsLegacy.sol\":{\"keccak256\":\"0x13222d4ec5a538477e792ff63338a12db2c0071d81a61aad7a046ad2880cefd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8f564e6a69264f7e0679525022978f9833a0f1273ef606e554c2a18ba964d13\",\"dweb:/ipfs/QmaAVfsvnJQvYwdsnYSXAnbJWopp15PR3atXxCwZS3AANC\"]},\"project:/contracts/interfaces/legacy/IWitPriceFeedsLegacyAdmin.sol\":{\"keccak256\":\"0x2a2a422478348acb0ced6e76dbc14dacbfec95833f874ecb588718523117fb0d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb6d3802e68441cb944f69ae5ba0e00b9ca82ad97f9adfaff5ffd44e0a6aae2\",\"dweb:/ipfs/QmYFvuGH6cUwhW67thWDMLfNcenicKcMgicLTnNAG4LHM7\"]},\"project:/contracts/interfaces/legacy/IWitPriceFeedsLegacySolver.sol\":{\"keccak256\":\"0x9543c5a64bbd38a3d1af6d00badda31c8c1fc90412efc7894023277e1e6b7490\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab133acd1c20af1f676bf17017c77e4918338fdbad764660e42d892a5f412eaf\",\"dweb:/ipfs/QmeQFGuv3jm46R4bux8NaW56SbFWHvvBNCqFzfafgtWi1W\"]},\"project:/contracts/libs/Bech32.sol\":{\"keccak256\":\"0x14618323a0efe7586c20906a2e9cee7ad63baa976ff231c57f7f2d7d3707fb8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a19f05fe84047a7a6d3d6fc39972b432e6e536aa70472386a9d7a6d9aab64a64\",\"dweb:/ipfs/QmcHwUY66yjiotRH4Q3kbRvSzcHyLQ1yHL3KbtQKiMhtZE\"]},\"project:/contracts/libs/Secp256k1.sol\":{\"keccak256\":\"0xbe686002da5004ff39dd70709f3820eba2afe9323ae9cb894009c161e4b1a666\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18fab91775216de0707cea9ad285b10be09127461a13432fea358bf9cb2a0c2e\",\"dweb:/ipfs/QmeRUGsgstnM4hxM9hpkBf3L6cE5btirEaowcMxmuw3utj\"]},\"project:/contracts/libs/Slices.sol\":{\"keccak256\":\"0x9d046fa558be922c9625a1fdc470f6e68b3c9b5745b6185cb4a4fc59181fa006\",\"license\":\"APACHE-2.0\",\"urls\":[\"bzz-raw://ab19ba09faf83aaa92947f0a0907f6522be89279a9a1b0e53d5393a23085947d\",\"dweb:/ipfs/QmeE9MwhpSFNTwyqDFpMFjftrJKR1edBhLjV3bdKQQHUVm\"]},\"project:/contracts/libs/Witnet.sol\":{\"keccak256\":\"0x1d446c3e534e40e676d1763bfb2897fadfac8afed904ab757843d7d6770b0a6c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://338fb1073f17d64e8d31bfe492d9475ce906788ee08e6489ce30413f91dc1328\",\"dweb:/ipfs/QmPe5QX2AGTnQFjse1Xttq4ZYWwYAiXoySb5VUui3PqPhk\"]},\"project:/contracts/libs/WitnetBuffer.sol\":{\"keccak256\":\"0x8e07aebe2954ab3e6f2d8eceedb12db7cf915c1f3e8630f4fa9999cecb1c78ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed6c54cc901183d61546e8fd15bd5ea8ef238ebc915642946071d435dd7481ea\",\"dweb:/ipfs/Qmcaqta7YjUSBbBUGqoh44bsCS6UqqoyHjBuz4qnKBShXM\"]},\"project:/contracts/libs/WitnetCBOR.sol\":{\"keccak256\":\"0xd99308373575cc10fb7f2ceb0f6a8625f3911275c1fa27811fae498d98d03d97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4909a999d7b660a2dc54ca957b6eccfa523e2765fc4d6a2574dee7d5cd67b43\",\"dweb:/ipfs/QmWGQT4KDcfSFe1hcHVoWx6E4PhYMaod5iLpJCWBEeShzh\"]}},\"version\":1}",
"bytecode": "0x612f87610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100a6575f3560e01c806386ac03e01161006e57806386ac03e01461015e578063a55b471c1461017d578063e1c9e3c0146101b4578063e6f3e35d146101c8578063ff75890f146101ed575f5ffd5b80630306732e146100aa57806303f3813d146100ca57806307f11202146100eb57806384292f071461011f57806384ee24111461013e575b5f5ffd5b6100b2610200565b6040516100c1939291906121e4565b60405180910390f35b8180156100d5575f5ffd5b506100e96100e43660046122f9565b610456565b005b8180156100f6575f5ffd5b5061010a61010536600461243e565b6107be565b604080519283526020830191909152016100c1565b81801561012a575f5ffd5b506100e96101393660046124ea565b610ae3565b61015161014c366004612531565b610c67565b6040516100c1919061257c565b818015610169575f5ffd5b506100e96101783660046125db565b610ebd565b818015610188575f5ffd5b5061019c610197366004612619565b6110f5565b6040516001600160a01b0390911681526020016100c1565b8180156101bf575f5ffd5b506100e9611211565b6101db6101d63660046125db565b61142d565b60405160ff90911681526020016100c1565b61019c6101fb366004612619565b6115cc565b5f516020612f325f395f51905f528054604080516020808402820181019092528281526060938493849383018282801561028357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116102455790505b5050505050925082516001600160401b038111156102a3576102a36123bb565b6040519080825280602002602001820160405280156102d657816020015b60608152602001906001900390816102c15790505b50915082516001600160401b038111156102f2576102f26123bb565b60405190808252806020026020018201604052801561031b578160200160208202803683370190505b5090505f5b8351811015610450575f61034c85838151811061033f5761033f612683565b6020026020010151611651565b9050805f01805461035c90612697565b80601f016020809104026020016040519081016040528092919081815260200182805461038890612697565b80156103d35780601f106103aa576101008083540402835291602001916103d3565b820191905f5260205f20905b8154815290600101906020018083116103b657829003601f168201915b50505050508483815181106103ea576103ea612683565b602090810291909101015260068101546001600160a01b03161561042457600681015460601b6bffffffffffffffffffffffff191661042a565b80600501545b83838151811061043c5761043c612683565b602090810291909101015250600101610320565b50909192565b5f61049586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f6104a182611651565b905080600201545f0361056d57806104ba87898361271b565b506104c5878761142d565b60018201805460ff191660ff929092169190911790555f516020612f125f395f51905f526001908101546104f8916127e8565b60028201556006810180546001600160a01b0319166001600160a01b0387161790555f516020612f125f395f51905f526001908101805491820181555f908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c929092029190911790556105a8565b60068101546001600160a01b038681169116146105a8575f60058201556006810180546001600160a01b0319166001600160a01b0387161790555b5f5f866001600160a01b031663e6f8715860e01b8588886040516024016105d193929190612823565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161060f91906128ea565b5f60405180830381855af49150503d805f8114610647576040519150601f19603f3d011682016040523d82523d5f602084013e61064c565b606091505b5091509150816106af57600481019050808060200190518101906106709190612971565b60405160200161068091906129b5565b60408051601f198184030181529082905262461bcd60e51b82526106a6916004016129e6565b60405180910390fd5b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290515f9182913091610705916128ea565b5f60405180830381855afa9150503d805f811461073d576040519150601f19603f3d011682016040523d82523d5f602084013e610742565b606091505b50915091508161077657600481019050808060200190518101906107669190612971565b60405160200161068091906129f8565b50507f286a3bf658fa39c74919afa81990860b8526693c9e7de41f8160a973a5c6d052878784886040516107ad9493929190612a1f565b60405180910390a150505050505050565b5f5f5f6107ca86611651565b9050806004015492505f6107de8888611695565b90506107fa8160ff8111156107f5576107f5612568565b611724565b156108fc576040516337ed55bf60e11b8152600481018590525f906001600160a01b038a1690636fdaab7e90602401602060405180830381865afa158015610844573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108689190612a5d565b90508068ffffffffffffffffff168611156108f25761089268ffffffffffffffffff821687612a85565b60405163ec5946db60e01b8152600481018790529094506001600160a01b038a169063ec5946db9086906024015f604051808303818588803b1580156108d6575f5ffd5b505af11580156108e8573d5f5f3e3d5ffd5b50505050506108f6565b5f93505b50610ad8565b5f8160ff81111561090f5761090f612568565b036109b0576003820154156109a4576003820154604051637c1fbda360e01b815260048101919091526001600160a01b03891690637c1fbda3906024016020604051808303815f875af1925050508015610986575060408051601f3d908101601f1916820190925261098391810190612a5d565b60015b156109a4576109a068ffffffffffffffffff8216876127e8565b9550505b60038201849055610a30565b604051637c1fbda360e01b8152600481018590526001600160a01b03891690637c1fbda3906024016020604051808303815f875af1925050508015610a12575060408051601f3d908101601f19168201909252610a0f91810190612a5d565b60015b15610a3057610a2c68ffffffffffffffffff8216876127e8565b9550505b60058201546040805163a58f680360e01b81526004810192909252875161ffff908116602484015260208901511660448301528701516001600160401b031660648201528593506001600160a01b0389169063a58f680390859060840160206040518083038185885af1158015610aa9573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ace9190612a98565b6004830181905593505b505094509492505050565b5f610b2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f610b2e82611651565b905080600201545f03610bfe5780610b4785878361271b565b50610b52858561142d565b60018201805460ff191660ff929092169190911790555f516020612f125f395f51905f52600190810154610b85916127e8565b6002820155600581018390555f516020612f325f395f51905f5280546001810182555f919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610c23565b82816005015414610c2357600581018390556006810180546001600160a01b03191690555b7f56660980158f15674b73c4dcec7f3314e2500517420e16306c40a07dad09f10185858486604051610c589493929190612aaf565b60405180910390a15050505050565b610c8e604080516080810182525f8082526020820181905291810182905290606082015290565b5f610c99848461175b565b90508015610d7c576040516359209b3960e01b8152600481018290525f906001600160a01b038616906359209b39906024015f60405180830381865afa158015610ce5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d0c9190810190612bee565b90506040518060800160405280610d2283611808565b6001600160401b0316815260200182608001516001600160401b0316815260200182604001518152602001610d5f610d5a8888611695565b6118e3565b6003811115610d7057610d70612568565b81525092505050610eb7565b5f610d8684611651565b600601546001600160a01b031690508015610e8857604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290515f9182913091610def916128ea565b5f60405180830381855afa9150503d805f8114610e27576040519150601f19603f3d011682016040523d82523d5f602084013e610e2c565b606091505b509150915081610e695760048101905080806020019051810190610e509190612971565b60405162461bcd60e51b81526004016106a691906129e6565b80806020019051810190610e7d9190612ca4565b945050505050610eb7565b604080516080810182525f808252602082018190529181019190915260608101610d5f610d5a8888611695565b505b92915050565b5f610efc83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f516020612f325f395f51905f525f610f1683611651565b60028101549091505f819003610f5d5760405162461bcd60e51b815260206004820152600c60248201526b1d5b9adb9bdddb881999595960a21b60448201526064016106a6565b82545f908490610f6f90600190612a85565b81548110610f7f57610f7f612683565b5f918252602090912060088204015460079091166004026101000a900460e01b90508084610fae600185612a85565b81548110610fbe57610fbe612683565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555083805480610ffc57610ffc612d22565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a021916905590558161103282611651565b600201556001600160e01b031985165f9081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040812090611078828261212a565b5060018101805460ff191690555f600282018190556003820181905560048201819055600582018190556006820180546001600160a01b0319169055600782018190556008909101556040517f69afe750a424a45bbe19fdde185259ba3a79671c6e4f40a783d355704a022921906107ad90899089908990612d36565b5f611102858585856115cc565b9050806001600160a01b03163b5f03611209575f61112286868686611931565b90505f5f8251602084015ff59050809250636d7f4b0b60e11b6001600160e01b031916836001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611181573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a59190612d62565b6001600160e01b031916146112065760405162461bcd60e51b815260206004820152602160248201527f756e636f6d706c69616e7420736f6c76657220696d706c656d656e746174696f6044820152603760f91b60648201526084016106a6565b50505b949350505050565b5f516020612f325f395f51905f5280545b8015611429575f82611235600184612a85565b8154811061124557611245612683565b5f9182526020822060088204015460079091166004026101000a900460e01b91505f516020612f125f395f51905f526001600160e01b031983165f90815260029190910160205260409020805461129b90612697565b80601f01602080910402602001604051908101604052809291908181526020018280546112c790612697565b80156113125780601f106112e957610100808354040283529160200191611312565b820191905f5260205f20905b8154815290600101906020018083116112f557829003601f168201915b5050505050905061132d5f516020612f125f395f51905f5290565b6001600160e01b031983165f9081526002919091016020526040812090611354828261212a565b5060018101805460ff191690555f600282018190556003820181905560048201819055600582018190556006820180546001600160a01b03191690556007820181905560089091015583548490806113ae576113ae612d22565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a021916905590556040517f69afe750a424a45bbe19fdde185259ba3a79671c6e4f40a783d355704a0229219061140c9083908590612d7d565b60405180910390a15050808061142190612da7565b915050611222565b5050565b5f5f61146d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061196392505050565b60408051808201825260018152602d60f81b6020808301918252835180850185525f808252908201819052845180860190955292518452830152919250906114b5838361198f565b6114c09060016127e8565b6001600160401b038111156114d7576114d76123bb565b60405190808252806020026020018201604052801561150a57816020015b60608152602001906001900390816114f55790505b5090505f5b815181101561154f5761152a6115258585611a23565b611a41565b82828151811061153c5761153c612683565b602090810291909101015260010161150f565b505f5f61158183600185516115649190612a85565b8151811061157457611574612683565b6020026020010151611aa5565b91509150806115c15760405162461bcd60e51b815260206004820152600c60248201526b62616420646563696d616c7360a01b60448201526064016106a6565b509695505050505050565b5f6001600160f81b031930826115e488888888611931565b805160209182012060405161163095949392016001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b6001600160e01b0319165f9081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b805160209091012090565b5f5f6116a083611651565b600401549050801561171b57604051634cddf61560e01b8152600481018290526001600160a01b03851690634cddf61590602401602060405180830381865afa1580156116ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117139190612dbc565b915050610eb7565b5f915050610eb7565b5f60f08260ff81111561173957611739612568565b1480610eb7575060f18260ff81111561175457611754612568565b1492915050565b5f61176582611651565b6004015490508015806117ef57505f604051634cddf61560e01b8152600481018390526001600160a01b03851690634cddf61590602401602060405180830381865afa1580156117b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117db9190612dbc565b60ff8111156117ec576117ec612568565b14155b15610eb7576117fd82611651565b600301549392505050565b5f81600461181582611b51565b158015611847575080601381111561182f5761182f612568565b8260200151601381111561184557611845612568565b145b6118935760405162461bcd60e51b815260206004820152601760248201527f63626f723a2063616e6e6f74206665746368206461746100000000000000000060448201526064016106a6565b6118a08460a00151611b5e565b92506118af8260a00151611bad565b826020019060138111156118c5576118c5612568565b908160138111156118d8576118d8612568565b815250505050919050565b5f6118f98260ff8111156107f5576107f5612568565b611929576119178260ff81111561191257611912612568565b611c74565b611922576002610eb7565b6003610eb7565b600192915050565b60608484848460405160200161194a9493929190612dd5565b6040516020818303038152906040529050949350505050565b6040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b5f5f825f01516119af855f01518660200151865f01518760200151611ca1565b6119b991906127e8565b90505b835160208501516119cd91906127e8565b8111610eb557816119dd81612df4565b925050825f0151611a128560200151836119f79190612a85565b8651611a039190612a85565b83865f01518760200151611ca1565b611a1c91906127e8565b90506119bc565b604080518082019091525f8082526020820152610eb5838383611dbd565b60605f825f01516001600160401b03811115611a5f57611a5f6123bb565b6040519080825280601f01601f191660200182016040528015611a89576020820181803683370190505b5090505f602082019050610eb5818560200151865f0151611e63565b5f80805b8351811015611b46575f6030858381518110611ac757611ac7612683565b016020015160f81c0360ff161080611afe575060096030858381518110611af057611af0612683565b016020015160f81c0360ff16115b15611b0e57505f93849350915050565b60018185510303600a0a6030858381518110611b2c57611b2c612683565b016020015160f81c0360ff16029290920191600101611aa9565b509092600192509050565b5f610eb7825f0151611724565b5f815f8060ff16826040015160ff1614611b9c57604080830151905161800560e51b815260ff918216600482015290821660248201526044016106a6565b611209845f01518560600151611edc565b5f611bc18251805151602090910151101590565b611c6f576006826040015160ff1611611c095760408201516502020183808360d11b9060ff1660078110611bf757611bf7612683565b1a6013811115610eb757610eb7612568565b816040015160ff16600703611c6f57816060015160ff1660141480611c355750816060015160ff166015145b15611c4257506002919050565b6019826060015160ff1610158015611c625750601b826060015160ff1611155b15611c6f57506005919050565b919050565b5f808260ff811115611c8857611c88612568565b14158015610eb75750611c9a82611724565b1592915050565b5f8381868511611da85760208511611d58575f8515611ceb576001611cc7876020612a85565b611cd2906008612e0c565b611cdd906002612f06565b611ce79190612a85565b1990505b845181165f87611cfb8b8b6127e8565b611d059190612a85565b855190915083165b828114611d4a57818610611d3257611d258b8b6127e8565b9650505050505050611209565b85611d3c81612df4565b965050838651169050611d0d565b859650505050505050611209565b508383205f905b611d698689612a85565b8211611da657858320808203611d855783945050505050611209565b611d906001856127e8565b9350508180611d9e90612df4565b925050611d5f565b505b611db287876127e8565b979650505050505050565b604080518082019091525f80825260208201525f611deb855f01518660200151865f01518760200151611ca1565b602080870180519186019190915251909150611e079082612a85565b835284516020860151611e1a91906127e8565b8103611e28575f8552611e5a565b83518351611e3691906127e8565b85518690611e45908390612a85565b9052508351611e5490826127e8565b60208601525b50909392505050565b60208110611e9b5781518352611e7a6020846127e8565b9250611e876020836127e8565b9150611e94602082612a85565b9050611e63565b5f198115611ec9576001611eb0836020612a85565b611ebc90610100612f06565b611ec69190612a85565b90505b9151835183169219169190911790915250565b5f60188260ff161015611ef3575060ff8116610eb7565b8160ff16601803611f1157611f0783611fa3565b60ff169050610eb7565b8160ff16601903611f3057611f2583612003565b61ffff169050610eb7565b8160ff16601a03611f5157611f448361206e565b63ffffffff169050610eb7565b8160ff16601b03611f6c57611f65836120cc565b9050610eb7565b8160ff16601f03611f8557506001600160401b03610eb7565b604051636d785b1360e01b815260ff831660048201526024016106a6565b5f8160200151825f01515180821115611fd9576040516363a056dd60e01b815260048101839052602481018290526044016106a6565b8351602085018051808301600101519550908190611ff682612df4565b8152505050505050919050565b5f8160200151600261201591906127e8565b82515180821115612043576040516363a056dd60e01b815260048101839052602481018290526044016106a6565b835160208501805160028184018101519650909161206182846127e8565b9052509395945050505050565b5f8160200151600461208091906127e8565b825151808211156120ae576040516363a056dd60e01b815260048101839052602481018290526044016106a6565b835160208501805160048184018101519650909161206182846127e8565b5f816020015160086120de91906127e8565b8251518082111561210c576040516363a056dd60e01b815260048101839052602481018290526044016106a6565b835160208501805160088184018101519650909161206182846127e8565b50805461213690612697565b5f825580601f10612145575050565b601f0160209004905f5260205f20908101906121619190612164565b50565b5b80821115612178575f8155600101612165565b5090565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f8151808452602084019350602083015f5b828110156121da5781518652602095860195909101906001016121bc565b5093949350505050565b606080825284519082018190525f9060208601906080840190835b818110156122275783516001600160e01b0319168352602093840193909201916001016121ff565b50508381036020850152809150855180825260208201925060208160051b830101602088015f5b8381101561228057601f1985840301865261226a83835161217c565b602096870196909350919091019060010161224e565b5050858103604087015261229481886121aa565b9998505050505050505050565b5f5f83601f8401126122b1575f5ffd5b5081356001600160401b038111156122c7575f5ffd5b6020830191508360208285010111156122de575f5ffd5b9250929050565b6001600160a01b0381168114612161575f5ffd5b5f5f5f5f5f6060868803121561230d575f5ffd5b85356001600160401b03811115612322575f5ffd5b61232e888289016122a1565b9096509450506020860135612342816122e5565b925060408601356001600160401b0381111561235c575f5ffd5b8601601f8101881361236c575f5ffd5b80356001600160401b03811115612381575f5ffd5b8860208260051b8401011115612395575f5ffd5b959894975092955050506020019190565b6001600160e01b031981168114612161575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156123f1576123f16123bb565b60405290565b604080519081016001600160401b03811182821017156123f1576123f16123bb565b803561ffff81168114611c6f575f5ffd5b6001600160401b0381168114612161575f5ffd5b5f5f5f5f84860360c0811215612452575f5ffd5b853561245d816122e5565b9450602086013561246d816123a6565b93506060603f1982011215612480575f5ffd5b50604051606081016001600160401b03811182821017156124a3576124a36123bb565b80604052506124b460408701612419565b81526124c260608701612419565b602082015260808601356124d58161242a565b60408201529396929550929360a00135925050565b5f5f5f604084860312156124fc575f5ffd5b83356001600160401b03811115612511575f5ffd5b61251d868287016122a1565b909790965060209590950135949350505050565b5f5f60408385031215612542575f5ffd5b823561254d816122e5565b9150602083013561255d816123a6565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b5f6080820190506001600160401b0383511682526001600160401b036020840151166020830152604083015160408301526060830151600481106125ce57634e487b7160e01b5f52602160045260245ffd5b8060608401525092915050565b5f5f602083850312156125ec575f5ffd5b82356001600160401b03811115612601575f5ffd5b61260d858286016122a1565b90969095509350505050565b5f5f5f5f6040858703121561262c575f5ffd5b84356001600160401b03811115612641575f5ffd5b61264d878288016122a1565b90955093505060208501356001600160401b0381111561266b575f5ffd5b612677878288016122a1565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806126ab57607f821691505b6020821081036126c957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561271657805f5260205f20601f840160051c810160208510156126f45750805b601f840160051c820191505b81811015612713575f8155600101612700565b50505b505050565b6001600160401b03831115612732576127326123bb565b612746836127408354612697565b836126cf565b5f601f841160018114612777575f85156127605750838201355b5f19600387901b1c1916600186901b178355612713565b5f83815260208120601f198716915b828110156127a65786850135825560209485019460019092019101612786565b50868210156127c2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610eb757610eb76127d4565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160e01b03198416815260406020820181905281018290525f6060600584901b830181019083018583601e1936839003015b878210156128c557868503605f190184528235818112612876575f5ffd5b89016020810190356001600160401b03811115612891575f5ffd5b80360382131561289f575f5ffd5b6128aa8782846127fb565b96505050602083019250602084019350600182019150612858565b509298975050505050505050565b5f81518060208401855e5f93019283525090919050565b5f6128f582846128d3565b9392505050565b5f5f6001600160401b03841115612915576129156123bb565b50604051601f19601f85018116603f011681018181106001600160401b0382111715612943576129436123bb565b60405283815290508082840185101561295a575f5ffd5b8383602083015e5f60208583010152509392505050565b5f60208284031215612981575f5ffd5b81516001600160401b03811115612996575f5ffd5b8201601f810184136129a6575f5ffd5b611209848251602084016128fc565b7f736f6c7665722076616c69646174696f6e206661696c65643a2000000000000081525f6128f5601a8301846128d3565b602081525f6128f5602083018461217c565b72039b6b7b5b296ba32b9ba103330b4b632b21d1606d1b81525f6128f560138301846128d3565b606081525f612a326060830186886127fb565b6001600160e01b0319949094166020830152506001600160a01b039190911660409091015292915050565b5f60208284031215612a6d575f5ffd5b815168ffffffffffffffffff811681146128f5575f5ffd5b81810381811115610eb757610eb76127d4565b5f60208284031215612aa8575f5ffd5b5051919050565b606081525f612ac26060830186886127fb565b6001600160e01b0319949094166020830152506040015292915050565b80516101008110611c6f575f5ffd5b8051611c6f8161242a565b805160ff81168114611c6f575f5ffd5b5f60c08284031215612b19575f5ffd5b612b216123cf565b905081516001600160401b03811115612b38575f5ffd5b820160408185031215612b49575f5ffd5b612b516123f7565b81516001600160401b03811115612b66575f5ffd5b8201601f81018613612b76575f5ffd5b612b85868251602084016128fc565b825250602091820151828201528252612b9f908301612af9565b6020820152612bb060408301612af9565b6040820152612bc160608301612af9565b6060820152612bd260808301612aee565b6080820152612be360a08301612aee565b60a082015292915050565b5f60208284031215612bfe575f5ffd5b81516001600160401b03811115612c13575f5ffd5b820160c08185031215612c24575f5ffd5b612c2c6123cf565b612c3582612adf565b8152602082015160148110612c48575f5ffd5b60208201526040828101519082015260608083015190820152612c6d60808301612aee565b608082015260a08201516001600160401b03811115612c8a575f5ffd5b612c9686828501612b09565b60a083015250949350505050565b5f6080828403128015612cb5575f5ffd5b50604051608081016001600160401b0381118282101715612cd857612cd86123bb565b6040528251612ce68161242a565b81526020830151612cf68161242a565b602082015260408381015190820152606083015160048110612d16575f5ffd5b60608201529392505050565b634e487b7160e01b5f52603160045260245ffd5b604081525f612d496040830185876127fb565b905063ffffffff60e01b83166020830152949350505050565b5f60208284031215612d72575f5ffd5b81516128f5816123a6565b604081525f612d8f604083018561217c565b905063ffffffff60e01b831660208301529392505050565b5f81612db557612db56127d4565b505f190190565b5f60208284031215612dcc575f5ffd5b6128f582612adf565b838582375f8482015f8152838582375f93019283525090949350505050565b5f60018201612e0557612e056127d4565b5060010190565b8082028115828204841417610eb757610eb76127d4565b6001815b6001841115612e5e57808504811115612e4257612e426127d4565b6001841615612e5057908102905b60019390931c928002612e27565b935093915050565b5f82612e7457506001610eb7565b81612e8057505f610eb7565b8160018114612e965760028114612ea057612ebc565b6001915050610eb7565b60ff841115612eb157612eb16127d4565b50506001821b610eb7565b5060208310610133831016604e8410600b8410161715612edf575081810a610eb7565b612eeb5f198484612e23565b805f1904821115612efe57612efe6127d4565b029392505050565b5f6128f58383612e6656fee36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ffe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200a2646970667358221220c8b3c36beb28051daa7382b6462a32d04babb2e74f729d274f3df2d4dcd5367264736f6c634300081e0033",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100a6575f3560e01c806386ac03e01161006e57806386ac03e01461015e578063a55b471c1461017d578063e1c9e3c0146101b4578063e6f3e35d146101c8578063ff75890f146101ed575f5ffd5b80630306732e146100aa57806303f3813d146100ca57806307f11202146100eb57806384292f071461011f57806384ee24111461013e575b5f5ffd5b6100b2610200565b6040516100c1939291906121e4565b60405180910390f35b8180156100d5575f5ffd5b506100e96100e43660046122f9565b610456565b005b8180156100f6575f5ffd5b5061010a61010536600461243e565b6107be565b604080519283526020830191909152016100c1565b81801561012a575f5ffd5b506100e96101393660046124ea565b610ae3565b61015161014c366004612531565b610c67565b6040516100c1919061257c565b818015610169575f5ffd5b506100e96101783660046125db565b610ebd565b818015610188575f5ffd5b5061019c610197366004612619565b6110f5565b6040516001600160a01b0390911681526020016100c1565b8180156101bf575f5ffd5b506100e9611211565b6101db6101d63660046125db565b61142d565b60405160ff90911681526020016100c1565b61019c6101fb366004612619565b6115cc565b5f516020612f325f395f51905f528054604080516020808402820181019092528281526060938493849383018282801561028357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116102455790505b5050505050925082516001600160401b038111156102a3576102a36123bb565b6040519080825280602002602001820160405280156102d657816020015b60608152602001906001900390816102c15790505b50915082516001600160401b038111156102f2576102f26123bb565b60405190808252806020026020018201604052801561031b578160200160208202803683370190505b5090505f5b8351811015610450575f61034c85838151811061033f5761033f612683565b6020026020010151611651565b9050805f01805461035c90612697565b80601f016020809104026020016040519081016040528092919081815260200182805461038890612697565b80156103d35780601f106103aa576101008083540402835291602001916103d3565b820191905f5260205f20905b8154815290600101906020018083116103b657829003601f168201915b50505050508483815181106103ea576103ea612683565b602090810291909101015260068101546001600160a01b03161561042457600681015460601b6bffffffffffffffffffffffff191661042a565b80600501545b83838151811061043c5761043c612683565b602090810291909101015250600101610320565b50909192565b5f61049586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f6104a182611651565b905080600201545f0361056d57806104ba87898361271b565b506104c5878761142d565b60018201805460ff191660ff929092169190911790555f516020612f125f395f51905f526001908101546104f8916127e8565b60028201556006810180546001600160a01b0319166001600160a01b0387161790555f516020612f125f395f51905f526001908101805491820181555f908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c929092029190911790556105a8565b60068101546001600160a01b038681169116146105a8575f60058201556006810180546001600160a01b0319166001600160a01b0387161790555b5f5f866001600160a01b031663e6f8715860e01b8588886040516024016105d193929190612823565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161060f91906128ea565b5f60405180830381855af49150503d805f8114610647576040519150601f19603f3d011682016040523d82523d5f602084013e61064c565b606091505b5091509150816106af57600481019050808060200190518101906106709190612971565b60405160200161068091906129b5565b60408051601f198184030181529082905262461bcd60e51b82526106a6916004016129e6565b60405180910390fd5b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290515f9182913091610705916128ea565b5f60405180830381855afa9150503d805f811461073d576040519150601f19603f3d011682016040523d82523d5f602084013e610742565b606091505b50915091508161077657600481019050808060200190518101906107669190612971565b60405160200161068091906129f8565b50507f286a3bf658fa39c74919afa81990860b8526693c9e7de41f8160a973a5c6d052878784886040516107ad9493929190612a1f565b60405180910390a150505050505050565b5f5f5f6107ca86611651565b9050806004015492505f6107de8888611695565b90506107fa8160ff8111156107f5576107f5612568565b611724565b156108fc576040516337ed55bf60e11b8152600481018590525f906001600160a01b038a1690636fdaab7e90602401602060405180830381865afa158015610844573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108689190612a5d565b90508068ffffffffffffffffff168611156108f25761089268ffffffffffffffffff821687612a85565b60405163ec5946db60e01b8152600481018790529094506001600160a01b038a169063ec5946db9086906024015f604051808303818588803b1580156108d6575f5ffd5b505af11580156108e8573d5f5f3e3d5ffd5b50505050506108f6565b5f93505b50610ad8565b5f8160ff81111561090f5761090f612568565b036109b0576003820154156109a4576003820154604051637c1fbda360e01b815260048101919091526001600160a01b03891690637c1fbda3906024016020604051808303815f875af1925050508015610986575060408051601f3d908101601f1916820190925261098391810190612a5d565b60015b156109a4576109a068ffffffffffffffffff8216876127e8565b9550505b60038201849055610a30565b604051637c1fbda360e01b8152600481018590526001600160a01b03891690637c1fbda3906024016020604051808303815f875af1925050508015610a12575060408051601f3d908101601f19168201909252610a0f91810190612a5d565b60015b15610a3057610a2c68ffffffffffffffffff8216876127e8565b9550505b60058201546040805163a58f680360e01b81526004810192909252875161ffff908116602484015260208901511660448301528701516001600160401b031660648201528593506001600160a01b0389169063a58f680390859060840160206040518083038185885af1158015610aa9573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ace9190612a98565b6004830181905593505b505094509492505050565b5f610b2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f610b2e82611651565b905080600201545f03610bfe5780610b4785878361271b565b50610b52858561142d565b60018201805460ff191660ff929092169190911790555f516020612f125f395f51905f52600190810154610b85916127e8565b6002820155600581018390555f516020612f325f395f51905f5280546001810182555f919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610c23565b82816005015414610c2357600581018390556006810180546001600160a01b03191690555b7f56660980158f15674b73c4dcec7f3314e2500517420e16306c40a07dad09f10185858486604051610c589493929190612aaf565b60405180910390a15050505050565b610c8e604080516080810182525f8082526020820181905291810182905290606082015290565b5f610c99848461175b565b90508015610d7c576040516359209b3960e01b8152600481018290525f906001600160a01b038616906359209b39906024015f60405180830381865afa158015610ce5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d0c9190810190612bee565b90506040518060800160405280610d2283611808565b6001600160401b0316815260200182608001516001600160401b0316815260200182604001518152602001610d5f610d5a8888611695565b6118e3565b6003811115610d7057610d70612568565b81525092505050610eb7565b5f610d8684611651565b600601546001600160a01b031690508015610e8857604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290515f9182913091610def916128ea565b5f60405180830381855afa9150503d805f8114610e27576040519150601f19603f3d011682016040523d82523d5f602084013e610e2c565b606091505b509150915081610e695760048101905080806020019051810190610e509190612971565b60405162461bcd60e51b81526004016106a691906129e6565b80806020019051810190610e7d9190612ca4565b945050505050610eb7565b604080516080810182525f808252602082018190529181019190915260608101610d5f610d5a8888611695565b505b92915050565b5f610efc83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061168a92505050565b90505f516020612f325f395f51905f525f610f1683611651565b60028101549091505f819003610f5d5760405162461bcd60e51b815260206004820152600c60248201526b1d5b9adb9bdddb881999595960a21b60448201526064016106a6565b82545f908490610f6f90600190612a85565b81548110610f7f57610f7f612683565b5f918252602090912060088204015460079091166004026101000a900460e01b90508084610fae600185612a85565b81548110610fbe57610fbe612683565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555083805480610ffc57610ffc612d22565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a021916905590558161103282611651565b600201556001600160e01b031985165f9081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040812090611078828261212a565b5060018101805460ff191690555f600282018190556003820181905560048201819055600582018190556006820180546001600160a01b0319169055600782018190556008909101556040517f69afe750a424a45bbe19fdde185259ba3a79671c6e4f40a783d355704a022921906107ad90899089908990612d36565b5f611102858585856115cc565b9050806001600160a01b03163b5f03611209575f61112286868686611931565b90505f5f8251602084015ff59050809250636d7f4b0b60e11b6001600160e01b031916836001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611181573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a59190612d62565b6001600160e01b031916146112065760405162461bcd60e51b815260206004820152602160248201527f756e636f6d706c69616e7420736f6c76657220696d706c656d656e746174696f6044820152603760f91b60648201526084016106a6565b50505b949350505050565b5f516020612f325f395f51905f5280545b8015611429575f82611235600184612a85565b8154811061124557611245612683565b5f9182526020822060088204015460079091166004026101000a900460e01b91505f516020612f125f395f51905f526001600160e01b031983165f90815260029190910160205260409020805461129b90612697565b80601f01602080910402602001604051908101604052809291908181526020018280546112c790612697565b80156113125780601f106112e957610100808354040283529160200191611312565b820191905f5260205f20905b8154815290600101906020018083116112f557829003601f168201915b5050505050905061132d5f516020612f125f395f51905f5290565b6001600160e01b031983165f9081526002919091016020526040812090611354828261212a565b5060018101805460ff191690555f600282018190556003820181905560048201819055600582018190556006820180546001600160a01b03191690556007820181905560089091015583548490806113ae576113ae612d22565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a021916905590556040517f69afe750a424a45bbe19fdde185259ba3a79671c6e4f40a783d355704a0229219061140c9083908590612d7d565b60405180910390a15050808061142190612da7565b915050611222565b5050565b5