[ { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidBurn", "type": "error" }, { "inputs": [], "name": "InvalidInput", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "InvalidOperator", "type": "error" }, { "inputs": [], "name": "InvalidOwner", "type": "error" }, { "inputs": [], "name": "InvalidSize", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MetadataUpdateBlocked", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "NotTokenOwnerOrApproved", "type": "error" }, { "inputs": [], "name": "ReceiverNonImplementer", "type": "error" }, { "inputs": [], "name": "ReceiverRejectedTokens", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TransferFromZeroAddress", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "size", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "editionTokenManager", "type": "address" } ], "name": "EditionCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "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": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" } ], "name": "createEdition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVectorAndPublicFixedPriceVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionSupply", "outputs": [ { "internalType": "uint128", "name": "currentSupply", "type": "uint128" }, { "internalType": "uint128", "name": "maxSupply", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "editionURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "getEditionDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getEditionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "editionIds", "type": "uint256[]" } ], "name": "getEditionsDetailsAndUri", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails[]", "name": "", "type": "tuple[]" }, { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "highlightContractStandardHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservabilityV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "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": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setEditionURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "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": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenManagerByTokenId", "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": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
608060405234801561001057600080fd5b50615d2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106102665760003560e01c8062fdd58e1461026b57806301ffc9a714610291578063063a7502146102b45780630690a78d146102be57806306fdde03146102d15780630e89341c146102e657806317360d34146102f957806318160ddd1461031a57806318bae6c8146103225780631b30808d146103425780632a55205a146103555780632a5ac764146103765780632eb2c2d614610389578063336211bf1461039c578063377e5e27146103af57806346134b50146103c257806347230dcb146103d55780634e1273f4146103e85780634f58122a1461040857806350cf5a311461041b578063572b6c051461042e5780636502abea14610441578063662fff38146104545780636b15fd4514610467578063715018a61461047a57806375794a3c14610482578063834a20df1461048c5780638da5cb5b1461049f57806391d0049e146104a757806392172704146104ba57806395d89b41146104cd578063a22cb465146104d5578063a305f5b2146104e8578063b5c5801e146104fb578063b859c93514610503578063bfb2995c14610516578063c2f5070114610529578063c87b56dd14610531578063cbab0bd314610544578063d1f578941461056a578063ddf990f91461057d578063e8a3d4851461059d578063e985e9c5146105a5578063eb872150146105b8578063ee295d62146105cb578063eeab0589146105de578063ef60ceaf146105f1578063f242432a14610604578063f2fde38b14610617578063f5298aca1461062a578063f775baac1461063d578063f83e6ed814610650578063f97b57ec146106a5575b600080fd5b61027e61027936600461449d565b6106ba565b6040519081526020015b60405180910390f35b6102a461029f3660046144df565b610706565b6040519015158152602001610288565b6102bc610711565b005b6102bc6102cc36600461453d565b6107d1565b6102d9610a0c565b60405161028891906145e0565b6102d96102f43660046145f3565b610a9b565b61030c610307366004614650565b610aa6565b604051610288929190614725565b61027e610bf9565b60cb54610335906001600160a01b031681565b60405161028891906147a8565b61027e6103503660046147bc565b610c10565b6103686103633660046147f4565b610ca4565b604051610288929190614816565b6102bc61038436600461482f565b610cbc565b6102bc610397366004614a21565b610db9565b61027e6103aa3660046145f3565b610e0f565b6102d96103bd3660046145f3565b610e35565b6103356103d03660046145f3565b610ef6565b6102bc6103e3366004614ace565b610f01565b6103fb6103f6366004614b5a565b610fae565b6040516102889190614bee565b6102bc610416366004614650565b61108d565b6102bc610429366004614ace565b6112af565b6102a461043c366004614ace565b611452565b61033561044f3660046145f3565b611466565b61027e610462366004614c01565b611495565b61027e610475366004614cc2565b61150e565b6102bc6117b8565b61027e6101375481565b6102bc61049a366004614ace565b6117ca565b610335611848565b61027e6104b5366004614d86565b611857565b61027e6104c8366004614e01565b611a3a565b6102d9611ac0565b6102bc6104e3366004614e4b565b611ace565b6102bc6104f6366004614ace565b611ae0565b6102bc611c44565b61027e610511366004614e84565b611d98565b6102bc610524366004614ea9565b611e12565b6102bc612138565b6102d961053f3660046145f3565b612249565b7f3a9654d81ac4dafbb9a2fb1cd3efa3de2783ae40b06b17a456bf5922ed02a3a761027e565b6102bc610578366004614f42565b61226b565b61059061058b3660046145f3565b6123f2565b6040516102889190614f87565b6102d9612423565b6102a46105b3366004614f9a565b612431565b60d054610335906001600160a01b031681565b60cf54610335906001600160a01b031681565b6102bc6105ec366004614fc8565b612460565b6102bc6105ff366004615033565b61272a565b6102bc610612366004615045565b612938565b6102bc610625366004614ace565b612987565b6102bc6106383660046150ad565b6129fd565b61027e61064b366004614d86565b612c3c565b61068561065e3660046145f3565b610138602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610288565b6106ad612d79565b60405161028891906150e2565b60006001600160a01b0383166106da576106da6349e27cff60e01b612d85565b506000818152610103602090815260408083206001600160a01b03861684529091529020545b92915050565b600061070082612d8e565b610719612dde565b610721612e4d565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107ad57600080fd5b505af11580156107c1573d6000803e3d6000fd5b505050506107cf6001609755565b565b60006107dc84611466565b905060006107e8612eae565b90506001600160a01b038216610832576000610802611848565b9050806001600160a01b0316826001600160a01b03161461082c5761082c6282b42960e81b612d85565b506108c0565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e9061086990309085908a908a908a90600690600401615158565b6020604051808303816000875af1158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac91906151cd565b6108c0576108c0631b04458960e01b612d85565b6000858152610139602052604090206108da908585614357565b50604080516001808252818301909252600091602080830190803683370190505090508581600081518110610911576109116151ea565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161093357905050905085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250855186945090925015159050610994576109946151ea565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906109d19085908590600401615200565b600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b5050505050505050505050565b6101358054610a1a90615225565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4690615225565b8015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050505081565b606061070082612249565b606080826000816001600160401b03811115610ac457610ac46148c8565b604051908082528060200260200182016040528015610afd57816020015b610aea6143d7565b815260200190600190039081610ae25790505b5090506000826001600160401b03811115610b1a57610b1a6148c8565b604051908082528060200260200182016040528015610b4d57816020015b6060815260200190600190039081610b385790505b50905060005b83811015610bea57610b7c888883818110610b7057610b706151ea565b90506020020135610e35565b828281518110610b8e57610b8e6151ea565b6020026020010181905250610bba888883818110610bae57610bae6151ea565b90506020020135612eb8565b838281518110610bcc57610bcc6151ea565b60200260200101819052508080610be290615270565b915050610b53565b509093509150505b9250929050565b6000600161013754610c0b919061528b565b905090565b6000610c25610c1d612eae565b60c990612f14565b610c3957610c39633e34a41b60e21b612d85565b610c41612e4d565b60cf54600160a01b900460ff1660011415610c6657610c666345a9661760e01b612d85565b610c7284610137541190565b610c8657610c8663eb49290360e01b612d85565b610c91848484612f29565b9050610c9d6001609755565b9392505050565b600080610cb18484612ffd565b915091509250929050565b610cc4612dde565b610d3786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061309892505050565b610d446101348383614357565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610d7f908990899089908990899089906004016152a2565b600060405180830381600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b50505050505050505050565b610dc1612eae565b6001600160a01b0316856001600160a01b03161480610de75750610de7856105b3612eae565b610dfb57610dfb634cd9539b60e11b612d85565b610e0885858585856130c1565b5050505050565b6000610e1d82610137541190565b610e3157610e3163677510db60e11b612d85565b5090565b6060610e4382610137541190565b610e5757610e5763eb49290360e01b612d85565b6000828152610139602052604090208054610e7190615225565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90615225565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b50505050509050919050565b600061070082611466565b610f09612dde565b610f1460c982613263565b610f2857610f2863ea6eb5c360e01b612d85565b6040516001906001600160a01b03831690600080516020615cd583398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610f809084906001906004016152eb565b600060405180830381600087803b158015610f9a57600080fd5b505af1158015610e08573d6000803e3d6000fd5b60608151835114610fc957610fc963b4fa3fb360e01b612d85565b600083516001600160401b03811115610fe457610fe46148c8565b60405190808252806020026020018201604052801561100d578160200160208202803683370190505b50905060005b845181101561108557611058858281518110611031576110316151ea565b602002602001015185838151811061104b5761104b6151ea565b60200260200101516106ba565b82828151811061106a5761106a6151ea565b602090810291909101015261107e81615270565b9050611013565b509392505050565b611095612e4d565b600061109f612eae565b90508160005b8181101561120157600060cc60008787858181106110c5576110c56151ea565b60209081029290920135835250810191909152604001600020546001600160a01b03169050806110ff576110ff635f98be1560e11b612d85565b806001600160a01b031663ce2003a585888886818110611121576111216151ea565b905060200201356040518363ffffffff1660e01b8152600401611145929190614816565b6020604051808303816000875af1158015611164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118891906151cd565b61119c5761119c63251c48e160e11b612d85565b600060cc60008888868181106111b4576111b46151ea565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806111f990615270565b9150506110a5565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161123392919061533c565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d937349061126d908790879060040161533c565b600060405180830381600087803b15801561128757600080fd5b505af115801561129b573d6000803e3d6000fd5b5050505050506112ab6001609755565b5050565b6112b7612e4d565b6112c081613278565b6112d4576112d4631a7387bd60e11b612d85565b60006112de612eae565b60cf549091506001600160a01b031680611326576112fa611848565b6001600160a01b0316826001600160a01b031614611321576113216282b42960e81b612d85565b6113ac565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139891906151cd565b6113ac576113ac63e10a050560e01b612d85565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615cf583398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906114119086906004016147a8565b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b50505050505061144f6001609755565b50565b6065546001600160a01b0391821691161490565b60cb54600082815260cc60205260409020546001600160a01b039182169116801561148f578091505b50919050565b60006114a2610c1d612eae565b6114b6576114b6633e34a41b60e21b612d85565b6114be612e4d565b60cf54600160a01b900460ff16600114156114e3576114e36345a9661760e01b612d85565b6114ef84610137541190565b6115035761150363eb49290360e01b612d85565b610c91848484613294565b6000611518612dde565b611520612e4d565b600061152d8a8a8a6133b6565b87519091506001600160a01b03161561158257600081815260ce6020908152604090912088518154928a015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b84156116e25760008060008060008060008060008e8e8101906115a5919061536e565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b81526004016116a69190615438565b600060405180830381600087803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050505050505050505050505b82156117a05760008080806116f98789018961553b565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be1449161176991889086906004016155bb565b600060405180830381600087803b15801561178357600080fd5b505af1158015611797573d6000803e3d6000fd5b50505050505050505b90506117ac6001609755565b98975050505050505050565b6117c0612dde565b6107cf60006134b8565b6117d2612dde565b6117dd60c98261350a565b6117f1576117f163ea6eb5c360e01b612d85565b6040516000906001600160a01b03831690600080516020615cd5833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610f809084906000906004016152eb565b6033546001600160a01b031690565b6000611861612dde565b611869612e4d565b60006118768888886133b6565b85519091506001600160a01b0316156118cb57600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611a2457600080808080808080806118e78c8e018e61536e565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b81526004016119e89190615438565b600060405180830381600087803b158015611a0257600080fd5b505af1158015611a16573d6000803e3d6000fd5b505050505050505050505050505b9050611a306001609755565b9695505050505050565b6000611a47610c1d612eae565b611a5b57611a5b633e34a41b60e21b612d85565b611a63612e4d565b60cf54600160a01b900460ff1660011415611a8857611a886345a9661760e01b612d85565b611a9483610137541190565b611aa857611aa863eb49290360e01b612d85565b611ab483836001613294565b90506107006001609755565b6101368054610a1a90615225565b6112ab611ad9612eae565b838361351f565b611ae8612e4d565b611af1816135b7565b611b0557611b05631a7387bd60e11b612d85565b6000611b0f612eae565b60cb549091506001600160a01b031680611b5757611b2b611848565b6001600160a01b0316826001600160a01b031614611b5257611b526282b42960e81b612d85565b611bdf565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611b88908590600090889060040161563a565b6020604051808303816000875af1158015611ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcb91906151cd565b611bdf57611bdf63e10a050560e01b612d85565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615cb583398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906114119086906004016147a8565b611c4c612e4d565b6000611c56612eae565b60cb549091506001600160a01b031680611c7a57611c7a635f98be1560e11b612d85565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611ca9908590600090600401614816565b6020604051808303816000875af1158015611cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cec91906151cd565b611d0057611d0063251c48e160e11b612d85565b60cb80546001600160a01b0319169055604051600090600080516020615cb5833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611d5a906000906004016147a8565b600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b5050505050506107cf6001609755565b6000611da5610c1d612eae565b611db957611db9633e34a41b60e21b612d85565b611dc1612e4d565b60cf54600160a01b900460ff1660011415611de657611de66345a9661760e01b612d85565b611df283610137541190565b611e0657611e0663eb49290360e01b612d85565b611ab483836001612f29565b611e1a612e4d565b6000611e24612eae565b90506000611e30611848565b60cf549091506001600160a01b03168581611f3157826001600160a01b0316846001600160a01b031614611e6d57611e6d6282b42960e81b612d85565b60005b81811015611f2b57611eb3878783818110611e8d57611e8d6151ea565b9050604002016020016020810190611ea5919061565d565b61271061ffff909116111590565b611ec757611ec7633daf741f60e21b612d85565b868682818110611ed957611ed96151ea565b90506040020160ce60008b8b85818110611ef557611ef56151ea565b9050602002013581526020019081526020016000208181611f16919061567a565b50819050611f2381615270565b915050611e70565b5061207f565b60005b8181101561207d57611f51878783818110611e8d57611e8d6151ea565b611f6557611f65633daf741f60e21b612d85565b826001600160a01b031663ad6e40c78a8a84818110611f8657611f866151ea565b90506020020135898985818110611f9f57611f9f6151ea565b905060400201886040518463ffffffff1660e01b8152600401611fc493929190615707565b602060405180830381865afa158015611fe1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200591906151cd565b6120195761201963270e710760e21b612d85565b86868281811061202b5761202b6151ea565b90506040020160ce60008b8b85818110612047576120476151ea565b9050602002013581526020019081526020016000208181612068919061567a565b5081905061207581615270565b915050611f34565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516120b49493929190615734565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde906120f2908b908b908b908b90600401615734565b600060405180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050505050506121326001609755565b50505050565b612140612e4d565b600061214a612eae565b60cf549091506001600160a01b03168061216e5761216e635f98be1560e11b612d85565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa9061219a9085906004016147a8565b602060405180830381865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db91906151cd565b6121ef576121ef63251c48e160e11b612d85565b60cf80546001600160a01b0319169055604051600090600080516020615cf5833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611d5a906000906004016147a8565b606061225782610137541190565b610e5757610e5763677510db60e11b612d85565b600054610100900460ff161580801561228b5750600054600160ff909116105b806122ac575061229a306135d3565b1580156122ac575060005460ff166001145b6123145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015612337576000805461ff0019166101001790555b6000806000806000806000888060200190518101906123569190615855565b96509650965096509650965096506000604051806040016040528060006001600160a01b03168152602001600061ffff16815250905061239f8b8260008b8b8b8b8b8b8b6135e2565b505050505050505080156123ed576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6123fa6143d7565b61240682610137541190565b61241a5761241a63eb49290360e01b612d85565b61070082612eb8565b6101348054610a1a90615225565b6001600160a01b0391821660009081526101046020908152604080832093909416825291909152205460ff1690565b612468612e4d565b6000612472612eae565b9050600061247e611848565b90508460005b81811015612677576124bb8686838181106124a1576124a16151ea565b90506020020160208101906124b69190614ace565b6135b7565b6124cf576124cf631a7387bd60e11b612d85565b60006124f28989848181106124e6576124e66151ea565b90506020020135611466565b90506001600160a01b03811661252f57836001600160a01b0316856001600160a01b03161461252a5761252a6282b42960e81b612d85565b6125ed565b806001600160a01b03166385e335b6868b8b86818110612551576125516151ea565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612596969591909302013592506001600160a01b03169060040161563a565b6020604051808303816000875af11580156125b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d991906151cd565b6125ed576125ed63e10a050560e01b612d85565b8686838181106125ff576125ff6151ea565b90506020020160208101906126149190614ace565b60cc60008b8b8681811061262a5761262a6151ea565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050808061266f90615270565b915050612484565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e878787876040516126ad9493929190615933565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf906126eb908a908a908a908a90600401615933565b600060405180830381600087803b15801561270557600080fd5b505af1158015612719573d6000803e3d6000fd5b505050505050506121326001609755565b612732612e4d565b612742604082016020830161565d565b61271061ffff8216111561276057612760633daf741f60e21b612d85565b600061276a612eae565b60cf549091506001600160a01b0316806127b257612786611848565b6001600160a01b0316826001600160a01b0316146127ad576127ad6282b42960e81b612d85565b612835565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906127e0908790869060040161598b565b602060405180830381865afa1580156127fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282191906151cd565b6128355761283563270e710760e21b612d85565b8360cd612842828261567a565b506128559050604085016020860161565d565b61ffff166128666020860186614ace565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06128b96020870187614ace565b6128c9604088016020890161565d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b5050505050505061144f6001609755565b612940612eae565b6001600160a01b0316856001600160a01b031614806129665750612966856105b3612eae565b61297a5761297a634cd9539b60e11b612d85565b610e0885858585856136f4565b61298f612dde565b6001600160a01b0381166129f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161230b565b61144f816134b8565b612a05612e4d565b6000612a1083611466565b90506000612a1c612eae565b600085815261013860205260409020549091506001600160801b031680841115612a5057612a5063eeddf6ab60e01b612d85565b6001600160a01b03831615801590612ad757506040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790612a969063129dae8b60e01b906004016159b1565b602060405180830381865afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad791906151cd565b15612b4b5760405163129dae8b60e01b81526001600160a01b03838116600483015287811660248301526044820187905284169063129dae8b90606401600060405180830381600087803b158015612b2e57600080fd5b505af1158015612b42573d6000803e3d6000fd5b50505050612b84565b612b558683612431565b80612b715750856001600160a01b0316826001600160a01b0316145b612b8457612b846282b42960e81b612d85565b612b8f86868661381c565b612b9984826159c6565b6000868152610138602052604080822080546001600160801b0319166001600160801b03949094169390931790925560d054915163205b13af60e01b81526001600160a01b039092169163205b13af91612bfd9186918b918b908b906004016159ee565b600060405180830381600087803b158015612c1757600080fd5b505af1158015612c2b573d6000803e3d6000fd5b505050505050506123ed6001609755565b6000612c46612dde565b612c4e612e4d565b6000612c5b8888886133b6565b85519091506001600160a01b031615612cb057600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611a24576000808080612cc78789018961553b565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491612d3791889086906004016155bb565b600060405180830381600087803b158015612d5157600080fd5b505af1158015612d65573d6000803e3d6000fd5b50505050505050509050611a306001609755565b6060610c0b60c9613919565b61144f81613926565b60006001600160e01b03198216636cdb3d1360e11b1480612dbf57506001600160e01b031982166303a24d0760e21b145b8061070057506301ffc9a760e01b6001600160e01b0319831614610700565b612de6612eae565b6001600160a01b0316612df7611848565b6001600160a01b0316146107cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161230b565b60026097541415612ea05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161230b565b6002609755565b6001609755565b6000610c0b613930565b612ec06143d7565b506040805160a08101825260006080820181815282528381526101386020818152848320546001600160801b03600160801b8204811683870152938790529190521691810191909152606081019190915290565b6000610c9d836001600160a01b038416613955565b6000838152610138602090815260408083208151808301909252546001600160801b03808216808452600160801b9092041692820192909252908290612f70908590615a22565b9050600082602001516001600160801b0316118015612f9b575081602001516001600160801b031681115b15612fb057612fb06352df9fe560e01b612d85565b612fcb8587866040518060200160405280600081525061396d565b6000958652610138602052604090952080546001600160801b0319166001600160801b03871617905550929392505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff1692820192909252829161306857506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b80516020820151909350612710906130849061ffff1686615a3a565b61308e9190615a59565b9150509250929050565b81516130ac906101359060208501906143ff565b5080516123ed906101369060208401906143ff565b81518351146130da576130da63b4fa3fb360e01b612d85565b6001600160a01b0384166130f8576130f8633a954ecd60e21b612d85565b6000613102612eae565b905060005b84518110156131e7576000858281518110613124576131246151ea565b602002602001015190506000858381518110613142576131426151ea565b6020908102919091018101516000848152610103835260408082206001600160a01b038e16835290935291909120549091508181101561318c5761318c631e9acf1760e31b612d85565b6000838152610103602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906131cc908490615a22565b92505081905550505050806131e090615270565b9050613107565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613237929190615a7b565b60405180910390a461324d818787878787613a44565b61325b818787878787613ceb565b505050505050565b6000610c9d836001600160a01b038416613df6565b60006107006001600160a01b03831663440444c560e11b613e40565b81516000848152610138602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152909190826132dc8584615a3a565b82516132f191906001600160801b0316615a22565b9050600082602001516001600160801b031611801561331c575081602001516001600160801b031681115b15613331576133316352df9fe560e01b612d85565b60005b8381101561338257613370878281518110613351576133516151ea565b602002602001015189886040518060200160405280600081525061396d565b8061337a81615270565b915050613334565b506000968752610138602052604090962080546001600160801b0319166001600160801b0388161790555093949350505050565b610137546000906133c8816001615a22565b6101375560408051808201825260008082526001600160801b0387811660208085019182528684526101388152858420945191518316600160801b0291909216179092556101398252919091208651613423928801906143ff565b506001600160a01b038316156134785761343c836135b7565b61345057613450631a7387bd60e11b612d85565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610c9d836001600160a01b038416613e5c565b816001600160a01b0316836001600160a01b031614156135495761354963ccea9e6f60e01b612d85565b6001600160a01b0383811660008181526101046020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006107006001600160a01b038316633b209e2f60e11b613e40565b6001600160a01b03163b151590565b6135ed8a8a8a613f4f565b6135f78686613098565b6136008461402b565b825160005b8181101561364d5761363a858281518110613622576136226151ea565b602002602001015160c961326390919063ffffffff16565b508061364581615270565b915050613605565b506001610137558751613668906101349060208b01906143ff565b506040516316550d7160e11b81526001600160a01b03831690632caa1ae2906136959030906004016147a8565b600060405180830381600087803b1580156136af57600080fd5b505af11580156136c3573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b6001600160a01b03841661371257613712633a954ecd60e21b612d85565b600061371c612eae565b9050600061372985614074565b9050600061373685614074565b6000878152610103602090815260408083206001600160a01b038d1684529091529020549091508581101561377557613775631e9acf1760e31b612d85565b6000878152610103602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906137b5908490615a22565b909155505060408051888152602081018890526001600160a01b03808b16928c82169291881691600080516020615c95833981519152910160405180910390a4613803848a8a86868a613a44565b613811848a8a8a8a8a6140bf565b505050505050505050565b6001600160a01b03831661383a5761383a630b07e54560e11b612d85565b6000613844612eae565b9050600061385184614074565b9050600061385e84614074565b6000868152610103602090815260408083206001600160a01b038b1684529091529020549091508481101561389d5761389d631e9acf1760e31b612d85565b6000868152610103602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a9052909290881691600080516020615c95833981519152910160405180910390a461391084886000868660405180602001604052806000815250613a44565b50505050505050565b60606000610c9d83614179565b8060005260046000fd5b600061393b33611452565b1561394d575060131936013560601c90565b503390565b90565b60009081526001919091016020526040902054151590565b6001600160a01b03841661398b5761398b633a954ecd60e21b612d85565b6000613995612eae565b905060006139a285614074565b905060006139af85614074565b6000878152610103602090815260408083206001600160a01b038c1684529091528120805492935087929091906139e7908490615a22565b909155505060408051878152602081018790526001600160a01b03808a169260009291871691600080516020615c95833981519152910160405180910390a4613a3583600089858589613a44565b613910836000898989896140bf565b8251869060005b81811015613bb8576000613a77878381518110613a6a57613a6a6151ea565b6020026020010151610ef6565b90506001600160a01b03811615801590613b0057506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613abf90637af46b4f60e11b906004016159b1565b602060405180830381865afa158015613adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0091906151cd565b15613ba557806001600160a01b0316637f1eaf85858b8b8b8781518110613b2957613b296151ea565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015613b8c57600080fd5b505af1158015613ba0573d6000803e3d6000fd5b505050505b5080613bb081615270565b915050613a4b565b508060011415613c765760d060009054906101000a90046001600160a01b03166001600160a01b031663205b13af83898989600081518110613bfc57613bfc6151ea565b602002602001015189600081518110613c1757613c176151ea565b60200260200101516040518663ffffffff1660e01b8152600401613c3f9594939291906159ee565b600060405180830381600087803b158015613c5957600080fd5b505af1158015613c6d573d6000803e3d6000fd5b50505050613ce1565b60d05460405163bcee357960e01b81526001600160a01b039091169063bcee357990613cae9085908b908b908b908b90600401615aa0565b600060405180830381600087803b158015613cc857600080fd5b505af1158015613cdc573d6000803e3d6000fd5b505050505b5050505050505050565b613cfd846001600160a01b03166135d3565b1561325b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613d369089908990889088908890600401615ae6565b6020604051808303816000875af1925050508015613d71575060408051601f3d908101601f19168201909252613d6e91810190615b38565b60015b613dce57613d7d615b55565b806308c379a01415613db75750613d92615b70565b80613d9d5750613db9565b8060405162461bcd60e51b815260040161230b91906145e0565b505b613dc9637e1e096960e11b612d85565b61325b565b6001600160e01b0319811663bc197c8160e01b146139105761391063c6017f5f60e01b612d85565b6000613e028383613955565b613e3857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610700565b506000610700565b6000613e4b836141d4565b8015610c9d5750610c9d8383614207565b60008181526001830160205260408120548015613f45576000613e8060018361528b565b8554909150600090613e949060019061528b565b9050818114613ef9576000866000018281548110613eb457613eb46151ea565b9060005260206000200154905080876000018481548110613ed757613ed76151ea565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f0a57613f0a615bf9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610700565b6000915050610700565b600054610100900460ff16613f765760405162461bcd60e51b815260040161230b90615c0f565b602082015161271061ffff82161115613f9957613f99633daf741f60e21b612d85565b613fa161429b565b613fa96142ca565b613fb2846134b8565b82516001600160a01b031615613ff957825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156121325760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166140525760405162461bcd60e51b815260040161230b90615c0f565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106140ae576140ae6151ea565b602090810291909101015292915050565b6140d1846001600160a01b03166135d3565b1561325b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061410a9089908990889088908890600401615c5a565b6020604051808303816000875af1925050508015614145575060408051601f3d908101601f1916820190925261414291810190615b38565b60015b61415157613d7d615b55565b6001600160e01b0319811663f23a6e6160e01b146139105761391063c6017f5f60e01b612d85565b606081600001805480602002602001604051908101604052809291908181526020018280548015610eea57602002820191906000526020600020905b8154815260200190600101908083116141b55750505050509050919050565b60006141e7826301ffc9a760e01b614207565b80156107005750614200826001600160e01b0319614207565b1592915050565b6000806301ffc9a760e01b8360405160240161422391906159b1565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015614284575060208210155b80156142905750600081115b979650505050505050565b600054610100900460ff166142c25760405162461bcd60e51b815260040161230b90615c0f565b6107cf6142f9565b600054610100900460ff166142f15760405162461bcd60e51b815260040161230b90615c0f565b6107cf614330565b600054610100900460ff166143205760405162461bcd60e51b815260040161230b90615c0f565b6107cf61432b612eae565b6134b8565b600054610100900460ff16612ea75760405162461bcd60e51b815260040161230b90615c0f565b82805461436390615225565b90600052602060002090601f01602090048101928261438557600085556143cb565b82601f1061439e5782800160ff198235161785556143cb565b828001600101855582156143cb579182015b828111156143cb5782358255916020019190600101906143b0565b50610e31929150614473565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b82805461440b90615225565b90600052602060002090601f01602090048101928261442d57600085556143cb565b82601f1061444657805160ff19168380011785556143cb565b828001600101855582156143cb579182015b828111156143cb578251825591602001919060010190614458565b5b80821115610e315760008155600101614474565b6001600160a01b038116811461144f57600080fd5b600080604083850312156144b057600080fd5b82356144bb81614488565b946020939093013593505050565b6001600160e01b03198116811461144f57600080fd5b6000602082840312156144f157600080fd5b8135610c9d816144c9565b60008083601f84011261450e57600080fd5b5081356001600160401b0381111561452557600080fd5b602083019150836020828501011115610bf257600080fd5b60008060006040848603121561455257600080fd5b8335925060208401356001600160401b0381111561456f57600080fd5b61457b868287016144fc565b9497909650939450505050565b60005b838110156145a357818101518382015260200161458b565b838111156121325750506000910152565b600081518084526145cc816020860160208601614588565b601f01601f19169290920160200192915050565b602081526000610c9d60208301846145b4565b60006020828403121561460557600080fd5b5035919050565b60008083601f84011261461e57600080fd5b5081356001600160401b0381111561463557600080fd5b6020830191508360208260051b8501011115610bf257600080fd5b6000806020838503121561466357600080fd5b82356001600160401b0381111561467957600080fd5b6146858582860161460c565b90969095509350505050565b60008151608084526146a660808501826145b4565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156147185782840389526147068483516145b4565b988501989350908401906001016146ee565b5091979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561477c57605f1988870301855261476a868351614691565b9550938201939082019060010161474e565b50508584038187015250505061479281856146d0565b95945050505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6000806000606084860312156147d157600080fd5b8335925060208401356147e381614488565b929592945050506040919091013590565b6000806040838503121561480757600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b6000806000806000806060878903121561484857600080fd5b86356001600160401b038082111561485f57600080fd5b61486b8a838b016144fc565b9098509650602089013591508082111561488457600080fd5b6148908a838b016144fc565b909650945060408901359150808211156148a957600080fd5b506148b689828a016144fc565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614903576149036148c8565b6040525050565b60006001600160401b03821115614923576149236148c8565b5060051b60200190565b600082601f83011261493e57600080fd5b8135602061494b8261490a565b60405161495882826148de565b83815260059390931b850182019282810191508684111561497857600080fd5b8286015b84811015614993578035835291830191830161497c565b509695505050505050565b60006001600160401b038211156149b7576149b76148c8565b50601f01601f191660200190565b600082601f8301126149d657600080fd5b81356149e18161499e565b6040516149ee82826148de565b828152856020848701011115614a0357600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080600060a08688031215614a3957600080fd5b8535614a4481614488565b94506020860135614a5481614488565b935060408601356001600160401b0380821115614a7057600080fd5b614a7c89838a0161492d565b94506060880135915080821115614a9257600080fd5b614a9e89838a0161492d565b93506080880135915080821115614ab457600080fd5b50614ac1888289016149c5565b9150509295509295909350565b600060208284031215614ae057600080fd5b8135610c9d81614488565b600082601f830112614afc57600080fd5b81356020614b098261490a565b604051614b1682826148de565b83815260059390931b8501820192828101915086841115614b3657600080fd5b8286015b84811015614993578035614b4d81614488565b8352918301918301614b3a565b60008060408385031215614b6d57600080fd5b82356001600160401b0380821115614b8457600080fd5b614b9086838701614aeb565b93506020850135915080821115614ba657600080fd5b5061308e8582860161492d565b600081518084526020808501945080840160005b83811015614be357815187529582019590820190600101614bc7565b509495945050505050565b602081526000610c9d6020830184614bb3565b600080600060608486031215614c1657600080fd5b8335925060208401356001600160401b03811115614c3357600080fd5b614c3f86828701614aeb565b925050604084013590509250925092565b61ffff8116811461144f57600080fd5b600060408284031215614c7257600080fd5b604080519081016001600160401b0381118282101715614c9457614c946148c8565b6040529050808235614ca581614488565b81526020830135614cb581614c50565b6020919091015292915050565b60008060008060008060008060e0898b031215614cde57600080fd5b88356001600160401b0380821115614cf557600080fd5b614d018c838d016149c5565b995060208b0135985060408b01359150614d1a82614488565b819750614d2a8c60608d01614c60565b965060a08b0135915080821115614d4057600080fd5b614d4c8c838d016144fc565b909650945060c08b0135915080821115614d6557600080fd5b50614d728b828c016144fc565b999c989b5096995094979396929594505050565b60008060008060008060c08789031215614d9f57600080fd5b86356001600160401b0380821115614db657600080fd5b614dc28a838b016149c5565b97506020890135965060408901359150614ddb82614488565b819550614deb8a60608b01614c60565b945060a08901359150808211156148a957600080fd5b60008060408385031215614e1457600080fd5b8235915060208301356001600160401b03811115614e3157600080fd5b61308e85828601614aeb565b801515811461144f57600080fd5b60008060408385031215614e5e57600080fd5b8235614e6981614488565b91506020830135614e7981614e3d565b809150509250929050565b60008060408385031215614e9757600080fd5b823591506020830135614e7981614488565b60008060008060408587031215614ebf57600080fd5b84356001600160401b0380821115614ed657600080fd5b614ee28883890161460c565b90965094506020870135915080821115614efb57600080fd5b818701915087601f830112614f0f57600080fd5b813581811115614f1e57600080fd5b8860208260061b8501011115614f3357600080fd5b95989497505060200194505050565b60008060408385031215614f5557600080fd5b8235614f6081614488565b915060208301356001600160401b03811115614f7b57600080fd5b61308e858286016149c5565b602081526000610c9d6020830184614691565b60008060408385031215614fad57600080fd5b8235614fb881614488565b91506020830135614e7981614488565b60008060008060408587031215614fde57600080fd5b84356001600160401b0380821115614ff557600080fd5b6150018883890161460c565b9096509450602087013591508082111561501a57600080fd5b506150278782880161460c565b95989497509550505050565b60006040828403121561148f57600080fd5b600080600080600060a0868803121561505d57600080fd5b853561506881614488565b9450602086013561507881614488565b9350604086013592506060860135915060808601356001600160401b038111156150a157600080fd5b614ac1888289016149c5565b6000806000606084860312156150c257600080fd5b83356150cd81614488565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b818110156151235783516001600160a01b0316835292840192918401916001016150fe565b50909695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038781168252861660208201526040810185905260a06060820181905260009061518c908301858761512f565b9050600783106151ac57634e487b7160e01b600052602160045260246000fd5b826080830152979650505050505050565b80516151c881614e3d565b919050565b6000602082840312156151df57600080fd5b8151610c9d81614e3d565b634e487b7160e01b600052603260045260246000fd5b6040815260006152136040830185614bb3565b828103602084015261479281856146d0565b600181811c9082168061523957607f821691505b6020821081141561148f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156152845761528461525a565b5060010190565b60008282101561529d5761529d61525a565b500390565b6060815260006152b660608301888a61512f565b82810360208401526152c981878961512f565b905082810360408401526152de81858761512f565b9998505050505050505050565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b0383111561531f57600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000615350602083018486615306565b949350505050565b803565ffffffffffff811681146151c857600080fd5b60008060008060008060008060006101208a8c03121561538d57600080fd5b893561539881614488565b985060208a01356153a881614488565b97506153b660408b01615358565b96506153c460608b01615358565b955060808a01356001600160c01b03811681146153e057600080fd5b94506153ee60a08b01615358565b93506153fc60c08b01615358565b925061540a60e08b01615358565b91506101008a013561541b81614488565b809150509295985092959850929598565b65ffffffffffff169052565b60006101c08201905061544c82845161479b565b602083015161545e602084018261542c565b506040830151615471604084018261542c565b506060830151615484606084018261479b565b506080830151615497608084018261542c565b5060a08301516154aa60a084018261542c565b5060c08301516154bd60c084018261479b565b5060e08301516154d060e084018261542c565b50610100808401516154e48285018261542c565b5050610120838101516001600160c01b0316908301526101408084015161550d8285018261542c565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b6000806000806080858703121561555157600080fd5b84356001600160601b038116811461556857600080fd5b9350602085013561557881614488565b9250604085013561558881614488565b915060608501356001600160401b038111156155a357600080fd5b6155af878288016149c5565b91505092959194509250565b83516001600160a01b0390811682526020808601516001600160601b0316908301526040808601519091169082015260608085015115159082015260808085015115159082015260a084810151151590820152600061010061562860c08401866001600160601b03169052565b8060e0840152611a30818401856145b4565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020828403121561566f57600080fd5b8135610c9d81614c50565b813561568581614488565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356156b181614c50565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b80356156df81614488565b6001600160a01b0316825260208101356156f881614c50565b61ffff81166020840152505050565b8381526080810161571b60208301856156d4565b6001600160a01b03929092166060919091015292915050565b600060408083526157488184018789615306565b83810360208086019190915285825286910160005b8681101561577f5761576f82846156d4565b918301919083019060010161575d565b5098975050505050505050565b600082601f83011261579d57600080fd5b81516157a88161499e565b6040516157b582826148de565b8281528560208487010111156157ca57600080fd5b614792836020830160208801614588565b80516151c881614488565b600082601f8301126157f757600080fd5b815160206158048261490a565b60405161581182826148de565b83815260059390931b850182019282810191508684111561583157600080fd5b8286015b8481101561499357805161584881614488565b8352918301918301615835565b600080600080600080600060e0888a03121561587057600080fd5b87516001600160401b038082111561588757600080fd5b6158938b838c0161578c565b985060208a01519150808211156158a957600080fd5b6158b58b838c0161578c565b975060408a01519150808211156158cb57600080fd5b6158d78b838c0161578c565b96506158e560608b016157db565b955060808a01519150808211156158fb57600080fd5b506159088a828b016157e6565b93505061591760a089016151bd565b915061592560c089016157db565b905092959891949750929550565b604081526000615947604083018688615306565b8281036020848101919091528482528591810160005b8681101561577f57833561597081614488565b6001600160a01b03168252928201929082019060010161595d565b6060810161599982856156d4565b6001600160a01b039290921660409190910152919050565b6001600160e01b031991909116815260200190565b60006001600160801b03838116908316818110156159e6576159e661525a565b039392505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60008219821115615a3557615a3561525a565b500190565b6000816000190483118215151615615a5457615a5461525a565b500290565b600082615a7657634e487b7160e01b600052601260045260246000fd5b500490565b604081526000615a8e6040830185614bb3565b82810360208401526147928185614bb3565b6001600160a01b03868116825285811660208301528416604082015260a060608201819052600090615ad490830185614bb3565b82810360808401526117ac8185614bb3565b6001600160a01b0386811682528516602082015260a060408201819052600090615b1290830186614bb3565b8281036060840152615b248186614bb3565b905082810360808401526117ac81856145b4565b600060208284031215615b4a57600080fd5b8151610c9d816144c9565b600060033d11156139525760046000803e5060005160e01c90565b600060443d1015615b7e5790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715615bad57505050505090565b8285019150815181811115615bc55750505050505090565b843d8701016020828501011115615bdf5750505050505090565b615bee602082860101876148de565b509095945050505050565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614290908301846145b456fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62c407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a