ETH Price: $3,275.21 (+0.91%)
Gas: 2 Gwei

Token

Lucky Catz (LUCKYCATZ)
 

Overview

Max Total Supply

651 LUCKYCATZ

Holders

232

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 LUCKYCATZ
0x91074e4b0Af54e7d572e46FE17c434a65eC4266e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LuckyCatz

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC165
{
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}



interface IERC721 is IERC165
{
    event   Transfer(      address indexed from,  address indexed to,       uint256  indexed tokenId);
    event   Approval(      address indexed owner, address indexed approved, uint256  indexed tokenId);
    event   ApprovalForAll(address indexed owner, address indexed operator, bool             approved);

    function balanceOf(        address owner)                                   external view returns (uint256 balance);
    function ownerOf(          uint256 tokenId)                                 external view returns (address owner);
    function safeTransferFrom( address from,     address to, uint256 tokenId)   external;
    function transferFrom(     address from,     address to, uint256 tokenId)   external;
    function approve(          address to,       uint256 tokenId)               external;
    function getApproved(      uint256 tokenId)                                 external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved)                external;
    function isApprovedForAll( address owner,    address operator)              external view returns (bool);
    function safeTransferFrom( address from,     address to, uint256 tokenId, bytes calldata data) external;
}



interface IERC721Metadata is IERC721
{
    function name()                     external view returns (string memory);
    function symbol()                   external view returns (string memory);
    function tokenURI(uint256 tokenId)  external view returns (string memory);
}



interface IERC721Enumerable is IERC721
{
    function totalSupply()                                      external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index)  external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index)                        external view returns (uint256);
}



interface IERC721Receiver
{
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}



abstract contract ERC165 is IERC165
{
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool)
    {
        return (interfaceId == type(IERC165).interfaceId);
    }
}



abstract contract Context
{
    function _msgSender() internal view virtual returns (address)
    {
        return msg.sender;
    }
   
   
    function _msgData() internal view virtual returns (bytes calldata)
    {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}



abstract contract Ownable is Context
{
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

   
    constructor ()
    {
        address msgSender = _msgSender();
                   _owner = msgSender;
                   
        emit OwnershipTransferred(address(0), msgSender);
    }
   
   
    function owner() public view virtual returns (address)
    {
        return _owner;
    }
   
   
    modifier onlyOwner()
    {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
   
   
    function renounceOwnership() public virtual onlyOwner
    {
        emit OwnershipTransferred(_owner, address(0));
       
        _owner = address(0);
    }
   
   
    function transferOwnership(address newOwner) public virtual onlyOwner
    {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
       
        emit OwnershipTransferred(_owner, newOwner);
       
        _owner = newOwner;
    }
}



contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, Ownable
{
    using Address for address;
    using Strings for uint256;

    string private _name;   // Token name
    string private _symbol; // Token symbol

    mapping(uint256 => address)                  internal _owners;              // Mapping from token ID to owner address
    mapping(address => uint256)                  internal _balances;            // Mapping owner address to token count
    mapping(uint256 => address)                  private  _tokenApprovals;      // Mapping from token ID to approved address
    mapping(address => mapping(address => bool)) private  _operatorApprovals;   // Mapping from owner to operator approvals

   
    constructor(string memory name_, string memory symbol_)
    {
        _name   = name_;
        _symbol = symbol_;
    }
   
   
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool)
    {
        return  interfaceId == type(IERC721).interfaceId         ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                super.supportsInterface(interfaceId);
    }
   
   
    function balanceOf(address owner) public view virtual override returns (uint256)
    {
        require(owner != address(0), "ERC721: balance query for the zero address");
       
        return _balances[owner];
    }
   
   
    function ownerOf(uint256 tokenId) public view virtual override returns (address)
    {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
   
   
    function name() public view virtual override returns (string memory)
    {
        return _name;
    }
   
   
    function symbol() public view virtual override returns (string memory)
    {
        return _symbol;
    }
   
   
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
       
        return (bytes(baseURI).length>0) ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
   
   
    function _baseURI() internal view virtual returns (string memory)
    {
        return "";
    }
   
   
    function approve(address to, uint256 tokenId) public virtual override
    {
        address owner = ERC721.ownerOf(tokenId);
   
        require(to!=owner, "ERC721: approval to current owner");
        require(_msgSender()==owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all");

        _approve(to, tokenId);
    }
   
   
    function getApproved(uint256 tokenId) public view virtual override returns (address)
    {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
   
   
    function setApprovalForAll(address operator, bool approved) public virtual override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
   
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
   
   
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
   
   
    function transferFrom(address from, address to, uint256 tokenId) public virtual override
    {
        //----- solhint-disable-next-line max-line-length
       
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }
   
   
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override
    {
        safeTransferFrom(from, to, tokenId, "");
    }
   
   
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override
    {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
       
        _safeTransfer(from, to, tokenId, _data);
    }
   
   
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual
    {
        _transfer(from, to, tokenId);
   
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
   
   
    function _exists(uint256 tokenId) internal view virtual returns (bool)
    {
        return _owners[tokenId] != address(0);
    }
   
   
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool)
    {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
       
        address owner = ERC721.ownerOf(tokenId);
       
        return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender));
    }
   
   
    function _safeMint(address to, uint256 tokenId) internal virtual
    {
        _safeMint(to, tokenId, "");
    }
   
   
    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual
    {
        _mint(to, tokenId);
   
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
   
   
    function _mint(address to, uint256 tokenId) internal virtual
    {
        require(to != address(0),  "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to]   += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }
   
   
    function _batchMint(address to, uint256[] memory tokenIds) internal virtual
    {
        require(to != address(0), "ERC721: mint to the zero address");
       
        _balances[to] += tokenIds.length;

        for (uint256 i=0; i < tokenIds.length; i++)
        {
            require(!_exists(tokenIds[i]), "ERC721: token already minted");

            _beforeTokenTransfer(address(0), to, tokenIds[i]);

            _owners[tokenIds[i]] = to;

            emit Transfer(address(0), to, tokenIds[i]);
        }
    }
   
   
    function _burn(uint256 tokenId) internal virtual
    {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);      // Clear approvals

        _balances[owner] -= 1;

        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }
   
   
    function _transfer(address from, address to, uint256 tokenId) internal virtual
    {
        require(ERC721.ownerOf(tokenId)==from,  "ERC721: transfer of token that is not own");
        require(to != address(0),               "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);      // Clear approvals from the previous owner

        _balances[from] -= 1;
        _balances[to]   += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
   
   
    function _approve(address to, uint256 tokenId) internal virtual
    {
        _tokenApprovals[tokenId] = to;
   
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
   
   
    function _checkOnERC721Received(address from,address to,uint256 tokenId,bytes memory _data) private returns (bool)
    {
        if (to.isContract())
        {
            try
           
                IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
           
            returns (bytes4 retval)
            {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            }
            catch (bytes memory reason)
            {
                if (reason.length==0)
                {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                }
                else
                {
                    assembly { revert(add(32, reason), mload(reason)) }     //// solhint-disable-next-line no-inline-assembly
                }
            }
        }
        else
        {
            return true;
        }
    }
   
   
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual
    {
        //
    }
}



abstract contract ERC721Enumerable is ERC721, IERC721Enumerable
{
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;           // Mapping from owner to list of owned token IDs
    mapping(uint256 => uint256)                     private _ownedTokensIndex;      // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256)                     private _allTokensIndex;        // Mapping from token id to position in the allTokens array

    uint256[] private _allTokens;                                                   // Array with all token ids, used for enumeration

    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool)
    {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    function totalSupply() public view virtual override returns (uint256)
    {
        return _allTokens.length;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256)
    {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
   
        return _ownedTokens[owner][index];
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256)
    {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
   
        return _allTokens[index];
    }

    function _beforeTokenTransfer(address from,address to,uint256 tokenId) internal virtual override
    {
        super._beforeTokenTransfer(from, to, tokenId);

             if (from == address(0))     _addTokenToAllTokensEnumeration(tokenId);
        else if (from != to)             _removeTokenFromOwnerEnumeration(from, tokenId);
       
             if (to == address(0))       _removeTokenFromAllTokensEnumeration(tokenId);
        else if (to != from)             _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private
    {
        uint256 length = ERC721.balanceOf(to);
   
        _ownedTokens[to][length]   = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private
    {
        _allTokensIndex[tokenId] = _allTokens.length;
   
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private
    {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


library Strings
{
    bytes16 private constant alphabet = "0123456789abcdef";

   
    function toString(uint256 value) internal pure returns (string memory)
    {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value==0)       return "0";
   
        uint256 temp = value;
        uint256 digits;
   
        while (temp!=0)
        {
            digits++;
            temp /= 10;
        }
       
        bytes memory buffer = new bytes(digits);
       
        while (value != 0)
        {
            digits        -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value         /= 10;
        }
       
        return string(buffer);
    }
   
   
    function toHexString(uint256 value) internal pure returns (string memory)
    {
        if (value==0)       return "0x00";
       
        uint256 temp   = value;
        uint256 length = 0;
       
        while (temp != 0)
        {
            length++;
            temp >>= 8;
        }
       
        return toHexString(value, length);
    }
   
   
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
       
        buffer[0] = "0";
        buffer[1] = "x";
       
        for (uint256 i=2*length+1; i>1; --i)
        {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
       
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}



library Address
{
    function isContract(address account) internal view returns (bool)
    {
        uint256 size;
       
        assembly { size := extcodesize(account) }   // solhint-disable-next-line no-inline-assembly
        return size > 0;
    }
   
   
    function sendValue(address payable recipient, uint256 amount) internal
    {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }(""); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value

        require(success, "Address: unable to send value, recipient may have reverted");
    }
   
   
    function functionCall(address target, bytes memory data) internal returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
   
   
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory)
    {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
   
   
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory)
    {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
   
   
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory)
    {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target),             "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: value }(data);    // solhint-disable-next-line avoid-low-level-calls

        return _verifyCallResult(success, returndata, errorMessage);
    }
   
   
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory)
    {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
   
   
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory)
    {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);  // solhint-disable-next-line avoid-low-level-calls

        return _verifyCallResult(success, returndata, errorMessage);
    }
   
   
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory)
    {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
   
   
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory)
    {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);    // solhint-disable-next-line avoid-low-level-calls
       
        return _verifyCallResult(success, returndata, errorMessage);
    }
   
   
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory)
    {
        if (success)
        {
            return returndata;
        }
        else
        {
            if (returndata.length > 0)      // Look for revert reason and bubble it up if present
            {
                // The easiest way to bubble the revert reason is using memory via assembly
                // solhint-disable-next-line no-inline-assembly
                assembly
                {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            }
            else
            {
                revert(errorMessage);
            }
        }
    }
}



contract LuckyCatz     is  ERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    modifier callerIsUser()
    {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    event   onWidthdrawal(address from, address to, uint256 amount);
    event   onMaxMintPerWallet(uint256 lastMaxCount, uint256 newMaxCount);
   
    uint256 private     salesDate          = 1634482800;
    uint256 private     salesPrice         = 0.0001 ether;//0.07 ether;

    uint256 private     totalTokens        = 7777;
    uint256 private     leftTokenCount     = totalTokens;
    uint256 private     mintedTokenCount   = 0;
    uint256 private     maxMintPerWallet   = 7;
   
    string  private     baseURI = 'https://ipfs.io/ipfs/QmUaTJ3LvTr9FGVBDLwEi9nuyJwA2vK2tmVwXQYPbWRw4w/';

address private ownerWallet;

    uint256 private maxReservableTokenCount = 777; //total reserved token for rewards and wages
    uint256 private     totalReserved           = 0;

    mapping(address => uint256) private walletMintCounts;
    mapping(address => uint256) private walletMintedTokenIds;


    constructor() ERC721("Lucky Catz", "LUCKYCATZ")   // temporary Symbol and title
    {
        ownerWallet = msg.sender;
    }
     
   
function nftTransfer(address to, uint256 tokenId) external
{
address fromAddr = _msgSender();

        require(_isApprovedOrOwner(fromAddr, tokenId), "ERC721: transfer caller is not owner nor approved");
       
        _transfer(fromAddr, to, tokenId);

        require(isERC721ReceivedCheck(fromAddr, to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer");
}


function    isERC721ReceivedCheck(address from,address to,uint256 tokenId,bytes memory _data) private returns (bool)
{
        if (to.isContract())
        {
            try
           
                IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
           
            returns (bytes4 retval)
            {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            }
            catch (bytes memory reason)
            {
                if (reason.length==0)
                {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                }
                else
                {
                    assembly { revert(add(32, reason), mload(reason)) }     //// solhint-disable-next-line no-inline-assembly
                }
            }
        }
        else
        {
            return true;
        }
}


    function    setBaseTokenURI(string memory newUri) external onlyOwner
    {
        baseURI = newUri;
    }
   
   
    function    addAvailableTokens(uint256 extraAmount) external onlyOwner
    {
        totalTokens += extraAmount;
    }
   
   
    function    setSalesDate(uint256 newSalesDate) external onlyOwner
    {
        salesDate = newSalesDate;
    }
   
   
    function    baseTokenURI() external view returns (string memory)
    {
        return baseURI;
    }
   
   
    function    getAvailableTokens() external view returns (uint256)
    {
        return leftTokenCount;
    }
   
   
    function    getSalesPrice() external view returns (uint256)
    {
        return salesPrice;
    }


    function    setSalesPrice(uint256 newSalesPrice) external onlyOwner
    {
        salesPrice = newSalesPrice;
    }


    function    setmaxMintPerWallet(uint256 newMaxCount) external
    {
        uint256 lastMaxCount = maxMintPerWallet;
       
        maxMintPerWallet = newMaxCount;
       
        emit onMaxMintPerWallet(lastMaxCount, maxMintPerWallet);
    }


    function    _baseURI() internal view virtual override returns (string memory)
    {
        return baseURI;
    }


    function    getTokenIdsByWallet(address walletAddress) external view returns(uint256[] memory)
    {
        require(walletAddress!=address(0), "BlackHole wallet is not a real owner");
       
        uint256          count  = balanceOf(walletAddress);
        uint256[] memory result = new uint256[](count);
       
        for (uint256 i=0; i<count; i++)
        {
            result[i] = tokenOfOwnerByIndex(walletAddress, i);
        }
       
        return result;
    }
   

function    setMaxReserve(uint256 newAmount) external onlyOwner
    {
        maxReservableTokenCount = newAmount;
    }


    function    reserveSomeTokens(uint256 amount)  external onlyOwner
    {
        require(amount         <= 200,                              "Reserve is limited to 200 per call at max");
        require(leftTokenCount >= amount,                    "Not enough tokens left to reserve anymore");
        //require(totalReserved+amount <= maxReservableTokenCount,  "Too many to reserve. Reduce the amount");
       
        for (uint256 i=0; i < amount; i++)
        {
    totalReserved++;
            walletMintCounts[msg.sender]++;
            mintedTokenCount++;
            leftTokenCount--;
           
            _mint(msg.sender, mintedTokenCount);
        }
    }
   
   
    function    mint() external payable callerIsUser
    {
        require(msg.value      >= salesPrice,         "Send exact Amount to claim your Nft");
        require(leftTokenCount >  0,                  "No tokens left to be claimed");

        walletMintCounts[msg.sender]++;
        mintedTokenCount++;
        leftTokenCount--;

        _mint(msg.sender, mintedTokenCount);
    }


    function    batchMint(uint256 quantity) external payable callerIsUser
    {
        require(msg.value     >= salesPrice * quantity,   "Send exact Amount to claim your Nfts");
        require(leftTokenCount>= quantity,                "No tokens left to be claimed");

        for (uint256 i=0; i < quantity; i++)
        {
            walletMintCounts[msg.sender]++;
            mintedTokenCount++;
            leftTokenCount--;

            _mint(msg.sender, mintedTokenCount);
        }
    }

    function    withdraw() external onlyOwner
    {
        address  fromAddr = address(this);
        uint256  balance  = fromAddr.balance;
       
        payable(ownerWallet).transfer(fromAddr.balance);

        emit onWidthdrawal(fromAddr, ownerWallet, balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lastMaxCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxCount","type":"uint256"}],"name":"onMaxMintPerWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onWidthdrawal","type":"event"},{"inputs":[{"internalType":"uint256","name":"extraAmount","type":"uint256"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"getTokenIdsByWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nftTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveSomeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSalesDate","type":"uint256"}],"name":"setSalesDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSalesPrice","type":"uint256"}],"name":"setSalesPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxCount","type":"uint256"}],"name":"setmaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

63616c3a70600b55655af3107a4000600c55611e61600d819055600e556000600f5560076010556101006040526044608081815290620028af60a0398051620000519160119160209091019062000156565b5061030960135560006014553480156200006a57600080fd5b506040518060400160405280600a815260200169263ab1b5bc9021b0ba3d60b11b81525060405180604001604052806009815260200168262aa1a5aca1a0aa2d60b91b8152506000620000c26200015260201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200012190600190602085019062000156565b5080516200013790600290602084019062000156565b5050601280546001600160a01b031916331790555062000239565b3390565b8280546200016490620001fc565b90600052602060002090601f016020900481019282620001885760008555620001d3565b82601f10620001a357805160ff1916838001178555620001d3565b82800160010185558215620001d3579182015b82811115620001d3578251825591602001919060010190620001b6565b50620001e1929150620001e5565b5090565b5b80821115620001e15760008155600101620001e6565b600181811c908216806200021157607f821691505b602082108114156200023357634e487b7160e01b600052602260045260246000fd5b50919050565b61266680620002496000396000f3fe6080604052600436106101f95760003560e01c80636a2dae071161010d578063b88d4fde116100a0578063e35568cb1161006f578063e35568cb1461057d578063e58e8df714610592578063e6b36012146105b2578063e985e9c5146105d2578063f2fde38b1461061b57600080fd5b8063b88d4fde14610513578063c0c566f014610533578063c87b56dd14610548578063d547cfb71461056857600080fd5b80638da5cb5b116100dc5780638da5cb5b146104a057806395d89b41146104be5780639819ef3f146104d3578063a22cb465146104f357600080fd5b80636a2dae071461043857806370a0823114610458578063715018a6146104785780638467be0d1461048d57600080fd5b806323b872dd116101905780633ccfd60b1161015f5780633ccfd60b146103a357806342842e0e146103b85780634f6ccce7146103d857806356a87caa146103f85780636352211e1461041857600080fd5b806323b872dd146103235780632a446296146103435780632f745c591461036357806330176e131461038357600080fd5b8063095ea7b3116101cc578063095ea7b3146102af5780631249c58b146102cf5780631660b732146102d757806318160ddd1461030457600080fd5b806301ffc9a7146101fe57806306fdde0314610233578063081812fc1461025557806308d39a541461028d575b600080fd5b34801561020a57600080fd5b5061021e610219366004612269565b61063b565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610666565b60405161022a91906123db565b34801561026157600080fd5b506102756102703660046122e7565b6106f8565b6040516001600160a01b03909116815260200161022a565b34801561029957600080fd5b506102ad6102a8366004612240565b610792565b005b3480156102bb57600080fd5b506102ad6102ca366004612240565b610800565b6102ad610911565b3480156102e357600080fd5b506102f76102f2366004612106565b610a68565b60405161022a9190612397565b34801561031057600080fd5b50600a545b60405190815260200161022a565b34801561032f57600080fd5b506102ad61033e366004612152565b610b88565b34801561034f57600080fd5b506102ad61035e3660046122e7565b610bb9565b34801561036f57600080fd5b5061031561037e366004612240565b610d36565b34801561038f57600080fd5b506102ad61039e3660046122a1565b610dcc565b3480156103af57600080fd5b506102ad610e09565b3480156103c457600080fd5b506102ad6103d3366004612152565b610ec7565b3480156103e457600080fd5b506103156103f33660046122e7565b610ee2565b34801561040457600080fd5b506102ad6104133660046122e7565b610f83565b34801561042457600080fd5b506102756104333660046122e7565b610fb2565b34801561044457600080fd5b506102ad6104533660046122e7565b611029565b34801561046457600080fd5b50610315610473366004612106565b611067565b34801561048457600080fd5b506102ad6110ee565b6102ad61049b3660046122e7565b611162565b3480156104ac57600080fd5b506000546001600160a01b0316610275565b3480156104ca57600080fd5b506102486112df565b3480156104df57600080fd5b506102ad6104ee3660046122e7565b6112ee565b3480156104ff57600080fd5b506102ad61050e366004612206565b61131d565b34801561051f57600080fd5b506102ad61052e36600461218d565b6113e2565b34801561053f57600080fd5b50600c54610315565b34801561055457600080fd5b506102486105633660046122e7565b61141a565b34801561057457600080fd5b506102486114f5565b34801561058957600080fd5b50600e54610315565b34801561059e57600080fd5b506102ad6105ad3660046122e7565b611504565b3480156105be57600080fd5b506102ad6105cd3660046122e7565b611533565b3480156105de57600080fd5b5061021e6105ed366004612120565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b506102ad610636366004612106565b611577565b60006001600160e01b0319821663780e9d6360e01b1480610660575061066082611661565b92915050565b6060600180546106759061256b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a19061256b565b80156106ee5780601f106106c3576101008083540402835291602001916106ee565b820191906000526020600020905b8154815290600101906020018083116106d157829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166107765760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b3361079d81836116b1565b6107b95760405162461bcd60e51b815260040161076d90612475565b6107c48184846117a8565b6107df81848460405180602001604052806000815250611953565b6107fb5760405162461bcd60e51b815260040161076d906123ee565b505050565b600061080b82610fb2565b9050806001600160a01b0316836001600160a01b031614156108795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161076d565b336001600160a01b0382161480610895575061089581336105ed565b6109075760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161076d565b6107fb8383611a60565b3233146109605760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161076d565b600c543410156109be5760405162461bcd60e51b815260206004820152602360248201527f53656e6420657861637420416d6f756e7420746f20636c61696d20796f75722060448201526213999d60ea1b606482015260840161076d565b6000600e5411610a105760405162461bcd60e51b815260206004820152601c60248201527f4e6f20746f6b656e73206c65667420746f20626520636c61696d656400000000604482015260640161076d565b336000908152601560205260408120805491610a2b836125a6565b9091555050600f8054906000610a40836125a6565b9091555050600e8054906000610a5583612554565b9190505550610a6633600f54611ace565b565b60606001600160a01b038216610acc5760405162461bcd60e51b8152602060048201526024808201527f426c61636b486f6c652077616c6c6574206973206e6f742061207265616c206f6044820152633bb732b960e11b606482015260840161076d565b6000610ad783611067565b905060008167ffffffffffffffff811115610b0257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b2b578160200160208202803683370190505b50905060005b82811015610b8057610b438582610d36565b828281518110610b6357634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610b78816125a6565b915050610b31565b509392505050565b610b9233826116b1565b610bae5760405162461bcd60e51b815260040161076d90612475565b6107fb8383836117a8565b6000546001600160a01b03163314610be35760405162461bcd60e51b815260040161076d90612440565b60c8811115610c465760405162461bcd60e51b815260206004820152602960248201527f52657365727665206973206c696d6974656420746f20323030207065722063616044820152680d8d840c2e840dac2f60bb1b606482015260840161076d565b80600e541015610caa5760405162461bcd60e51b815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f207265736572766044820152686520616e796d6f726560b81b606482015260840161076d565b60005b81811015610d325760148054906000610cc5836125a6565b9091555050336000908152601560205260408120805491610ce5836125a6565b9091555050600f8054906000610cfa836125a6565b9091555050600e8054906000610d0f83612554565b9190505550610d2033600f54611ace565b80610d2a816125a6565b915050610cad565b5050565b6000610d4183611067565b8210610da35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161076d565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000546001600160a01b03163314610df65760405162461bcd60e51b815260040161076d90612440565b8051610d32906011906020840190611fdb565b6000546001600160a01b03163314610e335760405162461bcd60e51b815260040161076d90612440565b60125460405130918231916001600160a01b039190911690833180156108fc02916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b50601254604080516001600160a01b038086168252909216602083015281018290527ffca65732210654a2e0fd59899f602deb9ddfdee52677c8efb7d2f2a90d3b168c906060015b60405180910390a15050565b6107fb838383604051806020016040528060008152506113e2565b6000610eed600a5490565b8210610f505760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161076d565b600a8281548110610f7157634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000546001600160a01b03163314610fad5760405162461bcd60e51b815260040161076d90612440565b601355565b6000818152600360205260408120546001600160a01b0316806106605760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161076d565b601080549082905560408051828152602081018490527f4a773f7157dee7db92dd5fe582edbebff5d171d5d797ad8f28d2bcda77a021769101610ebb565b60006001600160a01b0382166110d25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161076d565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146111185760405162461bcd60e51b815260040161076d90612440565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3233146111b15760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161076d565b80600c546111bf91906124f2565b34101561121a5760405162461bcd60e51b8152602060048201526024808201527f53656e6420657861637420416d6f756e7420746f20636c61696d20796f7572206044820152634e66747360e01b606482015260840161076d565b80600e54101561126c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f20746f6b656e73206c65667420746f20626520636c61696d656400000000604482015260640161076d565b60005b81811015610d3257336000908152601560205260408120805491611292836125a6565b9091555050600f80549060006112a7836125a6565b9091555050600e80549060006112bc83612554565b91905055506112cd33600f54611ace565b806112d7816125a6565b91505061126f565b6060600280546106759061256b565b6000546001600160a01b031633146113185760405162461bcd60e51b815260040161076d90612440565b600b55565b6001600160a01b0382163314156113765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161076d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113ec33836116b1565b6114085760405162461bcd60e51b815260040161076d90612475565b61141484848484611c1c565b50505050565b6000818152600360205260409020546060906001600160a01b03166114995760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161076d565b60006114a36114f5565b905060008151116114c357604051806020016040528060008152506114ee565b806114cd84611c4f565b6040516020016114de92919061232b565b6040516020818303038152906040525b9392505050565b6060601180546106759061256b565b6000546001600160a01b0316331461152e5760405162461bcd60e51b815260040161076d90612440565b600c55565b6000546001600160a01b0316331461155d5760405162461bcd60e51b815260040161076d90612440565b80600d600082825461156f91906124c6565b909155505050565b6000546001600160a01b031633146115a15760405162461bcd60e51b815260040161076d90612440565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061169257506001600160e01b03198216635b5e139f60e01b145b8061066057506301ffc9a760e01b6001600160e01b0319831614610660565b6000818152600360205260408120546001600160a01b031661172a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161076d565b600061173583610fb2565b9050806001600160a01b0316846001600160a01b031614806117705750836001600160a01b0316611765846106f8565b6001600160a01b0316145b806117a057506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166117bb82610fb2565b6001600160a01b0316146118235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161076d565b6001600160a01b0382166118855760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b611890838383611d69565b61189b600082611a60565b6001600160a01b03831660009081526004602052604081208054600192906118c4908490612511565b90915550506001600160a01b03821660009081526004602052604081208054600192906118f29084906124c6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b15611a5557604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061199790339089908890889060040161235a565b602060405180830381600087803b1580156119b157600080fd5b505af19250505080156119e1575060408051601f3d908101601f191682019092526119de91810190612285565b60015b611a3b573d808015611a0f576040519150601f19603f3d011682016040523d82523d6000602084013e611a14565b606091505b508051611a335760405162461bcd60e51b815260040161076d906123ee565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117a0565b506001949350505050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a9582610fb2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b038216611b245760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161076d565b6000818152600360205260409020546001600160a01b031615611b895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161076d565b611b9560008383611d69565b6001600160a01b0382166000908152600460205260408120805460019290611bbe9084906124c6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611c278484846117a8565b611c3384848484611953565b6114145760405162461bcd60e51b815260040161076d906123ee565b606081611c735750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c9d5780611c87816125a6565b9150611c969050600a836124de565b9150611c77565b60008167ffffffffffffffff811115611cc657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cf0576020820181803683370190505b5090505b84156117a057611d05600183612511565b9150611d12600a866125c1565b611d1d9060306124c6565b60f81b818381518110611d4057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d62600a866124de565b9450611cf4565b6001600160a01b038316611dc457611dbf81600a80546000838152600960205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b611de7565b816001600160a01b0316836001600160a01b031614611de757611de78382611e21565b6001600160a01b038216611dfe576107fb81611ebe565b826001600160a01b0316826001600160a01b0316146107fb576107fb8282611f97565b60006001611e2e84611067565b611e389190612511565b600083815260086020526040902054909150808214611e8b576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600a54600090611ed090600190612511565b600083815260096020526040812054600a8054939450909284908110611f0657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600a8381548110611f3557634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600a805480611f7b57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611fa283611067565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b828054611fe79061256b565b90600052602060002090601f016020900481019282612009576000855561204f565b82601f1061202257805160ff191683800117855561204f565b8280016001018555821561204f579182015b8281111561204f578251825591602001919060010190612034565b5061205b92915061205f565b5090565b5b8082111561205b5760008155600101612060565b600067ffffffffffffffff8084111561208f5761208f612601565b604051601f8501601f19908116603f011681019082821181831017156120b7576120b7612601565b816040528093508581528686860111156120d057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461210157600080fd5b919050565b600060208284031215612117578081fd5b6114ee826120ea565b60008060408385031215612132578081fd5b61213b836120ea565b9150612149602084016120ea565b90509250929050565b600080600060608486031215612166578081fd5b61216f846120ea565b925061217d602085016120ea565b9150604084013590509250925092565b600080600080608085870312156121a2578081fd5b6121ab856120ea565b93506121b9602086016120ea565b925060408501359150606085013567ffffffffffffffff8111156121db578182fd5b8501601f810187136121eb578182fd5b6121fa87823560208401612074565b91505092959194509250565b60008060408385031215612218578182fd5b612221836120ea565b915060208301358015158114612235578182fd5b809150509250929050565b60008060408385031215612252578182fd5b61225b836120ea565b946020939093013593505050565b60006020828403121561227a578081fd5b81356114ee81612617565b600060208284031215612296578081fd5b81516114ee81612617565b6000602082840312156122b2578081fd5b813567ffffffffffffffff8111156122c8578182fd5b8201601f810184136122d8578182fd5b6117a084823560208401612074565b6000602082840312156122f8578081fd5b5035919050565b60008151808452612317816020860160208601612528565b601f01601f19169290920160200192915050565b6000835161233d818460208801612528565b835190830190612351818360208801612528565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061238d908301846122ff565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123cf578351835292840192918401916001016123b3565b50909695505050505050565b6020815260006114ee60208301846122ff565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124d9576124d96125d5565b500190565b6000826124ed576124ed6125eb565b500490565b600081600019048311821515161561250c5761250c6125d5565b500290565b600082821015612523576125236125d5565b500390565b60005b8381101561254357818101518382015260200161252b565b838111156114145750506000910152565b600081612563576125636125d5565b506000190190565b600181811c9082168061257f57607f821691505b602082108114156125a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125ba576125ba6125d5565b5060010190565b6000826125d0576125d06125eb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461262d57600080fd5b5056fea264697066735822122085e51b8dfd14bf39a8151388d05cc40c6ab0c3805c80f29305567d57fbb4653f64736f6c6343000804003368747470733a2f2f697066732e696f2f697066732f516d5561544a334c7654723946475642444c774569396e75794a774132764b32746d5677585159506257527734772f

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80636a2dae071161010d578063b88d4fde116100a0578063e35568cb1161006f578063e35568cb1461057d578063e58e8df714610592578063e6b36012146105b2578063e985e9c5146105d2578063f2fde38b1461061b57600080fd5b8063b88d4fde14610513578063c0c566f014610533578063c87b56dd14610548578063d547cfb71461056857600080fd5b80638da5cb5b116100dc5780638da5cb5b146104a057806395d89b41146104be5780639819ef3f146104d3578063a22cb465146104f357600080fd5b80636a2dae071461043857806370a0823114610458578063715018a6146104785780638467be0d1461048d57600080fd5b806323b872dd116101905780633ccfd60b1161015f5780633ccfd60b146103a357806342842e0e146103b85780634f6ccce7146103d857806356a87caa146103f85780636352211e1461041857600080fd5b806323b872dd146103235780632a446296146103435780632f745c591461036357806330176e131461038357600080fd5b8063095ea7b3116101cc578063095ea7b3146102af5780631249c58b146102cf5780631660b732146102d757806318160ddd1461030457600080fd5b806301ffc9a7146101fe57806306fdde0314610233578063081812fc1461025557806308d39a541461028d575b600080fd5b34801561020a57600080fd5b5061021e610219366004612269565b61063b565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610666565b60405161022a91906123db565b34801561026157600080fd5b506102756102703660046122e7565b6106f8565b6040516001600160a01b03909116815260200161022a565b34801561029957600080fd5b506102ad6102a8366004612240565b610792565b005b3480156102bb57600080fd5b506102ad6102ca366004612240565b610800565b6102ad610911565b3480156102e357600080fd5b506102f76102f2366004612106565b610a68565b60405161022a9190612397565b34801561031057600080fd5b50600a545b60405190815260200161022a565b34801561032f57600080fd5b506102ad61033e366004612152565b610b88565b34801561034f57600080fd5b506102ad61035e3660046122e7565b610bb9565b34801561036f57600080fd5b5061031561037e366004612240565b610d36565b34801561038f57600080fd5b506102ad61039e3660046122a1565b610dcc565b3480156103af57600080fd5b506102ad610e09565b3480156103c457600080fd5b506102ad6103d3366004612152565b610ec7565b3480156103e457600080fd5b506103156103f33660046122e7565b610ee2565b34801561040457600080fd5b506102ad6104133660046122e7565b610f83565b34801561042457600080fd5b506102756104333660046122e7565b610fb2565b34801561044457600080fd5b506102ad6104533660046122e7565b611029565b34801561046457600080fd5b50610315610473366004612106565b611067565b34801561048457600080fd5b506102ad6110ee565b6102ad61049b3660046122e7565b611162565b3480156104ac57600080fd5b506000546001600160a01b0316610275565b3480156104ca57600080fd5b506102486112df565b3480156104df57600080fd5b506102ad6104ee3660046122e7565b6112ee565b3480156104ff57600080fd5b506102ad61050e366004612206565b61131d565b34801561051f57600080fd5b506102ad61052e36600461218d565b6113e2565b34801561053f57600080fd5b50600c54610315565b34801561055457600080fd5b506102486105633660046122e7565b61141a565b34801561057457600080fd5b506102486114f5565b34801561058957600080fd5b50600e54610315565b34801561059e57600080fd5b506102ad6105ad3660046122e7565b611504565b3480156105be57600080fd5b506102ad6105cd3660046122e7565b611533565b3480156105de57600080fd5b5061021e6105ed366004612120565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b506102ad610636366004612106565b611577565b60006001600160e01b0319821663780e9d6360e01b1480610660575061066082611661565b92915050565b6060600180546106759061256b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a19061256b565b80156106ee5780601f106106c3576101008083540402835291602001916106ee565b820191906000526020600020905b8154815290600101906020018083116106d157829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166107765760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b3361079d81836116b1565b6107b95760405162461bcd60e51b815260040161076d90612475565b6107c48184846117a8565b6107df81848460405180602001604052806000815250611953565b6107fb5760405162461bcd60e51b815260040161076d906123ee565b505050565b600061080b82610fb2565b9050806001600160a01b0316836001600160a01b031614156108795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161076d565b336001600160a01b0382161480610895575061089581336105ed565b6109075760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161076d565b6107fb8383611a60565b3233146109605760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161076d565b600c543410156109be5760405162461bcd60e51b815260206004820152602360248201527f53656e6420657861637420416d6f756e7420746f20636c61696d20796f75722060448201526213999d60ea1b606482015260840161076d565b6000600e5411610a105760405162461bcd60e51b815260206004820152601c60248201527f4e6f20746f6b656e73206c65667420746f20626520636c61696d656400000000604482015260640161076d565b336000908152601560205260408120805491610a2b836125a6565b9091555050600f8054906000610a40836125a6565b9091555050600e8054906000610a5583612554565b9190505550610a6633600f54611ace565b565b60606001600160a01b038216610acc5760405162461bcd60e51b8152602060048201526024808201527f426c61636b486f6c652077616c6c6574206973206e6f742061207265616c206f6044820152633bb732b960e11b606482015260840161076d565b6000610ad783611067565b905060008167ffffffffffffffff811115610b0257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b2b578160200160208202803683370190505b50905060005b82811015610b8057610b438582610d36565b828281518110610b6357634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610b78816125a6565b915050610b31565b509392505050565b610b9233826116b1565b610bae5760405162461bcd60e51b815260040161076d90612475565b6107fb8383836117a8565b6000546001600160a01b03163314610be35760405162461bcd60e51b815260040161076d90612440565b60c8811115610c465760405162461bcd60e51b815260206004820152602960248201527f52657365727665206973206c696d6974656420746f20323030207065722063616044820152680d8d840c2e840dac2f60bb1b606482015260840161076d565b80600e541015610caa5760405162461bcd60e51b815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f207265736572766044820152686520616e796d6f726560b81b606482015260840161076d565b60005b81811015610d325760148054906000610cc5836125a6565b9091555050336000908152601560205260408120805491610ce5836125a6565b9091555050600f8054906000610cfa836125a6565b9091555050600e8054906000610d0f83612554565b9190505550610d2033600f54611ace565b80610d2a816125a6565b915050610cad565b5050565b6000610d4183611067565b8210610da35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161076d565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000546001600160a01b03163314610df65760405162461bcd60e51b815260040161076d90612440565b8051610d32906011906020840190611fdb565b6000546001600160a01b03163314610e335760405162461bcd60e51b815260040161076d90612440565b60125460405130918231916001600160a01b039190911690833180156108fc02916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b50601254604080516001600160a01b038086168252909216602083015281018290527ffca65732210654a2e0fd59899f602deb9ddfdee52677c8efb7d2f2a90d3b168c906060015b60405180910390a15050565b6107fb838383604051806020016040528060008152506113e2565b6000610eed600a5490565b8210610f505760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161076d565b600a8281548110610f7157634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000546001600160a01b03163314610fad5760405162461bcd60e51b815260040161076d90612440565b601355565b6000818152600360205260408120546001600160a01b0316806106605760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161076d565b601080549082905560408051828152602081018490527f4a773f7157dee7db92dd5fe582edbebff5d171d5d797ad8f28d2bcda77a021769101610ebb565b60006001600160a01b0382166110d25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161076d565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146111185760405162461bcd60e51b815260040161076d90612440565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3233146111b15760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161076d565b80600c546111bf91906124f2565b34101561121a5760405162461bcd60e51b8152602060048201526024808201527f53656e6420657861637420416d6f756e7420746f20636c61696d20796f7572206044820152634e66747360e01b606482015260840161076d565b80600e54101561126c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f20746f6b656e73206c65667420746f20626520636c61696d656400000000604482015260640161076d565b60005b81811015610d3257336000908152601560205260408120805491611292836125a6565b9091555050600f80549060006112a7836125a6565b9091555050600e80549060006112bc83612554565b91905055506112cd33600f54611ace565b806112d7816125a6565b91505061126f565b6060600280546106759061256b565b6000546001600160a01b031633146113185760405162461bcd60e51b815260040161076d90612440565b600b55565b6001600160a01b0382163314156113765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161076d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113ec33836116b1565b6114085760405162461bcd60e51b815260040161076d90612475565b61141484848484611c1c565b50505050565b6000818152600360205260409020546060906001600160a01b03166114995760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161076d565b60006114a36114f5565b905060008151116114c357604051806020016040528060008152506114ee565b806114cd84611c4f565b6040516020016114de92919061232b565b6040516020818303038152906040525b9392505050565b6060601180546106759061256b565b6000546001600160a01b0316331461152e5760405162461bcd60e51b815260040161076d90612440565b600c55565b6000546001600160a01b0316331461155d5760405162461bcd60e51b815260040161076d90612440565b80600d600082825461156f91906124c6565b909155505050565b6000546001600160a01b031633146115a15760405162461bcd60e51b815260040161076d90612440565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061169257506001600160e01b03198216635b5e139f60e01b145b8061066057506301ffc9a760e01b6001600160e01b0319831614610660565b6000818152600360205260408120546001600160a01b031661172a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161076d565b600061173583610fb2565b9050806001600160a01b0316846001600160a01b031614806117705750836001600160a01b0316611765846106f8565b6001600160a01b0316145b806117a057506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166117bb82610fb2565b6001600160a01b0316146118235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161076d565b6001600160a01b0382166118855760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b611890838383611d69565b61189b600082611a60565b6001600160a01b03831660009081526004602052604081208054600192906118c4908490612511565b90915550506001600160a01b03821660009081526004602052604081208054600192906118f29084906124c6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b15611a5557604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061199790339089908890889060040161235a565b602060405180830381600087803b1580156119b157600080fd5b505af19250505080156119e1575060408051601f3d908101601f191682019092526119de91810190612285565b60015b611a3b573d808015611a0f576040519150601f19603f3d011682016040523d82523d6000602084013e611a14565b606091505b508051611a335760405162461bcd60e51b815260040161076d906123ee565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117a0565b506001949350505050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a9582610fb2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b038216611b245760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161076d565b6000818152600360205260409020546001600160a01b031615611b895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161076d565b611b9560008383611d69565b6001600160a01b0382166000908152600460205260408120805460019290611bbe9084906124c6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611c278484846117a8565b611c3384848484611953565b6114145760405162461bcd60e51b815260040161076d906123ee565b606081611c735750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c9d5780611c87816125a6565b9150611c969050600a836124de565b9150611c77565b60008167ffffffffffffffff811115611cc657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cf0576020820181803683370190505b5090505b84156117a057611d05600183612511565b9150611d12600a866125c1565b611d1d9060306124c6565b60f81b818381518110611d4057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d62600a866124de565b9450611cf4565b6001600160a01b038316611dc457611dbf81600a80546000838152600960205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b611de7565b816001600160a01b0316836001600160a01b031614611de757611de78382611e21565b6001600160a01b038216611dfe576107fb81611ebe565b826001600160a01b0316826001600160a01b0316146107fb576107fb8282611f97565b60006001611e2e84611067565b611e389190612511565b600083815260086020526040902054909150808214611e8b576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600a54600090611ed090600190612511565b600083815260096020526040812054600a8054939450909284908110611f0657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600a8381548110611f3557634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600a805480611f7b57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611fa283611067565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b828054611fe79061256b565b90600052602060002090601f016020900481019282612009576000855561204f565b82601f1061202257805160ff191683800117855561204f565b8280016001018555821561204f579182015b8281111561204f578251825591602001919060010190612034565b5061205b92915061205f565b5090565b5b8082111561205b5760008155600101612060565b600067ffffffffffffffff8084111561208f5761208f612601565b604051601f8501601f19908116603f011681019082821181831017156120b7576120b7612601565b816040528093508581528686860111156120d057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461210157600080fd5b919050565b600060208284031215612117578081fd5b6114ee826120ea565b60008060408385031215612132578081fd5b61213b836120ea565b9150612149602084016120ea565b90509250929050565b600080600060608486031215612166578081fd5b61216f846120ea565b925061217d602085016120ea565b9150604084013590509250925092565b600080600080608085870312156121a2578081fd5b6121ab856120ea565b93506121b9602086016120ea565b925060408501359150606085013567ffffffffffffffff8111156121db578182fd5b8501601f810187136121eb578182fd5b6121fa87823560208401612074565b91505092959194509250565b60008060408385031215612218578182fd5b612221836120ea565b915060208301358015158114612235578182fd5b809150509250929050565b60008060408385031215612252578182fd5b61225b836120ea565b946020939093013593505050565b60006020828403121561227a578081fd5b81356114ee81612617565b600060208284031215612296578081fd5b81516114ee81612617565b6000602082840312156122b2578081fd5b813567ffffffffffffffff8111156122c8578182fd5b8201601f810184136122d8578182fd5b6117a084823560208401612074565b6000602082840312156122f8578081fd5b5035919050565b60008151808452612317816020860160208601612528565b601f01601f19169290920160200192915050565b6000835161233d818460208801612528565b835190830190612351818360208801612528565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061238d908301846122ff565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123cf578351835292840192918401916001016123b3565b50909695505050505050565b6020815260006114ee60208301846122ff565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124d9576124d96125d5565b500190565b6000826124ed576124ed6125eb565b500490565b600081600019048311821515161561250c5761250c6125d5565b500290565b600082821015612523576125236125d5565b500390565b60005b8381101561254357818101518382015260200161252b565b838111156114145750506000910152565b600081612563576125636125d5565b506000190190565b600181811c9082168061257f57607f821691505b602082108114156125a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125ba576125ba6125d5565b5060010190565b6000826125d0576125d06125eb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461262d57600080fd5b5056fea264697066735822122085e51b8dfd14bf39a8151388d05cc40c6ab0c3805c80f29305567d57fbb4653f64736f6c63430008040033

Deployed Bytecode Sourcemap

23232:6436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13481:229;;;;;;;;;;-1:-1:-1;13481:229:0;;;;;:::i;:::-;;:::i;:::-;;;6816:14:1;;6809:22;6791:41;;6779:2;6764:18;13481:229:0;;;;;;;;5704:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6830:226::-;;;;;;;;;;-1:-1:-1;6830:226:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5094:32:1;;;5076:51;;5064:2;5049:18;6830:226:0;5031:102:1;24544:386:0;;;;;;;;;;-1:-1:-1;24544:386:0;;;;;:::i;:::-;;:::i;:::-;;6429:385;;;;;;;;;;-1:-1:-1;6429:385:0;;;;;:::i;:::-;;:::i;28473:392::-;;;:::i;27143:489::-;;;;;;;;;;-1:-1:-1;27143:489:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13718:118::-;;;;;;;;;;-1:-1:-1;13811:10:0;:17;13718:118;;;17170:25:1;;;17158:2;17143:18;13718:118:0;17125:76:1;7578:325:0;;;;;;;;;;-1:-1:-1;7578:325:0;;;;;:::i;:::-;;:::i;27774:683::-;;;;;;;;;;-1:-1:-1;27774:683:0;;;;;:::i;:::-;;:::i;13844:266::-;;;;;;;;;;-1:-1:-1;13844:266:0;;;;;:::i;:::-;;:::i;25881:109::-;;;;;;;;;;-1:-1:-1;25881:109:0;;;;;:::i;:::-;;:::i;29389:276::-;;;;;;;;;;;;;:::i;7919:156::-;;;;;;;;;;-1:-1:-1;7919:156:0;;;;;:::i;:::-;;:::i;14118:243::-;;;;;;;;;;-1:-1:-1;14118:243:0;;;;;:::i;:::-;;:::i;27641:123::-;;;;;;;;;;-1:-1:-1;27641:123:0;;;;;:::i;:::-;;:::i;5444:244::-;;;;;;;;;;-1:-1:-1;5444:244:0;;;;;:::i;:::-;;:::i;26757:250::-;;;;;;;;;;-1:-1:-1;26757:250:0;;;;;:::i;:::-;;:::i;5206:222::-;;;;;;;;;;-1:-1:-1;5206:222:0;;;;;:::i;:::-;;:::i;3545:162::-;;;;;;;;;;;;;:::i;28875:506::-;;;;;;:::i;:::-;;:::i;3296:92::-;;;;;;;;;;-1:-1:-1;3342:7:0;3374:6;-1:-1:-1;;;;;3374:6:0;3296:92;;5825:109;;;;;;;;;;;;;:::i;26143:114::-;;;;;;;;;;-1:-1:-1;26143:114:0;;;;;:::i;:::-;;:::i;7072:305::-;;;;;;;;;;-1:-1:-1;7072:305:0;;;;;:::i;:::-;;:::i;8091:299::-;;;;;;;;;;-1:-1:-1;8091:299:0;;;;;:::i;:::-;;:::i;26518:101::-;;;;;;;;;;-1:-1:-1;26601:10:0;;26518:101;;5950:348;;;;;;;;;;-1:-1:-1;5950:348:0;;;;;:::i;:::-;;:::i;26273:103::-;;;;;;;;;;;;;:::i;26392:110::-;;;;;;;;;;-1:-1:-1;26480:14:0;;26392:110;;26629:118;;;;;;;;;;-1:-1:-1;26629:118:0;;;;;:::i;:::-;;:::i;26006:121::-;;;;;;;;;;-1:-1:-1;26006:121:0;;;;;:::i;:::-;;:::i;7393:169::-;;;;;;;;;;-1:-1:-1;7393:169:0;;;;;:::i;:::-;-1:-1:-1;;;;;7519:25:0;;;7490:4;7519:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;7393:169;3723:267;;;;;;;;;;-1:-1:-1;3723:267:0;;;;;:::i;:::-;;:::i;13481:229::-;13583:4;-1:-1:-1;;;;;;13612:50:0;;-1:-1:-1;;;13612:50:0;;:90;;;13666:36;13690:11;13666:23;:36::i;:::-;13605:97;13481:229;-1:-1:-1;;13481:229:0:o;5704:105::-;5758:13;5796:5;5789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5704:105;:::o;6830:226::-;6906:7;8798:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8798:16:0;6931:73;;;;-1:-1:-1;;;6931:73:0;;14393:2:1;6931:73:0;;;14375:21:1;14432:2;14412:18;;;14405:30;14471:34;14451:18;;;14444:62;-1:-1:-1;;;14522:18:1;;;14515:42;14574:19;;6931:73:0;;;;;;;;;-1:-1:-1;7024:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;7024:24:0;;6830:226::o;24544:386::-;2631:10;24659:37;2631:10;24688:7;24659:18;:37::i;:::-;24651:99;;;;-1:-1:-1;;;24651:99:0;;;;;;;:::i;:::-;24770:32;24780:8;24790:2;24794:7;24770:9;:32::i;:::-;24823:48;24845:8;24855:2;24859:7;24823:48;;;;;;;;;;;;:21;:48::i;:::-;24815:111;;;;-1:-1:-1;;;24815:111:0;;;;;;;:::i;:::-;24544:386;;;:::o;6429:385::-;6515:13;6531:23;6546:7;6531:14;:23::i;:::-;6515:39;;6582:5;-1:-1:-1;;;;;6578:9:0;:2;-1:-1:-1;;;;;6578:9:0;;;6570:55;;;;-1:-1:-1;;;6570:55:0;;15993:2:1;6570:55:0;;;15975:21:1;16032:2;16012:18;;;16005:30;16071:34;16051:18;;;16044:62;-1:-1:-1;;;16122:18:1;;;16115:31;16163:19;;6570:55:0;15965:223:1;6570:55:0;2631:10;-1:-1:-1;;;;;6644:19:0;;;;:67;;-1:-1:-1;6667:44:0;6691:5;2631:10;7393:169;:::i;6667:44::-;6636:136;;;;-1:-1:-1;;;6636:136:0;;11567:2:1;6636:136:0;;;11549:21:1;11606:2;11586:18;;;11579:30;11645:34;11625:18;;;11618:62;11716:26;11696:18;;;11689:54;11760:19;;6636:136:0;11539:246:1;6636:136:0;6785:21;6794:2;6798:7;6785:8;:21::i;28473:392::-;23398:9;23411:10;23398:23;23390:66;;;;-1:-1:-1;;;23390:66:0;;11208:2:1;23390:66:0;;;11190:21:1;11247:2;11227:18;;;11220:30;11286:32;11266:18;;;11259:60;11336:18;;23390:66:0;11180:180:1;23390:66:0;28564:10:::1;;28546:9;:28;;28538:84;;;::::0;-1:-1:-1;;;28538:84:0;;12813:2:1;28538:84:0::1;::::0;::::1;12795:21:1::0;12852:2;12832:18;;;12825:30;12891:34;12871:18;;;12864:62;-1:-1:-1;;;12942:18:1;;;12935:33;12985:19;;28538:84:0::1;12785:225:1::0;28538:84:0::1;28659:1;28641:14;;:19;28633:77;;;::::0;-1:-1:-1;;;28633:77:0;;8100:2:1;28633:77:0::1;::::0;::::1;8082:21:1::0;8139:2;8119:18;;;8112:30;8178;8158:18;;;8151:58;8226:18;;28633:77:0::1;8072:178:1::0;28633:77:0::1;28740:10;28723:28;::::0;;;:16:::1;:28;::::0;;;;:30;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28764:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28793:14:0::1;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;28822:35;28828:10;28840:16;;28822:5;:35::i;:::-;28473:392::o:0;27143:489::-;27220:16;-1:-1:-1;;;;;27262:25:0;;27254:74;;;;-1:-1:-1;;;27254:74:0;;13217:2:1;27254:74:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:34;13275:18;;;13268:62;-1:-1:-1;;;13346:18:1;;;13339:34;13390:19;;27254:74:0;13189:226:1;27254:74:0;27348:22;27374:24;27384:13;27374:9;:24::i;:::-;27348:50;;27409:23;27449:5;27435:20;;;;;;-1:-1:-1;;;27435:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27435:20:0;;27409:46;;27480:9;27475:117;27495:5;27493:1;:7;27475:117;;;27543:37;27563:13;27578:1;27543:19;:37::i;:::-;27531:6;27538:1;27531:9;;;;;;-1:-1:-1;;;27531:9:0;;;;;;;;;;;;;;;;;;:49;27502:3;;;;:::i;:::-;;;;27475:117;;;-1:-1:-1;27618:6:0;27143:489;-1:-1:-1;;;27143:489:0:o;7578:325::-;7759:41;2631:10;7792:7;7759:18;:41::i;:::-;7751:103;;;;-1:-1:-1;;;7751:103:0;;;;;;;:::i;:::-;7867:28;7877:4;7883:2;7887:7;7867:9;:28::i;27774:683::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;27882:3:::1;27864:6;:21;;27856:104;;;::::0;-1:-1:-1;;;27856:104:0;;13622:2:1;27856:104:0::1;::::0;::::1;13604:21:1::0;13661:2;13641:18;;;13634:30;13700:34;13680:18;;;13673:62;-1:-1:-1;;;13751:18:1;;;13744:39;13800:19;;27856:104:0::1;13594:231:1::0;27856:104:0::1;27997:6;27979:14;;:24;;27971:97;;;::::0;-1:-1:-1;;;27971:97:0;;9221:2:1;27971:97:0::1;::::0;::::1;9203:21:1::0;9260:2;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;-1:-1:-1;;;9350:18:1;;;9343:39;9399:19;;27971:97:0::1;9193:231:1::0;27971:97:0::1;28205:9;28200:250;28222:6;28218:1;:10;28200:250;;;28251:13;:15:::0;;;:13:::1;:15;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28298:10:0::1;28281:28;::::0;;;:16:::1;:28;::::0;;;;:30;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28326:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28359:14:0::1;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;28403:35;28409:10;28421:16;;28403:5;:35::i;:::-;28230:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28200:250;;;;27774:683:::0;:::o;13844:266::-;13941:7;13982:23;13999:5;13982:16;:23::i;:::-;13974:5;:31;13966:87;;;;-1:-1:-1;;;13966:87:0;;7269:2:1;13966:87:0;;;7251:21:1;7308:2;7288:18;;;7281:30;7347:34;7327:18;;;7320:62;-1:-1:-1;;;7398:18:1;;;7391:41;7449:19;;13966:87:0;7241:233:1;13966:87:0;-1:-1:-1;;;;;;14076:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;13844:266::o;25881:109::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;25966:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;29389:276::-:0;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;29555:11:::1;::::0;29547:47:::1;::::0;29475:4:::1;::::0;29511:16;::::1;::::0;-1:-1:-1;;;;;29555:11:0;;;::::1;::::0;29577:16;::::1;29547:47:::0;::::1;;;::::0;29447:17:::1;29547:47:::0;29447:17;29547:47;29577:16;29555:11;29547:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29636:11:0::1;::::0;29612:45:::1;::::0;;-1:-1:-1;;;;;5396:15:1;;;5378:34;;29636:11:0;;::::1;5443:2:1::0;5428:18;;5421:43;5480:18;;5473:34;;;29612:45:0::1;::::0;5328:2:1;5313:18;29612:45:0::1;;;;;;;;3520:1;;29389:276::o:0;7919:156::-;8028:39;8045:4;8051:2;8055:7;8028:39;;;;;;;;;;;;:16;:39::i;14118:243::-;14193:7;14234:30;13811:10;:17;;13718:118;14234:30;14226:5;:38;14218:95;;;;-1:-1:-1;;;14218:95:0;;16813:2:1;14218:95:0;;;16795:21:1;16852:2;16832:18;;;16825:30;16891:34;16871:18;;;16864:62;-1:-1:-1;;;16942:18:1;;;16935:42;16994:19;;14218:95:0;16785:234:1;14218:95:0;14336:10;14347:5;14336:17;;;;;;-1:-1:-1;;;14336:17:0;;;;;;;;;;;;;;;;;14329:24;;14118:243;;;:::o;27641:123::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;27721:23:::1;:35:::0;27641:123::o;5444:244::-;5516:7;5557:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5557:16:0;5592:19;5584:73;;;;-1:-1:-1;;;5584:73:0;;12403:2:1;5584:73:0;;;12385:21:1;12442:2;12422:18;;;12415:30;12481:34;12461:18;;;12454:62;-1:-1:-1;;;12532:18:1;;;12525:39;12581:19;;5584:73:0;12375:231:1;26757:250:0;26858:16;;;26894:30;;;;26949:50;;;17380:25:1;;;17436:2;17421:18;;17414:34;;;26949:50:0;;17353:18:1;26949:50:0;17335:119:1;5206:222:0;5278:7;-1:-1:-1;;;;;5311:19:0;;5303:74;;;;-1:-1:-1;;;5303:74:0;;11992:2:1;5303:74:0;;;11974:21:1;12031:2;12011:18;;;12004:30;12070:34;12050:18;;;12043:62;-1:-1:-1;;;12121:18:1;;;12114:40;12171:19;;5303:74:0;11964:232:1;5303:74:0;-1:-1:-1;;;;;;5404:16:0;;;;;:9;:16;;;;;;;5206:222::o;3545:162::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;3657:1:::1;3641:6:::0;;3620:40:::1;::::0;-1:-1:-1;;;;;3641:6:0;;::::1;::::0;3620:40:::1;::::0;3657:1;;3620:40:::1;3697:1;3680:19:::0;;-1:-1:-1;;;;;;3680:19:0::1;::::0;;3545:162::o;28875:506::-;23398:9;23411:10;23398:23;23390:66;;;;-1:-1:-1;;;23390:66:0;;11208:2:1;23390:66:0;;;11190:21:1;11247:2;11227:18;;;11220:30;11286:32;11266:18;;;11259:60;11336:18;;23390:66:0;11180:180:1;23390:66:0;28999:8:::1;28986:10;;:21;;;;:::i;:::-;28969:9;:38;;28961:89;;;::::0;-1:-1:-1;;;28961:89:0;;10390:2:1;28961:89:0::1;::::0;::::1;10372:21:1::0;10429:2;10409:18;;;10402:30;10468:34;10448:18;;;10441:62;-1:-1:-1;;;10519:18:1;;;10512:34;10563:19;;28961:89:0::1;10362:226:1::0;28961:89:0::1;29086:8;29069:14;;:25;;29061:81;;;::::0;-1:-1:-1;;;29061:81:0;;8100:2:1;29061:81:0::1;::::0;::::1;8082:21:1::0;8139:2;8119:18;;;8112:30;8178;8158:18;;;8151:58;8226:18;;29061:81:0::1;8072:178:1::0;29061:81:0::1;29160:9;29155:219;29177:8;29173:1;:12;29155:219;;;29233:10;29216:28;::::0;;;:16:::1;:28;::::0;;;;:30;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;29261:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;29294:14:0::1;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;29327:35;29333:10;29345:16;;29327:5;:35::i;:::-;29187:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29155:219;;5825:109:::0;5881:13;5919:7;5912:14;;;;;:::i;26143:114::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;26225:9:::1;:24:::0;26143:114::o;7072:305::-;-1:-1:-1;;;;;7180:24:0;;2631:10;7180:24;;7172:62;;;;-1:-1:-1;;;7172:62:0;;10036:2:1;7172:62:0;;;10018:21:1;10075:2;10055:18;;;10048:30;10114:27;10094:18;;;10087:55;10159:18;;7172:62:0;10008:175:1;7172:62:0;2631:10;7247:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;7247:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;7247:53:0;;;;;;;;;;7321:48;;6791:41:1;;;7247:42:0;;2631:10;7321:48;;6764:18:1;7321:48:0;;;;;;;7072:305;;:::o;8091:299::-;8228:41;2631:10;8261:7;8228:18;:41::i;:::-;8220:103;;;;-1:-1:-1;;;8220:103:0;;;;;;;:::i;:::-;8343:39;8357:4;8363:2;8367:7;8376:5;8343:13;:39::i;:::-;8091:299;;;;:::o;5950:348::-;8769:4;8798:16;;;:7;:16;;;;;;6023:13;;-1:-1:-1;;;;;8798:16:0;6054:76;;;;-1:-1:-1;;;6054:76:0;;15577:2:1;6054:76:0;;;15559:21:1;15616:2;15596:18;;;15589:30;15655:34;15635:18;;;15628:62;-1:-1:-1;;;15706:18:1;;;15699:45;15761:19;;6054:76:0;15549:237:1;6054:76:0;6143:21;6167:10;:8;:10::i;:::-;6143:34;;6227:1;6211:7;6205:21;:23;6204:86;;;;;;;;;;;;;;;;;6256:7;6265:18;:7;:16;:18::i;:::-;6239:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6204:86;6197:93;5950:348;-1:-1:-1;;;5950:348:0:o;26273:103::-;26323:13;26361:7;26354:14;;;;;:::i;26629:118::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;26713:10:::1;:26:::0;26629:118::o;26006:121::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;26108:11:::1;26093;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;26006:121:0:o;3723:267::-;3342:7;3374:6;-1:-1:-1;;;;;3374:6:0;2631:10;3449:23;3441:68;;;;-1:-1:-1;;;3441:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3817:22:0;::::1;3809:73;;;::::0;-1:-1:-1;;;3809:73:0;;8457:2:1;3809:73:0::1;::::0;::::1;8439:21:1::0;8496:2;8476:18;;;8469:30;8535:34;8515:18;;;8508:62;-1:-1:-1;;;8586:18:1;;;8579:36;8632:19;;3809:73:0::1;8429:228:1::0;3809:73:0::1;3928:6;::::0;;3907:38:::1;::::0;-1:-1:-1;;;;;3907:38:0;;::::1;::::0;3928:6;::::1;::::0;3907:38:::1;::::0;::::1;3965:6;:17:::0;;-1:-1:-1;;;;;;3965:17:0::1;-1:-1:-1::0;;;;;3965:17:0;;;::::1;::::0;;;::::1;::::0;;3723:267::o;4876:314::-;4978:4;-1:-1:-1;;;;;;5008:40:0;;-1:-1:-1;;;5008:40:0;;:117;;-1:-1:-1;;;;;;;5077:48:0;;-1:-1:-1;;;5077:48:0;5008:117;:174;;;-1:-1:-1;;;;;;;;;;2452:40:0;;;5146:36;2337:164;8852:378;8945:4;8798:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8798:16:0;8967:73;;;;-1:-1:-1;;;8967:73:0;;10795:2:1;8967:73:0;;;10777:21:1;10834:2;10814:18;;;10807:30;10873:34;10853:18;;;10846:62;-1:-1:-1;;;10924:18:1;;;10917:42;10976:19;;8967:73:0;10767:234:1;8967:73:0;9060:13;9076:23;9091:7;9076:14;:23::i;:::-;9060:39;;9138:5;-1:-1:-1;;;;;9127:16:0;:7;-1:-1:-1;;;;;9127:16:0;;:51;;;;9171:7;-1:-1:-1;;;;;9147:31:0;:20;9159:7;9147:11;:20::i;:::-;-1:-1:-1;;;;;9147:31:0;;9127:51;:94;;;-1:-1:-1;;;;;;7519:25:0;;;7490:4;7519:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;9182:39;9119:103;8852:378;-1:-1:-1;;;;8852:378:0:o;10988:560::-;11116:4;-1:-1:-1;;;;;11091:29:0;:23;11106:7;11091:14;:23::i;:::-;-1:-1:-1;;;;;11091:29:0;;11083:84;;;;-1:-1:-1;;;11083:84:0;;15167:2:1;11083:84:0;;;15149:21:1;15206:2;15186:18;;;15179:30;15245:34;15225:18;;;15218:62;-1:-1:-1;;;15296:18:1;;;15289:39;15345:19;;11083:84:0;15139:231:1;11083:84:0;-1:-1:-1;;;;;11186:16:0;;11178:79;;;;-1:-1:-1;;;11178:79:0;;9631:2:1;11178:79:0;;;9613:21:1;9670:2;9650:18;;;9643:30;9709:34;9689:18;;;9682:62;-1:-1:-1;;;9760:18:1;;;9753:34;9804:19;;11178:79:0;9603:226:1;11178:79:0;11270:39;11291:4;11297:2;11301:7;11270:20;:39::i;:::-;11322:29;11339:1;11343:7;11322:8;:29::i;:::-;-1:-1:-1;;;;;11412:15:0;;;;;;:9;:15;;;;;:20;;11431:1;;11412:15;:20;;11431:1;;11412:20;:::i;:::-;;;;-1:-1:-1;;;;;;;11443:13:0;;;;;;:9;:13;;;;;:20;;11462:1;;11443:13;:20;;11462:1;;11443:20;:::i;:::-;;;;-1:-1:-1;;11474:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;11474:21:0;-1:-1:-1;;;;;11474:21:0;;;;;;;;;11513:27;;11474:16;;11513:27;;;;;;;10988:560;;;:::o;24936:935::-;25047:4;-1:-1:-1;;;;;25069:13:0;;19326:20;19415:8;25065:803;;25144:72;;-1:-1:-1;;;25144:72:0;;-1:-1:-1;;;;;25144:36:0;;;;;:72;;2631:10;;25195:4;;25201:7;;25210:5;;25144:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25144:72:0;;;;;;;;-1:-1:-1;;25144:72:0;;;;;;;;;;;;:::i;:::-;;;25110:685;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25455:13:0;;25451:329;;25513:60;;-1:-1:-1;;;25513:60:0;;;;;;;:::i;25451:329::-;25697:6;25691:13;25682:6;25678:2;25674:15;25667:38;25110:685;-1:-1:-1;;;;;;25306:55:0;-1:-1:-1;;;25306:55:0;;-1:-1:-1;25299:62:0;;25065:803;-1:-1:-1;25852:4:0;24936:935;;;;;;:::o;11564:184::-;11644:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11644:29:0;-1:-1:-1;;;;;11644:29:0;;;;;;;;:24;;11703:23;11644:24;11703:14;:23::i;:::-;-1:-1:-1;;;;;11694:46:0;;;;;;;;;;;11564:184;;:::o;9653:390::-;-1:-1:-1;;;;;9738:16:0;;9730:62;;;;-1:-1:-1;;;9730:62:0;;14032:2:1;9730:62:0;;;14014:21:1;;;14051:18;;;14044:30;14110:34;14090:18;;;14083:62;14162:18;;9730:62:0;14004:182:1;9730:62:0;8769:4;8798:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8798:16:0;:30;9803:58;;;;-1:-1:-1;;;9803:58:0;;8864:2:1;9803:58:0;;;8846:21:1;8903:2;8883:18;;;8876:30;8942;8922:18;;;8915:58;8990:18;;9803:58:0;8836:178:1;9803:58:0;9874:45;9903:1;9907:2;9911:7;9874:20;:45::i;:::-;-1:-1:-1;;;;;9932:13:0;;;;;;:9;:13;;;;;:20;;9951:1;;9932:13;:20;;9951:1;;9932:20;:::i;:::-;;;;-1:-1:-1;;9963:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9963:21:0;-1:-1:-1;;;;;9963:21:0;;;;;;;;10002:33;;9963:16;;;10002:33;;9963:16;;10002:33;9653:390;;:::o;8406:282::-;8525:28;8535:4;8541:2;8545:7;8525:9;:28::i;:::-;8577:48;8600:4;8606:2;8610:7;8619:5;8577:22;:48::i;:::-;8569:111;;;;-1:-1:-1;;;8569:111:0;;;;;;;:::i;17511:774::-;17567:13;17793:8;17789:30;;-1:-1:-1;;17809:10:0;;;;;;;;;;;;-1:-1:-1;;;17809:10:0;;;;;17511:774::o;17789:30::-;17850:5;17835:12;17896:85;17903:7;;17896:85;;17936:8;;;;:::i;:::-;;-1:-1:-1;17959:10:0;;-1:-1:-1;17967:2:0;17959:10;;:::i;:::-;;;17896:85;;;18000:19;18032:6;18022:17;;;;;;-1:-1:-1;;;18022:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18022:17:0;;18000:39;;18059:178;18066:10;;18059:178;;18102:18;18119:1;18102:18;;:::i;:::-;;-1:-1:-1;18178:10:0;18186:2;18178:5;:10;:::i;:::-;18165:24;;:2;:24;:::i;:::-;18152:39;;18135:6;18142;18135:14;;;;;;-1:-1:-1;;;18135:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;18135:56:0;;;;;;;;-1:-1:-1;18206:19:0;18223:2;18206:19;;:::i;:::-;;;18059:178;;14369:525;-1:-1:-1;;;;;14549:18:0;;14545:159;;14573:40;14605:7;15252:10;:17;;15225:24;;;;:15;:24;;;;;:44;;;15285:24;;;;;;;;;;;;15143:174;14573:40;14545:159;;;14641:2;-1:-1:-1;;;;;14633:10:0;:4;-1:-1:-1;;;;;14633:10:0;;14629:75;;14657:47;14690:4;14696:7;14657:32;:47::i;:::-;-1:-1:-1;;;;;14733:16:0;;14729:157;;14757:45;14794:7;14757:36;:45::i;14729:157::-;14828:4;-1:-1:-1;;;;;14822:10:0;:2;-1:-1:-1;;;;;14822:10:0;;14818:68;;14846:40;14874:2;14878:7;14846:27;:40::i;15325:993::-;15596:22;15646:1;15621:22;15638:4;15621:16;:22::i;:::-;:26;;;;:::i;:::-;15658:18;15679:26;;;:17;:26;;;;;;15596:51;;-1:-1:-1;15812:28:0;;;15808:328;;-1:-1:-1;;;;;15879:18:0;;15857:19;15879:18;;;:12;:18;;;;;;;;:34;;;;;;;;;15930:30;;;;;;:44;;;16047:30;;:17;:30;;;;;:43;;;15808:328;-1:-1:-1;16232:26:0;;;;:17;:26;;;;;;;;16225:33;;;-1:-1:-1;;;;;16276:18:0;;;;;:12;:18;;;;;:34;;;;;;;16269:41;15325:993::o;16326:1084::-;16609:10;:17;16584:22;;16609:21;;16629:1;;16609:21;:::i;:::-;16641:18;16662:24;;;:15;:24;;;;;;17035:10;:26;;16584:46;;-1:-1:-1;16662:24:0;;16584:46;;17035:26;;;;-1:-1:-1;;;17035:26:0;;;;;;;;;;;;;;;;;17013:48;;17099:11;17074:10;17085;17074:22;;;;;;-1:-1:-1;;;17074:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;17179:28;;;:15;:28;;;;;;;:41;;;17351:24;;;;;17344:31;17386:10;:16;;;;;-1:-1:-1;;;17386:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;16326:1084;;;;:::o;14902:233::-;14992:14;15009:20;15026:2;15009:16;:20::i;:::-;-1:-1:-1;;;;;15045:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:36;;;15092:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;14902:233:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:196::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;1097:6;1105;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;1381:6;1389;1397;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;1742:6;1750;1758;1766;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;2084:18;2076:6;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:1;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:367::-;2413:6;2421;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2649:5;2642:13;2635:21;2628:5;2625:32;2615:2;;2676:6;2668;2661:22;2615:2;2704:5;2694:15;;;2432:283;;;;;:::o;2720:264::-;2788:6;2796;2849:2;2837:9;2828:7;2824:23;2820:32;2817:2;;;2870:6;2862;2855:22;2817:2;2898:29;2917:9;2898:29;:::i;:::-;2888:39;2974:2;2959:18;;;;2946:32;;-1:-1:-1;;;2807:177:1:o;2989:255::-;3047:6;3100:2;3088:9;3079:7;3075:23;3071:32;3068:2;;;3121:6;3113;3106:22;3068:2;3165:9;3152:23;3184:30;3208:5;3184:30;:::i;3249:259::-;3318:6;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3392:6;3384;3377:22;3339:2;3429:9;3423:16;3448:30;3472:5;3448:30;:::i;3513:480::-;3582:6;3635:2;3623:9;3614:7;3610:23;3606:32;3603:2;;;3656:6;3648;3641:22;3603:2;3701:9;3688:23;3734:18;3726:6;3723:30;3720:2;;;3771:6;3763;3756:22;3720:2;3799:22;;3852:4;3844:13;;3840:27;-1:-1:-1;3830:2:1;;3886:6;3878;3871:22;3830:2;3914:73;3979:7;3974:2;3961:16;3956:2;3952;3948:11;3914:73;:::i;3998:190::-;4057:6;4110:2;4098:9;4089:7;4085:23;4081:32;4078:2;;;4131:6;4123;4116:22;4078:2;-1:-1:-1;4159:23:1;;4068:120;-1:-1:-1;4068:120:1:o;4193:257::-;4234:3;4272:5;4266:12;4299:6;4294:3;4287:19;4315:63;4371:6;4364:4;4359:3;4355:14;4348:4;4341:5;4337:16;4315:63;:::i;:::-;4432:2;4411:15;-1:-1:-1;;4407:29:1;4398:39;;;;4439:4;4394:50;;4242:208;-1:-1:-1;;4242:208:1:o;4455:470::-;4634:3;4672:6;4666:13;4688:53;4734:6;4729:3;4722:4;4714:6;4710:17;4688:53;:::i;:::-;4804:13;;4763:16;;;;4826:57;4804:13;4763:16;4860:4;4848:17;;4826:57;:::i;:::-;4899:20;;4642:283;-1:-1:-1;;;;4642:283:1:o;5518:488::-;-1:-1:-1;;;;;5787:15:1;;;5769:34;;5839:15;;5834:2;5819:18;;5812:43;5886:2;5871:18;;5864:34;;;5934:3;5929:2;5914:18;;5907:31;;;5712:4;;5955:45;;5980:19;;5972:6;5955:45;:::i;:::-;5947:53;5721:285;-1:-1:-1;;;;;;5721:285:1:o;6011:635::-;6182:2;6234:21;;;6304:13;;6207:18;;;6326:22;;;6153:4;;6182:2;6405:15;;;;6379:2;6364:18;;;6153:4;6451:169;6465:6;6462:1;6459:13;6451:169;;;6526:13;;6514:26;;6595:15;;;;6560:12;;;;6487:1;6480:9;6451:169;;;-1:-1:-1;6637:3:1;;6162:484;-1:-1:-1;;;;;;6162:484:1:o;6843:219::-;6992:2;6981:9;6974:21;6955:4;7012:44;7052:2;7041:9;7037:18;7029:6;7012:44;:::i;7479:414::-;7681:2;7663:21;;;7720:2;7700:18;;;7693:30;7759:34;7754:2;7739:18;;7732:62;-1:-1:-1;;;7825:2:1;7810:18;;7803:48;7883:3;7868:19;;7653:240::o;14604:356::-;14806:2;14788:21;;;14825:18;;;14818:30;14884:34;14879:2;14864:18;;14857:62;14951:2;14936:18;;14778:182::o;16193:413::-;16395:2;16377:21;;;16434:2;16414:18;;;16407:30;16473:34;16468:2;16453:18;;16446:62;-1:-1:-1;;;16539:2:1;16524:18;;16517:47;16596:3;16581:19;;16367:239::o;17459:128::-;17499:3;17530:1;17526:6;17523:1;17520:13;17517:2;;;17536:18;;:::i;:::-;-1:-1:-1;17572:9:1;;17507:80::o;17592:120::-;17632:1;17658;17648:2;;17663:18;;:::i;:::-;-1:-1:-1;17697:9:1;;17638:74::o;17717:168::-;17757:7;17823:1;17819;17815:6;17811:14;17808:1;17805:21;17800:1;17793:9;17786:17;17782:45;17779:2;;;17830:18;;:::i;:::-;-1:-1:-1;17870:9:1;;17769:116::o;17890:125::-;17930:4;17958:1;17955;17952:8;17949:2;;;17963:18;;:::i;:::-;-1:-1:-1;18000:9:1;;17939:76::o;18020:258::-;18092:1;18102:113;18116:6;18113:1;18110:13;18102:113;;;18192:11;;;18186:18;18173:11;;;18166:39;18138:2;18131:10;18102:113;;;18233:6;18230:1;18227:13;18224:2;;;-1:-1:-1;;18268:1:1;18250:16;;18243:27;18073:205::o;18283:136::-;18322:3;18350:5;18340:2;;18359:18;;:::i;:::-;-1:-1:-1;;;18395:18:1;;18330:89::o;18424:380::-;18503:1;18499:12;;;;18546;;;18567:2;;18621:4;18613:6;18609:17;18599:27;;18567:2;18674;18666:6;18663:14;18643:18;18640:38;18637:2;;;18720:10;18715:3;18711:20;18708:1;18701:31;18755:4;18752:1;18745:15;18783:4;18780:1;18773:15;18637:2;;18479:325;;;:::o;18809:135::-;18848:3;-1:-1:-1;;18869:17:1;;18866:2;;;18889:18;;:::i;:::-;-1:-1:-1;18936:1:1;18925:13;;18856:88::o;18949:112::-;18981:1;19007;18997:2;;19012:18;;:::i;:::-;-1:-1:-1;19046:9:1;;18987:74::o;19066:127::-;19127:10;19122:3;19118:20;19115:1;19108:31;19158:4;19155:1;19148:15;19182:4;19179:1;19172:15;19198:127;19259:10;19254:3;19250:20;19247:1;19240:31;19290:4;19287:1;19280:15;19314:4;19311:1;19304:15;19330:127;19391:10;19386:3;19382:20;19379:1;19372:31;19422:4;19419:1;19412:15;19446:4;19443:1;19436:15;19462:131;-1:-1:-1;;;;;;19536:32:1;;19526:43;;19516:2;;19583:1;19580;19573:12;19516:2;19506:87;:::o

Swarm Source

ipfs://85e51b8dfd14bf39a8151388d05cc40c6ab0c3805c80f29305567d57fbb4653f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.