ETH Price: $3,250.33 (+2.13%)
Gas: 2 Gwei

Token

Maxi Ape Country Club OG Pass (MASS PASS)
 

Overview

Max Total Supply

378 MASS PASS

Holders

267

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MASS PASS
0x7Ba7f899861c6090761fB5d3a1C00a3ce4173C26
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:
MASSPASS

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-16
*/

pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT

interface IERC165 {

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

pragma solidity ^0.8.0;


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;
}



pragma solidity ^0.8.0;


interface IERC721Receiver {

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




pragma solidity ^0.8.0;


interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}




pragma solidity ^0.8.0;


library Address {

    function isContract(address account) internal view returns (bool) {


        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        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}("");
        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);
        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);
        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);
        return verifyCallResult(success, returndata, errorMessage);
    }


    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}




pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {

        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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}



pragma solidity ^0.8.0;


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

pragma solidity ^0.8.0;


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;


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


    string private _name;



    string private _symbol;


    mapping(uint256 => address) private _owners;

  
    mapping(address => uint256) private _balances;


    mapping(uint256 => address) private _tokenApprovals;

  
    mapping(address => mapping(address => bool)) private _operatorApprovals;

  
    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 || 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 {
        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 || isApprovedForAll(owner, spender));
    }


    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 _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        
        _approve(address(0), tokenId);

        _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);

        _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.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))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}




pragma solidity ^0.8.0;


interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}





pragma solidity ^0.8.0;


abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

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

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    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];
    }


    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    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);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    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];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    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();
    }
}





pragma solidity ^0.8.0;

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }
 


    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}





pragma solidity ^0.8.0;


/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint c = a / b;

        return c;
    }

    
    
}

interface IERC20 {

    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
}


pragma solidity ^0.8.2;

    contract MASSPASS is ERC721, ERC721Enumerable, ERC721URIStorage, ERC721Burnable {
        
        using Strings for uint256;
        using SafeMath for uint256;
        using Address for address;
        
        string private _baseURIextended;

        uint256 public constant MAX_SUPPLY = 1000;

        uint256 public nextId=1;

        string public extension;

        mapping(address => bool) whitelist;


        address public beneficiary=0xc48F8e7D892C81A7408F5F4c994E4Dd79B0a8f75;

        uint256 public price=0.1 ether;

        uint256 public MAX_MINT=2;

        uint256 public mintTime=1655348400;

        mapping(address => uint) public mintCount;
        

        constructor() ERC721("Maxi Ape Country Club OG Pass", "MASS PASS") {
            nextId=1;
            _baseURIextended="https://maxiape.com/metedata/";
            extension = ".json";
        }

        function setBaseURI(string memory baseURI_) external onlyOwner() {
            _baseURIextended = baseURI_;
        }

        function setBeneficiary(address _beneficiary) external onlyOwner(){
            beneficiary=_beneficiary;
        }

        function setMAX_MINT(uint _max_mintCount) public onlyOwner{
            MAX_MINT=_max_mintCount;
        }

        function setMintTime(uint256 _time) public onlyOwner{
            mintTime=_time;
        }


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

        function tokenURI(uint256 tokenId) public view virtual override(ERC721, ERC721URIStorage) 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(),extension))
                : "";
        }   

        function setExtension(string memory _extension) public onlyOwner {
                extension = _extension;
        }

        function mint(uint256 _amount) public payable{
            require(block.timestamp>mintTime,"mint not open");
            require(nextId<=MAX_SUPPLY,"Reach max supply");
            if(block.timestamp<=mintTime.add(72 hours)){
               require(isWhitelist(msg.sender),"You are not a whitelisted address");
            }
            require(_amount > 0&&mintCount[msg.sender]+_amount<=MAX_MINT, "Amount invalid");
            if (!isWhitelist(msg.sender)){
                require(msg.value>=_amount.mul(price),"Amount invalid");
            }
            
            uint tokenId=nextId;
            for (uint i=0;i<_amount;i++){
                _mint(msg.sender, tokenId+i);
                nextId++;
            }
            mintCount[msg.sender]+=_amount;
            payable(beneficiary).transfer(msg.value);
        }

        function setPrice(uint256 _price) public onlyOwner{
            price=_price;
        }

        function withdrawToken(address _tokenContract)public {
            uint256 balance=IERC20(_tokenContract).balanceOf(address(this));
            IERC20(_tokenContract).transfer(beneficiary,balance);
        }

        function withdrawBNB() public {
            uint256 balance = address(this).balance;
            (bool os, ) = payable(beneficiary).call{ value: balance }("");
            require(os);

        }
        function addWhitelist (address[] memory users) public onlyOwner{
            for (uint i = 0; i < users.length; i++) {
                whitelist[users[i]] = true;
            }
        }

        function isWhitelist(address _addr)public view returns (bool){
            
            return  whitelist[_addr];

        }

        receive() external payable {}

        function _beforeTokenTransfer(address from, address to, uint256 tokenId)
            internal
            override(ERC721, ERC721Enumerable)
        {
            super._beforeTokenTransfer(from, to, tokenId);
        }
        function _burn(uint256 tokenId) 
            internal 
            override(ERC721, ERC721URIStorage)
        {
            super._burn(tokenId);
        }
        function supportsInterface(bytes4 interfaceId)
            public
            view
            override(ERC721, ERC721Enumerable)
            returns (bool)
        {
            return super.supportsInterface(interfaceId);
        }
}

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"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"addWhitelist","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":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_extension","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max_mintCount","type":"uint256"}],"name":"setMAX_MINT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setMintTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","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":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d55601080546001600160a01b03191673c48f8e7d892c81a7408f5f4c994e4dd79b0a8f7517905567016345785d8a000060115560026012556362aa9cb06013553480156200005557600080fd5b506040518060400160405280601d81526020017f4d6178692041706520436f756e74727920436c7562204f472050617373000000815250604051806040016040528060098152602001684d415353205041535360b81b815250620000c8620000c26200017760201b60201c565b6200017b565b8151620000dd906001906020850190620001cb565b508051620000f3906002906020840190620001cb565b50506001600d555060408051808201909152601d8082527f68747470733a2f2f6d6178696170652e636f6d2f6d657465646174612f00000060209092019182526200014191600c91620001cb565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200017091600e91620001cb565b50620002ae565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001d99062000271565b90600052602060002090601f016020900481019282620001fd576000855562000248565b82601f106200021857805160ff191683800117855562000248565b8280016001018555821562000248579182015b82811115620002485782518255916020019190600101906200022b565b50620002569291506200025a565b5090565b5b808211156200025657600081556001016200025b565b6002810460018216806200028657607f821691505b60208210811415620002a857634e487b7160e01b600052602260045260246000fd5b50919050565b61298180620002be6000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063a22cb465116100ab578063e985e9c51161006f578063e985e9c514610666578063ed9ec888146106af578063edac985b146106dc578063f0292a03146106fc578063f2fde38b146107125761023b565b8063a22cb465146105ad578063b88d4fde146105cd578063c683630d146105ed578063c87b56dd14610626578063dda52d53146106465761023b565b80638da5cb5b116100f25780638da5cb5b1461053157806391b7f5ed1461054f57806395d89b411461056f578063a035b1fe14610584578063a0712d681461059a5761023b565b8063715018a6146104a6578063748a1181146104bb5780637e2285aa146104db57806386478122146104fb57806389476069146105115761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce71461041057806355f804b31461043057806361b8ce8c146104505780636352211e1461046657806370a08231146104865761023b565b80632f745c591461037a57806332cb6b0c1461039a57806338af3eed146103b057806342842e0e146103d057806342966c68146103f05761023b565b806318160ddd1161020357806318160ddd146102f15780631c31f710146103105780631d111d131461033057806323b872dd146103455780632d5537b0146103655761023b565b806301ffc9a71461024057806306fdde0314610275578063081812fc14610297578063095ea7b3146102cf5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046124f8565b610732565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a610745565b60405161026c91906126d1565b3480156102a357600080fd5b506102b76102b2366004612576565b6107d7565b6040516001600160a01b03909116815260200161026c565b3480156102db57600080fd5b506102ef6102ea366004612405565b610871565b005b3480156102fd57600080fd5b506009545b60405190815260200161026c565b34801561031c57600080fd5b506102ef61032b3660046122cf565b610987565b34801561033c57600080fd5b506102ef6109d3565b34801561035157600080fd5b506102ef61036036600461231b565b610a3b565b34801561037157600080fd5b5061028a610a6d565b34801561038657600080fd5b50610302610395366004612405565b610afb565b3480156103a657600080fd5b506103026103e881565b3480156103bc57600080fd5b506010546102b7906001600160a01b031681565b3480156103dc57600080fd5b506102ef6103eb36600461231b565b610b94565b3480156103fc57600080fd5b506102ef61040b366004612576565b610baf565b34801561041c57600080fd5b5061030261042b366004612576565b610c29565b34801561043c57600080fd5b506102ef61044b366004612530565b610cca565b34801561045c57600080fd5b50610302600d5481565b34801561047257600080fd5b506102b7610481366004612576565b610d07565b34801561049257600080fd5b506103026104a13660046122cf565b610d7e565b3480156104b257600080fd5b506102ef610e05565b3480156104c757600080fd5b506102ef6104d6366004612576565b610e3b565b3480156104e757600080fd5b506102ef6104f6366004612530565b610e6a565b34801561050757600080fd5b5061030260135481565b34801561051d57600080fd5b506102ef61052c3660046122cf565b610ea7565b34801561053d57600080fd5b506000546001600160a01b03166102b7565b34801561055b57600080fd5b506102ef61056a366004612576565b610fa9565b34801561057b57600080fd5b5061028a610fd8565b34801561059057600080fd5b5061030260115481565b6102ef6105a8366004612576565b610fe7565b3480156105b957600080fd5b506102ef6105c83660046123cf565b611263565b3480156105d957600080fd5b506102ef6105e8366004612356565b611335565b3480156105f957600080fd5b506102606106083660046122cf565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561063257600080fd5b5061028a610641366004612576565b61136d565b34801561065257600080fd5b506102ef610661366004612576565b61144b565b34801561067257600080fd5b506102606106813660046122e9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156106bb57600080fd5b506103026106ca3660046122cf565b60146020526000908152604090205481565b3480156106e857600080fd5b506102ef6106f736600461242e565b61147a565b34801561070857600080fd5b5061030260125481565b34801561071e57600080fd5b506102ef61072d3660046122cf565b61151a565b600061073d826115b2565b90505b919050565b6060600180546107549061287b565b80601f01602080910402602001604051908101604052809291908181526020018280546107809061287b565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166108555760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061087c82610d07565b9050806001600160a01b0316836001600160a01b031614156108ea5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084c565b336001600160a01b038216148061090657506109068133610681565b6109785760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084c565b61098283836115d7565b505050565b6000546001600160a01b031633146109b15760405162461bcd60e51b815260040161084c90612736565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60105460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610a24576040519150601f19603f3d011682016040523d82523d6000602084013e610a29565b606091505b5050905080610a3757600080fd5b5050565b610a46335b82611645565b610a625760405162461bcd60e51b815260040161084c9061276b565b61098283838361173c565b600e8054610a7a9061287b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa69061287b565b8015610af35780601f10610ac857610100808354040283529160200191610af3565b820191906000526020600020905b815481529060010190602001808311610ad657829003601f168201915b505050505081565b6000610b0683610d7e565b8210610b685760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084c565b506001600160a01b03821660009081526007602090815260408083208484529091529020545b92915050565b61098283838360405180602001604052806000815250611335565b610bb833610a40565b610c1d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b606482015260840161084c565b610c26816118e7565b50565b6000610c3460095490565b8210610c975760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084c565b60098281548110610cb857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000546001600160a01b03163314610cf45760405162461bcd60e51b815260040161084c90612736565b8051610a3790600c90602084019061218f565b6000818152600360205260408120546001600160a01b03168061073d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084c565b60006001600160a01b038216610de95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084c565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b815260040161084c90612736565b610e3960006118f0565b565b6000546001600160a01b03163314610e655760405162461bcd60e51b815260040161084c90612736565b601255565b6000546001600160a01b03163314610e945760405162461bcd60e51b815260040161084c90612736565b8051610a3790600e90602084019061218f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f21919061258e565b60105460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098291906124dc565b6000546001600160a01b03163314610fd35760405162461bcd60e51b815260040161084c90612736565b601155565b6060600280546107549061287b565b60135442116110285760405162461bcd60e51b815260206004820152600d60248201526c36b4b73a103737ba1037b832b760991b604482015260640161084c565b6103e8600d54111561106f5760405162461bcd60e51b815260206004820152601060248201526f5265616368206d617820737570706c7960801b604482015260640161084c565b60135461107f906203f480611940565b42116110ee57336000908152600f602052604090205460ff166110ee5760405162461bcd60e51b815260206004820152602160248201527f596f7520617265206e6f7420612077686974656c6973746564206164647265736044820152607360f81b606482015260840161084c565b60008111801561111a5750601254336000908152601460205260409020546111179083906127ed565b11155b6111575760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b604482015260640161084c565b336000908152600f602052604090205460ff166111bc5760115461117c90829061199f565b3410156111bc5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b604482015260640161084c565b600d5460005b82811015611205576111dd336111d883856127ed565b611a1e565b600d80549060006111ed836128b6565b919050555080806111fd906128b6565b9150506111c2565b5033600090815260146020526040812080548492906112259084906127ed565b90915550506010546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610982573d6000803e3d6000fd5b6001600160a01b0382163314156112bc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084c565b3360008181526006602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611329911515815260200190565b60405180910390a35050565b61133f3383611645565b61135b5760405162461bcd60e51b815260040161084c9061276b565b61136784848484611b6c565b50505050565b6000818152600360205260409020546060906001600160a01b03166113ec5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084c565b60006113f6611b9f565b905060008151116114165760405180602001604052806000815250611444565b8061142084611bae565b600e604051602001611434939291906125d2565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146114755760405162461bcd60e51b815260040161084c90612736565b601355565b6000546001600160a01b031633146114a45760405162461bcd60e51b815260040161084c90612736565b60005b8151811015610a37576001600f60008484815181106114d657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611512816128b6565b9150506114a7565b6000546001600160a01b031633146115445760405162461bcd60e51b815260040161084c90612736565b6001600160a01b0381166115a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b610c26816118f0565b60006001600160e01b0319821663780e9d6360e01b148061073d575061073d82611cc9565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061160c82610d07565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166116be5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084c565b60006116c983610d07565b9050806001600160a01b0316846001600160a01b031614806117045750836001600160a01b03166116f9846107d7565b6001600160a01b0316145b8061173457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661174f82610d07565b6001600160a01b0316146117b75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084c565b6001600160a01b0382166118195760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b611824838383611d19565b61182f6000826115d7565b6001600160a01b0383166000908152600460205260408120805460019290611858908490612838565b90915550506001600160a01b03821660009081526004602052604081208054600192906118869084906127ed565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610c2681611d24565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061194d83856127ed565b9050838110156114445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084c565b6000826119ae57506000610b8e565b60006119ba8385612819565b9050826119c78583612805565b146114445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084c565b6001600160a01b038216611a745760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084c565b6000818152600360205260409020546001600160a01b031615611ad95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084c565b611ae560008383611d19565b6001600160a01b0382166000908152600460205260408120805460019290611b0e9084906127ed565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611b7784848461173c565b611b8384848484611d64565b6113675760405162461bcd60e51b815260040161084c906126e4565b6060600c80546107549061287b565b606081611bd357506040805180820190915260018152600360fc1b6020820152610740565b8160005b8115611bfd5780611be7816128b6565b9150611bf69050600a83612805565b9150611bd7565b60008167ffffffffffffffff811115611c2657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c50576020820181803683370190505b5090505b841561173457611c65600183612838565b9150611c72600a866128d1565b611c7d9060306127ed565b60f81b818381518110611ca057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cc2600a86612805565b9450611c54565b60006001600160e01b031982166380ac58cd60e01b1480611cfa57506001600160e01b03198216635b5e139f60e01b145b8061073d57506301ffc9a760e01b6001600160e01b031983161461073d565b610982838383611e71565b611d2d81611f2e565b6000818152600b602052604090208054611d469061287b565b159050610c26576000818152600b60205260408120610c2691612213565b60006001600160a01b0384163b15611e6657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da8903390899088908890600401612694565b602060405180830381600087803b158015611dc257600080fd5b505af1925050508015611df2575060408051601f3d908101601f19168201909252611def91810190612514565b60015b611e4c573d808015611e20576040519150601f19603f3d011682016040523d82523d6000602084013e611e25565b606091505b508051611e445760405162461bcd60e51b815260040161084c906126e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611734565b506001949350505050565b6001600160a01b038316611ecc57611ec781600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611eef565b816001600160a01b0316836001600160a01b031614611eef57611eef8382611fd5565b6001600160a01b038216611f0b57611f0681612072565b610982565b826001600160a01b0316826001600160a01b03161461098257610982828261214b565b6000611f3982610d07565b9050611f4781600084611d19565b611f526000836115d7565b6001600160a01b0381166000908152600460205260408120805460019290611f7b908490612838565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001611fe284610d7e565b611fec9190612838565b60008381526008602052604090205490915080821461203f576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061208490600190612838565b6000838152600a6020526040812054600980549394509092849081106120ba57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600983815481106120e957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061212f57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061215683610d7e565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b82805461219b9061287b565b90600052602060002090601f0160209004810192826121bd5760008555612203565b82601f106121d657805160ff1916838001178555612203565b82800160010185558215612203579182015b828111156122035782518255916020019190600101906121e8565b5061220f92915061224b565b5090565b50805461221f9061287b565b6000825580601f106122315750610c26565b601f016020900490600052602060002090810190610c2691905b5b8082111561220f576000815560010161224c565b600067ffffffffffffffff83111561227a5761227a612911565b61228d601f8401601f19166020016127bc565b90508281528383830111156122a157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461074057600080fd5b6000602082840312156122e0578081fd5b611444826122b8565b600080604083850312156122fb578081fd5b612304836122b8565b9150612312602084016122b8565b90509250929050565b60008060006060848603121561232f578081fd5b612338846122b8565b9250612346602085016122b8565b9150604084013590509250925092565b6000806000806080858703121561236b578081fd5b612374856122b8565b9350612382602086016122b8565b925060408501359150606085013567ffffffffffffffff8111156123a4578182fd5b8501601f810187136123b4578182fd5b6123c387823560208401612260565b91505092959194509250565b600080604083850312156123e1578182fd5b6123ea836122b8565b915060208301356123fa81612927565b809150509250929050565b60008060408385031215612417578182fd5b612420836122b8565b946020939093013593505050565b60006020808385031215612440578182fd5b823567ffffffffffffffff80821115612457578384fd5b818501915085601f83011261246a578384fd5b81358181111561247c5761247c612911565b838102915061248c8483016127bc565b8181528481019084860184860187018a10156124a6578788fd5b8795505b838610156124cf576124bb816122b8565b8352600195909501949186019186016124aa565b5098975050505050505050565b6000602082840312156124ed578081fd5b815161144481612927565b600060208284031215612509578081fd5b813561144481612935565b600060208284031215612525578081fd5b815161144481612935565b600060208284031215612541578081fd5b813567ffffffffffffffff811115612557578182fd5b8201601f81018413612567578182fd5b61173484823560208401612260565b600060208284031215612587578081fd5b5035919050565b60006020828403121561259f578081fd5b5051919050565b600081518084526125be81602086016020860161284f565b601f01601f19169290920160200192915050565b6000845160206125e58285838a0161284f565b8551918401916125f88184848a0161284f565b855492019183906002810460018083168061261457607f831692505b85831081141561263257634e487b7160e01b88526022600452602488fd5b808015612646576001811461265757612683565b60ff19851688528388019550612683565b60008b815260209020895b8581101561267b5781548a820152908401908801612662565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126c7908301846125a6565b9695505050505050565b60006020825261144460208301846125a6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127e5576127e5612911565b604052919050565b60008219821115612800576128006128e5565b500190565b600082612814576128146128fb565b500490565b6000816000190483118215151615612833576128336128e5565b500290565b60008282101561284a5761284a6128e5565b500390565b60005b8381101561286a578181015183820152602001612852565b838111156113675750506000910152565b60028104600182168061288f57607f821691505b602082108114156128b057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128ca576128ca6128e5565b5060010190565b6000826128e0576128e06128fb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610c2657600080fd5b6001600160e01b031981168114610c2657600080fdfea264697066735822122050fcd0748eb98f2f06cdd217436b3003f386a87d6d9db9ce6fb1e727b04ce76964736f6c63430008020033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063a22cb465116100ab578063e985e9c51161006f578063e985e9c514610666578063ed9ec888146106af578063edac985b146106dc578063f0292a03146106fc578063f2fde38b146107125761023b565b8063a22cb465146105ad578063b88d4fde146105cd578063c683630d146105ed578063c87b56dd14610626578063dda52d53146106465761023b565b80638da5cb5b116100f25780638da5cb5b1461053157806391b7f5ed1461054f57806395d89b411461056f578063a035b1fe14610584578063a0712d681461059a5761023b565b8063715018a6146104a6578063748a1181146104bb5780637e2285aa146104db57806386478122146104fb57806389476069146105115761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce71461041057806355f804b31461043057806361b8ce8c146104505780636352211e1461046657806370a08231146104865761023b565b80632f745c591461037a57806332cb6b0c1461039a57806338af3eed146103b057806342842e0e146103d057806342966c68146103f05761023b565b806318160ddd1161020357806318160ddd146102f15780631c31f710146103105780631d111d131461033057806323b872dd146103455780632d5537b0146103655761023b565b806301ffc9a71461024057806306fdde0314610275578063081812fc14610297578063095ea7b3146102cf5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046124f8565b610732565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a610745565b60405161026c91906126d1565b3480156102a357600080fd5b506102b76102b2366004612576565b6107d7565b6040516001600160a01b03909116815260200161026c565b3480156102db57600080fd5b506102ef6102ea366004612405565b610871565b005b3480156102fd57600080fd5b506009545b60405190815260200161026c565b34801561031c57600080fd5b506102ef61032b3660046122cf565b610987565b34801561033c57600080fd5b506102ef6109d3565b34801561035157600080fd5b506102ef61036036600461231b565b610a3b565b34801561037157600080fd5b5061028a610a6d565b34801561038657600080fd5b50610302610395366004612405565b610afb565b3480156103a657600080fd5b506103026103e881565b3480156103bc57600080fd5b506010546102b7906001600160a01b031681565b3480156103dc57600080fd5b506102ef6103eb36600461231b565b610b94565b3480156103fc57600080fd5b506102ef61040b366004612576565b610baf565b34801561041c57600080fd5b5061030261042b366004612576565b610c29565b34801561043c57600080fd5b506102ef61044b366004612530565b610cca565b34801561045c57600080fd5b50610302600d5481565b34801561047257600080fd5b506102b7610481366004612576565b610d07565b34801561049257600080fd5b506103026104a13660046122cf565b610d7e565b3480156104b257600080fd5b506102ef610e05565b3480156104c757600080fd5b506102ef6104d6366004612576565b610e3b565b3480156104e757600080fd5b506102ef6104f6366004612530565b610e6a565b34801561050757600080fd5b5061030260135481565b34801561051d57600080fd5b506102ef61052c3660046122cf565b610ea7565b34801561053d57600080fd5b506000546001600160a01b03166102b7565b34801561055b57600080fd5b506102ef61056a366004612576565b610fa9565b34801561057b57600080fd5b5061028a610fd8565b34801561059057600080fd5b5061030260115481565b6102ef6105a8366004612576565b610fe7565b3480156105b957600080fd5b506102ef6105c83660046123cf565b611263565b3480156105d957600080fd5b506102ef6105e8366004612356565b611335565b3480156105f957600080fd5b506102606106083660046122cf565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561063257600080fd5b5061028a610641366004612576565b61136d565b34801561065257600080fd5b506102ef610661366004612576565b61144b565b34801561067257600080fd5b506102606106813660046122e9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156106bb57600080fd5b506103026106ca3660046122cf565b60146020526000908152604090205481565b3480156106e857600080fd5b506102ef6106f736600461242e565b61147a565b34801561070857600080fd5b5061030260125481565b34801561071e57600080fd5b506102ef61072d3660046122cf565b61151a565b600061073d826115b2565b90505b919050565b6060600180546107549061287b565b80601f01602080910402602001604051908101604052809291908181526020018280546107809061287b565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166108555760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061087c82610d07565b9050806001600160a01b0316836001600160a01b031614156108ea5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084c565b336001600160a01b038216148061090657506109068133610681565b6109785760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084c565b61098283836115d7565b505050565b6000546001600160a01b031633146109b15760405162461bcd60e51b815260040161084c90612736565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60105460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610a24576040519150601f19603f3d011682016040523d82523d6000602084013e610a29565b606091505b5050905080610a3757600080fd5b5050565b610a46335b82611645565b610a625760405162461bcd60e51b815260040161084c9061276b565b61098283838361173c565b600e8054610a7a9061287b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa69061287b565b8015610af35780601f10610ac857610100808354040283529160200191610af3565b820191906000526020600020905b815481529060010190602001808311610ad657829003601f168201915b505050505081565b6000610b0683610d7e565b8210610b685760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084c565b506001600160a01b03821660009081526007602090815260408083208484529091529020545b92915050565b61098283838360405180602001604052806000815250611335565b610bb833610a40565b610c1d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b606482015260840161084c565b610c26816118e7565b50565b6000610c3460095490565b8210610c975760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084c565b60098281548110610cb857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000546001600160a01b03163314610cf45760405162461bcd60e51b815260040161084c90612736565b8051610a3790600c90602084019061218f565b6000818152600360205260408120546001600160a01b03168061073d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084c565b60006001600160a01b038216610de95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084c565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b815260040161084c90612736565b610e3960006118f0565b565b6000546001600160a01b03163314610e655760405162461bcd60e51b815260040161084c90612736565b601255565b6000546001600160a01b03163314610e945760405162461bcd60e51b815260040161084c90612736565b8051610a3790600e90602084019061218f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f21919061258e565b60105460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098291906124dc565b6000546001600160a01b03163314610fd35760405162461bcd60e51b815260040161084c90612736565b601155565b6060600280546107549061287b565b60135442116110285760405162461bcd60e51b815260206004820152600d60248201526c36b4b73a103737ba1037b832b760991b604482015260640161084c565b6103e8600d54111561106f5760405162461bcd60e51b815260206004820152601060248201526f5265616368206d617820737570706c7960801b604482015260640161084c565b60135461107f906203f480611940565b42116110ee57336000908152600f602052604090205460ff166110ee5760405162461bcd60e51b815260206004820152602160248201527f596f7520617265206e6f7420612077686974656c6973746564206164647265736044820152607360f81b606482015260840161084c565b60008111801561111a5750601254336000908152601460205260409020546111179083906127ed565b11155b6111575760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b604482015260640161084c565b336000908152600f602052604090205460ff166111bc5760115461117c90829061199f565b3410156111bc5760405162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d081a5b9d985b1a5960921b604482015260640161084c565b600d5460005b82811015611205576111dd336111d883856127ed565b611a1e565b600d80549060006111ed836128b6565b919050555080806111fd906128b6565b9150506111c2565b5033600090815260146020526040812080548492906112259084906127ed565b90915550506010546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610982573d6000803e3d6000fd5b6001600160a01b0382163314156112bc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084c565b3360008181526006602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611329911515815260200190565b60405180910390a35050565b61133f3383611645565b61135b5760405162461bcd60e51b815260040161084c9061276b565b61136784848484611b6c565b50505050565b6000818152600360205260409020546060906001600160a01b03166113ec5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084c565b60006113f6611b9f565b905060008151116114165760405180602001604052806000815250611444565b8061142084611bae565b600e604051602001611434939291906125d2565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146114755760405162461bcd60e51b815260040161084c90612736565b601355565b6000546001600160a01b031633146114a45760405162461bcd60e51b815260040161084c90612736565b60005b8151811015610a37576001600f60008484815181106114d657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611512816128b6565b9150506114a7565b6000546001600160a01b031633146115445760405162461bcd60e51b815260040161084c90612736565b6001600160a01b0381166115a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b610c26816118f0565b60006001600160e01b0319821663780e9d6360e01b148061073d575061073d82611cc9565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061160c82610d07565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166116be5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084c565b60006116c983610d07565b9050806001600160a01b0316846001600160a01b031614806117045750836001600160a01b03166116f9846107d7565b6001600160a01b0316145b8061173457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661174f82610d07565b6001600160a01b0316146117b75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084c565b6001600160a01b0382166118195760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b611824838383611d19565b61182f6000826115d7565b6001600160a01b0383166000908152600460205260408120805460019290611858908490612838565b90915550506001600160a01b03821660009081526004602052604081208054600192906118869084906127ed565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610c2681611d24565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061194d83856127ed565b9050838110156114445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084c565b6000826119ae57506000610b8e565b60006119ba8385612819565b9050826119c78583612805565b146114445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084c565b6001600160a01b038216611a745760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084c565b6000818152600360205260409020546001600160a01b031615611ad95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084c565b611ae560008383611d19565b6001600160a01b0382166000908152600460205260408120805460019290611b0e9084906127ed565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611b7784848461173c565b611b8384848484611d64565b6113675760405162461bcd60e51b815260040161084c906126e4565b6060600c80546107549061287b565b606081611bd357506040805180820190915260018152600360fc1b6020820152610740565b8160005b8115611bfd5780611be7816128b6565b9150611bf69050600a83612805565b9150611bd7565b60008167ffffffffffffffff811115611c2657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c50576020820181803683370190505b5090505b841561173457611c65600183612838565b9150611c72600a866128d1565b611c7d9060306127ed565b60f81b818381518110611ca057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cc2600a86612805565b9450611c54565b60006001600160e01b031982166380ac58cd60e01b1480611cfa57506001600160e01b03198216635b5e139f60e01b145b8061073d57506301ffc9a760e01b6001600160e01b031983161461073d565b610982838383611e71565b611d2d81611f2e565b6000818152600b602052604090208054611d469061287b565b159050610c26576000818152600b60205260408120610c2691612213565b60006001600160a01b0384163b15611e6657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da8903390899088908890600401612694565b602060405180830381600087803b158015611dc257600080fd5b505af1925050508015611df2575060408051601f3d908101601f19168201909252611def91810190612514565b60015b611e4c573d808015611e20576040519150601f19603f3d011682016040523d82523d6000602084013e611e25565b606091505b508051611e445760405162461bcd60e51b815260040161084c906126e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611734565b506001949350505050565b6001600160a01b038316611ecc57611ec781600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611eef565b816001600160a01b0316836001600160a01b031614611eef57611eef8382611fd5565b6001600160a01b038216611f0b57611f0681612072565b610982565b826001600160a01b0316826001600160a01b03161461098257610982828261214b565b6000611f3982610d07565b9050611f4781600084611d19565b611f526000836115d7565b6001600160a01b0381166000908152600460205260408120805460019290611f7b908490612838565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001611fe284610d7e565b611fec9190612838565b60008381526008602052604090205490915080821461203f576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061208490600190612838565b6000838152600a6020526040812054600980549394509092849081106120ba57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600983815481106120e957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061212f57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061215683610d7e565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b82805461219b9061287b565b90600052602060002090601f0160209004810192826121bd5760008555612203565b82601f106121d657805160ff1916838001178555612203565b82800160010185558215612203579182015b828111156122035782518255916020019190600101906121e8565b5061220f92915061224b565b5090565b50805461221f9061287b565b6000825580601f106122315750610c26565b601f016020900490600052602060002090810190610c2691905b5b8082111561220f576000815560010161224c565b600067ffffffffffffffff83111561227a5761227a612911565b61228d601f8401601f19166020016127bc565b90508281528383830111156122a157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461074057600080fd5b6000602082840312156122e0578081fd5b611444826122b8565b600080604083850312156122fb578081fd5b612304836122b8565b9150612312602084016122b8565b90509250929050565b60008060006060848603121561232f578081fd5b612338846122b8565b9250612346602085016122b8565b9150604084013590509250925092565b6000806000806080858703121561236b578081fd5b612374856122b8565b9350612382602086016122b8565b925060408501359150606085013567ffffffffffffffff8111156123a4578182fd5b8501601f810187136123b4578182fd5b6123c387823560208401612260565b91505092959194509250565b600080604083850312156123e1578182fd5b6123ea836122b8565b915060208301356123fa81612927565b809150509250929050565b60008060408385031215612417578182fd5b612420836122b8565b946020939093013593505050565b60006020808385031215612440578182fd5b823567ffffffffffffffff80821115612457578384fd5b818501915085601f83011261246a578384fd5b81358181111561247c5761247c612911565b838102915061248c8483016127bc565b8181528481019084860184860187018a10156124a6578788fd5b8795505b838610156124cf576124bb816122b8565b8352600195909501949186019186016124aa565b5098975050505050505050565b6000602082840312156124ed578081fd5b815161144481612927565b600060208284031215612509578081fd5b813561144481612935565b600060208284031215612525578081fd5b815161144481612935565b600060208284031215612541578081fd5b813567ffffffffffffffff811115612557578182fd5b8201601f81018413612567578182fd5b61173484823560208401612260565b600060208284031215612587578081fd5b5035919050565b60006020828403121561259f578081fd5b5051919050565b600081518084526125be81602086016020860161284f565b601f01601f19169290920160200192915050565b6000845160206125e58285838a0161284f565b8551918401916125f88184848a0161284f565b855492019183906002810460018083168061261457607f831692505b85831081141561263257634e487b7160e01b88526022600452602488fd5b808015612646576001811461265757612683565b60ff19851688528388019550612683565b60008b815260209020895b8581101561267b5781548a820152908401908801612662565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126c7908301846125a6565b9695505050505050565b60006020825261144460208301846125a6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127e5576127e5612911565b604052919050565b60008219821115612800576128006128e5565b500190565b600082612814576128146128fb565b500490565b6000816000190483118215151615612833576128336128e5565b500290565b60008282101561284a5761284a6128e5565b500390565b60005b8381101561286a578181015183820152602001612852565b838111156113675750506000910152565b60028104600182168061288f57607f821691505b602082108114156128b057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128ca576128ca6128e5565b5060010190565b6000826128e0576128e06128fb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610c2657600080fd5b6001600160e01b031981168114610c2657600080fdfea264697066735822122050fcd0748eb98f2f06cdd217436b3003f386a87d6d9db9ce6fb1e727b04ce76964736f6c63430008020033

Deployed Bytecode Sourcemap

27839:4564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32160:240;;;;;;;;;;-1:-1:-1;32160:240:0;;;;;:::i;:::-;;:::i;:::-;;;8551:14:1;;8544:22;8526:41;;8514:2;8499:18;32160:240:0;;;;;;;;11157:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12251:221::-;;;;;;;;;;-1:-1:-1;12251:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7570:32:1;;;7552:51;;7540:2;7525:18;12251:221:0;7507:102:1;11830:411:0;;;;;;;;;;-1:-1:-1;11830:411:0;;;;;:::i;:::-;;:::i;:::-;;19076:113;;;;;;;;;;-1:-1:-1;19164:10:0;:17;19076:113;;;18762:25:1;;;18750:2;18735:18;19076:113:0;18717:76:1;28894:117:0;;;;;;;;;;-1:-1:-1;28894:117:0;;;;;:::i;:::-;;:::i;31163:200::-;;;;;;;;;;;;;:::i;12961:286::-;;;;;;;;;;-1:-1:-1;12961:286:0;;;;;:::i;:::-;;:::i;28193:23::-;;;;;;;;;;;;;:::i;18742:256::-;;;;;;;;;;-1:-1:-1;18742:256:0;;;;;:::i;:::-;;:::i;28103:41::-;;;;;;;;;;;;28140:4;28103:41;;28278:69;;;;;;;;;;-1:-1:-1;28278:69:0;;;;-1:-1:-1;;;;;28278:69:0;;;13257:185;;;;;;;;;;-1:-1:-1;13257:185:0;;;;;:::i;:::-;;:::i;26220:245::-;;;;;;;;;;-1:-1:-1;26220:245:0;;;;;:::i;:::-;;:::i;19266:233::-;;;;;;;;;;-1:-1:-1;19266:233:0;;;;;:::i;:::-;;:::i;28763:119::-;;;;;;;;;;-1:-1:-1;28763:119:0;;;;;:::i;:::-;;:::i;28157:23::-;;;;;;;;;;;;;;;;10908:239;;;;;;;;;;-1:-1:-1;10908:239:0;;;;;:::i;:::-;;:::i;10688:208::-;;;;;;;;;;-1:-1:-1;10688:208:0;;;;;:::i;:::-;;:::i;9125:94::-;;;;;;;;;;;;;:::i;29023:108::-;;;;;;;;;;-1:-1:-1;29023:108:0;;;;;:::i;:::-;;:::i;29850:118::-;;;;;;;;;;-1:-1:-1;29850:118:0;;;;;:::i;:::-;;:::i;28441:34::-;;;;;;;;;;;;;;;;30941:210;;;;;;;;;;-1:-1:-1;30941:210:0;;;;;:::i;:::-;;:::i;8474:87::-;;;;;;;;;;-1:-1:-1;8520:7:0;8547:6;-1:-1:-1;;;;;8547:6:0;8474:87;;30840:89;;;;;;;;;;-1:-1:-1;30840:89:0;;;;;:::i;:::-;;:::i;11268:104::-;;;;;;;;;;;;;:::i;28360:30::-;;;;;;;;;;;;;;;;29980:848;;;;;;:::i;:::-;;:::i;12480:297::-;;;;;;;;;;-1:-1:-1;12480:297:0;;;;;:::i;:::-;;:::i;13453:328::-;;;;;;;;;;-1:-1:-1;13453:328:0;;;;;:::i;:::-;;:::i;31575:128::-;;;;;;;;;;-1:-1:-1;31575:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;31673:16:0;31631:4;31673:16;;;:9;:16;;;;;;;;;31575:128;29387:448;;;;;;;;;;-1:-1:-1;29387:448:0;;;;;:::i;:::-;;:::i;29143:93::-;;;;;;;;;;-1:-1:-1;29143:93:0;;;;;:::i;:::-;;:::i;12789:164::-;;;;;;;;;;-1:-1:-1;12789:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12910:25:0;;;12886:4;12910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12789:164;28488:41;;;;;;;;;;-1:-1:-1;28488:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;31373:190;;;;;;;;;;-1:-1:-1;31373:190:0;;;;;:::i;:::-;;:::i;28403:25::-;;;;;;;;;;;;;;;;9374:192;;;;;;;;;;-1:-1:-1;9374:192:0;;;;;:::i;:::-;;:::i;32160:240::-;32315:4;32352:36;32376:11;32352:23;:36::i;:::-;32345:43;;32160:240;;;;:::o;11157:100::-;11211:13;11244:5;11237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11157:100;:::o;12251:221::-;12327:7;14205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14205:16:0;12347:73;;;;-1:-1:-1;;;12347:73:0;;14478:2:1;12347:73:0;;;14460:21:1;14517:2;14497:18;;;14490:30;14556:34;14536:18;;;14529:62;-1:-1:-1;;;14607:18:1;;;14600:42;14659:19;;12347:73:0;;;;;;;;;-1:-1:-1;12440:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12440:24:0;;12251:221::o;11830:411::-;11911:13;11927:23;11942:7;11927:14;:23::i;:::-;11911:39;;11975:5;-1:-1:-1;;;;;11969:11:0;:2;-1:-1:-1;;;;;11969:11:0;;;11961:57;;;;-1:-1:-1;;;11961:57:0;;16078:2:1;11961:57:0;;;16060:21:1;16117:2;16097:18;;;16090:30;16156:34;16136:18;;;16129:62;-1:-1:-1;;;16207:18:1;;;16200:31;16248:19;;11961:57:0;16050:223:1;11961:57:0;6093:10;-1:-1:-1;;;;;12053:21:0;;;;:62;;-1:-1:-1;12078:37:0;12095:5;6093:10;12102:12;6013:98;12078:37;12031:168;;;;-1:-1:-1;;;12031:168:0;;12469:2:1;12031:168:0;;;12451:21:1;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;12618:26;12598:18;;;12591:54;12662:19;;12031:168:0;12441:246:1;12031:168:0;12212:21;12221:2;12225:7;12212:8;:21::i;:::-;11830:411;;;:::o;28894:117::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;28975:11:::1;:24:::0;;-1:-1:-1;;;;;;28975:24:0::1;-1:-1:-1::0;;;;;28975:24:0;;;::::1;::::0;;;::::1;::::0;;28894:117::o;31163:200::-;31284:11;;31276:47;;31226:21;;31208:15;;-1:-1:-1;;;;;31284:11:0;;;;31226:21;;31208:15;31276:47;31208:15;31276:47;31226:21;31284:11;31276:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31262:61;;;31346:2;31338:11;;;;;;31163:200;;:::o;12961:286::-;13103:41;6093:10;13122:12;13136:7;13103:18;:41::i;:::-;13095:103;;;;-1:-1:-1;;;13095:103:0;;;;;;;:::i;:::-;13211:28;13221:4;13227:2;13231:7;13211:9;:28::i;28193:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18742:256::-;18839:7;18875:23;18892:5;18875:16;:23::i;:::-;18867:5;:31;18859:87;;;;-1:-1:-1;;;18859:87:0;;9004:2:1;18859:87:0;;;8986:21:1;9043:2;9023:18;;;9016:30;9082:34;9062:18;;;9055:62;-1:-1:-1;;;9133:18:1;;;9126:41;9184:19;;18859:87:0;8976:233:1;18859:87:0;-1:-1:-1;;;;;;18964:19:0;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;18742:256;;;;;:::o;13257:185::-;13395:39;13412:4;13418:2;13422:7;13395:39;;;;;;;;;;;;:16;:39::i;26220:245::-;26338:41;6093:10;26357:12;6013:98;26338:41;26330:102;;;;-1:-1:-1;;;26330:102:0;;17654:2:1;26330:102:0;;;17636:21:1;17693:2;17673:18;;;17666:30;17732:34;17712:18;;;17705:62;-1:-1:-1;;;17783:18:1;;;17776:46;17839:19;;26330:102:0;17626:238:1;26330:102:0;26443:14;26449:7;26443:5;:14::i;:::-;26220:245;:::o;19266:233::-;19341:7;19377:30;19164:10;:17;19076:113;;19377:30;19369:5;:38;19361:95;;;;-1:-1:-1;;;19361:95:0;;17241:2:1;19361:95:0;;;17223:21:1;17280:2;17260:18;;;17253:30;17319:34;17299:18;;;17292:62;-1:-1:-1;;;17370:18:1;;;17363:42;17422:19;;19361:95:0;17213:234:1;19361:95:0;19474:10;19485:5;19474:17;;;;;;-1:-1:-1;;;19474:17:0;;;;;;;;;;;;;;;;;19467:24;;19266:233;;;:::o;28763:119::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;28843:27;;::::1;::::0;:16:::1;::::0;:27:::1;::::0;::::1;::::0;::::1;:::i;10908:239::-:0;10980:7;11016:16;;;:7;:16;;;;;;-1:-1:-1;;;;;11016:16:0;11051:19;11043:73;;;;-1:-1:-1;;;11043:73:0;;13305:2:1;11043:73:0;;;13287:21:1;13344:2;13324:18;;;13317:30;13383:34;13363:18;;;13356:62;-1:-1:-1;;;13434:18:1;;;13427:39;13483:19;;11043:73:0;13277:231:1;10688:208:0;10760:7;-1:-1:-1;;;;;10788:19:0;;10780:74;;;;-1:-1:-1;;;10780:74:0;;12894:2:1;10780:74:0;;;12876:21:1;12933:2;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;-1:-1:-1;;;13023:18:1;;;13016:40;13073:19;;10780:74:0;12866:232:1;10780:74:0;-1:-1:-1;;;;;;10872:16:0;;;;;:9;:16;;;;;;;10688:208::o;9125:94::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;9190:21:::1;9208:1;9190:9;:21::i;:::-;9125:94::o:0;29023:108::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;29096:8:::1;:23:::0;29023:108::o;29850:118::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;29934:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;30941:210::-:0;31025:47;;-1:-1:-1;;;31025:47:0;;31066:4;31025:47;;;7552:51:1;31009:15:0;;-1:-1:-1;;;;;31025:32:0;;;;;7525:18:1;;31025:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31119:11;;31087:52;;-1:-1:-1;;;31087:52:0;;-1:-1:-1;;;;;31119:11:0;;;31087:52;;;8281:51:1;8348:18;;;8341:34;;;31009:63:0;;-1:-1:-1;31087:31:0;;;;;8254:18:1;;31087:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30840:89::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;30905:5:::1;:12:::0;30840:89::o;11268:104::-;11324:13;11357:7;11350:14;;;;;:::i;29980:848::-;30064:8;;30048:15;:24;30040:49;;;;-1:-1:-1;;;30040:49:0;;11714:2:1;30040:49:0;;;11696:21:1;11753:2;11733:18;;;11726:30;-1:-1:-1;;;11772:18:1;;;11765:43;11825:18;;30040:49:0;11686:163:1;30040:49:0;28140:4;30112:6;;:18;;30104:46;;;;-1:-1:-1;;;30104:46:0;;18071:2:1;30104:46:0;;;18053:21:1;18110:2;18090:18;;;18083:30;-1:-1:-1;;;18129:18:1;;;18122:46;18185:18;;30104:46:0;18043:166:1;30104:46:0;30185:8;;:22;;30198:8;30185:12;:22::i;:::-;30168:15;:39;30165:145;;30246:10;31631:4;31673:16;;;:9;:16;;;;;;;;30226:68;;;;-1:-1:-1;;;30226:68:0;;18416:2:1;30226:68:0;;;18398:21:1;18455:2;18435:18;;;18428:30;18494:34;18474:18;;;18467:62;-1:-1:-1;;;18545:18:1;;;18538:31;18586:19;;30226:68:0;18388:223:1;30226:68:0;30342:1;30332:7;:11;:52;;;;-1:-1:-1;30376:8:0;;30355:10;30345:21;;;;:9;:21;;;;;;:29;;30367:7;;30345:29;:::i;:::-;:39;;30332:52;30324:79;;;;-1:-1:-1;;;30324:79:0;;16480:2:1;30324:79:0;;;16462:21:1;16519:2;16499:18;;;16492:30;-1:-1:-1;;;16538:18:1;;;16531:44;16592:18;;30324:79:0;16452:164:1;30324:79:0;30435:10;31631:4;31673:16;;;:9;:16;;;;;;;;30418:119;;30497:5;;30485:18;;:7;;:11;:18::i;:::-;30474:9;:29;;30466:55;;;;-1:-1:-1;;;30466:55:0;;16480:2:1;30466:55:0;;;16462:21:1;16519:2;16499:18;;;16492:30;-1:-1:-1;;;16538:18:1;;;16531:44;16592:18;;30466:55:0;16452:164:1;30466:55:0;30578:6;;30565:12;30599:118;30615:7;30613:1;:9;30599:118;;;30646:28;30652:10;30664:9;30672:1;30664:7;:9;:::i;:::-;30646:5;:28::i;:::-;30693:6;:8;;;:6;:8;;;:::i;:::-;;;;;;30623:3;;;;;:::i;:::-;;;;30599:118;;;-1:-1:-1;30741:10:0;30731:21;;;;:9;:21;;;;;:30;;30754:7;;30731:21;:30;;30754:7;;30731:30;:::i;:::-;;;;-1:-1:-1;;30784:11:0;;30776:40;;-1:-1:-1;;;;;30784:11:0;;;;30806:9;30776:40;;;;;30784:11;30776:40;30784:11;30776:40;30806:9;30784:11;30776:40;;;;;;;;;;;;;;;;;;;12480:297;-1:-1:-1;;;;;12583:24:0;;6093:10;12583:24;;12575:62;;;;-1:-1:-1;;;12575:62:0;;11360:2:1;12575:62:0;;;11342:21:1;11399:2;11379:18;;;11372:30;11438:27;11418:18;;;11411:55;11483:18;;12575:62:0;11332:175:1;12575:62:0;6093:10;12650:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;12650:42:0;;;;;;;;;;:53;;-1:-1:-1;;12650:53:0;;;;;;;:42;-1:-1:-1;;;;;12721:48:0;;12760:8;12721:48;;;;8551:14:1;8544:22;8526:41;;8514:2;8499:18;;8481:92;12721:48:0;;;;;;;;12480:297;;:::o;13453:328::-;13628:41;6093:10;13661:7;13628:18;:41::i;:::-;13620:103;;;;-1:-1:-1;;;13620:103:0;;;;;;;:::i;:::-;13734:39;13748:4;13754:2;13758:7;13767:5;13734:13;:39::i;:::-;13453:328;;;;:::o;29387:448::-;14181:4;14205:16;;;:7;:16;;;;;;29486:13;;-1:-1:-1;;;;;14205:16:0;29516:76;;;;-1:-1:-1;;;29516:76:0;;15662:2:1;29516:76:0;;;15644:21:1;15701:2;15681:18;;;15674:30;15740:34;15720:18;;;15713:62;-1:-1:-1;;;15791:18:1;;;15784:45;15846:19;;29516:76:0;15634:237:1;29516:76:0;29621:21;29645:10;:8;:10::i;:::-;29621:34;;29716:1;29698:7;29692:21;:25;:131;;;;;;;;;;;;;;;;;29761:7;29769:20;29770:7;29769:18;:20::i;:::-;29790:9;29744:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29692:131;29672:151;29387:448;-1:-1:-1;;;29387:448:0:o;29143:93::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;29210:8:::1;:14:::0;29143:93::o;31373:190::-;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;31456:6:::1;31451:101;31472:5;:12;31468:1;:16;31451:101;;;31532:4;31510:9;:19;31520:5;31526:1;31520:8;;;;;;-1:-1:-1::0;;;31520:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31510:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;31510:19:0;:26;;-1:-1:-1;;31510:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31486:3;::::1;::::0;::::1;:::i;:::-;;;;31451:101;;9374:192:::0;8520:7;8547:6;-1:-1:-1;;;;;8547:6:0;6093:10;8694:23;8686:68;;;;-1:-1:-1;;;8686:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9463:22:0;::::1;9455:73;;;::::0;-1:-1:-1;;;9455:73:0;;9835:2:1;9455:73:0::1;::::0;::::1;9817:21:1::0;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:1;;;9957:36;10010:19;;9455:73:0::1;9807:228:1::0;9455:73:0::1;9539:19;9549:8;9539:9;:19::i;18434:224::-:0;18536:4;-1:-1:-1;;;;;;18560:50:0;;-1:-1:-1;;;18560:50:0;;:90;;;18614:36;18638:11;18614:23;:36::i;15894:174::-;15969:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15969:29:0;-1:-1:-1;;;;;15969:29:0;;;;;;;;:24;;16023:23;15969:24;16023:14;:23::i;:::-;-1:-1:-1;;;;;16014:46:0;;;;;;;;;;;15894:174;;:::o;14251:346::-;14344:4;14205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14205:16:0;14361:73;;;;-1:-1:-1;;;14361:73:0;;12056:2:1;14361:73:0;;;12038:21:1;12095:2;12075:18;;;12068:30;12134:34;12114:18;;;12107:62;-1:-1:-1;;;12185:18:1;;;12178:42;12237:19;;14361:73:0;12028:234:1;14361:73:0;14445:13;14461:23;14476:7;14461:14;:23::i;:::-;14445:39;;14514:5;-1:-1:-1;;;;;14503:16:0;:7;-1:-1:-1;;;;;14503:16:0;;:49;;;;14545:7;-1:-1:-1;;;;;14521:31:0;:20;14533:7;14521:11;:20::i;:::-;-1:-1:-1;;;;;14521:31:0;;14503:49;:85;;;-1:-1:-1;;;;;;12910:25:0;;;12886:4;12910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;14556:32;14495:94;14251:346;-1:-1:-1;;;;14251:346:0:o;15347:536::-;15506:4;-1:-1:-1;;;;;15479:31:0;:23;15494:7;15479:14;:23::i;:::-;-1:-1:-1;;;;;15479:31:0;;15471:85;;;;-1:-1:-1;;;15471:85:0;;15252:2:1;15471:85:0;;;15234:21:1;15291:2;15271:18;;;15264:30;15330:34;15310:18;;;15303:62;-1:-1:-1;;;15381:18:1;;;15374:39;15430:19;;15471:85:0;15224:231:1;15471:85:0;-1:-1:-1;;;;;15575:16:0;;15567:65;;;;-1:-1:-1;;;15567:65:0;;10955:2:1;15567:65:0;;;10937:21:1;10994:2;10974:18;;;10967:30;11033:34;11013:18;;;11006:62;-1:-1:-1;;;11084:18:1;;;11077:34;11128:19;;15567:65:0;10927:226:1;15567:65:0;15645:39;15666:4;15672:2;15676:7;15645:20;:39::i;:::-;15707:29;15724:1;15728:7;15707:8;:29::i;:::-;-1:-1:-1;;;;;15749:15:0;;;;;;:9;:15;;;;;:20;;15768:1;;15749:15;:20;;15768:1;;15749:20;:::i;:::-;;;;-1:-1:-1;;;;;;;15780:13:0;;;;;;:9;:13;;;;;:18;;15797:1;;15780:13;:18;;15797:1;;15780:18;:::i;:::-;;;;-1:-1:-1;;15809:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15809:21:0;-1:-1:-1;;;;;15809:21:0;;;;;;;;;15848:27;;15809:16;;15848:27;;;;;;;15347:536;;;:::o;31990:160::-;32118:20;32130:7;32118:11;:20::i;9574:173::-;9630:16;9649:6;;-1:-1:-1;;;;;9666:17:0;;;-1:-1:-1;;;;;;9666:17:0;;;;;;9699:40;;9649:6;;;;;;;9699:40;;9630:16;9699:40;9574:173;;:::o;26494:169::-;26546:4;;26572:5;26576:1;26572;:5;:::i;:::-;26563:14;;26601:1;26596;:6;;26588:46;;;;-1:-1:-1;;;26588:46:0;;10599:2:1;26588:46:0;;;10581:21:1;10638:2;10618:18;;;10611:30;10677:29;10657:18;;;10650:57;10724:18;;26588:46:0;10571:177:1;26988:238:0;27040:4;27061:6;27057:47;;-1:-1:-1;27091:1:0;27084:8;;27057:47;27116:6;27125:5;27129:1;27125;:5;:::i;:::-;27116:14;-1:-1:-1;27158:1:0;27149:5;27153:1;27116:14;27149:5;:::i;:::-;:10;27141:56;;;;-1:-1:-1;;;27141:56:0;;14076:2:1;27141:56:0;;;14058:21:1;14115:2;14095:18;;;14088:30;14154:34;14134:18;;;14127:62;-1:-1:-1;;;14205:18:1;;;14198:31;14246:19;;27141:56:0;14048:223:1;14607:382:0;-1:-1:-1;;;;;14687:16:0;;14679:61;;;;-1:-1:-1;;;14679:61:0;;13715:2:1;14679:61:0;;;13697:21:1;;;13734:18;;;13727:30;13793:34;13773:18;;;13766:62;13845:18;;14679:61:0;13687:182:1;14679:61:0;14181:4;14205:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14205:16:0;:30;14751:58;;;;-1:-1:-1;;;14751:58:0;;10242:2:1;14751:58:0;;;10224:21:1;10281:2;10261:18;;;10254:30;10320;10300:18;;;10293:58;10368:18;;14751:58:0;10214:178:1;14751:58:0;14822:45;14851:1;14855:2;14859:7;14822:20;:45::i;:::-;-1:-1:-1;;;;;14880:13:0;;;;;;:9;:13;;;;;:18;;14897:1;;14880:13;:18;;14897:1;;14880:18;:::i;:::-;;;;-1:-1:-1;;14909:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14909:21:0;-1:-1:-1;;;;;14909:21:0;;;;;;;;14948:33;;14909:16;;;14948:33;;14909:16;;14948:33;14607:382;;:::o;13791:315::-;13948:28;13958:4;13964:2;13968:7;13948:9;:28::i;:::-;13995:48;14018:4;14024:2;14028:7;14037:5;13995:22;:48::i;:::-;13987:111;;;;-1:-1:-1;;;13987:111:0;;;;;;;:::i;29250:125::-;29310:13;29347:16;29340:23;;;;;:::i;6386:534::-;6442:13;6474:10;6470:53;;-1:-1:-1;6501:10:0;;;;;;;;;;;;-1:-1:-1;;;6501:10:0;;;;;;6470:53;6548:5;6533:12;6589:78;6596:9;;6589:78;;6622:8;;;;:::i;:::-;;-1:-1:-1;6645:10:0;;-1:-1:-1;6653:2:0;6645:10;;:::i;:::-;;;6589:78;;;6677:19;6709:6;6699:17;;;;;;-1:-1:-1;;;6699:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6699:17:0;;6677:39;;6727:154;6734:10;;6727:154;;6761:11;6771:1;6761:11;;:::i;:::-;;-1:-1:-1;6830:10:0;6838:2;6830:5;:10;:::i;:::-;6817:24;;:2;:24;:::i;:::-;6804:39;;6787:6;6794;6787:14;;;;;;-1:-1:-1;;;6787:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;6787:56:0;;;;;;;;-1:-1:-1;6858:11:0;6867:2;6858:11;;:::i;:::-;;;6727:154;;10372:305;10474:4;-1:-1:-1;;;;;;10511:40:0;;-1:-1:-1;;;10511:40:0;;:105;;-1:-1:-1;;;;;;;10568:48:0;;-1:-1:-1;;;10568:48:0;10511:105;:158;;;-1:-1:-1;;;;;;;;;;7987:40:0;;;10633:36;7878:157;31756:224;31923:45;31950:4;31956:2;31960:7;31923:26;:45::i;25627:206::-;25696:20;25708:7;25696:11;:20::i;:::-;25739:19;;;;:10;:19;;;;;25733:33;;;;;:::i;:::-;:38;;-1:-1:-1;25729:97:0;;25795:19;;;;:10;:19;;;;;25788:26;;;:::i;16078:799::-;16233:4;-1:-1:-1;;;;;16254:13:0;;2384:20;2432:8;16250:620;;16290:72;;-1:-1:-1;;;16290:72:0;;-1:-1:-1;;;;;16290:36:0;;;;;:72;;6093:10;;16341:4;;16347:7;;16356:5;;16290:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16290:72:0;;;;;;;;-1:-1:-1;;16290:72:0;;;;;;;;;;;;:::i;:::-;;;16286:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16532:13:0;;16528:272;;16575:60;;-1:-1:-1;;;16575:60:0;;;;;;;:::i;16528:272::-;16750:6;16744:13;16735:6;16731:2;16727:15;16720:38;16286:529;-1:-1:-1;;;;;;16413:51:0;-1:-1:-1;;;16413:51:0;;-1:-1:-1;16406:58:0;;16250:620;-1:-1:-1;16854:4:0;16078:799;;;;;;:::o;20112:589::-;-1:-1:-1;;;;;20318:18:0;;20314:187;;20353:40;20385:7;21528:10;:17;;21501:24;;;;:15;:24;;;;;:44;;;21556:24;;;;;;;;;;;;21424:164;20353:40;20314:187;;;20423:2;-1:-1:-1;;;;;20415:10:0;:4;-1:-1:-1;;;;;20415:10:0;;20411:90;;20442:47;20475:4;20481:7;20442:32;:47::i;:::-;-1:-1:-1;;;;;20515:16:0;;20511:183;;20548:45;20585:7;20548:36;:45::i;:::-;20511:183;;;20621:4;-1:-1:-1;;;;;20615:10:0;:2;-1:-1:-1;;;;;20615:10:0;;20611:83;;20642:40;20670:2;20674:7;20642:27;:40::i;14997:342::-;15057:13;15073:23;15088:7;15073:14;:23::i;:::-;15057:39;;15109:48;15130:5;15145:1;15149:7;15109:20;:48::i;:::-;15180:29;15197:1;15201:7;15180:8;:29::i;:::-;-1:-1:-1;;;;;15222:16:0;;;;;;:9;:16;;;;;:21;;15242:1;;15222:16;:21;;15242:1;;15222:21;:::i;:::-;;;;-1:-1:-1;;15261:16:0;;;;:7;:16;;;;;;15254:23;;-1:-1:-1;;;;;;15254:23:0;;;15295:36;15269:7;;15261:16;-1:-1:-1;;;;;15295:36:0;;;;;15261:16;;15295:36;14997:342;;:::o;22215:988::-;22481:22;22531:1;22506:22;22523:4;22506:16;:22::i;:::-;:26;;;;:::i;:::-;22543:18;22564:26;;;:17;:26;;;;;;22481:51;;-1:-1:-1;22697:28:0;;;22693:328;;-1:-1:-1;;;;;22764:18:0;;22742:19;22764:18;;;:12;:18;;;;;;;;:34;;;;;;;;;22815:30;;;;;;:44;;;22932:30;;:17;:30;;;;;:43;;;22693:328;-1:-1:-1;23117:26:0;;;;:17;:26;;;;;;;;23110:33;;;-1:-1:-1;;;;;23161:18:0;;;;;:12;:18;;;;;:34;;;;;;;23154:41;22215:988::o;23498:1079::-;23776:10;:17;23751:22;;23776:21;;23796:1;;23776:21;:::i;:::-;23808:18;23829:24;;;:15;:24;;;;;;24202:10;:26;;23751:46;;-1:-1:-1;23829:24:0;;23751:46;;24202:26;;;;-1:-1:-1;;;24202:26:0;;;;;;;;;;;;;;;;;24180:48;;24266:11;24241:10;24252;24241:22;;;;;;-1:-1:-1;;;24241:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;24346:28;;;:15;:28;;;;;;;:41;;;24518:24;;;;;24511:31;24553:10;:16;;;;;-1:-1:-1;;;24553:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;23498:1079;;;;:::o;21002:221::-;21087:14;21104:20;21121:2;21104:16;:20::i;:::-;-1:-1:-1;;;;;21135:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;21180:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;21002:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:2;;588:1;585;578:12;603:196;;715:2;703:9;694:7;690:23;686:32;683:2;;;736:6;728;721:22;683:2;764:29;783:9;764:29;:::i;804:270::-;;;933:2;921:9;912:7;908:23;904:32;901:2;;;954:6;946;939:22;901:2;982:29;1001:9;982:29;:::i;:::-;972:39;;1030:38;1064:2;1053:9;1049:18;1030:38;:::i;:::-;1020:48;;891:183;;;;;:::o;1079:338::-;;;;1225:2;1213:9;1204:7;1200:23;1196:32;1193:2;;;1246:6;1238;1231:22;1193:2;1274:29;1293:9;1274:29;:::i;:::-;1264:39;;1322:38;1356:2;1345:9;1341:18;1322:38;:::i;:::-;1312:48;;1407:2;1396:9;1392:18;1379:32;1369:42;;1183:234;;;;;:::o;1422:696::-;;;;;1594:3;1582:9;1573:7;1569:23;1565:33;1562:2;;;1616:6;1608;1601:22;1562:2;1644:29;1663:9;1644:29;:::i;:::-;1634:39;;1692:38;1726:2;1715:9;1711:18;1692:38;:::i;:::-;1682:48;;1777:2;1766:9;1762:18;1749:32;1739:42;;1832:2;1821:9;1817:18;1804:32;1859:18;1851:6;1848:30;1845:2;;;1896:6;1888;1881:22;1845:2;1924:22;;1977:4;1969:13;;1965:27;-1:-1:-1;1955:2:1;;2011:6;2003;1996:22;1955:2;2039:73;2104:7;2099:2;2086:16;2081:2;2077;2073:11;2039:73;:::i;:::-;2029:83;;;1552:566;;;;;;;:::o;2123:325::-;;;2249:2;2237:9;2228:7;2224:23;2220:32;2217:2;;;2270:6;2262;2255:22;2217:2;2298:29;2317:9;2298:29;:::i;:::-;2288:39;;2377:2;2366:9;2362:18;2349:32;2390:28;2412:5;2390:28;:::i;:::-;2437:5;2427:15;;;2207:241;;;;;:::o;2453:264::-;;;2582:2;2570:9;2561:7;2557:23;2553:32;2550:2;;;2603:6;2595;2588:22;2550:2;2631:29;2650:9;2631:29;:::i;:::-;2621:39;2707:2;2692:18;;;;2679:32;;-1:-1:-1;;;2540:177:1:o;2722:1009::-;;2837:2;2880;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2946:9;2933:23;2975:18;3016:2;3008:6;3005:14;3002:2;;;3037:6;3029;3022:22;3002:2;3080:6;3069:9;3065:22;3055:32;;3125:7;3118:4;3114:2;3110:13;3106:27;3096:2;;3152:6;3144;3137:22;3096:2;3193;3180:16;3215:2;3211;3208:10;3205:2;;;3221:18;;:::i;:::-;3268:2;3264;3260:11;3250:21;;3291:28;3315:2;3311;3307:11;3291:28;:::i;:::-;3353:15;;;3384:12;;;;3416:11;;;3446;;;3442:20;;3439:33;-1:-1:-1;3436:2:1;;;3490:6;3482;3475:22;3436:2;3517:6;3508:15;;3532:169;3546:2;3543:1;3540:9;3532:169;;;3603:23;3622:3;3603:23;:::i;:::-;3591:36;;3564:1;3557:9;;;;;3647:12;;;;3679;;3532:169;;;-1:-1:-1;3720:5:1;2817:914;-1:-1:-1;;;;;;;;2817:914:1:o;3736:255::-;;3856:2;3844:9;3835:7;3831:23;3827:32;3824:2;;;3877:6;3869;3862:22;3824:2;3914:9;3908:16;3933:28;3955:5;3933:28;:::i;3996:255::-;;4107:2;4095:9;4086:7;4082:23;4078:32;4075:2;;;4128:6;4120;4113:22;4075:2;4172:9;4159:23;4191:30;4215:5;4191:30;:::i;4256:259::-;;4378:2;4366:9;4357:7;4353:23;4349:32;4346:2;;;4399:6;4391;4384:22;4346:2;4436:9;4430:16;4455:30;4479:5;4455:30;:::i;4520:480::-;;4642:2;4630:9;4621:7;4617:23;4613:32;4610:2;;;4663:6;4655;4648:22;4610:2;4708:9;4695:23;4741:18;4733:6;4730:30;4727:2;;;4778:6;4770;4763:22;4727:2;4806:22;;4859:4;4851:13;;4847:27;-1:-1:-1;4837:2:1;;4893:6;4885;4878:22;4837:2;4921:73;4986:7;4981:2;4968:16;4963:2;4959;4955:11;4921:73;:::i;5005:190::-;;5117:2;5105:9;5096:7;5092:23;5088:32;5085:2;;;5138:6;5130;5123:22;5085:2;-1:-1:-1;5166:23:1;;5075:120;-1:-1:-1;5075:120:1:o;5200:194::-;;5323:2;5311:9;5302:7;5298:23;5294:32;5291:2;;;5344:6;5336;5329:22;5291:2;-1:-1:-1;5372:16:1;;5281:113;-1:-1:-1;5281:113:1:o;5399:257::-;;5478:5;5472:12;5505:6;5500:3;5493:19;5521:63;5577:6;5570:4;5565:3;5561:14;5554:4;5547:5;5543:16;5521:63;:::i;:::-;5638:2;5617:15;-1:-1:-1;;5613:29:1;5604:39;;;;5645:4;5600:50;;5448:208;-1:-1:-1;;5448:208:1:o;5661:1530::-;;5923:6;5917:13;5949:4;5962:51;6006:6;6001:3;5996:2;5988:6;5984:15;5962:51;:::i;:::-;6076:13;;6035:16;;;;6098:55;6076:13;6035:16;6120:15;;;6098:55;:::i;:::-;6244:13;;6175:20;;;6215:3;;6321:1;6306:17;;6342:1;6378:18;;;;6405:2;;6483:4;6473:8;6469:19;6457:31;;6405:2;6546;6536:8;6533:16;6513:18;6510:40;6507:2;;;-1:-1:-1;;;6573:33:1;;6629:4;6626:1;6619:15;6659:4;6580:3;6647:17;6507:2;6690:18;6717:110;;;;6841:1;6836:330;;;;6683:483;;6717:110;-1:-1:-1;;6752:24:1;;6738:39;;6797:20;;;;-1:-1:-1;6717:110:1;;6836:330;19078:127;19144:17;;;19194:4;19178:21;;6931:3;6947:169;6961:8;6958:1;6955:15;6947:169;;;7043:14;;7028:13;;;7021:37;7086:16;;;;6978:10;;6947:169;;;6951:3;;7147:8;7140:5;7136:20;7129:27;;6683:483;-1:-1:-1;7182:3:1;;5893:1298;-1:-1:-1;;;;;;;;;;;5893:1298:1:o;7614:488::-;-1:-1:-1;;;;;7883:15:1;;;7865:34;;7935:15;;7930:2;7915:18;;7908:43;7982:2;7967:18;;7960:34;;;8030:3;8025:2;8010:18;;8003:31;;;7614:488;;8051:45;;8076:19;;8068:6;8051:45;:::i;:::-;8043:53;7817:285;-1:-1:-1;;;;;;7817:285:1:o;8578:219::-;;8727:2;8716:9;8709:21;8747:44;8787:2;8776:9;8772:18;8764:6;8747:44;:::i;9214:414::-;9416:2;9398:21;;;9455:2;9435:18;;;9428:30;9494:34;9489:2;9474:18;;9467:62;-1:-1:-1;;;9560:2:1;9545:18;;9538:48;9618:3;9603:19;;9388:240::o;14689:356::-;14891:2;14873:21;;;14910:18;;;14903:30;14969:34;14964:2;14949:18;;14942:62;15036:2;15021:18;;14863:182::o;16621:413::-;16823:2;16805:21;;;16862:2;16842:18;;;16835:30;16901:34;16896:2;16881:18;;16874:62;-1:-1:-1;;;16967:2:1;16952:18;;16945:47;17024:3;17009:19;;16795:239::o;18798:275::-;18869:2;18863:9;18934:2;18915:13;;-1:-1:-1;;18911:27:1;18899:40;;18969:18;18954:34;;18990:22;;;18951:62;18948:2;;;19016:18;;:::i;:::-;19052:2;19045:22;18843:230;;-1:-1:-1;18843:230:1:o;19210:128::-;;19281:1;19277:6;19274:1;19271:13;19268:2;;;19287:18;;:::i;:::-;-1:-1:-1;19323:9:1;;19258:80::o;19343:120::-;;19409:1;19399:2;;19414:18;;:::i;:::-;-1:-1:-1;19448:9:1;;19389:74::o;19468:168::-;;19574:1;19570;19566:6;19562:14;19559:1;19556:21;19551:1;19544:9;19537:17;19533:45;19530:2;;;19581:18;;:::i;:::-;-1:-1:-1;19621:9:1;;19520:116::o;19641:125::-;;19709:1;19706;19703:8;19700:2;;;19714:18;;:::i;:::-;-1:-1:-1;19751:9:1;;19690:76::o;19771:258::-;19843:1;19853:113;19867:6;19864:1;19861:13;19853:113;;;19943:11;;;19937:18;19924:11;;;19917:39;19889:2;19882:10;19853:113;;;19984:6;19981:1;19978:13;19975:2;;;-1:-1:-1;;20019:1:1;20001:16;;19994:27;19824:205::o;20034:380::-;20119:1;20109:12;;20166:1;20156:12;;;20177:2;;20231:4;20223:6;20219:17;20209:27;;20177:2;20284;20276:6;20273:14;20253:18;20250:38;20247:2;;;20330:10;20325:3;20321:20;20318:1;20311:31;20365:4;20362:1;20355:15;20393:4;20390:1;20383:15;20247:2;;20089:325;;;:::o;20419:135::-;;-1:-1:-1;;20479:17:1;;20476:2;;;20499:18;;:::i;:::-;-1:-1:-1;20546:1:1;20535:13;;20466:88::o;20559:112::-;;20617:1;20607:2;;20622:18;;:::i;:::-;-1:-1:-1;20656:9:1;;20597:74::o;20676:127::-;20737:10;20732:3;20728:20;20725:1;20718:31;20768:4;20765:1;20758:15;20792:4;20789:1;20782:15;20808:127;20869:10;20864:3;20860:20;20857:1;20850:31;20900:4;20897:1;20890:15;20924:4;20921:1;20914:15;20940:127;21001:10;20996:3;20992:20;20989:1;20982:31;21032:4;21029:1;21022:15;21056:4;21053:1;21046:15;21072:118;21158:5;21151:13;21144:21;21137:5;21134:32;21124:2;;21180:1;21177;21170:12;21195:131;-1:-1:-1;;;;;;21269:32:1;;21259:43;;21249:2;;21316:1;21313;21306:12

Swarm Source

ipfs://50fcd0748eb98f2f06cdd217436b3003f386a87d6d9db9ce6fb1e727b04ce769
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.