Overview ERC721
Total Supply:
1 PMN

Holders:
1
Profile Summary
Blockchain:
Fuji (43113)

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

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 13 Jun 2023 11:57:11 GMT
NFTDrop.sol
contracts
NFTDrop.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "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": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "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": "uint256",
        "name": "startTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxMintsPerWallet",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxMints",
        "type": "uint256"
      },
      {
        "internalType": "enum NFTDrop.MintingOption",
        "name": "option",
        "type": "uint8"
      }
    ],
    "name": "addMintPhase",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "users",
        "type": "address[]"
      }
    ],
    "name": "addToAllowlist",
    "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": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "checkCanMint",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "phaseIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newStartTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newEndTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newMaxMintsPerWallet",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newMaxMints",
        "type": "uint256"
      },
      {
        "internalType": "enum NFTDrop.MintingOption",
        "name": "newOption",
        "type": "uint8"
      }
    ],
    "name": "editMintPhase",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAllowlist",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPhase",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMaxSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "phaseIndex",
        "type": "uint256"
      }
    ],
    "name": "getMintPhaseDetails",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxMintsPerWallet",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxMints",
            "type": "uint256"
          },
          {
            "internalType": "enum NFTDrop.MintingOption",
            "name": "option",
            "type": "uint8"
          }
        ],
        "internalType": "struct NFTDrop.MintPhase",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMintPhases",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "startTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "endTime",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxMintsPerWallet",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxMints",
            "type": "uint256"
          },
          {
            "internalType": "enum NFTDrop.MintingOption",
            "name": "option",
            "type": "uint8"
          }
        ],
        "internalType": "struct NFTDrop.MintPhase[]",
        "name": "",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMintPrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getRevealTime",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getRoyaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyPercentage",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getUnrevealedURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "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": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "isUserAllowed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_tokenURI",
        "type": "string"
      }
    ],
    "name": "lazyMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string[]",
        "name": "_tokenURIs",
        "type": "string[]"
      }
    ],
    "name": "lazyMintMultiple",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "payable",
    "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": "users",
        "type": "address[]"
      }
    ],
    "name": "removeFromAllowlist",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "phaseIndex",
        "type": "uint256"
      }
    ],
    "name": "removeMintPhase",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "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": "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": [],
    "name": "setEnableReveal",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newMaxSupply",
        "type": "uint256"
      }
    ],
    "name": "setMaxSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newMintPrice",
        "type": "uint256"
      }
    ],
    "name": "setMintPrice",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_tokenURI",
        "type": "string"
      }
    ],
    "name": "setPreMintURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "revealTimestamp",
        "type": "uint256"
      }
    ],
    "name": "setRevealTime",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "percentage",
        "type": "uint256"
      }
    ],
    "name": "setRoyaltyInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "newURI",
        "type": "string"
      }
    ],
    "name": "setTokenURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "newURI",
        "type": "string"
      }
    ],
    "name": "setUnrevealedURI",
    "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": [],
    "name": "totalLazyMintedTokens",
    "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"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b50604080518082018252600b81526a2830b4b73a32b21026a0a760a91b6020808301918252835180850190945260038452622826a760e91b90840152815191929162000060916000916200010a565b508051620000769060019060208401906200010a565b505050620000936200008d620000b460201b60201c565b620000b8565b6000600c819055600d5567016345785d8a0000600e55600a600f55620001ed565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011890620001b0565b90600052602060002090601f0160209004810192826200013c576000855562000187565b82601f106200015757805160ff191683800117855562000187565b8280016001018555821562000187579182015b82811115620001875782518255916020019190600101906200016a565b506200019592915062000199565b5090565b5b808211156200019557600081556001016200019a565b600181811c90821680620001c557607f821691505b60208210811415620001e757634e487b7160e01b600052602260045260246000fd5b50919050565b6140e580620001fd6000396000f3fe6080604052600436106102c95760003560e01c80636f8b44b011610175578063a86a28d1116100dc578063e0bae01011610095578063e985e9c51161006f578063e985e9c514610880578063f2fde38b146108c9578063f4a0a528146108e9578063fe2c7fee1461090957600080fd5b8063e0bae01014610820578063e2e784d514610840578063e382c2ea1461086057600080fd5b8063a86a28d11461075a578063b88d4fde1461077e578063c1e285071461079e578063c5eff3d0146107be578063c87b56dd146107e0578063d339d8d01461080057600080fd5b8063a22cb4651161012e578063a22cb465146106bb578063a3a40ea5146106db578063a48cc120146106f0578063a52ba4e814610705578063a790b99a14610725578063a7f93ebd1461074557600080fd5b80636f8b44b01461061157806370a0823114610631578063715018a61461065157806376165a23146106665780638da5cb5b1461068857806395d89b41146106a657600080fd5b8063346b662e116102345780634f6ccce7116101ed5780635aa38de4116101c75780635aa38de4146105a95780636352211e146105c957806366407781146105e95780636a627842146105fe57600080fd5b80634f6ccce71461054957806351cff8d9146105695780635207c2731461058957600080fd5b8063346b662e146104925780633f91040e146104bf57806342842e0e146104d457806342966c68146104f45780634c0f38c2146105145780634f296eac1461052957600080fd5b8063162094c411610286578063162094c4146103be57806318160ddd146103de57806323b872dd146103f357806326fa33ec146104135780632a55205a146104335780632f745c591461047257600080fd5b806301ffc9a7146102ce57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d578063104b6cb71461037f578063157b04481461039f575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613ae1565b610929565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b50610318610954565b6040516102fa9190613dd9565b34801561033157600080fd5b50610345610340366004613b4c565b6109e6565b6040516001600160a01b0390911681526020016102fa565b34801561036957600080fd5b5061037d610378366004613984565b610a0d565b005b34801561038b57600080fd5b5061037d61039a3660046139af565b610b28565b3480156103ab57600080fd5b506010545b6040519081526020016102fa565b3480156103ca57600080fd5b5061037d6103d9366004613b64565b610d83565b3480156103ea57600080fd5b506009546103b0565b3480156103ff57600080fd5b5061037d61040e366004613896565b610e17565b34801561041f57600080fd5b5061037d61042e366004613b19565b610e49565b34801561043f57600080fd5b5061045361044e366004613ba9565b610eaf565b604080516001600160a01b0390931683526020830191909152016102fa565b34801561047e57600080fd5b506103b061048d366004613984565b610ee4565b34801561049e57600080fd5b506104b26104ad366004613b4c565b610f7a565b6040516102fa9190613f29565b3480156104cb57600080fd5b5061037d61105f565b3480156104e057600080fd5b5061037d6104ef366004613896565b61106d565b34801561050057600080fd5b5061037d61050f366004613b4c565b611088565b34801561052057600080fd5b50600f546103b0565b34801561053557600080fd5b5061037d610544366004613bca565b6110ff565b34801561055557600080fd5b506103b0610564366004613b4c565b611241565b34801561057557600080fd5b5061037d610584366004613842565b6112e2565b34801561059557600080fd5b5061037d6105a43660046139af565b61141c565b3480156105b557600080fd5b5061037d6105c4366004613c12565b611568565b3480156105d557600080fd5b506103456105e4366004613b4c565b6116ca565b3480156105f557600080fd5b5061031861172a565b61037d61060c366004613842565b611739565b34801561061d57600080fd5b5061037d61062c366004613b4c565b611ce8565b34801561063d57600080fd5b506103b061064c366004613842565b611d6d565b34801561065d57600080fd5b5061037d611df3565b34801561067257600080fd5b5061067b611e07565b6040516102fa9190613d97565b34801561069457600080fd5b50600b546001600160a01b0316610345565b3480156106b257600080fd5b50610318611ee3565b3480156106c757600080fd5b5061037d6106d6366004613953565b611ef2565b3480156106e757600080fd5b506103b0611efd565b3480156106fc57600080fd5b50600d546103b0565b34801561071157600080fd5b506102ee610720366004613842565b611fdb565b34801561073157600080fd5b5061037d610740366004613b4c565b612030565b34801561075157600080fd5b50600e546103b0565b34801561076657600080fd5b506104536012546013546001600160a01b0390911691565b34801561078a57600080fd5b5061037d6107993660046138d6565b6121ac565b3480156107aa57600080fd5b5061037d6107b9366004613b4c565b6121e4565b3480156107ca57600080fd5b506107d36121f1565b6040516102fa9190613d4a565b3480156107ec57600080fd5b506103186107fb366004613b4c565b612252565b34801561080c57600080fd5b506102ee61081b366004613842565b61232e565b34801561082c57600080fd5b5061037d61083b366004613a1f565b6124f1565b34801561084c57600080fd5b5061037d61085b366004613984565b6125ae565b34801561086c57600080fd5b5061037d61087b366004613b64565b61262d565b34801561088c57600080fd5b506102ee61089b36600461385e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108d557600080fd5b5061037d6108e4366004613842565b612635565b3480156108f557600080fd5b5061037d610904366004613b4c565b6126ab565b34801561091557600080fd5b5061037d610924366004613b19565b6126b8565b60006001600160e01b0319821663152a902d60e11b148061094e575061094e826126d3565b92915050565b60606000805461096390614002565b80601f016020809104026020016040519081016040528092919081815260200182805461098f90614002565b80156109dc5780601f106109b1576101008083540402835291602001916109dc565b820191906000526020600020905b8154815290600101906020018083116109bf57829003601f168201915b5050505050905090565b60006109f1826126f8565b506000908152600460205260409020546001600160a01b031690565b6000610a18826116ca565b9050806001600160a01b0316836001600160a01b03161415610a8b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610aa75750610aa7813361089b565b610b195760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a82565b610b238383612748565b505050565b610b306127b6565b60005b81811015610b235760176000848484818110610b5f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b749190613842565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7157600060176000858585818110610bbc57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bd19190613842565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091555b601854811015610d6f57838383818110610c2757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c3c9190613842565b6001600160a01b031660188281548110610c6657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d5d5760188054610c9190600190613fbf565b81548110610caf57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601880546001600160a01b039092169183908110610ce957634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506018805480610d3657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d6f565b80610d678161403d565b915050610bfd565b505b80610d7b8161403d565b915050610b33565b610d8b6127b6565b600d548210610ddc5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e2049442065786365656473206c617a79206d696e74206c696d69746044820152606401610a82565b610de582612810565b15610df857610df4828261282d565b5050565b60008281526016602090815260409091208251610b239284019061369b565b610e22335b826128b8565b610e3e5760405162461bcd60e51b8152600401610a8290613dec565b610b23838383612937565b610e516127b6565b600f54600d5410610e745760405162461bcd60e51b8152600401610a8290613efd565b600d5460009081526016602090815260409091208251610e969284019061369b565b50600d8054906000610ea78361403d565b919050555050565b6012546013546001600160a01b0390911690600090606490610ed19085613fa0565b610edb9190613f80565b90509250929050565b6000610eef83611d6d565b8210610f515760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a82565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b610f8261371f565b6019548210610fa35760405162461bcd60e51b8152600401610a8290613ed0565b60198281548110610fc457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16600281111561103757634e487b7160e01b600052602160045260246000fd5b600281111561105657634e487b7160e01b600052602160045260246000fd5b90525092915050565b6110676127b6565b42601055565b610b23838383604051806020016040528060008152506121ac565b61109133610e1c565b6110f35760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a206275726e2063616c6c6572206973206e6f74206f776e657260448201526c081b9bdc88185c1c1c9bdd9959609a1b6064820152608401610a82565b6110fc81612aa8565b50565b6111076127b6565b83851061114b5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642074696d652072616e676560701b6044820152606401610a82565b60196040518060a0016040528087815260200186815260200185815260200184815260200183600281111561119057634e487b7160e01b600052602160045260246000fd5b90528154600181810184556000938452602093849020835160059093020191825592820151818401556040820151600280830191909155606083015160038301556080830151600483018054949593949193909260ff1990921691849081111561120a57634e487b7160e01b600052602160045260246000fd5b0217905550505060006014600060016019805490506112299190613fbf565b81526020810191909152604001600020555050505050565b600061124c60095490565b82106112af5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a82565b600982815481106112d057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6112ea6127b6565b47806113315760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610a82565b6001600160a01b0382166113875760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610a82565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146113d4576040519150601f19603f3d011682016040523d82523d6000602084013e6113d9565b606091505b5050905080610b235760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b6044820152606401610a82565b6114246127b6565b60005b81811015610b23576017600084848481811061145357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114689190613842565b6001600160a01b0316815260208101919091526040016000205460ff16611556576001601760008585858181106114af57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114c49190613842565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055601883838381811061150e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115239190613842565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b806115608161403d565b915050611427565b6115706127b6565b60195486106115915760405162461bcd60e51b8152600401610a8290613ed0565b8385106115d55760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642074696d652072616e676560701b6044820152606401610a82565b6040518060a0016040528086815260200185815260200184815260200183815260200182600281111561161857634e487b7160e01b600052602160045260246000fd5b8152506019878154811061163c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908360028111156116aa57634e487b7160e01b600052602160045260246000fd5b021790555050506000958652505060146020525050604082209190915550565b6000818152600260205260408120546001600160a01b03168061094e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a82565b60606011805461096390614002565b6000611743611efd565b9050426019828154811061176757634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160000154111580156117b95750601981815481106117a357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600101544211155b6117f95760405162461bcd60e51b81526020600482015260116024820152704e6f7420696e206d696e7420706861736560781b6044820152606401610a82565b6000611803611efd565b905060006019828154811061182857634e487b7160e01b600052603260045260246000fd5b600091825260209091206004600590920201015460ff169050600281600281111561186357634e487b7160e01b600052602160045260246000fd5b1415806118a45750600281600281111561188d57634e487b7160e01b600052602160045260246000fd5b1480156118a45750600b546001600160a01b031633145b6119045760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e67206973207265737472696374656420746f2074686520636f6e60448201526a3a3930b1ba1037bbb732b960a91b6064820152608401610a82565b600181600281111561192657634e487b7160e01b600052602160045260246000fd5b1415806119615750600181600281111561195057634e487b7160e01b600052602160045260246000fd5b148015611961575061196133611fdb565b6119c45760405162461bcd60e51b815260206004820152602e60248201527f4d696e74696e67206973207265737472696374656420746f20616c6c6f776c6960448201526d737465642061646472657373657360901b6064820152608401610a82565b600f54600c54106119e75760405162461bcd60e51b8152600401610a8290613efd565b600e543414611a2d5760405162461bcd60e51b8152602060048201526012602482015271135a5b9d081c1c9a58d9481b9bdd081b595d60721b6044820152606401610a82565b60198281548110611a4e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320600260059093020191909101548483526015825260408084206001600160a01b038916855290925291205410611ae35760405162461bcd60e51b815260206004820152602a60248201527f4d6178206d696e7473207065722077616c6c657420696e2074686973207068616044820152691cd9481c995858da195960b21b6064820152608401610a82565b60198281548110611b0457634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160030154601460008481526020019081526020016000205410611b775760405162461bcd60e51b815260206004820152601f60248201527f4d6178206d696e747320696e20746869732070686173652072656163686564006044820152606401610a82565b600d54600c5410611bca5760405162461bcd60e51b815260206004820152601a60248201527f4e6f206c617a79206d696e74656420746f6b656e73206c6566740000000000006044820152606401610a82565b611bd684600c54612ab1565b600c5460008181526016602052604090208054611c7b929190611bf890614002565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2490614002565b8015611c715780601f10611c4657610100808354040283529160200191611c71565b820191906000526020600020905b815481529060010190602001808311611c5457829003601f168201915b505050505061282d565b600c8054906000611c8b8361403d565b909155505060008281526015602090815260408083206001600160a01b03881684529091528120805491611cbe8361403d565b90915550506000828152601460205260408120805491611cdd8361403d565b919050555050505050565b611cf06127b6565b600c54811015611d685760405162461bcd60e51b815260206004820152603e60248201527f4e6577206d617820737570706c792063616e2774206265206c6f77657220746860448201527f616e2063757272656e7420746f74616c206d696e74656420746f6b656e7300006064820152608401610a82565b600f55565b60006001600160a01b038216611dd75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a82565b506001600160a01b031660009081526003602052604090205490565b611dfb6127b6565b611e056000612acb565b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611eda57838290600052602060002090600502016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff166002811115611ea857634e487b7160e01b600052602160045260246000fd5b6002811115611ec757634e487b7160e01b600052602160045260246000fd5b8152505081526020019060010190611e2b565b50505050905090565b60606001805461096390614002565b610df4338383612b1d565b6000805b601954811015611f9b5760198181548110611f2c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600001544210158015611f7f575060198181548110611f6957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600101544211155b15611f8957919050565b80611f938161403d565b915050611f01565b5060405162461bcd60e51b81526020600482015260146024820152734e6f20616374697665206d696e7420706861736560601b6044820152606401610a82565b6000611fef600b546001600160a01b031690565b6001600160a01b0316826001600160a01b031614612028576001600160a01b03821660009081526017602052604090205460ff1661094e565b600192915050565b6120386127b6565b60195481106120595760405162461bcd60e51b8152600401610a8290613ed0565b60195461206890600190613fbf565b811461213f576019805461207e90600190613fbf565b8154811061209c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201601982815481106120cb57634e487b7160e01b600052603260045260246000fd5b600091825260209091208254600590920201908155600180830154818301556002808401548184015560038085015490840155600480850154908401805460ff90921693909260ff1990921691849081111561213757634e487b7160e01b600052602160045260246000fd5b021790555050505b601980548061215e57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600560001990940193840201828155600181018390556002810183905560038101839055600401805460ff1916905591909255601954825260149052604081205550565b6121b633836128b8565b6121d25760405162461bcd60e51b8152600401610a8290613dec565b6121de84848484612bec565b50505050565b6121ec6127b6565b601055565b606060188054806020026020016040519081016040528092919081815260200182805480156109dc57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161222b575050505050905090565b60606010544210156122f0576011805461226b90614002565b80601f016020809104026020016040519081016040528092919081815260200182805461229790614002565b80156122e45780601f106122b9576101008083540402835291602001916122e4565b820191906000526020600020905b8154815290600101906020018083116122c757829003601f168201915b50505050509050919050565b600d5482108015612307575061230582612810565b155b15612325576000828152601660205260409020805461226b90614002565b61094e82612c1f565b600080612339611efd565b905060006019828154811061235e57634e487b7160e01b600052603260045260246000fd5b600091825260209091206004600590920201015460ff169050600281600281111561239957634e487b7160e01b600052602160045260246000fd5b14156123c357600b546001600160a01b038581169116146123be575060009392505050565b6124e7565b60018160028111156123e557634e487b7160e01b600052602160045260246000fd5b1415612402576123f484611fdb565b6123be575060009392505050565b600f54600c5410612417575060009392505050565b6019828154811061243857634e487b7160e01b600052603260045260246000fd5b60009182526020808320600260059093020191909101548483526015825260408084206001600160a01b03891685529092529120541061247c575060009392505050565b6019828154811061249d57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600301546014600084815260200190815260200160002054106124d2575060009392505050565b600d54600c54106124e7575060009392505050565b5060019392505050565b6124f96127b6565b600f548151600d5461250b9190613f68565b11156125295760405162461bcd60e51b8152600401610a8290613efd565b60005b8151811015610df45781818151811061255557634e487b7160e01b600052603260045260246000fd5b602002602001015160166000600d548152602001908152602001600020908051906020019061258592919061369b565b50600d80549060006125968361403d565b919050555080806125a69061403d565b91505061252c565b6125b66127b6565b60648111156126075760405162461bcd60e51b815260206004820152601960248201527f50657263656e74616765206d757374206265203c3d20313030000000000000006044820152606401610a82565b601280546001600160a01b0319166001600160a01b039390931692909217909155601355565b610df86127b6565b61263d6127b6565b6001600160a01b0381166126a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a82565b6110fc81612acb565b6126b36127b6565b600e55565b6126c06127b6565b8051610df490601190602084019061369b565b60006001600160e01b0319821663780e9d6360e01b148061094e575061094e82612d28565b61270181612810565b6110fc5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a82565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061277d826116ca565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600b546001600160a01b03163314611e055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a82565b6000908152600260205260409020546001600160a01b0316151590565b61283682612810565b6128995760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a82565b60008281526006602090815260409091208251610b239284019061369b565b6000806128c4836116ca565b9050806001600160a01b0316846001600160a01b0316148061290b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061292f5750836001600160a01b0316612924846109e6565b6001600160a01b0316145b949350505050565b826001600160a01b031661294a826116ca565b6001600160a01b0316146129705760405162461bcd60e51b8152600401610a8290613e8b565b6001600160a01b0382166129d25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a82565b6129df8383836001612d78565b826001600160a01b03166129f2826116ca565b6001600160a01b031614612a185760405162461bcd60e51b8152600401610a8290613e8b565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6110fc81612d84565b610df4828260405180602001604052806000815250612dc4565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415612b7f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a82565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612bf7848484612937565b612c0384848484612df7565b6121de5760405162461bcd60e51b8152600401610a8290613e39565b6060612c2a826126f8565b60008281526006602052604081208054612c4390614002565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6f90614002565b8015612cbc5780601f10612c9157610100808354040283529160200191612cbc565b820191906000526020600020905b815481529060010190602001808311612c9f57829003601f168201915b505050505090506000612cda60408051602081019091526000815290565b9050805160001415612ced575092915050565b815115612d1f578082604051602001612d07929190613cde565b60405160208183030381529060405292505050919050565b61292f84612f04565b60006001600160e01b031982166380ac58cd60e01b1480612d5957506001600160e01b03198216635b5e139f60e01b145b8061094e57506301ffc9a760e01b6001600160e01b031983161461094e565b6121de84848484612f78565b612d8d816130b8565b60008181526006602052604090208054612da690614002565b1590506110fc5760008181526006602052604081206110fc9161376c565b612dce838361315b565b612ddb6000848484612df7565b610b235760405162461bcd60e51b8152600401610a8290613e39565b60006001600160a01b0384163b15612ef957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e3b903390899088908890600401613d0d565b602060405180830381600087803b158015612e5557600080fd5b505af1925050508015612e85575060408051601f3d908101601f19168201909252612e8291810190613afd565b60015b612edf573d808015612eb3576040519150601f19603f3d011682016040523d82523d6000602084013e612eb8565b606091505b508051612ed75760405162461bcd60e51b8152600401610a8290613e39565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061292f565b506001949350505050565b6060612f0f826126f8565b6000612f2660408051602081019091526000815290565b90506000815111612f465760405180602001604052806000815250612f71565b80612f50846132d6565b604051602001612f61929190613cde565b6040516020818303038152906040525b9392505050565b612f8484848484613381565b6001811115612ff35760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610a82565b816001600160a01b03851661304f5761304a81600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b613072565b836001600160a01b0316856001600160a01b031614613072576130728582613409565b6001600160a01b03841661308e57613089816134a6565b6130b1565b846001600160a01b0316846001600160a01b0316146130b1576130b1848261357f565b5050505050565b60006130c3826116ca565b90506130d3816000846001612d78565b6130dc826116ca565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166131b15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a82565b6131ba81612810565b156132075760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a82565b613215600083836001612d78565b61321e81612810565b1561326b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a82565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006132e3836135c3565b600101905060008167ffffffffffffffff81111561331157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561333b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461337457613379565b613345565b509392505050565b60018111156121de576001600160a01b038416156133c7576001600160a01b038416600090815260036020526040812080548392906133c1908490613fbf565b90915550505b6001600160a01b038316156121de576001600160a01b038316600090815260036020526040812080548392906133fe908490613f68565b909155505050505050565b6000600161341684611d6d565b6134209190613fbf565b600083815260086020526040902054909150808214613473576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906134b890600190613fbf565b6000838152600a6020526040812054600980549394509092849081106134ee57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806009838154811061351d57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061356357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061358a83611d6d565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106136025772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061362e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061364c57662386f26fc10000830492506010015b6305f5e1008310613664576305f5e100830492506008015b612710831061367857612710830492506004015b6064831061368a576064830492506002015b600a831061094e5760010192915050565b8280546136a790614002565b90600052602060002090601f0160209004810192826136c9576000855561370f565b82601f106136e257805160ff191683800117855561370f565b8280016001018555821561370f579182015b8281111561370f5782518255916020019190600101906136f4565b5061371b9291506137a2565b5090565b6040518060a00160405280600081526020016000815260200160008152602001600081526020016000600281111561376757634e487b7160e01b600052602160045260246000fd5b905290565b50805461377890614002565b6000825580601f10613788575050565b601f0160209004906000526020600020908101906110fc91905b5b8082111561371b57600081556001016137a3565b600067ffffffffffffffff8311156137d1576137d161406e565b6137e4601f8401601f1916602001613f37565b90508281528383830111156137f857600080fd5b828260208301376000602084830101529392505050565b80356003811061381e57600080fd5b919050565b600082601f830112613833578081fd5b612f71838335602085016137b7565b600060208284031215613853578081fd5b8135612f7181614084565b60008060408385031215613870578081fd5b823561387b81614084565b9150602083013561388b81614084565b809150509250929050565b6000806000606084860312156138aa578081fd5b83356138b581614084565b925060208401356138c581614084565b929592945050506040919091013590565b600080600080608085870312156138eb578081fd5b84356138f681614084565b9350602085013561390681614084565b925060408501359150606085013567ffffffffffffffff811115613928578182fd5b8501601f81018713613938578182fd5b613947878235602084016137b7565b91505092959194509250565b60008060408385031215613965578182fd5b823561397081614084565b91506020830135801515811461388b578182fd5b60008060408385031215613996578182fd5b82356139a181614084565b946020939093013593505050565b600080602083850312156139c1578182fd5b823567ffffffffffffffff808211156139d8578384fd5b818501915085601f8301126139eb578384fd5b8135818111156139f9578485fd5b8660208260051b8501011115613a0d578485fd5b60209290920196919550909350505050565b60006020808385031215613a31578182fd5b823567ffffffffffffffff80821115613a48578384fd5b818501915085601f830112613a5b578384fd5b813581811115613a6d57613a6d61406e565b8060051b613a7c858201613f37565b8281528581019085870183870188018b1015613a96578889fd5b8893505b84841015613ad357803586811115613ab057898afd5b613abe8c8a838b0101613823565b84525060019390930192918701918701613a9a565b509998505050505050505050565b600060208284031215613af2578081fd5b8135612f7181614099565b600060208284031215613b0e578081fd5b8151612f7181614099565b600060208284031215613b2a578081fd5b813567ffffffffffffffff811115613b40578182fd5b61292f84828501613823565b600060208284031215613b5d578081fd5b5035919050565b60008060408385031215613b76578182fd5b82359150602083013567ffffffffffffffff811115613b93578182fd5b613b9f85828601613823565b9150509250929050565b60008060408385031215613bbb578182fd5b50508035926020909101359150565b600080600080600060a08688031215613be1578283fd5b85359450602086013593506040860135925060608601359150613c066080870161380f565b90509295509295909350565b60008060008060008060c08789031215613c2a578384fd5b8635955060208701359450604087013593506060870135925060808701359150613c5660a0880161380f565b90509295509295509295565b60008151808452613c7a816020860160208601613fd6565b601f01601f19169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160038110613cd357634e487b7160e01b600052602160045260246000fd5b806080840152505050565b60008351613cf0818460208801613fd6565b835190830190613d04818360208801613fd6565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d4090830184613c62565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d8b5783516001600160a01b031683529284019291840191600101613d66565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613d8b57613dc6838551613c8e565b9284019260a09290920191600101613db3565b602081526000612f716020830184613c62565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b602080825260139082015272092dcecc2d8d2c840e0d0c2e6ca40d2dcc8caf606b1b604082015260600190565b60208082526012908201527113585e081cdd5c1c1b1e481c995858da195960721b604082015260600190565b60a0810161094e8284613c8e565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f6057613f6061406e565b604052919050565b60008219821115613f7b57613f7b614058565b500190565b600082613f9b57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613fba57613fba614058565b500290565b600082821015613fd157613fd1614058565b500390565b60005b83811015613ff1578181015183820152602001613fd9565b838111156121de5750506000910152565b600181811c9082168061401657607f821691505b6020821081141561403757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561405157614051614058565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110fc57600080fd5b6001600160e01b0319811681146110fc57600080fdfea264697066735822122010d0b2e86a421d9eb7613d007da4395224fdb8a30ee379ebcfa539676065d09864736f6c63430008040033