[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AllocationWithoutShares", "type": "error" }, { "inputs": [], "name": "DeactivationFailure", "type": "error" }, { "inputs": [], "name": "GateCheckFailure", "type": "error" }, { "inputs": [], "name": "GateInvalid", "type": "error" }, { "inputs": [], "name": "GlobalSupplyLimitExceeded", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidAccount", "type": "error" }, { "inputs": [], "name": "InvalidBasisPoints", "type": "error" }, { "inputs": [], "name": "InvalidCapture", "type": "error" }, { "inputs": [], "name": "InvalidCurve", "type": "error" }, { "inputs": [], "name": "InvalidFeeParams", "type": "error" }, { "inputs": [], "name": "InvalidHolder", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidOwner", "type": "error" }, { "inputs": [], "name": "InvalidTokenParams", "type": "error" }, { "inputs": [], "name": "MaxCommitmentExceeded", "type": "error" }, { "inputs": [], "name": "NoRewardsToClaim", "type": "error" }, { "inputs": [], "name": "NoSharesToBurn", "type": "error" }, { "inputs": [], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotSlashable", "type": "error" }, { "inputs": [], "name": "Reentrancy", "type": "error" }, { "inputs": [], "name": "ReferralLocked", "type": "error" }, { "inputs": [], "name": "SubscriptionNotFound", "type": "error" }, { "inputs": [], "name": "TierEndExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "TierHasNoSupply", "type": "error" }, { "inputs": [], "name": "TierInvalidDuration", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "mintPrice", "type": "uint256" } ], "name": "TierInvalidMintPrice", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "renewalPrice", "type": "uint256" } ], "name": "TierInvalidRenewalPrice", "type": "error" }, { "inputs": [], "name": "TierInvalidSupplyCap", "type": "error" }, { "inputs": [], "name": "TierInvalidSwitch", "type": "error" }, { "inputs": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "TierNotFound", "type": "error" }, { "inputs": [], "name": "TierNotStarted", "type": "error" }, { "inputs": [], "name": "TierRenewalsPaused", "type": "error" }, { "inputs": [], "name": "TierTimingInvalid", "type": "error" }, { "inputs": [], "name": "TierTransferDisabled", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotAuthorized", "type": "error" }, { "inputs": [], "name": "TransferToExistingSubscriber", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "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": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "ClientFeeRecipientChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "curveId", "type": "uint8" } ], "name": "CurveCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" } ], "name": "FeeTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "supplyCap", "type": "uint256" } ], "name": "GlobalSupplyCapChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "indexed": false, "internalType": "uint48", "name": "secondsGranted", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "expiresAt", "type": "uint48" } ], "name": "Grant", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "indexed": false, "internalType": "uint48", "name": "time", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "expiresAt", "type": "uint48" } ], "name": "GrantRevoke", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "proposed", "type": "address" } ], "name": "OwnerProposed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "ProtocolFeeRecipientChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "indexed": false, "internalType": "uint48", "name": "timePurchased", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "expiresAt", "type": "uint48" } ], "name": "Purchase", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "code", "type": "uint256" } ], "name": "ReferralDestroyed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "referralId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardAmount", "type": "uint256" } ], "name": "ReferralPayout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "code", "type": "uint256" } ], "name": "ReferralSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" }, { "indexed": false, "internalType": "uint48", "name": "timeReclaimed", "type": "uint48" } ], "name": "Refund", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsAllocated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "role", "type": "uint16" } ], "name": "RoleChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "numShares", "type": "uint256" } ], "name": "SharesBurned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "numShares", "type": "uint256" } ], "name": "SharesIssued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "SlashTransferFallback", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "indexed": false, "internalType": "uint16", "name": "oldTier", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "newTier", "type": "uint16" } ], "name": "SwitchTier", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "TierCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "TierUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokensIn", "type": "uint256" } ], "name": "TopUp", "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": "id", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "TransferRecipientChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokensTransferred", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractDetail", "outputs": [ { "components": [ { "internalType": "uint16", "name": "tierCount", "type": "uint16" }, { "internalType": "uint64", "name": "subCount", "type": "uint64" }, { "internalType": "uint64", "name": "supplyCap", "type": "uint64" }, { "internalType": "address", "name": "transferRecipient", "type": "address" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint256", "name": "creatorBalance", "type": "uint256" }, { "internalType": "uint8", "name": "numCurves", "type": "uint8" }, { "internalType": "uint256", "name": "rewardShares", "type": "uint256" }, { "internalType": "uint256", "name": "rewardBalance", "type": "uint256" }, { "internalType": "uint32", "name": "rewardSlashGracePeriod", "type": "uint32" }, { "internalType": "bool", "name": "rewardSlashable", "type": "bool" } ], "internalType": "struct ContractView", "name": "detail", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numPeriods", "type": "uint8" }, { "internalType": "uint8", "name": "formulaBase", "type": "uint8" }, { "internalType": "uint48", "name": "periodSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "minMultiplier", "type": "uint8" } ], "internalType": "struct CurveParams", "name": "curve", "type": "tuple" } ], "name": "createRewardCurve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "periodDurationSeconds", "type": "uint32" }, { "internalType": "uint32", "name": "maxSupply", "type": "uint32" }, { "internalType": "uint48", "name": "maxCommitmentSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint48", "name": "endTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "rewardCurveId", "type": "uint8" }, { "internalType": "uint16", "name": "rewardBasisPoints", "type": "uint16" }, { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "bool", "name": "transferrable", "type": "bool" }, { "internalType": "uint256", "name": "initialMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerPeriod", "type": "uint256" }, { "components": [ { "internalType": "enum GateType", "name": "gateType", "type": "uint8" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "uint256", "name": "componentId", "type": "uint256" }, { "internalType": "uint256", "name": "balanceMin", "type": "uint256" } ], "internalType": "struct Gate", "name": "gate", "type": "tuple" } ], "internalType": "struct Tier", "name": "params", "type": "tuple" } ], "name": "createTier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "curveId", "type": "uint8" } ], "name": "curveDetail", "outputs": [ { "components": [ { "internalType": "uint8", "name": "numPeriods", "type": "uint8" }, { "internalType": "uint8", "name": "formulaBase", "type": "uint8" }, { "internalType": "uint48", "name": "periodSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "minMultiplier", "type": "uint8" } ], "internalType": "struct CurveParams", "name": "curve", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "deactivateSubscription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeDetail", "outputs": [ { "components": [ { "internalType": "address", "name": "protocolRecipient", "type": "address" }, { "internalType": "uint16", "name": "protocolBps", "type": "uint16" }, { "internalType": "uint16", "name": "clientBps", "type": "uint16" }, { "internalType": "uint16", "name": "clientReferralBps", "type": "uint16" }, { "internalType": "address", "name": "clientRecipient", "type": "address" } ], "internalType": "struct FeeParams", "name": "fee", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint48", "name": "numSeconds", "type": "uint48" }, { "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "grantTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "contractUri", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "currencyAddress", "type": "address" }, { "internalType": "uint64", "name": "globalSupplyCap", "type": "uint64" } ], "internalType": "struct InitParams", "name": "params", "type": "tuple" }, { "components": [ { "internalType": "uint32", "name": "periodDurationSeconds", "type": "uint32" }, { "internalType": "uint32", "name": "maxSupply", "type": "uint32" }, { "internalType": "uint48", "name": "maxCommitmentSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint48", "name": "endTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "rewardCurveId", "type": "uint8" }, { "internalType": "uint16", "name": "rewardBasisPoints", "type": "uint16" }, { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "bool", "name": "transferrable", "type": "bool" }, { "internalType": "uint256", "name": "initialMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerPeriod", "type": "uint256" }, { "components": [ { "internalType": "enum GateType", "name": "gateType", "type": "uint8" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "uint256", "name": "componentId", "type": "uint256" }, { "internalType": "uint256", "name": "balanceMin", "type": "uint256" } ], "internalType": "struct Gate", "name": "gate", "type": "tuple" } ], "internalType": "struct Tier", "name": "tier", "type": "tuple" }, { "components": [ { "internalType": "uint32", "name": "slashGracePeriod", "type": "uint32" }, { "internalType": "bool", "name": "slashable", "type": "bool" } ], "internalType": "struct RewardParams", "name": "rewards", "type": "tuple" }, { "components": [ { "internalType": "uint8", "name": "numPeriods", "type": "uint8" }, { "internalType": "uint8", "name": "formulaBase", "type": "uint8" }, { "internalType": "uint48", "name": "periodSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "minMultiplier", "type": "uint8" } ], "internalType": "struct CurveParams", "name": "curve", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "protocolRecipient", "type": "address" }, { "internalType": "uint16", "name": "protocolBps", "type": "uint16" }, { "internalType": "uint16", "name": "clientBps", "type": "uint16" }, { "internalType": "uint16", "name": "clientReferralBps", "type": "uint16" }, { "internalType": "address", "name": "clientRecipient", "type": "address" } ], "internalType": "struct FeeParams", "name": "fees", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numShares", "type": "uint256" } ], "name": "issueRewardShares", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "referralCode", "type": "uint256" }, { "internalType": "uint256", "name": "purchaseValue", "type": "uint256" } ], "internalType": "struct MintParams", "name": "params", "type": "tuple" } ], "name": "mintAdvanced", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mintFor", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverCurrency", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "code", "type": "uint256" } ], "name": "referralDetail", "outputs": [ { "components": [ { "internalType": "uint16", "name": "basisPoints", "type": "uint16" }, { "internalType": "bool", "name": "permanent", "type": "bool" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "internalType": "struct ReferralLib.Code", "name": "value", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "refund", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint16", "name": "roles", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "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": "id", "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": "uint64", "name": "supplyCap", "type": "uint64" } ], "name": "setGlobalSupplyCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "setPendingOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "code", "type": "uint256" }, { "internalType": "uint16", "name": "basisPoints", "type": "uint16" }, { "internalType": "bool", "name": "permanent", "type": "bool" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "setReferralCode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint16", "name": "roles", "type": "uint16" } ], "name": "setRoles", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "setTransferRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "slash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stpVersion", "outputs": [ { "internalType": "uint8", "name": "version", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "subscriptionOf", "outputs": [ { "components": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" }, { "internalType": "uint64", "name": "tokenId", "type": "uint64" }, { "internalType": "uint48", "name": "expiresAt", "type": "uint48" }, { "internalType": "uint48", "name": "purchaseExpiresAt", "type": "uint48" }, { "internalType": "uint256", "name": "rewardShares", "type": "uint256" }, { "internalType": "uint256", "name": "rewardBalance", "type": "uint256" } ], "internalType": "struct SubscriberView", "name": "subscription", "type": "tuple" } ], "stateMutability": "view", "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": "uint16", "name": "tierId", "type": "uint16" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "tierBalanceOf", "outputs": [ { "internalType": "uint256", "name": "numSeconds", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" } ], "name": "tierDetail", "outputs": [ { "components": [ { "internalType": "uint32", "name": "subCount", "type": "uint32" }, { "internalType": "uint16", "name": "id", "type": "uint16" }, { "components": [ { "internalType": "uint32", "name": "periodDurationSeconds", "type": "uint32" }, { "internalType": "uint32", "name": "maxSupply", "type": "uint32" }, { "internalType": "uint48", "name": "maxCommitmentSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint48", "name": "endTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "rewardCurveId", "type": "uint8" }, { "internalType": "uint16", "name": "rewardBasisPoints", "type": "uint16" }, { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "bool", "name": "transferrable", "type": "bool" }, { "internalType": "uint256", "name": "initialMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerPeriod", "type": "uint256" }, { "components": [ { "internalType": "enum GateType", "name": "gateType", "type": "uint8" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "uint256", "name": "componentId", "type": "uint256" }, { "internalType": "uint256", "name": "balanceMin", "type": "uint256" } ], "internalType": "struct Gate", "name": "gate", "type": "tuple" } ], "internalType": "struct Tier", "name": "params", "type": "tuple" } ], "internalType": "struct TierLib.State", "name": "tier", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "topUp", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "transferRewardsFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "updateClientFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "updateMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "updateProtocolFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "tierId", "type": "uint16" }, { "components": [ { "internalType": "uint32", "name": "periodDurationSeconds", "type": "uint32" }, { "internalType": "uint32", "name": "maxSupply", "type": "uint32" }, { "internalType": "uint48", "name": "maxCommitmentSeconds", "type": "uint48" }, { "internalType": "uint48", "name": "startTimestamp", "type": "uint48" }, { "internalType": "uint48", "name": "endTimestamp", "type": "uint48" }, { "internalType": "uint8", "name": "rewardCurveId", "type": "uint8" }, { "internalType": "uint16", "name": "rewardBasisPoints", "type": "uint16" }, { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "bool", "name": "transferrable", "type": "bool" }, { "internalType": "uint256", "name": "initialMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerPeriod", "type": "uint256" }, { "components": [ { "internalType": "enum GateType", "name": "gateType", "type": "uint8" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "uint256", "name": "componentId", "type": "uint256" }, { "internalType": "uint256", "name": "balanceMin", "type": "uint256" } ], "internalType": "struct Gate", "name": "gate", "type": "tuple" } ], "internalType": "struct Tier", "name": "params", "type": "tuple" } ], "name": "updateTier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "yieldRewards", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6080806040523460865763409feecd19805490600182166078576001600160401b039160011c6002600160401b031901603f575b615ec1838161008c8239f35b6002600160411b03905560209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a138806033565b63f92ee8a96000526004601cfd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021613c73565b005b60003560e01c806301ffc9a7146103735780630265b3611461036e578063038de36c1461036957806306fdde0314610364578063070718c81461035f578063081812fc1461035a578063095ea7b31461035557806315aafee5146103505780631abb634b1461034b5780631df47f801461034657806323b872dd14610341578063296543411461033c5780632de94807146103375780633458b4b9146103325780633c5030bb1461032d578063410085df1461032857806342842e0e14610323578063472ab71b1461031e57806350017f3e1461031957806352742cfd1461031457806357c6ba671461030f5780636352211e1461030a57806370a082311461030557806379ba5097146103005780637b8e80bd146102fb5780637c9139d7146102f65780637ce3f951146102f157806388ceb092146102ec5780638da5cb5b146102e7578063918b5be1146102e257806395d89b41146102dd578063990dc9db146102d8578063a0712d68146102d3578063a22cb465146102ce578063a255625f146102c9578063a9779059146102c4578063ac9650d8146102bf578063afbcd65e146102ba578063b5ab5f81146102b5578063b88d4fde146102b0578063bb71af94146102ab578063c42069ec146102a6578063c87b56dd146102a1578063c8bb40081461029c578063c968d5fa14610297578063c96be4cb14610292578063da1919b31461028d578063db51049c14610288578063db655c7914610283578063e30c39781461027e578063e5e2c99e14610279578063e8a3d485146102745763e985e9c50361000e57612d1c565b612c86565b612ba6565b612b7d565b612b0b565b612a85565b612a61565b612a3c565b612940565b612844565b61272a565b6126bf565b6125ba565b612496565b612333565b6122ab565b6121d3565b61215c565b6120a7565b612015565b611ffd565b611f77565b611ecf565b611d71565b611ce4565b611c58565b611b7f565b611a18565b6119ad565b61197f565b611930565b611900565b61185b565b6117ff565b6117b1565b611680565b61164d565b61153c565b611379565b6112ec565b611297565b6111e3565b6111cc565b611108565b61101a565b610cbe565b610bc3565b610b8f565b610ac1565b6109d8565b6107bd565b6103fe565b346103f95760203660031901126103f95760043563ffffffff60e01b81168091036103f9576020906301ffc9a760e01b81149081156103e8575b81156103d7575b81156103c6575b506040519015158152f35b632483248360e11b149050386103bb565b635b5e139f60e01b811491506103b4565b6380ac58cd60e01b811491506103ad565b600080fd5b60a03660031901126103f957602435610416816106fa565b60043561042281610797565b60643591608435604435610435816106fa565b68929eee149b4bd2126894308654146106ec57308655600092806106cd575b506001600160a01b0384166000908152600f6020526040902061049290610486905b5460a01c6001600160401b031690565b6001600160401b031690565b80610628575061055c946104bd6104ab61048687613d38565b916104b68388613dd0565b8587614fc7565b600a546000946001600160a01b03858116939261ffff929160b082901c84169190866105e4575b916105186105028387610524979661051e96169160a01c168661523a565b600b549092906001600160a01b0316908561523a565b90613c91565b906135db565b951680610561575b505050506001600160a01b0383166000908152600f6020526040902061055691505b5461ffff1690565b916152ad565b389055005b61056e6105769187613c9e565b612710900490565b801561052c57806105c7816105b36105d7947f06b105690969a2bce25b023623f2665c12f18d4d2e03717719303253f935f3a5969798999a6135db565b600c549099906001600160a01b0316614644565b6040519081529081906020820190565b0390a4388080808061052c565b98506105f088886151f8565b98848a166104e45761052493929950610518610502838761061b8161051e9760c01c169e8f90613c7d565b96975050935050506104e4565b6001600160a01b0385163303610645575b6104bd61055c966104b6565b61ffff8061066861054e8860018060a01b0316600052600f602052604060002090565b16151590816106c1575b81610690575b501561063957604051630dd9f36960e21b8152600490fd5b6001600160a01b0387166000908152600f602052604090209091506106b49061054e565b8116908716141538610678565b87811615159150610672565b600c549193506106e5916001600160a01b031661485a565b9138610454565b63ab143c066000526004601cfd5b6001600160a01b038116036103f957565b3590610716826106fa565b565b6024359065ffffffffffff821682036103f957565b6064359065ffffffffffff821682036103f957565b6084359065ffffffffffff821682036103f957565b60a4359065ffffffffffff821682036103f957565b6044359065ffffffffffff821682036103f957565b6102a4359065ffffffffffff821682036103f957565b61ffff8116036103f957565b60e4359061071682610797565b60c4359061071682610797565b346103f95760603660031901126103f9576004356107da816106fa565b6107e2610718565b604435906107ef82610797565b68929eee149b4bd2126892308454146106ec5730845561080d613cd1565b6001600160a01b0381166000908152600f60205260409020546001600160401b03936108759160a01c851615610970575b6001600160a01b0383166000908152600f602052604090209261ffff9180831661096a575081845416915b8216156109615761537c565b65ffffffffffff9081815460401c164210600014610913578161055c94826108d16108cb8761090b98977fc6458a1de2cb1b7d81088b7499e0005b3a89eecae9b73f5dca7f58e67a2419a8975460401c166139da565b82613f2e565b6108da81615a9c565b546040805165ffffffffffff9687168152607083901c90941695909516602084015260a01c16938493829190820190565b0390a261552a565b919080821642019081421161095c5761055c9461090b946109576108cb7fc6458a1de2cb1b7d81088b7499e0005b3a89eecae9b73f5dca7f58e67a2419a895615a45565b6108d1565b612e81565b6001915061537c565b91610869565b6109848561097d85613d38565b1684613dd0565b61083e565b60005b83811061099c5750506000910152565b818101518382015260200161098c565b604091602082526109cc8151809281602086015260208686019101610989565b601f01601f1916010190565b346103f957600080600319360112610abe576040519080600754906109fc82612d84565b80855291602091600191828116908115610a915750600114610a39575b610a3586610a2981880382610db8565b604051918291826109ac565b0390f35b9350600784527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b838510610a7e57505050508101602001610a2982610a3538610a19565b8054868601840152938201938101610a61565b9050869550610a3596935060209250610a2994915060ff191682840152151560051b820101929338610a19565b80fd5b346103f95760003660031901126103f957610ada612dbe565b50610a35604051610aea81610d10565b600a546001600160a01b038116825261ffff60a082901c8116602084015260b082901c8116604084015260c09190911c166060820152600b54610b40906001600160a01b03166001600160a01b03166080830152565b60405191829182919091608060a08201938160018060a01b0391828151168552602081015161ffff80911660208701528060408301511660408701526060820151166060860152015116910152565b346103f95760203660031901126103f9576004356000526001602052602060018060a01b0360406000205416604051908152f35b346103f95760403660031901126103f957600435610be0816106fa565b6024356000918183528260205260018060a01b0380604085205416918233148015610c7d575b15610c6b57610c4281610c23866000526001602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b6040516364822e9d60e11b8152600490fd5b5060ff610cb733610ca08660018060a01b03166000526002602052604060002090565b9060018060a01b0316600052602052604060002090565b5416610c06565b346103f95760403660031901126103f9576020610cf2600435610ce081610797565b60243590610ced826106fa565b612e3a565b604051908152f35b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b03821117610d2b57604052565b610cfa565b608081019081106001600160401b03821117610d2b57604052565b60c081019081106001600160401b03821117610d2b57604052565b606081019081106001600160401b03821117610d2b57604052565b61018081019081106001600160401b03821117610d2b57604052565b602081019081106001600160401b03821117610d2b57604052565b90601f801991011681019081106001600160401b03821117610d2b57604052565b6040519061071682610d81565b6040519061071682610d4b565b6040519061016082018281106001600160401b03821117610d2b57604052565b6024359063ffffffff821682036103f957565b6044359063ffffffff821682036103f957565b6004359063ffffffff821682036103f957565b6004359060ff821682036103f957565b60c4359060ff821682036103f957565b60a4359060ff821682036103f957565b6102c4359060ff821682036103f957565b6084359060ff821682036103f957565b610104359081151582036103f957565b610124359081151582036103f957565b60e4359081151582036103f957565b6080906101831901126103f95760405190610ee682610d30565b816101843560058110156103f95781526101a435610f03816106fa565b60208201526101c435604082015260606101e435910152565b6080906101631901126103f95760405190610f3682610d30565b816101643560058110156103f957815261018435610f53816106fa565b60208201526101a435604082015260606101c435910152565b906101e06023198301126103f957611012610f85610dd9565b92610f8e610e13565b8452610f98610e26565b6020850152610fa561072d565b6040850152610fb2610742565b6060850152610fbf610757565b6080850152610fcc610e5c565b60a0850152610fd96107a3565b60c0850152610fe6610e9d565b60e0850152610ff3610ead565b6101008501526101443561012085015261016435610140850152610ecc565b610160830152565b346103f9576101e03660031901126103f957611034610dd9565b61103c610e39565b8152611046610e13565b602082015261105361076c565b604082015261106061072d565b606082015261106d610742565b608082015260ff61107c610e6c565b60a0830190815261108b6107b0565b60c0840152611098610ebd565b60e08401526110a5610e9d565b61010084015261012435610120840152610144356101408401526110c836610f1c565b6101608401526110d6613d05565b511660ff6110e78160115416612e97565b16106110f65761002190614164565b6040516317f3aa9560e11b8152600490fd5b346103f95760203660031901126103f957600435611125816106fa565b6019546001600160a01b0391908216330361118e5716801561117b575b600a80546001600160a01b031916821790557fb3fee961ff212eb5bcd78140454f8165b5e07b6b38065ad3c042183fc43426c6600080a2005b600a805461ffff60a01b19169055611142565b60405163ea8e4eb560e01b8152600490fd5b60609060031901126103f9576004356111b8816106fa565b906024356111c5816106fa565b9060443590565b346103f9576100216111dd366111a0565b91612eaa565b346103f95760203660031901126103f957600435611200816106fa565b600c546001600160a01b0390811691611218816146ba565b91821561128557811692836000526016602052600160406000200180549084820180921161095c57556014549383850180951161095c57610021946014557ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe6020604051868152a2614644565b6040516373380d9960e01b8152600490fd5b346103f95760203660031901126103f9576004356112b4816106fa565b60018060a01b03166000526005602052602061ffff60406000205416604051908152f35b35906001600160401b03821682036103f957565b346103f95760203660031901126103f9576004356001600160401b038082168092036103f95761131a613d05565b81600d54918260401c16116113675767ffffffffffffffff19168117600d556040519081527fa6e72d769d874c81cbb565d9fd81a23799957eba839120f59fbfdb5709c45e8490602090a1005b604051630759871f60e51b8152600490fd5b346103f95760203660031901126103f957610a35600435611399816106fa565b6040516113a581610d4b565b60a060009182815282602082015282604082015282606082015282608082015201526113e661054e8260018060a01b0316600052600f602052604060002090565b906114066104768260018060a01b0316600052600f602052604060002090565b906114d56114386114298360018060a01b0316600052600f602052604060002090565b5460701c65ffffffffffff1690565b6001600160a01b0383166000908152600f602052604090206114c690611467905460101c65ffffffffffff1690565b916114b761149161148a8760018060a01b03166000526016602052604060002090565b54966146ba565b966114a761149d610de6565b61ffff909a168a52565b6001600160401b03166020890152565b65ffffffffffff166040870152565b65ffffffffffff166060850152565b608083015260a08201526040519182918291909160a08060c083019461ffff81511684526001600160401b036020820151166020850152604081015165ffffffffffff80911660408601526060820151166060850152608081015160808501520151910152565b346103f95760403660031901126103f957600435611559816106fa565b60243561156461473e565b61156d81614752565b6001600160a01b0382166000908152600f60205260409020916001600160401b039283815460a01c161561163b5761090b817ffac4f5ae0c6d3baf5761771ee20f8800cefc1c17774e45081e2a572a2f1101e8610021966115d86115d361162a96612de9565b6159f8565b835467ffffffffffff000019164260101b67ffffffffffff0000161784559261160081615a9c565b5460a01c16928392604051918291898390929165ffffffffffff6020916040840195845216910152565b600c546001600160a01b0316614644565b604051631a00354f60e01b8152600490fd5b346103f95761002161165e366111a0565b9061166a828285612eaa565b6040519261167784610d9d565b60008452614799565b346103f95760203660031901126103f9576116ba6004356116a0816106fa565b6001600160a01b03166000908152600f6020526040902090565b805461ffff1680158015611790575b61177e57611732610021926117196116ef8461ffff16600052600e602052604060002090565b611705611700825463ffffffff1690565b614844565b63ffffffff1663ffffffff19825416179055565b805461ffff191681555460a01c6001600160401b031690565b907fd2807f1075290cf13c66abcd5afa8d407689dbe9d3f61f0fe261fc09a680b2f96040518061090b6001600160401b0386169482602060009193929361ffff60408201951681520152565b60405163765f8ef360e11b8152600490fd5b5065ffffffffffff6117a96117a484612de9565b613f02565b1615156116c9565b60203660031901126103f9577fda2e4740b4f8dbc9c015838c5afe6c4bc81a903b263dfebfb8776e7886d1f62e60206117f660043560018060a01b03600c541661485a565b604051908152a1005b346103f95760403660031901126103f95760043561181c816106fa565b6003546001600160a01b031633141580611842575b61118e576100219060243590614916565b5033600052600560205260046040600020541615611831565b346103f95760203660031901126103f957610a356040600081805161187f81610d66565b8281528260208201520152600435600052601060205280600020908051916118a683610d66565b5461ffff8116835260ff8160101c161515602084015260018060a01b039060181c168183015251918291829190916040606082019361ffff81511683526020810151151560208401528160018060a01b0391015116910152565b346103f95760203660031901126103f957602061191e600435612fe2565b6040516001600160a01b039091168152f35b346103f95760203660031901126103f95760043561194d816106fa565b60018060a01b0316600052600f602052602065ffffffffffff6119766117a46040600020612de9565b16604051908152f35b346103f95760003660031901126103f9576004546001600160a01b03163381900361118e5761002190614a6a565b346103f95760203660031901126103f9576004356119ca816106fa565b6119d261473e565b601880546001600160a01b0319166001600160a01b039290921691821790557fa2dceaedaba084c95cd135ab944ae32f91bc22573975efedf47c73e19f7490f0600080a2005b346103f95760003660031901126103f957602060405160028152f35b60051115611a3e57565b634e487b7160e01b600052602160045260246000fd5b80516005811015611a3e5782526020808201516001600160a01b03169083015260408082015190830152606090810151910152565b610716909291926101a0604061022083019563ffffffff815116845261ffff60208201511660208501520151611ac860408401825163ffffffff169052565b602081015163ffffffff166060840152604081015165ffffffffffff166080840152606081015165ffffffffffff1660a0840152608081015165ffffffffffff1660c084015260a081015160ff1660e084015260c081015190611b34610100928386019061ffff169052565b60e081015191611b4b610120938487019015159052565b81015191611b60610140938487019015159052565b8101519161016092838601528101516101808501520151910190611a54565b346103f95760203660031901126103f957610a35600435611b9f81610797565b611c4d611c486040928351611bb381610d66565b84600091828152826020820152815192611bcc84610d81565b80845280602085015280838501528060608501528060808501528060a08501528060c08501528060e0850152806101008501528061012085015280610140850152825190611c1982610d30565b80825280602083015280848301526060820152610160840152015261ffff16600052600e602052604060002090565b61314a565b905191829182611a89565b346103f95760203660031901126103f957611c80600435611c78816106fa565b6116a0613cd1565b6001600160401b039081815460a01c161561163b57610021917f78d3d539221b10963e038cddf56db8ac4f42306c68d33a5968714c4709f96a6b82611ccf611cca61090b95612de9565b615b9d565b9265ffffffffffff916108d183421682613f2e565b346103f95760003660031901126103f9576003546040516001600160a01b039091168152602090f35b9291926001600160401b038211610d2b5760405191611d36601f8201601f191660200184610db8565b8294818452818301116103f9578281602093846000960137010152565b9080601f830112156103f957816020611d6e93359101611d0d565b90565b346103f9576020806003193601126103f9576001600160401b036004358181116103f957611da3903690600401611d53565b91611dac613d05565b825115611ebd57600d547f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c604080518560019460018352831c166020820152a18351928311610d2b57611e0983611e04600654612d84565b61317d565b602091601f8411600114611e4c5750508190611e3c93600092611e41575b50508160011b916000199060031b1c19161790565b600655005b015190503880611e27565b60066000529190601f19841690600080516020615e6c833981519152936000915b838310611ea657505050938360019510611e8d575b505050811b01600655005b015160001960f88460031b161c19169055388080611e82565b878501518655948501949381019391810191611e6d565b604051631ba4296560e11b8152600490fd5b346103f957600080600319360112610abe57604051908060085490611ef382612d84565b80855291602091600191828116908115610a915750600114611f1f57610a3586610a2981880382610db8565b9350600884527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b838510611f6457505050508101602001610a2982610a3538610a19565b8054868601840152938201938101611f47565b346103f95760403660031901126103f957610021600435611f97816106fa565b60243590611fa482614752565b6018546001600160a01b03908282169082168103611ff0575b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243646020604051868152a2600c5416614644565b611ff861473e565b611fbd565b60203660031901126103f95761002160043533613add565b346103f95760403660031901126103f957600435612032816106fa565b602435908115158092036103f9573360009081526002602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60203660031901126103f95768929eee149b4bd21268308154146106ec57308155600c5461055c906120e590600435906001600160a01b031661485a565b614ab5565b60a0906102431901126103f9576040519061210482610d10565b816102443560ff811681036103f95781526102643560ff811681036103f95760208201526102843565ffffffffffff811681036103f9576040820152612148610781565b60608201526080612157610e7c565b910152565b346103f95760a03660031901126103f95760405161217981610d10565b60043560ff811681036103f95781526024359060ff821682036103f9576100219160208201526121a761076c565b60408201526121b461072d565b60608201526121c1610e8d565b60808201526121ce613d05565b614bcb565b346103f9576020806003193601126103f9576001600160401b03906004358281116103f957366023820112156103f95780600401359283116103f9576024918360051b36602482850101116103f9576000946020865280602052156122a657916040908360248201833785848301945b835183019382604460408401968a810135918291018837389087305af41561229d5781868267ffffffffffffffe094603f945201953d90523d84606083013e3d01011691858410156122955791612243565b506040820190f35b823d81803e3d90fd5b604085f35b346103f95760403660031901126103f9576004356122c8816106fa565b7f7c9f1d07c2deb6174bfecf44d828df738a12ea9d696940fd5908cebdb3bb7a006020602435926122f884610797565b61230061473e565b6001600160a01b031660008181526005835260409020805461ffff191661ffff86161790559261ffff60405191168152a2005b346103f9576102003660031901126103f95760043561235181610797565b61235a36610f6c565b612362613d05565b60ff60a08201511660ff6123798160115416612e97565b16106110f65761ffff6123a861239d8461ffff16600052600e602052604060002090565b5460201c61ffff1690565b161561247a576123d36123c98361ffff16600052600e602052604060002090565b5463ffffffff1690565b63ffffffff6123f56123ec602085015163ffffffff1690565b63ffffffff1690565b911611612468577f911b091445f62c8543221beafd70df44a27b3bf8a4c72e1e1bebb2e0d3f8bc899161244e8261242e61246394615560565b60016124488461ffff16600052600e602052604060002090565b01613fa1565b60405161ffff90911681529081906020820190565b0390a1005b604051638514ab8760e01b8152600490fd5b60405163ade6a02f60e01b815261ffff83166004820152602490fd5b346103f95760803660031901126103f9576004356124b3816106fa565b602435906124c0826106fa565b606435916001600160401b03918284116103f957366023850112156103f95783600401359283116103f95736602484860101116103f957602461002194019160443591613556565b815161ffff1681526101608101929161071691906020818101516001600160401b0316908301526040818101516001600160401b0316908301526060818101516001600160a01b0316908301526080818101516001600160a01b03169083015260a081015160a083015261258660c082015160c084019060ff169052565b60e0818101519083015261010080820151908301526101208082015163ffffffff1690830152610140908101511515910152565b346103f95760003660031901126103f9576125d3613577565b50600d546018546001600160401b03906001600160a01b0316600c546001600160a01b031661260181614cd3565b612609614d0c565b612612916135db565b60115460ff169060125492612625614d0c565b9460095496612632610df3565b61ffff60808b901c168152986001600160401b03604082901c83161660208b0152166001600160401b031660408901526001600160a01b031660608801526001600160a01b0316608087015260a086015260ff1660c085015260e084015261010083015263ffffffff811661012083015260201c60ff161515610140820152604051610a35819282612508565b346103f95760203660031901126103f9576004356126dc816106fa565b6126e461473e565b600480546001600160a01b0319166001600160a01b039290921691821790557f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af58600080a2005b346103f9576020806003193601126103f95760043561274881612fe2565b5060405190608082019060a0830160405260008252905b6000190190600a90603082820601835304908161275f5790506080601f199182810193030182526040519160009360065461279981612d84565b9060019081811690811561282557506001146127d9575b602f60f81b8752610a3586610a2987826127cd60018d018a6135e8565b03908101835282610db8565b909195506006600052600080516020615e6c833981519152906000915b83831061281257505050830190930192826127cd610a296127b0565b80548784018901529187019181016127f6565b60ff1916878501525050801515028401019350826127cd610a296127b0565b346103f957612852366111a0565b9061285b61473e565b600c546001600160a01b039384169316831461118e5761002192614644565b6040906102031901126103f95760405190604082018281106001600160401b03821117610d2b57604052816102043563ffffffff811681036103f9578152610224359081151582036103f95760200152565b60a0906102e31901126103f957604051906128e682610d10565b816102e4356128f4816106fa565b81526103043561290381610797565b60208201526103243561291581610797565b60408201526103443561292781610797565b60608201526080610364359161293c836106fa565b0152565b346103f957600319610380368201126103f9576004356001600160401b03918282116103f95760c09082360301126103f95761297a610de6565b9080600401358381116103f9576129979060043691840101611d53565b825260248101358381116103f9576129b59060043691840101611d53565b602083015260448101359283116103f95760a4612a0c916129df6100219560043691840101611d53565b60408501526129f06064820161070b565b6060850152612a016084820161070b565b6080850152016112d8565b60a0820152612a1a36610f6c565b612a233661287a565b612a2c366120ea565b91612a36366128cc565b936135ff565b346103f95760203660031901126103f957610021600435612a5c816106fa565b6139f4565b60403660031901126103f957610021600435612a7c816106fa565b60243590613add565b346103f95760203660031901126103f957600435612aa2816106fa565b6019546001600160a01b0391908216330361118e57168015612af8575b600b80546001600160a01b031916821790557fceae6337bc6fb3b4f855081699da99b26942787df3da21344898d2eeb4487d93600080a2005b600a805461ffff60b01b19169055612abf565b346103f95760803660031901126103f957602435612b2881610797565b604435908115158092036103f9576100219160643590612b47826106fa565b612b4f613d05565b61ffff60405193612b5f85610d66565b16835260208301526001600160a01b03166040820152600435614e90565b346103f95760003660031901126103f9576004546040516001600160a01b039091168152602090f35b346103f95760203660031901126103f95760ff612bc1610e4c565b612bc9612dbe565b50166000526017602052610a356040600020612c3960ff60405192612bed84610d10565b548181168452818160081c166020850152612c2965ffffffffffff808360101c1660408701528260401c16606086019065ffffffffffff169052565b60701c16608083019060ff169052565b60405191829182919091608060ff8160a0840195828151168552826020820151166020860152604081015165ffffffffffff80911660408701526060820151166060860152015116910152565b346103f957600080600319360112610abe57604051908060065490612caa82612d84565b80855291602091600191828116908115610a915750600114612cd657610a3586610a2981880382610db8565b935060068452600080516020615e6c8339815191525b838510612d0957505050508101602001610a2982610a3538610a19565b8054868601840152938201938101612cec565b346103f95760403660031901126103f957602060ff612d78600435612d40816106fa565b60243590612d4d826106fa565b60018060a01b03166000526002845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b90600182811c92168015612db4575b6020831014612d9e57565b634e487b7160e01b600052602260045260246000fd5b91607f1691612d93565b60405190612dcb82610d10565b60006080838281528260208201528260408201528260608201520152565b90604051612df681610d10565b60806001600160401b0382945461ffff8116845265ffffffffffff808260101c166020860152808260401c1660408601528160701c16606085015260a01c16910152565b9060018060a01b0316600052600f602052612e586040600020612de9565b9061ffff80835116911603612e7b57612e7765ffffffffffff91613f02565b1690565b50600090565b634e487b7160e01b600052601160045260246000fd5b60ff6000199116019060ff821161095c57565b612edd612ed1612ec4856000526000602052604060002090565b546001600160a01b031690565b6001600160a01b031690565b6001600160a01b0380831692918303610c6b578316928315612fd0578233148015612fa0575b8015612f7e575b15610c6b57612f1c81612f30936144d4565b610c23856000526000602052604060002090565b612f57612f47846000526001602052604060002090565b80546001600160a01b0319169055565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b50612f99612ed1612ec4876000526001602052604060002090565b3314612f0a565b50612fcb612fc433610ca08560018060a01b03166000526002602052604060002090565b5460ff1690565b612f03565b604051633a954ecd60e21b8152600490fd5b6000908152602081905260409020546001600160a01b031690811561300357565b60405163677510db60e11b8152600490fd5b9060405161302281610d30565b809280549060ff8216906005821015611a3e5790835260089190911c6001600160a01b03166020830152600181015460408301526002015460609190910152565b906110126003613071610dd9565b9361312e60ff82546130a763ffffffff6130938184168b9063ffffffff169052565b8260201c1660208a019063ffffffff169052565b6130f565ffffffffffff6130cb818460401c1660408c019065ffffffffffff169052565b65ffffffffffff607084901c82161660608b01528260a01c1660808a019065ffffffffffff169052565b60ff60d082901c83161660a089015260d881901c61ffff1660c089015260e881901c8216151560e089015260f01c161515610100870152565b6001810154610120860152600281015461014086015201613015565b9060405161315781610d66565b60406121576001839561ffff815463ffffffff8116875260201c16602086015201613063565b601f8111613189575050565b6000906006600052600080516020615e6c833981519152906020601f850160051c830194106131d3575b601f0160051c01915b8281106131c857505050565b8181556001016131bc565b90925082906131b3565b601f81116131e9575050565b60009060076000527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688906020601f850160051c83019410613245575b601f0160051c01915b82811061323a57505050565b81815560010161322e565b9092508290613225565b601f811161325b575050565b60009060086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3906020601f850160051c830194106132b7575b601f0160051c01915b8281106132ac57505050565b8181556001016132a0565b9092508290613297565b9081516001600160401b038111610d2b576132e181611e04600654612d84565b602080601f8311600114613318575081906133139394600092611e415750508160011b916000199060031b1c19161790565b600655565b90601f198316946133396006600052600080516020615e6c83398151915290565b926000905b87821061337657505083600195961061335d575b505050811b01600655565b015160001960f88460031b161c19169055388080613352565b8060018596829496860151815501950193019061333e565b9081516001600160401b038111610d2b576133b3816133ae600754612d84565b6131dd565b602080601f83116001146133ea575081906133e59394600092611e415750508160011b916000199060031b1c19161790565b600755565b90601f1983169461341d60076000527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890565b926000905b87821061345a575050836001959610613441575b505050811b01600755565b015160001960f88460031b161c19169055388080613436565b80600185968294968601518155019501930190613422565b9081516001600160401b038111610d2b5761349781613492600854612d84565b61324f565b602080601f83116001146134ce575081906134c99394600092611e415750508160011b916000199060031b1c19161790565b600855565b90601f1983169461350160086000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390565b926000905b87821061353e575050836001959610613525575b505050811b01600855565b015160001960f88460031b161c1916905538808061351a565b80600185968294968601518155019501930190613506565b92613571906107169561356a858588612eaa565b3691611d0d565b92614799565b6040519061016082018281106001600160401b03821117610d2b57604052816101406000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b9190820391821161095c57565b906135fb60209282815194859201610989565b0190565b90939163409feecd19948554806003885561399a575b506060830180519093906001600160a01b0316156139885780515115801561397b575b801561396e575b611ebd5760408501805161ffff16906136716104e2602089019361ffff92839161366b875161ffff1690565b906139c4565b1611928315613931575b83156138f7575b83156138ba575b831561387e575b50821561384c575b505061383a576137f0956121ce6137de946137ad6137eb9861374261372660a0886136c960406137d99b01516132c1565b6136d3815161338e565b6136e06020820151613472565b6080810151613718906136fb906001600160a01b0316612ed1565b60018060a01b03166001600160601b0360a01b600c541617600c55565b01516001600160401b031690565b6001600160401b03166001600160401b0319600d541617600d55565b608060018060a01b039182815116600a549061ffff60a01b602084015160a01b1661ffff60b01b604085015160b01b169161ffff60c01b606086015160c01b169365ffffffffffff60d01b1617171717600a550151166001600160601b0360a01b600b541617600b55565b63ffffffff81511664ff000000006020600954930151151560201b169164ffffffffff19161717600955565b614164565b516001600160a01b031690565b614a6a565b601980546001600160a01b031916331790558061380a5750565b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1565b60405163ca25349360e01b8152600490fd5b90915061387461386d61386460608a015161ffff1690565b935161ffff1690565b61ffff1690565b9116113880613698565b8851919350908390613898906001600160a01b0316612ed1565b151591826138aa575b50509138613690565b511661ffff1615905082386138a1565b60808901519093506138d4906001600160a01b0316612ed1565b1515806138e2575b92613689565b50806138f0835161ffff1690565b16156138dc565b885190935061390e906001600160a01b0316612ed1565b158061391b575b92613682565b5080613929845161ffff1690565b161515613915565b608089015190935061394b906001600160a01b0316612ed1565b1580613958575b9261367b565b5080613966835161ffff1690565b161515613952565b506040810151511561363f565b5060208101515115613638565b6040516349e27cff60e01b8152600490fd5b600181819893981c14303b10156139b65760ff1b1b9438613615565b63f92ee8a96000526004601cfd5b91909161ffff8080941691160191821161095c57565b91909165ffffffffffff8080941691160191821161095c57565b60095460ff8160201c1615908115613a98575b50613a8657613a1581614d1e565b908115613a8257600c54613a3d90613a3990849084906001600160a01b0316614e39565b1590565b613a45575050565b6040519182526001600160a01b0316907f7cf794fd4370119903a621bf4bddb5a3574981ceac924fb9b7da49278f1825c89080602081015b0390a2565b5050565b604051630499ee4560e51b8152600490fd5b6001600160a01b0383166000908152600f60205260409020613acc925063ffffffff90613ac490611429565b9116906139da565b65ffffffffffff4291161138613a07565b9068929eee149b4bd2126891308354146106ec5730835560009180613c54575b506001600160a01b0381166000908152600f60205260409020613b239061048690610476565b613bb657613b90613bb192613b43613b3d61048685613d38565b84613dd0565b613b4d8184615164565b600a5461051e9061ffff9061051890613b766001600160a01b03821660a083901c85168761523a565b600b549093906001600160a01b03169160b01c168561523a565b6001600160a01b0382166000908152600f602052604090206105569061054e565b389055565b6001600160a01b0381163303613bd3575b613b90613bb192613b43565b61ffff80613bf661054e8460018060a01b0316600052600f602052604060002090565b1615159081613c4b575b81613c1e575b5015613bc757604051630dd9f36960e21b8152600490fd5b6001600160a01b0383166000908152600f60205260409020909150613c429061054e565b16151538613c06565b60009150613c00565b600c54919250613c6c916001600160a01b031661485a565b9038613afd565b6107163433613add565b61ffff918216908216039190821161095c57565b9190820180921161095c57565b8181029291811591840414171561095c57565b8115613cbb570490565b634e487b7160e01b600052601260045260246000fd5b6003546001600160a01b031633141580613cec575b61118e57565b5033600052600560205260036040600020541615613ce6565b6003546001600160a01b031633141580613d1f5761118e57565b5033600052600560205260016040600020541615613ce6565b90600d546001600160401b0390818160401c169180821683101561136757821461095c576fffffffffffffffff00000000000000001916600191909101604081811b6fffffffffffffffff00000000000000001692909217600d556001600160a01b039093166000908152600f60205220805467ffffffffffffffff60a01b191660a084901b67ffffffffffffffff60a01b16179055565b6001600160a01b038082169291908315612fd057600093838552846020526040918286205416613ef157838552602085905281852080546001600160a01b0319166001600160a01b0385161790558390857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4805191613e5183610d9d565b848352803b613e62575b5050505050565b60a46020938695845196879563150b7a0287523388880152860152606085015260808085015280518091818060a0880152613edd575b5050019085601c8401915af115613ece575b5163757a42ff60e11b01613ec15780808080613e5b565b63d1a57ed690526004601cfd5b3d15613eaa57903d90823e3d90fd5b818760c08801920160045afa508038613e98565b815163c991cbb160e01b8152600490fd5b6060015165ffffffffffff90811642811115613f2757814216900390811161095c5790565b5050600090565b9065ffffffffffff60401b82549160401b169065ffffffffffff60401b1916179055565b9080516005811015611a3e5782546020830151610100600160a81b0360089190911b1660ff929092166001600160a81b0319909116171782556040810151600183015560600151600290910155565b600361016061071693613fd1613fbb825163ffffffff1690565b855463ffffffff191663ffffffff909116178555565b614007613fe5602083015163ffffffff1690565b855467ffffffff00000000191660209190911b67ffffffff0000000016178555565b61402361401d604083015165ffffffffffff1690565b85613f2e565b61405d614039606083015165ffffffffffff1690565b855465ffffffffffff60701b191660709190911b65ffffffffffff60701b16178555565b614097614073608083015165ffffffffffff1690565b855465ffffffffffff60a01b191660a09190911b65ffffffffffff60a01b16178555565b6140c26140a860a083015160ff1690565b855460ff60d01b191660d09190911b60ff60d01b16178555565b6140f06140d460c083015161ffff1690565b855461ffff60d81b191660d89190911b61ffff60d81b16178555565b61411a61410060e0830151151590565b855460ff60e81b191690151560e81b60ff60e81b16178555565b61414561412b610100830151151590565b855460ff60f01b191690151560f01b60ff60f01b16178555565b6101208101516001850155610140810151600285015501519101613f52565b61416d81615560565b600d549061ffff91828160801c1683811461095c577f499b5d0793d3afc18c6e7bfe3bb8cd4e51c6365f781235e1b2fa1c879c095c499360046101606143ee95600161244e95019561ffff60801b8760801b169061ffff60801b191617600d55604051936141da85610d66565b600085526020850190871680825260408601928352600052600e60205261421d63ffffffff6040600020965116869063ffffffff1663ffffffff19825416179055565b5165ffff0000000085549160201b169065ffff0000000019161784556143cf6001850191519161426a614254845163ffffffff1690565b825463ffffffff191663ffffffff909116178255565b6142a061427e602085015163ffffffff1690565b825467ffffffff00000000191660209190911b67ffffffff0000000016178255565b6142b66108cb604085015165ffffffffffff1690565b6142f06142cc606085015165ffffffffffff1690565b825465ffffffffffff60701b191660709190911b65ffffffffffff60701b16178255565b61432a614306608085015165ffffffffffff1690565b825465ffffffffffff60a01b191660a09190911b65ffffffffffff60a01b16178255565b61435561433b60a085015160ff1690565b825460ff60d01b191660d09190911b60ff60d01b16178255565b61438361436760c085015161ffff1690565b825461ffff60d81b191660d89190911b61ffff60d81b16178255565b6143ad61439360e0850151151590565b825460ff60e81b191690151560e81b60ff60e81b16178255565b6101008301511515815460ff60f01b191690151560f01b60ff60f01b16179055565b6101208101516002850155610140810151600385015501519101613f52565b0390a1565b8181036143fe575050565b8154815461ffff191661ffff91909116178155610716916001600160401b03908054835467ffffffffffff0000191667ffffffffffff000090911617835561448165ffffffffffff61445681845460401c1686613f2e565b8254855465ffffffffffff60701b1916607091821c92909216901b65ffffffffffff60701b16178455565b54825467ffffffffffffffff60a01b191660a091821c92909216901b67ffffffffffffffff60a01b16179055565b908082036144bb575050565b6002818192548455600181015460018501550154910155565b906001600160401b036144fc6104768360018060a01b0316600052600f602052604060002090565b16614632576001600160a01b038216614513575050565b6001600160a01b0382166000908152600f602052604090206145349061054e565b61ffff8116151590816145ff575b506145ed57816145c16145db9261458e6145716107169660018060a01b0316600052600f602052604060002090565b6001600160a01b0383166000908152600f602052604090206143f3565b6001600160a01b038381166000908152600f602090815260408083208390556016909152808220939092168152206144af565b6001600160a01b0316600090815260166020526040902090565b60026000918281558260018201550155565b604051630270159160e21b8152600490fd5b61462c91506001614621613a399261ffff16600052600e602052604060002090565b015460f01c60ff1690565b38614542565b60405163882f073f60e01b8152600490fd5b9091906001600160a01b0390818416156146a857168061466857506107169161562a565b602091601093601452603452604460009384809363a9059cbb60601b82525af13d15600183511417161561469b57603452565b6390b8ec1890526004601cfd5b604051630da30f6560e31b8152600490fd5b60125415612e7b5760018060a01b0316600052601660205260406000206040516146e381610d66565b61471361470e8354808452604060026001870154966020870197885201549401938452601554613c9e565b615648565b9051906000828201928312911290801582169115161761095c5760601c9051810390811161095c5790565b6003546001600160a01b0316330361118e57565b600c54614767906001600160a01b0316614cd3565b90601354601454810390811161095c57820391821161095c571161478757565b604051631e9acf1760e31b8152600490fd5b90929192803b6147aa575b50505050565b60a460209360405195869463150b7a028652338787015260018060a01b03166040860152606085015260808085015280518091818060a0880152614830575b505001906000601c8401915af115614821575b5163757a42ff60e11b0161481357388080806147a4565b63d1a57ed66000526004601cfd5b3d156147fc573d6000823e3d90fd5b818760c08801920160045afa5080386147e9565b63ffffffff908116600019019190821161095c57565b90919082906001600160a01b0381168061488a575050340361487857565b60405163e10d68f760e01b8152600490fd5b91909293503461487857602060006064601c826148a688614cd3565b9660405196606052306040523360601b602c526323b872dd60601b600c525af13d156001600051141716156148ef57611d6e926148ea916000606052604052614cd3565b6135db565b637939f4246000526004601cfd5b8181039291600013801582851316918412161761095c57565b8115613a82576001600160a01b0381169182156149d85760125481810180911161095c576012556001600160a01b03821660009081526016602052604090209081549281840180941161095c577f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed93613a7d93556149c660026149bd6149a161470e86601554613c9e565b6001600160a01b03909416600090815260166020526040902090565b019182546148fd565b90556040519081529081906020820190565b604051634971ba2d60e01b8152600490fd5b8115613a82576001600160a01b0381169182156149d8576012549080820180921161095c577f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed92613a7d926012558460005260166020526040600020614a51838254613c91565b90556149c660026149bd6149a161470e86601554613c9e565b60018060a01b03166001600160601b0360a01b81816003541617600355600454166004557fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36600080a2565b6012548015614b2c57606082901b908215600160601b84840414171561095c57614ade91613cb1565b60155490810180911161095c5760155560135481810180911161095c577f81d41c1164884f982ea287ef660cfc57fcb017b60a636db1b8045e7f0edda6b891602091601355604051908152a1565b60405163bc9ed39f60e01b8152600490fd5b60ff1660ff811461095c5760010190565b815181546020840151604085015167ffffffffffffffff1990921660ff939093169290921760089290921b61ff00169190911760109190911b67ffffffffffff00001617815590608090614baf65ffffffffffff60608301511684613f2e565b0151815460ff60701b191660709190911b60ff60701b16179055565b6060810165ffffffffffff9081614be8825165ffffffffffff1690565b1615614cc1575b60ff614bfc845160ff1690565b161580614ca3575b6110f6575165ffffffffffff16429116116110f657641000000000614c2882615711565b116110f65761071690614c9e614c4060115460ff1690565b60405160ff821681527f4046e5e6162a254f238b2bb3420af0aedad1a22e24ddeec083669b1fdfd08cd190602090a1614c8b614c7b82614b3e565b60ff1660ff196011541617601155565b60ff166000526017602052604060002090565b614b4f565b50614cbb614cb5608085015160ff1690565b60ff1690565b15614c04565b65ffffffffffff428316168152614bef565b6001600160a01b03168015614d07576020602460108293306014526370a0823160601b6000525afa601f3d11166020510290565b504790565b601354601454810390811161095c5790565b6001600160a01b038116600081815260166020526040812054909392908015614e2757614d4a826146ba565b614dac575b6012549080820391821161095c57614da36145db7fdb79cc492679ef2624944d6ed3cdbad5b974b5550de330ae18922f2944eec78a9460209460125560018060a01b03166000526016602052604060002090565b604051908152a2565b9350614db7816146ba565b8015611285576001600160a01b038216600090815260166020526040902060010180549082820180921161095c575560145481810180911161095c57601455827ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe6020604051848152a293614d4f565b6040516397b879e360e01b8152600490fd5b6001600160a01b0390828216156146a8571680614e60575060008080933893620186a0f190565b60106000604492602095829560145260345263a9059cbb60601b82525af13d156001600051141716906000603452565b906000828152601060205260ff604082205460101c16614fb55761ffff80614eba845161ffff1690565b1615614f775761138890614ed0845161ffff1690565b1611614f6557614f617fc528e482b688c33ac1eff335244576f58e3e04e5a8a2551156edb7ba2b99b66092614f0f856000526010602052604060002090565b8151815461ffff191661ffff91909116178155906020810151825460409092015162010000600160b81b031990921690151560101b62ff0000161760189190911b6301000000600160b81b0316179055565b80a2565b60405163800c7e9160e01b8152600490fd5b507f25ff42f5a10d7372b632c182dc576cf993d4c3d2caeeedb5e24e18e6bb015e74915080614fb0846000526010602052604060002090565b5580a2565b60405163208097e360e11b8152600490fd5b6001600160a01b0381166000908152600f6020526040902092939290614fef825461ffff1690565b9061ffff958681161560001461515e575081905b86821615615155575b6150248261ffff16600052600e602052604060002090565b9285978084169116036150c1575b505065ffffffffffff61507461071695967f70e91d54913ea59503e05be38212b74b1d03802866472a313a5dd07a5fd7a3989361506e86612de9565b9061585d565b9261507f8482615987565b5461090b6001600160401b038260a01c1695869560405194859460701c1691849160409194936060840195845265ffffffffffff809216602085015216910152565b9095506150d761386d835461ffff9060201c1690565b15615139576150748261512161071697988461511c8965ffffffffffff977f70e91d54913ea59503e05be38212b74b1d03802866472a313a5dd07a5fd7a398996157bd565b61537c565b61512f6002820154876135db565b9796509250615032565b60405163ade6a02f60e01b815261ffff87166004820152602490fd5b6001915061500c565b90615003565b6001600160a01b0381166000908152600f60205260409020805461ffff94939290851690819081156151ef575b6151a98261ffff16600052600e602052604060002090565b9285978316036150c157505065ffffffffffff61507461071695967f70e91d54913ea59503e05be38212b74b1d03802866472a313a5dd07a5fd7a3989361506e86612de9565b60019150615191565b60005260106020526040600020549060018060a01b03808360181c1690811515928361522d575b505050612e7b5761ffff1690565b161415905038808061521f565b600093929161ffff16908161524e57505050565b6127109294509061525e91613c9e565b0491826152685750565b7f41a4b099d16420f275b83ab9bcb5571fa53e7b424a4f7177e0a6e6bce42575a2602060018060a01b036152a1868583600c5416614644565b604051938685521692a2565b91906152d96127109161ffff809416600052600e602052600160406000200154938460d81c1690613c9e565b04908115615362576107169260ff6120e59260d01c16600052601760205261535c615356604060002061535160ff6040519261531484610d10565b548181168452818160081c16602085015265ffffffffffff808260101c1660408601528160401c16606085015260701c16608083019060ff169052565b615711565b84613c9e565b906149ea565b505050565b90600163ffffffff8093160191821161095c57565b6001600160a01b03166000908152600f60205260409020906153a0825461ffff1690565b9161ffff808416908084168214613e5b576153cc61239d8561ffff16600052600e602052604060002090565b161561550e576104867fd2807f1075290cf13c66abcd5afa8d407689dbe9d3f61f0fe261fc09a680b2f9939261546f921515806154ee575b61543561541f8661ffff16600052600e602052604060002090565b611705615430825463ffffffff1690565b615367565b815461ffff191661ffff861617825560009061548e575b61546961546465ffffffffffff610476931642613c91565b615a45565b82615a5f565b6040805161ffff95861681529290941660208301529281908101613a7d565b5061047661546961546465ffffffffffff6154e46154ba8961ffff16600052600e602052604060002090565b6154d28c61ffff16600052600e602052604060002090565b6154de6115d389612de9565b91615a1c565b935050505061544c565b6155096116ef8861ffff16600052600e602052604060002090565b615404565b60405163ade6a02f60e01b815261ffff84166004820152602490fd5b60207ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7916001600160401b0360405191168152a1565b63ffffffff615573825163ffffffff1690565b16156156185761271061ffff61558e60c084015161ffff1690565b1611614f655765ffffffffffff6155ae608083015165ffffffffffff1690565b16806155c4575b50610160610716910151615af6565b428111908115916155ed575b506155db57386155b5565b604051637471619d60e11b8152600490fd5b9050615610615605606084015165ffffffffffff1690565b65ffffffffffff1690565b1015386155d0565b604051634ef2a88b60e11b8152600490fd5b600080809338935af11561563a57565b63b12d13eb6000526004601cfd5b600160ff1b8110156156575790565b6335278d126000526004601cfd5b6001929091835b808211615677575050565b90928060001904811161095c57818416615697575b800292811c9061566c565b8094029361568c565b811561570a578015613f27578080600114615702576002146156f25760208210610133821016604e8310600b831016176156ee57906156de91615665565b908160001904811161095c570290565b0a90565b5060ff811161095c576001901b90565b505050600190565b5050600190565b9060ff825116156157b15765ffffffffffff80606084015116420342811161095c576157439160408501511690613cb1565b615751614cb5845160ff1690565b9081811161579d57608061578661578f93615780614cb59461577a614cb560208b015160ff1690565b926135db565b906156a0565b94015160ff1690565b8083106157995750565b9150565b505090614cb56080611d6e92015160ff1690565b90608060ff9101511690565b9091600182015465ffffffffffff8160701c16421061584b5782549063ffffffff809160201c16908216101561582a5750600282015480911061581057509061580b60046107169301613015565b615bc1565b604051636681d65d60e01b81526004810191909152602490fd5b604051637ad86eb160e01b815260209190911c61ffff166004820152602490fd5b6040516376d4f7cf60e11b8152600490fd5b90929161586c60018301613063565b9161587a60e0840151151590565b6159755761014083015180831061595b57509361589d6158aa926158a596615dca565b948591613f02565b6139da565b9065ffffffffffff90816158c7604083015165ffffffffffff1690565b16801515908161594f575b5061593d57608001906158ee615605835165ffffffffffff1690565b15159283615912575b50505061590057565b60405163290b7b8360e21b8152600490fd5b61593492935061560591615927911642613c91565b925165ffffffffffff1690565b103880806158f7565b604051631447377560e01b8152600490fd5b905082841611386158d2565b604051634055b2b360e01b81526004810191909152602490fd5b6040516390cb9c7f60e01b8152600490fd5b9065ffffffffffff825481429160101c16116000146159de576159b783926159d992610716955460101c166139da565b825467ffffffffffff0000191660109190911b67ffffffffffff000016178255565b615a9c565b1642019081421161095c576159d96159b761071693615a45565b6020015165ffffffffffff90811642811115613f275742810390811161095c571690565b90611d6e9265ffffffffffff615a34615a3c93615e0f565b911690613c9e565b60501c90615dca565b66010000000000008110156156575765ffffffffffff1690565b805465ffffffffffff60701b1916607083901b65ffffffffffff60701b1617815561071691615a8d906159b7565b65ffffffffffff421690613f2e565b61071690615ad2615ac0615ab26115d384612de9565b65ffffffffffff42166139da565b615acc611cca84612de9565b906139da565b815465ffffffffffff60701b191660709190911b65ffffffffffff60701b16179055565b8051615b0181611a34565b615b0a81611a34565b615b6c575b60048151615b1c81611a34565b615b2581611a34565b149081615b49575b50615b3457565b604051600162ec8cc360e01b03198152600490fd5b6040015162010000811080159250615b63575b5038615b2d565b90501538615b5c565b60208101516001600160a01b031615615b34576060810151615b0f57604051600162ec8cc360e01b03198152600490fd5b6040015165ffffffffffff90811642811115613f275742810390811161095c571690565b9081516005811015611a3e57615bd681611a34565b15613a8257600060208092615bf6612ed18387015160018060a01b031690565b60028651615c0381611a34565b615c0c81611a34565b148015615dad575b15615ca5576040516370a0823160e01b81526001600160a01b039283166004820152935083916024918391165afa908115615ca057606092600092615c73575b5050915b015111615c6157565b604051635ef5bfc360e11b8152600490fd5b615c929250803d10615c99575b615c8a8183610db8565b810190615e3e565b3880615c54565b503d615c80565b615e4d565b60038651615cb281611a34565b615cbb81611a34565b03615d36576040868101519051627eeac760e11b81526001600160a01b039093166004840152602483015290925082908180604481015b03916001600160a01b03165afa908115615ca057606092600092615d19575b505091615c58565b615d2f9250803d10615c9957615c8a8183610db8565b3880615d11565b91509160048551615d4681611a34565b615d4f81611a34565b03615da05750615cf2918391615d686040870151615e59565b6040516315aafee560e01b815261ffff90911660048201526001600160a01b0390921660248301529092839190829081906044820190565b9150506060915091615c58565b5060018651615dbb81611a34565b615dc481611a34565b14615c14565b600381015415615e00578160501b91808304600160501b149015171561095c57611d6e91615dfa61546492615e0f565b90613cb1565b63ffffffff9150600101541690565b60038101548060501b90808204600160501b149015171561095c5763ffffffff6001611d6e9301541690613cb1565b908160209103126103f9575190565b6040513d6000823e3d90fd5b620100008110156156575761ffff169056fef652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3fa26469706673582212209038534f3749deff6e3e3263fdb6cb5bf2fa5ad223c3a88058c7e3aed86a706d64736f6c63430008190033