Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,994,945.59 NO-CHANNEL

Holders:
5
Profile Summary
Blockchain:
Base Sepolia (84532)


Decimals:
18
Contract Source Code Verified (Exact Match)
Contract Name:
CommunityCuration

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Created At:
Fri, 16 Aug 2024 08:17:54 GMT
CommunityCuration.sol
src
CommunityCuration.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AlreadyInitialized",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ExceedsMaxTokensPerIdPerUser",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "HasPaused",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidTokenId",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MintingDeadlinePassed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NewOwnerIsZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoHandoverRequest",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyFactoryAllowed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "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": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "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": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256[]",
        "name": "ids",
        "type": "uint256[]"
      },
      {
        "indexed": false,
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      }
    ],
    "name": "TransferBatch",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "TransferSingle",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "value",
        "type": "string"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      }
    ],
    "name": "URI",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256[]",
        "name": "ids",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "_safeBatchTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "_safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "_transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "_transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_id",
        "type": "uint256"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "owners",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "ids",
        "type": "uint256[]"
      }
    ],
    "name": "balanceOfBatch",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "balances",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "baseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "batchMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnNFT",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnToBlank",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "dan",
    "outputs": [
      {
        "internalType": "contract IDan",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getDanAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dan_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "factory_",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "name_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "symbol_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "baseURI_",
        "type": "string"
      },
      {
        "internalType": "uint8",
        "name": "decimals_",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "tokenUnit_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "maxTokensPerIdPerUser_",
        "type": "uint256"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      }
    ],
    "name": "isOwned",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxTokenId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxTokensPerIdPerUser",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "mint",
    "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": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "mintFromBlank",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "nftBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ownedBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "result",
        "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": "pause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "requestOwnershipHandover",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256[]",
        "name": "ids",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeBatchTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "id",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_maxTokensPerIdPerUser",
        "type": "uint256"
      }
    ],
    "name": "setMaxTokensPerIdPerUser",
    "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": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "tokenBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokenUnit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalNFTSupply",
    "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": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "unit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "unpause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "uri",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60c060405234801561001057600080fd5b50604051806040016040528060058152602001640444e3432360dc1b815250604051806040016040528060058152602001640444e3432360dc1b815250604051806020016040528060008152506012620186a0848483826000908161007591906101f9565b50600161008283826101f9565b506002805460ff191660ff83161790554660805261009e6100c0565b60a05250600b91506100b2905084826101f9565b50600a555061032c92505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516100f291906102b7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061018457607f821691505b6020821081036101a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f457806000526020600020601f840160051c810160208510156101d15750805b601f840160051c820191505b818110156101f157600081556001016101dd565b50505b505050565b81516001600160401b038111156102125761021261015a565b610226816102208454610170565b846101aa565b6020601f82116001811461025a57600083156102425750848201515b600019600385901b1c1916600184901b1784556101f1565b600084815260208120601f198516915b8281101561028a578785015182556020948501946001909201910161026a565b50848210156102a85786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60008083546102c581610170565b6001821680156102dc57600181146102f157610321565b60ff1983168652811515820286019350610321565b86600052602060002060005b83811015610319578154888201526001909101906020016102fd565b505081860193505b509195945050505050565b60805160a0516140506103516000396000610fa301526000610f6e01526140506000f3fe6080604052600436106103345760003560e01c80637ecebe00116101ab578063bbc65600116100f7578063e64d6fd011610095578063f04e283e1161006f578063f04e283e1461099c578063f242432a146109af578063f2fde38b146109cf578063fee81cf4146109e257600080fd5b8063e64d6fd014610913578063e93c980d1461094b578063e985e9c51461096157600080fd5b8063d505accf116100d1578063d505accf14610879578063dd62ed3e14610899578063e2c79281146108d1578063e42c08f2146108e657600080fd5b8063bbc6560014610819578063c45a015514610839578063cb7125351461085957600080fd5b806390e60bfa11610164578063a22cb4651161013e578063a22cb46514610799578063a9059cbb146107b9578063ae307da6146107d9578063b48ab8b6146107f957600080fd5b806390e60bfa1461075057806391ba317a1461076e57806395d89b411461078457600080fd5b80637ecebe00146106885780637f5181b0146106b55780638456cb59146106ed5780638da5cb5b146107025780638e8a75901461071b578063907af6c01461073b57600080fd5b80633644e5151161028557806354d1f13d1161022357806370a08231116101fd57806370a082311461060a578063715018a614610640578063731133e9146106485780637d17108d1461066857600080fd5b806354d1f13d146105cd5780636c0360eb146105d55780636cbeac71146105ea57600080fd5b806340c10f191161025f57806340c10f19146105405780634847a79c146105605780634e1273f4146105805780634f2999a7146105ad57600080fd5b80633644e515146104f657806337d9d58d1461050b5780633f4ba83a1461052b57600080fd5b806318160ddd116102f257806325692962116102cc578063256929621461048c5780632b9cb499146104945780632eb2c2d6146104aa578063313ce567146104ca57600080fd5b806318160ddd146104345780631cc509fd1461044a57806323b872dd1461046c57600080fd5b8062fdd58e1461033957806301ffc9a71461036c578063032fe0df1461039c57806306fdde03146103d2578063095ea7b3146103f45780630e89341c14610414575b600080fd5b34801561034557600080fd5b50610359610354366004613152565b610a15565b6040519081526020015b60405180910390f35b34801561037857600080fd5b5061038c610387366004613192565b610a40565b6040519015158152602001610363565b3480156103a857600080fd5b506103596103b73660046131af565b6001600160a01b03166000908152600d602052604090205490565b3480156103de57600080fd5b506103e7610a8e565b604051610363919061321a565b34801561040057600080fd5b5061038c61040f366004613152565b610b1c565b34801561042057600080fd5b506103e761042f36600461322d565b610b88565b34801561044057600080fd5b5061035960035481565b34801561045657600080fd5b5061046a610465366004613246565b610bfa565b005b34801561047857600080fd5b5061038c610487366004613279565b610c9d565b61046a610cd7565b3480156104a057600080fd5b5061035960105481565b3480156104b657600080fd5b5061046a6104c5366004613342565b610d26565b3480156104d657600080fd5b506002546104e49060ff1681565b60405160ff9091168152602001610363565b34801561050257600080fd5b50610359610f6a565b34801561051757600080fd5b5061038c610526366004613152565b610fc5565b34801561053757600080fd5b5061046a610ffd565b34801561054c57600080fd5b5061046a61055b366004613152565b611011565b34801561056c57600080fd5b5061038c61057b366004613152565b611027565b34801561058c57600080fd5b506105a061059b366004613406565b61109f565b60405161036391906134b1565b3480156105b957600080fd5b5061046a6105c8366004613342565b6111bb565b61046a611440565b3480156105e157600080fd5b506103e761147c565b3480156105f657600080fd5b5061046a610605366004613587565b611489565b34801561061657600080fd5b506103596106253660046131af565b6001600160a01b031660009081526004602052604090205490565b61046a611618565b34801561065457600080fd5b5061046a6106633660046135f8565b61162c565b34801561067457600080fd5b5061046a610683366004613669565b611796565b34801561069457600080fd5b506103596106a33660046131af565b60066020526000908152604090205481565b3480156106c157600080fd5b50600e546106d5906001600160a01b031681565b6040516001600160a01b039091168152602001610363565b3480156106f957600080fd5b5061046a6118a1565b34801561070e57600080fd5b50638b78c6d819546106d5565b34801561072757600080fd5b5061046a610736366004613757565b6118b8565b34801561074757600080fd5b50610359611aae565b34801561075c57600080fd5b50600e546001600160a01b03166106d5565b34801561077a57600080fd5b5061035960095481565b34801561079057600080fd5b506103e7611acf565b3480156107a557600080fd5b5061046a6107b43660046137dc565b611adc565b3480156107c557600080fd5b5061038c6107d4366004613152565b611b49565b3480156107e557600080fd5b5061046a6107f4366004613813565b611b7a565b34801561080557600080fd5b5061046a6108143660046138b7565b611c29565b34801561082557600080fd5b5061046a61083436600461322d565b611e18565b34801561084557600080fd5b50600f546106d5906001600160a01b031681565b34801561086557600080fd5b5061038c610874366004613279565b611e48565b34801561088557600080fd5b5061046a610894366004613941565b611f3a565b3480156108a557600080fd5b506103596108b43660046139ac565b600560209081526000928352604080842090915290825290205481565b3480156108dd57600080fd5b5061035961217e565b3480156108f257600080fd5b506103596109013660046131af565b60046020526000908152604090205481565b34801561091f57600080fd5b5061035961092e366004613152565b600760209081526000928352604080842090915290825290205481565b34801561095757600080fd5b50610359600a5481565b34801561096d57600080fd5b5061038c61097c3660046139ac565b600860209081526000928352604080842090915290825290205460ff1681565b61046a6109aa3660046131af565b612195565b3480156109bb57600080fd5b5061046a6109ca366004613757565b6121d5565b61046a6109dd3660046131af565b6122cd565b3480156109ee57600080fd5b506103596109fd3660046131af565b63389a75e1600c908152600091909152602090205490565b6001600160a01b03821660009081526007602090815260408083208484529091529020545b92915050565b60006301ffc9a760e01b6001600160e01b031983161480610a715750636cdb3d1360e11b6001600160e01b03198316145b80610a3a5750506001600160e01b0319166303a24d0760e21b1490565b60008054610a9b906139df565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac7906139df565b8015610b145780601f10610ae957610100808354040283529160200191610b14565b820191906000526020600020905b815481529060010190602001808311610af757829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b779086815260200190565b60405180910390a350600192915050565b600e54604051633bb3a24d60e01b8152600481018390526060916001600160a01b031690633bb3a24d90602401600060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3a9190810190613a19565b600e5460405163284f6eb760e21b81526004810184905283916001600160a01b03169063a13dbadc90602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190613a8f565b610c84576040516307ed98ed60e31b815260040160405180910390fd5b610c8c6122f4565b610c9784848461230f565b50505050565b60115460009060ff1615610cc4576040516315984b6360e21b815260040160405180910390fd5b610ccf8484846123b8565b949350505050565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610d3688888888888888886111bb565b8460005b81811015610eef57858582818110610d5457610d54613aac565b90506020020135600d60008c6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d8f9190613ad8565b909155508690508582818110610da757610da7613aac565b90506020020135600d60008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610de29190613aeb565b90915550610e439050888883818110610dfd57610dfd613aac565b6001600160a01b038d166000908152600c6020908152604080832093820290950135600881901c8352929052929092208054600160ff9094169390931b90921790915550565b6001600160a01b038a16600090815260076020526040812090898984818110610e6e57610e6e613aac565b90506020020135815260200190815260200160002054600003610ee757610ee7888883818110610ea057610ea0613aac565b6001600160a01b038e166000908152600c6020908152604080832093820290950135600881901c8352929052929092208054600160ff9094169390931b1990921690915550565b600101610d3a565b50610f5f898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525061240392505050565b505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610fa057610f9b61250b565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0382166000908152600c60209081526040808320600885901c845290915281205460ff83161c6001165b9392505050565b6110056122f4565b6011805460ff19169055565b6110196122f4565b61102382826125a5565b5050565b33600090815260046020526040812080548391908390611048908490613ad8565b90915550506001600160a01b038316600081815260046020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b779086815260200190565b60608382146110c95760405162461bcd60e51b81526004016110c090613afe565b60405180910390fd5b836001600160401b038111156110e1576110e16134c4565b60405190808252806020026020018201604052801561110a578160200160208202803683370190505b50905060005b848110156111b2576007600087878481811061112e5761112e613aac565b905060200201602081019061114391906131af565b6001600160a01b03166001600160a01b03168152602001908152602001600020600085858481811061117757611177613aac565b9050602002013581526020019081526020016000205482828151811061119f5761119f613aac565b6020908102919091010152600101611110565b50949350505050565b8483146111da5760405162461bcd60e51b81526004016110c090613afe565b336001600160a01b038916148061121457506001600160a01b038816600090815260086020908152604080832033845290915290205460ff165b6112515760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016110c0565b60008060005b878110156113105788888281811061127157611271613aac565b90506020020135925086868281811061128c5761128c613aac565b6001600160a01b038e166000908152600760209081526040808320898452825282208054939091029490940135955085939250906112cb908490613ad8565b90915550506001600160a01b038a16600090815260076020908152604080832086845290915281208054849290611303908490613aeb565b9091555050600101611257565b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516113649493929190613b59565b60405180910390a46001600160a01b0389163b1561140b5760405163bc197c8160e01b808252906001600160a01b038b169063bc197c81906113b89033908f908e908e908e908e908e908e90600401613bb4565b6020604051808303816000875af11580156113d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fb9190613c18565b6001600160e01b03191614611418565b6001600160a01b03891615155b6114345760405162461bcd60e51b81526004016110c090613c35565b50505050505050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b600b8054610a9b906139df565b600e5460405163284f6eb760e21b81526004810185905284916001600160a01b03169063a13dbadc90602401602060405180830381865afa1580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f69190613a8f565b611513576040516307ed98ed60e31b815260040160405180910390fd5b600e546040516313710b4360e21b81526004810186905285916001600160a01b031690634dc42d0c90602401602060405180830381865afa15801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190613c5f565b4211156115a0576040516337e3907560e01b815260040160405180910390fd5b600f546001600160a01b031633146115cb57604051631b1319e560e01b815260040160405180910390fd5b601054846115d98888610a15565b6115e39190613aeb565b1115611602576040516360831e1560e11b815260040160405180910390fd5b61160f87878787876125ba565b50505050505050565b6116206122f4565b61162a600061267b565b565b6116346122f4565b600e5460405163284f6eb760e21b81526004810185905284916001600160a01b03169063a13dbadc90602401602060405180830381865afa15801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a19190613a8f565b6116be576040516307ed98ed60e31b815260040160405180910390fd5b600e546040516313710b4360e21b81526004810186905285916001600160a01b031690634dc42d0c90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b9190613c5f565b42111561174b576040516337e3907560e01b815260040160405180910390fd5b601054846117598888610a15565b6117639190613aeb565b1115611782576040516360831e1560e11b815260040160405180910390fd5b61178e868686866126b9565b505050505050565b63409feecd1980546003825580156117cd5760018160011c14303b106117c45763f92ee8a96000526004601cfd5b818160ff1b1b91505b506117d733612748565b600e80546001600160a01b03808f166001600160a01b031992831617909255600f8054928e169290911691909117905560006118148a8c83613cbf565b506001611822888a83613cbf565b50600b611830868883613cbf565b506002805460ff861660ff1991821617909155600a849055601083905560016009819055601180549092161790558015611893576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050505050505050505050565b6118a96122f4565b6011805460ff19166001179055565b336001600160a01b03871614806118f257506001600160a01b038616600090815260086020908152604080832033845290915290205460ff165b61192f5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016110c0565b6001600160a01b038616600090815260076020908152604080832087845290915281208054859290611962908490613ad8565b90915550506001600160a01b03851660009081526007602090815260408083208784529091528120805485929061199a908490613aeb565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0385163b15611a855760405163f23a6e6160e01b808252906001600160a01b0387169063f23a6e6190611a329033908b908a908a908a908a90600401613d7e565b6020604051808303816000875af1158015611a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a759190613c18565b6001600160e01b03191614611a92565b6001600160a01b03851615155b61178e5760405162461bcd60e51b81526004016110c090613c35565b600254600090611ac29060ff16600a613eac565b600a54610f9b9190613ebb565b60018054610a9b906139df565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191015b60405180910390a35050565b60115460009060ff1615611b70576040516315984b6360e21b815260040160405180910390fd5b610ff68383612784565b611b853383836127a4565b336000908152600d602052604081208054839290611ba4908490613ad8565b90915550503360009081526007602090815260408083208584529091528120549003611bf657336000908152600c60209081526040808320600886901c845290915290208054600160ff85161b191690555b33600090815260076020908152604080832083805290915281208054839290611c20908490613aeb565b90915550505050565b611c316122f4565b60005b8351811015611e0b57600e5484516001600160a01b039091169063a13dbadc90869084908110611c6657611c66613aac565b60200260200101516040518263ffffffff1660e01b8152600401611c8c91815260200190565b602060405180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd9190613a8f565b611cea576040516307ed98ed60e31b815260040160405180910390fd5b600e5484516001600160a01b0390911690634dc42d0c90869084908110611d1357611d13613aac565b60200260200101516040518263ffffffff1660e01b8152600401611d3991815260200190565b602060405180830381865afa158015611d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7a9190613c5f565b421115611d9a576040516337e3907560e01b815260040160405180910390fd5b601054838281518110611daf57611daf613aac565b6020026020010151611dda87878581518110611dcd57611dcd613aac565b6020026020010151610a15565b611de49190613aeb565b1115611e03576040516360831e1560e11b815260040160405180910390fd5b600101611c34565b50610c978484848461282a565b600f546001600160a01b03163314611e4357604051631b1319e560e01b815260040160405180910390fd5b601055565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000198114611ea457611e7f8382613ad8565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b03851660009081526004602052604081208054859290611ecc908490613ad8565b90915550506001600160a01b03808516600081815260046020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f279087815260200190565b60405180910390a3506001949350505050565b42841015611f8a5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016110c0565b60006001611f96610f6a565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156120a2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906120d85750876001600160a01b0316816001600160a01b0316145b6121155760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016110c0565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000612188611aae565b600354610f9b9190613ed2565b61219d6122f4565b63389a75e1600c52806000526020600c2080544211156121c557636f5e88186000526004601cfd5b600090556121d28161267b565b50565b6121e38686868686866118b8565b6001600160a01b0386166000908152600d60205260408120805485929061220b908490613ad8565b90915550506001600160a01b0385166000908152600d602052604081208054859290612238908490613aeb565b90915550506001600160a01b038581166000908152600c60209081526040808320600889901c845282528083208054600160ff8b161b17905592891682526007815282822087835290529081205490036122c1576001600160a01b0386166000908152600c60209081526040808320600888901c845290915290208054600160ff87161b191690555b61178e86868686612948565b6122d56122f4565b8060601b6122eb57637448fbae6000526004601cfd5b6121d28161267b565b638b78c6d81954331461162a576382b429006000526004601cfd5b61231a8383836127a4565b6001600160a01b0383166000908152600d602052604081208054839290612342908490613ad8565b90915550506001600160a01b038316600090815260076020908152604080832085845290915281205490036123a6576001600160a01b0383166000908152600c60209081526040808320600886901c845290915290208054600160ff85161b191690555b6123b38360008484612948565b505050565b60006123c5848484611e48565b506123d08484612a10565b5060019392505050565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b8151600090815b8181101561245757600061241c611aae565b85838151811061242e5761242e613aac565b60200260200101516124409190613ebb565b905061244c8185613aeb565b93505060010161240a565b506001600160a01b038616156124ae576001600160a01b0386166000908152600460205260408120805484929061248f908490613ad8565b9250508190555081600360008282546124a89190613ad8565b90915550505b6001600160a01b0385161561178e576001600160a01b038516600090815260046020526040812080548492906124e5908490613aeb565b9250508190555081600360008282546124fe9190613aeb565b9091555050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161253d9190613ef4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6125af8282612ccf565b611023600083612a10565b60095483116125cb576009546125cd565b825b6009556001600160a01b038516600090815260076020908152604080832083805290915281208054849290612603908490613ad8565b90915550506001600160a01b0384166000908152600d602052604081208054849290612630908490613aeb565b90915550506001600160a01b0384166000908152600c60209081526040808320600887901c845290915290208054600160ff86161b17905561267484848484612d33565b5050505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60095483116126ca576009546126cc565b825b6009556126db84848484612d33565b6001600160a01b0384166000908152600d602052604081208054849290612703908490613aeb565b90915550506001600160a01b0384166000908152600c60209081526040808320600887901c845290915290208054600160ff86161b179055610c976000858585612948565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006127908383611027565b5061279b3384612a10565b50600192915050565b6001600160a01b0383166000908152600760209081526040808320858452909152812080548392906127d7908490613ad8565b909155505060408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b61283684848484612e77565b825160005b8181101561293a5760095485828151811061285857612858613aac565b60200260200101511161286d57600954612888565b84818151811061287f5761287f613aac565b60200260200101515b600955835184908290811061289f5761289f613aac565b6020026020010151600d6000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546128db9190613aeb565b925050819055506129328582815181106128f7576128f7613aac565b6020026020010151600c6000896001600160a01b03166001600160a01b031681526020019081526020016000206123da90919063ffffffff16565b60010161283b565b506126746000868686612403565b6000612952611aae565b61295c9083613ebb565b90506001600160a01b038516156129b4576001600160a01b03851660009081526004602052604081208054839290612995908490613ad8565b9250508190555080600360008282546129ae9190613ad8565b90915550505b6001600160a01b03841615612674576001600160a01b038416600090815260046020526040812080548392906129eb908490613aeb565b925050819055508060036000828254612a049190613aeb565b90915550505050505050565b6001600160a01b03811615612a9b576001600160a01b038116600090815260046020908152604080832054600d9092528220549091612a4d611aae565b612a55611aae565b612a5f9084613ebb565b612a699085613ad8565b612a739190613ed2565b6001600160a01b03851660009081526007602090815260408083208380529091529020555050505b6001600160a01b03821615611023576001600160a01b038216600090815260046020908152604080832054600d9092528220549091612ad8611aae565b612ae29084613ed2565b905081811115612b1f57612af68282613ad8565b6001600160a01b0386166000908152600760209081526040808320838052909152902055612674565b6001600160a01b03851660009081526007602090815260408083208380529091528120819055612b4f8284613ad8565b6009549091505b600082118015612b665750600081115b1561160f576001600160a01b0387166000908152600c60205260408120612b8d9083613045565b90506000198103612b9e575061160f565b6001600160a01b038816600090815260076020908152604080832084845290915290205483811115612c39576001600160a01b038916600090815260076020908152604080832085845290915281208054869290612bfd908490613ad8565b90915550506001600160a01b0389166000908152600d602052604081208054869290612c2a908490613ad8565b9091555060009450612cc89050565b612c438185613ad8565b6001600160a01b038a1660008181526007602090815260408083208784528252808320839055928252600c8152828220600887901c83529052208054600160ff86161b1916905593506001600160a01b0389166000908152600d602052604081208054839290612cb4908490613ad8565b90915550612cc59050600183613ad8565b92505b5050612b56565b8060036000828254612ce19190613aeb565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611b3d565b6001600160a01b038416600090815260076020908152604080832086845290915281208054849290612d66908490613aeb565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b15612e4e5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190612dfb903390600090899089908990600401613f69565b6020604051808303816000875af1158015612e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3e9190613c18565b6001600160e01b03191614612e5b565b6001600160a01b03841615155b610c975760405162461bcd60e51b81526004016110c090613c35565b825182518114612e995760405162461bcd60e51b81526004016110c090613afe565b60005b81811015612f2957838181518110612eb657612eb6613aac565b602002602001015160076000886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612ef757612ef7613aac565b602002602001015181526020019081526020016000206000828254612f1c9190613aeb565b9091555050600101612e9c565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612f7a929190613fa3565b60405180910390a46001600160a01b0385163b1561301c5760405163bc197c8160e01b808252906001600160a01b0387169063bc197c8190612fc99033906000908a908a908a90600401613fc8565b6020604051808303816000875af1158015612fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300c9190613c18565b6001600160e01b03191614613029565b6001600160a01b03851615155b6126745760405162461bcd60e51b81526004016110c090613c35565b600881901c600081815260208490526040902054600019919060ff84191690811b901c81158117613088575b508101600081815260409020548115811715613071575b801561312e5761311e817f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6fffffffffffffffffffffffffffffffff851160071b1784811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b600883901b178481116000031792505b505092915050565b80356001600160a01b038116811461314d57600080fd5b919050565b6000806040838503121561316557600080fd5b61316e83613136565b946020939093013593505050565b6001600160e01b0319811681146121d257600080fd5b6000602082840312156131a457600080fd5b8135610ff68161317c565b6000602082840312156131c157600080fd5b610ff682613136565b60005b838110156131e55781810151838201526020016131cd565b50506000910152565b600081518084526132068160208601602086016131ca565b601f01601f19169290920160200192915050565b602081526000610ff660208301846131ee565b60006020828403121561323f57600080fd5b5035919050565b60008060006060848603121561325b57600080fd5b61326484613136565b95602085013595506040909401359392505050565b60008060006060848603121561328e57600080fd5b61329784613136565b92506132a560208501613136565b929592945050506040919091013590565b60008083601f8401126132c857600080fd5b5081356001600160401b038111156132df57600080fd5b6020830191508360208260051b85010111156132fa57600080fd5b9250929050565b60008083601f84011261331357600080fd5b5081356001600160401b0381111561332a57600080fd5b6020830191508360208285010111156132fa57600080fd5b60008060008060008060008060a0898b03121561335e57600080fd5b61336789613136565b975061337560208a01613136565b965060408901356001600160401b0381111561339057600080fd5b61339c8b828c016132b6565b90975095505060608901356001600160401b038111156133bb57600080fd5b6133c78b828c016132b6565b90955093505060808901356001600160401b038111156133e657600080fd5b6133f28b828c01613301565b999c989b5096995094979396929594505050565b6000806000806040858703121561341c57600080fd5b84356001600160401b0381111561343257600080fd5b61343e878288016132b6565b90955093505060208501356001600160401b0381111561345d57600080fd5b613469878288016132b6565b95989497509550505050565b600081518084526020840193506020830160005b828110156134a7578151865260209586019590910190600101613489565b5093949350505050565b602081526000610ff66020830184613475565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613502576135026134c4565b604052919050565b60006001600160401b03821115613523576135236134c4565b50601f01601f191660200190565b600082601f83011261354257600080fd5b81356135556135508261350a565b6134da565b81815284602083860101111561356a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561359f57600080fd5b6135a886613136565b94506135b660208701613136565b9350604086013592506060860135915060808601356001600160401b038111156135df57600080fd5b6135eb88828901613531565b9150509295509295909350565b6000806000806080858703121561360e57600080fd5b61361785613136565b9350602085013592506040850135915060608501356001600160401b0381111561364057600080fd5b61364c87828801613531565b91505092959194509250565b803560ff8116811461314d57600080fd5b60008060008060008060008060008060006101008c8e03121561368b57600080fd5b6136948c613136565b9a506136a260208d01613136565b995060408c01356001600160401b038111156136bd57600080fd5b6136c98e828f01613301565b909a5098505060608c01356001600160401b038111156136e857600080fd5b6136f48e828f01613301565b90985096505060808c01356001600160401b0381111561371357600080fd5b61371f8e828f01613301565b9096509450613732905060a08d01613658565b9a9d999c50979a96999598949750929591949360c0830135935060e090920135919050565b60008060008060008060a0878903121561377057600080fd5b61377987613136565b955061378760208801613136565b9450604087013593506060870135925060808701356001600160401b038111156137b057600080fd5b6137bc89828a01613301565b979a9699509497509295939492505050565b80151581146121d257600080fd5b600080604083850312156137ef57600080fd5b6137f883613136565b91506020830135613808816137ce565b809150509250929050565b6000806040838503121561382657600080fd5b50508035926020909101359150565b600082601f83011261384657600080fd5b81356001600160401b0381111561385f5761385f6134c4565b8060051b61386f602082016134da565b9182526020818501810192908101908684111561388b57600080fd5b6020860192505b838310156138ad578235825260209283019290910190613892565b9695505050505050565b600080600080608085870312156138cd57600080fd5b6138d685613136565b935060208501356001600160401b038111156138f157600080fd5b6138fd87828801613835565b93505060408501356001600160401b0381111561391957600080fd5b61392587828801613835565b92505060608501356001600160401b0381111561364057600080fd5b600080600080600080600060e0888a03121561395c57600080fd5b61396588613136565b965061397360208901613136565b9550604088013594506060880135935061398f60808901613658565b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156139bf57600080fd5b6139c883613136565b91506139d660208401613136565b90509250929050565b600181811c908216806139f357607f821691505b602082108103613a1357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613a2b57600080fd5b81516001600160401b03811115613a4157600080fd5b8201601f81018413613a5257600080fd5b8051613a606135508261350a565b818152856020838501011115613a7557600080fd5b613a868260208301602086016131ca565b95945050505050565b600060208284031215613aa157600080fd5b8151610ff6816137ce565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3a57610a3a613ac2565b80820180821115610a3a57610a3a613ac2565b6020808252600f908201526e0988a9c8ea890be9a92a69a82a8869608b1b604082015260600190565b81835260006001600160fb1b03831115613b4057600080fd5b8260051b80836020870137939093016020019392505050565b604081526000613b6d604083018688613b27565b8281036020840152613b80818587613b27565b979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0389811682528816602082015260a060408201819052600090613be1908301888a613b27565b8281036060840152613bf4818789613b27565b90508281036080840152613c09818587613b8b565b9b9a5050505050505050505050565b600060208284031215613c2a57600080fd5b8151610ff68161317c565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b600060208284031215613c7157600080fd5b5051919050565b601f8211156123b357806000526020600020601f840160051c81016020851015613c9f5750805b601f840160051c820191505b818110156126745760008155600101613cab565b6001600160401b03831115613cd657613cd66134c4565b613cea83613ce483546139df565b83613c78565b6000601f841160018114613d1e5760008515613d065750838201355b600019600387901b1c1916600186901b178355612674565b600083815260209020601f19861690835b82811015613d4f5786850135825560209485019460019092019101613d2f565b5086821015613d6c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03878116825286166020820152604081018590526060810184905260a060808201819052600090613db99083018486613b8b565b98975050505050505050565b6001815b6001841115613e0057808504811115613de457613de4613ac2565b6001841615613df257908102905b60019390931c928002613dc9565b935093915050565b600082613e1757506001610a3a565b81613e2457506000610a3a565b8160018114613e3a5760028114613e4457613e60565b6001915050610a3a565b60ff841115613e5557613e55613ac2565b50506001821b610a3a565b5060208310610133831016604e8410600b8410161715613e83575081810a610a3a565b613e906000198484613dc5565b8060001904821115613ea457613ea4613ac2565b029392505050565b6000610ff660ff841683613e08565b8082028115828204841417610a3a57610a3a613ac2565b600082613eef57634e487b7160e01b600052601260045260246000fd5b500490565b6000808354613f02816139df565b600182168015613f195760018114613f2e57613f5e565b60ff1983168652811515820286019350613f5e565b86600052602060002060005b83811015613f5657815488820152600190910190602001613f3a565b505081860193505b509195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613b80908301846131ee565b604081526000613fb66040830185613475565b8281036020840152613a868185613475565b6001600160a01b0386811682528516602082015260a060408201819052600090613ff490830186613475565b82810360608401526140068186613475565b90508281036080840152613db981856131ee56fea26469706673582212208dcdf6f273447eede2c49ee592fb8735fe2b1ae779a1b68f82629fb545e2f1ab64736f6c634300081a0033