ETH Price: $3,520.73 (+0.42%)
Gas: 1 Gwei

Token

Wonkey Donkey (WD)
 

Overview

Max Total Supply

3,532 WD

Holders

463

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
6 WD
0x2cd63166ec77b6028e0aaf03353dfff335c14c77
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:
WonkeyDonkey

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-19
*/

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.4;

// Deployed by @CryptoSamurai031 - Telegram user

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    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);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    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);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

    /**
     * @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);
}


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

        return account.code.length > 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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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

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


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


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


// 721A made by Chiru Labs

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
    }

    // Compiler will pack the following 
    // _currentIndex and _burnCounter into a single 256bit word.
    
    // The tokenId of the next token to be minted.
    uint128 internal _currentIndex;

    // The number of tokens burned.
    uint128 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;    
        }
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (!ownership.burned) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }
        revert TokenIndexOutOfBounds();
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        revert();
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant: 
                    // There will always be an ownership that has an address and is not burned 
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _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 {
        _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 {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = uint128(updatedIndex);
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked { 
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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 TransferToNonERC721ReceiverImplementer();
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

contract WonkeyDonkey is ERC721A, Ownable {
    using Strings for uint256;

    uint256 public maxNfts = 10000;

    uint256 public maxBatch = 5;
    uint256 public price = 120000000000000000;
    uint256 public maxFree = 1000;
    uint256 public freeMinted;

    string private baseURI;
    string public hiddenURI;
    string public contractMetadata;

    bool public publicStart;
    bool public whitelistStart;
    bool public freeStart;

    bool private revealed;

    mapping(address => bool) public whitelist;
    mapping(address => uint256) public freeList;

    constructor(string memory name_, string memory symbol_, string memory hiddenURI_) ERC721A(name_, symbol_) {
        hiddenURI = hiddenURI_;
    }

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

    function setBaseURI(string memory _newURI) external onlyOwner {
        baseURI = _newURI;
    }

    function setMaxBatch(uint256 amount) external onlyOwner {
        maxBatch = amount;
    }

    function setHiddenURI(string memory _newHiddenURI) external onlyOwner {
        hiddenURI = _newHiddenURI;
    }

    function setContractMetadataURI(string memory _newURI) external onlyOwner {
        contractMetadata = _newURI;
    }

    ///@dev price in wei
    function setPrice(uint256 price_) external onlyOwner {
        price = price_;
    }

    function reveal() external onlyOwner {
        revealed = true;
    }

    function contractURI() public view returns (string memory) {
        return contractMetadata;
    }

    function toggleWhitelist(address account, bool enable) external onlyOwner {
        whitelist[account] = enable;
    }

    function bulkWhitelist(address[] calldata accounts) external onlyOwner {
        uint256 length = accounts.length;
        for(uint256 i = 0; i < length; i++) {
            whitelist[accounts[i]] = true;
        }
    }

    function setFreeList(address account, uint256 number) external onlyOwner {
        freeList[account] = number;
    }

    function bulkFreeList(address[] calldata accounts, uint256[] calldata quantities) external onlyOwner {
        uint256 length = accounts.length;
        require(length == quantities.length, "Arrays length must be equal");
        for(uint256 i = 0; i < length; i++) {
            freeList[accounts[i]] = quantities[i];
        }
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token.");

        if(revealed == false) {
            return hiddenURI;
        }

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

    function setPublicStart(bool enable) external onlyOwner {
        publicStart = enable;
    }

    function setWhitelistStart(bool enable) external onlyOwner {
        whitelistStart = enable;
    }

    function setFreeStart(bool enable) external onlyOwner {
        freeStart = enable;
    }

    function tokensOfOwner(address owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 count = balanceOf(owner);
        uint256[] memory ids = new uint256[](count);
        for (uint256 i = 0; i < count; i++) {
            ids[i] = tokenOfOwnerByIndex(owner, i);
        }
        return ids;
    }

    function publicMint(uint256 _times) external payable {
        require(publicStart, "public mint not started");
        require(_times > 0 && _times <= maxBatch, "must mint fewer in each batch");
        require(totalSupply() + _times <= maxNfts, "max supply reached!");
        require(msg.value == _times * price, "value error, please check price.");

        _safeMint(_msgSender(), _times);
    }

    function whitelistMint(uint256 _times) external payable {
        require(whitelistStart, "whitelist not started");
        require(whitelist[_msgSender()], "not whitelisted");
        require(_times > 0 && _times <= maxBatch, "must mint fewer in each batch");
        require(totalSupply() + _times <= maxNfts, "max supply reached!");
        require(msg.value == _times * price, "value error, please check price.");

        _safeMint(_msgSender(), _times);
    }

    function freeMint(uint256 _times) external {
        require(freeStart, "free mint not started");
        address account = _msgSender();
        require(freeList[account] >= _times, "exceed free mint amount");
        require(_times > 0 && _times <= maxBatch, "must mint fewer in each batch");
        require(totalSupply() + _times <= maxNfts, "max supply reached!");
        require(freeMinted + _times <= maxFree, "max free supply reached!");

        freeMinted += _times;
        freeList[account] -= _times;
        _safeMint(account, _times);
    }

    function withdrawEth(uint256 weiAmount) external onlyOwner {
        (bool sent, ) = payable(_msgSender()).call{value: weiAmount}("");
        require(sent, "Failed to withdraw");
    }

    /// @dev amount on token decimals
    function withdrawToken(address tokenAddress, uint256 amount) external onlyOwner {
        IERC20(tokenAddress).transfer(_msgSender(), amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"hiddenURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"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":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"bulkFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"bulkWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractMetadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setContractMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFreeStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newHiddenURI","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setPublicStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setWhitelistStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleWhitelist","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261271060085560056009556701aa535d3d0c0000600a556103e8600b553480156200002e57600080fd5b5060405162002e7a38038062002e7a83398101604081905262000051916200026b565b8251839083906200006a90600190602085019062000112565b5080516200008090600290602084019062000112565b5050506200009d62000097620000bc60201b60201c565b620000c0565b8051620000b290600e90602084019062000112565b505050506200034b565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012090620002f8565b90600052602060002090601f0160209004810192826200014457600085556200018f565b82601f106200015f57805160ff19168380011785556200018f565b828001600101855582156200018f579182015b828111156200018f57825182559160200191906001019062000172565b506200019d929150620001a1565b5090565b5b808211156200019d5760008155600101620001a2565b600082601f830112620001c9578081fd5b81516001600160401b0380821115620001e657620001e662000335565b604051601f8301601f19908116603f0116810190828211818310171562000211576200021162000335565b816040528381526020925086838588010111156200022d578485fd5b8491505b8382101562000250578582018301518183018401529082019062000231565b838211156200026157848385830101525b9695505050505050565b60008060006060848603121562000280578283fd5b83516001600160401b038082111562000297578485fd5b620002a587838801620001b8565b94506020860151915080821115620002bb578384fd5b620002c987838801620001b8565b93506040860151915080821115620002df578283fd5b50620002ee86828701620001b8565b9150509250925092565b600181811c908216806200030d57607f821691505b602082108114156200032f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612b1f806200035b6000396000f3fe6080604052600436106102e85760003560e01c80638cc54e7f11610190578063a5f4c6ff116100dc578063c311d04911610095578063e8a3d4851161006f578063e8a3d485146108a6578063e985e9c5146108bb578063f2fde38b14610904578063f73b55411461092457600080fd5b8063c311d04914610850578063c87b56dd14610870578063d10a1a2b1461089057600080fd5b8063a5f4c6ff146107a1578063a76b4d56146107bb578063ae205500146107d0578063af406fba146107f0578063b88d4fde14610810578063bbaac02f1461083057600080fd5b80639a30d02111610149578063a035b1fe11610123578063a035b1fe14610736578063a201fc501461074c578063a22cb4651461076c578063a475b5dd1461078c57600080fd5b80639a30d021146106c65780639b19251a146106e65780639e281a981461071657600080fd5b80638cc54e7f146106295780638da5cb5b1461063e57806391b7f5ed1461065c57806393f344c11461067c57806395d89b4114610692578063994d3969146106a757600080fd5b8063349123d11161024f57806364feb7ca11610208578063715018a6116101e2578063715018a6146105b45780637c928fe9146105c95780638462151c146105e9578063868ff4a21461061657600080fd5b806364feb7ca1461055e57806367765b871461057e57806370a082311461059457600080fd5b8063349123d1146104a857806342842e0e146104c8578063485a68a3146104e85780634f6ccce7146104fe57806355f804b31461051e5780636352211e1461053e57600080fd5b806318160ddd116102a157806318160ddd146103e557806323b872dd1461040857806327db591e146104285780632db11544146104555780632f745c5914610468578063300b23d81461048857600080fd5b806301d98a03146102f457806301ffc9a71461031657806306fdde031461034b578063081812fc1461036d578063095ea7b3146103a55780630e8c4bf2146103c557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612722565b610944565b005b34801561032257600080fd5b506103366103313660046127c2565b610a66565b60405190151581526020015b60405180910390f35b34801561035757600080fd5b50610360610ad3565b6040516103429190612943565b34801561037957600080fd5b5061038d61038836600461283f565b610b65565b6040516001600160a01b039091168152602001610342565b3480156103b157600080fd5b506103146103c03660046126ba565b610ba9565b3480156103d157600080fd5b506103146103e036600461278a565b610c37565b3480156103f157600080fd5b506103fa610c7d565b604051908152602001610342565b34801561041457600080fd5b506103146104233660046125d1565b610c9c565b34801561043457600080fd5b506103fa610443366004612585565b60126020526000908152604090205481565b61031461046336600461283f565b610ca7565b34801561047457600080fd5b506103fa6104833660046126ba565b610e19565b34801561049457600080fd5b506103146104a336600461283f565b610f15565b3480156104b457600080fd5b506103146104c3366004612684565b610f44565b3480156104d457600080fd5b506103146104e33660046125d1565b610f99565b3480156104f457600080fd5b506103fa600b5481565b34801561050a57600080fd5b506103fa61051936600461283f565b610fb4565b34801561052a57600080fd5b506103146105393660046127fa565b61105e565b34801561054a57600080fd5b5061038d61055936600461283f565b61109f565b34801561056a57600080fd5b5061031461057936600461278a565b6110b1565b34801561058a57600080fd5b506103fa60095481565b3480156105a057600080fd5b506103fa6105af366004612585565b6110ee565b3480156105c057600080fd5b5061031461113c565b3480156105d557600080fd5b506103146105e436600461283f565b611172565b3480156105f557600080fd5b50610609610604366004612585565b611387565b60405161034291906128ff565b61031461062436600461283f565b611444565b34801561063557600080fd5b506103606114e4565b34801561064a57600080fd5b506007546001600160a01b031661038d565b34801561066857600080fd5b5061031461067736600461283f565b611572565b34801561068857600080fd5b506103fa60085481565b34801561069e57600080fd5b506103606115a1565b3480156106b357600080fd5b5060105461033690610100900460ff1681565b3480156106d257600080fd5b506103146106e136600461278a565b6115b0565b3480156106f257600080fd5b50610336610701366004612585565b60116020526000908152604090205460ff1681565b34801561072257600080fd5b506103146107313660046126ba565b6115f4565b34801561074257600080fd5b506103fa600a5481565b34801561075857600080fd5b506103146107673660046127fa565b6116ae565b34801561077857600080fd5b50610314610787366004612684565b6116eb565b34801561079857600080fd5b50610314611781565b3480156107ad57600080fd5b506010546103369060ff1681565b3480156107c757600080fd5b506103606117c0565b3480156107dc57600080fd5b506103146107eb3660046126ba565b6117cd565b3480156107fc57600080fd5b506010546103369062010000900460ff1681565b34801561081c57600080fd5b5061031461082b36600461260c565b611813565b34801561083c57600080fd5b5061031461084b3660046127fa565b61184d565b34801561085c57600080fd5b5061031461086b36600461283f565b61188a565b34801561087c57600080fd5b5061036061088b36600461283f565b611941565b34801561089c57600080fd5b506103fa600c5481565b3480156108b257600080fd5b50610360611abe565b3480156108c757600080fd5b506103366108d636600461259f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561091057600080fd5b5061031461091f366004612585565b611acd565b34801561093057600080fd5b5061031461093f3660046126e3565b611b65565b6007546001600160a01b031633146109775760405162461bcd60e51b815260040161096e90612956565b60405180910390fd5b828181146109c75760405162461bcd60e51b815260206004820152601b60248201527f417272617973206c656e677468206d75737420626520657175616c0000000000604482015260640161096e565b60005b81811015610a5e578383828181106109f257634e487b7160e01b600052603260045260246000fd5b9050602002013560126000888885818110610a1d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a329190612585565b6001600160a01b0316815260208101919091526040016000205580610a5681612a54565b9150506109ca565b505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610a9757506001600160e01b03198216635b5e139f60e01b145b80610ab257506001600160e01b0319821663780e9d6360e01b145b80610acd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610ae290612a19565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90612a19565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b6000610b7082611c10565b610b8d576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610bb48261109f565b9050806001600160a01b0316836001600160a01b03161415610be95760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610c095750610c0781336108d6565b155b15610c27576040516367d9dca160e11b815260040160405180910390fd5b610c32838383611c44565b505050565b6007546001600160a01b03163314610c615760405162461bcd60e51b815260040161096e90612956565b60108054911515620100000262ff000019909216919091179055565b6000546001600160801b03600160801b82048116918116919091031690565b610c32838383611ca0565b60105460ff16610cf95760405162461bcd60e51b815260206004820152601760248201527f7075626c6963206d696e74206e6f742073746172746564000000000000000000604482015260640161096e565b600081118015610d0b57506009548111155b610d575760405162461bcd60e51b815260206004820152601d60248201527f6d757374206d696e7420666577657220696e2065616368206261746368000000604482015260640161096e565b60085481610d63610c7d565b610d6d919061298b565b1115610db15760405162461bcd60e51b81526020600482015260136024820152726d617820737570706c7920726561636865642160681b604482015260640161096e565b600a54610dbe90826129b7565b3414610e0c5760405162461bcd60e51b815260206004820181905260248201527f76616c7565206572726f722c20706c6561736520636865636b2070726963652e604482015260640161096e565b610e163382611ebd565b50565b6000610e24836110ee565b8210610e43576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b83811015610f0f57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282019290925290610ebb5750610f07565b80516001600160a01b031615610ed057805192505b876001600160a01b0316836001600160a01b03161415610f055786841415610efe57509350610acd92505050565b6001909301925b505b600101610e54565b50600080fd5b6007546001600160a01b03163314610f3f5760405162461bcd60e51b815260040161096e90612956565b600955565b6007546001600160a01b03163314610f6e5760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610c3283838360405180602001604052806000815250611813565b600080546001600160801b031681805b8281101561104457600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061103b57858314156110345750949350505050565b6001909201915b50600101610fc4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b031633146110885760405162461bcd60e51b815260040161096e90612956565b805161109b90600d906020840190612412565b5050565b60006110aa82611ed7565b5192915050565b6007546001600160a01b031633146110db5760405162461bcd60e51b815260040161096e90612956565b6010805460ff1916911515919091179055565b60006001600160a01b038216611117576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b031633146111665760405162461bcd60e51b815260040161096e90612956565b6111706000611ff9565b565b60105462010000900460ff166111c25760405162461bcd60e51b8152602060048201526015602482015274199c9959481b5a5b9d081b9bdd081cdd185c9d1959605a1b604482015260640161096e565b336000818152601260205260409020548211156112215760405162461bcd60e51b815260206004820152601760248201527f6578636565642066726565206d696e7420616d6f756e74000000000000000000604482015260640161096e565b60008211801561123357506009548211155b61127f5760405162461bcd60e51b815260206004820152601d60248201527f6d757374206d696e7420666577657220696e2065616368206261746368000000604482015260640161096e565b6008548261128b610c7d565b611295919061298b565b11156112d95760405162461bcd60e51b81526020600482015260136024820152726d617820737570706c7920726561636865642160681b604482015260640161096e565b600b5482600c546112ea919061298b565b11156113385760405162461bcd60e51b815260206004820152601860248201527f6d6178206672656520737570706c792072656163686564210000000000000000604482015260640161096e565b81600c600082825461134a919061298b565b90915550506001600160a01b038116600090815260126020526040812080548492906113779084906129d6565b9091555061109b90508183611ebd565b60606000611394836110ee565b90506000816001600160401b038111156113be57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113e7578160200160208202803683370190505b50905060005b8281101561143c576113ff8582610e19565b82828151811061141f57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061143481612a54565b9150506113ed565b509392505050565b601054610100900460ff166114935760405162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081b9bdd081cdd185c9d1959605a1b604482015260640161096e565b3360009081526011602052604090205460ff16610cf95760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161096e565b600e80546114f190612a19565b80601f016020809104026020016040519081016040528092919081815260200182805461151d90612a19565b801561156a5780601f1061153f5761010080835404028352916020019161156a565b820191906000526020600020905b81548152906001019060200180831161154d57829003601f168201915b505050505081565b6007546001600160a01b0316331461159c5760405162461bcd60e51b815260040161096e90612956565b600a55565b606060028054610ae290612a19565b6007546001600160a01b031633146115da5760405162461bcd60e51b815260040161096e90612956565b601080549115156101000261ff0019909216919091179055565b6007546001600160a01b0316331461161e5760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561167657600080fd5b505af115801561168a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3291906127a6565b6007546001600160a01b031633146116d85760405162461bcd60e51b815260040161096e90612956565b805161109b90600f906020840190612412565b6001600160a01b0382163314156117155760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146117ab5760405162461bcd60e51b815260040161096e90612956565b6010805463ff00000019166301000000179055565b600f80546114f190612a19565b6007546001600160a01b031633146117f75760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03909116600090815260126020526040902055565b61181e848484611ca0565b61182a8484848461204b565b611847576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b031633146118775760405162461bcd60e51b815260040161096e90612956565b805161109b90600e906020840190612412565b6007546001600160a01b031633146118b45760405162461bcd60e51b815260040161096e90612956565b604051600090339083908381818185875af1925050503d80600081146118f6576040519150601f19603f3d011682016040523d82523d6000602084013e6118fb565b606091505b505090508061109b5760405162461bcd60e51b81526020600482015260126024820152714661696c656420746f20776974686472617760701b604482015260640161096e565b606061194c82611c10565b6119b15760405162461bcd60e51b815260206004820152603060248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526f3732bc34b9ba32b73a103a37b5b2b71760811b606482015260840161096e565b6010546301000000900460ff16611a5457600e80546119cf90612a19565b80601f01602080910402602001604051908101604052809291908181526020018280546119fb90612a19565b8015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b50505050509050919050565b6000611a5e61215a565b90506000815111611a8c5760405180604001604052806005815260200164173539b7b760d91b815250611ab7565b80611a9684612169565b604051602001611aa7929190612883565b6040516020818303038152906040525b9392505050565b6060600f8054610ae290612a19565b6007546001600160a01b03163314611af75760405162461bcd60e51b815260040161096e90612956565b6001600160a01b038116611b5c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b610e1681611ff9565b6007546001600160a01b03163314611b8f5760405162461bcd60e51b815260040161096e90612956565b8060005b8181101561184757600160116000868685818110611bc157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611bd69190612585565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c0881612a54565b915050611b93565b600080546001600160801b031682108015610acd575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611cab82611ed7565b80519091506000906001600160a01b0316336001600160a01b03161480611cd957508151611cd990336108d6565b80611cf4575033611ce984610b65565b6001600160a01b0316145b905080611d1457604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614611d495760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611d7057604051633a954ecd60e21b815260040160405180910390fd5b611d806000848460000151611c44565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116611e73576000546001600160801b0316811015611e7357825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61109b828260405180602001604052806000815250612282565b60408051606081018252600080825260208201819052918101829052905482906001600160801b0316811015611fe057600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611fde5780516001600160a01b031615611f75579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611fd9579392505050565b611f75565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561214e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061208f9033908990889088906004016128c2565b602060405180830381600087803b1580156120a957600080fd5b505af19250505080156120d9575060408051601f3d908101601f191682019092526120d6918101906127de565b60015b612134573d808015612107576040519150601f19603f3d011682016040523d82523d6000602084013e61210c565b606091505b50805161212c576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612152565b5060015b949350505050565b6060600d8054610ae290612a19565b60608161218d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121b757806121a181612a54565b91506121b09050600a836129a3565b9150612191565b6000816001600160401b038111156121df57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612209576020820181803683370190505b5090505b84156121525761221e6001836129d6565b915061222b600a86612a6f565b61223690603061298b565b60f81b81838151811061225957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061227b600a866129a3565b945061220d565b610c3283838360016000546001600160801b03166001600160a01b0385166122bc57604051622e076360e81b815260040160405180910390fd5b836122da5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156123ec5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48380156123c257506123c0600088848861204b565b155b156123e0576040516368d2bf6b60e11b815260040160405180910390fd5b6001918201910161236b565b50600080546001600160801b0319166001600160801b0392909216919091179055611eb6565b82805461241e90612a19565b90600052602060002090601f0160209004810192826124405760008555612486565b82601f1061245957805160ff1916838001178555612486565b82800160010185558215612486579182015b8281111561248657825182559160200191906001019061246b565b50612492929150612496565b5090565b5b808211156124925760008155600101612497565b60006001600160401b03808411156124c5576124c5612aaf565b604051601f8501601f19908116603f011681019082821181831017156124ed576124ed612aaf565b8160405280935085815286868601111561250657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461253757600080fd5b919050565b60008083601f84011261254d578081fd5b5081356001600160401b03811115612563578182fd5b6020830191508360208260051b850101111561257e57600080fd5b9250929050565b600060208284031215612596578081fd5b611ab782612520565b600080604083850312156125b1578081fd5b6125ba83612520565b91506125c860208401612520565b90509250929050565b6000806000606084860312156125e5578081fd5b6125ee84612520565b92506125fc60208501612520565b9150604084013590509250925092565b60008060008060808587031215612621578081fd5b61262a85612520565b935061263860208601612520565b92506040850135915060608501356001600160401b03811115612659578182fd5b8501601f81018713612669578182fd5b612678878235602084016124ab565b91505092959194509250565b60008060408385031215612696578182fd5b61269f83612520565b915060208301356126af81612ac5565b809150509250929050565b600080604083850312156126cc578182fd5b6126d583612520565b946020939093013593505050565b600080602083850312156126f5578182fd5b82356001600160401b0381111561270a578283fd5b6127168582860161253c565b90969095509350505050565b60008060008060408587031215612737578384fd5b84356001600160401b038082111561274d578586fd5b6127598883890161253c565b90965094506020870135915080821115612771578384fd5b5061277e8782880161253c565b95989497509550505050565b60006020828403121561279b578081fd5b8135611ab781612ac5565b6000602082840312156127b7578081fd5b8151611ab781612ac5565b6000602082840312156127d3578081fd5b8135611ab781612ad3565b6000602082840312156127ef578081fd5b8151611ab781612ad3565b60006020828403121561280b578081fd5b81356001600160401b03811115612820578182fd5b8201601f81018413612830578182fd5b612152848235602084016124ab565b600060208284031215612850578081fd5b5035919050565b6000815180845261286f8160208601602086016129ed565b601f01601f19169290920160200192915050565b600083516128958184602088016129ed565b8351908301906128a98183602088016129ed565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f590830184612857565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129375783518352928401929184019160010161291b565b50909695505050505050565b602081526000611ab76020830184612857565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561299e5761299e612a83565b500190565b6000826129b2576129b2612a99565b500490565b60008160001904831182151516156129d1576129d1612a83565b500290565b6000828210156129e8576129e8612a83565b500390565b60005b83811015612a085781810151838201526020016129f0565b838111156118475750506000910152565b600181811c90821680612a2d57607f821691505b60208210811415612a4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a6857612a68612a83565b5060010190565b600082612a7e57612a7e612a99565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e1657600080fd5b6001600160e01b031981168114610e1657600080fdfea2646970667358221220a74bac75383fe4a4889c0225c53122aa0730b94701399191833b5df7229c032564736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d576f6e6b657920446f6e6b657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000257440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d593976364a4c59394e7753325733513868673976673852596231756874644537584b39774c355537414674410000000000000000000000

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80638cc54e7f11610190578063a5f4c6ff116100dc578063c311d04911610095578063e8a3d4851161006f578063e8a3d485146108a6578063e985e9c5146108bb578063f2fde38b14610904578063f73b55411461092457600080fd5b8063c311d04914610850578063c87b56dd14610870578063d10a1a2b1461089057600080fd5b8063a5f4c6ff146107a1578063a76b4d56146107bb578063ae205500146107d0578063af406fba146107f0578063b88d4fde14610810578063bbaac02f1461083057600080fd5b80639a30d02111610149578063a035b1fe11610123578063a035b1fe14610736578063a201fc501461074c578063a22cb4651461076c578063a475b5dd1461078c57600080fd5b80639a30d021146106c65780639b19251a146106e65780639e281a981461071657600080fd5b80638cc54e7f146106295780638da5cb5b1461063e57806391b7f5ed1461065c57806393f344c11461067c57806395d89b4114610692578063994d3969146106a757600080fd5b8063349123d11161024f57806364feb7ca11610208578063715018a6116101e2578063715018a6146105b45780637c928fe9146105c95780638462151c146105e9578063868ff4a21461061657600080fd5b806364feb7ca1461055e57806367765b871461057e57806370a082311461059457600080fd5b8063349123d1146104a857806342842e0e146104c8578063485a68a3146104e85780634f6ccce7146104fe57806355f804b31461051e5780636352211e1461053e57600080fd5b806318160ddd116102a157806318160ddd146103e557806323b872dd1461040857806327db591e146104285780632db11544146104555780632f745c5914610468578063300b23d81461048857600080fd5b806301d98a03146102f457806301ffc9a71461031657806306fdde031461034b578063081812fc1461036d578063095ea7b3146103a55780630e8c4bf2146103c557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612722565b610944565b005b34801561032257600080fd5b506103366103313660046127c2565b610a66565b60405190151581526020015b60405180910390f35b34801561035757600080fd5b50610360610ad3565b6040516103429190612943565b34801561037957600080fd5b5061038d61038836600461283f565b610b65565b6040516001600160a01b039091168152602001610342565b3480156103b157600080fd5b506103146103c03660046126ba565b610ba9565b3480156103d157600080fd5b506103146103e036600461278a565b610c37565b3480156103f157600080fd5b506103fa610c7d565b604051908152602001610342565b34801561041457600080fd5b506103146104233660046125d1565b610c9c565b34801561043457600080fd5b506103fa610443366004612585565b60126020526000908152604090205481565b61031461046336600461283f565b610ca7565b34801561047457600080fd5b506103fa6104833660046126ba565b610e19565b34801561049457600080fd5b506103146104a336600461283f565b610f15565b3480156104b457600080fd5b506103146104c3366004612684565b610f44565b3480156104d457600080fd5b506103146104e33660046125d1565b610f99565b3480156104f457600080fd5b506103fa600b5481565b34801561050a57600080fd5b506103fa61051936600461283f565b610fb4565b34801561052a57600080fd5b506103146105393660046127fa565b61105e565b34801561054a57600080fd5b5061038d61055936600461283f565b61109f565b34801561056a57600080fd5b5061031461057936600461278a565b6110b1565b34801561058a57600080fd5b506103fa60095481565b3480156105a057600080fd5b506103fa6105af366004612585565b6110ee565b3480156105c057600080fd5b5061031461113c565b3480156105d557600080fd5b506103146105e436600461283f565b611172565b3480156105f557600080fd5b50610609610604366004612585565b611387565b60405161034291906128ff565b61031461062436600461283f565b611444565b34801561063557600080fd5b506103606114e4565b34801561064a57600080fd5b506007546001600160a01b031661038d565b34801561066857600080fd5b5061031461067736600461283f565b611572565b34801561068857600080fd5b506103fa60085481565b34801561069e57600080fd5b506103606115a1565b3480156106b357600080fd5b5060105461033690610100900460ff1681565b3480156106d257600080fd5b506103146106e136600461278a565b6115b0565b3480156106f257600080fd5b50610336610701366004612585565b60116020526000908152604090205460ff1681565b34801561072257600080fd5b506103146107313660046126ba565b6115f4565b34801561074257600080fd5b506103fa600a5481565b34801561075857600080fd5b506103146107673660046127fa565b6116ae565b34801561077857600080fd5b50610314610787366004612684565b6116eb565b34801561079857600080fd5b50610314611781565b3480156107ad57600080fd5b506010546103369060ff1681565b3480156107c757600080fd5b506103606117c0565b3480156107dc57600080fd5b506103146107eb3660046126ba565b6117cd565b3480156107fc57600080fd5b506010546103369062010000900460ff1681565b34801561081c57600080fd5b5061031461082b36600461260c565b611813565b34801561083c57600080fd5b5061031461084b3660046127fa565b61184d565b34801561085c57600080fd5b5061031461086b36600461283f565b61188a565b34801561087c57600080fd5b5061036061088b36600461283f565b611941565b34801561089c57600080fd5b506103fa600c5481565b3480156108b257600080fd5b50610360611abe565b3480156108c757600080fd5b506103366108d636600461259f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561091057600080fd5b5061031461091f366004612585565b611acd565b34801561093057600080fd5b5061031461093f3660046126e3565b611b65565b6007546001600160a01b031633146109775760405162461bcd60e51b815260040161096e90612956565b60405180910390fd5b828181146109c75760405162461bcd60e51b815260206004820152601b60248201527f417272617973206c656e677468206d75737420626520657175616c0000000000604482015260640161096e565b60005b81811015610a5e578383828181106109f257634e487b7160e01b600052603260045260246000fd5b9050602002013560126000888885818110610a1d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a329190612585565b6001600160a01b0316815260208101919091526040016000205580610a5681612a54565b9150506109ca565b505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610a9757506001600160e01b03198216635b5e139f60e01b145b80610ab257506001600160e01b0319821663780e9d6360e01b145b80610acd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610ae290612a19565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90612a19565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b6000610b7082611c10565b610b8d576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610bb48261109f565b9050806001600160a01b0316836001600160a01b03161415610be95760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610c095750610c0781336108d6565b155b15610c27576040516367d9dca160e11b815260040160405180910390fd5b610c32838383611c44565b505050565b6007546001600160a01b03163314610c615760405162461bcd60e51b815260040161096e90612956565b60108054911515620100000262ff000019909216919091179055565b6000546001600160801b03600160801b82048116918116919091031690565b610c32838383611ca0565b60105460ff16610cf95760405162461bcd60e51b815260206004820152601760248201527f7075626c6963206d696e74206e6f742073746172746564000000000000000000604482015260640161096e565b600081118015610d0b57506009548111155b610d575760405162461bcd60e51b815260206004820152601d60248201527f6d757374206d696e7420666577657220696e2065616368206261746368000000604482015260640161096e565b60085481610d63610c7d565b610d6d919061298b565b1115610db15760405162461bcd60e51b81526020600482015260136024820152726d617820737570706c7920726561636865642160681b604482015260640161096e565b600a54610dbe90826129b7565b3414610e0c5760405162461bcd60e51b815260206004820181905260248201527f76616c7565206572726f722c20706c6561736520636865636b2070726963652e604482015260640161096e565b610e163382611ebd565b50565b6000610e24836110ee565b8210610e43576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b83811015610f0f57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282019290925290610ebb5750610f07565b80516001600160a01b031615610ed057805192505b876001600160a01b0316836001600160a01b03161415610f055786841415610efe57509350610acd92505050565b6001909301925b505b600101610e54565b50600080fd5b6007546001600160a01b03163314610f3f5760405162461bcd60e51b815260040161096e90612956565b600955565b6007546001600160a01b03163314610f6e5760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610c3283838360405180602001604052806000815250611813565b600080546001600160801b031681805b8281101561104457600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061103b57858314156110345750949350505050565b6001909201915b50600101610fc4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b031633146110885760405162461bcd60e51b815260040161096e90612956565b805161109b90600d906020840190612412565b5050565b60006110aa82611ed7565b5192915050565b6007546001600160a01b031633146110db5760405162461bcd60e51b815260040161096e90612956565b6010805460ff1916911515919091179055565b60006001600160a01b038216611117576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b031633146111665760405162461bcd60e51b815260040161096e90612956565b6111706000611ff9565b565b60105462010000900460ff166111c25760405162461bcd60e51b8152602060048201526015602482015274199c9959481b5a5b9d081b9bdd081cdd185c9d1959605a1b604482015260640161096e565b336000818152601260205260409020548211156112215760405162461bcd60e51b815260206004820152601760248201527f6578636565642066726565206d696e7420616d6f756e74000000000000000000604482015260640161096e565b60008211801561123357506009548211155b61127f5760405162461bcd60e51b815260206004820152601d60248201527f6d757374206d696e7420666577657220696e2065616368206261746368000000604482015260640161096e565b6008548261128b610c7d565b611295919061298b565b11156112d95760405162461bcd60e51b81526020600482015260136024820152726d617820737570706c7920726561636865642160681b604482015260640161096e565b600b5482600c546112ea919061298b565b11156113385760405162461bcd60e51b815260206004820152601860248201527f6d6178206672656520737570706c792072656163686564210000000000000000604482015260640161096e565b81600c600082825461134a919061298b565b90915550506001600160a01b038116600090815260126020526040812080548492906113779084906129d6565b9091555061109b90508183611ebd565b60606000611394836110ee565b90506000816001600160401b038111156113be57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156113e7578160200160208202803683370190505b50905060005b8281101561143c576113ff8582610e19565b82828151811061141f57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061143481612a54565b9150506113ed565b509392505050565b601054610100900460ff166114935760405162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081b9bdd081cdd185c9d1959605a1b604482015260640161096e565b3360009081526011602052604090205460ff16610cf95760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161096e565b600e80546114f190612a19565b80601f016020809104026020016040519081016040528092919081815260200182805461151d90612a19565b801561156a5780601f1061153f5761010080835404028352916020019161156a565b820191906000526020600020905b81548152906001019060200180831161154d57829003601f168201915b505050505081565b6007546001600160a01b0316331461159c5760405162461bcd60e51b815260040161096e90612956565b600a55565b606060028054610ae290612a19565b6007546001600160a01b031633146115da5760405162461bcd60e51b815260040161096e90612956565b601080549115156101000261ff0019909216919091179055565b6007546001600160a01b0316331461161e5760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561167657600080fd5b505af115801561168a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3291906127a6565b6007546001600160a01b031633146116d85760405162461bcd60e51b815260040161096e90612956565b805161109b90600f906020840190612412565b6001600160a01b0382163314156117155760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146117ab5760405162461bcd60e51b815260040161096e90612956565b6010805463ff00000019166301000000179055565b600f80546114f190612a19565b6007546001600160a01b031633146117f75760405162461bcd60e51b815260040161096e90612956565b6001600160a01b03909116600090815260126020526040902055565b61181e848484611ca0565b61182a8484848461204b565b611847576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b031633146118775760405162461bcd60e51b815260040161096e90612956565b805161109b90600e906020840190612412565b6007546001600160a01b031633146118b45760405162461bcd60e51b815260040161096e90612956565b604051600090339083908381818185875af1925050503d80600081146118f6576040519150601f19603f3d011682016040523d82523d6000602084013e6118fb565b606091505b505090508061109b5760405162461bcd60e51b81526020600482015260126024820152714661696c656420746f20776974686472617760701b604482015260640161096e565b606061194c82611c10565b6119b15760405162461bcd60e51b815260206004820152603060248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526f3732bc34b9ba32b73a103a37b5b2b71760811b606482015260840161096e565b6010546301000000900460ff16611a5457600e80546119cf90612a19565b80601f01602080910402602001604051908101604052809291908181526020018280546119fb90612a19565b8015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b50505050509050919050565b6000611a5e61215a565b90506000815111611a8c5760405180604001604052806005815260200164173539b7b760d91b815250611ab7565b80611a9684612169565b604051602001611aa7929190612883565b6040516020818303038152906040525b9392505050565b6060600f8054610ae290612a19565b6007546001600160a01b03163314611af75760405162461bcd60e51b815260040161096e90612956565b6001600160a01b038116611b5c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b610e1681611ff9565b6007546001600160a01b03163314611b8f5760405162461bcd60e51b815260040161096e90612956565b8060005b8181101561184757600160116000868685818110611bc157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611bd69190612585565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c0881612a54565b915050611b93565b600080546001600160801b031682108015610acd575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611cab82611ed7565b80519091506000906001600160a01b0316336001600160a01b03161480611cd957508151611cd990336108d6565b80611cf4575033611ce984610b65565b6001600160a01b0316145b905080611d1457604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614611d495760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611d7057604051633a954ecd60e21b815260040160405180910390fd5b611d806000848460000151611c44565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116611e73576000546001600160801b0316811015611e7357825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61109b828260405180602001604052806000815250612282565b60408051606081018252600080825260208201819052918101829052905482906001600160801b0316811015611fe057600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611fde5780516001600160a01b031615611f75579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611fd9579392505050565b611f75565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561214e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061208f9033908990889088906004016128c2565b602060405180830381600087803b1580156120a957600080fd5b505af19250505080156120d9575060408051601f3d908101601f191682019092526120d6918101906127de565b60015b612134573d808015612107576040519150601f19603f3d011682016040523d82523d6000602084013e61210c565b606091505b50805161212c576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612152565b5060015b949350505050565b6060600d8054610ae290612a19565b60608161218d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121b757806121a181612a54565b91506121b09050600a836129a3565b9150612191565b6000816001600160401b038111156121df57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612209576020820181803683370190505b5090505b84156121525761221e6001836129d6565b915061222b600a86612a6f565b61223690603061298b565b60f81b81838151811061225957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061227b600a866129a3565b945061220d565b610c3283838360016000546001600160801b03166001600160a01b0385166122bc57604051622e076360e81b815260040160405180910390fd5b836122da5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156123ec5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48380156123c257506123c0600088848861204b565b155b156123e0576040516368d2bf6b60e11b815260040160405180910390fd5b6001918201910161236b565b50600080546001600160801b0319166001600160801b0392909216919091179055611eb6565b82805461241e90612a19565b90600052602060002090601f0160209004810192826124405760008555612486565b82601f1061245957805160ff1916838001178555612486565b82800160010185558215612486579182015b8281111561248657825182559160200191906001019061246b565b50612492929150612496565b5090565b5b808211156124925760008155600101612497565b60006001600160401b03808411156124c5576124c5612aaf565b604051601f8501601f19908116603f011681019082821181831017156124ed576124ed612aaf565b8160405280935085815286868601111561250657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461253757600080fd5b919050565b60008083601f84011261254d578081fd5b5081356001600160401b03811115612563578182fd5b6020830191508360208260051b850101111561257e57600080fd5b9250929050565b600060208284031215612596578081fd5b611ab782612520565b600080604083850312156125b1578081fd5b6125ba83612520565b91506125c860208401612520565b90509250929050565b6000806000606084860312156125e5578081fd5b6125ee84612520565b92506125fc60208501612520565b9150604084013590509250925092565b60008060008060808587031215612621578081fd5b61262a85612520565b935061263860208601612520565b92506040850135915060608501356001600160401b03811115612659578182fd5b8501601f81018713612669578182fd5b612678878235602084016124ab565b91505092959194509250565b60008060408385031215612696578182fd5b61269f83612520565b915060208301356126af81612ac5565b809150509250929050565b600080604083850312156126cc578182fd5b6126d583612520565b946020939093013593505050565b600080602083850312156126f5578182fd5b82356001600160401b0381111561270a578283fd5b6127168582860161253c565b90969095509350505050565b60008060008060408587031215612737578384fd5b84356001600160401b038082111561274d578586fd5b6127598883890161253c565b90965094506020870135915080821115612771578384fd5b5061277e8782880161253c565b95989497509550505050565b60006020828403121561279b578081fd5b8135611ab781612ac5565b6000602082840312156127b7578081fd5b8151611ab781612ac5565b6000602082840312156127d3578081fd5b8135611ab781612ad3565b6000602082840312156127ef578081fd5b8151611ab781612ad3565b60006020828403121561280b578081fd5b81356001600160401b03811115612820578182fd5b8201601f81018413612830578182fd5b612152848235602084016124ab565b600060208284031215612850578081fd5b5035919050565b6000815180845261286f8160208601602086016129ed565b601f01601f19169290920160200192915050565b600083516128958184602088016129ed565b8351908301906128a98183602088016129ed565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f590830184612857565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156129375783518352928401929184019160010161291b565b50909695505050505050565b602081526000611ab76020830184612857565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561299e5761299e612a83565b500190565b6000826129b2576129b2612a99565b500490565b60008160001904831182151516156129d1576129d1612a83565b500290565b6000828210156129e8576129e8612a83565b500390565b60005b83811015612a085781810151838201526020016129f0565b838111156118475750506000910152565b600181811c90821680612a2d57607f821691505b60208210811415612a4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a6857612a68612a83565b5060010190565b600082612a7e57612a7e612a99565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e1657600080fd5b6001600160e01b031981168114610e1657600080fdfea2646970667358221220a74bac75383fe4a4889c0225c53122aa0730b94701399191833b5df7229c032564736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d576f6e6b657920446f6e6b657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000257440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d593976364a4c59394e7753325733513868673976673852596231756874644537584b39774c355537414674410000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Wonkey Donkey
Arg [1] : symbol_ (string): WD
Arg [2] : hiddenURI_ (string): ipfs://QmY9v6JLY9NwS2W3Q8hg9vg8RYb1uhtdE7XK9wL5U7AFtA

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 576f6e6b657920446f6e6b657900000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 5744000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 697066733a2f2f516d593976364a4c59394e7753325733513868673976673852
Arg [9] : 596231756874644537584b39774c355537414674410000000000000000000000


Deployed Bytecode Sourcemap

38315:5475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40429:340;;;;;;;;;;-1:-1:-1;40429:340:0;;;;;:::i;:::-;;:::i;:::-;;20809:372;;;;;;;;;;-1:-1:-1;20809:372:0;;;;;:::i;:::-;;:::i;:::-;;;9232:14:1;;9225:22;9207:41;;9195:2;9180:18;20809:372:0;;;;;;;;23419:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24922:204::-;;;;;;;;;;-1:-1:-1;24922:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7611:32:1;;;7593:51;;7581:2;7566:18;24922:204:0;7548:102:1;24485:371:0;;;;;;;;;;-1:-1:-1;24485:371:0;;;;;:::i;:::-;;:::i;41439:91::-;;;;;;;;;;-1:-1:-1;41439:91:0;;;;;:::i;:::-;;:::i;18046:280::-;;;;;;;;;;;;;:::i;:::-;;;14685:25:1;;;14673:2;14658:18;18046:280:0;14640:76:1;25779:170:0;;;;;;;;;;-1:-1:-1;25779:170:0;;;;;:::i;:::-;;:::i;38858:43::-;;;;;;;;;;-1:-1:-1;38858:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;41894:407;;;;;;:::i;:::-;;:::i;19632:1105::-;;;;;;;;;;-1:-1:-1;19632:1105:0;;;;;:::i;:::-;;:::i;39286:92::-;;;;;;;;;;-1:-1:-1;39286:92:0;;;;;:::i;:::-;;:::i;39943:120::-;;;;;;;;;;-1:-1:-1;39943:120:0;;;;;:::i;:::-;;:::i;26020:185::-;;;;;;;;;;-1:-1:-1;26020:185:0;;;;;:::i;:::-;;:::i;38519:29::-;;;;;;;;;;;;;;;;18619:713;;;;;;;;;;-1:-1:-1;18619:713:0;;;;;:::i;:::-;;:::i;39180:98::-;;;;;;;;;;-1:-1:-1;39180:98:0;;;;;:::i;:::-;;:::i;23228:124::-;;;;;;;;;;-1:-1:-1;23228:124:0;;;;;:::i;:::-;;:::i;41227:95::-;;;;;;;;;;-1:-1:-1;41227:95:0;;;;;:::i;:::-;;:::i;38437:27::-;;;;;;;;;;;;;;;;21245:206;;;;;;;;;;-1:-1:-1;21245:206:0;;;;;:::i;:::-;;:::i;37833:94::-;;;;;;;;;;;;;:::i;42790:567::-;;;;;;;;;;-1:-1:-1;42790:567:0;;;;;:::i;:::-;;:::i;41538:348::-;;;;;;;;;;-1:-1:-1;41538:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42309:473::-;;;;;;:::i;:::-;;:::i;38618:23::-;;;;;;;;;;;;;:::i;37610:87::-;;;;;;;;;;-1:-1:-1;37683:6:0;;-1:-1:-1;;;;;37683:6:0;37610:87;;39661:86;;;;;;;;;;-1:-1:-1;39661:86:0;;;;;:::i;:::-;;:::i;38398:30::-;;;;;;;;;;;;;;;;23588:104;;;;;;;;;;;;;:::i;38717:26::-;;;;;;;;;;-1:-1:-1;38717:26:0;;;;;;;;;;;41330:101;;;;;;;;;;-1:-1:-1;41330:101:0;;;;;:::i;:::-;;:::i;38810:41::-;;;;;;;;;;-1:-1:-1;38810:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43600:150;;;;;;;;;;-1:-1:-1;43600:150:0;;;;;:::i;:::-;;:::i;38471:41::-;;;;;;;;;;;;;;;;39508:119;;;;;;;;;;-1:-1:-1;39508:119:0;;;;;:::i;:::-;;:::i;25198:279::-;;;;;;;;;;-1:-1:-1;25198:279:0;;;;;:::i;:::-;;:::i;39755:71::-;;;;;;;;;;;;;:::i;38687:23::-;;;;;;;;;;-1:-1:-1;38687:23:0;;;;;;;;38648:30;;;;;;;;;;;;;:::i;40303:118::-;;;;;;;;;;-1:-1:-1;40303:118:0;;;;;:::i;:::-;;:::i;38750:21::-;;;;;;;;;;-1:-1:-1;38750:21:0;;;;;;;;;;;26276:342;;;;;;;;;;-1:-1:-1;26276:342:0;;;;;:::i;:::-;;:::i;39386:114::-;;;;;;;;;;-1:-1:-1;39386:114:0;;;;;:::i;:::-;;:::i;43365:188::-;;;;;;;;;;-1:-1:-1;43365:188:0;;;;;:::i;:::-;;:::i;40777:442::-;;;;;;;;;;-1:-1:-1;40777:442:0;;;;;:::i;:::-;;:::i;38555:25::-;;;;;;;;;;;;;;;;39834:101;;;;;;;;;;;;;:::i;25548:164::-;;;;;;;;;;-1:-1:-1;25548:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25669:25:0;;;25645:4;25669:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25548:164;37935:192;;;;;;;;;;-1:-1:-1;37935:192:0;;;;;:::i;:::-;;:::i;40071:224::-;;;;;;;;;;-1:-1:-1;40071:224:0;;;;;:::i;:::-;;:::i;40429:340::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;;;;;;;;;40558:8;40592:27;;::::1;40584:67;;;::::0;-1:-1:-1;;;40584:67:0;;9685:2:1;40584:67:0::1;::::0;::::1;9667:21:1::0;9724:2;9704:18;;;9697:30;9763:29;9743:18;;;9736:57;9810:18;;40584:67:0::1;9657:177:1::0;40584:67:0::1;40666:9;40662:100;40685:6;40681:1;:10;40662:100;;;40737:10;;40748:1;40737:13;;;;;-1:-1:-1::0;;;40737:13:0::1;;;;;;;;;;;;;;;40713:8;:21;40722:8;;40731:1;40722:11;;;;;-1:-1:-1::0;;;40722:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40713:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40713:21:0;:37;40693:3;::::1;::::0;::::1;:::i;:::-;;;;40662:100;;;;37816:1;40429:340:::0;;;;:::o;20809:372::-;20911:4;-1:-1:-1;;;;;;20948:40:0;;-1:-1:-1;;;20948:40:0;;:105;;-1:-1:-1;;;;;;;21005:48:0;;-1:-1:-1;;;21005:48:0;20948:105;:172;;;-1:-1:-1;;;;;;;21070:50:0;;-1:-1:-1;;;21070:50:0;20948:172;:225;;;-1:-1:-1;;;;;;;;;;14808:40:0;;;21137:36;20928:245;20809:372;-1:-1:-1;;20809:372:0:o;23419:100::-;23473:13;23506:5;23499:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23419:100;:::o;24922:204::-;24990:7;25015:16;25023:7;25015;:16::i;:::-;25010:64;;25040:34;;-1:-1:-1;;;25040:34:0;;;;;;;;;;;25010:64;-1:-1:-1;25094:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25094:24:0;;24922:204::o;24485:371::-;24558:13;24574:24;24590:7;24574:15;:24::i;:::-;24558:40;;24619:5;-1:-1:-1;;;;;24613:11:0;:2;-1:-1:-1;;;;;24613:11:0;;24609:48;;;24633:24;;-1:-1:-1;;;24633:24:0;;;;;;;;;;;24609:48;12507:10;-1:-1:-1;;;;;24674:21:0;;;;;;:63;;-1:-1:-1;24700:37:0;24717:5;12507:10;25548:164;:::i;24700:37::-;24699:38;24674:63;24670:138;;;24761:35;;-1:-1:-1;;;24761:35:0;;;;;;;;;;;24670:138;24820:28;24829:2;24833:7;24842:5;24820:8;:28::i;:::-;24485:371;;;:::o;41439:91::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;41504:9:::1;:18:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;41504:18:0;;::::1;::::0;;;::::1;::::0;;41439:91::o;18046:280::-;18099:7;18291:12;-1:-1:-1;;;;;;;;18291:12:0;;;;18275:13;;;:28;;;;18268:35;;18046:280::o;25779:170::-;25913:28;25923:4;25929:2;25933:7;25913:9;:28::i;41894:407::-;41966:11;;;;41958:47;;;;-1:-1:-1;;;41958:47:0;;11497:2:1;41958:47:0;;;11479:21:1;11536:2;11516:18;;;11509:30;11575:25;11555:18;;;11548:53;11618:18;;41958:47:0;11469:173:1;41958:47:0;42033:1;42024:6;:10;:32;;;;;42048:8;;42038:6;:18;;42024:32;42016:74;;;;-1:-1:-1;;;42016:74:0;;12210:2:1;42016:74:0;;;12192:21:1;12249:2;12229:18;;;12222:30;12288:31;12268:18;;;12261:59;12337:18;;42016:74:0;12182:179:1;42016:74:0;42135:7;;42125:6;42109:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;42101:65;;;;-1:-1:-1;;;42101:65:0;;14393:2:1;42101:65:0;;;14375:21:1;14432:2;14412:18;;;14405:30;-1:-1:-1;;;14451:18:1;;;14444:49;14510:18;;42101:65:0;14365:169:1;42101:65:0;42207:5;;42198:14;;:6;:14;:::i;:::-;42185:9;:27;42177:72;;;;-1:-1:-1;;;42177:72:0;;12918:2:1;42177:72:0;;;12900:21:1;;;12937:18;;;12930:30;12996:34;12976:18;;;12969:62;13048:18;;42177:72:0;12890:182:1;42177:72:0;42262:31;12507:10;42286:6;42262:9;:31::i;:::-;41894:407;:::o;19632:1105::-;19721:7;19754:16;19764:5;19754:9;:16::i;:::-;19745:5;:25;19741:61;;19779:23;;-1:-1:-1;;;19779:23:0;;;;;;;;;;;19741:61;19813:22;19838:13;;-1:-1:-1;;;;;19838:13:0;;19813:22;;20088:557;20108:14;20104:1;:18;20088:557;;;20148:31;20182:14;;;:11;:14;;;;;;;;;20148:48;;;;;;;;;-1:-1:-1;;;;;20148:48:0;;;;-1:-1:-1;;;20148:48:0;;-1:-1:-1;;;;;20148:48:0;;;;;;;;-1:-1:-1;;;20148:48:0;;;;;;;;;;;;;;;;20215:73;;20260:8;;;20215:73;20310:14;;-1:-1:-1;;;;;20310:28:0;;20306:111;;20383:14;;;-1:-1:-1;20306:111:0;20460:5;-1:-1:-1;;;;;20439:26:0;:17;-1:-1:-1;;;;;20439:26:0;;20435:195;;;20509:5;20494:11;:20;20490:85;;;-1:-1:-1;20550:1:0;-1:-1:-1;20543:8:0;;-1:-1:-1;;;20543:8:0;20490:85;20597:13;;;;;20435:195;20088:557;;20124:3;;20088:557;;;;20721:8;;;39286:92;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39353:8:::1;:17:::0;39286:92::o;39943:120::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40028:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:27;;-1:-1:-1;;40028:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39943:120::o;26020:185::-;26158:39;26175:4;26181:2;26185:7;26158:39;;;;;;;;;;;;:16;:39::i;18619:713::-;18686:7;18731:13;;-1:-1:-1;;;;;18731:13:0;18686:7;;18945:328;18965:14;18961:1;:18;18945:328;;;19005:31;19039:14;;;:11;:14;;;;;;;;;19005:48;;;;;;;;;-1:-1:-1;;;;;19005:48:0;;;;-1:-1:-1;;;19005:48:0;;-1:-1:-1;;;;;19005:48:0;;;;;;;;-1:-1:-1;;;19005:48:0;;;;;;;;;;;;;;19072:186;;19137:5;19122:11;:20;19118:85;;;-1:-1:-1;19178:1:0;18619:713;-1:-1:-1;;;;18619:713:0:o;19118:85::-;19225:13;;;;;19072:186;-1:-1:-1;18981:3:0;;18945:328;;;;19301:23;;-1:-1:-1;;;19301:23:0;;;;;;;;;;;39180:98;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39253:17;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;39180:98:::0;:::o;23228:124::-;23292:7;23319:20;23331:7;23319:11;:20::i;:::-;:25;;23228:124;-1:-1:-1;;23228:124:0:o;41227:95::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;41294:11:::1;:20:::0;;-1:-1:-1;;41294:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41227:95::o;21245:206::-;21309:7;-1:-1:-1;;;;;21333:19:0;;21329:60;;21361:28;;-1:-1:-1;;;21361:28:0;;;;;;;;;;;21329:60;-1:-1:-1;;;;;;21415:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;21415:27:0;;21245:206::o;37833:94::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;37898:21:::1;37916:1;37898:9;:21::i;:::-;37833:94::o:0;42790:567::-;42852:9;;;;;;;42844:43;;;;-1:-1:-1;;;42844:43:0;;11147:2:1;42844:43:0;;;11129:21:1;11186:2;11166:18;;;11159:30;-1:-1:-1;;;11205:18:1;;;11198:51;11266:18;;42844:43:0;11119:171:1;42844:43:0;12507:10;42898:15;42947:17;;;:8;:17;;;;;;-1:-1:-1;;42947:27:0;42939:63;;;;-1:-1:-1;;;42939:63:0;;10795:2:1;42939:63:0;;;10777:21:1;10834:2;10814:18;;;10807:30;10873:25;10853:18;;;10846:53;10916:18;;42939:63:0;10767:173:1;42939:63:0;43030:1;43021:6;:10;:32;;;;;43045:8;;43035:6;:18;;43021:32;43013:74;;;;-1:-1:-1;;;43013:74:0;;12210:2:1;43013:74:0;;;12192:21:1;12249:2;12229:18;;;12222:30;12288:31;12268:18;;;12261:59;12337:18;;43013:74:0;12182:179:1;43013:74:0;43132:7;;43122:6;43106:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;43098:65;;;;-1:-1:-1;;;43098:65:0;;14393:2:1;43098:65:0;;;14375:21:1;14432:2;14412:18;;;14405:30;-1:-1:-1;;;14451:18:1;;;14444:49;14510:18;;43098:65:0;14365:169:1;43098:65:0;43205:7;;43195:6;43182:10;;:19;;;;:::i;:::-;:30;;43174:67;;;;-1:-1:-1;;;43174:67:0;;13279:2:1;43174:67:0;;;13261:21:1;13318:2;13298:18;;;13291:30;13357:26;13337:18;;;13330:54;13401:18;;43174:67:0;13251:174:1;43174:67:0;43268:6;43254:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;43285:17:0;;;;;;:8;:17;;;;;:27;;43306:6;;43285:17;:27;;43306:6;;43285:27;:::i;:::-;;;;-1:-1:-1;43323:26:0;;-1:-1:-1;43333:7:0;43342:6;43323:9;:26::i;41538:348::-;41626:16;41660:13;41676:16;41686:5;41676:9;:16::i;:::-;41660:32;;41703:20;41740:5;-1:-1:-1;;;;;41726:20:0;;;;;-1:-1:-1;;;41726:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41726:20:0;;41703:43;;41762:9;41757:101;41781:5;41777:1;:9;41757:101;;;41817:29;41837:5;41844:1;41817:19;:29::i;:::-;41808:3;41812:1;41808:6;;;;;;-1:-1:-1;;;41808:6:0;;;;;;;;;;;;;;;;;;:38;41788:3;;;;:::i;:::-;;;;41757:101;;;-1:-1:-1;41875:3:0;41538:348;-1:-1:-1;;;41538:348:0:o;42309:473::-;42384:14;;;;;;;42376:48;;;;-1:-1:-1;;;42376:48:0;;12568:2:1;42376:48:0;;;12550:21:1;12607:2;12587:18;;;12580:30;-1:-1:-1;;;12626:18:1;;;12619:51;12687:18;;42376:48:0;12540:171:1;42376:48:0;12507:10;42443:23;;;;:9;:23;;;;;;;;42435:51;;;;-1:-1:-1;;;42435:51:0;;13632:2:1;42435:51:0;;;13614:21:1;13671:2;13651:18;;;13644:30;-1:-1:-1;;;13690:18:1;;;13683:45;13745:18;;42435:51:0;13604:165:1;38618:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39661:86::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39725:5:::1;:14:::0;39661:86::o;23588:104::-;23644:13;23677:7;23670:14;;;;;:::i;41330:101::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;41400:14:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;41400:23:0;;::::1;::::0;;;::::1;::::0;;41330:101::o;43600:150::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43691:29:0;::::1;;12507:10:::0;43691:51:::1;::::0;-1:-1:-1;;;;;;43691:51:0::1;::::0;;;;;;-1:-1:-1;;;;;8340:32:1;;;43691:51:0::1;::::0;::::1;8322::1::0;8389:18;;;8382:34;;;8295:18;;43691:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39508:119::-:0;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39593:26;;::::1;::::0;:16:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;25198:279::-:0;-1:-1:-1;;;;;25289:24:0;;12507:10;25289:24;25285:54;;;25322:17;;-1:-1:-1;;;25322:17:0;;;;;;;;;;;25285:54;12507:10;25352:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25352:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25352:53:0;;;;;;;;;;25421:48;;9207:41:1;;;25352:42:0;;12507:10;25421:48;;9180:18:1;25421:48:0;;;;;;;25198:279;;:::o;39755:71::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39803:8:::1;:15:::0;;-1:-1:-1;;39803:15:0::1;::::0;::::1;::::0;;39755:71::o;38648:30::-;;;;;;;:::i;40303:118::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40387:17:0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:26;40303:118::o;26276:342::-;26443:28;26453:4;26459:2;26463:7;26443:9;:28::i;:::-;26487:48;26510:4;26516:2;26520:7;26529:5;26487:22;:48::i;:::-;26482:129;;26559:40;;-1:-1:-1;;;26559:40:0;;;;;;;;;;;26482:129;26276:342;;;;:::o;39386:114::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;39467:25;;::::1;::::0;:9:::1;::::0;:25:::1;::::0;::::1;::::0;::::1;:::i;43365:188::-:0;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;43451:48:::1;::::0;43436:9:::1;::::0;12507:10;;43485:9;;43436;43451:48;43436:9;43451:48;43485:9;12507:10;43451:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43435:64;;;43518:4;43510:35;;;::::0;-1:-1:-1;;;43510:35:0;;10041:2:1;43510:35:0::1;::::0;::::1;10023:21:1::0;10080:2;10060:18;;;10053:30;-1:-1:-1;;;10099:18:1;;;10092:48;10157:18;;43510:35:0::1;10013:168:1::0;40777:442:0;40850:13;40884:16;40892:7;40884;:16::i;:::-;40876:77;;;;-1:-1:-1;;;40876:77:0;;13976:2:1;40876:77:0;;;13958:21:1;14015:2;13995:18;;;13988:30;14054:34;14034:18;;;14027:62;-1:-1:-1;;;14105:18:1;;;14098:46;14161:19;;40876:77:0;13948:238:1;40876:77:0;40969:8;;;;;;;40966:65;;41010:9;41003:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40777:442;;;:::o;40966:65::-;41043:22;41068:10;:8;:10::i;:::-;41043:35;;41121:1;41102:8;41096:22;:26;:115;;;;;;;;;;;;;;;-1:-1:-1;;;41096:115:0;;;;;;41162:8;41172:18;:7;:16;:18::i;:::-;41145:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41096:115;41089:122;40777:442;-1:-1:-1;;;40777:442:0:o;39834:101::-;39878:13;39911:16;39904:23;;;;;:::i;37935:192::-;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38024:22:0;::::1;38016:73;;;::::0;-1:-1:-1;;;38016:73:0;;10388:2:1;38016:73:0::1;::::0;::::1;10370:21:1::0;10427:2;10407:18;;;10400:30;10466:34;10446:18;;;10439:62;-1:-1:-1;;;10517:18:1;;;10510:36;10563:19;;38016:73:0::1;10360:228:1::0;38016:73:0::1;38100:19;38110:8;38100:9;:19::i;40071:224::-:0;37683:6;;-1:-1:-1;;;;;37683:6:0;12507:10;37745:23;37737:68;;;;-1:-1:-1;;;37737:68:0;;;;;;;:::i;:::-;40170:8;40153:14:::1;40196:92;40219:6;40215:1;:10;40196:92;;;40272:4;40247:9;:22;40257:8;;40266:1;40257:11;;;;;-1:-1:-1::0;;;40257:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40247:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40247:22:0;:29;;-1:-1:-1;;40247:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40227:3;::::1;::::0;::::1;:::i;:::-;;;;40196:92;;26873:144:::0;26930:4;26964:13;;-1:-1:-1;;;;;26964:13:0;26954:23;;:55;;;;-1:-1:-1;;26982:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;26982:27:0;;;;26981:28;;26873:144::o;34089:196::-;34204:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;34204:29:0;-1:-1:-1;;;;;34204:29:0;;;;;;;;;34249:28;;34204:24;;34249:28;;;;;;;34089:196;;;:::o;29590:2112::-;29705:35;29743:20;29755:7;29743:11;:20::i;:::-;29818:18;;29705:58;;-1:-1:-1;29776:22:0;;-1:-1:-1;;;;;29802:34:0;12507:10;-1:-1:-1;;;;;29802:34:0;;:101;;;-1:-1:-1;29870:18:0;;29853:50;;12507:10;25548:164;:::i;29853:50::-;29802:154;;;-1:-1:-1;12507:10:0;29920:20;29932:7;29920:11;:20::i;:::-;-1:-1:-1;;;;;29920:36:0;;29802:154;29776:181;;29975:17;29970:66;;30001:35;;-1:-1:-1;;;30001:35:0;;;;;;;;;;;29970:66;30073:4;-1:-1:-1;;;;;30051:26:0;:13;:18;;;-1:-1:-1;;;;;30051:26:0;;30047:67;;30086:28;;-1:-1:-1;;;30086:28:0;;;;;;;;;;;30047:67;-1:-1:-1;;;;;30129:16:0;;30125:52;;30154:23;;-1:-1:-1;;;30154:23:0;;;;;;;;;;;30125:52;30298:49;30315:1;30319:7;30328:13;:18;;;30298:8;:49::i;:::-;-1:-1:-1;;;;;30643:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;30643:31:0;;;-1:-1:-1;;;;;30643:31:0;;;-1:-1:-1;;30643:31:0;;;;;;;30689:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;30689:29:0;;;;;;;;;;;30735:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;30780:61:0;;;;-1:-1:-1;;;30825:15:0;30780:61;;;;;;;;;;;31115:11;;;31145:24;;;;;:29;31115:11;;31145:29;31141:445;;31370:13;;-1:-1:-1;;;;;31370:13:0;31356:27;;31352:219;;;31440:18;;;31408:24;;;:11;:24;;;;;;;;:50;;31523:28;;;;-1:-1:-1;;;;;31481:70:0;-1:-1:-1;;;31481:70:0;-1:-1:-1;;;;;;31481:70:0;;;-1:-1:-1;;;;;31408:50:0;;;31481:70;;;;;;;31352:219;29590:2112;31633:7;31629:2;-1:-1:-1;;;;;31614:27:0;31623:4;-1:-1:-1;;;;;31614:27:0;;;;;;;;;;;31652:42;29590:2112;;;;;:::o;27025:104::-;27094:27;27104:2;27108:8;27094:27;;;;;;;;;;;;:9;:27::i;22083:1083::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;22249:13:0;;22193:7;;-1:-1:-1;;;;;22249:13:0;22242:20;;22238:861;;;22283:31;22317:17;;;:11;:17;;;;;;;;;22283:51;;;;;;;;;-1:-1:-1;;;;;22283:51:0;;;;-1:-1:-1;;;22283:51:0;;-1:-1:-1;;;;;22283:51:0;;;;;;;;-1:-1:-1;;;22283:51:0;;;;;;;;;;;;;;22353:731;;22403:14;;-1:-1:-1;;;;;22403:28:0;;22399:101;;22467:9;22083:1083;-1:-1:-1;;;22083:1083:0:o;22399:101::-;-1:-1:-1;;;22844:6:0;22889:17;;;;:11;:17;;;;;;;;;22877:29;;;;;;;;;-1:-1:-1;;;;;22877:29:0;;;;;-1:-1:-1;;;22877:29:0;;-1:-1:-1;;;;;22877:29:0;;;;;;;;-1:-1:-1;;;22877:29:0;;;;;;;;;;;;;22937:28;22933:109;;23005:9;22083:1083;-1:-1:-1;;;22083:1083:0:o;22933:109::-;22804:261;;;22238:861;;23127:31;;-1:-1:-1;;;23127:31:0;;;;;;;;;;;38135:173;38210:6;;;-1:-1:-1;;;;;38227:17:0;;;-1:-1:-1;;;;;;38227:17:0;;;;;;;38260:40;;38210:6;;;38227:17;38210:6;;38260:40;;38191:16;;38260:40;38135:173;;:::o;34850:790::-;35005:4;-1:-1:-1;;;;;35026:13:0;;7098:19;:23;35022:611;;35062:72;;-1:-1:-1;;;35062:72:0;;-1:-1:-1;;;;;35062:36:0;;;;;:72;;12507:10;;35113:4;;35119:7;;35128:5;;35062:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35062:72:0;;;;;;;;-1:-1:-1;;35062:72:0;;;;;;;;;;;;:::i;:::-;;;35058:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35308:13:0;;35304:259;;35358:40;;-1:-1:-1;;;35358:40:0;;;;;;;;;;;35304:259;35513:6;35507:13;35498:6;35494:2;35490:15;35483:38;35058:520;-1:-1:-1;;;;;;35185:55:0;-1:-1:-1;;;35185:55:0;;-1:-1:-1;35178:62:0;;35022:611;-1:-1:-1;35617:4:0;35022:611;34850:790;;;;;;:::o;39065:107::-;39125:13;39157:7;39150:14;;;;;:::i;12831:723::-;12887:13;13108:10;13104:53;;-1:-1:-1;;13135:10:0;;;;;;;;;;;;-1:-1:-1;;;13135:10:0;;;;;12831:723::o;13104:53::-;13182:5;13167:12;13223:78;13230:9;;13223:78;;13256:8;;;;:::i;:::-;;-1:-1:-1;13279:10:0;;-1:-1:-1;13287:2:0;13279:10;;:::i;:::-;;;13223:78;;;13311:19;13343:6;-1:-1:-1;;;;;13333:17:0;;;;;-1:-1:-1;;;13333:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13333:17:0;;13311:39;;13361:154;13368:10;;13361:154;;13395:11;13405:1;13395:11;;:::i;:::-;;-1:-1:-1;13464:10:0;13472:2;13464:5;:10;:::i;:::-;13451:24;;:2;:24;:::i;:::-;13438:39;;13421:6;13428;13421:14;;;;;;-1:-1:-1;;;13421:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13421:56:0;;;;;;;;-1:-1:-1;13492:11:0;13501:2;13492:11;;:::i;:::-;;;13361:154;;27492:163;27615:32;27621:2;27625:8;27635:5;27642:4;28053:20;28076:13;-1:-1:-1;;;;;28076:13:0;-1:-1:-1;;;;;28104:16:0;;28100:48;;28129:19;;-1:-1:-1;;;28129:19:0;;;;;;;;;;;28100:48;28163:13;28159:44;;28185:18;;-1:-1:-1;;;28185:18:0;;;;;;;;;;;28159:44;-1:-1:-1;;;;;28555:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;;;;;28614:49:0;;-1:-1:-1;;;;;28555:44:0;;;;;;;28614:49;;;;-1:-1:-1;;28555:44:0;;;;;;28614:49;;;;;;;;;;;;;;;;28680:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;28730:66:0;;;;-1:-1:-1;;;28780:15:0;28730:66;;;;;;;;;;;28680:25;;28865:328;28885:8;28881:1;:12;28865:328;;;28924:38;;28949:12;;-1:-1:-1;;;;;28924:38:0;;;28941:1;;28924:38;;28941:1;;28924:38;28985:4;:68;;;;;28994:59;29025:1;29029:2;29033:12;29047:5;28994:22;:59::i;:::-;28993:60;28985:68;28981:164;;;29085:40;;-1:-1:-1;;;29085:40:0;;;;;;;;;;;28981:164;29163:14;;;;;28895:3;28865:328;;;-1:-1:-1;29209:13:0;:37;;-1:-1:-1;;;;;;29209:37:0;-1:-1:-1;;;;;29209:37:0;;;;;;;;;;29268:60;26276:342;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:391::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:2;;978:6;970;963:22;922:2;-1:-1:-1;1006:20:1;;-1:-1:-1;;;;;1038:30:1;;1035:2;;;1088:8;1078;1071:26;1035:2;1132:4;1124:6;1120:17;1108:29;;1192:3;1185:4;1175:6;1172:1;1168:14;1160:6;1156:27;1152:38;1149:47;1146:2;;;1209:1;1206;1199:12;1146:2;912:307;;;;;:::o;1224:196::-;1283:6;1336:2;1324:9;1315:7;1311:23;1307:32;1304:2;;;1357:6;1349;1342:22;1304:2;1385:29;1404:9;1385:29;:::i;1425:270::-;1493:6;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1603:29;1622:9;1603:29;:::i;:::-;1593:39;;1651:38;1685:2;1674:9;1670:18;1651:38;:::i;:::-;1641:48;;1512:183;;;;;:::o;1700:338::-;1777:6;1785;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:2;;;1867:6;1859;1852:22;1814:2;1895:29;1914:9;1895:29;:::i;:::-;1885:39;;1943:38;1977:2;1966:9;1962:18;1943:38;:::i;:::-;1933:48;;2028:2;2017:9;2013:18;2000:32;1990:42;;1804:234;;;;;:::o;2043:696::-;2138:6;2146;2154;2162;2215:3;2203:9;2194:7;2190:23;2186:33;2183:2;;;2237:6;2229;2222:22;2183:2;2265:29;2284:9;2265:29;:::i;:::-;2255:39;;2313:38;2347:2;2336:9;2332:18;2313:38;:::i;:::-;2303:48;;2398:2;2387:9;2383:18;2370:32;2360:42;;2453:2;2442:9;2438:18;2425:32;-1:-1:-1;;;;;2472:6:1;2469:30;2466:2;;;2517:6;2509;2502:22;2466:2;2545:22;;2598:4;2590:13;;2586:27;-1:-1:-1;2576:2:1;;2632:6;2624;2617:22;2576:2;2660:73;2725:7;2720:2;2707:16;2702:2;2698;2694:11;2660:73;:::i;:::-;2650:83;;;2173:566;;;;;;;:::o;2744:325::-;2809:6;2817;2870:2;2858:9;2849:7;2845:23;2841:32;2838:2;;;2891:6;2883;2876:22;2838:2;2919:29;2938:9;2919:29;:::i;:::-;2909:39;;2998:2;2987:9;2983:18;2970:32;3011:28;3033:5;3011:28;:::i;:::-;3058:5;3048:15;;;2828:241;;;;;:::o;3074:264::-;3142:6;3150;3203:2;3191:9;3182:7;3178:23;3174:32;3171:2;;;3224:6;3216;3209:22;3171:2;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3161:177:1:o;3343:457::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:2;;;3511:6;3503;3496:22;3458:2;3556:9;3543:23;-1:-1:-1;;;;;3581:6:1;3578:30;3575:2;;;3626:6;3618;3611:22;3575:2;3670:70;3732:7;3723:6;3712:9;3708:22;3670:70;:::i;:::-;3759:8;;3644:96;;-1:-1:-1;3448:352:1;-1:-1:-1;;;;3448:352:1:o;3805:803::-;3927:6;3935;3943;3951;4004:2;3992:9;3983:7;3979:23;3975:32;3972:2;;;4025:6;4017;4010:22;3972:2;4070:9;4057:23;-1:-1:-1;;;;;4140:2:1;4132:6;4129:14;4126:2;;;4161:6;4153;4146:22;4126:2;4205:70;4267:7;4258:6;4247:9;4243:22;4205:70;:::i;:::-;4294:8;;-1:-1:-1;4179:96:1;-1:-1:-1;4382:2:1;4367:18;;4354:32;;-1:-1:-1;4398:16:1;;;4395:2;;;4432:6;4424;4417:22;4395:2;;4476:72;4540:7;4529:8;4518:9;4514:24;4476:72;:::i;:::-;3962:646;;;;-1:-1:-1;4567:8:1;-1:-1:-1;;;;3962:646:1:o;4613:251::-;4669:6;4722:2;4710:9;4701:7;4697:23;4693:32;4690:2;;;4743:6;4735;4728:22;4690:2;4787:9;4774:23;4806:28;4828:5;4806:28;:::i;4869:255::-;4936:6;4989:2;4977:9;4968:7;4964:23;4960:32;4957:2;;;5010:6;5002;4995:22;4957:2;5047:9;5041:16;5066:28;5088:5;5066:28;:::i;5129:255::-;5187:6;5240:2;5228:9;5219:7;5215:23;5211:32;5208:2;;;5261:6;5253;5246:22;5208:2;5305:9;5292:23;5324:30;5348:5;5324:30;:::i;5389:259::-;5458:6;5511:2;5499:9;5490:7;5486:23;5482:32;5479:2;;;5532:6;5524;5517:22;5479:2;5569:9;5563:16;5588:30;5612:5;5588:30;:::i;5653:480::-;5722:6;5775:2;5763:9;5754:7;5750:23;5746:32;5743:2;;;5796:6;5788;5781:22;5743:2;5841:9;5828:23;-1:-1:-1;;;;;5866:6:1;5863:30;5860:2;;;5911:6;5903;5896:22;5860:2;5939:22;;5992:4;5984:13;;5980:27;-1:-1:-1;5970:2:1;;6026:6;6018;6011:22;5970:2;6054:73;6119:7;6114:2;6101:16;6096:2;6092;6088:11;6054:73;:::i;6138:190::-;6197:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6271:6;6263;6256:22;6218:2;-1:-1:-1;6299:23:1;;6208:120;-1:-1:-1;6208:120:1:o;6333:257::-;6374:3;6412:5;6406:12;6439:6;6434:3;6427:19;6455:63;6511:6;6504:4;6499:3;6495:14;6488:4;6481:5;6477:16;6455:63;:::i;:::-;6572:2;6551:15;-1:-1:-1;;6547:29:1;6538:39;;;;6579:4;6534:50;;6382:208;-1:-1:-1;;6382:208:1:o;6595:637::-;6875:3;6913:6;6907:13;6929:53;6975:6;6970:3;6963:4;6955:6;6951:17;6929:53;:::i;:::-;7045:13;;7004:16;;;;7067:57;7045:13;7004:16;7101:4;7089:17;;7067:57;:::i;:::-;-1:-1:-1;;;7146:20:1;;7175:22;;;7224:1;7213:13;;6883:349;-1:-1:-1;;;;6883:349:1:o;7655:488::-;-1:-1:-1;;;;;7924:15:1;;;7906:34;;7976:15;;7971:2;7956:18;;7949:43;8023:2;8008:18;;8001:34;;;8071:3;8066:2;8051:18;;8044:31;;;7849:4;;8092:45;;8117:19;;8109:6;8092:45;:::i;:::-;8084:53;7858:285;-1:-1:-1;;;;;;7858:285:1:o;8427:635::-;8598:2;8650:21;;;8720:13;;8623:18;;;8742:22;;;8569:4;;8598:2;8821:15;;;;8795:2;8780:18;;;8569:4;8867:169;8881:6;8878:1;8875:13;8867:169;;;8942:13;;8930:26;;9011:15;;;;8976:12;;;;8903:1;8896:9;8867:169;;;-1:-1:-1;9053:3:1;;8578:484;-1:-1:-1;;;;;;8578:484:1:o;9259:219::-;9408:2;9397:9;9390:21;9371:4;9428:44;9468:2;9457:9;9453:18;9445:6;9428:44;:::i;11647:356::-;11849:2;11831:21;;;11868:18;;;11861:30;11927:34;11922:2;11907:18;;11900:62;11994:2;11979:18;;11821:182::o;14721:128::-;14761:3;14792:1;14788:6;14785:1;14782:13;14779:2;;;14798:18;;:::i;:::-;-1:-1:-1;14834:9:1;;14769:80::o;14854:120::-;14894:1;14920;14910:2;;14925:18;;:::i;:::-;-1:-1:-1;14959:9:1;;14900:74::o;14979:168::-;15019:7;15085:1;15081;15077:6;15073:14;15070:1;15067:21;15062:1;15055:9;15048:17;15044:45;15041:2;;;15092:18;;:::i;:::-;-1:-1:-1;15132:9:1;;15031:116::o;15152:125::-;15192:4;15220:1;15217;15214:8;15211:2;;;15225:18;;:::i;:::-;-1:-1:-1;15262:9:1;;15201:76::o;15282:258::-;15354:1;15364:113;15378:6;15375:1;15372:13;15364:113;;;15454:11;;;15448:18;15435:11;;;15428:39;15400:2;15393:10;15364:113;;;15495:6;15492:1;15489:13;15486:2;;;-1:-1:-1;;15530:1:1;15512:16;;15505:27;15335:205::o;15545:380::-;15624:1;15620:12;;;;15667;;;15688:2;;15742:4;15734:6;15730:17;15720:27;;15688:2;15795;15787:6;15784:14;15764:18;15761:38;15758:2;;;15841:10;15836:3;15832:20;15829:1;15822:31;15876:4;15873:1;15866:15;15904:4;15901:1;15894:15;15758:2;;15600:325;;;:::o;15930:135::-;15969:3;-1:-1:-1;;15990:17:1;;15987:2;;;16010:18;;:::i;:::-;-1:-1:-1;16057:1:1;16046:13;;15977:88::o;16070:112::-;16102:1;16128;16118:2;;16133:18;;:::i;:::-;-1:-1:-1;16167:9:1;;16108:74::o;16187:127::-;16248:10;16243:3;16239:20;16236:1;16229:31;16279:4;16276:1;16269:15;16303:4;16300:1;16293:15;16319:127;16380:10;16375:3;16371:20;16368:1;16361:31;16411:4;16408:1;16401:15;16435:4;16432:1;16425:15;16451:127;16512:10;16507:3;16503:20;16500:1;16493:31;16543:4;16540:1;16533:15;16567:4;16564:1;16557:15;16583:118;16669:5;16662:13;16655:21;16648:5;16645:32;16635:2;;16691:1;16688;16681:12;16706:131;-1:-1:-1;;;;;;16780:32:1;;16770:43;;16760:2;;16827:1;16824;16817:12

Swarm Source

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