Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,000.00 ECONODY

Holders:
3
Profile Summary
Blockchain:
Sepolia (11155111)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
ERC1404TokenMinKYCv13

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Created At:
Thu, 02 May 2024 15:20:24 GMT
ERC1404TokenMinKYCv13.flattened.sol
src
ERC1404TokenMinKYCv13.flattened.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_initialSupply",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "uint64",
        "name": "_allowedInvestors",
        "type": "uint64"
      },
      {
        "internalType": "uint8",
        "name": "_decimalsPlaces",
        "type": "uint8"
      },
      {
        "internalType": "string",
        "name": "_ShareCertificate",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_CompanyHomepage",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_CompanyLegalDocs",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "_atomicSwapContractAddress",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "_tradingHoldingPeriod",
        "type": "uint64"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "_allowedInvestors",
        "type": "uint64"
      }
    ],
    "name": "AllowedInvestorsReset",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "BurnTokens",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "_CompanyHomepage",
        "type": "string"
      }
    ],
    "name": "CompanyHomepageReset",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "_CompanyLegalDocs",
        "type": "string"
      }
    ],
    "name": "CompanyLegalDocsReset",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "_tradingHoldingPeriod",
        "type": "uint64"
      }
    ],
    "name": "HoldingPeriodReset",
    "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": "IssuerForceTransfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "receiveRestriction",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "sendRestriction",
        "type": "uint256"
      }
    ],
    "name": "KYCDataForUserSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "MintTokens",
    "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": false,
        "internalType": "string",
        "name": "_ShareCertificate",
        "type": "string"
      }
    ],
    "name": "ShareCertificateReset",
    "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": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "TransferFrom",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "message",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "errorCode",
        "type": "uint8"
      }
    ],
    "name": "TransferRestrictionDetected",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "WhitelistAuthorityStatusRemoved",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "WhitelistAuthorityStatusSet",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "CompanyHomepage",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CompanyLegalDocs",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "IssuancePlatform",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ShareCertificate",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "allowedInvestors",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "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": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "account",
        "type": "address[]"
      },
      {
        "internalType": "uint256",
        "name": "receiveRestriction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "sendRestriction",
        "type": "uint256"
      }
    ],
    "name": "bulkWhitelistWallets",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "currentTotalInvestors",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "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": "value",
        "type": "uint256"
      }
    ],
    "name": "detectTransferRestriction",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "status",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "forceTransferToken",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "getKYCData",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "getWhitelistAuthorityStatus",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "issuanceProtocol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "restrictionCode",
        "type": "uint8"
      }
    ],
    "name": "messageForTransferRestriction",
    "outputs": [
      {
        "internalType": "string",
        "name": "message",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "receiveRestriction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "sendRestriction",
        "type": "uint256"
      }
    ],
    "name": "modifyKYCData",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "removeWhitelistAuthorityStatus",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "_allowedInvestors",
        "type": "uint64"
      }
    ],
    "name": "resetAllowedInvestors",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_CompanyHomepage",
        "type": "string"
      }
    ],
    "name": "resetCompanyHomepage",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_CompanyLegalDocs",
        "type": "string"
      }
    ],
    "name": "resetCompanyLegalDocs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_ShareCertificate",
        "type": "string"
      }
    ],
    "name": "resetShareCertificate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "_tradingHoldingPeriod",
        "type": "uint64"
      }
    ],
    "name": "setTradingHoldingPeriod",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "user",
        "type": "address"
      }
    ],
    "name": "setWhitelistAuthorityStatus",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tradingHoldingPeriod",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "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": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "version",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
600c80547fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016600160801b179055601e6101a09081527f4e6f207472616e73666572207265737472696374696f6e7320666f756e6400006101c05260a090815261028060405260666101e081815260c09162002bfa61020039815260200160405180608001604052806044815260200162002cc86044913981526020016040518060400160405280602081526020017f5a65726f207472616e7366657220616d6f756e74206e6f7420616c6c6f776564815250815260200160405180606001604052806024815260200162002d7260249139815260200160405180606001604052806026815260200162002bd46026913981526020016040518060a001604052806068815260200162002c606068913981526020016040518060a001604052806066815260200162002d0c6066913990526200016090600d9060086200042c565b503480156200016e57600080fd5b5060405162002d9638038062002d9683398101604081905262000191916200060f565b88886003620001a18382620007d5565b506004620001b08282620007d5565b505050620001cd620001c76200030b60201b60201c565b6200030f565b60ff8616608052600c80546001600160401b03808416600160801b02600160801b600160c01b031990921691909117825533600081815260066020818152604080842060019081905560078084528286208290556001600160a01b038b1686529383528185208190559282528084208390558654958e166801000000000000000002600160401b600160801b031990961695909517909555828252600890945291909120805460ff191690921790915560096200028b8782620007d5565b50600a6200029a8682620007d5565b50600b620002a98582620007d5565b50620002b6818c62000361565b806001600160a01b03167f7b47457f3af09e5f794b020fd74160963a808f5985883496a096d403d380c3438c604051620002f291815260200190565b60405180910390a25050505050505050505050620008c9565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620003bc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620003d09190620008a1565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b82805482825590600052602060002090810192821562000477579160200282015b82811115620004775782518290620004669082620007d5565b50916020019190600101906200044d565b506200048592915062000489565b5090565b8082111562000485576000620004a08282620004aa565b5060010162000489565b508054620004b89062000747565b6000825580601f10620004c9575050565b601f016020900490600052602060002090810190620004e99190620004ec565b50565b5b80821115620004855760008155600101620004ed565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200052b57600080fd5b81516001600160401b038082111562000548576200054862000503565b604051601f8301601f19908116603f0116810190828211818310171562000573576200057362000503565b816040528381526020925086838588010111156200059057600080fd5b600091505b83821015620005b4578582018301518183018401529082019062000595565b600093810190920192909252949350505050565b80516001600160401b0381168114620005e057600080fd5b919050565b805160ff81168114620005e057600080fd5b80516001600160a01b0381168114620005e057600080fd5b6000806000806000806000806000806101408b8d0312156200063057600080fd5b8a5160208c0151909a506001600160401b03808211156200065057600080fd5b6200065e8e838f0162000519565b9a5060408d01519150808211156200067557600080fd5b620006838e838f0162000519565b99506200069360608e01620005c8565b9850620006a360808e01620005e5565b975060a08d0151915080821115620006ba57600080fd5b620006c88e838f0162000519565b965060c08d0151915080821115620006df57600080fd5b620006ed8e838f0162000519565b955060e08d01519150808211156200070457600080fd5b50620007138d828e0162000519565b935050620007256101008c01620005f7565b9150620007366101208c01620005c8565b90509295989b9194979a5092959850565b600181811c908216806200075c57607f821691505b6020821081036200077d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042757600081815260208120601f850160051c81016020861015620007ac5750805b601f850160051c820191505b81811015620007cd57828155600101620007b8565b505050505050565b81516001600160401b03811115620007f157620007f162000503565b620008098162000802845462000747565b8462000783565b602080601f831160018114620008415760008415620008285750858301515b600019600386901b1c1916600185901b178555620007cd565b600085815260208120601f198616915b82811015620008725788860151825594840194600190910190840162000851565b5085821015620008915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620008c357634e487b7160e01b600052601160045260246000fd5b92915050565b6080516122ef620008e560003960006102e501526122ef6000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c8063715018a61161013b578063abc30a4b116100b8578063d4ce14151161007c578063d4ce14151461056d578063da76e2f314610580578063dd62ed3e14610593578063e8379421146105a6578063f2fde38b146105d257600080fd5b8063abc30a4b14610519578063ac893db11461052c578063b1b5932a1461053f578063c319e41c14610547578063c97c59d21461055a57600080fd5b806395d89b41116100ff57806395d89b411461048d5780639dc29fac14610495578063a457c2d7146104a8578063a9059cbb146104bb578063ab47a2f9146104ce57600080fd5b8063715018a6146104285780637cae04f7146104305780637f4ab1dd1461045757806384f9007f1461046a5780638da5cb5b1461047257600080fd5b80633a24ddc5116101c957806359a72ddc1161018d57806359a72ddc146103b0578063639c86ce146103b85780636401ca76146103d2578063654b6f15146103ec57806370a082311461041557600080fd5b80633a24ddc51461032a57806340c10f191461033d578063459688361461035057806351aebcd41461037b57806354fd4d501461038e57600080fd5b80631efcaeaf116102105780631efcaeaf146102aa57806323b872dd146102bd5780632b8e797a146102d0578063313ce567146102e3578063395093511461031757600080fd5b806306fdde0314610242578063095ea7b31461026057806309fc38921461028357806318160ddd14610298575b600080fd5b61024a6105e5565b6040516102579190611d9b565b60405180910390f35b61027361026e366004611dc5565b610677565b6040519015158152602001610257565b610296610291366004611def565b610691565b005b6002545b604051908152602001610257565b6102966102b8366004611e70565b61079a565b6102736102cb366004611e99565b6108c0565b6102966102de366004611ed5565b6109c3565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff9091168152602001610257565b610273610325366004611dc5565b610a07565b610273610338366004611dc5565b610a29565b61027361034b366004611dc5565b610ab2565b600c54610363906001600160401b031681565b6040516001600160401b039091168152602001610257565b610296610389366004611f08565b610dc5565b61024a60405180604001604052806003815260200162312e3360e81b81525081565b61024a610e18565b600c5461036390600160801b90046001600160401b031681565b600c5461036390600160401b90046001600160401b031681565b61024a6040518060400160405280600a8152602001694469676953686172657360b01b81525081565b61029c610423366004611f79565b610ea6565b610296610ec1565b61024a60405180604001604052806008815260200167115490cb4c4d0c0d60c21b81525081565b61024a610465366004611f94565b610ed5565b61024a610fdb565b6005546040516001600160a01b039091168152602001610257565b61024a610fe8565b6102736104a3366004611dc5565b610ff7565b6102736104b6366004611dc5565b61114f565b6102736104c9366004611dc5565b6111d5565b6105046104dc366004611f79565b6001600160a01b03166000908152600660209081526040808320546007909252909120549091565b60408051928352602083019190915201610257565b610296610527366004611f08565b611217565b61029661053a366004611f08565b61125e565b61024a6112a5565b610296610555366004611f79565b6112b2565b610296610568366004611e70565b61130e565b61030561057b366004611e99565b611371565b61029661058e366004611f79565b611510565b61029c6105a1366004611fb7565b611569565b6102736105b4366004611f79565b6001600160a01b031660009081526008602052604090205460ff1690565b6102966105e0366004611f79565b611594565b6060600380546105f490611fea565b80601f016020809104026020016040519081016040528092919081815260200182805461062090611fea565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b5050505050905090565b60003361068581858561160d565b60019150505b92915050565b3360009081526008602052604090205460ff1615156001146106ce5760405162461bcd60e51b81526004016106c590612024565b60405180910390fd5b60328311156107455760405162461bcd60e51b815260206004820152603760248201527f42756c6b2077686974656c697374696e67206d6f7265207468616e203530206160448201527f6464726573736573206973206e6f7420616c6c6f77656400000000000000000060648201526084016106c5565b60005b838110156107935761078185858381811061076557610765612090565b905060200201602081019061077a9190611f79565b8484611731565b8061078b816120bc565b915050610748565b5050505050565b6107a2611795565b6001600160401b038116158015906107c85750600c546001600160401b03908116908216105b156108595760405162461bcd60e51b815260206004820152605560248201527f416c6c6f77656420546f6b656e20686f6c646572732063616e6e6f742062652060448201527f6c657373207468616e2063757272656e7420746f6b656e20686f6c646572732060648201527477697468206e6f6e2d7a65726f2062616c616e636560581b608482015260a4016106c5565b600c80546fffffffffffffffff00000000000000001916600160401b6001600160401b038416908102919091179091556040519081527f1134176aea4af31aec882084c2f0ff7992edea27ff97aafe9ce284c91e623b7d906020015b60405180910390a150565b600083838360006108d2848484611371565b905060ff8116156109515760006108e882610ed5565b9050836001600160a01b0316856001600160a01b03167fc844cc4ce519449488974a66d44d457e85e232edb0f90bd63eb0778f4b5c54c0838560405161092f9291906120d5565b60405180910390a38060405162461bcd60e51b81526004016106c59190611d9b565b61095e88888860006117ef565b866001600160a01b0316886001600160a01b0316336001600160a01b03167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f939896040516109ad91815260200190565b60405180910390a4506001979650505050505050565b3360009081526008602052604090205460ff1615156001146109f75760405162461bcd60e51b81526004016106c590612024565b610a02838383611731565b505050565b600033610685818585610a1a8383611569565b610a2491906120fa565b61160d565b6000610a33611795565b610a5183610a496005546001600160a01b031690565b8460016117ef565b6005546001600160a01b03166001600160a01b0316836001600160a01b03167f625f1e576665168ff9b3fd5510766eca672f1c97ca53cf82b4e8d96e02271b7d84604051610aa191815260200190565b60405180910390a350600192915050565b6000610abc611795565b6001600160a01b038316610b125760405162461bcd60e51b815260206004820152601e60248201527f4d696e74696e6720616464726573732063616e6e6f74206265207a65726f000060448201526064016106c5565b6001600160a01b0383166000908152600660205260408120549003610b8a5760405162461bcd60e51b815260206004820152602860248201527f41646472657373206973206e6f74207965742077686974656c697374656420626044820152673c9034b9b9bab2b960c11b60648201526084016106c5565b60008211610bda5760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20616d6f756e742063616e6e6f74206265206d696e7465640000000060448201526064016106c5565b6005546001600160a01b03848116911614801590610bfe5750610bfc83610ea6565b155b8015610c1b5750600c54600160401b90046001600160401b031615155b8015610c4e5750600c546001600160401b03600160401b8204811691610c439116600161210d565b6001600160401b0316115b15610d0d5760405162461bcd60e51b815260206004820152607f60248201527f4d696e74696e67206e6f7420616c6c6f77656420746f2074686973206164647260448201527f65737320617320616c6c6f77656420746f6b656e20686f6c646572207265737460648201527f72696374696f6e20697320696e20706c61636520616e64206d696e74696e672060848201527f77696c6c20696e6372656173652074686520616c6c6f776564206c696d69740060a482015260c4016106c5565b610d1683610ea6565b158015610d3157506005546001600160a01b03848116911614155b15610d6f57600c54610d4d906001600160401b0316600161210d565b600c805467ffffffffffffffff19166001600160401b03929092169190911790555b610d7983836118e1565b826001600160a01b03167f7b47457f3af09e5f794b020fd74160963a808f5985883496a096d403d380c34383604051610db491815260200190565b60405180910390a250600192915050565b610dcd611795565b600b610dda828483612198565b507fa555e96a9f6d83b18cbe170e5fd71ebb56fc55f86a115539e9f3038182075a508282604051610e0c929190612257565b60405180910390a15050565b60098054610e2590611fea565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5190611fea565b8015610e9e5780601f10610e7357610100808354040283529160200191610e9e565b820191906000526020600020905b815481529060010190602001808311610e8157829003601f168201915b505050505081565b6001600160a01b031660009081526020819052604090205490565b610ec9611795565b610ed360006119a0565b565b600d54606090610ee790600190612286565b8260ff1611610fa057600d8260ff1681548110610f0657610f06612090565b906000526020600020018054610f1b90611fea565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4790611fea565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b50505050509050919050565b5060408051808201909152601981527f4572726f7220636f6465206973206e6f7420646566696e65640000000000000060208201525b919050565b600a8054610e2590611fea565b6060600480546105f490611fea565b6000611001611795565b6001600160a01b0383166110575760405162461bcd60e51b815260206004820152601b60248201527f4275726e20616464726573732063616e6e6f74206265207a65726f000000000060448201526064016106c5565b600082116110a75760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20616d6f756e742063616e6e6f74206265206275726e65640000000060448201526064016106c5565b6110b183836119f2565b6110ba83610ea6565b1580156110d557506005546001600160a01b03848116911614155b1561111457600c546110f2906001906001600160401b0316612299565b600c805467ffffffffffffffff19166001600160401b03929092169190911790555b826001600160a01b03167f388d6102a0230861b4e9646fb5acda1c5ec15d39df2b619d39c25d16a126849083604051610db491815260200190565b6000338161115d8286611569565b9050838110156111bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106c5565b6111ca828686840361160d565b506001949350505050565b600033838360006111e7848484611371565b905060ff8116156111fd5760006108e882610ed5565b61120a33888860016117ef565b5060019695505050505050565b61121f611795565b600a61122c828483612198565b507f824a3f3055c070014bc7157744915537c646ae1a287c988d79ec124d88938e948282604051610e0c929190612257565b611266611795565b6009611273828483612198565b507f4295968313e92c7dd40aa9c85be9b7246ff59503751e11205c85795a2f74fdb38282604051610e0c929190612257565b600b8054610e2590611fea565b6112ba611795565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527fea54bdb8a4594aaac063e3b01ab3e613bf4cb045d085502c81497c9696aca8b291016108b5565b611316611795565b600c805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527f9a2bb66598018882d816bc64a2ff56e12b3f2937da4d9e90674915a34a04d810906020016108b5565b600c54600090600160801b90046001600160401b0316421080156113a357506005546001600160a01b03858116911614155b156113b057506002611509565b60018210156113c157506003611509565b6001600160a01b03841660009081526007602052604081205490036113e857506004611509565b6001600160a01b038316600090815260066020526040812054900361140f57506005611509565b6001600160a01b03841660009081526007602052604090205442101561143757506006611509565b6001600160a01b03831660009081526006602052604090205442101561145f57506007611509565b600c54600160401b90046001600160401b031661147e57506000611509565b600061148984610ea6565b11806114a257506005546001600160a01b038481169116145b156114af57506000611509565b600c546001600160401b03600160401b82048116911610156114d357506000611509565b816114dd85610ea6565b1480156114f857506005546001600160a01b03858116911614155b1561150557506000611509565b5060015b9392505050565b611518611795565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f24546dc0f5df685d7c979edd1b0bcc4d85ac6a59974976d7217c9f0d930d3ff091016108b5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61159c611795565b6001600160a01b0381166116015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c5565b61160a816119a0565b50565b6001600160a01b03831661166f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c5565b6001600160a01b0382166116d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000818152600660209081526040808320869055600782529182902084905581518581529081018490527fc78ee1de8eb00c83baa5f9bf324f00dd286b754a3826292de51c92c3e7a0cab5910160405180910390a2505050565b6005546001600160a01b03163314610ed35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c5565b6117f883610ea6565b15801561181357506005546001600160a01b03848116911614155b1561185157600c5461182f906001600160401b0316600161210d565b600c805467ffffffffffffffff19166001600160401b03929092169190911790555b80151560010361186b57611866848484611b24565b611878565b611876848484611cc8565b505b61188184610ea6565b15801561189c57506005546001600160a01b03858116911614155b156118db57600c546118b9906001906001600160401b0316612299565b600c805467ffffffffffffffff19166001600160401b03929092169190911790555b50505050565b6001600160a01b0382166119375760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106c5565b806002600082825461194991906120fa565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611a525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106c5565b6001600160a01b03821660009081526020819052604090205481811015611ac65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106c5565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b038316611b885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106c5565b6001600160a01b038216611bea5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106c5565b6001600160a01b03831660009081526020819052604090205481811015611c625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106c5565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36118db565b600033611cd6858285611ce1565b6111ca858585611b24565b6000611ced8484611569565b905060001981146118db5781811015611d485760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106c5565b6118db848484840361160d565b6000815180845260005b81811015611d7b57602081850181015186830182015201611d5f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115096020830184611d55565b80356001600160a01b0381168114610fd657600080fd5b60008060408385031215611dd857600080fd5b611de183611dae565b946020939093013593505050565b60008060008060608587031215611e0557600080fd5b84356001600160401b0380821115611e1c57600080fd5b818701915087601f830112611e3057600080fd5b813581811115611e3f57600080fd5b8860208260051b8501011115611e5457600080fd5b6020928301999098509187013596604001359550909350505050565b600060208284031215611e8257600080fd5b81356001600160401b038116811461150957600080fd5b600080600060608486031215611eae57600080fd5b611eb784611dae565b9250611ec560208501611dae565b9150604084013590509250925092565b600080600060608486031215611eea57600080fd5b611ef384611dae565b95602085013595506040909401359392505050565b60008060208385031215611f1b57600080fd5b82356001600160401b0380821115611f3257600080fd5b818501915085601f830112611f4657600080fd5b813581811115611f5557600080fd5b866020828501011115611f6757600080fd5b60209290920196919550909350505050565b600060208284031215611f8b57600080fd5b61150982611dae565b600060208284031215611fa657600080fd5b813560ff8116811461150957600080fd5b60008060408385031215611fca57600080fd5b611fd383611dae565b9150611fe160208401611dae565b90509250929050565b600181811c90821680611ffe57607f821691505b60208210810361201e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526046908201527f4f6e6c7920617574686f72697a6564206164647265737365732063616e20636f60408201527f6e74726f6c2077686974656c697374696e67206f6620686f6c6465722061646460608201526572657373657360d01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016120ce576120ce6120a6565b5060010190565b6040815260006120e86040830185611d55565b905060ff831660208301529392505050565b8082018082111561068b5761068b6120a6565b6001600160401b0381811683821601908082111561212d5761212d6120a6565b5092915050565b634e487b7160e01b600052604160045260246000fd5b601f821115610a0257600081815260208120601f850160051c810160208610156121715750805b601f850160051c820191505b818110156121905782815560010161217d565b505050505050565b6001600160401b038311156121af576121af612134565b6121c3836121bd8354611fea565b8361214a565b6000601f8411600181146121f757600085156121df5750838201355b600019600387901b1c1916600186901b178355610793565b600083815260209020601f19861690835b828110156122285786850135825560209485019460019092019101612208565b50868210156122455760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b8181038181111561068b5761068b6120a6565b6001600160401b0382811682821603908082111561212d5761212d6120a656fea264697066735822122029e88ae49fcaed5bce8a9fd2a77d8472f5ee4fa47154e7f6257366791e84e72264736f6c634300081300335265636569766572206973206e6f742077686974656c6973746564206f7220626c6f636b65644d617820616c6c6f776564206164647265737365732077697468206e6f6e2d7a65726f207265737472696374696f6e20697320696e20706c6163652c2074686973207472616e736665722077696c6c206578636565642074686973206c696d69746174696f6e53656e6465722069732077686974656c697374656420627574206973206e6f7420656c696769626c6520746f2073656e6420746f6b656e7320616e6420756e64657220686f6c64696e6720706572696f6420284b59432074696d65207265737472696374696f6e29416c6c207472616e7366657273206172652064697361626c6564206265636175736520486f6c64696e6720506572696f64206973206e6f7420796574206578706972656452656365697665722069732077686974656c697374656420627574206973206e6f742079657420656c696769626c6520746f207265636569766520746f6b656e7320696e206869732077616c6c657420284b59432074696d65207265737472696374696f6e2953656e646572206973206e6f742077686974656c6973746564206f7220626c6f636b656400000000000000000000000000000000000000000000003635c9adc5dea00000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002400000000000000000000000001995ce48d259851292165f6cdc433692e4ba9ccf000000000000000000000000000000000000000000000000000000006633a1160000000000000000000000000000000000000000000000000000000000000006546f6b656e4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000745434f4e4f445900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003968747470733a2f2f696e766573746f722e65636f6e6f64792e636f6d2f696e766573746f722f73686172652d63657274696669636174652f340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000