[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "DefaultRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ExtensionApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "ExtensionRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "permissions", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "MintPermissionsUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "RoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "approveAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" } ], "name": "blacklistExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAdmins", "outputs": [ { "internalType": "address[]", "name": "admins", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExtensions", "outputs": [ { "internalType": "address[]", "name": "extensions", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeBps", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeRecipients", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFees", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bool", "name": "baseURIIdentical", "type": "bool" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setApproveTransferExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "bool", "name": "identical", "type": "bool" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address", "name": "permissions", "type": "address" } ], "name": "setMintPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyaltiesExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefixExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenExtension", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" } ], "name": "unregisterExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080604052600060cc5534801561001557600080fd5b5060016065556151e48061002a6000396000f3fe608060405234801561001057600080fd5b50600436106102ed5760003560e01c80636d73e66911610193578063ad2d0ddd116100e4578063d5a06d4c11610092578063d5a06d4c14610686578063e00aab4b146106cd578063e92a89f6146106e0578063e985e9c5146106f3578063f0cdc49914610706578063f2fde38b14610719578063fe2e1f581461072c57600080fd5b8063ad2d0ddd1461062d578063b0fe87c914610640578063b88d4fde14610653578063b9c4d9fb14610666578063bb3bafd614610686578063c87b56dd146106a7578063ce8aee9d146106ba57600080fd5b806383b7db631161014157806383b7db63146105c95780638da5cb5b146105d157806395d89b41146105d957806399e0dd7c146105e1578063a22cb465146105f4578063aafb2d4414610607578063ac0c8cfa1461061a57600080fd5b80636d73e6691461054f57806370a0823114610562578063715018a61461057557806372ff03d31461057d5780637884af44146105905780637aa15f16146105a357806382dcc0c8146105b657600080fd5b80632d3456701161024d5780633f0f37f6116101fb5780633f0f37f6146104ca57806342842e0e146104dd57806342966c68146104f05780634cd88b761461050357806361e5bc6b146105165780636352211e1461052957806366d1e9d01461053c57600080fd5b80632d3456701461044357806330176e13146104565780633071a0f91461046957806331ae450b1461047c578063332dd1ae1461049157806338e52e78146104a45780633e6134b8146104b757600080fd5b8063162094c4116102aa578063162094c4146103a257806320e4afe2146103b5578063239be317146103c857806323b872dd146103db57806324d7806c146103ee5780632928ca58146104015780632a55205a1461042257600080fd5b806301ffc9a7146102f257806302e7afb71461031a57806306fdde031461032f578063081812fc14610344578063095ea7b31461036f5780630ebd4c7f14610382575b600080fd5b610305610300366004614050565b61073f565b60405190151581526020015b60405180910390f35b61032d610328366004614082565b61076e565b005b6103376107c3565b60405161031191906140ef565b610357610352366004614102565b610855565b6040516001600160a01b039091168152602001610311565b61032d61037d36600461411b565b6108dd565b610395610390366004614102565b6109ed565b6040516103119190614182565b61032d6103b03660046141d6565b610a73565b61032d6103c3366004614265565b610abe565b6103576103d6366004614102565b610b37565b61032d6103e93660046142de565b610b67565b6103056103fc366004614082565b610b98565b61041461040f366004614082565b610bc7565b604051908152602001610311565b61043561043036600461431f565b610c3b565b604051610311929190614341565b61032d610451366004614082565b610c79565b61032d61046436600461435a565b610cfd565b61032d61047736600461439b565b610d7c565b610484610df8565b60405161031191906143d6565b61032d61049f366004614423565b610ea6565b6103956104b236600461448e565b610ef3565b61032d6104c536600461435a565b611030565b61032d6104d83660046144e3565b611063565b61032d6104eb3660046142de565b6110d8565b61032d6104fe366004614102565b6110f3565b61032d610511366004614615565b611199565b61032d610524366004614678565b611218565b610357610537366004614102565b6112c3565b61032d61054a36600461435a565b61133a565b61032d61055d366004614082565b61136b565b610414610570366004614082565b6113ea565b61032d611471565b61041461058b366004614082565b6114ac565b61041461059e36600461439b565b61152e565b6103956105b136600461448e565b6115e4565b61032d6105c4366004614737565b61172d565b61048461175f565b610357611809565b610337611818565b61032d6105ef36600461435a565b611827565b61032d61060236600461478d565b611871565b61032d610615366004614678565b61187c565b61032d6106283660046147c6565b611940565b61039561063b3660046147e3565b611a64565b61032d61064e366004614818565b611b80565b61032d610661366004614857565b611bcd565b610679610674366004614102565b611bff565b604051610311919061490f565b610699610694366004614102565b611c8e565b604051610311929190614922565b6103376106b5366004614102565b611d72565b61032d6106c8366004614082565b611da2565b6103956106db3660046147e3565b611deb565b61032d6106ee3660046141d6565b611ee2565b610305610701366004614950565b611f14565b61032d610714366004614950565b611f42565b61032d610727366004614082565b611f8c565b61041461073a36600461439b565b612029565b600061074a826120b9565b806107595750610759826120de565b8061076857506107688261211e565b92915050565b33610777611809565b6001600160a01b031614806107925750610792606633612143565b6107b75760405162461bcd60e51b81526004016107ae9061497e565b60405180910390fd5b6107c081612168565b50565b6060609a80546107d2906149c2565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe906149c2565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b60006108608261225f565b6108c15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ae565b506000908152609e60205260409020546001600160a01b031690565b60006108e8826112c3565b9050806001600160a01b0316836001600160a01b0316036109555760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ae565b336001600160a01b038216148061097157506109718133611f14565b6109de5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b60648201526084016107ae565b6109e8838361227c565b505050565b60606109f88261225f565b610a145760405162461bcd60e51b81526004016107ae906149f6565b610a1d826122ea565b805480602002602001604051908101604052809291908181526020018280548015610a6757602002820191906000526020600020905b815481526020019060010190808311610a53575b50505050509050919050565b33610a7c611809565b6001600160a01b03161480610a975750610a97606633612143565b610ab35760405162461bcd60e51b81526004016107ae9061497e565b6109e8838383612376565b33610ac7611809565b6001600160a01b03161480610ae25750610ae2606633612143565b610afe5760405162461bcd60e51b81526004016107ae9061497e565b610b078561225f565b610b235760405162461bcd60e51b81526004016107ae906149f6565b610b3085858585856123c5565b5050505050565b6000610b428261225f565b610b5e5760405162461bcd60e51b81526004016107ae906149f6565b610768826124c4565b610b713382612551565b610b8d5760405162461bcd60e51b81526004016107ae90614a21565b6109e883838361261b565b6000816001600160a01b0316610bac611809565b6001600160a01b031614806107685750610768606683612143565b6000600260655403610beb5760405162461bcd60e51b81526004016107ae90614a72565b6002606555610bfb60cd33612143565b610c175760405162461bcd60e51b81526004016107ae90614aa9565b610c3082604051806020016040528060008152506127b4565b600160655592915050565b600080610c478461225f565b610c635760405162461bcd60e51b81526004016107ae906149f6565b610c6d8484612827565b915091505b9250929050565b33610c82611809565b6001600160a01b031614610ca85760405162461bcd60e51b81526004016107ae90614ae0565b610cb3606682612143565b156107c05760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a3610cf9606682612912565b5050565b33610d06611809565b6001600160a01b03161480610d215750610d21606633612143565b610d3d5760405162461bcd60e51b81526004016107ae9061497e565b610cf982828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061292792505050565b33610d85611809565b6001600160a01b03161480610da05750610da0606633612143565b610dbc5760405162461bcd60e51b81526004016107ae9061497e565b82610dc860cf82612143565b15610de55760405162461bcd60e51b81526004016107ae90614b15565b610df28484846000612940565b50505050565b6060610e046066612a7a565b6001600160401b03811115610e1b57610e1b61454a565b604051908082528060200260200182016040528015610e44578160200160208202803683370190505b50905060005b610e546066612a7a565b811015610ea257610e66606682612a84565b828281518110610e7857610e78614b44565b6001600160a01b039092166020928302919091019091015280610e9a81614b70565b915050610e4a565b5090565b33610eaf611809565b6001600160a01b03161480610eca5750610eca606633612143565b610ee65760405162461bcd60e51b81526004016107ae9061497e565b610df23085858585612a90565b6060600260655403610f175760405162461bcd60e51b81526004016107ae90614a72565b6002606555610f2760cd33612143565b610f435760405162461bcd60e51b81526004016107ae90614aa9565b816001600160401b03811115610f5b57610f5b61454a565b604051908082528060200260200182016040528015610f84578160200160208202803683370190505b50905060005b8281101561102357610ff485858584818110610fa857610fa8614b44565b9050602002810190610fba9190614b89565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127b492505050565b82828151811061100657611006614b44565b60209081029190910101528061101b81614b70565b915050610f8a565b5060016065559392505050565b61103b60cd33612143565b6110575760405162461bcd60e51b81526004016107ae90614aa9565b610cf982826000612bf6565b3361106c611809565b6001600160a01b031614806110875750611087606633612143565b6110a35760405162461bcd60e51b81526004016107ae9061497e565b836110af60cf82612143565b156110cc5760405162461bcd60e51b81526004016107ae90614b15565b610b3085858585612940565b6109e883838360405180602001604052806000815250611bcd565b6002606554036111155760405162461bcd60e51b81526004016107ae90614a72565b60026065556111243382612551565b6111705760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526064016107ae565b600061117b826112c3565b905061118682612c33565b6111908183612cc8565b50506001606555565b600054610100900460ff16806111b2575060005460ff16155b6111ce5760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff161580156111f0576000805461ffff19166101011790555b6111fa8383612ddc565b611202612e4d565b80156109e8576000805461ff0019169055505050565b61122360cd33612143565b61123f5760405162461bcd60e51b81526004016107ae90614aa9565b8251811461125f5760405162461bcd60e51b81526004016107ae90614c1d565b60005b8351811015610df2576112b184828151811061128057611280614b44565b602002602001015184848481811061129a5761129a614b44565b90506020028101906112ac9190614b89565b612ec8565b806112bb81614b70565b915050611262565b6000818152609c60205260408120546001600160a01b0316806107685760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107ae565b61134560cd33612143565b6113615760405162461bcd60e51b81526004016107ae90614aa9565b610cf98282612efe565b33611374611809565b6001600160a01b03161461139a5760405162461bcd60e51b81526004016107ae90614ae0565b6113a5606682612143565b6107c05760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a3610cf9606682612f18565b60006001600160a01b0382166114555760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107ae565b506001600160a01b03166000908152609d602052604090205490565b3361147a611809565b6001600160a01b0316146114a05760405162461bcd60e51b81526004016107ae90614ae0565b6114aa6000612f2d565b565b60006002606554036114d05760405162461bcd60e51b81526004016107ae90614a72565b6002606555336114de611809565b6001600160a01b031614806114f957506114f9606633612143565b6115155760405162461bcd60e51b81526004016107ae9061497e565b610c308260405180602001604052806000815250612f7f565b60006002606554036115525760405162461bcd60e51b81526004016107ae90614a72565b600260655533611560611809565b6001600160a01b0316148061157b575061157b606633612143565b6115975760405162461bcd60e51b81526004016107ae9061497e565b6115d78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f7f92505050565b6001606555949350505050565b60606002606554036116085760405162461bcd60e51b81526004016107ae90614a72565b600260655533611616611809565b6001600160a01b031614806116315750611631606633612143565b61164d5760405162461bcd60e51b81526004016107ae9061497e565b816001600160401b038111156116655761166561454a565b60405190808252806020026020018201604052801561168e578160200160208202803683370190505b50905060005b82811015611023576116fe858585848181106116b2576116b2614b44565b90506020028101906116c49190614b89565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f7f92505050565b82828151811061171057611710614b44565b60209081029190910101528061172581614b70565b915050611694565b61173860cd33612143565b6117545760405162461bcd60e51b81526004016107ae90614aa9565b6109e8838383612bf6565b606061176b60cd612a7a565b6001600160401b038111156117825761178261454a565b6040519080825280602002602001820160405280156117ab578160200160208202803683370190505b50905060005b6117bb60cd612a7a565b811015610ea2576117cd60cd82612a84565b8282815181106117df576117df614b44565b6001600160a01b03909216602092830291909101909101528061180181614b70565b9150506117b1565b6033546001600160a01b031690565b6060609b80546107d2906149c2565b33611830611809565b6001600160a01b0316148061184b575061184b606633612143565b6118675760405162461bcd60e51b81526004016107ae9061497e565b610cf98282612fc2565b610cf9338383612fdc565b33611885611809565b6001600160a01b031614806118a057506118a0606633612143565b6118bc5760405162461bcd60e51b81526004016107ae9061497e565b825181146118dc5760405162461bcd60e51b81526004016107ae90614c1d565b60005b8351811015610df25761192e8482815181106118fd576118fd614b44565b602002602001015184848481811061191757611917614b44565b90506020028101906119299190614b89565b612376565b8061193881614b70565b9150506118df565b61194b60cd33612143565b6119675760405162461bcd60e51b81526004016107ae90614aa9565b801580611980575061198033634ce6d51160e11b6130a6565b6119f25760405162461bcd60e51b815260206004820152603f60248201527f457874656e73696f6e206d75737420696d706c656d656e74204945524337323160448201527f43726561746f72457874656e73696f6e417070726f76655472616e736665720060648201526084016107ae565b33600090815260d2602052604090205460ff161515811515146107c05733600081815260d26020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a250565b6060600260655403611a885760405162461bcd60e51b81526004016107ae90614a72565b600260655533611a96611809565b6001600160a01b03161480611ab15750611ab1606633612143565b611acd5760405162461bcd60e51b81526004016107ae9061497e565b8161ffff166001600160401b03811115611ae957611ae961454a565b604051908082528060200260200182016040528015611b12578160200160208202803683370190505b50905060005b8261ffff168161ffff161015611b7457611b418460405180602001604052806000815250612f7f565b828261ffff1681518110611b5757611b57614b44565b602090810291909101015280611b6c81614c44565b915050611b18565b50600160655592915050565b33611b89611809565b6001600160a01b03161480611ba45750611ba4606633612143565b611bc05760405162461bcd60e51b81526004016107ae9061497e565b610b308585858585612a90565b611bd73383612551565b611bf35760405162461bcd60e51b81526004016107ae90614a21565b610df2848484846130c2565b6060611c0a8261225f565b611c265760405162461bcd60e51b81526004016107ae906149f6565b611c2f826130f5565b805480602002602001604051908101604052809291908181526020018280548015610a6757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c655750505050509050919050565b606080611c9a8361225f565b611cb65760405162461bcd60e51b81526004016107ae906149f6565b611cbf83613181565b815460408051602080840282018101909252828152918491830182828015611d1057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cf2575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015611d6257602002820191906000526020600020905b815481526020019060010190808311611d4e575b5050505050905091509150915091565b6060611d7d8261225f565b611d995760405162461bcd60e51b81526004016107ae906149f6565b6107688261319f565b33611dab611809565b6001600160a01b03161480611dc65750611dc6606633612143565b611de25760405162461bcd60e51b81526004016107ae9061497e565b6107c081613419565b6060600260655403611e0f5760405162461bcd60e51b81526004016107ae90614a72565b6002606555611e1f60cd33612143565b611e3b5760405162461bcd60e51b81526004016107ae90614aa9565b8161ffff166001600160401b03811115611e5757611e5761454a565b604051908082528060200260200182016040528015611e80578160200160208202803683370190505b50905060005b8261ffff168161ffff161015611b7457611eaf84604051806020016040528060008152506127b4565b828261ffff1681518110611ec557611ec5614b44565b602090810291909101015280611eda81614c44565b915050611e86565b611eed60cd33612143565b611f095760405162461bcd60e51b81526004016107ae90614aa9565b6109e8838383612ec8565b6001600160a01b039182166000908152609f6020908152604080832093909416825291909152205460ff1690565b33611f4b611809565b6001600160a01b03161480611f665750611f66606633612143565b611f825760405162461bcd60e51b81526004016107ae9061497e565b610cf9828261346a565b33611f95611809565b6001600160a01b031614611fbb5760405162461bcd60e51b81526004016107ae90614ae0565b6001600160a01b0381166120205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ae565b6107c081612f2d565b600060026065540361204d5760405162461bcd60e51b81526004016107ae90614a72565b600260655561205d60cd33612143565b6120795760405162461bcd60e51b81526004016107ae90614aa9565b6115d78484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127b492505050565b60006001600160e01b03198216639088c20760e01b148061076857506107688261359f565b60006001600160e01b031982166380ac58cd60e01b148061210f57506001600160e01b03198216635b5e139f60e01b145b80610768575061076882613635565b60006001600160e01b03198216632a9f3abf60e11b1480610768575061076882613635565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b306001600160a01b038216036121bc5760405162461bcd60e51b815260206004820152601960248201527821b0b73737ba10313630b1b5b634b9ba103cb7bab939b2b63360391b60448201526064016107ae565b6121c760cd82612143565b1561220f5760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a361220d60cd82612912565b505b61221a60cf82612143565b6107c05760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a3610cf960cf82612f18565b6000908152609c60205260409020546001600160a01b0316151590565b6000818152609e6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122b1826112c3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081815260db6020526040812054156123105750600090815260db6020526040902090565b600082815260d360209081526040808320546001600160a01b0316835260d9909152902054156123625750600090815260d360209081526040808320546001600160a01b0316835260d9909152902090565b505030600090815260d96020526040902090565b600083815260d360205260409020546001600160a01b031630146123ac5760405162461bcd60e51b81526004016107ae90614c65565b600083815260d760205260409020610df2828483614ce7565b8281146123e45760405162461bcd60e51b81526004016107ae90614c1d565b6000805b828110156124285783838281811061240257612402614b44565b90506020020135826124149190614da0565b91508061242081614b70565b9150506123e8565b50612710811061244a5760405162461bcd60e51b81526004016107ae90614db3565b600086815260da60205260409020612463908686613f55565b50600086815260db6020526040902061247d908484613fb4565b50857fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee868686866040516124b49493929190614de4565b60405180910390a2505050505050565b600081815260d360205260409020546001600160a01b03163081036125245760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b60448201526064016107ae565b61252f60cf82612143565b1561254c5760405162461bcd60e51b81526004016107ae90614b15565b919050565b600061255c8261225f565b6125bd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107ae565b60006125c8836112c3565b9050806001600160a01b0316846001600160a01b031614806126035750836001600160a01b03166125f884610855565b6001600160a01b0316145b8061261357506126138185611f14565b949350505050565b826001600160a01b031661262e826112c3565b6001600160a01b0316146126965760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107ae565b6001600160a01b0382166126f85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107ae565b61270383838361364b565b61270e60008261227c565b6001600160a01b0383166000908152609d60205260408120805460019290612737908490614e62565b90915550506001600160a01b0382166000908152609d60205260408120805460019290612765908490614da0565b90915550506000818152609c602052604080822080546001600160a01b0319166001600160a01b03868116918217909255915184939187169160008051602061518f83398151915291a4505050565b60cc8054600091826127c583614b70565b919050555060cc5490506127d98382613656565b600081815260d36020526040902080546001600160a01b0319163317905561280183826136ea565b81511561282257600081815260d7602052604090206128208382614e75565b505b610768565b6000806000612835856130f5565b80549091506001101561288a5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c74792072656365697665720000000060448201526064016107ae565b80546000036128a0573060009250925050610c72565b806000815481106128b3576128b3614b44565b6000918252602090912001546001600160a01b0316612710856128d5886122ea565b6000815481106128e7576128e7614b44565b90600052602060002001546128fc9190614f2e565b6129069190614f5b565b92509250509250929050565b6000612161836001600160a01b038416613704565b30600090815260d460205260409020610cf98282614e75565b306001600160a01b0385160361298b5760405162461bcd60e51b815260206004820152601060248201526f10dc99585d1bdc8e88125b9d985b1a5960821b60448201526064016107ae565b6001600160a01b0384163b6129f05760405162461bcd60e51b815260206004820152602560248201527f43726561746f723a20457874656e73696f6e206d757374206265206120636f6e6044820152641d1c9858dd60da1b60648201526084016107ae565b6129fb60cd85612143565b610df2576001600160a01b038416600090815260d460205260409020612a22838583614ce7565b506001600160a01b038416600081815260d56020526040808220805460ff1916851515179055513392917fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a91a3610b3060cd85612f18565b6000610768825490565b600061216183836137f7565b828114612aaf5760405162461bcd60e51b81526004016107ae90614c1d565b6000805b82811015612af357838382818110612acd57612acd614b44565b9050602002013582612adf9190614da0565b915080612aeb81614b70565b915050612ab3565b506127108110612b155760405162461bcd60e51b81526004016107ae90614db3565b6001600160a01b038616600090815260d860205260409020612b38908686613f55565b506001600160a01b038616600090815260d960205260409020612b5c908484613fb4565b50306001600160a01b03871603612baf577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b85858585604051612ba29493929190614de4565b60405180910390a1612bee565b856001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f868686866040516124b49493929190614de4565b505050505050565b33600090815260d460205260409020612c10838583614ce7565b5033600090815260d560205260409020805460ff19169115159190911790555050565b6000612c3e826112c3565b9050612c4c8160008461364b565b612c5760008361227c565b6001600160a01b0381166000908152609d60205260408120805460019290612c80908490614e62565b90915550506000828152609c602052604080822080546001600160a01b0319169055518391906001600160a01b0384169060008051602061518f833981519152908390a45050565b600081815260d360205260409020546001600160a01b03163014612d8657600081815260d36020526040902054612d0f906001600160a01b03166311686e4b60e21b6130a6565b15612d8657600081815260d36020526040908190205490516311686e4b60e21b81526001600160a01b03909116906345a1b92c90612d539085908590600401614341565b600060405180830381600087803b158015612d6d57600080fd5b505af1158015612d81573d6000803e3d6000fd5b505050505b600081815260d7602052604090208054612d9f906149c2565b159050612dbd57600081815260d760205260408120612dbd91613fef565b600090815260d36020526040902080546001600160a01b031916905550565b600054610100900460ff1680612df5575060005460ff16155b612e115760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff16158015612e33576000805461ffff19166101011790555b612e3b613821565b612e43613821565b611202838361388b565b600054610100900460ff1680612e66575060005460ff16155b612e825760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff16158015612ea4576000805461ffff19166101011790555b612eac613821565b612eb4613912565b80156107c0576000805461ff001916905550565b600083815260d360205260409020546001600160a01b031633146123ac5760405162461bcd60e51b81526004016107ae90614c65565b33600090815260d6602052604090206109e8828483614ce7565b6000612161836001600160a01b038416613972565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cc805460009182612f9083614b70565b909155505060cc54600081815260d36020526040902080546001600160a01b03191630179055905061280183826136ea565b30600090815260d6602052604090206109e8828483614ce7565b816001600160a01b0316836001600160a01b0316036130395760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016107ae565b6001600160a01b038381166000818152609f6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006130b1836139c1565b8015612161575061216183836139f4565b6130cd84848461261b565b6130d984848484613add565b610df25760405162461bcd60e51b81526004016107ae90614f6f565b600081815260da60205260408120541561311b5750600090815260da6020526040902090565b600082815260d360209081526040808320546001600160a01b0316835260d89091529020541561316d5750600090815260d360209081526040808320546001600160a01b0316835260d8909152902090565b505030600090815260d86020526040902090565b60008061318d836130f5565b613196846122ea565b91509150915091565b600081815260d360205260409020546060906001600160a01b03166131c560cf82612143565b156131e25760405162461bcd60e51b81526004016107ae90614b15565b600083815260d76020526040902080546131fb906149c2565b159050613315576001600160a01b038116600090815260d6602052604090208054613225906149c2565b159050613276576001600160a01b038116600090815260d66020908152604080832086845260d7835292819020905161325f939201615034565b604051602081830303815290604052915050919050565b600083815260d760205260409020805461328f906149c2565b80601f01602080910402602001604051908101604052809291908181526020018280546132bb906149c2565b80156133085780601f106132dd57610100808354040283529160200191613308565b820191906000526020600020905b8154815290600101906020018083116132eb57829003601f168201915b5050505050915050919050565b6133268163e9dc637560e01b6130a6565b1561339e5760405163e9dc637560e01b81526001600160a01b0382169063e9dc6375906133599030908790600401614341565b600060405180830381865afa158015613376573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121619190810190615049565b6001600160a01b038116600090815260d5602052604090205460ff166133f0576001600160a01b038116600090815260d4602052604090206133df84613bde565b60405160200161325f9291906150b6565b6001600160a01b038116600090815260d460205260409020805461328f906149c2565b50919050565b61342460cd82612143565b156107c05760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3610cf960cd82612912565b61347560cd83612143565b6134c15760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e000060448201526064016107ae565b6001600160a01b03811615806134e357506134e381631e05385b60e31b6130a6565b6135215760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107ae565b6001600160a01b03828116600090815260d16020526040902054811690821614610cf9576001600160a01b03828116600081815260d1602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166328f10a2160e01b14806135c457506135c4826120de565b806135df57506001600160e01b03198216635d9dd7eb60e11b145b806135fa57506001600160e01b03198216632dde656160e21b145b8061361557506001600160e01b031982166335681b5360e21b145b8061076857506001600160e01b0319821663152a902d60e11b1492915050565b6001600160e01b0319166301ffc9a760e01b1490565b6109e8838383613cde565b33600090815260d160205260409020546001600160a01b031615610cf95733600081815260d1602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401600060405180830381600087803b1580156136d657600080fd5b505af1158015612bee573d6000803e3d6000fd5b610cf9828260405180602001604052806000815250613df5565b600081815260018301602052604081205480156137ed576000613728600183614e62565b855490915060009061373c90600190614e62565b90508181146137a157600086600001828154811061375c5761375c614b44565b906000526020600020015490508087600001848154811061377f5761377f614b44565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806137b2576137b26150db565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610768565b6000915050610768565b600082600001828154811061380e5761380e614b44565b9060005260206000200154905092915050565b600054610100900460ff168061383a575060005460ff16155b6138565760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff16158015612eb4576000805461ffff191661010117905580156107c0576000805461ff001916905550565b600054610100900460ff16806138a4575060005460ff16155b6138c05760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff161580156138e2576000805461ffff19166101011790555b609a6138ee8482614e75565b50609b6138fb8382614e75565b5080156109e8576000805461ff0019169055505050565b600054610100900460ff168061392b575060005460ff16155b6139475760405162461bcd60e51b81526004016107ae90614bcf565b600054610100900460ff16158015613969576000805461ffff19166101011790555b612eb433612f2d565b60008181526001830160205260408120546139b957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610768565b506000610768565b60006139d4826301ffc9a760e01b6139f4565b801561076857506139ed826001600160e01b03196139f4565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613a5b9086906150f1565b6000604051808303818686fa925050503d8060008114613a97576040519150601f19603f3d011682016040523d82523d6000602084013e613a9c565b606091505b5091509150602081511015613ab75760009350505050610768565b818015613ad3575080806020019051810190613ad3919061510d565b9695505050505050565b60006001600160a01b0384163b15613bd357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613b2190339089908890889060040161512a565b6020604051808303816000875af1925050508015613b5c575060408051601f3d908101601f19168201909252613b599181019061515d565b60015b613bb9573d808015613b8a576040519150601f19603f3d011682016040523d82523d6000602084013e613b8f565b606091505b508051600003613bb15760405162461bcd60e51b81526004016107ae90614f6f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612613565b506001949350505050565b606081600003613c055750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613c2f5780613c1981614b70565b9150613c289050600a83614f5b565b9150613c09565b6000816001600160401b03811115613c4957613c4961454a565b6040519080825280601f01601f191660200182016040528015613c73576020820181803683370190505b5090505b841561261357613c88600183614e62565b9150613c95600a8661517a565b613ca0906030614da0565b60f81b818381518110613cb557613cb5614b44565b60200101906001600160f81b031916908160001a905350613cd7600a86614f5b565b9450613c77565b600081815260d360209081526040808320546001600160a01b0316835260d290915290205460ff16156109e857600081815260d3602052604090819020549051638258080560e01b81526001600160a01b038581166004830152848116602483015260448201849052909116906382580805906064016020604051808303816000875af1158015613d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d97919061510d565b6109e85760405162461bcd60e51b815260206004820152602960248201527f45524337323143726561746f723a20457874656e73696f6e20617070726f76616044820152686c206661696c75726560b81b60648201526084016107ae565b613dff8383613e28565b613e0c6000848484613add565b6109e85760405162461bcd60e51b81526004016107ae90614f6f565b6001600160a01b038216613e7e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107ae565b613e878161225f565b15613ed45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107ae565b613ee06000838361364b565b6001600160a01b0382166000908152609d60205260408120805460019290613f09908490614da0565b90915550506000818152609c602052604080822080546001600160a01b0319166001600160a01b038616908117909155905183929060008051602061518f833981519152908290a45050565b828054828255906000526020600020908101928215613fa8579160200282015b82811115613fa85781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613f75565b50610ea2929150614025565b828054828255906000526020600020908101928215613fa8579160200282015b82811115613fa8578235825591602001919060010190613fd4565b508054613ffb906149c2565b6000825580601f1061400b575050565b601f0160209004906000526020600020908101906107c091905b5b80821115610ea25760008155600101614026565b6001600160e01b0319811681146107c057600080fd5b60006020828403121561406257600080fd5b81356121618161403a565b6001600160a01b03811681146107c057600080fd5b60006020828403121561409457600080fd5b81356121618161406d565b60005b838110156140ba5781810151838201526020016140a2565b50506000910152565b600081518084526140db81602086016020860161409f565b601f01601f19169290920160200192915050565b60208152600061216160208301846140c3565b60006020828403121561411457600080fd5b5035919050565b6000806040838503121561412e57600080fd5b82356141398161406d565b946020939093013593505050565b600081518084526020808501945080840160005b838110156141775781518752958201959082019060010161415b565b509495945050505050565b6020815260006121616020830184614147565b60008083601f8401126141a757600080fd5b5081356001600160401b038111156141be57600080fd5b602083019150836020828501011115610c7257600080fd5b6000806000604084860312156141eb57600080fd5b8335925060208401356001600160401b0381111561420857600080fd5b61421486828701614195565b9497909650939450505050565b60008083601f84011261423357600080fd5b5081356001600160401b0381111561424a57600080fd5b6020830191508360208260051b8501011115610c7257600080fd5b60008060008060006060868803121561427d57600080fd5b8535945060208601356001600160401b038082111561429b57600080fd5b6142a789838a01614221565b909650945060408801359150808211156142c057600080fd5b506142cd88828901614221565b969995985093965092949392505050565b6000806000606084860312156142f357600080fd5b83356142fe8161406d565b9250602084013561430e8161406d565b929592945050506040919091013590565b6000806040838503121561433257600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561436d57600080fd5b82356001600160401b0381111561438357600080fd5b61438f85828601614195565b90969095509350505050565b6000806000604084860312156143b057600080fd5b83356143bb8161406d565b925060208401356001600160401b0381111561420857600080fd5b6020808252825182820181905260009190848201906040850190845b818110156144175783516001600160a01b0316835292840192918401916001016143f2565b50909695505050505050565b6000806000806040858703121561443957600080fd5b84356001600160401b038082111561445057600080fd5b61445c88838901614221565b9096509450602087013591508082111561447557600080fd5b5061448287828801614221565b95989497509550505050565b6000806000604084860312156144a357600080fd5b83356144ae8161406d565b925060208401356001600160401b038111156144c957600080fd5b61421486828701614221565b80151581146107c057600080fd5b600080600080606085870312156144f957600080fd5b84356145048161406d565b935060208501356001600160401b0381111561451f57600080fd5b61452b87828801614195565b909450925050604085013561453f816144d5565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156145885761458861454a565b604052919050565b60006001600160401b038211156145a9576145a961454a565b50601f01601f191660200190565b60006145ca6145c584614590565b614560565b90508281528383830111156145de57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261460657600080fd5b612161838335602085016145b7565b6000806040838503121561462857600080fd5b82356001600160401b038082111561463f57600080fd5b61464b868387016145f5565b9350602085013591508082111561466157600080fd5b5061466e858286016145f5565b9150509250929050565b60008060006040848603121561468d57600080fd5b83356001600160401b03808211156146a457600080fd5b818601915086601f8301126146b857600080fd5b81356020828211156146cc576146cc61454a565b8160051b6146db828201614560565b928352848101820192828101908b8511156146f557600080fd5b958301955b84871015614713578635825295830195908301906146fa565b985050508701359250508082111561472a57600080fd5b5061421486828701614221565b60008060006040848603121561474c57600080fd5b83356001600160401b0381111561476257600080fd5b61476e86828701614195565b9094509250506020840135614782816144d5565b809150509250925092565b600080604083850312156147a057600080fd5b82356147ab8161406d565b915060208301356147bb816144d5565b809150509250929050565b6000602082840312156147d857600080fd5b8135612161816144d5565b600080604083850312156147f657600080fd5b82356148018161406d565b9150602083013561ffff811681146147bb57600080fd5b60008060008060006060868803121561483057600080fd5b853561483b8161406d565b945060208601356001600160401b038082111561429b57600080fd5b6000806000806080858703121561486d57600080fd5b84356148788161406d565b935060208501356148888161406d565b92506040850135915060608501356001600160401b038111156148aa57600080fd5b8501601f810187136148bb57600080fd5b6148ca878235602084016145b7565b91505092959194509250565b600081518084526020808501945080840160005b838110156141775781516001600160a01b0316875295820195908201906001016148ea565b60208152600061216160208301846148d6565b60408152600061493560408301856148d6565b82810360208401526149478185614147565b95945050505050565b6000806040838503121561496357600080fd5b823561496e8161406d565b915060208301356147bb8161406d565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c908216806149d657607f821691505b60208210810361341357634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601c908201527f4d757374206265207265676973746572656420657874656e73696f6e00000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614b8257614b82614b5a565b5060010190565b6000808335601e19843603018112614ba057600080fd5b8301803591506001600160401b03821115614bba57600080fd5b602001915036819003821315610c7257600080fd5b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b600061ffff808316818103614c5b57614c5b614b5a565b6001019392505050565b6020808252600d908201526c24b73b30b634b2103a37b5b2b760991b604082015260600190565b601f8211156109e857600081815260208120601f850160051c81016020861015614cb35750805b601f850160051c820191505b81811015612bee57828155600101614cbf565b600019600383901b1c191660019190911b1790565b6001600160401b03831115614cfe57614cfe61454a565b614d1283614d0c83546149c2565b83614c8c565b6000601f841160018114614d405760008515614d2e5750838201355b614d388682614cd2565b845550610b30565b600083815260209020601f19861690835b82811015614d715786850135825560209485019460019092019101614d51565b5086821015614d8e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8082018082111561076857610768614b5a565b602080825260179082015276496e76616c696420746f74616c20726f79616c7469657360481b604082015260600190565b6040808252810184905260008560608301825b87811015614e27578235614e0a8161406d565b6001600160a01b0316825260209283019290910190600101614df7565b5083810360208501528481526001600160fb1b03851115614e4757600080fd5b8460051b915081866020830137016020019695505050505050565b8181038181111561076857610768614b5a565b81516001600160401b03811115614e8e57614e8e61454a565b614ea281614e9c84546149c2565b84614c8c565b602080601f831160018114614ed15760008415614ebf5750858301515b614ec98582614cd2565b865550612bee565b600085815260208120601f198616915b82811015614f0057888601518255948401946001909101908401614ee1565b5085821015614f1e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761076857610768614b5a565b634e487b7160e01b600052601260045260246000fd5b600082614f6a57614f6a614f45565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008154614fce816149c2565b60018281168015614fe65760018114614ffb5761502a565b60ff198416875282151583028701945061502a565b8560005260208060002060005b858110156150215781548a820152908401908201615008565b50505082870194505b5050505092915050565b60006126136150438386614fc1565b84614fc1565b60006020828403121561505b57600080fd5b81516001600160401b0381111561507157600080fd5b8201601f8101841361508257600080fd5b80516150906145c582614590565b8181528560208385010111156150a557600080fd5b61494782602083016020860161409f565b60006150c28285614fc1565b83516150d281836020880161409f565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b6000825161510381846020870161409f565b9190910192915050565b60006020828403121561511f57600080fd5b8151612161816144d5565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ad3908301846140c3565b60006020828403121561516f57600080fd5b81516121618161403a565b60008261518957615189614f45565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202dcd9da9c8c3698699fc28436b680d77fd318e03bffd76ddd368c523e3030eba64736f6c63430008110033