Overview ERC721
Total Supply:
0 2

Profile Summary
Blockchain:
Mantle (5000)

Contract Source Code Verified (Exact Match)
Contract Name:
MicroNFTV5

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Created At:
Sun, 07 Jul 2024 05:58:32 GMT
MicroNFTV5.sol
contracts
token
MicroNFTV5.sol


Contract ABI
[
  {
    "inputs": [],
    "name": "Canceled",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ERC721EnumerableForbiddenBatchMint",
    "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": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "ERC721OutOfBoundsIndex",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSaleDetail",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "IsNotBridge",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PresaleMerkleNotApproved",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PurchaseTooManyForAddress",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "correctPrice",
        "type": "uint256"
      }
    ],
    "name": "PurchaseWrongPrice",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SaleCanNotUpdate",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SaleInactive",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SaleIsNotEnded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SoldOut",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "merkle",
        "type": "bytes32"
      }
    ],
    "name": "AddMerkleProof",
    "type": "event"
  },
  {
    "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": "_to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_dstChainId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "BridgeIn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_dstChainId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "BridgeOut",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lastTimeUpdated",
        "type": "uint256"
      }
    ],
    "name": "CancelSaleEdition",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_quantity",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_srcChainId",
        "type": "uint256"
      }
    ],
    "name": "CrossMint",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fundsRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fund",
        "type": "uint256"
      }
    ],
    "name": "FundsWithdrawn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "editionSize",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timeEnd",
        "type": "uint256"
      }
    ],
    "name": "OpenMintFinalized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lastTimeUpdated",
        "type": "uint256"
      }
    ],
    "name": "PublicSaleCollection",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "price",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "firstMintedTokenId",
        "type": "uint256"
      }
    ],
    "name": "Purchase",
    "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": "VERSION",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "adminMint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "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": [
      {
        "internalType": "address",
        "name": "_toAddress",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "_dstChainId",
        "type": "uint64"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "bridgeIn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "_dstChainId",
        "type": "uint64"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "bridgeOut",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cancelSaleEdition",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_toAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_fundAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_quantity",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_priceCheck",
        "type": "uint256"
      },
      {
        "internalType": "uint64",
        "name": "_srcChainId",
        "type": "uint64"
      }
    ],
    "name": "crossMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "finalizeOpenEdition",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "initPayload",
        "type": "bytes"
      }
    ],
    "name": "init",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "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": [],
    "name": "microManager",
    "outputs": [
      {
        "internalType": "contract IMicroManager",
        "name": "",
        "type": "address"
      }
    ],
    "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": [
      {
        "internalType": "address",
        "name": "minter",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "purchase",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "minter",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      },
      {
        "internalType": "bytes32[]",
        "name": "merkleProof",
        "type": "bytes32[]"
      }
    ],
    "name": "purchasePresale",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "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": [],
    "name": "saleConfig",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "editionSize",
        "type": "uint64"
      },
      {
        "internalType": "uint16",
        "name": "profitSharing",
        "type": "uint16"
      },
      {
        "internalType": "address payable",
        "name": "fundsRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "publicSalePrice",
        "type": "uint256"
      },
      {
        "internalType": "uint32",
        "name": "maxSalePurchasePerAddress",
        "type": "uint32"
      },
      {
        "internalType": "uint64",
        "name": "publicSaleStart",
        "type": "uint64"
      },
      {
        "internalType": "uint64",
        "name": "publicSaleEnd",
        "type": "uint64"
      },
      {
        "internalType": "bytes32",
        "name": "presaleMerkleRoot",
        "type": "bytes32"
      },
      {
        "internalType": "bool",
        "name": "cancelable",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "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": "_newURI",
        "type": "string"
      }
    ],
    "name": "setBaseURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "_merkle",
        "type": "bytes32"
      }
    ],
    "name": "setMerkleProof",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_newURI",
        "type": "string"
      }
    ],
    "name": "setNotRevealedURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "initPayload",
        "type": "bytes"
      }
    ],
    "name": "setSaleDetail",
    "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": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenOfOwnerByIndex",
    "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": "",
        "type": "address"
      }
    ],
    "name": "totalMintsByAddress",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
608060405234801561001057600080fd5b50612f27806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806383bde44611610125578063b88d4fde116100ad578063ed50d8831161007c578063ed50d88314610533578063f2c4ce1e14610546578063f2fde38b14610559578063f5a0384c1461056c578063ffa1ad741461057457600080fd5b8063b88d4fde146104e7578063c87b56dd146104fa578063e58306f91461050d578063e985e9c51461052057600080fd5b806390aa0b0f116100f457806390aa0b0f146103ca5780639123f01e1461049957806394847d62146104b957806395d89b41146104cc578063a22cb465146104d457600080fd5b806383bde4461461037e57806386758912146103915780638da5cb5b146103a45780638de93222146103b757600080fd5b80632cde1215116101a85780634ddf47d4116101775780634ddf47d41461031f5780634f6ccce71461033257806355f804b3146103455780636352211e1461035857806370a082311461036b57600080fd5b80632cde1215146102de5780632f745c59146102f157806341e96eb11461030457806342842e0e1461030c57600080fd5b80630e21ea06116101e45780630e21ea06146102935780630e46c9a6146102a657806318160ddd146102b957806323b872dd146102cb57600080fd5b806301ffc9a71461021657806306fdde031461023e578063081812fc14610253578063095ea7b31461027e575b600080fd5b610229610224366004612569565b61057c565b60405190151581526020015b60405180910390f35b6102466105a7565b60405161023591906125e5565b6102666102613660046125f8565b610639565b6040516001600160a01b039091168152602001610235565b61029161028c366004612626565b610662565b005b600a54610266906001600160a01b031681565b6102916102b4366004612667565b610671565b6008545b604051908152602001610235565b6102916102d93660046126a8565b610764565b6102916102ec366004612667565b6107f4565b6102bd6102ff366004612626565b6108df565b610291610944565b61029161031a3660046126a8565b610a26565b61022961032d3660046127cc565b610a46565b6102bd6103403660046125f8565b610b2a565b610291610353366004612800565b610b83565b6102666103663660046125f8565b610ba6565b6102bd610379366004612848565b610bb1565b6102bd61038c366004612865565b610bf9565b61029161039f3660046125f8565b610e76565b600b54610266906001600160a01b031681565b6102bd6103c5366004612626565b610ee4565b60105460115460125460135460145461042c946001600160401b0380821695600160401b830461ffff1695600160501b9093046001600160a01b031694909363ffffffff841693600160201b8104841693600160601b90910416919060ff1689565b604080516001600160401b039a8b16815261ffff90991660208a01526001600160a01b0390971696880196909652606087019490945263ffffffff9092166080860152851660a08501529390931660c083015260e082019290925290151561010082015261012001610235565b6102bd6104a7366004612848565b600f6020526000908152604090205481565b6102916104c73660046127cc565b6110ec565b610246611381565b6102916104e23660046128fe565b611390565b6102916104f5366004612937565b61139b565b6102466105083660046125f8565b6113b3565b6102bd61051b366004612626565b6114c4565b61022961052e3660046129a2565b611562565b6102916105413660046129d0565b611590565b610291610554366004612800565b6117c8565b610291610567366004612848565b6117f2565b61029161184d565b6102bd600581565b60006001600160e01b0319821663780e9d6360e01b14806105a157506105a182611909565b92915050565b6060600080546105b690612a2f565b80601f01602080910402602001604051908101604052809291908181526020018280546105e290612a2f565b801561062f5780601f106106045761010080835404028352916020019161062f565b820191906000526020600020905b81548152906001019060200180831161061257829003601f168201915b5050505050905090565b600061064482611959565b506000828152600460205260409020546001600160a01b03166105a1565b61066d828233611992565b5050565b600a546001600160a01b0316631222cea6336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106eb9190612a79565b610708576040516311ebaa2760e11b815260040160405180910390fd5b6107118161199f565b604080516001600160401b0384168152602081018390526001600160a01b038516917f40b70b451dc629fad6a565da866d93b8c178df2cb218fc32f6af8041165309c191015b60405180910390a2505050565b6001600160a01b03821661079357604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006107a08383336119da565b9050836001600160a01b0316816001600160a01b0316146107ee576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161078a565b50505050565b600a546001600160a01b0316631222cea6336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190612a79565b61088b576040516311ebaa2760e11b815260040160405180910390fd5b6108958382611aaf565b604080516001600160401b0384168152602081018390526001600160a01b038516917f780140c12a9c67a3a283c7f237e9577318a108e1dfdeb57542a4655c89be38b79101610757565b60006108ea83610bb1565b821061091b5760405163295f44f760e21b81526001600160a01b03841660048201526024810183905260440161078a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b60145460ff161561096857604051631afb0ae560e01b815260040160405180910390fd5b600b546001600160a01b0316331461097f57600080fd5b600e54601080546001600160401b03610100909304831667ffffffffffffffff199091161790556012805442909216600160601b0267ffffffffffffffff60601b199092169190911790556109d13390565b601054604080516001600160401b0390921682524260208301526001600160a01b0392909216917fc0786675f6128bc0b8e886ad509fa0cc374ec4c3efe21e941920ea683bd1741d91015b60405180910390a2565b610a418383836040518060200160405280600081525061139b565b505050565b600e5460009060ff1615610a6c576040516282b42960e81b815260040160405180910390fd5b60008060008060008087806020019051810190610a899190612ae6565b600b80546001600160a01b0384166001600160a01b0319909116179055949a50929850909650945092509050610adc81600a80546001600160a01b039092166001600160a01b0319909216919091179055565b8551610aef90600c9060208901906124ba565b508451610b0390600d9060208801906124ba565b50610b0e8484611ac9565b5050600e805460ff191660019081179091559695505050505050565b6000610b3560085490565b8210610b5e5760405163295f44f760e21b8152600060048201526024810183905260440161078a565b60088281548110610b7157610b71612bb2565b90600052602060002001549050919050565b600b546001600160a01b03163314610b9a57600080fd5b610ba381611af0565b50565b60006105a182611959565b60006001600160a01b038216610bdd576040516322718ad960e21b81526000600482015260240161078a565b506001600160a01b031660009081526003602052604090205490565b60145460009060ff1615610c2057604051631afb0ae560e01b815260040160405180910390fd5b60105484906001600160401b031615801590610c635750601054600e546001600160401b0390911690610c619061010090046001600160e01b031683612bde565b115b15610c81576040516352df9fe560e01b815260040160405180910390fd5b60125442600160201b9091046001600160401b031611801590610cb6575060125442600160601b9091046001600160401b0316115b610cd357604051630fe219dd60e21b815260040160405180910390fd5b600a546001600160a01b0316631222cea6336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190612a79565b610d6a576040516311ebaa2760e11b815260040160405180910390fd5b610de0848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013546040516bffffffffffffffffffffffff1960608d901b166020820152909250603401905060405160208183030381529060405280519060200120611b03565b610dfd576040516346cabb7560e01b815260040160405180910390fd5b610e078686611bb2565b601154600e546040516101009091046001600160e01b0316815286906001600160a01b038916907f5bc97d73357ac0d035d4b9268a69240988a5776b8a4fcced3dbc223960123f409060200160405180910390a45050600e5461010090046001600160e01b0316949350505050565b60145460ff1615610e9a57604051631afb0ae560e01b815260040160405180910390fd5b600b546001600160a01b03163314610eb157600080fd5b601381905560405181907fac0e7be7f0391f6f84d2d6c5c9300942e4d7e7a79629f63f0078050c21300d9e90600090a250565b60145460009060ff1615610f0b57604051631afb0ae560e01b815260040160405180910390fd5b60105482906001600160401b031615801590610f4e5750601054600e546001600160401b0390911690610f4c9061010090046001600160e01b031683612bde565b115b15610f6c576040516352df9fe560e01b815260040160405180910390fd5b60125442600160201b9091046001600160401b031611801590610fa1575060125442600160601b9091046001600160401b0316115b610fbe57604051630fe219dd60e21b815260040160405180910390fd5b600a546001600160a01b0316631222cea6336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612a79565b611055576040516311ebaa2760e11b815260040160405180910390fd5b60135415611075576040516282b42960e81b815260040160405180910390fd5b61107f8484611bb2565b601154600e546040516101009091046001600160e01b0316815284906001600160a01b038716907f5bc97d73357ac0d035d4b9268a69240988a5776b8a4fcced3dbc223960123f409060200160405180910390a45050600e5461010090046001600160e01b031692915050565b60145460ff161561111057604051631afb0ae560e01b815260040160405180910390fd5b600b546001600160a01b0316331461112757600080fd5b601254600160201b90046001600160401b0316158015906111595750601254600160201b90046001600160401b031642115b1561117757604051630571129f60e51b815260040160405180910390fd5b60008180602001905181019061118d9190612c27565b9050428160a001516001600160401b03161115806111c557508060a001516001600160401b03168160c001516001600160401b031611155b806111d857506032816020015161ffff16115b806111ee575060408101516001600160a01b0316155b1561120c576040516371dff4bd60e11b815260040160405180910390fd5b604080516101208101825282516001600160401b0390811680835260208086015161ffff16908401819052858501516001600160a01b031694840185905260608087015190850181905260808088015163ffffffff1690860181905260a080890151861690870181905260c0808a015190961695870186905260e0808a01519088018190526000610100909801979097526010805469ffffffffffffffffffff1916909517600160401b909402939093177fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b90970296909617909255601191909155601280546bffffffffffffffffffffffff1916909417600160201b9091021767ffffffffffffffff60601b1916600160601b909102179091556013556014805460ff19169055336001600160a01b03167f7f5a7a2bf5c04c7c8759c017a2991abaf03db78e2595e806fe7b6add4dffe4b64260405161137591815260200190565b60405180910390a25050565b6060600180546105b690612a2f565b61066d338383611c6f565b6113a6848484610764565b6107ee3385858585611d0e565b60606113be82611959565b506000600d80546113ce90612a2f565b9050111561146857600d80546113e390612a2f565b80601f016020809104026020016040519081016040528092919081815260200182805461140f90612a2f565b801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b50505050509050919050565b6000600c805461147790612a2f565b90501161149357604051806020016040528060008152506105a1565b600c61149e83611e39565b6040516020016114af929190612ceb565b60405160208183030381529060405292915050565b600b546000906001600160a01b031633146114de57600080fd5b60105482906001600160401b0316158015906115215750601054600e546001600160401b039091169061151f9061010090046001600160e01b031683612bde565b115b1561153f576040516352df9fe560e01b815260040160405180910390fd5b6115498484611f39565b5050600e5461010090046001600160e01b031692915050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b0316631222cea6336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a9190612a79565b611627576040516311ebaa2760e11b815260040160405180910390fd5b60105483906001600160401b03161580159061166a5750601054600e546001600160401b03909116906116689061010090046001600160e01b031683612bde565b115b15611688576040516352df9fe560e01b815260040160405180910390fd5b60145460ff16156116ac57604051631afb0ae560e01b815260040160405180910390fd5b60125442600160201b9091046001600160401b0316118015906116e1575060125442600160601b9091046001600160401b0316115b6116fe57604051630fe219dd60e21b815260040160405180910390fd5b6010546001600160a01b03868116600160501b9092041614611732576040516282b42960e81b815260040160405180910390fd5b601154600090611743908690612da5565b9050808410156117695760405163c5a8df2f60e01b81526004810182905260240161078a565b6117738786611bb2565b604080518681526001600160401b03851660208201526001600160a01b038916917f66f7cec2cf267a0c2dec8f68fa7a926f730e7f5be0837f841ea91f9b4c6ced2b910160405180910390a250505050505050565b600b546001600160a01b031633146117df57600080fd5b805161066d90600d9060208401906124ba565b600b546001600160a01b0316331461180957600080fd5b6001600160a01b03811661182f576040516282b42960e81b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b03831617905550565b60145460ff161561187157604051631afb0ae560e01b815260040160405180910390fd5b600b546001600160a01b0316331461188857600080fd5b601254600160601b90046001600160401b03164211156118bb57604051631060d8c160e11b815260040160405180910390fd5b6014805460ff191660011790556118cf3390565b6001600160a01b03167f3cf0fddeb2fbf69861d5f13d66be17516300342ce630d94fb7ea3388c0c27dce42604051610a1c91815260200190565b60006001600160e01b031982166380ac58cd60e01b148061193a57506001600160e01b03198216635b5e139f60e01b145b806105a157506301ffc9a760e01b6001600160e01b03198316146105a1565b6000818152600260205260408120546001600160a01b0316806105a157604051637e27328960e01b81526004810184905260240161078a565b610a418383836001611fe7565b60006119ae60008360006119da565b90506001600160a01b03811661066d57604051637e27328960e01b81526004810183905260240161078a565b6000806119e88585856120ed565b90506001600160a01b038116611a4557611a4084600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611a68565b846001600160a01b0316816001600160a01b031614611a6857611a6881856121e6565b6001600160a01b038516611a8457611a7f84612277565b611aa7565b846001600160a01b0316816001600160a01b031614611aa757611aa78585612326565b949350505050565b61066d828260405180602001604052806000815250612376565b8151611adc9060009060208501906124ba565b508051610a419060019060208401906124ba565b805161066d90600c9060208401906124ba565b600081815b8551811015611ba7576000868281518110611b2557611b25612bb2565b60200260200101519050808311611b67576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611b94565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611b9f81612dc4565b915050611b08565b509092149392505050565b80600003611bd2576040516282b42960e81b815260040160405180910390fd5b60125463ffffffff1615801590611c1657506012546001600160a01b0383166000908152600f602052604090205463ffffffff90911690611c14908390612bde565b115b15611c3457604051631722816d60e01b815260040160405180910390fd5b611c3e8282611f39565b6001600160a01b0382166000908152600f602052604081208054839290611c66908490612bde565b90915550505050565b6001600160a01b038216611ca157604051630b61174360e31b81526001600160a01b038316600482015260240161078a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15611e3257604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611d50908890889087908790600401612ddd565b6020604051808303816000875af1925050508015611d8b575060408051601f3d908101601f19168201909252611d8891810190612e1a565b60015b611df4573d808015611db9576040519150601f19603f3d011682016040523d82523d6000602084013e611dbe565b606091505b508051600003611dec57604051633250574960e11b81526001600160a01b038516600482015260240161078a565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611e3057604051633250574960e11b81526001600160a01b038516600482015260240161078a565b505b5050505050565b606081600003611e605750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e8a5780611e7481612dc4565b9150611e839050600a83612e4d565b9150611e64565b6000816001600160401b03811115611ea457611ea46126d8565b6040519080825280601f01601f191660200182016040528015611ece576020820181803683370190505b5090505b8415611aa757611ee3600183612e61565b9150611ef0600a86612e78565b611efb906030612bde565b60f81b818381518110611f1057611f10612bb2565b60200101906001600160f81b031916908160001a905350611f32600a86612e4d565b9450611ed2565b60005b81811015610a41576001600e60018282829054906101000a90046001600160e01b0316611f699190612e8c565b825461010092830a6001600160e01b0381810219909216929091160217909155600e54604080514660e01b6001600160e01b0319166020808301919091529390920490921b63ffffffff19166024820152611fdf9250859101604051602081830303815290604052611fda90612eb7565b611aaf565b600101611f3c565b8080611ffb57506001600160a01b03821615155b156120bd57600061200b84611959565b90506001600160a01b038316158015906120375750826001600160a01b0316816001600160a01b031614155b801561204a57506120488184611562565b155b156120735760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161078a565b81156120bb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561211a5761211a81848661238e565b6001600160a01b0381161561215857612137600085600080611fe7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615612187576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006121f183610bb1565b600083815260076020526040902054909150808214612244576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061228990600190612e61565b600083815260096020526040812054600880549394509092849081106122b1576122b1612bb2565b9060005260206000200154905080600883815481106122d2576122d2612bb2565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061230a5761230a612edb565b6001900381819060005260206000200160009055905550505050565b6000600161233384610bb1565b61233d9190612e61565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61238083836123f2565b610a41336000858585611d0e565b612399838383612457565b610a41576001600160a01b0383166123c757604051637e27328960e01b81526004810182905260240161078a565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161078a565b6001600160a01b03821661241c57604051633250574960e11b81526000600482015260240161078a565b600061242a838360006119da565b90506001600160a01b03811615610a41576040516339e3563760e11b81526000600482015260240161078a565b60006001600160a01b03831615801590611aa75750826001600160a01b0316846001600160a01b0316148061249157506124918484611562565b80611aa75750506000908152600460205260409020546001600160a01b03908116911614919050565b8280546124c690612a2f565b90600052602060002090601f0160209004810192826124e8576000855561252e565b82601f1061250157805160ff191683800117855561252e565b8280016001018555821561252e579182015b8281111561252e578251825591602001919060010190612513565b5061253a92915061253e565b5090565b5b8082111561253a576000815560010161253f565b6001600160e01b031981168114610ba357600080fd5b60006020828403121561257b57600080fd5b813561258681612553565b9392505050565b60005b838110156125a8578181015183820152602001612590565b838111156107ee5750506000910152565b600081518084526125d181602086016020860161258d565b601f01601f19169290920160200192915050565b60208152600061258660208301846125b9565b60006020828403121561260a57600080fd5b5035919050565b6001600160a01b0381168114610ba357600080fd5b6000806040838503121561263957600080fd5b823561264481612611565b946020939093013593505050565b6001600160401b0381168114610ba357600080fd5b60008060006060848603121561267c57600080fd5b833561268781612611565b9250602084013561269781612652565b929592945050506040919091013590565b6000806000606084860312156126bd57600080fd5b83356126c881612611565b9250602084013561269781612611565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612711576127116126d8565b60405290565b604051601f8201601f191681016001600160401b038111828210171561273f5761273f6126d8565b604052919050565b60006001600160401b03821115612760576127606126d8565b50601f01601f191660200190565b600061278161277c84612747565b612717565b905082815283838301111561279557600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127bd57600080fd5b6125868383356020850161276e565b6000602082840312156127de57600080fd5b81356001600160401b038111156127f457600080fd5b611aa7848285016127ac565b60006020828403121561281257600080fd5b81356001600160401b0381111561282857600080fd5b8201601f8101841361283957600080fd5b611aa78482356020840161276e565b60006020828403121561285a57600080fd5b813561258681612611565b6000806000806060858703121561287b57600080fd5b843561288681612611565b93506020850135925060408501356001600160401b03808211156128a957600080fd5b818701915087601f8301126128bd57600080fd5b8135818111156128cc57600080fd5b8860208260051b85010111156128e157600080fd5b95989497505060200194505050565b8015158114610ba357600080fd5b6000806040838503121561291157600080fd5b823561291c81612611565b9150602083013561292c816128f0565b809150509250929050565b6000806000806080858703121561294d57600080fd5b843561295881612611565b9350602085013561296881612611565b92506040850135915060608501356001600160401b0381111561298a57600080fd5b612996878288016127ac565b91505092959194509250565b600080604083850312156129b557600080fd5b82356129c081612611565b9150602083013561292c81612611565b600080600080600060a086880312156129e857600080fd5b85356129f381612611565b94506020860135612a0381612611565b935060408601359250606086013591506080860135612a2181612652565b809150509295509295909350565b600181811c90821680612a4357607f821691505b602082108103612a6357634e487b7160e01b600052602260045260246000fd5b50919050565b8051612a74816128f0565b919050565b600060208284031215612a8b57600080fd5b8151612586816128f0565b600082601f830112612aa757600080fd5b8151612ab561277c82612747565b818152846020838601011115612aca57600080fd5b611aa782602083016020870161258d565b8051612a7481612611565b60008060008060008060c08789031215612aff57600080fd5b86516001600160401b0380821115612b1657600080fd5b612b228a838b01612a96565b97506020890151915080821115612b3857600080fd5b612b448a838b01612a96565b96506040890151915080821115612b5a57600080fd5b612b668a838b01612a96565b95506060890151915080821115612b7c57600080fd5b50612b8989828a01612a96565b935050612b9860808801612adb565b9150612ba660a08801612adb565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612bf157612bf1612bc8565b500190565b8051612a7481612652565b805161ffff81168114612a7457600080fd5b805163ffffffff81168114612a7457600080fd5b60006101208284031215612c3a57600080fd5b612c426126ee565b612c4b83612bf6565b8152612c5960208401612c01565b6020820152612c6a60408401612adb565b604082015260608301516060820152612c8560808401612c13565b6080820152612c9660a08401612bf6565b60a0820152612ca760c08401612bf6565b60c082015260e083015160e0820152610100612cc4818501612a69565b908201529392505050565b60008151612ce181856020860161258d565b9290920192915050565b600080845481600182811c915080831680612d0757607f831692505b60208084108203612d2657634e487b7160e01b86526022600452602486fd5b818015612d3a5760018114612d4b57612d78565b60ff19861689528489019650612d78565b60008b81526020902060005b86811015612d705781548b820152908501908301612d57565b505084890196505b505050505050612d9c612d8b8286612ccf565b64173539b7b760d91b815260050190565b95945050505050565b6000816000190483118215151615612dbf57612dbf612bc8565b500290565b600060018201612dd657612dd6612bc8565b5060010190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e10908301846125b9565b9695505050505050565b600060208284031215612e2c57600080fd5b815161258681612553565b634e487b7160e01b600052601260045260246000fd5b600082612e5c57612e5c612e37565b500490565b600082821015612e7357612e73612bc8565b500390565b600082612e8757612e87612e37565b500690565b60006001600160e01b03828116848216808303821115612eae57612eae612bc8565b01949350505050565b80516020808301519190811015612a635760001960209190910360031b1b16919050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122016e41bd3afc47627ade1bea28828f34d9a6e6fcc4697d8f6e8bc24b3dbb6e4a464736f6c634300080d0033