[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "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": false, "internalType": "string", "name": "oldBaseUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURISet", "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": 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": "uint256", "name": "newLimitSupply", "type": "uint256" } ], "name": "LimitSupplySet", "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": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "TokenURIsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "key", "type": "bytes" } ], "name": "encryptDecrypt", "outputs": [ { "internalType": "bytes", "name": "result", "type": "bytes" } ], "stateMutability": "pure", "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": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "defaultRoyalty", "type": "tuple" }, { "internalType": "address", "name": "_defaultTokenManager", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "trustedForwarder", "type": "address" }, { "internalType": "address", "name": "initialMinter", "type": "address" }, { "internalType": "string", "name": "newBaseURI", "type": "string" }, { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" }, { "internalType": "bool", "name": "useMarketplaceFiltererRegistry", "type": "bool" }, { "internalType": "address", "name": "_observability", "type": "address" } ], "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": [], "name": "limitSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToOneRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintSameAmountToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "mintSpecificTokenToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "mintSpecificTokensToOneRecipient", "outputs": [], "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": "observability", "outputs": [ { "internalType": "contract IObservability", "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": "_tokenGroupingId", "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": "payable", "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": "payable", "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": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "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": "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": "uint256", "name": "_limitSupply", "type": "uint256" } ], "name": "setLimitSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIs", "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": "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": "payable", "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" } ]
608060405234801561001057600080fd5b50615085806100206000396000f3fe60806040526004361061024f5760003560e01c806301ffc9a714610254578063063a75021461028957806306fdde03146102a0578063081812fc146102c2578063095ea7b3146102ef5780630d640e811461030257806318160ddd14610321578063184a94d51461034457806318bae6c81461036457806323b872dd146103845780632a55205a146103975780632a5ac764146103c55780632ddcb21f146103e55780632fc3a8d9146103fc5780633713c1a11461041c57806342842e0e1461043c57806342966c681461044f578063439fab911461046f57806347230dcb1461048f5780634f58122a146104af57806350cf5a31146104cf57806354820541146104ef57806355f804b31461050f578063572b6c051461052f5780635be954481461054f5780636352211e1461056f5780636371fbe71461058f5780636502abea146105af5780636c0360eb146105cf57806370a08231146105e4578063715018a614610604578063834a20df146106195780638da5cb5b1461063957806395d89b411461064e578063a22cb46514610663578063a305f5b214610683578063b5c5801e146106a3578063b88d4fde146106b8578063bfb2995c146106cb578063c2f50701146106eb578063c87b56dd14610700578063db3e4c8414610720578063e715032214610740578063e8a3d48514610760578063e985e9c514610775578063eb87215014610795578063ee295d62146107b5578063eeab0589146107d5578063ef60ceaf146107f5578063f2fde38b14610815578063f7441c3a14610835578063f97b57ec14610855575b600080fd5b34801561026057600080fd5b5061027461026f366004613fba565b610877565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b5061029e610888565b005b3480156102ac57600080fd5b506102b5610948565b604051610280919061402f565b3480156102ce57600080fd5b506102e26102dd366004614042565b6109e3565b604051610280919061405b565b61029e6102fd36600461408f565b610a27565b34801561030e57600080fd5b5061029e61031d36600461408f565b5050565b34801561032d57600080fd5b50610336610a33565b604051908152602001610280565b34801561035057600080fd5b5061033661035f3660046140bb565b610a53565b34801561037057600080fd5b5060cb546102e2906001600160a01b031681565b61029e6103923660046140d8565b610ada565b3480156103a357600080fd5b506103b76103b2366004614119565b610c7e565b60405161028092919061413b565b3480156103d157600080fd5b5061029e6103e036600461419c565b610d19565b3480156103f157600080fd5b506103366101085481565b34801561040857600080fd5b5061029e610417366004614279565b610daf565b34801561042857600080fd5b5061029e610437366004614042565b610e8a565b61029e61044a3660046140d8565b610f36565b34801561045b57600080fd5b5061029e61046a366004614042565b610f51565b34801561047b57600080fd5b5061029e61048a3660046142c4565b61110d565b34801561049b57600080fd5b5061029e6104aa3660046140bb565b611227565b3480156104bb57600080fd5b5061029e6104ca366004614305565b6112db565b3480156104db57600080fd5b5061029e6104ea3660046140bb565b6114f9565b3480156104fb57600080fd5b5061029e61050a366004614467565b61165b565b34801561051b57600080fd5b5061029e61052a3660046142c4565b611732565b34801561053b57600080fd5b5061027461054a3660046140bb565b6118d9565b34801561055b57600080fd5b5061029e61056a36600461408f565b6118ed565b34801561057b57600080fd5b506102e261058a366004614042565b611973565b34801561059b57600080fd5b5061029e6105aa3660046145af565b505050565b3480156105bb57600080fd5b506102e26105ca366004614042565b61197e565b3480156105db57600080fd5b506102b56119ad565b3480156105f057600080fd5b506103366105ff3660046140bb565b611a3b565b34801561061057600080fd5b5061029e611a9a565b34801561062557600080fd5b5061029e6106343660046140bb565b611aac565b34801561064557600080fd5b506102e2611b2a565b34801561065a57600080fd5b506102b5611b39565b34801561066f57600080fd5b5061029e61067e366004614603565b611b51565b34801561068f57600080fd5b5061029e61069e3660046140bb565b611bce565b3480156106af57600080fd5b5061029e611d32565b61029e6106c636600461463c565b611e86565b3480156106d757600080fd5b5061029e6106e63660046146a7565b611ec7565b3480156106f757600080fd5b5061029e6121e7565b34801561070c57600080fd5b506102b561071b366004614042565b6122f8565b34801561072c57600080fd5b5061029e61073b366004614740565b612303565b34801561074c57600080fd5b506102b561075b3660046147ab565b612436565b34801561076c57600080fd5b506102b56124ab565b34801561078157600080fd5b50610274610790366004614806565b6124b9565b3480156107a157600080fd5b5060d0546102e2906001600160a01b031681565b3480156107c157600080fd5b5060cf546102e2906001600160a01b031681565b3480156107e157600080fd5b5061029e6107f0366004614740565b6124f6565b34801561080157600080fd5b5061029e610810366004614834565b6127c0565b34801561082157600080fd5b5061029e6108303660046140bb565b6129ce565b34801561084157600080fd5b5061029e610850366004614305565b612a44565b34801561086157600080fd5b5061086a612b11565b6040516102809190614846565b600061088282612b22565b92915050565b610890612b70565b610898612bdf565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561092457600080fd5b505af1158015610938573d6000803e3d6000fd5b505050506109466001609755565b565b6060610952612c40565b600201805461096090614893565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90614893565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b60006109ee82612c64565b610a0257610a026333d1c03960e21b612cc0565b610a0a612c40565b60009283526006016020525060409020546001600160a01b031690565b61031d82826001612cc9565b60006001610a3f612c40565b60010154610a4b612c40565b540303919050565b6000610a68610a60612d7a565b60c990612d84565b610a7c57610a7c633e34a41b60e21b612cc0565b610a84612bdf565b60cf54600160a01b900460ff1660011415610aa957610aa96345a9661760e01b612cc0565b6000610ab3612da0565b9050610abe81612db0565b610ac9836001612dd7565b9050610ad56001609755565b919050565b6000610ae582612ea8565b6001600160a01b039485169490915081168414610b0b57610b0b62a1148160e81b612cc0565b600080610b1784612f66565b91509150610b2c8187610b273390565b612f8e565b610b4e57610b3a86336124b9565b610b4e57610b4e632ce44b5f60e11b612cc0565b8015610b5957600082555b610b61612c40565b6001600160a01b0387166000908152600591909101602052604090208054600019019055610b8d612c40565b6001600160a01b03861660009081526005919091016020526040902080546001019055610bbe85600160e11b612fa3565b610bc6612c40565b60008681526004919091016020526040902055600160e11b8316610c355760018401610bf0612c40565b60008281526004919091016020526040902054610c3357610c0f612c40565b548114610c335783610c1f612c40565b600083815260049190910160205260409020555b505b6001600160a01b038516848188600080516020615039833981519152600080a480610c6a57610c6a633a954ecd60e21b612cc0565b610c75878787612fb8565b50505050505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff16928201929092528291610ce957506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b8051602082015190935061271090610d059061ffff16866148de565b610d0f91906148fd565b9150509250929050565b610d21612b70565b610d2d86868686613153565b610d3a6101078383613e5d565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610d7590899089908990899089908990600401614948565b600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b50505050505050505050565b610dba610a60612d7a565b610dce57610dce633e34a41b60e21b612cc0565b610dd6612bdf565b60cf54600160a01b900460ff1660011415610dfb57610dfb6345a9661760e01b612cc0565b8160006001610e08612da0565b610e129190614991565b905060005b82811015610e6157610e4f868683818110610e3457610e346149a8565b9050602002016020810190610e4991906140bb565b85612dd7565b80610e59816149be565b915050610e17565b50610e7e610e6f84846148de565b610e7990836149d9565b612db0565b50506105aa6001609755565b610e92612b70565b610e9a612bdf565b61010881905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b158015610f1157600080fd5b505af1158015610f25573d6000803e3d6000fd5b50505050610f336001609755565b50565b6105aa83838360405180602001604052806000815250611e86565b610f59612bdf565b6000610f648261197e565b90506000610f70612d7a565b90506001600160a01b03821615801590610ff957506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a790610fb89063129dae8b60e01b906004016149f1565b602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614a06565b1561107457600061100984611973565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b9061103c90859085908990600401614a23565b600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050611091565b61107e8184613188565b611091576110916282b42960e81b612cc0565b61109a836131c1565b60d0546040516323de665160e01b81526001600160a01b03909116906323de6651906110cf9084906000908890600401614a23565b600060405180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505050505050610f336001609755565b600054610100900460ff161580801561112d5750600054600160ff909116105b8061114e575061113c30613201565b15801561114e575060005460ff166001145b6111735760405162461bcd60e51b815260040161116a90614a47565b60405180910390fd5b6000805460ff191660011790558015611196576000805461ff0019166101001790555b6000806000806000806000806000806000808e8e8101906111b79190614467565b9b509b509b509b509b509b509b509b509b509b509b509b506111e38c8c8c8c8c8c8c8c8c8c8c8c613210565b50505050505050505050505080156105aa576000805461ff0019169055604051600181526000805160206150198339815191529060200160405180910390a1505050565b61122f612b70565b61123a60c9826132fb565b61124e5761124e63ea6eb5c360e01b612cc0565b6040516001906001600160a01b03831690600080516020614ff983398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112a6908490600190600401614a95565b600060405180830381600087803b1580156112c057600080fd5b505af11580156112d4573d6000803e3d6000fd5b5050505050565b6112e3612bdf565b60006112ed612d7a565b90508160005b8181101561144f57600060cc6000878785818110611313576113136149a8565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061134d5761134d635f98be1560e11b612cc0565b806001600160a01b031663ce2003a58588888681811061136f5761136f6149a8565b905060200201356040518363ffffffff1660e01b815260040161139392919061413b565b6020604051808303816000875af11580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d69190614a06565b6113ea576113ea63251c48e160e11b612cc0565b600060cc6000888886818110611402576114026149a8565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080611447906149be565b9150506112f3565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa8484604051611481929190614ae6565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906114bb9087908790600401614ae6565b600060405180830381600087803b1580156114d557600080fd5b505af11580156114e9573d6000803e3d6000fd5b50505050505061031d6001609755565b611501612bdf565b61150a81613310565b61151e5761151e631a7387bd60e11b612cc0565b6000611528612d7a565b60cf549091506001600160a01b03168061157057611544611b2a565b6001600160a01b0316826001600160a01b03161461156b5761156b6282b42960e81b612cc0565b6115f6565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190614a06565b6115f6576115f663e10a050560e01b612cc0565b60cf80546001600160a01b0319166001600160a01b03851690811790915560405160008051602061505983398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906110cf90869060040161405b565b600054610100900460ff161580801561167b5750600054600160ff909116105b8061169c575061168a30613201565b15801561169c575060005460ff166001145b6116b85760405162461bcd60e51b815260040161116a90614a47565b6000805460ff1916600117905580156116db576000805461ff0019166101001790555b6116ef8d8d8d8d8d8d8d8d8d8d8d8d613210565b8015611723576000805461ff0019169055604051600181526000805160206150198339815191529060200160405180910390a15b50505050505050505050505050565b61173a612bdf565b8061174f5761174f63ecd7b0d160e01b612cc0565b60cb546001600160a01b03168061179b57611768611b2a565b6001600160a01b0316611779612d7a565b6001600160a01b031614611796576117966282b42960e81b612cc0565b61182b565b806001600160a01b0316633d820a4d6117b2612d7a565b600086866040518563ffffffff1660e01b81526004016117d59493929190614afa565b6020604051808303816000875af11580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190614a06565b61182b5761182b6282b42960e81b612cc0565b61186a83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061332c92505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca969061189c9086908690600401614b2c565b600060405180830381600087803b1580156118b657600080fd5b505af11580156118ca573d6000803e3d6000fd5b505050505061031d6001609755565b6065546001600160a01b0391821691161490565b6118f8610a60612d7a565b61190c5761190c633e34a41b60e21b612cc0565b611914612bdf565b60cf54600160a01b900460ff1660011415611939576119396345a9661760e01b612cc0565b60006001611945612da0565b61194f9190614991565b905061195b8383612dd7565b611968610e7983836149d9565b5061031d6001609755565b600061088282612ea8565b60cb54600082815260cc60205260409020546001600160a01b03918216911680156119a7578091505b50919050565b60d580546119ba90614893565b80601f01602080910402602001604051908101604052809291908181526020018280546119e690614893565b8015611a335780601f10611a0857610100808354040283529160200191611a33565b820191906000526020600020905b815481529060010190602001808311611a1657829003601f168201915b505050505081565b60006001600160a01b038216611a5b57611a5b6323d3ad8160e21b612cc0565b6001600160401b03611a6b612c40565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611aa2612b70565b6109466000613379565b611ab4612b70565b611abf60c9826133cb565b611ad357611ad363ea6eb5c360e01b612cc0565b6040516000906001600160a01b03831690600080516020614ff9833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112a6908490600090600401614a95565b6033546001600160a01b031690565b6060611b43612c40565b600301805461096090614893565b80611b5a612c40565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611bd6612bdf565b611bdf816133e0565b611bf357611bf3631a7387bd60e11b612cc0565b6000611bfd612d7a565b60cb549091506001600160a01b031680611c4557611c19611b2a565b6001600160a01b0316826001600160a01b031614611c4057611c406282b42960e81b612cc0565b611ccd565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611c769085906000908890600401614b40565b6020604051808303816000875af1158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190614a06565b611ccd57611ccd63e10a050560e01b612cc0565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020614fd983398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906110cf90869060040161405b565b611d3a612bdf565b6000611d44612d7a565b60cb549091506001600160a01b031680611d6857611d68635f98be1560e11b612cc0565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611d9790859060009060040161413b565b6020604051808303816000875af1158015611db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dda9190614a06565b611dee57611dee63251c48e160e11b612cc0565b60cb80546001600160a01b0319169055604051600090600080516020614fd9833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611e489060009060040161405b565b600060405180830381600087803b158015611e6257600080fd5b505af1158015611e76573d6000803e3d6000fd5b5050505050506109466001609755565b611e91848484610ada565b6001600160a01b0383163b15611ec157611ead848484846133fc565b611ec157611ec16368d2bf6b60e11b612cc0565b50505050565b611ecf612bdf565b6000611ed9612d7a565b90506000611ee5611b2a565b60cf549091506001600160a01b03168581611fe657826001600160a01b0316846001600160a01b031614611f2257611f226282b42960e81b612cc0565b60005b81811015611fe057611f68878783818110611f4257611f426149a8565b9050604002016020016020810190611f5a9190614b63565b61271061ffff909116111590565b611f7c57611f7c633daf741f60e21b612cc0565b868682818110611f8e57611f8e6149a8565b90506040020160ce60008b8b85818110611faa57611faa6149a8565b9050602002013581526020019081526020016000208181611fcb9190614b80565b50819050611fd8816149be565b915050611f25565b50612134565b60005b8181101561213257612006878783818110611f4257611f426149a8565b61201a5761201a633daf741f60e21b612cc0565b826001600160a01b031663ad6e40c78a8a8481811061203b5761203b6149a8565b90506020020135898985818110612054576120546149a8565b905060400201886040518463ffffffff1660e01b815260040161207993929190614c0d565b602060405180830381865afa158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba9190614a06565b6120ce576120ce63270e710760e21b612cc0565b8686828181106120e0576120e06149a8565b90506040020160ce60008b8b858181106120fc576120fc6149a8565b905060200201358152602001908152602001600020818161211d9190614b80565b5081905061212a816149be565b915050611fe9565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516121699493929190614c3a565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde906121a7908b908b908b908b90600401614c3a565b600060405180830381600087803b1580156121c157600080fd5b505af11580156121d5573d6000803e3d6000fd5b5050505050505050611ec16001609755565b6121ef612bdf565b60006121f9612d7a565b60cf549091506001600160a01b03168061221d5761221d635f98be1560e11b612cc0565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa9061224990859060040161405b565b602060405180830381865afa158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a9190614a06565b61229e5761229e63251c48e160e11b612cc0565b60cf80546001600160a01b0319169055604051600090600080516020615059833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611e489060009060040161405b565b6060610882826134db565b61230b612bdf565b8281811461232357612323632b477e7160e11b612cc0565b60005b8181101561238557612373868683818110612343576123436149a8565b9050602002013585858481811061235c5761235c6149a8565b905060200281019061236e9190614c92565b6135a6565b8061237d816149be565b915050612326565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde3858585856040516123bb9493929190614cd8565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906123f9908890889088908890600401614cd8565b600060405180830381600087803b15801561241357600080fd5b505af1158015612427573d6000803e3d6000fd5b5050505050611ec16001609755565b8251604080518083016020019091528181529060005b818110156124a257600085858360405160200161246b93929190614d88565b60408051601f1981840301815291905280516020918201208884018201511885840182015261249b9150826149d9565b905061244c565b50509392505050565b61010780546119ba90614893565b60006124c3612c40565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6124fe612bdf565b6000612508612d7a565b90506000612514611b2a565b90508460005b8181101561270d57612551868683818110612537576125376149a8565b905060200201602081019061254c91906140bb565b6133e0565b61256557612565631a7387bd60e11b612cc0565b600061258889898481811061257c5761257c6149a8565b9050602002013561197e565b90506001600160a01b0381166125c557836001600160a01b0316856001600160a01b0316146125c0576125c06282b42960e81b612cc0565b612683565b806001600160a01b03166385e335b6868b8b868181106125e7576125e76149a8565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b16815261262c969591909302013592506001600160a01b031690600401614b40565b6020604051808303816000875af115801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614a06565b6126835761268363e10a050560e01b612cc0565b868683818110612695576126956149a8565b90506020020160208101906126aa91906140bb565b60cc60008b8b868181106126c0576126c06149a8565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612705906149be565b91505061251a565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e878787876040516127439493929190614d9a565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612781908a908a908a908a90600401614d9a565b600060405180830381600087803b15801561279b57600080fd5b505af11580156127af573d6000803e3d6000fd5b50505050505050611ec16001609755565b6127c8612bdf565b6127d86040820160208301614b63565b61271061ffff821611156127f6576127f6633daf741f60e21b612cc0565b6000612800612d7a565b60cf549091506001600160a01b0316806128485761281c611b2a565b6001600160a01b0316826001600160a01b031614612843576128436282b42960e81b612cc0565b6128cb565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906128769087908690600401614df2565b602060405180830381865afa158015612893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b79190614a06565b6128cb576128cb63270e710760e21b612cc0565b8360cd6128d88282614b80565b506128eb90506040850160208601614b63565b61ffff166128fc60208601866140bb565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c061294f60208701876140bb565b61295f6040880160208901614b63565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b50505050505050610f336001609755565b6129d6612b70565b6001600160a01b038116612a3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161116a565b610f3381613379565b612a4f610a60612d7a565b612a6357612a63633e34a41b60e21b612cc0565b612a6b612bdf565b60cf54600160a01b900460ff1660011415612a9057612a906345a9661760e01b612cc0565b8060006001612a9d612da0565b612aa79190614991565b905060005b82811015612af757612ae5858583818110612ac957612ac96149a8565b9050602002016020810190612ade91906140bb565b6001612dd7565b80612aef816149be565b915050612aac565b50612b05610e7983836149d9565b505061031d6001609755565b6060612b1d60c96136a7565b905090565b60006301ffc9a760e01b6001600160e01b031983161480612b5357506380ac58cd60e01b6001600160e01b03198316145b806108825750506001600160e01b031916635b5e139f60e01b1490565b612b78612d7a565b6001600160a01b0316612b89611b2a565b6001600160a01b0316146109465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161116a565b60026097541415612c325760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161116a565b6002609755565b6001609755565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111610ad557612c76612c40565b54821015610ad55760005b612c89612c40565b60008481526004919091016020526040902054905080612cb357612cac83614e18565b9250612c81565b600160e01b161592915050565b610f33816136b4565b6000612cd483611973565b9050818015612cec5750336001600160a01b03821614155b15612d0f57612cfb81336124b9565b612d0f57612d0f6367d9dca160e11b612cc0565b83612d18612c40565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000612b1d6136be565b6000612d99836001600160a01b0384166136e0565b9392505050565b6000612daa612c40565b54919050565b610108548015801590612dc257508082115b1561031d5761031d63be1a657d60e01b612cc0565b6000612de1612c40565b54905081612df957612df963b562e8dd60e01b612cc0565b612e09836001841460e11b612fa3565b612e11612c40565b600083815260049190910160205260409020556001600160401b018202612e36612c40565b6001600160a01b03851660008181526005929092016020526040909120805490920190915580612e6f57612e6f622e076360e81b612cc0565b818301825b80836000600080516020615039833981519152600080a460010180821415612e745781612e9f612c40565b55505050505050565b600081600111612f5657612eba612c40565b60008381526004919091016020526040902054905080612f4657612edc612c40565b548210612ef357612ef3636f96cda160e11b612cc0565b612efb612c40565b6000199092016000818152600493909301602052604090922054905080612f2157612ef3565b600160e01b8116612f3157919050565b612f41636f96cda160e11b612cc0565b612ef3565b600160e01b8116612f5657919050565b610ad5636f96cda160e11b612cc0565b6000806000612f73612c40565b60009485526006016020525050604090912080549092909150565b6001600160a01b039081169116811491141790565b4260a01b176001600160a01b03919091161790565b6000612fc38261197e565b90506001600160a01b0381161580159061304c57506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a79061300b90637af46b4f60e11b906004016149f1565b602060405180830381865afa158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190614a06565b156130e757806001600160a01b0316638af6791b613068612d7a565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152818816602482015290861660448201526064810185905260a06084820152600060a482015260c401600060405180830381600087803b1580156130ce57600080fd5b505af11580156130e2573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061311b90879087908790600401614a23565b600060405180830381600087803b15801561313557600080fd5b505af1158015613149573d6000803e3d6000fd5b5050505050505050565b838361315d612c40565b600201919061316d929190613e5d565b508181613178612c40565b60030191906112d4929190613e5d565b60008061319483611973565b90506131a081856124b9565b806131b957506131b96131b2846109e3565b8286612f8e565b949350505050565b6131ca816136f8565b600081815260d16020526040902080546131e390614893565b159050610f3357600081815260d160205260408120610f3391613ee1565b6001600160a01b03163b151590565b613218613703565b6132238c8b8b61372a565b61322c86613806565b613236888861384f565b61324160c9866132fb565b508a51613256906101079060208e0190613f1b565b50604051631222d4db60e11b81526001600160a01b03821690632445a9b69061328390309060040161405b565b600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b03851617905550508351156132e0576132e08461332c565b82156132ed576101088390555b505050505050505050505050565b6000612d99836001600160a01b038416613880565b60006108826001600160a01b03831663440444c560e11b6138ca565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f038260d58260405161335e929190614e2f565b60405180910390a1805161031d9060d5906020840190613f1b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612d99836001600160a01b0384166138e6565b60006108826001600160a01b038316633b209e2f60e11b6138ca565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290613431903390899088908890600401614eeb565b6020604051808303816000875af192505050801561346c575060408051601f3d908101601f1916820190925261346991810190614f1e565b60015b6134be573d80801561349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b5080516134b6576134b66368d2bf6b60e11b612cc0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60606134e682612c64565b6134fa576134fa63677510db60e11b612cc0565b600082815260d160205260408120805461351390614893565b80601f016020809104026020016040519081016040528092919081815260200182805461353f90614893565b801561358c5780601f106135615761010080835404028352916020019161358c565b820191906000526020600020905b81548152906001019060200180831161356f57829003601f168201915b5050505050905080516000141561088257612d99836139d9565b60006135b18461197e565b905060006135bd612d7a565b905060006135c9611b2a565b90506001600160a01b03831661360657806001600160a01b0316826001600160a01b031614613601576136016282b42960e81b612cc0565b61368e565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d906136389085908a908a908a90600401614afa565b6020604051808303816000875af1158015613657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367b9190614a06565b61368e5761368e6282b42960e81b612cc0565b600086815260d160205260409020610c75908686613e5d565b60606000612d9983613a54565b8060005260046000fd5b60006136c9336118d9565b156136db575060131936013560601c90565b503390565b60009081526001919091016020526040902054151590565b610f33816000613ab0565b600054610100900460ff166109465760405162461bcd60e51b815260040161116a90614f3b565b600054610100900460ff166137515760405162461bcd60e51b815260040161116a90614f3b565b602082015161271061ffff8216111561377457613774633daf741f60e21b612cc0565b61377c613c07565b613784613c36565b61378d84613379565b82516001600160a01b0316156137d457825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b03821615611ec15760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff1661382d5760405162461bcd60e51b815260040161116a90614f3b565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166138765760405162461bcd60e51b815260040161116a90614f3b565b61031d8282613c65565b600061388c83836136e0565b6138c257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610882565b506000610882565b60006138d583613cdb565b8015612d995750612d998383613d0e565b600081815260018301602052604081205480156139cf57600061390a600183614991565b855490915060009061391e90600190614991565b905081811461398357600086600001828154811061393e5761393e6149a8565b9060005260206000200154905080876000018481548110613961576139616149a8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061399457613994614f86565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610882565b6000915050610882565b60606139e482612c64565b6139f8576139f8630a14c4b560e41b612cc0565b6000613a02613da2565b9050805160001415613a235760405180602001604052806000815250612d99565b80613a2d84613db1565b604051602001613a3e929190614f9c565b6040516020818303038152906040529392505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613aa457602002820191906000526020600020905b815481526020019060010190808311613a90575b50505050509050919050565b6000613abb83612ea8565b905080600080613aca86612f66565b915091508415613b0157613adf818433612f8e565b613b0157613aed83336124b9565b613b0157613b01632ce44b5f60e11b612cc0565b8015613b0c57600082555b6001600160801b03613b1c612c40565b6001600160a01b0385166000908152600591909101602052604090208054919091019055613b4e83600360e01b612fa3565b613b56612c40565b60008881526004919091016020526040902055600160e11b8416613bc55760018601613b80612c40565b60008281526004919091016020526040902054613bc357613b9f612c40565b548114613bc35784613baf612c40565b600083815260049190910160205260409020555b505b60405186906000906001600160a01b03861690600080516020615039833981519152908390a4613bf3612c40565b600190810180549091019055505050505050565b600054610100900460ff16613c2e5760405162461bcd60e51b815260040161116a90614f3b565b610946613dff565b600054610100900460ff16613c5d5760405162461bcd60e51b815260040161116a90614f3b565b610946613e36565b600054610100900460ff16613c8c5760405162461bcd60e51b815260040161116a90614f3b565b81613c95612c40565b6002019080519060200190613cab929190613f1b565b5080613cb5612c40565b6003019080519060200190613ccb929190613f1b565b506001613cd6612c40565b555050565b6000613cee826301ffc9a760e01b613d0e565b80156108825750613d07826001600160e01b0319613d0e565b1592915050565b6000806301ffc9a760e01b83604051602401613d2a91906149f1565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015613d8b575060208210155b8015613d975750600081115b979650505050505050565b606060d5805461096090614893565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480613de857613ded565b613dcb565b50819003601f19909101908152919050565b600054610100900460ff16613e265760405162461bcd60e51b815260040161116a90614f3b565b610946613e31612d7a565b613379565b600054610100900460ff16612c395760405162461bcd60e51b815260040161116a90614f3b565b828054613e6990614893565b90600052602060002090601f016020900481019282613e8b5760008555613ed1565b82601f10613ea45782800160ff19823516178555613ed1565b82800160010185558215613ed1579182015b82811115613ed1578235825591602001919060010190613eb6565b50613edd929150613f8f565b5090565b508054613eed90614893565b6000825580601f10613efd575050565b601f016020900490600052602060002090810190610f339190613f8f565b828054613f2790614893565b90600052602060002090601f016020900481019282613f495760008555613ed1565b82601f10613f6257805160ff1916838001178555613ed1565b82800160010185558215613ed1579182015b82811115613ed1578251825591602001919060010190613f74565b5b80821115613edd5760008155600101613f90565b6001600160e01b031981168114610f3357600080fd5b600060208284031215613fcc57600080fd5b8135612d9981613fa4565b60005b83811015613ff2578181015183820152602001613fda565b83811115611ec15750506000910152565b6000815180845261401b816020860160208601613fd7565b601f01601f19169290920160200192915050565b602081526000612d996020830184614003565b60006020828403121561405457600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610f3357600080fd5b8035610ad58161406f565b600080604083850312156140a257600080fd5b82356140ad8161406f565b946020939093013593505050565b6000602082840312156140cd57600080fd5b8135612d998161406f565b6000806000606084860312156140ed57600080fd5b83356140f88161406f565b925060208401356141088161406f565b929592945050506040919091013590565b6000806040838503121561412c57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008083601f84011261416657600080fd5b5081356001600160401b0381111561417d57600080fd5b60208301915083602082850101111561419557600080fd5b9250929050565b600080600080600080606087890312156141b557600080fd5b86356001600160401b03808211156141cc57600080fd5b6141d88a838b01614154565b909850965060208901359150808211156141f157600080fd5b6141fd8a838b01614154565b9096509450604089013591508082111561421657600080fd5b5061422389828a01614154565b979a9699509497509295939492505050565b60008083601f84011261424757600080fd5b5081356001600160401b0381111561425e57600080fd5b6020830191508360208260051b850101111561419557600080fd5b60008060006040848603121561428e57600080fd5b83356001600160401b038111156142a457600080fd5b6142b086828701614235565b909790965060209590950135949350505050565b600080602083850312156142d757600080fd5b82356001600160401b038111156142ed57600080fd5b6142f985828601614154565b90969095509350505050565b6000806020838503121561431857600080fd5b82356001600160401b0381111561432e57600080fd5b6142f985828601614235565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261436157600080fd5b81356001600160401b038082111561437b5761437b61433a565b604051601f8301601f19908116603f011681019082821181831017156143a3576143a361433a565b816040528381528660208588010111156143bc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b61ffff81168114610f3357600080fd5b6000604082840312156143fe57600080fd5b604080519081016001600160401b03811182821017156144205761442061433a565b60405290508082356144318161406f565b81526020830135614441816143dc565b6020919091015292915050565b8015158114610f3357600080fd5b8035610ad58161444e565b6000806000806000806000806000806000806101a08d8f03121561448a57600080fd5b6144938d614084565b9b506001600160401b0360208e013511156144ad57600080fd5b6144bd8e60208f01358f01614350565b9a506144cc8e60408f016143ec565b99506144da60808e01614084565b98506001600160401b0360a08e013511156144f457600080fd5b6145048e60a08f01358f01614350565b97506001600160401b0360c08e0135111561451e57600080fd5b61452e8e60c08f01358f01614350565b965061453c60e08e01614084565b955061454b6101008e01614084565b94506001600160401b036101208e0135111561456657600080fd5b6145778e6101208f01358f01614350565b93506101408d0135925061458e6101608e0161445c565b915061459d6101808e01614084565b90509295989b509295989b509295989b565b6000806000604084860312156145c457600080fd5b83356145cf8161406f565b925060208401356001600160401b038111156145ea57600080fd5b6145f686828701614235565b9497909650939450505050565b6000806040838503121561461657600080fd5b82356146218161406f565b915060208301356146318161444e565b809150509250929050565b6000806000806080858703121561465257600080fd5b843561465d8161406f565b9350602085013561466d8161406f565b92506040850135915060608501356001600160401b0381111561468f57600080fd5b61469b87828801614350565b91505092959194509250565b600080600080604085870312156146bd57600080fd5b84356001600160401b03808211156146d457600080fd5b6146e088838901614235565b909650945060208701359150808211156146f957600080fd5b818701915087601f83011261470d57600080fd5b81358181111561471c57600080fd5b8860208260061b850101111561473157600080fd5b95989497505060200194505050565b6000806000806040858703121561475657600080fd5b84356001600160401b038082111561476d57600080fd5b61477988838901614235565b9096509450602087013591508082111561479257600080fd5b5061479f87828801614235565b95989497509550505050565b6000806000604084860312156147c057600080fd5b83356001600160401b03808211156147d757600080fd5b6147e387838801614350565b945060208601359150808211156147f957600080fd5b506145f686828701614154565b6000806040838503121561481957600080fd5b82356148248161406f565b915060208301356146318161406f565b6000604082840312156119a757600080fd5b6020808252825182820181905260009190848201906040850190845b818110156148875783516001600160a01b031683529284019291840191600101614862565b50909695505050505050565b600181811c908216806148a757607f821691505b602082108114156119a757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156148f8576148f86148c8565b500290565b60008261491a57634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061495c60608301888a61491f565b828103602084015261496f81878961491f565b9050828103604084015261498481858761491f565b9998505050505050505050565b6000828210156149a3576149a36148c8565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156149d2576149d26148c8565b5060010190565b600082198211156149ec576149ec6148c8565b500190565b6001600160e01b031991909116815260200190565b600060208284031215614a1857600080fd5b8151612d998161444e565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b03831115614ac957600080fd5b8260051b8083602087013760009401602001938452509192915050565b6020815260006131b9602083018486614ab0565b60018060a01b0385168152836020820152606060408201526000614b2260608301848661491f565b9695505050505050565b6020815260006131b960208301848661491f565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060208284031215614b7557600080fd5b8135612d99816143dc565b8135614b8b8161406f565b81546001600160a01b031981166001600160a01b039290921691821783556020840135614bb7816143dc565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035614be58161406f565b6001600160a01b031682526020810135614bfe816143dc565b61ffff81166020840152505050565b83815260808101614c216020830185614bda565b6001600160a01b03929092166060919091015292915050565b60006040808352614c4e8184018789614ab0565b83810360208086019190915285825286910160005b86811015614c8557614c758284614bda565b9183019190830190600101614c63565b5098975050505050505050565b6000808335601e19843603018112614ca957600080fd5b8301803591506001600160401b03821115614cc357600080fd5b60200191503681900382131561419557600080fd5b604081526000614cec604083018688614ab0565b602083820381850152818583528183019050818660051b8401018760005b88811015614d7857858303601f190184528135368b9003601e19018112614d3057600080fd5b8a0180356001600160401b03811115614d4857600080fd5b8036038c1315614d5757600080fd5b614d64858289850161491f565b958701959450505090840190600101614d0a565b50909a9950505050505050505050565b82848237909101908152602001919050565b604081526000614dae604083018688614ab0565b8281036020848101919091528482528591810160005b86811015614c85578335614dd78161406f565b6001600160a01b031682529282019290820190600101614dc4565b60608101614e008285614bda565b6001600160a01b039290921660409190910152919050565b600081614e2757614e276148c8565b506000190190565b60408152600080845481600182811c915080831680614e4f57607f831692505b6020808410821415614e6f57634e487b7160e01b86526022600452602486fd5b6040880184905260608801828015614e8e5760018114614e9f57614eca565b60ff19871682528282019750614eca565b60008c81526020902060005b87811015614ec457815484820152908601908401614eab565b83019850505b5050878603818901525050505050614ee28185614003565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b2290830184614003565b600060208284031215614f3057600080fd5b8151612d9981613fa4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60008351614fae818460208801613fd7565b602f60f81b9083019081528351614fcc816001840160208801613fd7565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7ab7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a