Overview ERC721
Total Supply:
1 K_K

Holders:
1
Profile Summary
Blockchain:
Ethereum (1)

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

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 250000 runs

Created At:
Mon, 02 Oct 2023 21:00:35 GMT
Mint721.sol
src
Create
contracts
v1
Mint721.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AlreadyInitialized",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ApprovalCallerNotOwnerNorApproved",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ApprovalQueryForNonexistentToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BalanceQueryForZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidMintModuleData",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidRoyalty",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintERC2309QuantityExceedsLimit",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintToZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintZeroQuantity",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ModuleUpdateFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NewOwnerIsZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoHandoverRequest",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyEOAAdminMintAllowed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OwnerQueryForNonexistentToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OwnershipNotInitializedForExtraData",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferCallerNotOwnerNorApproved",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferFromIncorrectOwner",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferToNonERC721ReceiverImplementer",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferToZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "URIQueryForNonexistentToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "UnapprovedMintModule",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_fromTokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_toTokenId",
        "type": "uint256"
      }
    ],
    "name": "BatchMetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "fromTokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "toTokenId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "ConsecutiveTransfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "renderer",
        "type": "address"
      }
    ],
    "name": "MetadataRendererUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "MetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "module",
        "type": "address"
      }
    ],
    "name": "ModuleAdded",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "module",
        "type": "address"
      }
    ],
    "name": "ModuleRemoved",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipHandoverCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipHandoverRequested",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "oldOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "bps",
        "type": "uint256"
      }
    ],
    "name": "RoyaltyUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "mintModule",
        "type": "address"
      }
    ],
    "name": "addMintModule",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "adminMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "cancelOwnershipHandover",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "completeOwnershipHandover",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractVersion",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          }
        ],
        "internalType": "struct Mint721Configuration",
        "name": "config",
        "type": "tuple"
      },
      {
        "internalType": "address",
        "name": "mintModuleRegistry_",
        "type": "address"
      },
      {
        "internalType": "contract IMetadataRenderer",
        "name": "_metadataRenderer",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "metadataRendererConfig",
        "type": "bytes"
      },
      {
        "internalType": "address[]",
        "name": "mintModules",
        "type": "address[]"
      },
      {
        "internalType": "bytes[]",
        "name": "mintModuleData",
        "type": "bytes[]"
      },
      {
        "internalType": "address",
        "name": "creator",
        "type": "address"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "isMintModuleApproved",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "metadataRenderer",
    "outputs": [
      {
        "internalType": "contract IMetadataRenderer",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "quantity",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "result",
        "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": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "ownershipHandoverExpiresAt",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "result",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "payoutRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "refreshMetadata",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "mintModule",
        "type": "address"
      }
    ],
    "name": "removeMintModule",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "requestOwnershipHandover",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "royaltyBps",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "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": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IMetadataRenderer",
        "name": "_metadataRenderer",
        "type": "address"
      }
    ],
    "name": "setMetadataRenderer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "bps",
        "type": "uint256"
      }
    ],
    "name": "setRoyalty",
    "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": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalMinted",
    "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": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "configurable",
        "type": "address[]"
      },
      {
        "internalType": "bytes[]",
        "name": "configData",
        "type": "bytes[]"
      }
    ],
    "name": "updateExternalConfiguration",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60a060405234801561001057600080fd5b506001608052608051612cd461003160003960006105ef0152612cd46000f3fe60806040526004361061026a5760003560e01c80636352211e11610153578063b88d4fde116100cb578063e985e9c51161007f578063f2fde38b11610064578063f2fde38b1461076c578063fd4fe8a81461077f578063fee81cf41461079f57600080fd5b8063e985e9c5146106e4578063f04e283e1461075957600080fd5b8063c63adb2b116100b0578063c63adb2b1461068e578063c87b56dd146106a4578063e58306f9146106c457600080fd5b8063b88d4fde1461065b578063c06b65931461066e57600080fd5b80638da5cb5b11610122578063a0a8e46011610107578063a0a8e460146105dd578063a22cb46514610626578063a2309ff81461064657600080fd5b80638da5cb5b1461059457806395d89b41146105c857600080fd5b80636352211e1461051f578063703199701461053f57806370a082311461056c578063715018a61461058c57600080fd5b80632b3173a6116101e657806341006605116101b557806342842e0e1161019a57806342842e0e146104e45780634561549d146104f757806354d1f13d1461051757600080fd5b806341006605146104af5780634209a2e1146104c457600080fd5b80632b3173a61461042a5780633f0594511461045a5780633fb80b151461047a57806340c10f191461048f57600080fd5b8063095ea7b31161023d57806323b872dd1161022257806323b872dd146103c357806325692962146103d65780632a55205a146103de57600080fd5b8063095ea7b31461032d57806318160ddd1461034057600080fd5b806301ffc9a71461026f578063064f5c16146102a457806306fdde03146102c6578063081812fc146102e8575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046122bf565b6107d2565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102c46102bf366004612310565b6108f2565b005b3480156102d257600080fd5b506102db610906565b60405161029b919061239b565b3480156102f457600080fd5b506103086103033660046123ae565b6109ba565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6102c461033b3660046123c7565b610a43565b34801561034c57600080fd5b507f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c41547f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b60405190815260200161029b565b6102c46103d13660046123f3565b610a53565b6102c4610de6565b3480156103ea57600080fd5b506103fe6103f9366004612434565b610e36565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161029b565b34801561043657600080fd5b5061028f610445366004612310565b60026020526000908152604090205460ff1681565b34801561046657600080fd5b506102c4610475366004612519565b610e8c565b34801561048657600080fd5b50610308610f2e565b34801561049b57600080fd5b506102c46104aa3660046123c7565b610f5d565b3480156104bb57600080fd5b506102c4610fb0565b3480156104d057600080fd5b506102c46104df3660046123ae565b611013565b6102c46104f23660046123f3565b611093565b34801561050357600080fd5b506102c4610512366004612310565b6110b3565b6102c46110c4565b34801561052b57600080fd5b5061030861053a3660046123ae565b611100565b34801561054b57600080fd5b506001546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057857600080fd5b506103b5610587366004612310565b61110b565b6102c46111ac565b3480156105a057600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610308565b3480156105d457600080fd5b506102db6111c0565b3480156105e957600080fd5b506106117f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161029b565b34801561063257600080fd5b506102c46106413660046125f2565b6111f1565b34801561065257600080fd5b506103b56112a7565b6102c4610669366004612676565b6112f3565b34801561067a57600080fd5b506102c461068936600461277f565b61135d565b34801561069a57600080fd5b506103b560035481565b3480156106b057600080fd5b506102db6106bf3660046123ae565b611554565b3480156106d057600080fd5b506102c46106df3660046123c7565b61164a565b3480156106f057600080fd5b5061028f6106ff36600461286f565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832093909416825291909152205460ff1690565b6102c4610767366004612310565b61168b565b6102c461077a366004612310565b6116c8565b34801561078b57600080fd5b506102c461079a366004612310565b6116ef565b3480156107ab57600080fd5b506103b56107ba366004612310565b63389a75e1600c908152600091909152602090205490565b60006107dd82611700565b8061082957507fffffffff0000000000000000000000000000000000000000000000000000000082167fc06b659300000000000000000000000000000000000000000000000000000000145b8061087557507fffffffff0000000000000000000000000000000000000000000000000000000082167f279d1c6600000000000000000000000000000000000000000000000000000000145b806108a057507fffffffff000000000000000000000000000000000000000000000000000000008216155b806108ec57507fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000145b92915050565b6108fa6117e1565b61090381611817565b50565b60607f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4060020180546109379061289d565b80601f01602080910402602001604051908101604052809291908181526020018280546109639061289d565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109c582611893565b6109fb576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b610a4f8282600161191f565b5050565b6000610a5e82611a79565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ac5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c466020526040902080543380821473ffffffffffffffffffffffffffffffffffffffff881690911417610ba05773ffffffffffffffffffffffffffffffffffffffff861660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832033845290915290205460ff16610ba0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516610bed576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015610bf857600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c02000000000000000000000000000000000000000000000000000000001760008581527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003610d82576001840160008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120549003610d80577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40548114610d805760008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b600080600061271060035485610e4c91906128ea565b610e569190612928565b9050610e807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275490565b925090505b9250929050565b610e946117e1565b82518114610ece576040517f89d9211a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8351811015610f2857610f20848281518110610eef57610eef612963565b6020026020010151848484818110610f0957610f09612963565b9050602002810190610f1b9190612992565b611bca565b600101610ed1565b50505050565b6000610f587fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275490565b905090565b3360009081526002602052604090205460ff16610fa6576040517f3ca50d6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4f8282611d1d565b610fb86117e1565b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c6001604080519182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208301520160405180910390a1565b61101b6117e1565b6103e8811115611057576040517fe0e54ced00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f244ea8d7627f5a08f4299862bd5a45752842c183aee5b0fb0d1e4887bfa605b3906020015b60405180910390a150565b6110ae838383604051806020016040528060008152506112f3565b505050565b6110bb6117e1565b61090381611ed7565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60006108ec82611a79565b600073ffffffffffffffffffffffffffffffffffffffff821661115a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604090205467ffffffffffffffff1690565b6111b46117e1565b6111be6000611fdb565b565b60607f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4060030180546109379061289d565b3360008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610f587f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6112fe848484610a53565b73ffffffffffffffffffffffffffffffffffffffff83163b15610f285761132784848484612041565b610f28576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4054156113b6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c08a80612992565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42916113ed919083612a3d565b506113fb60208b018b612992565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4391611428919083612a3d565b5060017f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4055600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b16179055611496816121ba565b61149f8861221e565b8382146114d8576040517f89d9211a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b848110156115365760008686838181106114f7576114f7612963565b905060200201602081019061150c9190612310565b905061151781611ed7565b61152d81868685818110610f0957610f09612963565b506001016114db565b50851561154857611548888888611bca565b50505050505050505050565b606061155f82611893565b611595576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063c87b56dd90602401600060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ec9190810190612b58565b6116526117e1565b323314610fa6576040517f2334ac1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116936117e1565b63389a75e1600c52806000526020600c2080544211156116bb57636f5e88186000526004601cfd5b6000905561090381611fdb565b6116d06117e1565b8060601b6116e657637448fbae6000526004601cfd5b61090381611fdb565b6116f76117e1565b6109038161221e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061179357507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108ec5750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146111be576382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89101611088565b6000816001111580156118c657507f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405482105b80156108ec57505060009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b600061192a83611100565b905081156119d8573373ffffffffffffffffffffffffffffffffffffffff8216146119d85773ffffffffffffffffffffffffffffffffffffffff811660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832033845290915290205460ff166119d8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b600081600111611b98575060008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c446020526040812054907c010000000000000000000000000000000000000000000000000000000082169003611b985780600003611b93577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40548210611b3b576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260409020548015611b3b575b919050565b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff167fefed70712b80221b7e79dede8808d24c88dc05eb7f60d7f9fb10ea6025e1ea678484604051602401611c17929190612bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611ca09190612c1c565b6000604051808303816000865af19150503d8060008114611cdd576040519150601f19603f3d011682016040523d82523d6000602084013e611ce2565b606091505b5050905080610f28576040517f0cd302fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40546000829003611d7a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c456020908152604080832080546801000000000000000188020190558483527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611e7457808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611e3c565b5081600003611eaf576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405550505050565b6000546040517f36620c0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906336620c0a90602401600060405180830381600087803b158015611f4457600080fd5b505af1158015611f58573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a9101611088565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061209c903390899088908890600401612c38565b6020604051808303816000875af19250505080156120f5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526120f291810190612c81565b60015b61216c573d808015612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b508051600003612164576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f60a886c8dc324af9c6d6a1bf7369ffe7557ef345eb5717bceffb59beac879a0a90602001611088565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461090357600080fd5b6000602082840312156122d157600080fd5b81356122dc81612291565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461090357600080fd5b8035611b93816122e3565b60006020828403121561232257600080fd5b81356122dc816122e3565b60005b83811015612348578181015183820152602001612330565b50506000910152565b6000815180845261236981602086016020860161232d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122dc6020830184612351565b6000602082840312156123c057600080fd5b5035919050565b600080604083850312156123da57600080fd5b82356123e5816122e3565b946020939093013593505050565b60008060006060848603121561240857600080fd5b8335612413816122e3565b92506020840135612423816122e3565b929592945050506040919091013590565b6000806040838503121561244757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124cc576124cc612456565b604052919050565b60008083601f8401126124e657600080fd5b50813567ffffffffffffffff8111156124fe57600080fd5b6020830191508360208260051b8501011115610e8557600080fd5b60008060006040848603121561252e57600080fd5b833567ffffffffffffffff8082111561254657600080fd5b818601915086601f83011261255a57600080fd5b813560208282111561256e5761256e612456565b8160051b61257d828201612485565b928352848101820192828101908b85111561259757600080fd5b958301955b848710156125c157863592506125b1836122e3565b828252958301959083019061259c565b98505050870135925050808211156125d857600080fd5b506125e5868287016124d4565b9497909650939450505050565b6000806040838503121561260557600080fd5b8235612610816122e3565b91506020830135801515811461262557600080fd5b809150509250929050565b600067ffffffffffffffff82111561264a5761264a612456565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000806000806080858703121561268c57600080fd5b8435612697816122e3565b935060208501356126a7816122e3565b925060408501359150606085013567ffffffffffffffff8111156126ca57600080fd5b8501601f810187136126db57600080fd5b80356126ee6126e982612630565b612485565b81815288602083850101111561270357600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60006040828403121561273757600080fd5b50919050565b60008083601f84011261274f57600080fd5b50813567ffffffffffffffff81111561276757600080fd5b602083019150836020828501011115610e8557600080fd5b60008060008060008060008060008060e08b8d03121561279e57600080fd5b8a3567ffffffffffffffff808211156127b657600080fd5b6127c28e838f01612725565b9b506127d060208e01612305565b9a506127de60408e01612305565b995060608d01359150808211156127f457600080fd5b6128008e838f0161273d565b909950975060808d013591508082111561281957600080fd5b6128258e838f016124d4565b909750955060a08d013591508082111561283e57600080fd5b5061284b8d828e016124d4565b909450925061285e905060c08c01612305565b90509295989b9194979a5092959850565b6000806040838503121561288257600080fd5b823561288d816122e3565b91506020830135612625816122e3565b600181811c908216806128b157607f821691505b602082108103612737577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80820281158282048414176108ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261295e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129c757600080fd5b83018035915067ffffffffffffffff8211156129e257600080fd5b602001915036819003821315610e8557600080fd5b601f8211156110ae57600081815260208120601f850160051c81016020861015612a1e5750805b601f850160051c820191505b81811015610dde57828155600101612a2a565b67ffffffffffffffff831115612a5557612a55612456565b612a6983612a63835461289d565b836129f7565b6000601f841160018114612abb5760008515612a855750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612b51565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612b0a5786850135825560209485019460019092019101612aea565b5086821015612b45577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060208284031215612b6a57600080fd5b815167ffffffffffffffff811115612b8157600080fd5b8201601f81018413612b9257600080fd5b8051612ba06126e982612630565b818152856020838501011115612bb557600080fd5b612bc682602083016020860161232d565b95945050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60008251612c2e81846020870161232d565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612c776080830184612351565b9695505050505050565b600060208284031215612c9357600080fd5b81516122dc8161229156fea26469706673582212204ca1db9a932cea1cc5ce2f7e3bb3438658df8eee7a2f000130171a0f8af4a25064736f6c63430008150033