[ { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InvalidManager", "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": "NotAContract", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "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": 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": "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": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "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": "uint256", "name": "tokenId", "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": "bytes", "name": "auctionData", "type": "bytes" }, { "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" } ], "name": "createEditionWithAuction", "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": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionCurrentSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionMaxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionStartId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": [], "name": "getEditionStartIds", "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": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "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 IObservability", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFiltererRegistry", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "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": "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": "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": "newRegistry", "type": "address" }, { "internalType": "address", "name": "subscription", "type": "address" } ], "name": "setRegistryAndSubscription", "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": "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": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615cae80620000216000396000f3fe608060405234801561001057600080fd5b50600436106102a95760003560e01c806301ffc9a7146102ae578063063a7502146102d65780630690a78d146102e057806306fdde03146102f3578063081812fc14610308578063095ea7b31461032857806317360d341461033b57806318160ddd1461035c57806318bae6c8146103725780631b30808d1461038557806323b872dd146103985780632a55205a146103ab5780632a5ac764146103cc578063336211bf146103df578063377e5e27146103f257806342842e0e1461040557806342966c6814610418578063439fab911461042b57806346134b501461043e57806347230dcb146104515780634f58122a1461046457806350cf5a3114610477578063572b6c051461048a5780636352211e1461049d5780636502abea146104b0578063662fff38146104c3578063703c19d7146104d657806370a08231146104eb578063715018a6146104fe578063752d4cad1461050657806375794a3c14610519578063834a20df146105235780638da5cb5b1461053657806391d0049e1461053e578063921727041461055157806395d89b4114610564578063994d8d9a1461056c578063a22cb4651461057f578063a305f5b214610592578063b0e5afe3146105a5578063b5c5801e146105b9578063b859c935146105c1578063b88d4fde146105d4578063bfb2995c146105e7578063c2f50701146105fa578063c73ef57314610602578063c87b56dd14610615578063ddf990f914610628578063e8a3d48514610648578063e985e9c514610650578063eb87215014610663578063ee295d6214610676578063ee947a9a14610689578063eeab05891461069c578063ef60ceaf146106af578063f2fde38b146106c2578063f775baac146106d5578063f97b57ec146106e8578063fac70dc9146106fd575b600080fd5b6102c16102bc366004614708565b610710565b60405190151581526020015b60405180910390f35b6102de610721565b005b6102de6102ee366004614766565b6107e1565b6102fb610a1c565b6040516102cd91906147fe565b61031b610316366004614811565b610aaf565b6040516102cd9190614837565b6102de610336366004614860565b610ad7565b61034e6103493660046148d0565b610af0565b6040516102cd9291906149a5565b610364610c43565b6040519081526020016102cd565b60cb5461031b906001600160a01b031681565b610364610393366004614a1b565b610c97565b6102de6103a6366004614a53565b610d2b565b6103be6103b9366004614a83565b610d6c565b6040516102cd929190614aa5565b6102de6103da366004614abe565b610d8c565b6103646103ed366004614811565b610e22565b6102fb610400366004614811565b610e4a565b6102de610413366004614a53565b610f0b565b6102de610426366004614811565b610f26565b6102de610439366004614b57565b6110ec565b61031b61044c366004614811565b611266565b6102de61045f366004614b8c565b611274565b6102de6104723660046148d0565b611328565b6102de610485366004614b8c565b61154a565b6102c1610498366004614b8c565b6116e7565b61031b6104ab366004614811565b6116fb565b61031b6104be366004614811565b611717565b6103646104d1366004614c6c565b611742565b6104de6117bb565b6040516102cd9190614cf6565b6103646104f9366004614b8c565b611813565b6102de611880565b6102de610514366004614d09565b611892565b6103646101375481565b6102de610531366004614b8c565b6118a4565b61031b611922565b61036461054c366004614e23565b611931565b61036461055f366004614e9e565b611b12565b6102fb611b98565b61036461057a366004614eda565b611ba8565b6102de61058d366004614f7f565b611d38565b6102de6105a0366004614b8c565b611d4c565b6101355461031b906001600160a01b031681565b6102de611eb0565b6103646105cf366004614fad565b612004565b6102de6105e2366004614fd2565b61207e565b6102de6105f536600461503d565b6120bd565b6102de6123dd565b610364610610366004614811565b6124ee565b6102fb610623366004614811565b612510565b61063b610636366004614811565b6125de565b6040516102cd91906150d6565b6102fb61260f565b6102c161065e366004614d09565b61269e565b60d05461031b906001600160a01b031681565b60cf5461031b906001600160a01b031681565b610364610697366004614811565b6126cd565b6102de6106aa3660046150e9565b6126de565b6102de6106bd366004615154565b6129a8565b6102de6106d0366004614b8c565b612b7c565b6103646106e3366004614e23565b612bf2565b6106f0612d2f565b6040516102cd9190615166565b61036461070b366004614811565b612d40565b600061071b82612d51565b92915050565b610729612da1565b610731612e10565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b505050506107df6001609755565b565b60006107ec84611717565b905060006107f8612e71565b90506001600160a01b038216610842576000610812611922565b9050806001600160a01b0316826001600160a01b03161461083c5761083c6282b42960e81b612e7b565b506108d0565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e9061087990309085908a908a908a906006906004016151f2565b6020604051808303816000875af1158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc9190615249565b6108d0576108d0631b04458960e01b612e7b565b600085815261013b602052604090206108ea9085856145bd565b5060408051600180825281830190925260009160208083019080368337019050509050858160008151811061092157610921615266565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161094357905050905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508551869450909250151590506109a4576109a4615266565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906109e1908590859060040161527c565b600060405180830381600087803b1580156109fb57600080fd5b505af1158015610a0f573d6000803e3d6000fd5b5050505050505050505050565b60606101038054610a2c906152a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a58906152a1565b8015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b5050505050905090565b6000610aba82612e84565b50600090815261010760205260409020546001600160a01b031690565b81610ae181612ed4565b610aeb8383612f6e565b505050565b606080826000816001600160401b03811115610b0e57610b0e614ba9565b604051908082528060200260200182016040528015610b4757816020015b610b34614641565b815260200190600190039081610b2c5790505b5090506000826001600160401b03811115610b6457610b64614ba9565b604051908082528060200260200182016040528015610b9757816020015b6060815260200190600190039081610b825790505b50905060005b83811015610c3457610bc6888883818110610bba57610bba615266565b90506020020135610e4a565b828281518110610bd857610bd8615266565b6020026020010181905250610c04888883818110610bf857610bf8615266565b9050602002013561307e565b838281518110610c1657610c16615266565b60200260200101819052508080610c2c906152ec565b915050610b9d565b509093509150505b9250929050565b600080805b61013854811015610c91576101388181548110610c6757610c67615266565b906000526020600020015482610c7d9190615307565b915080610c89816152ec565b915050610c48565b50919050565b6000610cac610ca4612e71565b60c990613117565b610cc057610cc0633e34a41b60e21b612e7b565b610cc8612e10565b60cf54600160a01b900460ff1660011415610ced57610ced6345a9661760e01b612e7b565b610cf984610138541190565b610d0d57610d0d63eb49290360e01b612e7b565b610d1884848461312c565b9050610d246001609755565b9392505050565b610d3c610d36612e71565b82613224565b610d615760405162461bcd60e51b8152600401610d589061531f565b60405180910390fd5b610aeb838383613282565b600080610d81610d7b85613402565b846134a6565b915091509250929050565b610d94612da1565b610da086868686613541565b610dad61013683836145bd565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610de890899089908990899089908990600401615354565b600060405180830381600087803b158015610e0257600080fd5b505af1158015610e16573d6000803e3d6000fd5b50505050505050505050565b6000610e2d8261355c565b610e4157610e4163677510db60e11b612e7b565b61071b82613402565b6060610e5882610138541190565b610e6c57610e6c63eb49290360e01b612e7b565b600082815261013b602052604090208054610e86906152a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb2906152a1565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b50505050509050919050565b610aeb8383836040518060200160405280600081525061207e565b610f2e612e10565b6000610f3982610e22565b90506000610f4682611717565b90506000610f52612e71565b90506001600160a01b03821615801590610fdb57506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a790610f9a9063129dae8b60e01b9060040161539d565b602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190615249565b1561104f57816001600160a01b031663129dae8b82610ff9876116fb565b866040518463ffffffff1660e01b8152600401611018939291906153b2565b600060405180830381600087803b15801561103257600080fd5b505af1158015611046573d6000803e3d6000fd5b5050505061106c565b6110598185613224565b61106c5761106c6282b42960e81b612e7b565b6110758461357a565b60d0546040516323de665160e01b81526001600160a01b03909116906323de6651906110aa90849060009089906004016153b2565b600060405180830381600087803b1580156110c457600080fd5b505af11580156110d8573d6000803e3d6000fd5b505050505050506110e96001609755565b50565b600054610100900460ff161580801561110c5750600054600160ff909116105b8061112d575061111b30613618565b15801561112d575060005460ff166001145b6111905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610d58565b6000805460ff1916600117905580156111b3576000805461ff0019166101001790555b6000808080808080806111c88a8c018c6153e1565b975097509750975097509750975097506000604051806040016040528060006001600160a01b03168152602001600061ffff168152509050611213898260008b8b8b8b8b8b8b613627565b5050505050505050508015610aeb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600061071b6104be83610e22565b61127c612da1565b61128760c982613738565b61129b5761129b63ea6eb5c360e01b612e7b565b6040516001906001600160a01b03831690600080516020615c4283398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112f39084906001906004016154d0565b600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b5050505050565b611330612e10565b600061133a612e71565b90508160005b8181101561149c57600060cc600087878581811061136057611360615266565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061139a5761139a635f98be1560e11b612e7b565b806001600160a01b031663ce2003a5858888868181106113bc576113bc615266565b905060200201356040518363ffffffff1660e01b81526004016113e0929190614aa5565b6020604051808303816000875af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190615249565b6114375761143763251c48e160e11b612e7b565b600060cc600088888681811061144f5761144f615266565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080611494906152ec565b915050611340565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa84846040516114ce929190615521565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906115089087908790600401615521565b600060405180830381600087803b15801561152257600080fd5b505af1158015611536573d6000803e3d6000fd5b5050505050506115466001609755565b5050565b611552612e10565b61155b8161374d565b61156f5761156f631a7387bd60e11b612e7b565b6000611579612e71565b60cf549091506001600160a01b0316806115c157611595611922565b6001600160a01b0316826001600160a01b0316146115bc576115bc6282b42960e81b612e7b565b611644565b60405163bcdbc94760e01b81526001600160a01b0382169063bcdbc947906115ef9086908690600401615535565b602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190615249565b6116445761164463e10a050560e01b612e7b565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615c8283398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906116a9908690600401614837565b600060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b5050505050506110e96001609755565b6065546001600160a01b0391821691161490565b600090815261010560205260409020546001600160a01b031690565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015610c915792915050565b600061174f610ca4612e71565b61176357611763633e34a41b60e21b612e7b565b61176b612e10565b60cf54600160a01b900460ff1660011415611790576117906345a9661760e01b612e7b565b61179c84610138541190565b6117b0576117b063eb49290360e01b612e7b565b610d18848484613769565b606061013a805480602002602001604051908101604052809291908181526020018280548015610aa557602002820191906000526020600020905b8154815260200190600101908083116117f6575050505050905090565b60006001600160a01b0382166118635760405162461bcd60e51b815260206004820152601560248201527422a9219b99189d1024b73b30b634b21037bbb732b960591b6044820152606401610d58565b506001600160a01b03166000908152610106602052604090205490565b611888612da1565b6107df60006138a6565b61189a612da1565b61154682826138f8565b6118ac612da1565b6118b760c98261399f565b6118cb576118cb63ea6eb5c360e01b612e7b565b6040516000906001600160a01b03831690600080516020615c42833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112f39084906000906004016154d0565b6033546001600160a01b031690565b600061193b612da1565b611943612e10565b60006119508888886139b4565b85519091506001600160a01b0316156119a557600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611afc57600080808080808080806119c18c8e018e615565565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff16815260200160006001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff168152602001600115158152602001600015158152602001848152506040518263ffffffff1660e01b8152600401611ac09190615624565b600060405180830381600087803b158015611ada57600080fd5b505af1158015611aee573d6000803e3d6000fd5b505050505050505050505050505b9050611b086001609755565b9695505050505050565b6000611b1f610ca4612e71565b611b3357611b33633e34a41b60e21b612e7b565b611b3b612e10565b60cf54600160a01b900460ff1660011415611b6057611b606345a9661760e01b612e7b565b611b6c83610138541190565b611b8057611b8063eb49290360e01b612e7b565b611b8c83836001613769565b905061071b6001609755565b60606101048054610a2c906152a1565b6000611bb2612da1565b611bba612e10565b6000611bc8866001866139b4565b83519091506001600160a01b031615611c1d57600081815260ce60209081526040909120845181549286015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b600080600080600089806020019051810190611c399190615727565b945094509450945094506000604051806101000160405280306001600160a01b03168152602001856001600160a01b03168152602001336001600160a01b03168152602001846001600160a01b031681526020018381526020016000815260200160011515815260200160016003811115611cb657611cb66151dc565b905260405163712f1bf760e11b81529091506001600160a01b0387169063e25e37ee90611ceb90889085908c9060040161579c565b600060405180830381600087803b158015611d0557600080fd5b505af1158015611d19573d6000803e3d6000fd5b50989950505050505050505050611d306001609755565b949350505050565b81611d4281612ed4565b610aeb8383613b32565b611d54612e10565b611d5d81613b44565b611d7157611d71631a7387bd60e11b612e7b565b6000611d7b612e71565b60cb549091506001600160a01b031680611dc357611d97611922565b6001600160a01b0316826001600160a01b031614611dbe57611dbe6282b42960e81b612e7b565b611e4b565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611df4908590600090889060040161582f565b6020604051808303816000875af1158015611e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e379190615249565b611e4b57611e4b63e10a050560e01b612e7b565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615c2283398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906116a9908690600401614837565b611eb8612e10565b6000611ec2612e71565b60cb549091506001600160a01b031680611ee657611ee6635f98be1560e11b612e7b565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611f15908590600090600401614aa5565b6020604051808303816000875af1158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190615249565b611f6c57611f6c63251c48e160e11b612e7b565b60cb80546001600160a01b0319169055604051600090600080516020615c22833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611fc690600090600401614837565b600060405180830381600087803b158015611fe057600080fd5b505af1158015611ff4573d6000803e3d6000fd5b5050505050506107df6001609755565b6000612011610ca4612e71565b61202557612025633e34a41b60e21b612e7b565b61202d612e10565b60cf54600160a01b900460ff1660011415612052576120526345a9661760e01b612e7b565b61205e83610138541190565b6120725761207263eb49290360e01b612e7b565b611b8c8383600161312c565b61208f612089612e71565b83613224565b6120ab5760405162461bcd60e51b8152600401610d589061531f565b6120b784848484613b60565b50505050565b6120c5612e10565b60006120cf612e71565b905060006120db611922565b60cf549091506001600160a01b031685816121dc57826001600160a01b0316846001600160a01b031614612118576121186282b42960e81b612e7b565b60005b818110156121d65761215e87878381811061213857612138615266565b90506040020160200160208101906121509190615852565b61271061ffff909116111590565b61217257612172633daf741f60e21b612e7b565b86868281811061218457612184615266565b90506040020160ce60008b8b858181106121a0576121a0615266565b90506020020135815260200190815260200160002081816121c1919061586f565b508190506121ce816152ec565b91505061211b565b5061232a565b60005b81811015612328576121fc87878381811061213857612138615266565b61221057612210633daf741f60e21b612e7b565b826001600160a01b031663ad6e40c78a8a8481811061223157612231615266565b9050602002013589898581811061224a5761224a615266565b905060400201886040518463ffffffff1660e01b815260040161226f939291906158fc565b602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190615249565b6122c4576122c463270e710760e21b612e7b565b8686828181106122d6576122d6615266565b90506040020160ce60008b8b858181106122f2576122f2615266565b9050602002013581526020019081526020016000208181612313919061586f565b50819050612320816152ec565b9150506121df565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c8888888860405161235f9493929190615929565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde9061239d908b908b908b908b90600401615929565b600060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b50505050505050506120b76001609755565b6123e5612e10565b60006123ef612e71565b60cf549091506001600160a01b03168061241357612413635f98be1560e11b612e7b565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa9061243f908590600401614837565b602060405180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190615249565b6124945761249463251c48e160e11b612e7b565b60cf80546001600160a01b0319169055604051600090600080516020615c82833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611fc690600090600401614837565b61013881815481106124ff57600080fd5b600091825260209091200154905081565b606061251b8261355c565b61252f5761252f63677510db60e11b612e7b565b600061253a83610e22565b600081815261013b60205260409020805491925090612558906152a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612584906152a1565b80156125d15780601f106125a6576101008083540402835291602001916125d1565b820191906000526020600020905b8154815290600101906020018083116125b457829003601f168201915b5050505050915050919050565b6125e6614641565b6125f282610138541190565b6126065761260663eb49290360e01b612e7b565b61071b8261307e565b610136805461261d906152a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612649906152a1565b80156126965780601f1061266b57610100808354040283529160200191612696565b820191906000526020600020905b81548152906001019060200180831161267957829003601f168201915b505050505081565b6001600160a01b0391821660009081526101086020908152604080832093909416825291909152205460ff1690565b61013981815481106124ff57600080fd5b6126e6612e10565b60006126f0612e71565b905060006126fc611922565b90508460005b818110156128f55761273986868381811061271f5761271f615266565b90506020020160208101906127349190614b8c565b613b44565b61274d5761274d631a7387bd60e11b612e7b565b600061277089898481811061276457612764615266565b90506020020135611717565b90506001600160a01b0381166127ad57836001600160a01b0316856001600160a01b0316146127a8576127a86282b42960e81b612e7b565b61286b565b806001600160a01b03166385e335b6868b8b868181106127cf576127cf615266565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612814969591909302013592506001600160a01b03169060040161582f565b6020604051808303816000875af1158015612833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128579190615249565b61286b5761286b63e10a050560e01b612e7b565b86868381811061287d5761287d615266565b90506020020160208101906128929190614b8c565b60cc60008b8b868181106128a8576128a8615266565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806128ed906152ec565b915050612702565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e8787878760405161292b9493929190615981565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612969908a908a908a908a90600401615981565b600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050505050506120b76001609755565b6129b0612e10565b6129c06040820160208301615852565b61271061ffff821611156129de576129de633daf741f60e21b612e7b565b60006129e8612e71565b60cf549091506001600160a01b031680612a3057612a04611922565b6001600160a01b0316826001600160a01b031614612a2b57612a2b6282b42960e81b612e7b565b612ab3565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f090612a5e90879086906004016159d9565b602060405180830381865afa158015612a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9f9190615249565b612ab357612ab363270e710760e21b612e7b565b8360cd612ac0828261586f565b50612ad390506040850160208601615852565b61ffff16612ae46020860186614b8c565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c0612b376020870187614b8c565b612b476040880160208901615852565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff1660248201526044016110aa565b612b84612da1565b6001600160a01b038116612be95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d58565b6110e9816138a6565b6000612bfc612da1565b612c04612e10565b6000612c118888886139b4565b85519091506001600160a01b031615612c6657600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611afc576000808080612c7d878901896159ff565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491612ced9188908690600401615a67565b600060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b50505050505050509050611b086001609755565b6060612d3b60c9613b93565b905090565b61013a81815481106124ff57600080fd5b60006001600160e01b031982166380ac58cd60e01b1480612d8257506001600160e01b03198216635b5e139f60e01b145b8061071b57506301ffc9a760e01b6001600160e01b031983161461071b565b612da9612e71565b6001600160a01b0316612dba611922565b6001600160a01b0316146107df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d58565b60026097541415612e635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d58565b6002609755565b6001609755565b6000612d3b613ba0565b6110e981613bc2565b612e8d8161355c565b6110e95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d58565b610135546001600160a01b0316156110e95761013554604051633185c44d60e21b81526001600160a01b039091169063c617113490612f199030908590600401615535565b602060405180830381865afa158015612f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5a9190615249565b6110e9576110e9638a10919360e01b612e7b565b6000612f79826116fb565b9050806001600160a01b0316836001600160a01b03161415612fd45760405162461bcd60e51b81526020600482015260146024820152734552433732313a20616c7265616479206f776e7360601b6044820152606401610d58565b806001600160a01b0316612fe6612e71565b6001600160a01b0316148061300257506130028161065e612e71565b6130745760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610d58565b610aeb8383613bcc565b613086614641565b604051806080016040528060405180602001604052806000815250815260200161013984815481106130ba576130ba615266565b9060005260206000200154815260200161013884815481106130de576130de615266565b9060005260206000200154815260200161013a848154811061310257613102615266565b90600052602060002001548152509050919050565b6000610d24836001600160a01b038416613c3b565b600080610139858154811061314357613143615266565b906000526020600020015490506000610138868154811061316657613166615266565b90600052602060002001549050600061013a878154811061318957613189615266565b600091825260208220015491506131a08684615307565b9050838111156131ba576131ba6352df9fe560e01b612e7b565b60005b868110156131f7576131d8886131d38686615307565b613c53565b6131e3600185615307565b9350806131ef816152ec565b9150506131bd565b5080610138898154811061320d5761320d615266565b600091825260209091200155979650505050505050565b600080613230836116fb565b9050806001600160a01b0316846001600160a01b031614806132575750613257818561269e565b80611d305750836001600160a01b031661327084610aaf565b6001600160a01b031614949350505050565b826001600160a01b0316613295826116fb565b6001600160a01b0316146132e45760405162461bcd60e51b815260206004820152601660248201527522a9219b99189d10333937b6903737ba1037bbb732b960511b6044820152606401610d58565b6001600160a01b0382166133385760405162461bcd60e51b815260206004820152601b60248201527a4552433732313a20746f20746865207a65726f206164647265737360281b6044820152606401610d58565b60008181526101076020908152604080832080546001600160a01b03191690556001600160a01b0386168352610106909152812080546001929061337d908490615ae6565b90915550506001600160a01b0382166000908152610106602052604081208054600192906133ac908490615307565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b038681169182179092559151849391871691600080516020615c6283398151915291a4610aeb838383613d64565b61013a8054604080516020808402820181019092528281526000938493849383018282801561345057602002820191906000526020600020905b81548152602001906001019080831161343c575b505083519394506000925050505b8181101561349c5782818151811061347857613478615266565b6020026020010151861061348a578093505b613495600182615307565b905061345e565b5091949350505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff1692820192909252829161351157506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b805160208201519093506127109061352d9061ffff1686615afd565b6135379190615b1c565b9150509250929050565b61354e61010385856145bd565b5061132161010483836145bd565b600090815261010560205260409020546001600160a01b0316151590565b6000613585826116fb565b60008381526101076020908152604080832080546001600160a01b03191690556001600160a01b0384168352610106909152812080549293506001929091906135cf908490615ae6565b90915550506000828152610105602052604080822080546001600160a01b0319169055518391906001600160a01b03841690600080516020615c62833981519152908390a45050565b6001600160a01b03163b151590565b6136328a8a8a613f0b565b61363c8686613fe7565b61364584614018565b825160005b818110156136925761367f85828151811061366757613667615266565b602002602001015160c961373890919063ffffffff16565b508061368a816152ec565b91505061364a565b5060016101375587516136ad906101369060208b0190614669565b5060405162df38cb60e71b81526001600160a01b03831690636f9c6580906136d9903090600401614837565b600060405180830381600087803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b6000610d24836001600160a01b038416614061565b600061071b6001600160a01b03831663440444c560e11b6140ab565b600080835190506000610139868154811061378657613786615266565b90600052602060002001549050600061013887815481106137a9576137a9615266565b90600052602060002001549050600061013a88815481106137cc576137cc615266565b600091825260208220015491506137e38786615afd565b6137ed9084615307565b905083811115613807576138076352df9fe560e01b612e7b565b60005b858110156138785760005b88811015613865576138468a838151811061383257613832615266565b602002602001015186866131d39190615307565b613851600186615307565b94508061385d816152ec565b915050613815565b5080613870816152ec565b91505061380a565b50826101388a8154811061388e5761388e615266565b60009182526020909120015598975050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61013580546001600160a01b0319166001600160a01b03841690811790915515611546576001600160a01b0382163b61393b5761393b6309ee12d560e01b612e7b565b604051633e9f1edf60e11b81526001600160a01b03831690637d3e3dbe906139699030908590600401615535565b600060405180830381600087803b15801561398357600080fd5b505af1158015613997573d6000803e3d6000fd5b505050505050565b6000610d24836001600160a01b0384166140c7565b6000826139cb576139cb630ffd11ad60e01b612e7b565b61013a8054610137805460018084019094557f1cc3277f886bc7650038e458160d07e0113c6dbe808de6ada3226131dc58025183015561013980548085019091557f22d66071756d4d57920b8322c1a903a27bd75b44065e925d5f9f1c08908d28f6018690556101388054938401815560009081527ff79a63dcec80ed75c82f36161f17b9c2f407860160383a7be0a0ee7962c527ae909301839055805491928692613a78908490615307565b9091555050600081815261013b602090815260409091208651613a9d92880190614669565b506001600160a01b03831615613af257613ab683613b44565b613aca57613aca631a7387bd60e11b612e7b565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b611546613b3d612e71565b83836141ba565b600061071b6001600160a01b038316633b209e2f60e11b6140ab565b613b6b848484613282565b613b7784848484614286565b6120b75760405162461bcd60e51b8152600401610d5890615b3e565b60606000610d248361438f565b6000613bab336116e7565b15613bbd575060131936013560601c90565b503390565b8060005260046000fd5b60008181526101076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613c02826116fb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60009081526001919091016020526040902054151590565b6001600160a01b038216613ca05760405162461bcd60e51b81526020600482015260146024820152734552433732313a207a65726f206164647265737360601b6044820152606401610d58565b613ca98161355c565b15613ced5760405162461bcd60e51b8152602060048201526014602482015273115490cdcc8c4e881d1bdad95b881b5a5b9d195960621b6044820152606401610d58565b6001600160a01b038216600090815261010660205260408120805460019290613d17908490615307565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839290600080516020615c62833981519152908290a45050565b6000613d6e612e71565b9050806001600160a01b0316846001600160a01b031614613d9257613d9281612ed4565b6000613d9d83611266565b90506001600160a01b03811615801590613e2657506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613de590637af46b4f60e11b9060040161539d565b602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e269190615249565b15613e9e57604051637f1eaf8560e01b81526001600160a01b0383811660048301528681166024830152858116604483015260648201859052821690637f1eaf8590608401600060405180830381600087803b158015613e8557600080fd5b505af1158015613e99573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190613ed2908890889088906004016153b2565b600060405180830381600087803b158015613eec57600080fd5b505af1158015613f00573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16613f325760405162461bcd60e51b8152600401610d5890615b70565b602082015161271061ffff82161115613f5557613f55633daf741f60e21b612e7b565b613f5d6143ea565b613f65614419565b613f6e846138a6565b82516001600160a01b031615613fb557825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156120b75760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff1661400e5760405162461bcd60e51b8152600401610d5890615b70565b6115468282614448565b600054610100900460ff1661403f5760405162461bcd60e51b8152600401610d5890615b70565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600061406d8383613c3b565b6140a35750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561071b565b50600061071b565b60006140b683614498565b8015610d245750610d2483836144cb565b600081815260018301602052604081205480156141b05760006140eb600183615ae6565b85549091506000906140ff90600190615ae6565b905081811461416457600086600001828154811061411f5761411f615266565b906000526020600020015490508087600001848154811061414257614142615266565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061417557614175615bbb565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061071b565b600091505061071b565b816001600160a01b0316836001600160a01b031614156142185760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610d58565b6001600160a01b0383811660008181526101086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061429a846001600160a01b0316613618565b1561438757836001600160a01b031663150b7a026142b6612e71565b8786866040518563ffffffff1660e01b81526004016142d89493929190615bd1565b6020604051808303816000875af1925050508015614313575060408051601f3d908101601f1916820190925261431091810190615c04565b60015b61436d573d808015614341576040519150601f19603f3d011682016040523d82523d6000602084013e614346565b606091505b5080516143655760405162461bcd60e51b8152600401610d5890615b3e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d30565b506001611d30565b606081600001805480602002602001604051908101604052809291908181526020018280548015610eff57602002820191906000526020600020905b8154815260200190600101908083116143cb5750505050509050919050565b600054610100900460ff166144115760405162461bcd60e51b8152600401610d5890615b70565b6107df61455f565b600054610100900460ff166144405760405162461bcd60e51b8152600401610d5890615b70565b6107df614596565b600054610100900460ff1661446f5760405162461bcd60e51b8152600401610d5890615b70565b815161448390610103906020850190614669565b508051610aeb90610104906020840190614669565b60006144ab826301ffc9a760e01b6144cb565b801561071b57506144c4826001600160e01b03196144cb565b1592915050565b6000806301ffc9a760e01b836040516024016144e7919061539d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015614548575060208210155b80156145545750600081115b979650505050505050565b600054610100900460ff166145865760405162461bcd60e51b8152600401610d5890615b70565b6107df614591612e71565b6138a6565b600054610100900460ff16612e6a5760405162461bcd60e51b8152600401610d5890615b70565b8280546145c9906152a1565b90600052602060002090601f0160209004810192826145eb5760008555614631565b82601f106146045782800160ff19823516178555614631565b82800160010185558215614631579182015b82811115614631578235825591602001919060010190614616565b5061463d9291506146dd565b5090565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b828054614675906152a1565b90600052602060002090601f0160209004810192826146975760008555614631565b82601f106146b057805160ff1916838001178555614631565b82800160010185558215614631579182015b828111156146315782518255916020019190600101906146c2565b5b8082111561463d57600081556001016146de565b6001600160e01b0319811681146110e957600080fd5b60006020828403121561471a57600080fd5b8135610d24816146f2565b60008083601f84011261473757600080fd5b5081356001600160401b0381111561474e57600080fd5b602083019150836020828501011115610c3c57600080fd5b60008060006040848603121561477b57600080fd5b8335925060208401356001600160401b0381111561479857600080fd5b6147a486828701614725565b9497909650939450505050565b6000815180845260005b818110156147d7576020818501810151868301820152016147bb565b818111156147e9576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610d2460208301846147b1565b60006020828403121561482357600080fd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146110e957600080fd5b6000806040838503121561487357600080fd5b823561487e8161484b565b946020939093013593505050565b60008083601f84011261489e57600080fd5b5081356001600160401b038111156148b557600080fd5b6020830191508360208260051b8501011115610c3c57600080fd5b600080602083850312156148e357600080fd5b82356001600160401b038111156148f957600080fd5b6149058582860161488c565b90969095509350505050565b600081516080845261492660808501826147b1565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156149985782840389526149868483516147b1565b9885019893509084019060010161496e565b5091979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156149fc57605f198887030185526149ea868351614911565b955093820193908201906001016149ce565b505085840381870152505050614a128185614950565b95945050505050565b600080600060608486031215614a3057600080fd5b833592506020840135614a428161484b565b929592945050506040919091013590565b600080600060608486031215614a6857600080fd5b8335614a738161484b565b92506020840135614a428161484b565b60008060408385031215614a9657600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614ad757600080fd5b86356001600160401b0380821115614aee57600080fd5b614afa8a838b01614725565b90985096506020890135915080821115614b1357600080fd5b614b1f8a838b01614725565b90965094506040890135915080821115614b3857600080fd5b50614b4589828a01614725565b979a9699509497509295939492505050565b60008060208385031215614b6a57600080fd5b82356001600160401b03811115614b8057600080fd5b61490585828601614725565b600060208284031215614b9e57600080fd5b8135610d248161484b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614be757614be7614ba9565b604052919050565b600082601f830112614c0057600080fd5b813560206001600160401b03821115614c1b57614c1b614ba9565b8160051b614c2a828201614bbf565b9283528481018201928281019087851115614c4457600080fd5b83870192505b84831015614554578235614c5d8161484b565b82529183019190830190614c4a565b600080600060608486031215614c8157600080fd5b8335925060208401356001600160401b03811115614c9e57600080fd5b614caa86828701614bef565b925050604084013590509250925092565b600081518084526020808501945080840160005b83811015614ceb57815187529582019590820190600101614ccf565b509495945050505050565b602081526000610d246020830184614cbb565b60008060408385031215614d1c57600080fd5b8235614d278161484b565b91506020830135614d378161484b565b809150509250929050565b600082601f830112614d5357600080fd5b81356001600160401b03811115614d6c57614d6c614ba9565b614d7f601f8201601f1916602001614bbf565b818152846020838601011115614d9457600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff811681146110e957600080fd5b600060408284031215614dd357600080fd5b604080519081016001600160401b0381118282101715614df557614df5614ba9565b6040529050808235614e068161484b565b81526020830135614e1681614db1565b6020919091015292915050565b60008060008060008060c08789031215614e3c57600080fd5b86356001600160401b0380821115614e5357600080fd5b614e5f8a838b01614d42565b97506020890135965060408901359150614e788261484b565b819550614e888a60608b01614dc1565b945060a0890135915080821115614b3857600080fd5b60008060408385031215614eb157600080fd5b8235915060208301356001600160401b03811115614ece57600080fd5b61353785828601614bef565b60008060008060a08587031215614ef057600080fd5b84356001600160401b0380821115614f0757600080fd5b614f1388838901614d42565b95506020870135915080821115614f2957600080fd5b50614f3687828801614d42565b9350506040850135614f478161484b565b9150614f568660608701614dc1565b905092959194509250565b80151581146110e957600080fd5b8035614f7a81614f61565b919050565b60008060408385031215614f9257600080fd5b8235614f9d8161484b565b91506020830135614d3781614f61565b60008060408385031215614fc057600080fd5b823591506020830135614d378161484b565b60008060008060808587031215614fe857600080fd5b8435614ff38161484b565b935060208501356150038161484b565b92506040850135915060608501356001600160401b0381111561502557600080fd5b61503187828801614d42565b91505092959194509250565b6000806000806040858703121561505357600080fd5b84356001600160401b038082111561506a57600080fd5b6150768883890161488c565b9096509450602087013591508082111561508f57600080fd5b818701915087601f8301126150a357600080fd5b8135818111156150b257600080fd5b8860208260061b85010111156150c757600080fd5b95989497505060200194505050565b602081526000610d246020830184614911565b600080600080604085870312156150ff57600080fd5b84356001600160401b038082111561511657600080fd5b6151228883890161488c565b9096509450602087013591508082111561513b57600080fd5b506151488782880161488c565b95989497509550505050565b600060408284031215610c9157600080fd5b6020808252825182820181905260009190848201906040850190845b818110156151a75783516001600160a01b031683529284019291840191600101615182565b50909695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038781168252861660208201526040810185905260a06060820181905260009061522690830185876151b3565b905060078310615238576152386151dc565b826080830152979650505050505050565b60006020828403121561525b57600080fd5b8151610d2481614f61565b634e487b7160e01b600052603260045260246000fd5b60408152600061528f6040830185614cbb565b8281036020840152614a128185614950565b600181811c908216806152b557607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415615300576153006152d6565b5060010190565b6000821982111561531a5761531a6152d6565b500190565b6020808252601b908201527a115490cdcc8c4e8818d85b1b195c881d5b985d5d1a1bdc9a5e9959602a1b604082015260600190565b60608152600061536860608301888a6151b3565b828103602084015261537b8187896151b3565b905082810360408401526153908185876151b3565b9998505050505050505050565b6001600160e01b031991909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8035614f7a8161484b565b600080600080600080600080610100898b0312156153fe57600080fd5b615407896153d6565b975060208901356001600160401b038082111561542357600080fd5b61542f8c838d01614d42565b985060408b013591508082111561544557600080fd5b6154518c838d01614d42565b975060608b013591508082111561546757600080fd5b6154738c838d01614d42565b965061548160808c016153d6565b955060a08b013591508082111561549757600080fd5b506154a48b828c01614bef565b9350506154b360c08a01614f6f565b91506154c160e08a016153d6565b90509295985092959890939650565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b0383111561550457600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000611d306020830184866154eb565b6001600160a01b0392831681529116602082015260400190565b803565ffffffffffff81168114614f7a57600080fd5b60008060008060008060008060006101208a8c03121561558457600080fd5b893561558f8161484b565b985060208a013561559f8161484b565b97506155ad60408b0161554f565b96506155bb60608b0161554f565b955060808a01356001600160c01b03811681146155d757600080fd5b94506155e560a08b0161554f565b93506155f360c08b0161554f565b925061560160e08b0161554f565b91506101008a013590509295985092959850929598565b65ffffffffffff169052565b60006101c08201905061563882845161482a565b602083015161564a6020840182615618565b50604083015161565d6040840182615618565b506060830151615670606084018261482a565b5060808301516156836080840182615618565b5060a083015161569660a0840182615618565b5060c08301516156a960c084018261482a565b5060e08301516156bc60e0840182615618565b50610100808401516156d082850182615618565b5050610120838101516001600160c01b031690830152610140808401516156f982850182615618565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b600080600080600060a0868803121561573f57600080fd5b855161574a8161484b565b6020870151604088015191965094506157628161484b565b60608701519093506157738161484b565b80925050608086015190509295509295909350565b60048110615798576157986151dc565b9052565b60006101408201905084825260018060a01b038085511660208401528060208601511660408401528060408601511660608401525060608401516157e3608084018261482a565b50608084015160a083015260a084015160c083015260c084015161580b60e084018215159052565b5060e084015161581f610100840182615788565b5082610120830152949350505050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020828403121561586457600080fd5b8135610d2481614db1565b813561587a8161484b565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356158a681614db1565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b80356158d48161484b565b6001600160a01b0316825260208101356158ed81614db1565b61ffff81166020840152505050565b8381526080810161591060208301856158c9565b6001600160a01b03929092166060919091015292915050565b6000604080835261593d81840187896154eb565b83810360208086019190915285825286910160005b868110156159745761596482846158c9565b9183019190830190600101615952565b5098975050505050505050565b6040815260006159956040830186886154eb565b8281036020848101919091528482528591810160005b868110156159745783356159be8161484b565b6001600160a01b0316825292820192908201906001016159ab565b606081016159e782856158c9565b6001600160a01b039290921660409190910152919050565b60008060008060808587031215615a1557600080fd5b84356001600160601b0381168114615a2c57600080fd5b93506020850135615a3c8161484b565b92506040850135615a4c8161484b565b915060608501356001600160401b0381111561502557600080fd5b83516001600160a01b0390811682526020808601516001600160601b0316908301526040808601519091169082015260608085015115159082015260808085015115159082015260a0848101511515908201526000610100615ad460c08401866001600160601b03169052565b8060e0840152611b08818401856147b1565b600082821015615af857615af86152d6565b500390565b6000816000190483118215151615615b1757615b176152d6565b500290565b600082615b3957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526018908201527722a9219b99189d1034b73b30b634b2103932b1b2b4bb32b960411b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b08908301846147b1565b600060208284031215615c1657600080fd5b8151610d24816146f256fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a