Overview ERC721
Total Supply:
0 FANTASY

Holders:
16,759
Profile Summary
Blockchain:
Blast Sepolia (168587773)

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

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 20 Feb 2024 03:47:52 GMT
FantasyCards.sol
src
FantasyCards.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AccessControlBadConfirmation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint48",
        "name": "schedule",
        "type": "uint48"
      }
    ],
    "name": "AccessControlEnforcedDefaultAdminDelay",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AccessControlEnforcedDefaultAdminRules",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "defaultAdmin",
        "type": "address"
      }
    ],
    "name": "AccessControlInvalidDefaultAdmin",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "neededRole",
        "type": "bytes32"
      }
    ],
    "name": "AccessControlUnauthorizedAccount",
    "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": "uint8",
        "name": "bits",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "SafeCastOverflowedUintDowncast",
    "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": [],
    "name": "DefaultAdminDelayChangeCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint48",
        "name": "newDelay",
        "type": "uint48"
      },
      {
        "indexed": false,
        "internalType": "uint48",
        "name": "effectSchedule",
        "type": "uint48"
      }
    ],
    "name": "DefaultAdminDelayChangeScheduled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "DefaultAdminTransferCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "newAdmin",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint48",
        "name": "acceptSchedule",
        "type": "uint48"
      }
    ],
    "name": "DefaultAdminTransferScheduled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "previousAdminRole",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "newAdminRole",
        "type": "bytes32"
      }
    ],
    "name": "RoleAdminChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleGranted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleRevoked",
    "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": "DEFAULT_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "EXECUTION_DELEGATE_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptDefaultAdminTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "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": [],
    "name": "baseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newAdmin",
        "type": "address"
      }
    ],
    "name": "beginDefaultAdminTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cancelDefaultAdminTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint48",
        "name": "newDelay",
        "type": "uint48"
      }
    ],
    "name": "changeDefaultAdminDelay",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "defaultAdmin",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "defaultAdminDelay",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "defaultAdminDelayIncreaseWait",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "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": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "grantRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "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": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingDefaultAdmin",
    "outputs": [
      {
        "internalType": "address",
        "name": "newAdmin",
        "type": "address"
      },
      {
        "internalType": "uint48",
        "name": "schedule",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingDefaultAdminDelay",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "newDelay",
        "type": "uint48"
      },
      {
        "internalType": "uint48",
        "name": "schedule",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "renounceRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "revokeRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "rollbackDefaultAdminDelay",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "safeMint",
    "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": "string",
        "name": "_baseURI",
        "type": "string"
      }
    ],
    "name": "setBaseURI",
    "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": [],
    "name": "tokenCounter",
    "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"
  }
]


Contract Creation Code
60e060409081526080818152906200228060a039600390620000229082620002b4565b503480156200003057600080fd5b50600033806200005a57604051636116401160e11b81526000600482015260240160405180910390fd5b600180546001600160d01b0316600160d01b65ffffffffffff85160217905562000086600082620000eb565b505060408051808201909152600781526646616e7461737960c81b602082015260059150620000b69082620002b4565b5060408051808201909152600781526646414e5441535960c81b6020820152600690620000e49082620002b4565b5062000380565b6000826200014c576000620001086002546001600160a01b031690565b6001600160a01b0316146200013057604051631fe1e13d60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384161790555b62000158838362000161565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000206576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001bd3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200015b565b5060006200015b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200023a57607f821691505b6020821081036200025b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002af57600081815260208120601f850160051c810160208610156200028a5750805b601f850160051c820191505b81811015620002ab5782815560010162000296565b5050505b505050565b81516001600160401b03811115620002d057620002d06200020f565b620002e881620002e1845462000225565b8462000261565b602080601f831160018114620003205760008415620003075750858301515b600019600386901b1c1916600185901b178555620002ab565b600085815260208120601f198616915b82811015620003515788860151825594840194600190910190840162000330565b5085821015620003705787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ef080620003906000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063b88d4fde116100ad578063cf6eefb71161007c578063cf6eefb71461048d578063d082e381146104bb578063d547741f146104c4578063d602b9fd146104d7578063e985e9c5146104df57600080fd5b8063b88d4fde14610457578063c87b56dd1461046a578063cc8463c81461047d578063cefc14291461048557600080fd5b806391d14854116100f457806391d14854146103fa57806395d89b411461040d578063a1eda53c14610415578063a217fddf1461043c578063a22cb4651461044457600080fd5b806370a08231146103b9578063846ff23c146103cc57806384ef8ffc146103e15780638da5cb5b146103f257600080fd5b806336568abe116101a857806355f804b31161017757806355f804b314610365578063634e93da146103785780636352211e1461038b578063649a5ec71461039e5780636c0360eb146103b157600080fd5b806336568abe1461031957806340d097c31461032c57806342842e0e1461033f57806342966c681461035257600080fd5b8063095ea7b3116101ef578063095ea7b3146102a55780630aa6220b146102ba57806323b872dd146102c2578063248a9ca3146102d55780632f2ff15d1461030657600080fd5b806301ffc9a714610221578063022d63fb1461024957806306fdde0314610265578063081812fc1461027a575b600080fd5b61023461022f3660046118bc565b6104f2565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff9091168152602001610240565b61026d61051d565b6040516102409190611929565b61028d61028836600461193c565b6105af565b6040516001600160a01b039091168152602001610240565b6102b86102b3366004611971565b6105d8565b005b6102b86105e7565b6102b86102d036600461199b565b6105fd565b6102f86102e336600461193c565b60009081526020819052604090206001015490565b604051908152602001610240565b6102b86103143660046119d7565b6106a6565b6102b86103273660046119d7565b6106ce565b6102b861033a366004611a03565b610775565b6102b861034d36600461199b565b6107b2565b6102b861036036600461193c565b6107eb565b6102b8610373366004611aaa565b6107ff565b6102b8610386366004611a03565b61081b565b61028d61039936600461193c565b61082f565b6102b86103ac366004611af3565b61083a565b61026d61084e565b6102f86103c7366004611a03565b6108dc565b6102f8600080516020611e9b83398151915281565b6002546001600160a01b031661028d565b61028d610924565b6102346104083660046119d7565b61093d565b61026d610966565b61041d610975565b6040805165ffffffffffff938416815292909116602083015201610240565b6102f8600081565b6102b8610452366004611b1b565b6109c9565b6102b8610465366004611b57565b6109d4565b61026d61047836600461193c565b610a03565b61024e610a6b565b6102b8610aca565b610495610b0a565b604080516001600160a01b03909316835265ffffffffffff909116602083015201610240565b6102f860045481565b6102b86104d23660046119d7565b610b2b565b6102b8610b53565b6102346104ed366004611bd3565b610b66565b60006001600160e01b031982166318a4c3c360e11b1480610517575061051782610b94565b92915050565b60606005805461052c90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461055890611bfd565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b5050505050905090565b60006105ba82610bc9565b506000828152600960205260409020546001600160a01b0316610517565b6105e3828233610c02565b5050565b60006105f281610c0f565b6105fa610c19565b50565b600080516020611e9b83398151915261061581610c0f565b6001600160a01b03831661064457604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610651848433610c26565b9050846001600160a01b0316816001600160a01b03161461069f576040516364283d7b60e01b81526001600160a01b038087166004830152602482018590528216604482015260640161063b565b5050505050565b816106c457604051631fe1e13d60e11b815260040160405180910390fd5b6105e38282610d1f565b811580156106e957506002546001600160a01b038281169116145b1561076b576000806106f9610b0a565b90925090506001600160a01b03821615158061071b575065ffffffffffff8116155b8061072e57504265ffffffffffff821610155b15610756576040516319ca5ebb60e01b815265ffffffffffff8216600482015260240161063b565b50506001805465ffffffffffff60a01b191690555b6105e38282610d44565b600080516020611e9b83398151915261078d81610c0f565b61079982600454610d77565b600480549060006107a983611c4d565b91905055505050565b600080516020611e9b8339815191526107ca81610c0f565b6107e5848484604051806020016040528060008152506109d4565b50505050565b60006107f681610c0f565b6105e382610d91565b600061080a81610c0f565b60036108168382611cb4565b505050565b600061082681610c0f565b6105e382610dcc565b600061051782610bc9565b600061084581610c0f565b6105e382610e3f565b6003805461085b90611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461088790611bfd565b80156108d45780601f106108a9576101008083540402835291602001916108d4565b820191906000526020600020905b8154815290600101906020018083116108b757829003601f168201915b505050505081565b60006001600160a01b038216610908576040516322718ad960e21b81526000600482015260240161063b565b506001600160a01b031660009081526008602052604090205490565b60006109386002546001600160a01b031690565b905090565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606006805461052c90611bfd565b600254600090600160d01b900465ffffffffffff1680151580156109a157504265ffffffffffff821610155b6109ad576000806109c1565b600254600160a01b900465ffffffffffff16815b915091509091565b6105e3338383610eaf565b600080516020611e9b8339815191526109ec81610c0f565b6109f78585856105fd565b61069f85858585610f4e565b6060610a0e82610bc9565b50600060038054610a1e90611bfd565b905011610a3a5760405180602001604052806000815250610517565b6003610a4583611070565b604051602001610a56929190611d74565b60405160208183030381529060405292915050565b600254600090600160d01b900465ffffffffffff168015158015610a9657504265ffffffffffff8216105b610ab157600154600160d01b900465ffffffffffff16610ac4565b600254600160a01b900465ffffffffffff165b91505090565b6000610ad4610b0a565b509050336001600160a01b03821614610b0257604051636116401160e11b815233600482015260240161063b565b6105fa611103565b6001546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610b4957604051631fe1e13d60e11b815260040160405180910390fd5b6105e3828261119c565b6000610b5e81610c0f565b6105fa6111c1565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b60006001600160e01b03198216637965db0b60e01b148061051757506301ffc9a760e01b6001600160e01b0319831614610517565b6000818152600760205260408120546001600160a01b03168061051757604051637e27328960e01b81526004810184905260240161063b565b61081683838360016111cc565b6105fa81336112d2565b610c2460008061130b565b565b6000828152600760205260408120546001600160a01b0390811690831615610c5357610c538184866113cb565b6001600160a01b03811615610c9157610c706000856000806111cc565b6001600160a01b038116600090815260086020526040902080546000190190555b6001600160a01b03851615610cc0576001600160a01b0385166000908152600860205260409020805460010190555b60008481526007602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600082815260208190526040902060010154610d3a81610c0f565b6107e5838361142f565b6001600160a01b0381163314610d6d5760405163334bd91960e11b815260040160405180910390fd5b610816828261149e565b6105e38282604051806020016040528060008152506114db565b6000610da06000836000610c26565b90506001600160a01b0381166105e357604051637e27328960e01b81526004810183905260240161063b565b6000610dd6610a6b565b610ddf426114f2565b610de99190611dfb565b9050610df58282611529565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000610e4a826115a8565b610e53426114f2565b610e5d9190611dfb565b9050610e69828261130b565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6001600160a01b038216610ee157604051630b61174360e31b81526001600160a01b038316600482015260240161063b565b6001600160a01b038381166000818152600a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156107e557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f90903390889087908790600401611e21565b6020604051808303816000875af1925050508015610fcb575060408051601f3d908101601f19168201909252610fc891810190611e5e565b60015b611034573d808015610ff9576040519150601f19603f3d011682016040523d82523d6000602084013e610ffe565b606091505b50805160000361102c57604051633250574960e11b81526001600160a01b038516600482015260240161063b565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461069f57604051633250574960e11b81526001600160a01b038516600482015260240161063b565b6060600061107d836115f0565b600101905060008167ffffffffffffffff81111561109d5761109d611a1e565b6040519080825280601f01601f1916602001820160405280156110c7576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846110d157509392505050565b60008061110e610b0a565b915091506111238165ffffffffffff16151590565b158061113757504265ffffffffffff821610155b1561115f576040516319ca5ebb60e01b815265ffffffffffff8216600482015260240161063b565b61117b60006111766002546001600160a01b031690565b61149e565b5061118760008361142f565b5050600180546001600160d01b031916905550565b6000828152602081905260409020600101546111b781610c0f565b6107e5838361149e565b610c24600080611529565b80806111e057506001600160a01b03821615155b156112a25760006111f084610bc9565b90506001600160a01b0383161580159061121c5750826001600160a01b0316816001600160a01b031614155b801561122f575061122d8184610b66565b155b156112585760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161063b565b81156112a05783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260096020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6112dc828261093d565b6105e35760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161063b565b600254600160d01b900465ffffffffffff16801561138e574265ffffffffffff8216101561136457600254600180546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b0291909117905561138e565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b50600280546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b6113d68383836116c8565b610816576001600160a01b03831661140457604051637e27328960e01b81526004810182905260240161063b565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161063b565b60008261148d57600061144a6002546001600160a01b031690565b6001600160a01b03161461147157604051631fe1e13d60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384161790555b611497838361172e565b9392505050565b6000821580156114bb57506002546001600160a01b038381169116145b156114d157600280546001600160a01b03191690555b61149783836117c0565b6114e5838361182b565b6108166000848484610f4e565b600065ffffffffffff821115611525576040516306dfcc6560e41b8152603060048201526024810183905260440161063b565b5090565b6000611533610b0a565b6001805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061157590508165ffffffffffff16151590565b15610816576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b6000806115b3610a6b565b90508065ffffffffffff168365ffffffffffff16116115db576115d68382611e7b565b611497565b61149765ffffffffffff841662069780611890565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061162f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061165b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061167957662386f26fc10000830492506010015b6305f5e1008310611691576305f5e100830492506008015b61271083106116a557612710830492506004015b606483106116b7576064830492506002015b600a83106105175760010192915050565b60006001600160a01b038316158015906117265750826001600160a01b0316846001600160a01b0316148061170257506117028484610b66565b8061172657506000828152600960205260409020546001600160a01b038481169116145b949350505050565b600061173a838361093d565b6117b8576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556117703390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610517565b506000610517565b60006117cc838361093d565b156117b8576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610517565b6001600160a01b03821661185557604051633250574960e11b81526000600482015260240161063b565b600061186383836000610c26565b90506001600160a01b03811615610816576040516339e3563760e11b81526000600482015260240161063b565b600081831061189f5781611497565b5090919050565b6001600160e01b0319811681146105fa57600080fd5b6000602082840312156118ce57600080fd5b8135611497816118a6565b60005b838110156118f45781810151838201526020016118dc565b50506000910152565b600081518084526119158160208601602086016118d9565b601f01601f19169290920160200192915050565b60208152600061149760208301846118fd565b60006020828403121561194e57600080fd5b5035919050565b80356001600160a01b038116811461196c57600080fd5b919050565b6000806040838503121561198457600080fd5b61198d83611955565b946020939093013593505050565b6000806000606084860312156119b057600080fd5b6119b984611955565b92506119c760208501611955565b9150604084013590509250925092565b600080604083850312156119ea57600080fd5b823591506119fa60208401611955565b90509250929050565b600060208284031215611a1557600080fd5b61149782611955565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611a4f57611a4f611a1e565b604051601f8501601f19908116603f01168101908282118183101715611a7757611a77611a1e565b81604052809350858152868686011115611a9057600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611abc57600080fd5b813567ffffffffffffffff811115611ad357600080fd5b8201601f81018413611ae457600080fd5b61172684823560208401611a34565b600060208284031215611b0557600080fd5b813565ffffffffffff8116811461149757600080fd5b60008060408385031215611b2e57600080fd5b611b3783611955565b915060208301358015158114611b4c57600080fd5b809150509250929050565b60008060008060808587031215611b6d57600080fd5b611b7685611955565b9350611b8460208601611955565b925060408501359150606085013567ffffffffffffffff811115611ba757600080fd5b8501601f81018713611bb857600080fd5b611bc787823560208401611a34565b91505092959194509250565b60008060408385031215611be657600080fd5b611bef83611955565b91506119fa60208401611955565b600181811c90821680611c1157607f821691505b602082108103611c3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c5f57611c5f611c37565b5060010190565b601f82111561081657600081815260208120601f850160051c81016020861015611c8d5750805b601f850160051c820191505b81811015611cac57828155600101611c99565b505050505050565b815167ffffffffffffffff811115611cce57611cce611a1e565b611ce281611cdc8454611bfd565b84611c66565b602080601f831160018114611d175760008415611cff5750858301515b600019600386901b1c1916600185901b178555611cac565b600085815260208120601f198616915b82811015611d4657888601518255948401946001909101908401611d27565b5085821015611d645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611d8281611bfd565b60018281168015611d9a5760018114611daf57611dde565b60ff1984168752821515830287019450611dde565b8860005260208060002060005b85811015611dd55781548a820152908401908201611dbc565b50505082870194505b505050508351611df28183602088016118d9565b01949350505050565b65ffffffffffff818116838216019080821115611e1a57611e1a611c37565b5092915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e54908301846118fd565b9695505050505050565b600060208284031215611e7057600080fd5b8151611497816118a6565b65ffffffffffff828116828216039080821115611e1a57611e1a611c3756fe5fd5b2f6247f15ca406161db23ae5fb61b1d0a4e5cc0dcb766481246ee4f316ba2646970667358221220d1107bd84921cad0bcd4cc1bd5a35efe23a120b04a03afee78daa6355ef7c41364736f6c6343000814003368747470733a2f2f66616e746173792d63617264732d73746f726167652e73332e616d617a6f6e6177732e636f6d2f66616e746173795f63617264735f73312f