ETH Price: $3,392.40 (+6.10%)
Gas: 26 Gwei

Token

VektorX (VKX)
 

Overview

Max Total Supply

401 VKX

Holders

228

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
gokuza.eth
Balance
2 VKX
0x6Eee796F80Dc191DcFB69C1Db8B5c8D37E06Ac1D
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:
VektorX

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-29
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;


library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


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;


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


pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    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;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    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;

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

    
    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;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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 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;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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
    ) private 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;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}



pragma solidity ^0.8.0;


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    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()))
                : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    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 _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
   
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

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

        // Clear approvals
        _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);

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

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
   
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}



pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
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];
    }

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

    
    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];
        
        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 Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }
    
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

pragma solidity ^0.8.4;

/*
  __          __  ________  __    __ __________   ________   ________   __     __ 
  \ \        / / | _______| | |  / / \___  ____/ / /    \ \  |      /   \ \   / /
   \ \      / /  | |______  | |_/ /     |  |    / /      \ \ |  ___/     \ \ / /
    \ \    / /   | |______| | |_ /      |  |    \ \      / / | | \ \      \ \ /
     \ \__/ /    | |______  | | \ \     |  |     \ \ ___/ /  | |  \ \     / /\ \
      \____/     |________| |_|  \_\    |__|      \______/   |_|   \_\   /_/  \_\

      
*/


contract VektorX is ERC721Enumerable, Ownable {
    using Strings for uint256;
    using ECDSA for bytes32;
    string baseURI;
    uint256 public constant VektorX_PRIVATE = 2500;
    uint256 public constant VektorX_MAX =  7500;
    uint256 public constant VektorX_PRICE1 = 0.03 ether;
    uint256 public constant VektorX_PRICE2 = 0.04 ether;
    uint256 public constant VektorX_PRICE_Public = 0.05 ether;
    uint256 public constant VektorX_PER_PUBLIC_MINT = 10;
    mapping(address => uint256) public presalerListPurchases;    
    string private constant Sig_WORD = "private";
    address payable commissions = payable(0x748aF6Cbe0DD12148D36DD946d43Ef783a85a73f);
    address private _signerAddress = 0x748aF6Cbe0DD12148D36DD946d43Ef783a85a73f;
    address private a1 = 0xD7Ac55F70b1077854eE1ff593035146fEC62bDe0;
    uint256 public privateAmountMinted;
    uint256 public presale1PurchaseLimit = 2;
    uint256 public presale2PurchaseLimit = 7;
    bool public presaleLive;
    bool public saleLive;
    bool public locked;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);        
    }

    modifier notLocked {
        require(!locked, "Contract metadata methods are locked");
        _;
    }

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

    function matchAddresSigner(bytes memory signature) private view returns(bool) {
         bytes32 hash = keccak256(abi.encodePacked(
            "\x19Ethereum Signed Message:\n32",
            keccak256(abi.encodePacked(msg.sender, Sig_WORD)))
          );
        return _signerAddress == hash.recover(signature);
    }

    function founderMint(uint256 tokenQuantity) external onlyOwner {
        require(totalSupply() + tokenQuantity <= VektorX_MAX, "EXCEED_MAX");
        for(uint256 i = 0; i < tokenQuantity; i++) {
            _safeMint(msg.sender, totalSupply() + 1);
        }
    }

    function gift(address[] calldata receivers) external onlyOwner {
        require(totalSupply() + receivers.length <= VektorX_MAX, "EXCEED_MAX");
        for (uint256 i = 0; i < receivers.length; i++) {
            _safeMint(receivers[i], totalSupply() + 1);
        }
    }

    function buy(uint256 tokenQuantity) external payable {
        require(saleLive, "SALE_CLOSED");
        require(!presaleLive, "ONLY_PRESALE");
        require(totalSupply() + tokenQuantity <= VektorX_MAX, "EXCEED_MAX");
        require(tokenQuantity <= VektorX_PER_PUBLIC_MINT, "EXCEED_VektorX_PER_PUBLIC_MINT");
        require(VektorX_PRICE_Public * tokenQuantity <= msg.value, "INSUFFICIENT_ETH");

        for(uint256 i = 0; i < tokenQuantity; i++) {
            _safeMint(msg.sender, totalSupply() + 1);
        }

        (bool success, ) = payable(commissions).call{value: msg.value * 10 / 100}("");
        require(success);
    }

    function presaleBuy(uint256 tokenQuantity) external payable {
        require(!saleLive && presaleLive, "PRESALE_CLOSED");
        // require(matchAddresSigner(signature), "DIRECT_MINT_DISALLOWED");
        require(privateAmountMinted + tokenQuantity <= VektorX_MAX, "EXCEED_PRIVATE");
        
        if ( totalSupply() < 1000 ) {
            require(presalerListPurchases[msg.sender] + tokenQuantity <= presale1PurchaseLimit, "EXCEED_ALLOC");
            require(VektorX_PRICE1 * tokenQuantity <= msg.value, "INSUFFICIENT_ETH");            
        } else {
            require(presalerListPurchases[msg.sender] + tokenQuantity <= presale2PurchaseLimit, "EXCEED_ALLOC");
            require(VektorX_PRICE2 * tokenQuantity <= msg.value, "INSUFFICIENT_ETH");
        }
        
        for(uint256 i = 0; i < tokenQuantity; i++) {
            privateAmountMinted++;
            presalerListPurchases[msg.sender]++;
            _safeMint(msg.sender, totalSupply() + 1);
        }

        (bool success, ) = payable(commissions).call{value: msg.value * 10 / 100}("");
        require(success);
    }

    function withdraw() external {
        uint256 balance = address(this).balance;
        require(balance > 0);
        payable(a1).transfer(address(this).balance);
    }
    
    function Initialreveal(uint256 _mintAmount) public onlyOwner() {
        uint256 supply = totalSupply();
        
        for (uint256 i = 1; i <= _mintAmount; i++) {            
            _safeMint(msg.sender, supply + i);
        }
    }

    function presalePurchasedCount(address addr) external view returns (uint256) {
        return presalerListPurchases[addr];
    }

    function lockMetadata() external onlyOwner {
        locked = true;
    }

    function togglePresaleStatus() external onlyOwner {
        presaleLive = !presaleLive;
    }

    function toggleSaleStatus() external onlyOwner {
        saleLive = !saleLive;
    }

    function setSignerAddress(address addr) external onlyOwner {
        _signerAddress = addr;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
        require(_exists(tokenId), "Cannot query non-existent token");

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())): "";        
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"Initialreveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"VektorX_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VektorX_PER_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VektorX_PRICE1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VektorX_PRICE2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VektorX_PRICE_Public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VektorX_PRIVATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"founderMint","outputs":[],"stateMutability":"nonpayable","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":"receivers","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale1PurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale2PurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"presaleBuy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"presalePurchasedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presalerListPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateAmountMinted","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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","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":[],"name":"togglePresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600d80546001600160a01b031990811673748af6cbe0dd12148d36dd946d43ef783a85a73f908117909255600e80548216909217909155600f805490911673d7ac55f70b1077854ee1ff593035146fec62bde0179055600260115560076012553480156200007157600080fd5b5060405162002ba238038062002ba2833981016040819052620000949162000335565b825183908390620000ad906000906020850190620001c2565b508051620000c3906001906020840190620001c2565b505050620000e0620000da620000f460201b60201c565b620000f8565b620000eb816200014a565b50505062000403565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001be90600b906020840190620001c2565b5050565b828054620001d090620003c6565b90600052602060002090601f016020900481019282620001f457600085556200023f565b82601f106200020f57805160ff19168380011785556200023f565b828001600101855582156200023f579182015b828111156200023f57825182559160200191906001019062000222565b506200024d92915062000251565b5090565b5b808211156200024d576000815560010162000252565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000268565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000268565b81604052838152602092508683858801011115620002f557600080fd5b600091505b83821015620003195785820183015181830184015290820190620002fa565b838211156200032b5760008385830101525b9695505050505050565b6000806000606084860312156200034b57600080fd5b83516001600160401b03808211156200036357600080fd5b62000371878388016200027e565b945060208601519150808211156200038857600080fd5b62000396878388016200027e565b93506040860151915080821115620003ad57600080fd5b50620003bc868287016200027e565b9150509250925092565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b61278f80620004136000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063a22cb465116100b6578063d96a094a1161007a578063d96a094a146106e6578063e081b781146106f9578063e985e9c514610718578063ecf4d8b914610761578063f2fde38b14610777578063f42202e81461079757600080fd5b8063a22cb4651461064b578063b88d4fde1461066b578063c87b56dd1461068b578063cc78f7de146106ab578063cf309012146106c657600080fd5b80638da5cb5b116101085780638da5cb5b146105aa57806395d89b41146105c8578063989bdbb6146105dd5780639b423543146105f25780639bf8031614610608578063a20bf7511461063557600080fd5b806370a0823114610533578063715018a6146105535780637bffb4ce14610568578063815f7bbd1461057d57806383a9e0491461059057600080fd5b806336452082116101dd57806355f804b3116101a157806355f804b31461047c57806359a12ad51461049c5780635b4ce38a146104b25780635ce7af1f146104c75780635e2d7e74146104fd5780636352211e1461051357600080fd5b806336452082146103ec5780633ccfd60b1461040757806342842e0e1461041c5780634a00bd4f1461043c5780634f6ccce71461045c57600080fd5b8063095ea7b31161022f578063095ea7b314610332578063163e1e611461035257806318160ddd146103725780631884a6a91461039157806323b872dd146103ac5780632f745c59146103cc57600080fd5b806301ffc9a71461026c578063046dc166146102a1578063049c5c49146102c357806306fdde03146102d8578063081812fc146102fa575b600080fd5b34801561027857600080fd5b5061028c610287366004612113565b6107b7565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc36600461214c565b6107e2565b005b3480156102cf57600080fd5b506102c1610837565b3480156102e457600080fd5b506102ed61087e565b60405161029891906121bf565b34801561030657600080fd5b5061031a6103153660046121d2565b610910565b6040516001600160a01b039091168152602001610298565b34801561033e57600080fd5b506102c161034d3660046121eb565b6109a5565b34801561035e57600080fd5b506102c161036d366004612215565b610abb565b34801561037e57600080fd5b506008545b604051908152602001610298565b34801561039d57600080fd5b50610383666a94d74f43000081565b3480156103b857600080fd5b506102c16103c736600461228a565b610b75565b3480156103d857600080fd5b506103836103e73660046121eb565b610ba6565b3480156103f857600080fd5b5061038366b1a2bc2ec5000081565b34801561041357600080fd5b506102c1610c3c565b34801561042857600080fd5b506102c161043736600461228a565b610c84565b34801561044857600080fd5b506102c16104573660046121d2565b610c9f565b34801561046857600080fd5b506103836104773660046121d2565b610d00565b34801561048857600080fd5b506102c1610497366004612352565b610d93565b3480156104a857600080fd5b5061038360105481565b3480156104be57600080fd5b50610383600a81565b3480156104d357600080fd5b506103836104e236600461214c565b6001600160a01b03166000908152600c602052604090205490565b34801561050957600080fd5b50610383611d4c81565b34801561051f57600080fd5b5061031a61052e3660046121d2565b610dd0565b34801561053f57600080fd5b5061038361054e36600461214c565b610e47565b34801561055f57600080fd5b506102c1610ece565b34801561057457600080fd5b506102c1610f04565b6102c161058b3660046121d2565b610f42565b34801561059c57600080fd5b5060135461028c9060ff1681565b3480156105b657600080fd5b50600a546001600160a01b031661031a565b3480156105d457600080fd5b506102ed6111eb565b3480156105e957600080fd5b506102c16111fa565b3480156105fe57600080fd5b5061038360115481565b34801561061457600080fd5b5061038361062336600461214c565b600c6020526000908152604090205481565b34801561064157600080fd5b5061038360125481565b34801561065757600080fd5b506102c161066636600461239b565b611237565b34801561067757600080fd5b506102c16106863660046123d7565b6112fc565b34801561069757600080fd5b506102ed6106a63660046121d2565b611334565b3480156106b757600080fd5b50610383668e1bc9bf04000081565b3480156106d257600080fd5b5060135461028c9062010000900460ff1681565b6102c16106f43660046121d2565b6113f7565b34801561070557600080fd5b5060135461028c90610100900460ff1681565b34801561072457600080fd5b5061028c610733366004612453565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076d57600080fd5b506103836109c481565b34801561078357600080fd5b506102c161079236600461214c565b61155e565b3480156107a357600080fd5b506102c16107b23660046121d2565b6115f9565b60006001600160e01b0319821663780e9d6360e01b14806107dc57506107dc82611682565b92915050565b600a546001600160a01b031633146108155760405162461bcd60e51b815260040161080c90612486565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146108615760405162461bcd60e51b815260040161080c90612486565b6013805461ff001981166101009182900460ff1615909102179055565b60606000805461088d906124bb565b80601f01602080910402602001604051908101604052809291908181526020018280546108b9906124bb565b80156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080c565b506000908152600460205260409020546001600160a01b031690565b60006109b082610dd0565b9050806001600160a01b0316836001600160a01b03161415610a1e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161080c565b336001600160a01b0382161480610a3a5750610a3a8133610733565b610aac5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161080c565b610ab683836116d2565b505050565b600a546001600160a01b03163314610ae55760405162461bcd60e51b815260040161080c90612486565b611d4c81610af260085490565b610afc919061250c565b1115610b1a5760405162461bcd60e51b815260040161080c90612524565b60005b81811015610ab657610b63838383818110610b3a57610b3a612548565b9050602002016020810190610b4f919061214c565b6008545b610b5e90600161250c565b611740565b80610b6d8161255e565b915050610b1d565b610b7f338261175a565b610b9b5760405162461bcd60e51b815260040161080c90612579565b610ab6838383611851565b6000610bb183610e47565b8210610c135760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161080c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b4780610c4757600080fd5b600f546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610c80573d6000803e3d6000fd5b5050565b610ab6838383604051806020016040528060008152506112fc565b600a546001600160a01b03163314610cc95760405162461bcd60e51b815260040161080c90612486565b6000610cd460085490565b905060015b828111610ab657610cee33610b5e838561250c565b80610cf88161255e565b915050610cd9565b6000610d0b60085490565b8210610d6e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161080c565b60088281548110610d8157610d81612548565b90600052602060002001549050919050565b600a546001600160a01b03163314610dbd5760405162461bcd60e51b815260040161080c90612486565b8051610c8090600b906020840190612064565b6000818152600260205260408120546001600160a01b0316806107dc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161080c565b60006001600160a01b038216610eb25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161080c565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610ef85760405162461bcd60e51b815260040161080c90612486565b610f0260006119fc565b565b600a546001600160a01b03163314610f2e5760405162461bcd60e51b815260040161080c90612486565b6013805460ff19811660ff90911615179055565b601354610100900460ff16158015610f5c575060135460ff165b610f995760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b604482015260640161080c565b611d4c81601054610faa919061250c565b1115610fe95760405162461bcd60e51b815260206004820152600e60248201526d4558434545445f5052495641544560901b604482015260640161080c565b6103e8610ff560085490565b101561108b57601154336000908152600c602052604090205461101990839061250c565b11156110565760405162461bcd60e51b815260206004820152600c60248201526b4558434545445f414c4c4f4360a01b604482015260640161080c565b3461106882666a94d74f4300006125ca565b11156110865760405162461bcd60e51b815260040161080c906125e9565b611116565b601254336000908152600c60205260409020546110a990839061250c565b11156110e65760405162461bcd60e51b815260206004820152600c60248201526b4558434545445f414c4c4f4360a01b604482015260640161080c565b346110f882668e1bc9bf0400006125ca565b11156111165760405162461bcd60e51b815260040161080c906125e9565b60005b8181101561117557601080549060006111318361255e565b9091555050336000908152600c602052604081208054916111518361255e565b919050555061116333610b5360085490565b8061116d8161255e565b915050611119565b50600d546000906001600160a01b0316606461119234600a6125ca565b61119c9190612629565b604051600081818185875af1925050503d80600081146111d8576040519150601f19603f3d011682016040523d82523d6000602084013e6111dd565b606091505b5050905080610c8057600080fd5b60606001805461088d906124bb565b600a546001600160a01b031633146112245760405162461bcd60e51b815260040161080c90612486565b6013805462ff0000191662010000179055565b6001600160a01b0382163314156112905760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080c565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611306338361175a565b6113225760405162461bcd60e51b815260040161080c90612579565b61132e84848484611a4e565b50505050565b6000818152600260205260409020546060906001600160a01b031661139b5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00604482015260640161080c565b60006113a5611a81565b905060008151116113c557604051806020016040528060008152506113f0565b806113cf84611a90565b6040516020016113e092919061263d565b6040516020818303038152906040525b9392505050565b601354610100900460ff1661143c5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b604482015260640161080c565b60135460ff161561147e5760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b604482015260640161080c565b611d4c8161148b60085490565b611495919061250c565b11156114b35760405162461bcd60e51b815260040161080c90612524565b600a8111156115045760405162461bcd60e51b815260206004820152601e60248201527f4558434545445f56656b746f72585f5045525f5055424c49435f4d494e540000604482015260640161080c565b346115168266b1a2bc2ec500006125ca565b11156115345760405162461bcd60e51b815260040161080c906125e9565b60005b818110156111755761154c33610b5360085490565b806115568161255e565b915050611537565b600a546001600160a01b031633146115885760405162461bcd60e51b815260040161080c90612486565b6001600160a01b0381166115ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080c565b6115f6816119fc565b50565b600a546001600160a01b031633146116235760405162461bcd60e51b815260040161080c90612486565b611d4c8161163060085490565b61163a919061250c565b11156116585760405162461bcd60e51b815260040161080c90612524565b60005b81811015610c805761167033610b5360085490565b8061167a8161255e565b91505061165b565b60006001600160e01b031982166380ac58cd60e01b14806116b357506001600160e01b03198216635b5e139f60e01b145b806107dc57506301ffc9a760e01b6001600160e01b03198316146107dc565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061170782610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610c80828260405180602001604052806000815250611b8e565b6000818152600260205260408120546001600160a01b03166117d35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080c565b60006117de83610dd0565b9050806001600160a01b0316846001600160a01b031614806118195750836001600160a01b031661180e84610910565b6001600160a01b0316145b8061184957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661186482610dd0565b6001600160a01b0316146118cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161080c565b6001600160a01b03821661192e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080c565b611939838383611bc1565b6119446000826116d2565b6001600160a01b038316600090815260036020526040812080546001929061196d90849061266c565b90915550506001600160a01b038216600090815260036020526040812080546001929061199b90849061250c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a59848484611851565b611a6584848484611c79565b61132e5760405162461bcd60e51b815260040161080c90612683565b6060600b805461088d906124bb565b606081611ab45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ade5780611ac88161255e565b9150611ad79050600a83612629565b9150611ab8565b60008167ffffffffffffffff811115611af957611af96122c6565b6040519080825280601f01601f191660200182016040528015611b23576020820181803683370190505b5090505b841561184957611b3860018361266c565b9150611b45600a866126d5565b611b5090603061250c565b60f81b818381518110611b6557611b65612548565b60200101906001600160f81b031916908160001a905350611b87600a86612629565b9450611b27565b611b988383611d86565b611ba56000848484611c79565b610ab65760405162461bcd60e51b815260040161080c90612683565b6001600160a01b038316611c1c57611c1781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c3f565b816001600160a01b0316836001600160a01b031614611c3f57611c3f8382611ed4565b6001600160a01b038216611c5657610ab681611f71565b826001600160a01b0316826001600160a01b031614610ab657610ab68282612020565b60006001600160a01b0384163b15611d7b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cbd9033908990889088906004016126e9565b602060405180830381600087803b158015611cd757600080fd5b505af1925050508015611d07575060408051601f3d908101601f19168201909252611d0491810190612726565b60015b611d61573d808015611d35576040519150601f19603f3d011682016040523d82523d6000602084013e611d3a565b606091505b508051611d595760405162461bcd60e51b815260040161080c90612683565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611849565b506001949350505050565b6001600160a01b038216611ddc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080c565b6000818152600260205260409020546001600160a01b031615611e415760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080c565b611e4d60008383611bc1565b6001600160a01b0382166000908152600360205260408120805460019290611e7690849061250c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611ee184610e47565b611eeb919061266c565b600083815260076020526040902054909150808214611f3e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611f839060019061266c565b60008381526009602052604081205460088054939450909284908110611fab57611fab612548565b906000526020600020015490508060088381548110611fcc57611fcc612548565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061200457612004612743565b6001900381819060005260206000200160009055905550505050565b600061202b83610e47565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612070906124bb565b90600052602060002090601f01602090048101928261209257600085556120d8565b82601f106120ab57805160ff19168380011785556120d8565b828001600101855582156120d8579182015b828111156120d85782518255916020019190600101906120bd565b506120e49291506120e8565b5090565b5b808211156120e457600081556001016120e9565b6001600160e01b0319811681146115f657600080fd5b60006020828403121561212557600080fd5b81356113f0816120fd565b80356001600160a01b038116811461214757600080fd5b919050565b60006020828403121561215e57600080fd5b6113f082612130565b60005b8381101561218257818101518382015260200161216a565b8381111561132e5750506000910152565b600081518084526121ab816020860160208601612167565b601f01601f19169290920160200192915050565b6020815260006113f06020830184612193565b6000602082840312156121e457600080fd5b5035919050565b600080604083850312156121fe57600080fd5b61220783612130565b946020939093013593505050565b6000806020838503121561222857600080fd5b823567ffffffffffffffff8082111561224057600080fd5b818501915085601f83011261225457600080fd5b81358181111561226357600080fd5b8660208260051b850101111561227857600080fd5b60209290920196919550909350505050565b60008060006060848603121561229f57600080fd5b6122a884612130565b92506122b660208501612130565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156122f7576122f76122c6565b604051601f8501601f19908116603f0116810190828211818310171561231f5761231f6122c6565b8160405280935085815286868601111561233857600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561236457600080fd5b813567ffffffffffffffff81111561237b57600080fd5b8201601f8101841361238c57600080fd5b611849848235602084016122dc565b600080604083850312156123ae57600080fd5b6123b783612130565b9150602083013580151581146123cc57600080fd5b809150509250929050565b600080600080608085870312156123ed57600080fd5b6123f685612130565b935061240460208601612130565b925060408501359150606085013567ffffffffffffffff81111561242757600080fd5b8501601f8101871361243857600080fd5b612447878235602084016122dc565b91505092959194509250565b6000806040838503121561246657600080fd5b61246f83612130565b915061247d60208401612130565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124cf57607f821691505b602082108114156124f057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561251f5761251f6124f6565b500190565b6020808252600a908201526908ab0868a8a88be9a82b60b31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612572576125726124f6565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008160001904831182151516156125e4576125e46124f6565b500290565b60208082526010908201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b60008261263857612638612613565b500490565b6000835161264f818460208801612167565b835190830190612663818360208801612167565b01949350505050565b60008282101561267e5761267e6124f6565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826126e4576126e4612613565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061271c90830184612193565b9695505050505050565b60006020828403121561273857600080fd5b81516113f0816120fd565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a6d6c1428c12f565978456f98e13ce76903d5702649291fe6a5c1344af8106cd64736f6c63430008080033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000756656b746f7258000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564b5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d523931565167465961674773335175676d534147524377503852417a46483273584446544d664136736e4c662f00000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c806370a0823111610144578063a22cb465116100b6578063d96a094a1161007a578063d96a094a146106e6578063e081b781146106f9578063e985e9c514610718578063ecf4d8b914610761578063f2fde38b14610777578063f42202e81461079757600080fd5b8063a22cb4651461064b578063b88d4fde1461066b578063c87b56dd1461068b578063cc78f7de146106ab578063cf309012146106c657600080fd5b80638da5cb5b116101085780638da5cb5b146105aa57806395d89b41146105c8578063989bdbb6146105dd5780639b423543146105f25780639bf8031614610608578063a20bf7511461063557600080fd5b806370a0823114610533578063715018a6146105535780637bffb4ce14610568578063815f7bbd1461057d57806383a9e0491461059057600080fd5b806336452082116101dd57806355f804b3116101a157806355f804b31461047c57806359a12ad51461049c5780635b4ce38a146104b25780635ce7af1f146104c75780635e2d7e74146104fd5780636352211e1461051357600080fd5b806336452082146103ec5780633ccfd60b1461040757806342842e0e1461041c5780634a00bd4f1461043c5780634f6ccce71461045c57600080fd5b8063095ea7b31161022f578063095ea7b314610332578063163e1e611461035257806318160ddd146103725780631884a6a91461039157806323b872dd146103ac5780632f745c59146103cc57600080fd5b806301ffc9a71461026c578063046dc166146102a1578063049c5c49146102c357806306fdde03146102d8578063081812fc146102fa575b600080fd5b34801561027857600080fd5b5061028c610287366004612113565b6107b7565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc36600461214c565b6107e2565b005b3480156102cf57600080fd5b506102c1610837565b3480156102e457600080fd5b506102ed61087e565b60405161029891906121bf565b34801561030657600080fd5b5061031a6103153660046121d2565b610910565b6040516001600160a01b039091168152602001610298565b34801561033e57600080fd5b506102c161034d3660046121eb565b6109a5565b34801561035e57600080fd5b506102c161036d366004612215565b610abb565b34801561037e57600080fd5b506008545b604051908152602001610298565b34801561039d57600080fd5b50610383666a94d74f43000081565b3480156103b857600080fd5b506102c16103c736600461228a565b610b75565b3480156103d857600080fd5b506103836103e73660046121eb565b610ba6565b3480156103f857600080fd5b5061038366b1a2bc2ec5000081565b34801561041357600080fd5b506102c1610c3c565b34801561042857600080fd5b506102c161043736600461228a565b610c84565b34801561044857600080fd5b506102c16104573660046121d2565b610c9f565b34801561046857600080fd5b506103836104773660046121d2565b610d00565b34801561048857600080fd5b506102c1610497366004612352565b610d93565b3480156104a857600080fd5b5061038360105481565b3480156104be57600080fd5b50610383600a81565b3480156104d357600080fd5b506103836104e236600461214c565b6001600160a01b03166000908152600c602052604090205490565b34801561050957600080fd5b50610383611d4c81565b34801561051f57600080fd5b5061031a61052e3660046121d2565b610dd0565b34801561053f57600080fd5b5061038361054e36600461214c565b610e47565b34801561055f57600080fd5b506102c1610ece565b34801561057457600080fd5b506102c1610f04565b6102c161058b3660046121d2565b610f42565b34801561059c57600080fd5b5060135461028c9060ff1681565b3480156105b657600080fd5b50600a546001600160a01b031661031a565b3480156105d457600080fd5b506102ed6111eb565b3480156105e957600080fd5b506102c16111fa565b3480156105fe57600080fd5b5061038360115481565b34801561061457600080fd5b5061038361062336600461214c565b600c6020526000908152604090205481565b34801561064157600080fd5b5061038360125481565b34801561065757600080fd5b506102c161066636600461239b565b611237565b34801561067757600080fd5b506102c16106863660046123d7565b6112fc565b34801561069757600080fd5b506102ed6106a63660046121d2565b611334565b3480156106b757600080fd5b50610383668e1bc9bf04000081565b3480156106d257600080fd5b5060135461028c9062010000900460ff1681565b6102c16106f43660046121d2565b6113f7565b34801561070557600080fd5b5060135461028c90610100900460ff1681565b34801561072457600080fd5b5061028c610733366004612453565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076d57600080fd5b506103836109c481565b34801561078357600080fd5b506102c161079236600461214c565b61155e565b3480156107a357600080fd5b506102c16107b23660046121d2565b6115f9565b60006001600160e01b0319821663780e9d6360e01b14806107dc57506107dc82611682565b92915050565b600a546001600160a01b031633146108155760405162461bcd60e51b815260040161080c90612486565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146108615760405162461bcd60e51b815260040161080c90612486565b6013805461ff001981166101009182900460ff1615909102179055565b60606000805461088d906124bb565b80601f01602080910402602001604051908101604052809291908181526020018280546108b9906124bb565b80156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080c565b506000908152600460205260409020546001600160a01b031690565b60006109b082610dd0565b9050806001600160a01b0316836001600160a01b03161415610a1e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161080c565b336001600160a01b0382161480610a3a5750610a3a8133610733565b610aac5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161080c565b610ab683836116d2565b505050565b600a546001600160a01b03163314610ae55760405162461bcd60e51b815260040161080c90612486565b611d4c81610af260085490565b610afc919061250c565b1115610b1a5760405162461bcd60e51b815260040161080c90612524565b60005b81811015610ab657610b63838383818110610b3a57610b3a612548565b9050602002016020810190610b4f919061214c565b6008545b610b5e90600161250c565b611740565b80610b6d8161255e565b915050610b1d565b610b7f338261175a565b610b9b5760405162461bcd60e51b815260040161080c90612579565b610ab6838383611851565b6000610bb183610e47565b8210610c135760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161080c565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b4780610c4757600080fd5b600f546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610c80573d6000803e3d6000fd5b5050565b610ab6838383604051806020016040528060008152506112fc565b600a546001600160a01b03163314610cc95760405162461bcd60e51b815260040161080c90612486565b6000610cd460085490565b905060015b828111610ab657610cee33610b5e838561250c565b80610cf88161255e565b915050610cd9565b6000610d0b60085490565b8210610d6e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161080c565b60088281548110610d8157610d81612548565b90600052602060002001549050919050565b600a546001600160a01b03163314610dbd5760405162461bcd60e51b815260040161080c90612486565b8051610c8090600b906020840190612064565b6000818152600260205260408120546001600160a01b0316806107dc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161080c565b60006001600160a01b038216610eb25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161080c565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610ef85760405162461bcd60e51b815260040161080c90612486565b610f0260006119fc565b565b600a546001600160a01b03163314610f2e5760405162461bcd60e51b815260040161080c90612486565b6013805460ff19811660ff90911615179055565b601354610100900460ff16158015610f5c575060135460ff165b610f995760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b604482015260640161080c565b611d4c81601054610faa919061250c565b1115610fe95760405162461bcd60e51b815260206004820152600e60248201526d4558434545445f5052495641544560901b604482015260640161080c565b6103e8610ff560085490565b101561108b57601154336000908152600c602052604090205461101990839061250c565b11156110565760405162461bcd60e51b815260206004820152600c60248201526b4558434545445f414c4c4f4360a01b604482015260640161080c565b3461106882666a94d74f4300006125ca565b11156110865760405162461bcd60e51b815260040161080c906125e9565b611116565b601254336000908152600c60205260409020546110a990839061250c565b11156110e65760405162461bcd60e51b815260206004820152600c60248201526b4558434545445f414c4c4f4360a01b604482015260640161080c565b346110f882668e1bc9bf0400006125ca565b11156111165760405162461bcd60e51b815260040161080c906125e9565b60005b8181101561117557601080549060006111318361255e565b9091555050336000908152600c602052604081208054916111518361255e565b919050555061116333610b5360085490565b8061116d8161255e565b915050611119565b50600d546000906001600160a01b0316606461119234600a6125ca565b61119c9190612629565b604051600081818185875af1925050503d80600081146111d8576040519150601f19603f3d011682016040523d82523d6000602084013e6111dd565b606091505b5050905080610c8057600080fd5b60606001805461088d906124bb565b600a546001600160a01b031633146112245760405162461bcd60e51b815260040161080c90612486565b6013805462ff0000191662010000179055565b6001600160a01b0382163314156112905760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080c565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611306338361175a565b6113225760405162461bcd60e51b815260040161080c90612579565b61132e84848484611a4e565b50505050565b6000818152600260205260409020546060906001600160a01b031661139b5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00604482015260640161080c565b60006113a5611a81565b905060008151116113c557604051806020016040528060008152506113f0565b806113cf84611a90565b6040516020016113e092919061263d565b6040516020818303038152906040525b9392505050565b601354610100900460ff1661143c5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b604482015260640161080c565b60135460ff161561147e5760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b604482015260640161080c565b611d4c8161148b60085490565b611495919061250c565b11156114b35760405162461bcd60e51b815260040161080c90612524565b600a8111156115045760405162461bcd60e51b815260206004820152601e60248201527f4558434545445f56656b746f72585f5045525f5055424c49435f4d494e540000604482015260640161080c565b346115168266b1a2bc2ec500006125ca565b11156115345760405162461bcd60e51b815260040161080c906125e9565b60005b818110156111755761154c33610b5360085490565b806115568161255e565b915050611537565b600a546001600160a01b031633146115885760405162461bcd60e51b815260040161080c90612486565b6001600160a01b0381166115ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080c565b6115f6816119fc565b50565b600a546001600160a01b031633146116235760405162461bcd60e51b815260040161080c90612486565b611d4c8161163060085490565b61163a919061250c565b11156116585760405162461bcd60e51b815260040161080c90612524565b60005b81811015610c805761167033610b5360085490565b8061167a8161255e565b91505061165b565b60006001600160e01b031982166380ac58cd60e01b14806116b357506001600160e01b03198216635b5e139f60e01b145b806107dc57506301ffc9a760e01b6001600160e01b03198316146107dc565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061170782610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610c80828260405180602001604052806000815250611b8e565b6000818152600260205260408120546001600160a01b03166117d35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161080c565b60006117de83610dd0565b9050806001600160a01b0316846001600160a01b031614806118195750836001600160a01b031661180e84610910565b6001600160a01b0316145b8061184957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661186482610dd0565b6001600160a01b0316146118cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161080c565b6001600160a01b03821661192e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080c565b611939838383611bc1565b6119446000826116d2565b6001600160a01b038316600090815260036020526040812080546001929061196d90849061266c565b90915550506001600160a01b038216600090815260036020526040812080546001929061199b90849061250c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a59848484611851565b611a6584848484611c79565b61132e5760405162461bcd60e51b815260040161080c90612683565b6060600b805461088d906124bb565b606081611ab45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ade5780611ac88161255e565b9150611ad79050600a83612629565b9150611ab8565b60008167ffffffffffffffff811115611af957611af96122c6565b6040519080825280601f01601f191660200182016040528015611b23576020820181803683370190505b5090505b841561184957611b3860018361266c565b9150611b45600a866126d5565b611b5090603061250c565b60f81b818381518110611b6557611b65612548565b60200101906001600160f81b031916908160001a905350611b87600a86612629565b9450611b27565b611b988383611d86565b611ba56000848484611c79565b610ab65760405162461bcd60e51b815260040161080c90612683565b6001600160a01b038316611c1c57611c1781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c3f565b816001600160a01b0316836001600160a01b031614611c3f57611c3f8382611ed4565b6001600160a01b038216611c5657610ab681611f71565b826001600160a01b0316826001600160a01b031614610ab657610ab68282612020565b60006001600160a01b0384163b15611d7b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cbd9033908990889088906004016126e9565b602060405180830381600087803b158015611cd757600080fd5b505af1925050508015611d07575060408051601f3d908101601f19168201909252611d0491810190612726565b60015b611d61573d808015611d35576040519150601f19603f3d011682016040523d82523d6000602084013e611d3a565b606091505b508051611d595760405162461bcd60e51b815260040161080c90612683565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611849565b506001949350505050565b6001600160a01b038216611ddc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080c565b6000818152600260205260409020546001600160a01b031615611e415760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080c565b611e4d60008383611bc1565b6001600160a01b0382166000908152600360205260408120805460019290611e7690849061250c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611ee184610e47565b611eeb919061266c565b600083815260076020526040902054909150808214611f3e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611f839060019061266c565b60008381526009602052604081205460088054939450909284908110611fab57611fab612548565b906000526020600020015490508060088381548110611fcc57611fcc612548565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061200457612004612743565b6001900381819060005260206000200160009055905550505050565b600061202b83610e47565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612070906124bb565b90600052602060002090601f01602090048101928261209257600085556120d8565b82601f106120ab57805160ff19168380011785556120d8565b828001600101855582156120d8579182015b828111156120d85782518255916020019190600101906120bd565b506120e49291506120e8565b5090565b5b808211156120e457600081556001016120e9565b6001600160e01b0319811681146115f657600080fd5b60006020828403121561212557600080fd5b81356113f0816120fd565b80356001600160a01b038116811461214757600080fd5b919050565b60006020828403121561215e57600080fd5b6113f082612130565b60005b8381101561218257818101518382015260200161216a565b8381111561132e5750506000910152565b600081518084526121ab816020860160208601612167565b601f01601f19169290920160200192915050565b6020815260006113f06020830184612193565b6000602082840312156121e457600080fd5b5035919050565b600080604083850312156121fe57600080fd5b61220783612130565b946020939093013593505050565b6000806020838503121561222857600080fd5b823567ffffffffffffffff8082111561224057600080fd5b818501915085601f83011261225457600080fd5b81358181111561226357600080fd5b8660208260051b850101111561227857600080fd5b60209290920196919550909350505050565b60008060006060848603121561229f57600080fd5b6122a884612130565b92506122b660208501612130565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156122f7576122f76122c6565b604051601f8501601f19908116603f0116810190828211818310171561231f5761231f6122c6565b8160405280935085815286868601111561233857600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561236457600080fd5b813567ffffffffffffffff81111561237b57600080fd5b8201601f8101841361238c57600080fd5b611849848235602084016122dc565b600080604083850312156123ae57600080fd5b6123b783612130565b9150602083013580151581146123cc57600080fd5b809150509250929050565b600080600080608085870312156123ed57600080fd5b6123f685612130565b935061240460208601612130565b925060408501359150606085013567ffffffffffffffff81111561242757600080fd5b8501601f8101871361243857600080fd5b612447878235602084016122dc565b91505092959194509250565b6000806040838503121561246657600080fd5b61246f83612130565b915061247d60208401612130565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124cf57607f821691505b602082108114156124f057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561251f5761251f6124f6565b500190565b6020808252600a908201526908ab0868a8a88be9a82b60b31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612572576125726124f6565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008160001904831182151516156125e4576125e46124f6565b500290565b60208082526010908201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b60008261263857612638612613565b500490565b6000835161264f818460208801612167565b835190830190612663818360208801612167565b01949350505050565b60008282101561267e5761267e6124f6565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826126e4576126e4612613565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061271c90830184612193565b9695505050505050565b60006020828403121561273857600080fd5b81516113f0816120fd565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a6d6c1428c12f565978456f98e13ce76903d5702649291fe6a5c1344af8106cd64736f6c63430008080033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000756656b746f7258000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564b5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d523931565167465961674773335175676d534147524377503852417a46483273584446544d664136736e4c662f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): VektorX
Arg [1] : _symbol (string): VKX
Arg [2] : _initBaseURI (string): ipfs://QmR91VQgFYagGs3QugmSAGRCwP8RAzFH2sXDFTMfA6snLf/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 56656b746f725800000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 564b580000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d523931565167465961674773335175676d534147524377
Arg [9] : 503852417a46483273584446544d664136736e4c662f00000000000000000000


Deployed Bytecode Sourcemap

38165:5594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27123:300;;;;;;;;;;-1:-1:-1;27123:300:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;27123:300:0;;;;;;;;43191:99;;;;;;;;;;-1:-1:-1;43191:99:0;;;;;:::i;:::-;;:::i;:::-;;43097:86;;;;;;;;;;;;;:::i;17545:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19238:308::-;;;;;;;;;;-1:-1:-1;19238:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2061:32:1;;;2043:51;;2031:2;2016:18;19238:308:0;1897:203:1;18761:411:0;;;;;;;;;;-1:-1:-1;18761:411:0;;;;;:::i;:::-;;:::i;40260:278::-;;;;;;;;;;-1:-1:-1;40260:278:0;;;;;:::i;:::-;;:::i;27926:113::-;;;;;;;;;;-1:-1:-1;28014:10:0;:17;27926:113;;;3130:25:1;;;3118:2;3103:18;27926:113:0;2984:177:1;38404:51:0;;;;;;;;;;;;38445:10;38404:51;;20297:376;;;;;;;;;;-1:-1:-1;20297:376:0;;;;;:::i;:::-;;:::i;27507:343::-;;;;;;;;;;-1:-1:-1;27507:343:0;;;;;:::i;:::-;;:::i;38520:57::-;;;;;;;;;;;;38567:10;38520:57;;42334:172;;;;;;;;;;;;;:::i;20744:185::-;;;;;;;;;;-1:-1:-1;20744:185:0;;;;;:::i;:::-;;:::i;42518:247::-;;;;;;;;;;-1:-1:-1;42518:247:0;;;;;:::i;:::-;;:::i;28116:320::-;;;;;;;;;;-1:-1:-1;28116:320:0;;;;;:::i;:::-;;:::i;43298:104::-;;;;;;;;;;-1:-1:-1;43298:104:0;;;;;:::i;:::-;;:::i;39001:34::-;;;;;;;;;;;;;;;;38584:52;;;;;;;;;;;;38634:2;38584:52;;42773:130;;;;;;;;;;-1:-1:-1;42773:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;42868:27:0;42841:7;42868:27;;;:21;:27;;;;;;;42773:130;38354:43;;;;;;;;;;;;38393:4;38354:43;;17152:326;;;;;;;;;;-1:-1:-1;17152:326:0;;;;;:::i;:::-;;:::i;16795:295::-;;;;;;;;;;-1:-1:-1;16795:295:0;;;;;:::i;:::-;;:::i;4648:94::-;;;;;;;;;;;;;:::i;42994:95::-;;;;;;;;;;;;;:::i;41206:1120::-;;;;;;:::i;:::-;;:::i;39136:23::-;;;;;;;;;;-1:-1:-1;39136:23:0;;;;;;;;4334:87;;;;;;;;;;-1:-1:-1;4407:6:0;;-1:-1:-1;;;;;4407:6:0;4334:87;;17714:104;;;;;;;;;;;;;:::i;42911:75::-;;;;;;;;;;;;;:::i;39042:40::-;;;;;;;;;;;;;;;;38643:56;;;;;;;;;;-1:-1:-1;38643:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;39089:40;;;;;;;;;;;;;;;;19618:327;;;;;;;;;;-1:-1:-1;19618:327:0;;;;;:::i;:::-;;:::i;21000:365::-;;;;;;;;;;-1:-1:-1;21000:365:0;;;;;:::i;:::-;;:::i;43410:346::-;;;;;;;;;;-1:-1:-1;43410:346:0;;;;;:::i;:::-;;:::i;38462:51::-;;;;;;;;;;;;38503:10;38462:51;;39193:18;;;;;;;;;;-1:-1:-1;39193:18:0;;;;;;;;;;;40546:652;;;;;;:::i;:::-;;:::i;39166:20::-;;;;;;;;;;-1:-1:-1;39166:20:0;;;;;;;;;;;20016:214;;;;;;;;;;-1:-1:-1;20016:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;20187:25:0;;;20158:4;20187:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;20016:214;38301:46;;;;;;;;;;;;38343:4;38301:46;;4897:229;;;;;;;;;;-1:-1:-1;4897:229:0;;;;;:::i;:::-;;:::i;39983:269::-;;;;;;;;;;-1:-1:-1;39983:269:0;;;;;:::i;:::-;;:::i;27123:300::-;27270:4;-1:-1:-1;;;;;;27312:50:0;;-1:-1:-1;;;27312:50:0;;:103;;;27379:36;27403:11;27379:23;:36::i;:::-;27292:123;27123:300;-1:-1:-1;;27123:300:0:o;43191:99::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;;;;;;;;;43261:14:::1;:21:::0;;-1:-1:-1;;;;;;43261:21:0::1;-1:-1:-1::0;;;;;43261:21:0;;;::::1;::::0;;;::::1;::::0;;43191:99::o;43097:86::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;43167:8:::1;::::0;;-1:-1:-1;;43155:20:0;::::1;43167:8;::::0;;;::::1;;;43166:9;43155:20:::0;;::::1;;::::0;;43097:86::o;17545:100::-;17599:13;17632:5;17625:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17545:100;:::o;19238:308::-;19359:7;22133:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22133:16:0;19384:110;;;;-1:-1:-1;;;19384:110:0;;6961:2:1;19384:110:0;;;6943:21:1;7000:2;6980:18;;;6973:30;7039:34;7019:18;;;7012:62;-1:-1:-1;;;7090:18:1;;;7083:42;7142:19;;19384:110:0;6759:408:1;19384:110:0;-1:-1:-1;19514:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;19514:24:0;;19238:308::o;18761:411::-;18842:13;18858:23;18873:7;18858:14;:23::i;:::-;18842:39;;18906:5;-1:-1:-1;;;;;18900:11:0;:2;-1:-1:-1;;;;;18900:11:0;;;18892:57;;;;-1:-1:-1;;;18892:57:0;;7374:2:1;18892:57:0;;;7356:21:1;7413:2;7393:18;;;7386:30;7452:34;7432:18;;;7425:62;-1:-1:-1;;;7503:18:1;;;7496:31;7544:19;;18892:57:0;7172:397:1;18892:57:0;1278:10;-1:-1:-1;;;;;18984:21:0;;;;:62;;-1:-1:-1;19009:37:0;19026:5;1278:10;20016:214;:::i;19009:37::-;18962:168;;;;-1:-1:-1;;;18962:168:0;;7776:2:1;18962:168:0;;;7758:21:1;7815:2;7795:18;;;7788:30;7854:34;7834:18;;;7827:62;7925:26;7905:18;;;7898:54;7969:19;;18962:168:0;7574:420:1;18962:168:0;19143:21;19152:2;19156:7;19143:8;:21::i;:::-;18831:341;18761:411;;:::o;40260:278::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;38393:4:::1;40358:9:::0;40342:13:::1;28014:10:::0;:17;;27926:113;40342:13:::1;:32;;;;:::i;:::-;:47;;40334:70;;;;-1:-1:-1::0;;;40334:70:0::1;;;;;;;:::i;:::-;40420:9;40415:116;40435:20:::0;;::::1;40415:116;;;40477:42;40487:9;;40497:1;40487:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28014:10:::0;:17;40501:13:::1;:17;::::0;40517:1:::1;40501:17;:::i;:::-;40477:9;:42::i;:::-;40457:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40415:116;;20297:376:::0;20506:41;1278:10;20539:7;20506:18;:41::i;:::-;20484:140;;;;-1:-1:-1;;;20484:140:0;;;;;;;:::i;:::-;20637:28;20647:4;20653:2;20657:7;20637:9;:28::i;27507:343::-;27649:7;27704:23;27721:5;27704:16;:23::i;:::-;27696:5;:31;27674:124;;;;-1:-1:-1;;;27674:124:0;;9495:2:1;27674:124:0;;;9477:21:1;9534:2;9514:18;;;9507:30;9573:34;9553:18;;;9546:62;-1:-1:-1;;;9624:18:1;;;9617:41;9675:19;;27674:124:0;9293:407:1;27674:124:0;-1:-1:-1;;;;;;27816:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;27507:343::o;42334:172::-;42392:21;42432:11;42424:20;;;;;;42463:2;;42455:43;;-1:-1:-1;;;;;42463:2:0;;;;42476:21;42455:43;;;;;42463:2;42455:43;42463:2;42455:43;42476:21;42463:2;42455:43;;;;;;;;;;;;;;;;;;;;;42363:143;42334:172::o;20744:185::-;20882:39;20899:4;20905:2;20909:7;20882:39;;;;;;;;;;;;:16;:39::i;42518:247::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;42592:14:::1;42609:13;28014:10:::0;:17;;27926:113;42609:13:::1;42592:30:::0;-1:-1:-1;42660:1:0::1;42643:115;42668:11;42663:1;:16;42643:115;;42713:33;42723:10;42735;42744:1:::0;42735:6;:10:::1;:::i;42713:33::-;42681:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42643:115;;28116:320:::0;28236:7;28291:30;28014:10;:17;;27926:113;28291:30;28283:5;:38;28261:132;;;;-1:-1:-1;;;28261:132:0;;9907:2:1;28261:132:0;;;9889:21:1;9946:2;9926:18;;;9919:30;9985:34;9965:18;;;9958:62;-1:-1:-1;;;10036:18:1;;;10029:42;10088:19;;28261:132:0;9705:408:1;28261:132:0;28411:10;28422:5;28411:17;;;;;;;;:::i;:::-;;;;;;;;;28404:24;;28116:320;;;:::o;43298:104::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;43373:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;17152:326::-:0;17269:7;17310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17310:16:0;17359:19;17337:110;;;;-1:-1:-1;;;17337:110:0;;10320:2:1;17337:110:0;;;10302:21:1;10359:2;10339:18;;;10332:30;10398:34;10378:18;;;10371:62;-1:-1:-1;;;10449:18:1;;;10442:39;10498:19;;17337:110:0;10118:405:1;16795:295:0;16912:7;-1:-1:-1;;;;;16959:19:0;;16937:111;;;;-1:-1:-1;;;16937:111:0;;10730:2:1;16937:111:0;;;10712:21:1;10769:2;10749:18;;;10742:30;10808:34;10788:18;;;10781:62;-1:-1:-1;;;10859:18:1;;;10852:40;10909:19;;16937:111:0;10528:406:1;16937:111:0;-1:-1:-1;;;;;;17066:16:0;;;;;:9;:16;;;;;;;16795:295::o;4648:94::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;4713:21:::1;4731:1;4713:9;:21::i;:::-;4648:94::o:0;42994:95::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;43070:11:::1;::::0;;-1:-1:-1;;43055:26:0;::::1;43070:11;::::0;;::::1;43069:12;43055:26;::::0;;42994:95::o;41206:1120::-;41286:8;;;;;;;41285:9;:24;;;;-1:-1:-1;41298:11:0;;;;41285:24;41277:51;;;;-1:-1:-1;;;41277:51:0;;11141:2:1;41277:51:0;;;11123:21:1;11180:2;11160:18;;;11153:30;-1:-1:-1;;;11199:18:1;;;11192:44;11253:18;;41277:51:0;10939:338:1;41277:51:0;38393:4;41446:13;41424:19;;:35;;;;:::i;:::-;:50;;41416:77;;;;-1:-1:-1;;;41416:77:0;;11484:2:1;41416:77:0;;;11466:21:1;11523:2;11503:18;;;11496:30;-1:-1:-1;;;11542:18:1;;;11535:44;11596:18;;41416:77:0;11282:338:1;41416:77:0;41535:4;41519:13;28014:10;:17;;27926:113;41519:13;:20;41514:472;;;41618:21;;41587:10;41565:33;;;;:21;:33;;;;;;:49;;41601:13;;41565:49;:::i;:::-;:74;;41557:99;;;;-1:-1:-1;;;41557:99:0;;11827:2:1;41557:99:0;;;11809:21:1;11866:2;11846:18;;;11839:30;-1:-1:-1;;;11885:18:1;;;11878:42;11937:18;;41557:99:0;11625:336:1;41557:99:0;41713:9;41679:30;41696:13;38445:10;41679:30;:::i;:::-;:43;;41671:72;;;;-1:-1:-1;;;41671:72:0;;;;;;;:::i;:::-;41514:472;;;41849:21;;41818:10;41796:33;;;;:21;:33;;;;;;:49;;41832:13;;41796:49;:::i;:::-;:74;;41788:99;;;;-1:-1:-1;;;41788:99:0;;11827:2:1;41788:99:0;;;11809:21:1;11866:2;11846:18;;;11839:30;-1:-1:-1;;;11885:18:1;;;11878:42;11937:18;;41788:99:0;11625:336:1;41788:99:0;41944:9;41910:30;41927:13;38503:10;41910:30;:::i;:::-;:43;;41902:72;;;;-1:-1:-1;;;41902:72:0;;;;;;;:::i;:::-;42010:9;42006:196;42029:13;42025:1;:17;42006:196;;;42064:19;:21;;;:19;:21;;;:::i;:::-;;;;-1:-1:-1;;42122:10:0;42100:33;;;;:21;:33;;;;;:35;;;;;;:::i;:::-;;;;;;42150:40;42160:10;42172:13;28014:10;:17;;27926:113;42150:40;42044:3;;;;:::i;:::-;;;;42006:196;;;-1:-1:-1;42241:11:0;;42215:12;;-1:-1:-1;;;;;42241:11:0;42283:3;42266:14;:9;42278:2;42266:14;:::i;:::-;:20;;;;:::i;:::-;42233:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42214:77;;;42310:7;42302:16;;;;;17714:104;17770:13;17803:7;17796:14;;;;;:::i;42911:75::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;42965:6:::1;:13:::0;;-1:-1:-1;;42965:13:0::1;::::0;::::1;::::0;;42911:75::o;19618:327::-;-1:-1:-1;;;;;19753:24:0;;1278:10;19753:24;;19745:62;;;;-1:-1:-1;;;19745:62:0;;13153:2:1;19745:62:0;;;13135:21:1;13192:2;13172:18;;;13165:30;13231:27;13211:18;;;13204:55;13276:18;;19745:62:0;12951:349:1;19745:62:0;1278:10;19820:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;19820:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;19820:53:0;;;;;;;;;;19889:48;;540:41:1;;;19820:42:0;;1278:10;19889:48;;513:18:1;19889:48:0;;;;;;;19618:327;;:::o;21000:365::-;21189:41;1278:10;21222:7;21189:18;:41::i;:::-;21167:140;;;;-1:-1:-1;;;21167:140:0;;;;;;;:::i;:::-;21318:39;21332:4;21338:2;21342:7;21351:5;21318:13;:39::i;:::-;21000:365;;;;:::o;43410:346::-;22109:4;22133:16;;;:7;:16;;;;;;43483:13;;-1:-1:-1;;;;;22133:16:0;43509:60;;;;-1:-1:-1;;;43509:60:0;;13507:2:1;43509:60:0;;;13489:21:1;13546:2;13526:18;;;13519:30;13585:33;13565:18;;;13558:61;13636:18;;43509:60:0;13305:355:1;43509:60:0;43582:28;43613:10;:8;:10::i;:::-;43582:41;;43672:1;43647:14;43641:28;:32;:99;;;;;;;;;;;;;;;;;43700:14;43716:18;:7;:16;:18::i;:::-;43683:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43641:99;43634:106;43410:346;-1:-1:-1;;;43410:346:0:o;40546:652::-;40618:8;;;;;;;40610:32;;;;-1:-1:-1;;;40610:32:0;;14342:2:1;40610:32:0;;;14324:21:1;14381:2;14361:18;;;14354:30;-1:-1:-1;;;14400:18:1;;;14393:41;14451:18;;40610:32:0;14140:335:1;40610:32:0;40662:11;;;;40661:12;40653:37;;;;-1:-1:-1;;;40653:37:0;;14682:2:1;40653:37:0;;;14664:21:1;14721:2;14701:18;;;14694:30;-1:-1:-1;;;14740:18:1;;;14733:42;14792:18;;40653:37:0;14480:336:1;40653:37:0;38393:4;40725:13;40709;28014:10;:17;;27926:113;40709:13;:29;;;;:::i;:::-;:44;;40701:67;;;;-1:-1:-1;;;40701:67:0;;;;;;;:::i;:::-;38634:2;40787:13;:40;;40779:83;;;;-1:-1:-1;;;40779:83:0;;15023:2:1;40779:83:0;;;15005:21:1;15062:2;15042:18;;;15035:30;15101:32;15081:18;;;15074:60;15151:18;;40779:83:0;14821:354:1;40779:83:0;40921:9;40881:36;40904:13;38567:10;40881:36;:::i;:::-;:49;;40873:78;;;;-1:-1:-1;;;40873:78:0;;;;;;;:::i;:::-;40968:9;40964:110;40987:13;40983:1;:17;40964:110;;;41022:40;41032:10;41044:13;28014:10;:17;;27926:113;41022:40;41002:3;;;;:::i;:::-;;;;40964:110;;4897:229;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5000:22:0;::::1;4978:110;;;::::0;-1:-1:-1;;;4978:110:0;;15382:2:1;4978:110:0::1;::::0;::::1;15364:21:1::0;15421:2;15401:18;;;15394:30;15460:34;15440:18;;;15433:62;-1:-1:-1;;;15511:18:1;;;15504:36;15557:19;;4978:110:0::1;15180:402:1::0;4978:110:0::1;5099:19;5109:8;5099:9;:19::i;:::-;4897:229:::0;:::o;39983:269::-;4407:6;;-1:-1:-1;;;;;4407:6:0;1278:10;4554:23;4546:68;;;;-1:-1:-1;;;4546:68:0;;;;;;;:::i;:::-;38393:4:::1;40081:13;40065;28014:10:::0;:17;;27926:113;40065:13:::1;:29;;;;:::i;:::-;:44;;40057:67;;;;-1:-1:-1::0;;;40057:67:0::1;;;;;;;:::i;:::-;40139:9;40135:110;40158:13;40154:1;:17;40135:110;;;40193:40;40203:10;40215:13;28014:10:::0;:17;;27926:113;40193:40:::1;40173:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40135:110;;16376:355:::0;16523:4;-1:-1:-1;;;;;;16565:40:0;;-1:-1:-1;;;16565:40:0;;:105;;-1:-1:-1;;;;;;;16622:48:0;;-1:-1:-1;;;16622:48:0;16565:105;:158;;;-1:-1:-1;;;;;;;;;;6543:40:0;;;16687:36;6384:207;24968:174;25043:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;25043:29:0;-1:-1:-1;;;;;25043:29:0;;;;;;;;:24;;25097:23;25043:24;25097:14;:23::i;:::-;-1:-1:-1;;;;;25088:46:0;;;;;;;;;;;24968:174;;:::o;22801:110::-;22877:26;22887:2;22891:7;22877:26;;;;;;;;;;;;:9;:26::i;22338:452::-;22467:4;22133:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22133:16:0;22489:110;;;;-1:-1:-1;;;22489:110:0;;15789:2:1;22489:110:0;;;15771:21:1;15828:2;15808:18;;;15801:30;15867:34;15847:18;;;15840:62;-1:-1:-1;;;15918:18:1;;;15911:42;15970:19;;22489:110:0;15587:408:1;22489:110:0;22610:13;22626:23;22641:7;22626:14;:23::i;:::-;22610:39;;22679:5;-1:-1:-1;;;;;22668:16:0;:7;-1:-1:-1;;;;;22668:16:0;;:64;;;;22725:7;-1:-1:-1;;;;;22701:31:0;:20;22713:7;22701:11;:20::i;:::-;-1:-1:-1;;;;;22701:31:0;;22668:64;:113;;;-1:-1:-1;;;;;;20187:25:0;;;20158:4;20187:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;22749:32;22660:122;22338:452;-1:-1:-1;;;;22338:452:0:o;24235:615::-;24408:4;-1:-1:-1;;;;;24381:31:0;:23;24396:7;24381:14;:23::i;:::-;-1:-1:-1;;;;;24381:31:0;;24359:122;;;;-1:-1:-1;;;24359:122:0;;16202:2:1;24359:122:0;;;16184:21:1;16241:2;16221:18;;;16214:30;16280:34;16260:18;;;16253:62;-1:-1:-1;;;16331:18:1;;;16324:39;16380:19;;24359:122:0;16000:405:1;24359:122:0;-1:-1:-1;;;;;24500:16:0;;24492:65;;;;-1:-1:-1;;;24492:65:0;;16612:2:1;24492:65:0;;;16594:21:1;16651:2;16631:18;;;16624:30;16690:34;16670:18;;;16663:62;-1:-1:-1;;;16741:18:1;;;16734:34;16785:19;;24492:65:0;16410:400:1;24492:65:0;24570:39;24591:4;24597:2;24601:7;24570:20;:39::i;:::-;24674:29;24691:1;24695:7;24674:8;:29::i;:::-;-1:-1:-1;;;;;24716:15:0;;;;;;:9;:15;;;;;:20;;24735:1;;24716:15;:20;;24735:1;;24716:20;:::i;:::-;;;;-1:-1:-1;;;;;;;24747:13:0;;;;;;:9;:13;;;;;:18;;24764:1;;24747:13;:18;;24764:1;;24747:18;:::i;:::-;;;;-1:-1:-1;;24776:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;24776:21:0;-1:-1:-1;;;;;24776:21:0;;;;;;;;;24815:27;;24776:16;;24815:27;;;;;;;24235:615;;;:::o;5134:173::-;5209:6;;;-1:-1:-1;;;;;5226:17:0;;;-1:-1:-1;;;;;;5226:17:0;;;;;;;5259:40;;5209:6;;;5226:17;5209:6;;5259:40;;5190:16;;5259:40;5179:128;5134:173;:::o;21379:352::-;21536:28;21546:4;21552:2;21556:7;21536:9;:28::i;:::-;21597:48;21620:4;21626:2;21630:7;21639:5;21597:22;:48::i;:::-;21575:148;;;;-1:-1:-1;;;21575:148:0;;;;;;;:::i;39534:108::-;39594:13;39627:7;39620:14;;;;;:::i;6853:723::-;6909:13;7130:10;7126:53;;-1:-1:-1;;7157:10:0;;;;;;;;;;;;-1:-1:-1;;;7157:10:0;;;;;6853:723::o;7126:53::-;7204:5;7189:12;7245:78;7252:9;;7245:78;;7278:8;;;;:::i;:::-;;-1:-1:-1;7301:10:0;;-1:-1:-1;7309:2:0;7301:10;;:::i;:::-;;;7245:78;;;7333:19;7365:6;7355:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7355:17:0;;7333:39;;7383:154;7390:10;;7383:154;;7417:11;7427:1;7417:11;;:::i;:::-;;-1:-1:-1;7486:10:0;7494:2;7486:5;:10;:::i;:::-;7473:24;;:2;:24;:::i;:::-;7460:39;;7443:6;7450;7443:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7443:56:0;;;;;;;;-1:-1:-1;7514:11:0;7523:2;7514:11;;:::i;:::-;;;7383:154;;23138:321;23268:18;23274:2;23278:7;23268:5;:18::i;:::-;23319:54;23350:1;23354:2;23358:7;23367:5;23319:22;:54::i;:::-;23297:154;;;;-1:-1:-1;;;23297:154:0;;;;;;;:::i;28444:589::-;-1:-1:-1;;;;;28650:18:0;;28646:187;;28685:40;28717:7;29860:10;:17;;29833:24;;;;:15;:24;;;;;:44;;;29888:24;;;;;;;;;;;;29756:164;28685:40;28646:187;;;28755:2;-1:-1:-1;;;;;28747:10:0;:4;-1:-1:-1;;;;;28747:10:0;;28743:90;;28774:47;28807:4;28813:7;28774:32;:47::i;:::-;-1:-1:-1;;;;;28847:16:0;;28843:183;;28880:45;28917:7;28880:36;:45::i;28843:183::-;28953:4;-1:-1:-1;;;;;28947:10:0;:2;-1:-1:-1;;;;;28947:10:0;;28943:83;;28974:40;29002:2;29006:7;28974:27;:40::i;25150:984::-;25305:4;-1:-1:-1;;;;;25326:13:0;;9096:20;9144:8;25322:805;;25379:175;;-1:-1:-1;;;25379:175:0;;-1:-1:-1;;;;;25379:36:0;;;;;:175;;1278:10;;25473:4;;25500:7;;25530:5;;25379:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25379:175:0;;;;;;;;-1:-1:-1;;25379:175:0;;;;;;;;;;;;:::i;:::-;;;25358:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25741:13:0;;25737:320;;25784:108;;-1:-1:-1;;;25784:108:0;;;;;;;:::i;25737:320::-;26007:6;26001:13;25992:6;25988:2;25984:15;25977:38;25358:714;-1:-1:-1;;;;;;25618:55:0;-1:-1:-1;;;25618:55:0;;-1:-1:-1;25611:62:0;;25322:805;-1:-1:-1;26111:4:0;25150:984;;;;;;:::o;23470:382::-;-1:-1:-1;;;;;23550:16:0;;23542:61;;;;-1:-1:-1;;;23542:61:0;;18431:2:1;23542:61:0;;;18413:21:1;;;18450:18;;;18443:30;18509:34;18489:18;;;18482:62;18561:18;;23542:61:0;18229:356:1;23542:61:0;22109:4;22133:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22133:16:0;:30;23614:58;;;;-1:-1:-1;;;23614:58:0;;18792:2:1;23614:58:0;;;18774:21:1;18831:2;18811:18;;;18804:30;18870;18850:18;;;18843:58;18918:18;;23614:58:0;18590:352:1;23614:58:0;23685:45;23714:1;23718:2;23722:7;23685:20;:45::i;:::-;-1:-1:-1;;;;;23743:13:0;;;;;;:9;:13;;;;;:18;;23760:1;;23743:13;:18;;23760:1;;23743:18;:::i;:::-;;;;-1:-1:-1;;23772:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;23772:21:0;-1:-1:-1;;;;;23772:21:0;;;;;;;;23811:33;;23772:16;;;23811:33;;23772:16;;23811:33;23470:382;;:::o;29934:1002::-;30214:22;30264:1;30239:22;30256:4;30239:16;:22::i;:::-;:26;;;;:::i;:::-;30276:18;30297:26;;;:17;:26;;;;;;30214:51;;-1:-1:-1;30430:28:0;;;30426:328;;-1:-1:-1;;;;;30497:18:0;;30475:19;30497:18;;;:12;:18;;;;;;;;:34;;;;;;;;;30548:30;;;;;;:44;;;30665:30;;:17;:30;;;;;:43;;;30426:328;-1:-1:-1;30850:26:0;;;;:17;:26;;;;;;;;30843:33;;;-1:-1:-1;;;;;30894:18:0;;;;;:12;:18;;;;;:34;;;;;;;30887:41;29934:1002::o;31231:773::-;31509:10;:17;31484:22;;31509:21;;31529:1;;31509:21;:::i;:::-;31541:18;31562:24;;;:15;:24;;;;;;31629:10;:26;;31484:46;;-1:-1:-1;31562:24:0;;31484:46;;31629:26;;;;;;:::i;:::-;;;;;;;;;31607:48;;31693:11;31668:10;31679;31668:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;31773:28;;;:15;:28;;;;;;;:41;;;31945:24;;;;;31938:31;31980:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31302:702;;;31231:773;:::o;29334:221::-;29419:14;29436:20;29453:2;29436:16;:20::i;:::-;-1:-1:-1;;;;;29467:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;29512:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;29334:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;689:70;592:173;;;:::o;770:186::-;829:6;882:2;870:9;861:7;857:23;853:32;850:52;;;898:1;895;888:12;850:52;921:29;940:9;921:29;:::i;961:258::-;1033:1;1043:113;1057:6;1054:1;1051:13;1043:113;;;1133:11;;;1127:18;1114:11;;;1107:39;1079:2;1072:10;1043:113;;;1174:6;1171:1;1168:13;1165:48;;;-1:-1:-1;;1209:1:1;1191:16;;1184:27;961:258::o;1224:::-;1266:3;1304:5;1298:12;1331:6;1326:3;1319:19;1347:63;1403:6;1396:4;1391:3;1387:14;1380:4;1373:5;1369:16;1347:63;:::i;:::-;1464:2;1443:15;-1:-1:-1;;1439:29:1;1430:39;;;;1471:4;1426:50;;1224:258;-1:-1:-1;;1224:258:1:o;1487:220::-;1636:2;1625:9;1618:21;1599:4;1656:45;1697:2;1686:9;1682:18;1674:6;1656:45;:::i;1712:180::-;1771:6;1824:2;1812:9;1803:7;1799:23;1795:32;1792:52;;;1840:1;1837;1830:12;1792:52;-1:-1:-1;1863:23:1;;1712:180;-1:-1:-1;1712:180:1:o;2105:254::-;2173:6;2181;2234:2;2222:9;2213:7;2209:23;2205:32;2202:52;;;2250:1;2247;2240:12;2202:52;2273:29;2292:9;2273:29;:::i;:::-;2263:39;2349:2;2334:18;;;;2321:32;;-1:-1:-1;;;2105:254:1:o;2364:615::-;2450:6;2458;2511:2;2499:9;2490:7;2486:23;2482:32;2479:52;;;2527:1;2524;2517:12;2479:52;2567:9;2554:23;2596:18;2637:2;2629:6;2626:14;2623:34;;;2653:1;2650;2643:12;2623:34;2691:6;2680:9;2676:22;2666:32;;2736:7;2729:4;2725:2;2721:13;2717:27;2707:55;;2758:1;2755;2748:12;2707:55;2798:2;2785:16;2824:2;2816:6;2813:14;2810:34;;;2840:1;2837;2830:12;2810:34;2893:7;2888:2;2878:6;2875:1;2871:14;2867:2;2863:23;2859:32;2856:45;2853:65;;;2914:1;2911;2904:12;2853:65;2945:2;2937:11;;;;;2967:6;;-1:-1:-1;2364:615:1;;-1:-1:-1;;;;2364:615:1:o;3166:328::-;3243:6;3251;3259;3312:2;3300:9;3291:7;3287:23;3283:32;3280:52;;;3328:1;3325;3318:12;3280:52;3351:29;3370:9;3351:29;:::i;:::-;3341:39;;3399:38;3433:2;3422:9;3418:18;3399:38;:::i;:::-;3389:48;;3484:2;3473:9;3469:18;3456:32;3446:42;;3166:328;;;;;:::o;3499:127::-;3560:10;3555:3;3551:20;3548:1;3541:31;3591:4;3588:1;3581:15;3615:4;3612:1;3605:15;3631:632;3696:5;3726:18;3767:2;3759:6;3756:14;3753:40;;;3773:18;;:::i;:::-;3848:2;3842:9;3816:2;3902:15;;-1:-1:-1;;3898:24:1;;;3924:2;3894:33;3890:42;3878:55;;;3948:18;;;3968:22;;;3945:46;3942:72;;;3994:18;;:::i;:::-;4034:10;4030:2;4023:22;4063:6;4054:15;;4093:6;4085;4078:22;4133:3;4124:6;4119:3;4115:16;4112:25;4109:45;;;4150:1;4147;4140:12;4109:45;4200:6;4195:3;4188:4;4180:6;4176:17;4163:44;4255:1;4248:4;4239:6;4231;4227:19;4223:30;4216:41;;;;3631:632;;;;;:::o;4268:451::-;4337:6;4390:2;4378:9;4369:7;4365:23;4361:32;4358:52;;;4406:1;4403;4396:12;4358:52;4446:9;4433:23;4479:18;4471:6;4468:30;4465:50;;;4511:1;4508;4501:12;4465:50;4534:22;;4587:4;4579:13;;4575:27;-1:-1:-1;4565:55:1;;4616:1;4613;4606:12;4565:55;4639:74;4705:7;4700:2;4687:16;4682:2;4678;4674:11;4639:74;:::i;4724:347::-;4789:6;4797;4850:2;4838:9;4829:7;4825:23;4821:32;4818:52;;;4866:1;4863;4856:12;4818:52;4889:29;4908:9;4889:29;:::i;:::-;4879:39;;4968:2;4957:9;4953:18;4940:32;5015:5;5008:13;5001:21;4994:5;4991:32;4981:60;;5037:1;5034;5027:12;4981:60;5060:5;5050:15;;;4724:347;;;;;:::o;5076:667::-;5171:6;5179;5187;5195;5248:3;5236:9;5227:7;5223:23;5219:33;5216:53;;;5265:1;5262;5255:12;5216:53;5288:29;5307:9;5288:29;:::i;:::-;5278:39;;5336:38;5370:2;5359:9;5355:18;5336:38;:::i;:::-;5326:48;;5421:2;5410:9;5406:18;5393:32;5383:42;;5476:2;5465:9;5461:18;5448:32;5503:18;5495:6;5492:30;5489:50;;;5535:1;5532;5525:12;5489:50;5558:22;;5611:4;5603:13;;5599:27;-1:-1:-1;5589:55:1;;5640:1;5637;5630:12;5589:55;5663:74;5729:7;5724:2;5711:16;5706:2;5702;5698:11;5663:74;:::i;:::-;5653:84;;;5076:667;;;;;;;:::o;5748:260::-;5816:6;5824;5877:2;5865:9;5856:7;5852:23;5848:32;5845:52;;;5893:1;5890;5883:12;5845:52;5916:29;5935:9;5916:29;:::i;:::-;5906:39;;5964:38;5998:2;5987:9;5983:18;5964:38;:::i;:::-;5954:48;;5748:260;;;;;:::o;6013:356::-;6215:2;6197:21;;;6234:18;;;6227:30;6293:34;6288:2;6273:18;;6266:62;6360:2;6345:18;;6013:356::o;6374:380::-;6453:1;6449:12;;;;6496;;;6517:61;;6571:4;6563:6;6559:17;6549:27;;6517:61;6624:2;6616:6;6613:14;6593:18;6590:38;6587:161;;;6670:10;6665:3;6661:20;6658:1;6651:31;6705:4;6702:1;6695:15;6733:4;6730:1;6723:15;6587:161;;6374:380;;;:::o;7999:127::-;8060:10;8055:3;8051:20;8048:1;8041:31;8091:4;8088:1;8081:15;8115:4;8112:1;8105:15;8131:128;8171:3;8202:1;8198:6;8195:1;8192:13;8189:39;;;8208:18;;:::i;:::-;-1:-1:-1;8244:9:1;;8131:128::o;8264:334::-;8466:2;8448:21;;;8505:2;8485:18;;;8478:30;-1:-1:-1;;;8539:2:1;8524:18;;8517:40;8589:2;8574:18;;8264:334::o;8603:127::-;8664:10;8659:3;8655:20;8652:1;8645:31;8695:4;8692:1;8685:15;8719:4;8716:1;8709:15;8735:135;8774:3;-1:-1:-1;;8795:17:1;;8792:43;;;8815:18;;:::i;:::-;-1:-1:-1;8862:1:1;8851:13;;8735:135::o;8875:413::-;9077:2;9059:21;;;9116:2;9096:18;;;9089:30;9155:34;9150:2;9135:18;;9128:62;-1:-1:-1;;;9221:2:1;9206:18;;9199:47;9278:3;9263:19;;8875:413::o;11966:168::-;12006:7;12072:1;12068;12064:6;12060:14;12057:1;12054:21;12049:1;12042:9;12035:17;12031:45;12028:71;;;12079:18;;:::i;:::-;-1:-1:-1;12119:9:1;;11966:168::o;12139:340::-;12341:2;12323:21;;;12380:2;12360:18;;;12353:30;-1:-1:-1;;;12414:2:1;12399:18;;12392:46;12470:2;12455:18;;12139:340::o;12484:127::-;12545:10;12540:3;12536:20;12533:1;12526:31;12576:4;12573:1;12566:15;12600:4;12597:1;12590:15;12616:120;12656:1;12682;12672:35;;12687:18;;:::i;:::-;-1:-1:-1;12721:9:1;;12616:120::o;13665:470::-;13844:3;13882:6;13876:13;13898:53;13944:6;13939:3;13932:4;13924:6;13920:17;13898:53;:::i;:::-;14014:13;;13973:16;;;;14036:57;14014:13;13973:16;14070:4;14058:17;;14036:57;:::i;:::-;14109:20;;13665:470;-1:-1:-1;;;;13665:470:1:o;16815:125::-;16855:4;16883:1;16880;16877:8;16874:34;;;16888:18;;:::i;:::-;-1:-1:-1;16925:9:1;;16815:125::o;16945:414::-;17147:2;17129:21;;;17186:2;17166:18;;;17159:30;17225:34;17220:2;17205:18;;17198:62;-1:-1:-1;;;17291:2:1;17276:18;;17269:48;17349:3;17334:19;;16945:414::o;17364:112::-;17396:1;17422;17412:35;;17427:18;;:::i;:::-;-1:-1:-1;17461:9:1;;17364:112::o;17481:489::-;-1:-1:-1;;;;;17750:15:1;;;17732:34;;17802:15;;17797:2;17782:18;;17775:43;17849:2;17834:18;;17827:34;;;17897:3;17892:2;17877:18;;17870:31;;;17675:4;;17918:46;;17944:19;;17936:6;17918:46;:::i;:::-;17910:54;17481:489;-1:-1:-1;;;;;;17481:489:1:o;17975:249::-;18044:6;18097:2;18085:9;18076:7;18072:23;18068:32;18065:52;;;18113:1;18110;18103:12;18065:52;18145:9;18139:16;18164:30;18188:5;18164:30;:::i;18947:127::-;19008:10;19003:3;18999:20;18996:1;18989:31;19039:4;19036:1;19029:15;19063:4;19060:1;19053:15

Swarm Source

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