UNPKG

gotake-contracts

Version:

TypeChain generated types and ABIs for GoTake contracts

1,099 lines 83 kB
{ "_format": "hh-sol-artifact-1", "contractName": "VideoPayment", "sourceName": "contracts/VideoPayment.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "AlreadyPurchased", "type": "error" }, { "inputs": [], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [], "name": "ContractPaused", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [], "name": "InsufficientPayment", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [], "name": "InvalidContent", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NoValidPermission", "type": "error" }, { "inputs": [], "name": "NotAdmin", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [], "name": "UnsupportedToken", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" } ], "name": "AdminAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "admin", "type": "address" } ], "name": "AdminRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" }, { "indexed": false, "internalType": "address", "name": "paymentToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "BatchPurchased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "ContentConfigUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "paymentToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "viewCount", "type": "uint256" } ], "name": "ContentPurchased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "nftContract", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTPurchased", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "PermissionExpired", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "SupportedTokenAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "SupportedTokenRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "TokenPriceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldTreasury", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newTreasury", "type": "address" } ], "name": "TreasuryUpdated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "remainingViews", "type": "uint256" } ], "name": "ViewConsumed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "addedCount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalRemaining", "type": "uint256" } ], "name": "ViewCountAdded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "addAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "addSupportedToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "users", "type": "address[]" }, { "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" } ], "name": "batchConsumeView", "outputs": [ { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" }, { "internalType": "address", "name": "paymentToken", "type": "address" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "batchPurchase", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256[]", "name": "prices", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "viewCounts", "type": "uint256[]" }, { "internalType": "bool[]", "name": "isActiveArray", "type": "bool[]" } ], "name": "batchSetContentConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256[]", "name": "prices", "type": "uint256[]" } ], "name": "batchSetContentPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "consumeView", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllSupportedTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "getContentPurchaseInfo", "outputs": [ { "components": [ { "internalType": "uint256", "name": "viewCount", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }, { "internalType": "address[]", "name": "supportedTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "tokenPrices", "type": "uint256[]" }, { "internalType": "bool", "name": "isUnlimitedViewing", "type": "bool" } ], "internalType": "struct IVideoPayment.ContentPurchaseInfo", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "getPermissionDetails", "outputs": [ { "components": [ { "internalType": "uint256", "name": "purchaseTime", "type": "uint256" }, { "internalType": "uint256", "name": "remainingViews", "type": "uint256" }, { "internalType": "bool", "name": "isValid", "type": "bool" } ], "internalType": "struct VideoPaymentStorage.ViewPermission", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256[]", "name": "contentIds", "type": "uint256[]" } ], "name": "getUserPermissions", "outputs": [ { "components": [ { "internalType": "uint256", "name": "purchaseTime", "type": "uint256" }, { "internalType": "uint256", "name": "remainingViews", "type": "uint256" }, { "internalType": "bool", "name": "isValid", "type": "bool" } ], "internalType": "struct VideoPaymentStorage.ViewPermission[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "hasViewPermission", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "address[]", "name": "initialAdmins", "type": "address[]" }, { "internalType": "address[]", "name": "supportedTokenAddresses", "type": "address[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" } ], "name": "isContentActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "isSupportedToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "internalType": "address", "name": "paymentToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "purchaseContent", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "internalType": "address", "name": "nftContract", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "purchaseWithNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "removeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "removeSupportedToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "viewCount", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" } ], "name": "setContentConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "contentId", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "setContentPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "newTreasury", "type": "address" } ], "name": "setTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516139a06100fd600039600081816127f20152818161281b015261298701526139a06000f3fe6080604052600436106101e35760003560e01c8063704802751161010257806399ea24fe11610095578063b6f4fe9811610064578063b6f4fe98146105cf578063b8e8f98e146105ef578063caae24b31461061c578063f0f442601461063c57600080fd5b806399ea24fe1461053e578063ad3cb1cc14610551578063b303f53f1461058f578063b6f1d140146105bc57600080fd5b80638d13660e116100d15780638d13660e146104be5780638da5cb5b146104eb5780638fd3ab80146105095780639981007b1461051e57600080fd5b8063704802751461044957806376319190146104695780638456cb5914610489578063867786411461049e57600080fd5b80633f4ba83a1161017a578063529e2b3211610149578063529e2b32146103c457806352d1902d146103f157806354fd4d50146104145780636d69fcaf1461042957600080fd5b80633f4ba83a1461034957806340033b3d1461035e5780634a200fa5146103915780634f1ef286146103b157600080fd5b8063240028e8116101b6578063240028e81461028557806324d7806c146102be578063277148e3146102f75780633b19e84a1461031757600080fd5b80630107e472146101e8578063022360261461021357806305059571146102355780631785f53c14610265575b600080fd5b3480156101f457600080fd5b506101fd61065c565b60405161020a9190612f9f565b60405180910390f35b34801561021f57600080fd5b5061023361022e36600461300e565b6106c1565b005b34801561024157600080fd5b50610255610250366004613064565b6107bb565b604051901515815260200161020a565b34801561027157600080fd5b50610233610280366004613090565b610959565b34801561029157600080fd5b506102556102a0366004613090565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156102ca57600080fd5b506102556102d9366004613090565b6001600160a01b031660009081526001602052604090205460ff1690565b34801561030357600080fd5b506102336103123660046131ea565b6109f4565b34801561032357600080fd5b50600a546001600160a01b03165b6040516001600160a01b03909116815260200161020a565b34801561035557600080fd5b50610233610c7e565b34801561036a57600080fd5b506102556103793660046132b9565b60009081526002602052604090206003015460ff1690565b34801561039d57600080fd5b506102336103ac366004613339565b610cde565b6102336103bf3660046133b2565b611149565b3480156103d057600080fd5b506103e46103df36600461345d565b611168565b60405161020a91906134c4565b3480156103fd57600080fd5b506104066114fe565b60405190815260200161020a565b34801561042057600080fd5b50600954610406565b34801561043557600080fd5b50610233610444366004613090565b61151b565b34801561045557600080fd5b50610233610464366004613090565b61162a565b34801561047557600080fd5b50610233610484366004613090565b6116cb565b34801561049557600080fd5b50610233611879565b3480156104aa57600080fd5b506102336104b93660046134fe565b6118dc565b3480156104ca57600080fd5b506104de6104d9366004613064565b611aa1565b60405161020a9190613536565b3480156104f757600080fd5b506000546001600160a01b0316610331565b34801561051557600080fd5b50610233611b1a565b34801561052a57600080fd5b506102336105393660046134fe565b611ba5565b61023361054c366004613559565b611c96565b34801561055d57600080fd5b50610582604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161020a91906135c5565b34801561059b57600080fd5b506105af6105aa3660046135f8565b61201d565b60405161020a9190613631565b6102336105ca3660046134fe565b612138565b3480156105db57600080fd5b506102336105ea36600461368a565b612414565b3480156105fb57600080fd5b5061060f61060a3660046132b9565b6125ea565b60405161020a9190613735565b34801561062857600080fd5b50610255610637366004613064565b612677565b34801561064857600080fd5b50610233610657366004613090565b612702565b606060006005018054806020026020016040519081016040528092919081815260200182805480156106b757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610699575b5050505050905090565b3360009081526001602052604090205460ff166106f157604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03841660009081526004602052604090205460ff1661072a5760405163350b944160e11b815260040160405180910390fd5b60008581526002602081815260408084206001600160a01b03891680865281845291852088905593899052908290529082018490556003909101805460ff19168315151790556107895760008581526002602052604090206001018390555b60405185907fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426690600090a25050505050565b3360009081526001602052604081205460ff166107eb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03831660009081526003602090815260408083208584529091529020600281015460ff166108335760405163fcd7a1b560e01b815260040160405180910390fd5b6000838152600260208190526040822001549081900361088b5783856001600160a01b031660008051602061390b833981519152600060405161087891815260200190565b60405180910390a3600192505050610953565b81600101546000036108b05760405163fcd7a1b560e01b815260040160405180910390fd5b6001820180549060006108c2836137eb565b919050555083856001600160a01b031660008051602061390b83398151915284600101546040516108f591815260200190565b60405180910390a3816001015460000361094c5760028201805460ff1916905560405184906001600160a01b038716907f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e90600090a35b6001925050505b92915050565b6000546001600160a01b03163314610984576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166109ab5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9190a250565b3360009081526001602052604090205460ff16610a2457604051637bfa4b9f60e01b815260040160405180910390fd5b82518551141580610a3757508151855114155b80610a4457508051855114155b15610a625760405163512509d360e11b815260040160405180910390fd5b6001600160a01b03841660009081526004602052604090205460ff16610a9b5760405163350b944160e11b815260040160405180910390fd5b60005b8551811015610c7657838181518110610ab957610ab9613802565b602002602001015160006002016000888481518110610ada57610ada613802565b602002602001015181526020019081526020016000206000016000876001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610b2c57610b2c613802565b602002602001015160006002016000888481518110610b4d57610b4d613802565b6020026020010151815260200190815260200160002060020181905550818181518110610b7c57610b7c613802565b602002602001015160006002016000888481518110610b9d57610b9d613802565b6020908102919091018101518252810191909152604001600020600301805460ff19169115159190911790556001600160a01b038516610c2857838181518110610be957610be9613802565b602002602001015160006002016000888481518110610c0a57610c0a613802565b60200260200101518152602001908152602001600020600101819055505b858181518110610c3a57610c3a613802565b60200260200101517fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426660405160405180910390a2600101610a9e565b505050505050565b6000546001600160a01b03163314610ca9576040516330cd747160e01b815260040160405180910390fd5b6008805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000610ce86127a6565b805490915060ff600160401b82041615906001600160401b0316600081158015610d0f5750825b90506000826001600160401b03166001148015610d2b5750303b155b905081158015610d39575080155b15610d575760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d8157845460ff60401b1916600160401b1785555b6001600160a01b038816610da85760405163d92e233d60e01b815260040160405180910390fd5b610db06127cf565b610db86127d7565b600080546001600160a01b0319166001600160a01b038a1617815560016009556008805460ff191690555b8751811015610ed15760006001600160a01b0316888281518110610e0957610e09613802565b60200260200101516001600160a01b031614610ec9576001600060010160008a8481518110610e3a57610e3a613802565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550878181518110610e8b57610e8b613802565b60200260200101516001600160a01b03167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a25b600101610de3565b5060005b8651811015610ffc576000878281518110610ef257610ef2613802565b6020026020010151905060006001600160a01b0316816001600160a01b031614610ff3576001600160a01b03811660009081526006602052604090205460ff16610fa9576001600160a01b0381166000818152600660209081526040808320805460ff19166001908117909155600580546007909452918420839055820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b03191690911790555b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79190a25b50600101610ed5565b506000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166110c4577f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805460ff191660019081179091556005805460076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df81905591820181556000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b03191690555b6000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec805460ff19166001179055831561113f57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6111516127e7565b61115a8261288c565b61116482826128ba565b5050565b3360009081526001602052604090205460609060ff1661119b57604051637bfa4b9f60e01b815260040160405180910390fd5b81518351146111bd5760405163512509d360e11b815260040160405180910390fd5b600083516001600160401b038111156111d8576111d86130ad565b604051908082528060200260200182016040528015611201578160200160208202803683370190505b50905060005b84518110156114f657600080600301600087848151811061122a5761122a613802565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061126657611266613802565b6020026020010151815260200190815260200160002090508060020160009054906101000a900460ff166112be5760008383815181106112a8576112a8613802565b91151560209283029190910190910152506114ee565b60008060020160008785815181106112d8576112d8613802565b602002602001015181526020019081526020016000206002015490508060000361138a5785838151811061130e5761130e613802565b602002602001015187848151811061132857611328613802565b60200260200101516001600160a01b031660008051602061390b833981519152600060405161135991815260200190565b60405180910390a3600184848151811061137557611375613802565b911515602092830291909101909101526114eb565b81600101546000036113c35760008484815181106113aa576113aa613802565b60200260200101901515908115158152505050506114ee565b6001820180549060006113d5836137eb565b91905055508583815181106113ec576113ec613802565b602002602001015187848151811061140657611406613802565b60200260200101516001600160a01b031660008051602061390b833981519152846001015460405161143a91815260200190565b60405180910390a381600101546000036114c65760028201805460ff19169055855186908490811061146e5761146e613802565b602002602001015187848151811061148857611488613802565b60200260200101516001600160a01b03167f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e60405160405180910390a35b60018484815181106114da576114da613802565b911515602092830291909101909101525b50505b600101611207565b509392505050565b600061150861297c565b5060008051602061392b83398151915290565b3360009081526001602052604090205460ff1661154b57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff166115de576001600160a01b0381166000818152600660209081526040808320805460ff19166001908117909155600580546007909452918420839055820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b03191690911790555b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79190a250565b6000546001600160a01b03163314611655576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b03811661167c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399190a250565b3360009081526001602052604090205460ff166116fb57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600460209081526040808320805460ff19169055600690915290205460ff1615611842576001600160a01b03811660009081526007602052604081205460055490919061175990600190613818565b90508082146117e357600080600501828154811061177957611779613802565b600091825260209091200154600580546001600160a01b0390921692508291859081106117a8576117a8613802565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526007909152604090208290555b60058054806117f4576117f461382b565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600681526040808320805460ff19169055600790915281205550505b6040516001600160a01b038216907fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a30690600090a250565b6000546001600160a01b031633146118a4576040516330cd747160e01b815260040160405180910390fd5b6008805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6118e46129c5565b60085460ff16156119085760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060030154839060ff1661193c5760405163ab4142cf60e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b03851690636352211e90602401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190613841565b6001600160a01b0316146119ce5760405163fcd7a1b560e01b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd90606401600060405180830381600087803b158015611a1c57600080fd5b505af1158015611a30573d6000803e3d6000fd5b50505050611a3e33856129fd565b604080516001600160a01b038516815260208101849052859133917fd0de3e759b6d8ae4ab8dfd56f0869b691034bf2f14b896155287e5cd61d66a70910160405180910390a350611a9c600160008051602061394b83398151915255565b505050565b611ac7604051806060016040528060008152602001600081526020016000151581525090565b506001600160a01b03821660009081526003602090815260408083208484528252918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915292915050565b6000546001600160a01b03163314611b45576040516330cd747160e01b815260040160405180910390fd5b600a546001600160a01b0316611ba35760008054600a80546001600160a01b0319166001600160a01b0390921691821790556040519091907f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a908290a35b565b3360009081526001602052604090205460ff16611bd557604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff16611c0e5760405163350b944160e11b815260040160405180910390fd5b60008381526002602090815260408083206001600160a01b0386168085529252909120829055611c4d5760008381526002602052604090206001018190555b816001600160a01b0316837f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca983604051611c8991815260200190565b60405180910390a3505050565b611c9e6129c5565b60085460ff1615611cc25760405163ab35696f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff16611cfb5760405163350b944160e11b815260040160405180910390fd5b6000805b8451811015611e1e5760006002016000868381518110611d2157611d21613802565b60209081029190910181015182528101919091526040016000206003015460ff16611d5f5760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b038416611db25760006002016000868381518110611d8657611d86613802565b602002602001015181526020019081526020016000206001015482611dab919061385e565b9150611e16565b60006002016000868381518110611dcb57611dcb613802565b602002602001015181526020019081526020016000206000016000856001600160a01b03166001600160a01b031681526020019081526020016000205482611e13919061385e565b91505b600101611cff565b50808214611e3f5760405163cd1c886760e01b815260040160405180910390fd5b6001600160a01b038316611ee757813414611e6d5760405163cd1c886760e01b815260040160405180910390fd5b600a546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611eba576040519150601f19603f3d011682016040523d82523d6000602084013e611ebf565b606091505b5050905080611ee1576040516312171d8360e31b815260040160405180910390fd5b50611f88565b600a546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018490526000918516906323b872dd906064016020604051808303816000875af1158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190613871565b905080611f86576040516312171d8360e31b815260040160405180910390fd5b505b60005b8451811015611fbf57611fb733868381518110611faa57611faa613802565b60200260200101516129fd565b600101611f8b565b50336001600160a01b03167f2be07a645f06bfa8b189b4f0aba9bf2109d098d03cbede0449641495bba5d53d858585604051611ffd9392919061388e565b60405180910390a250611a9c600160008051602061394b83398151915255565b6060600082516001600160401b0381111561203a5761203a6130ad565b60405190808252806020026020018201604052801561209157816020015b61207e604051806060016040528060008152602001600081526020016000151581525090565b8152602001906001900390816120585790505b50905060005b83518110156114f6576001600160a01b038516600090815260036020526040812085519091908690849081106120cf576120cf613802565b60209081029190910181015182528181019290925260409081016000208151606081018352815481526001820154938101939093526002015460ff16151590820152825183908390811061212557612125613802565b6020908102919091010152600101612097565b6121406129c5565b60085460ff16156121645760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060030154839060ff166121985760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff166121d15760405163350b944160e11b815260040160405180910390fd5b60006001600160a01b0384166122ae57506000848152600260205260409020600101543481146122145760405163cd1c886760e01b815260040160405180910390fd5b3483146122345760405163cd1c886760e01b815260040160405180910390fd5b600a546040516000916001600160a01b03169034908381818185875af1925050503d8060008114612281576040519150601f19603f3d011682016040523d82523d6000602084013e612286565b606091505b50509050806122a8576040516312171d8360e31b815260040160405180910390fd5b50612393565b5060008481526002602090815260408083206001600160a01b03871684529091529020548281146122f25760405163cd1c886760e01b815260040160405180910390fd5b600a546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018590526000918616906323b872dd906064016020604051808303816000875af115801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123719190613871565b905080612391576040516312171d8360e31b815260040160405180910390fd5b505b61239d33866129fd565b6000858152600260208181526040928390209091015482516001600160a01b0388168152918201869052818301529051869133917fb46dc51df9908947f62607b9c4761b3ab411f6da0bb32c44477b87ac8775d8be9181900360600190a35050611a9c600160008051602061394b83398151915255565b3360009081526001602052604090205460ff1661244457604051637bfa4b9f60e01b815260040160405180910390fd5b80518351146124665760405163512509d360e11b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff1661249f5760405163350b944160e11b815260040160405180910390fd5b60005b83518110156125e4578181815181106124bd576124bd613802565b6020026020010151600060020160008684815181106124de576124de613802565b602090810291909101810151825281810192909252604090810160009081206001600160a01b038816808352935220919091556125665781818151811061252757612527613802565b60200260200101516000600201600086848151811061254857612548613802565b60200260200101518152602001908152602001600020600101819055505b826001600160a01b031684828151811061258257612582613802565b60200260200101517f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca98484815181106125bd576125bd613802565b60200260200101516040516125d491815260200190565b60405180910390a36001016124a2565b50505050565b6126206040518060a001604052806000815260200160001515815260200160608152602001606081526020016000151581525090565b6000828152600260205260408120908061263985612b16565b6040805160a081018252600287015480825260039097015460ff16151560208201529081019290925260608201529215608084015250909392505050565b6001600160a01b038216600090815260036020908152604080832084845282528083208151606081018352815481526001820154938101939093526002015460ff1615159082018190526126cf576000915050610953565b600083815260026020819052604082200154908190036126f457600192505050610953565b506020015115159050610953565b6000546001600160a01b0316331461272d576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166127545760405163d92e233d60e01b815260040160405180910390fd5b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a90600090a35050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610953565b611ba3612d80565b6127df612d80565b611ba3612da5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061286e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661286260008051602061392b833981519152546001600160a01b031690565b6001600160a01b031614155b15611ba35760405163703e46dd60e11b815260040160405180910390fd5b6000546001600160a01b031633146128b7576040516330cd747160e01b815260040160405180910390fd5b50565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612914575060408051601f3d908101601f19168201909252612911918101906138bc565b60015b61294157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b60008051602061392b833981519152811461297257604051632a87526960e21b815260048101829052602401612938565b611a9c8383612dad565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba35760405163703e46dd60e11b815260040160405180910390fd5b60008051602061394b8339815191528054600119016129f757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821660009081526003602090815260408083208484528252808320600292839052908320909101549091819003612a6b57600282015460ff1615612a495750505050565b428255600060018084019190915560028301805460ff191690911790556125e4565b600282015460ff1615612ae25780826001016000828254612a8c919061385e565b9091555050600182015460408051838152602081019290925284916001600160a01b038716917fb76abe3c068fccae7ac0f9377f48f7261dcf952179a37060c5de877a493e67b7910160405180910390a36125e4565b428255600180830182905560028301805460ff1916909117905550505050565b600160008051602061394b83398151915255565b6005546060908190600090815b81811015612bde576000806005018281548110612b4257612b42613802565b60009182526020808320909101546001600160a01b0316808352600490915260409091205490915060ff1615612bd55760006001600160a01b038216612b9a5750600087815260026020526040902060010154612bbf565b5060008781526002602090815260408083206001600160a01b03851684529091529020545b8015612bd35784612bcf816138d5565b9550505b505b50600101612b23565b50816001600160401b03811115612bf757612bf76130ad565b604051908082528060200260200182016040528015612c20578160200160208202803683370190505b509350816001600160401b03811115612c3b57612c3b6130ad565b604051908082528060200260200182016040528015612c64578160200160208202803683370190505b5092506000805b82811015612d77576000806005018281548110612c8a57612c8a613802565b60009182526020808320909101546001600160a01b0316808352600490915260409091205490915060ff1615612d6e5760006001600160a01b038216612ce25750600088815260026020526040902060010154612d07565b5060008881526002602090815260408083206001600160a01b03851684529091529020545b8015612d6c5781888581518110612d2057612d20613802565b60200260200101906001600160a01b031690816001600160a01b03168152505080878581518110612d5357612d53613802565b602090810291909101015283612d68816138d5565b9450505b505b50600101612c6b565b50505050915091565b612d88612e03565b611ba357604051631afcd79f60e31b815260040160405180910390fd5b612b02612d80565b612db682612e1d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612dfb57611a9c8282612e82565b611164612ef8565b6000612e0d6127a6565b54600160401b900460ff16919050565b806001600160a01b03163b600003612e5357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401612938565b60008051602061392b83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e9f91906138ee565b600060405180830381855af49150503d8060008114612eda576040519150601f19603f3d011682016040523d82523d6000602084013e612edf565b606091505b5091509150612eef858383612f17565b95945050505050565b3415611ba35760405163b398979f60e01b815260040160405180910390fd5b606082612f2c57612f2782612f76565b612f6f565b8151158015612f4357506001600160a01b0384163b155b15612f6c57604051639996b31560e01b81526001600160a01b0385166004820152602401612938565b50805b9392505050565b805115612f865780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b602080825282518282018190526000918401906040840190835b81811015612fe05783516001600160a01b0316835260209384019390920191600101612fb9565b509095945050505050565b6001600160a01b03811681146128b757600080fd5b80151581146128b757600080fd5b600080600080600060a0868803121561302657600080fd5b85359450602086013561303881612feb565b93506040860135925060608601359150608086013561305681613000565b809150509295509295909350565b6000806040838503121561307757600080fd5b823561308281612feb565b946020939093013593505050565b6000602082840312156130a257600080fd5b8135612f6f81612feb565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156130eb576130eb6130ad565b604052919050565b60006001600160401b0382111561310c5761310c6130ad565b5060051b60200190565b600082601f83011261312757600080fd5b813561313a613135826130f3565b6130c3565b8082825260208201915060208360051b86010192508583111561315c57600080fd5b602085015b83811015613179578035835260209283019201613161565b5095945050505050565b600082601f83011261319457600080fd5b81356131a2613135826130f3565b8082825260208201915060208360051b8601019250858311156131c457600080fd5b602085015b838110156131795780356131dc81613000565b8352602092830192016131c9565b600080600080600060a0868803121561320257600080fd5b85356001600160401b0381111561321857600080fd5b61322488828901613116565b955050602086013561323581612feb565b935060408601356001600160401b0381111561325057600080fd5b61325c88828901613116565b93505060608601356001600160401b0381111561327857600080fd5b61328488828901613116565b92505060808601356001600160401b038111156132a057600080fd5b6132ac88828901613183565b9150509295509295909350565b6000602082840312156132cb57600080fd5b5035919050565b600082601f8301126132e357600080fd5b81356132f1613135826130f3565b808282526020820