Overview ERC721
Total Supply:
1 @fifa02

Holders:
1
Profile Summary
Blockchain:
Base (8453)

Contract Source Code Verified (Partial Match)
Contract Name:
ClubCastNft

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 23 Apr 2024 21:49:49 GMT
ClubCastNft.sol
ClubCastNft.sol
ClubCastNft.sol


Contract ABI
[
  {
    "inputs": [],
    "name": "CheckpointUnorderedInsertion",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ECDSAInvalidSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "ECDSAInvalidSignatureLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "ECDSAInvalidSignatureS",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      },
      {
        "internalType": "uint48",
        "name": "clock",
        "type": "uint48"
      }
    ],
    "name": "ERC5805FutureLookup",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ERC6372InconsistentClock",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721IncorrectOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721InsufficientApproval",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOperator",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721NonexistentToken",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "currentNonce",
        "type": "uint256"
      }
    ],
    "name": "InvalidAccountNonce",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "bits",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "SafeCastOverflowedUintDowncast",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      }
    ],
    "name": "VotesExpiredSignature",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromDelegate",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toDelegate",
        "type": "address"
      }
    ],
    "name": "DelegateChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "previousVotes",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newVotes",
        "type": "uint256"
      }
    ],
    "name": "DelegateVotesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "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": [],
    "name": "CLOCK_MODE",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_getTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "controller",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "addVotes",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "controller",
        "type": "address"
      }
    ],
    "name": "burn",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "clock",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "clubCast",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "controllerTokens",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "creatorAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      }
    ],
    "name": "delegate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "delegateBySig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "delegates",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "eip712Domain",
    "outputs": [
      {
        "internalType": "bytes1",
        "name": "fields",
        "type": "bytes1"
      },
      {
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "version",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "chainId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "verifyingContract",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "uint256[]",
        "name": "extensions",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "getVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_clubCast",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_creatorAddress",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_tokenUri",
        "type": "string"
      }
    ],
    "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": "controller",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "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": "controller",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "removeVotes",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenControllers",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "tokenOwned",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_tokenUri",
        "type": "string"
      }
    ],
    "name": "updateTokenUri",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040525f600655348015610013575f80fd5b5060015f55613000806100255f395ff3fe608060405234801561000f575f80fd5b5060043610610208575f3560e01c806389afcb441161011f578063bda252f6116100a9578063ce6a088011610079578063ce6a0880146104d9578063de63298d146104ec578063e927fc5c146104ff578063e985e9c514610512578063ee1fe2ad14610525575f80fd5b8063bda252f614610478578063c3cda520146104a0578063c79b04c9146104b3578063c87b56dd146104c6575f80fd5b8063966595dc116100ef578063966595dc1461040157806398ea728b146104205780639ab24eb01461043f578063a22cb46514610452578063b88d4fde14610465575f80fd5b806389afcb44146103b45780638e539e8c146103c757806391ddadf4146103da57806395d89b41146103f9575f80fd5b806342842e0e116101a05780636352211e116101705780636352211e1461032457806370a08231146103375780637ecebe001461034a57806382e1350a1461039157806384b0196e14610399575f80fd5b806342842e0e146102e35780634bf5d7e9146102f6578063587cde1e146102fe5780635c19a95c14610311575f80fd5b806323b872dd116101db57806323b872dd146102895780633497caf41461029c5780633a46b1a8146102af5780633f2f5ee2146102d0575f80fd5b806301ffc9a71461020c57806306fdde0314610234578063081812fc14610249578063095ea7b314610274575b5f80fd5b61021f61021a36600461283e565b610538565b60405190151581526020015b60405180910390f35b61023c610589565b60405161022b919061289c565b61025c6102573660046128ae565b61062a565b6040516001600160a01b03909116815260200161022b565b6102876102823660046128e0565b61063e565b005b610287610297366004612908565b610679565b60055461025c906001600160a01b031681565b6102c26102bd3660046128e0565b6106b9565b60405190815260200161022b565b6102876102de3660046129e6565b61074e565b6102876102f1366004612908565b6108c1565b61023c6108db565b61025c61030c366004612a89565b610953565b61028761031f366004612a89565b61097c565b61025c6103323660046128ae565b6109c3565b6102c2610345366004612a89565b6109cd565b6102c2610358366004612a89565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b6102c2610a9c565b6103a1610ae3565b60405161022b9796959493929190612aa2565b6102c26103c2366004612a89565b610b8c565b6102c26103d53660046128ae565b610c78565b6103e2610cf2565b60405165ffffffffffff909116815260200161022b565b61023c610d00565b6102c261040f366004612a89565b60046020525f908152604090205481565b6102c261042e366004612a89565b60036020525f908152604090205481565b6102c261044d366004612a89565b610d3e565b610287610460366004612b36565b610d9c565b610287610473366004612b6f565b610da7565b61025c6104863660046128ae565b60026020525f90815260409020546001600160a01b031681565b6102876104ae366004612be6565b610dea565b6102876104c1366004612c41565b610ea6565b61023c6104d43660046128ae565b610f16565b6102876104e73660046128e0565b610fa8565b6102876104fa3660046128e0565b61107b565b60015461025c906001600160a01b031681565b61021f610520366004612c73565b61114e565b6102c2610533366004612c73565b61119a565b5f6001600160e01b031982166380ac58cd60e01b148061056857506001600160e01b03198216635b5e139f60e01b145b8061058357506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f80516020612f8b83398151915280546060919081906105a890612ca4565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490612ca4565b801561061f5780601f106105f65761010080835404028352916020019161061f565b820191905f5260205f20905b81548152906001019060200180831161060257829003601f168201915b505050505091505090565b5f61063482611273565b50610583826112aa565b5f818152600260205260409020546001600160a01b03163381900361066f5761066a83835f60016112e3565b505050565b61066a83836113f6565b5f818152600260205260409020546001600160a01b0316338190036106a8576106a3848484611401565b6106b3565b6106b38484846114ae565b50505050565b5f5f80516020612f6b833981519152816106d1610cf2565b90508065ffffffffffff16841061071157604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044015b60405180910390fd5b61073c61071d85611531565b6001600160a01b0387165f908152600185016020526040902090611567565b6001600160d01b031695945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156107935750825b90505f8267ffffffffffffffff1660011480156107af5750303b155b9050811580156107bd575080155b156107db5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561080557845460ff60401b1916600160401b1785555b61080f8888611617565b61083288604051806040016040528060018152602001603160f81b815250611629565b600580546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600761086e8782612d29565b5083156108b557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b61066a83838360405180602001604052805f815250610da7565b60606108e561163b565b65ffffffffffff166108f5610cf2565b65ffffffffffff161461091b576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6001600160a01b039081165f9081525f80516020612f6b83398151915260205260409020541690565b335f81815260036020526040902054156109b5576001600160a01b0381165f908152600360205260409020546109b1816109c3565b9150505b6109bf8183611645565b5050565b5f61058382611273565b5f6001600160a01b0382166109f7576040516322718ad960e21b81525f6004820152602401610708565b6001600160a01b038281165f9081526004602081815260408084205480855260029092529283902054600554600154945163020235ff60e01b8152948616938501939093528416602484018190529093909291169063020235ff90604401602060405180830381865afa158015610a70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a949190612de5565b949350505050565b5f5f80516020612f6b833981519152610ad47fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d026116cc565b6001600160d01b031691505090565b5f60608082808083815f80516020612fab8339815191528054909150158015610b0e57506001810154155b610b525760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610708565b610b5a611704565b610b62611742565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b0381165f90815260036020526040812054808203610bc35760405162461bcd60e51b815260040161070890612dfc565b6005546001600160a01b03163314610c165760405162461bcd60e51b815260206004820152601660248201527527b7363c9021b63ab121b0b9ba1031b0b710313ab93760511b6044820152606401610708565b5f81815260026020908152604080832080546001600160a01b03191690556001600160a01b038616835260039091528120829055600481610c56846109c3565b6001600160a01b0316815260208101919091526040015f205561058381611780565b5f5f80516020612f6b83398151915281610c90610cf2565b90508065ffffffffffff168410610ccb57604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610708565b610ce1610cd785611531565b6002840190611567565b6001600160d01b0316949350505050565b5f610cfb61163b565b905090565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060915f80516020612f8b833981519152916105a890612ca4565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f80516020612f6b83398151915290610d8c906116cc565b6001600160d01b03169392505050565b6109bf3383836117b8565b5f828152600260205260409020546001600160a01b031633819003610dd757610dd285858585611867565b610de3565b610de38585858561187e565b5050505050565b83421115610e0e57604051632341d78760e11b815260048101859052602401610708565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90610e8790610e7f9060a00160405160208183030381529060405280519060200120611889565b8585856118b5565b9050610e9381876118e1565b610e9d8188611645565b50505050505050565b6001546001600160a01b03163314610f0a5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c792063726561746f722063616e2075706461746520746f6b656e2055526044820152604960f81b6064820152608401610708565b60076109bf8282612d29565b606060078054610f2590612ca4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5190612ca4565b8015610f9c5780601f10610f7357610100808354040283529160200191610f9c565b820191905f5260205f20905b815481529060010190602001808311610f7f57829003601f168201915b50505050509050919050565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810db1d5890d85cdd0818d85b8818d85b1b60521b6044820152606401610708565b6001600160a01b0382165f9081526003602052604081205490036110315760405162461bcd60e51b815260040161070890612dfc565b6001600160a01b0382165f9081526003602052604081205490611053826109c3565b90505f61105f82610953565b90506001600160a01b03811615610de357610de3825f86611952565b6005546001600160a01b031633146110ce5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810db1d5890d85cdd0818d85b8818d85b1b60521b6044820152606401610708565b6001600160a01b0382165f9081526003602052604081205490036111045760405162461bcd60e51b815260040161070890612dfc565b6001600160a01b0382165f9081526003602052604081205490611126826109c3565b90505f61113282610953565b90506001600160a01b03811615610de357610de35f8386611952565b6001600160a01b039182165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6005545f906001600160a01b031633146111ef5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810db1d5890d85cdd0818d85b881b5a5b9d60521b6044820152606401610708565b5f60065f81546111fe90612e47565b91829055505f81815260026020908152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526003909152902081905590506112478380611645565b61125183826119c8565b6001600160a01b0383165f908152600460205260409020819055905092915050565b5f8061127e836119e1565b90506001600160a01b03811661058357604051637e27328960e01b815260048101849052602401610708565b5f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b031690565b5f80516020612f8b833981519152818061130557506001600160a01b03831615155b156113c6575f61131485611273565b90506001600160a01b038416158015906113405750836001600160a01b0316816001600160a01b031614155b80156113535750611351818561114e565b155b1561137c5760405163a9fbf51f60e01b81526001600160a01b0385166004820152602401610708565b82156113c45784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5f93845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6109bf828233611a1a565b6001600160a01b03821661142a57604051633250574960e11b81525f6004820152602401610708565b5f61143683835f611a27565b90506001600160a01b03811661146257604051637e27328960e01b815260048101839052602401610708565b836001600160a01b0316816001600160a01b0316146106b3576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610708565b6001600160a01b0382166114d757604051633250574960e11b81525f6004820152602401610708565b5f6114e3838333611a27565b9050836001600160a01b0316816001600160a01b0316146106b3576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610708565b5f65ffffffffffff821115611563576040516306dfcc6560e41b81526030600482015260248101839052604401610708565b5090565b81545f90818160058111156115c3575f61158084611ba7565b61158a9085612e5f565b5f8881526020902090915081015465ffffffffffff90811690871610156115b3578091506115c1565b6115be816001612e72565b92505b505b5f6115d087878585611c8b565b9050801561160a576115f4876115e7600184612e5f565b5f91825260209091200190565b54600160301b90046001600160d01b031661160c565b5f5b979650505050505050565b61161f611cea565b6109bf8282611d35565b611631611cea565b6109bf8282611d65565b5f610cfb43611531565b5f80516020612f6b8339815191525f61165d84610953565b6001600160a01b038581165f8181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106b381846116c787611dc4565b611dce565b80545f9080156116fb576116e5836115e7600184612e5f565b54600160301b90046001600160d01b03166116fd565b5f5b9392505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f80516020612fab833981519152916105a890612ca4565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f80516020612fab833981519152916105a890612ca4565b5f61178c5f835f611a27565b90506001600160a01b0381166109bf57604051637e27328960e01b815260048101839052602401610708565b5f80516020612f8b8339815191526001600160a01b0383166117f857604051630b61174360e31b81526001600160a01b0384166004820152602401610708565b6001600160a01b038481165f818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b611872848484611401565b6106b384848484611f3f565b611872848484610679565b5f61058361189561205e565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f806118c588888888612067565b9250925092506118d5828261212f565b50909695505050505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915581811461066a576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610708565b5f80516020612f6b8339815191526001600160a01b03841661198957611986816002016121e7611981856121f2565b612225565b50505b6001600160a01b0383166119ad576119aa8160020161225d611981856121f2565b50505b6106b36119b985610953565b6119c285610953565b84611dce565b6109bf828260405180602001604052805f815250612268565b5f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031690565b61066a83838360016112e3565b5f80611a3485858561227e565b600554600154604051636c4d3d2760e01b81526001600160a01b03918216600482015281841660248201528882166044820152606481018890529293501690636c4d3d27906084015f604051808303815f87803b158015611a93575f80fd5b505af1158015611aa5573d5f803e3d5ffd5b5050506001600160a01b038083165f908152600460205260408082208290559188168082529190208690551580159150611ae757506001600160a01b03811615155b15610a94575f8481526002602052604080822054600554600154925163020235ff60e01b81526001600160a01b039384166004820152918316602483018190529392169063020235ff90604401602060405180830381865afa158015611b4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b739190612de5565b90506001811115611b9357611b938388611b8e600185612e5f565b611952565b611b9d8788611645565b5050949350505050565b5f815f03611bb657505f919050565b5f6001611bc284612299565b901c6001901b90506001818481611bdb57611bdb612e85565b048201901c90506001818481611bf357611bf3612e85565b048201901c90506001818481611c0b57611c0b612e85565b048201901c90506001818481611c2357611c23612e85565b048201901c90506001818481611c3b57611c3b612e85565b048201901c90506001818481611c5357611c53612e85565b048201901c90506001818481611c6b57611c6b612e85565b048201901c90506116fd81828581611c8557611c85612e85565b0461232c565b5f5b81831015611ce2575f611ca08484612341565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff161115611cce57809250611cdc565b611cd9816001612e72565b93505b50611c8d565b509392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611d3357604051631afcd79f60e31b815260040160405180910390fd5b565b611d3d611cea565b5f80516020612f8b83398151915280611d568482612d29565b50600181016106b38382612d29565b611d6d611cea565b5f80516020612fab8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102611da68482612d29565b5060038101611db58382612d29565b505f8082556001909101555050565b5f610583826109cd565b5f80516020612f6b8339815191526001600160a01b0384811690841614801590611df757505f82115b156106b3576001600160a01b03841615611e9b576001600160a01b0384165f90815260018201602052604081208190611e369061225d611981876121f2565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e90929190918252602082015260400190565b60405180910390a250505b6001600160a01b038316156106b3576001600160a01b0383165f90815260018201602052604081208190611ed5906121e7611981876121f2565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611f2f929190918252602082015260400190565b60405180910390a2505050505050565b6001600160a01b0383163b156106b357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611f81903390889087908790600401612e99565b6020604051808303815f875af1925050508015611fbb575060408051601f3d908101601f19168201909252611fb891810190612ed5565b60015b612022573d808015611fe8576040519150601f19603f3d011682016040523d82523d5f602084013e611fed565b606091505b5080515f0361201a57604051633250574960e11b81526001600160a01b0385166004820152602401610708565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610de357604051633250574960e11b81526001600160a01b0385166004820152602401610708565b5f610cfb61235b565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156120a057505f91506003905082612125565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156120f1573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661211c57505f925060019150829050612125565b92505f91508190505b9450945094915050565b5f82600381111561214257612142612ef0565b0361214b575050565b600182600381111561215f5761215f612ef0565b0361217d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561219157612191612ef0565b036121b25760405163fce698f760e01b815260048101829052602401610708565b60038260038111156121c6576121c6612ef0565b036109bf576040516335e2f38360e21b815260048101829052602401610708565b5f6116fd8284612f04565b5f6001600160d01b03821115611563576040516306dfcc6560e41b815260d0600482015260248101839052604401610708565b5f80612250612232610cf2565b61224861223e886116cc565b868863ffffffff16565b8791906123ce565b915091505b935093915050565b5f6116fd8284612f2b565b61227283836123db565b61066a5f848484611f3f565b5f8061228b85858561243c565b9050610a9481866001611952565b5f80608083901c156122ad57608092831c92015b604083901c156122bf57604092831c92015b602083901c156122d157602092831c92015b601083901c156122e357601092831c92015b600883901c156122f557600892831c92015b600483901c1561230757600492831c92015b600283901c1561231957600292831c92015b600183901c156105835760010192915050565b5f81831061233a57816116fd565b5090919050565b5f61234f6002848418612f4b565b6116fd90848416612e72565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61238561253e565b61238d6125a6565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f806122508585856125e8565b6001600160a01b03821661240457604051633250574960e11b81525f6004820152602401610708565b5f61241083835f611a27565b90506001600160a01b0381161561066a576040516339e3563760e11b81525f6004820152602401610708565b5f5f80516020612f8b83398151915281612455856119e1565b90506001600160a01b038416156124715761247181858761275e565b6001600160a01b038116156124ad5761248c5f865f806112e3565b6001600160a01b0381165f908152600383016020526040902080545f190190555b6001600160a01b038616156124dd576001600160a01b0386165f9081526003830160205260409020805460010190555b5f85815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b5f5f80516020612fab83398151915281612556611704565b80519091501561256e57805160209091012092915050565b8154801561257d579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f80516020612fab833981519152816125be611742565b8051909150156125d657805160209091012092915050565b6001820154801561257d579392505050565b82545f9081908015612704575f612604876115e7600185612e5f565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561265857604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff8088169116036126a4578461267b886115e7600186612e5f565b80546001600160d01b0392909216600160301b0265ffffffffffff9092169190911790556126f4565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d81529190912094519151909216600160301b029216919091179101555b6020015192508391506122559050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316600160301b029190931617920191909155905081612255565b6127698383836127c2565b61066a576001600160a01b03831661279757604051637e27328960e01b815260048101829052602401610708565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610708565b5f6001600160a01b03831615801590610a945750826001600160a01b0316846001600160a01b031614806127fb57506127fb848461114e565b80610a945750826001600160a01b0316612814836112aa565b6001600160a01b031614949350505050565b6001600160e01b03198116811461283b575f80fd5b50565b5f6020828403121561284e575f80fd5b81356116fd81612826565b5f81518084525f5b8181101561287d57602081850181015186830182015201612861565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6116fd6020830184612859565b5f602082840312156128be575f80fd5b5035919050565b80356001600160a01b03811681146128db575f80fd5b919050565b5f80604083850312156128f1575f80fd5b6128fa836128c5565b946020939093013593505050565b5f805f6060848603121561291a575f80fd5b612923846128c5565b9250612931602085016128c5565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561296f5761296f612941565b604051601f8501601f19908116603f0116810190828211818310171561299757612997612941565b816040528093508581528686860111156129af575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f8301126129d7575f80fd5b6116fd83833560208501612955565b5f805f805f60a086880312156129fa575f80fd5b612a03866128c5565b9450612a11602087016128c5565b9350604086013567ffffffffffffffff80821115612a2d575f80fd5b612a3989838a016129c8565b94506060880135915080821115612a4e575f80fd5b612a5a89838a016129c8565b93506080880135915080821115612a6f575f80fd5b50612a7c888289016129c8565b9150509295509295909350565b5f60208284031215612a99575f80fd5b6116fd826128c5565b60ff60f81b881681525f602060e081840152612ac160e084018a612859565b8381036040850152612ad3818a612859565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015612b2457835183529284019291840191600101612b08565b50909c9b505050505050505050505050565b5f8060408385031215612b47575f80fd5b612b50836128c5565b915060208301358015158114612b64575f80fd5b809150509250929050565b5f805f8060808587031215612b82575f80fd5b612b8b856128c5565b9350612b99602086016128c5565b925060408501359150606085013567ffffffffffffffff811115612bbb575f80fd5b8501601f81018713612bcb575f80fd5b612bda87823560208401612955565b91505092959194509250565b5f805f805f8060c08789031215612bfb575f80fd5b612c04876128c5565b95506020870135945060408701359350606087013560ff81168114612c27575f80fd5b9598949750929560808101359460a0909101359350915050565b5f60208284031215612c51575f80fd5b813567ffffffffffffffff811115612c67575f80fd5b610a94848285016129c8565b5f8060408385031215612c84575f80fd5b612c8d836128c5565b9150612c9b602084016128c5565b90509250929050565b600181811c90821680612cb857607f821691505b602082108103612cd657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561066a575f81815260208120601f850160051c81016020861015612d025750805b601f850160051c820191505b81811015612d2157828155600101612d0e565b505050505050565b815167ffffffffffffffff811115612d4357612d43612941565b612d5781612d518454612ca4565b84612cdc565b602080601f831160018114612d8a575f8415612d735750858301515b5f19600386901b1c1916600185901b178555612d21565b5f85815260208120601f198616915b82811015612db857888601518255948401946001909101908401612d99565b5085821015612dd557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215612df5575f80fd5b5051919050565b6020808252601f908201527f436f6e74726f6c6c657220646f65736e27742068617665206120746f6b656e00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b5f60018201612e5857612e58612e33565b5060010190565b8181038181111561058357610583612e33565b8082018082111561058357610583612e33565b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612ecb90830184612859565b9695505050505050565b5f60208284031215612ee5575f80fd5b81516116fd81612826565b634e487b7160e01b5f52602160045260245ffd5b6001600160d01b03818116838216019080821115612f2457612f24612e33565b5092915050565b6001600160d01b03828116828216039080821115612f2457612f24612e33565b5f82612f6557634e487b7160e01b5f52601260045260245ffd5b50049056fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0080bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220865e7acb5afe3b64a404dca4fe2e9376c25ee0e3d96df78ff91d0d784c37b86b64736f6c63430008140033