ETH Price: $3,693.39 (+2.70%)

Token

ERC-20: ASCII Apepe (AAYC)
 

Overview

Max Total Supply

10,000 AAYC

Holders

746

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
10 AAYC
0x4c54E9bA7406938b317ab59D6f9B6AB14181B5A9
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:
aayc

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @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);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.7;

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

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

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

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

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

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

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

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @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 {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.7;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}
// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.7;

/**
 * Hiya
 * This smart contract we have taken every measure possible to
 * keep the costs of gas managable every step along the way.
 * 
 * In this contract we've used several different methods to keep costs down.
 * If you came here worried because gas is so low or you don't have to pay that pesky
 * OpenSea approval fee; rejoice! 

 * Contract by: _granto
 * Based on the work of solidity geniuses: nftchance & masonnft & squeebo_nft
 
   
       ____
           !
     !     !
     !      `-  _ _    _ 
     |              ```  !
_____!                   !
\,      Made in Texas     \
  l    _                  ;
   \ _/  \.              /
           \           .’ 
            .       ./’
             `.    ,
               \   ;
                 ``’
 
 */



contract aayc is ERC721Enumerable, Ownable {
    string public baseURI;

    address public proxyRegistryAddress;
    address public treasuryAccount;

    uint256 public MAX_SUPPLY = 10000;

    uint256 public MAX_PER_TX = 10;
    uint256 public constant RESERVES = 0;
    uint256 public priceInWei = 0 ether;
    bool    public publicSaleActive = false;

    mapping(address => bool) public projectProxy;
    mapping(address => uint256) public addressToMinted;

    // baseURI: metadata endpoint for this collection
    // treasuryAccount: address the funds should be widthdrawn to
    constructor(string memory _baseURI, address _treasuryAccount)
        ERC721("ASCII Apepe", "AAYC")
    {
        baseURI = _baseURI;
        treasuryAccount = _treasuryAccount;
        // Opensea proxy registry address: this preapproves Opensea for transactions, saving users gas fees
        proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;
    }

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

    function setMaxSupply(uint256 _maxSupply) public onlyOwner {
        MAX_SUPPLY = _maxSupply;
    }

    function setPriceInWei(uint256 _priceInWei) public onlyOwner {
        priceInWei = _priceInWei;
    }

    function setTxnMax(uint256 _txnMax) public onlyOwner {
        MAX_PER_TX = _txnMax;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId)));
    }

    function setProxyRegistryAddress(address _proxyRegistryAddress)
        external
        onlyOwner
    {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function flipProxyState(address proxyAddress) public onlyOwner {
        projectProxy[proxyAddress] = !projectProxy[proxyAddress];
    }

    function togglePublicSaleActive() external onlyOwner {
        publicSaleActive = !publicSaleActive;
    }

    function collectReserves() external onlyOwner {
        require(_owners.length == 0, "Reserves already taken.");
        for (uint256 i; i < RESERVES; i++) _mint(_msgSender(), i);
    }

    function mint(uint256 count) public payable {
        uint256 totalSupply = _owners.length;
        require(publicSaleActive, "Public sale is not active.");
        require(totalSupply + count < MAX_SUPPLY + 1, "Excedes max supply.");
        require(count < MAX_PER_TX + 1, "Exceeds max per transaction.");
        require(count * priceInWei == msg.value, "Invalid funds provided.");

        for (uint256 i; i < count; i++) {
            _mint(_msgSender(), totalSupply + i);
        }
    }

    function burn(uint256 tokenId) public {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "Not approved to burn."
        );
        _burn(tokenId);
    }

    function withdraw() public {
        (bool success, ) = treasuryAccount.call{value: address(this).balance}(
            ""
        );
        require(success, "Failed to send to treasury.");
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) return new uint256[](0);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function batchTransferFrom(
        address _from,
        address _to,
        uint256[] memory _tokenIds
    ) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            transferFrom(_from, _to, _tokenIds[i]);
        }
    }

    function batchSafeTransferFrom(
        address _from,
        address _to,
        uint256[] memory _tokenIds,
        bytes memory data_
    ) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            safeTransferFrom(_from, _to, _tokenIds[i], data_);
        }
    }

    function isOwnerOf(address account, uint256[] calldata _tokenIds)
        external
        view
        returns (bool)
    {
        for (uint256 i; i < _tokenIds.length; ++i) {
            if (_owners[_tokenIds[i]] != account) return false;
        }

        return true;
    }

    function isApprovedForAll(address _owner, address operator)
        public
        view
        override
        returns (bool)
    {
        OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(
            proxyRegistryAddress
        );
        if (
            address(proxyRegistry.proxies(_owner)) == operator ||
            projectProxy[operator]
        ) return true;
        return super.isApprovedForAll(_owner, operator);
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        _owners.push(to);
        emit Transfer(address(0), to, tokenId);
    }
}

contract OwnableDelegateProxy {}

contract OpenSeaProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_treasuryAccount","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceInWei","type":"uint256"}],"name":"setPriceInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txnMax","type":"uint256"}],"name":"setTxnMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePublicSaleActive","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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052612710600955600a80556000600b55600c805460ff191690553480156200002a57600080fd5b5060405162002b2d38038062002b2d8339810160408190526200004d9162000242565b604080518082018252600b81526a415343494920417065706560a81b6020808301918252835180850190945260048452634141594360e01b9084015281519192916200009c916000916200017f565b508051620000b29060019060208401906200017f565b505050620000cf620000c96200012960201b60201c565b6200012d565b8151620000e49060069060208501906200017f565b50600880546001600160a01b039092166001600160a01b03199283161790556007805490911673a5409ec958c83c3f309868babaca7c86dcb077c11790555062000386565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200018d9062000333565b90600052602060002090601f016020900481019282620001b15760008555620001fc565b82601f10620001cc57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fc578251825591602001919060010190620001df565b506200020a9291506200020e565b5090565b5b808211156200020a57600081556001016200020f565b80516001600160a01b03811681146200023d57600080fd5b919050565b600080604083850312156200025657600080fd5b82516001600160401b03808211156200026e57600080fd5b818501915085601f8301126200028357600080fd5b81518181111562000298576200029862000370565b604051601f8201601f19908116603f01168101908382118183101715620002c357620002c362000370565b81604052828152602093508884848701011115620002e057600080fd5b600091505b82821015620003045784820184015181830185015290830190620002e5565b82821115620003165760008484830101525b95506200032891505085820162000225565b925050509250929050565b600181811c908216806200034857607f821691505b602082108114156200036a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61279780620003966000396000f3fe6080604052600436106102675760003560e01c80636352211e11610144578063b88d4fde116100b6578063e100f3d11161007a578063e100f3d114610714578063e985e9c514610734578063f2fde38b14610754578063f3993d1114610774578063f43a22dc14610794578063f73c814b146107aa57600080fd5b8063b88d4fde1461067a578063bc8893b41461069a578063c87b56dd146106b4578063cd7c0326146106d4578063d26ea6c0146106f457600080fd5b80638774e5d0116101085780638774e5d0146105c75780638da5cb5b146105e757806395d89b41146106055780639ec00c951461061a578063a0712d6814610647578063a22cb4651461065a57600080fd5b80636352211e1461053d5780636c0360eb1461055d5780636f8b44b01461057257806370a0823114610592578063715018a6146105b257600080fd5b8063339b2cff116101dd578063438b6300116101a1578063438b6300146104605780634d44660c1461048d5780634f6ccce7146104ad57806355f804b3146104cd5780635a4fee30146104ed5780635bab26e21461050d57600080fd5b8063339b2cff146103d55780633c8da588146103f55780633ccfd60b1461040b57806342842e0e1461042057806342966c681461044057600080fd5b8063095ea7b31161022f578063095ea7b3146103355780630c894cfe1461035557806318160ddd1461036a57806323b872dd1461037f5780632f745c591461039f57806332cb6b0c146103bf57600080fd5b806301ffc9a71461026c578063029877b6146102a157806306fdde03146102b8578063081812fc146102da5780630922f9c514610312575b600080fd5b34801561027857600080fd5b5061028c610287366004612256565b6107ca565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b66107f5565b005b3480156102c457600080fd5b506102cd61087d565b604051610298919061247f565b3480156102e657600080fd5b506102fa6102f53660046122f6565b61090f565b6040516001600160a01b039091168152602001610298565b34801561031e57600080fd5b50610327600081565b604051908152602001610298565b34801561034157600080fd5b506102b661035036600461222a565b610997565b34801561036157600080fd5b506102b6610aad565b34801561037657600080fd5b50600254610327565b34801561038b57600080fd5b506102b661039a3660046120ce565b610aeb565b3480156103ab57600080fd5b506103276103ba36600461222a565b610b1d565b3480156103cb57600080fd5b5061032760095481565b3480156103e157600080fd5b506008546102fa906001600160a01b031681565b34801561040157600080fd5b50610327600b5481565b34801561041757600080fd5b506102b6610bd0565b34801561042c57600080fd5b506102b661043b3660046120ce565b610c73565b34801561044c57600080fd5b506102b661045b3660046122f6565b610c8e565b34801561046c57600080fd5b5061048061047b366004611f8d565b610ce4565b604051610298919061243b565b34801561049957600080fd5b5061028c6104a836600461216f565b610d9d565b3480156104b957600080fd5b506103276104c83660046122f6565b610e1f565b3480156104d957600080fd5b506102b66104e83660046122ad565b610e8c565b3480156104f957600080fd5b506102b6610508366004612045565b610ecd565b34801561051957600080fd5b5061028c610528366004611f8d565b600d6020526000908152604090205460ff1681565b34801561054957600080fd5b506102fa6105583660046122f6565b610f17565b34801561056957600080fd5b506102cd610fa3565b34801561057e57600080fd5b506102b661058d3660046122f6565b611031565b34801561059e57600080fd5b506103276105ad366004611f8d565b611060565b3480156105be57600080fd5b506102b661112e565b3480156105d357600080fd5b506102b66105e23660046122f6565b611162565b3480156105f357600080fd5b506005546001600160a01b03166102fa565b34801561061157600080fd5b506102cd611191565b34801561062657600080fd5b50610327610635366004611f8d565b600e6020526000908152604090205481565b6102b66106553660046122f6565b6111a0565b34801561066657600080fd5b506102b66106753660046121f7565b611338565b34801561068657600080fd5b506102b661069536600461210f565b6113fd565b3480156106a657600080fd5b50600c5461028c9060ff1681565b3480156106c057600080fd5b506102cd6106cf3660046122f6565b611435565b3480156106e057600080fd5b506007546102fa906001600160a01b031681565b34801561070057600080fd5b506102b661070f366004611f8d565b6114b6565b34801561072057600080fd5b506102b661072f3660046122f6565b611502565b34801561074057600080fd5b5061028c61074f366004611faa565b611531565b34801561076057600080fd5b506102b661076f366004611f8d565b611624565b34801561078057600080fd5b506102b661078f366004611fe3565b6116bc565b3480156107a057600080fd5b50610327600a5481565b3480156107b657600080fd5b506102b66107c5366004611f8d565b6116fe565b60006001600160e01b0319821663780e9d6360e01b14806107ef57506107ef82611751565b92915050565b6005546001600160a01b031633146108285760405162461bcd60e51b815260040161081f9061252f565b60405180910390fd5b600254156108785760405162461bcd60e51b815260206004820152601760248201527f526573657276657320616c72656164792074616b656e2e000000000000000000604482015260640161081f565b565b50565b60606000805461088c90612674565b80601f01602080910402602001604051908101604052809291908181526020018280546108b890612674565b80156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b5050505050905090565b600061091a8261181d565b61097b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161081f565b506000908152600360205260409020546001600160a01b031690565b60006109a282610f17565b9050806001600160a01b0316836001600160a01b03161415610a105760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161081f565b336001600160a01b0382161480610a2c5750610a2c8133611531565b610a9e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161081f565b610aa88383611867565b505050565b6005546001600160a01b03163314610ad75760405162461bcd60e51b815260040161081f9061252f565b600c805460ff19811660ff90911615179055565b610af6335b826118d5565b610b125760405162461bcd60e51b815260040161081f90612564565b610aa8838383611997565b6000610b2883611060565b8210610b465760405162461bcd60e51b815260040161081f90612492565b6000805b600254811015610bb75760028181548110610b6757610b6761270a565b6000918252602090912001546001600160a01b0386811691161415610ba55783821415610b975791506107ef9050565b81610ba1816126af565b9250505b80610baf816126af565b915050610b4a565b5060405162461bcd60e51b815260040161081f90612492565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c1d576040519150601f19603f3d011682016040523d82523d6000602084013e610c22565b606091505b505090508061087a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f2074726561737572792e0000000000604482015260640161081f565b610aa8838383604051806020016040528060008152506113fd565b610c9733610af0565b610cdb5760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b604482015260640161081f565b61087a81611aed565b60606000610cf183611060565b905080610d125760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610d2d57610d2d612720565b604051908082528060200260200182016040528015610d56578160200160208202803683370190505b50905060005b82811015610d0a57610d6e8582610b1d565b828281518110610d8057610d8061270a565b602090810291909101015280610d95816126af565b915050610d5c565b6000805b82811015610e1257846001600160a01b03166002858584818110610dc757610dc761270a565b9050602002013581548110610dde57610dde61270a565b6000918252602090912001546001600160a01b031614610e02576000915050610e18565b610e0b816126af565b9050610da1565b50600190505b9392505050565b6002546000908210610e885760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161081f565b5090565b6005546001600160a01b03163314610eb65760405162461bcd60e51b815260040161081f9061252f565b8051610ec9906006906020840190611dff565b5050565b60005b8251811015610f1057610efe8585858481518110610ef057610ef061270a565b6020026020010151856113fd565b80610f08816126af565b915050610ed0565b5050505050565b60008060028381548110610f2d57610f2d61270a565b6000918252602090912001546001600160a01b03169050806107ef5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161081f565b60068054610fb090612674565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90612674565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b505050505081565b6005546001600160a01b0316331461105b5760405162461bcd60e51b815260040161081f9061252f565b600955565b60006001600160a01b0382166110cb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161081f565b6000805b60025481101561112757600281815481106110ec576110ec61270a565b6000918252602090912001546001600160a01b038581169116141561111757611114826126af565b91505b611120816126af565b90506110cf565b5092915050565b6005546001600160a01b031633146111585760405162461bcd60e51b815260040161081f9061252f565b6108786000611b6f565b6005546001600160a01b0316331461118c5760405162461bcd60e51b815260040161081f9061252f565b600b55565b60606001805461088c90612674565b600254600c5460ff166111f55760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206973206e6f74206163746976652e000000000000604482015260640161081f565b6009546112039060016125e6565b61120d83836125e6565b106112505760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161081f565b600a5461125e9060016125e6565b82106112ac5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e00000000604482015260640161081f565b34600b54836112bb9190612612565b146113085760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e000000000000000000604482015260640161081f565b60005b82811015610aa8576113263361132183856125e6565b6117a1565b80611330816126af565b91505061130b565b6001600160a01b0382163314156113915760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161081f565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61140733836118d5565b6114235760405162461bcd60e51b815260040161081f90612564565b61142f84848484611bc1565b50505050565b60606114408261181d565b6114845760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604482015260640161081f565b600661148f83611bf4565b6040516020016114a0929190612357565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146114e05760405162461bcd60e51b815260040161081f9061252f565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461152c5760405162461bcd60e51b815260040161081f9061252f565b600a55565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561157e57600080fd5b505afa158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b69190612290565b6001600160a01b031614806115e357506001600160a01b0383166000908152600d602052604090205460ff165b156115f25760019150506107ef565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b0316331461164e5760405162461bcd60e51b815260040161081f9061252f565b6001600160a01b0381166116b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161081f565b61087a81611b6f565b60005b815181101561142f576116ec84848484815181106116df576116df61270a565b6020026020010151610aeb565b806116f6816126af565b9150506116bf565b6005546001600160a01b031633146117285760405162461bcd60e51b815260040161081f9061252f565b6001600160a01b03166000908152600d60205260409020805460ff19811660ff90911615179055565b60006001600160e01b031982166380ac58cd60e01b148061178257506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316146107ef565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600254600090821080156107ef575060006001600160a01b03166002838154811061184a5761184a61270a565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189c82610f17565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118e08261181d565b6119415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161081f565b600061194c83610f17565b9050806001600160a01b0316846001600160a01b031614806119875750836001600160a01b031661197c8461090f565b6001600160a01b0316145b8061161c575061161c8185611531565b826001600160a01b03166119aa82610f17565b6001600160a01b031614611a125760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161081f565b6001600160a01b038216611a745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161081f565b611a7f600082611867565b8160028281548110611a9357611a9361270a565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611af882610f17565b9050611b05600083611867565b600060028381548110611b1a57611b1a61270a565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611bcc848484611997565b611bd884848484611cf2565b61142f5760405162461bcd60e51b815260040161081f906124dd565b606081611c185750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c425780611c2c816126af565b9150611c3b9050600a836125fe565b9150611c1c565b60008167ffffffffffffffff811115611c5d57611c5d612720565b6040519080825280601f01601f191660200182016040528015611c87576020820181803683370190505b5090505b841561161c57611c9c600183612631565b9150611ca9600a866126ca565b611cb49060306125e6565b60f81b818381518110611cc957611cc961270a565b60200101906001600160f81b031916908160001a905350611ceb600a866125fe565b9450611c8b565b60006001600160a01b0384163b15611df457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d369033908990889088906004016123fe565b602060405180830381600087803b158015611d5057600080fd5b505af1925050508015611d80575060408051601f3d908101601f19168201909252611d7d91810190612273565b60015b611dda573d808015611dae576040519150601f19603f3d011682016040523d82523d6000602084013e611db3565b606091505b508051611dd25760405162461bcd60e51b815260040161081f906124dd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061161c565b506001949350505050565b828054611e0b90612674565b90600052602060002090601f016020900481019282611e2d5760008555611e73565b82601f10611e4657805160ff1916838001178555611e73565b82800160010185558215611e73579182015b82811115611e73578251825591602001919060010190611e58565b50610e889291505b80821115610e885760008155600101611e7b565b600067ffffffffffffffff831115611ea957611ea9612720565b611ebc601f8401601f19166020016125b5565b9050828152838383011115611ed057600080fd5b828260208301376000602084830101529392505050565b600082601f830112611ef857600080fd5b8135602067ffffffffffffffff821115611f1457611f14612720565b8160051b611f238282016125b5565b838152828101908684018388018501891015611f3e57600080fd5b600093505b85841015611f61578035835260019390930192918401918401611f43565b50979650505050505050565b600082601f830112611f7e57600080fd5b610e1883833560208501611e8f565b600060208284031215611f9f57600080fd5b8135610e1881612736565b60008060408385031215611fbd57600080fd5b8235611fc881612736565b91506020830135611fd881612736565b809150509250929050565b600080600060608486031215611ff857600080fd5b833561200381612736565b9250602084013561201381612736565b9150604084013567ffffffffffffffff81111561202f57600080fd5b61203b86828701611ee7565b9150509250925092565b6000806000806080858703121561205b57600080fd5b843561206681612736565b9350602085013561207681612736565b9250604085013567ffffffffffffffff8082111561209357600080fd5b61209f88838901611ee7565b935060608701359150808211156120b557600080fd5b506120c287828801611f6d565b91505092959194509250565b6000806000606084860312156120e357600080fd5b83356120ee81612736565b925060208401356120fe81612736565b929592945050506040919091013590565b6000806000806080858703121561212557600080fd5b843561213081612736565b9350602085013561214081612736565b925060408501359150606085013567ffffffffffffffff81111561216357600080fd5b6120c287828801611f6d565b60008060006040848603121561218457600080fd5b833561218f81612736565b9250602084013567ffffffffffffffff808211156121ac57600080fd5b818601915086601f8301126121c057600080fd5b8135818111156121cf57600080fd5b8760208260051b85010111156121e457600080fd5b6020830194508093505050509250925092565b6000806040838503121561220a57600080fd5b823561221581612736565b915060208301358015158114611fd857600080fd5b6000806040838503121561223d57600080fd5b823561224881612736565b946020939093013593505050565b60006020828403121561226857600080fd5b8135610e188161274b565b60006020828403121561228557600080fd5b8151610e188161274b565b6000602082840312156122a257600080fd5b8151610e1881612736565b6000602082840312156122bf57600080fd5b813567ffffffffffffffff8111156122d657600080fd5b8201601f810184136122e757600080fd5b61161c84823560208401611e8f565b60006020828403121561230857600080fd5b5035919050565b60008151808452612327816020860160208601612648565b601f01601f19169290920160200192915050565b6000815161234d818560208601612648565b9290920192915050565b600080845481600182811c91508083168061237357607f831692505b602080841082141561239357634e487b7160e01b86526022600452602486fd5b8180156123a757600181146123b8576123e5565b60ff198616895284890196506123e5565b60008b81526020902060005b868110156123dd5781548b8201529085019083016123c4565b505084890196505b5050505050506123f5818561233b565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124319083018461230f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561247357835183529284019291840191600101612457565b50909695505050505050565b602081526000610e18602083018461230f565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125de576125de612720565b604052919050565b600082198211156125f9576125f96126de565b500190565b60008261260d5761260d6126f4565b500490565b600081600019048311821515161561262c5761262c6126de565b500290565b600082821015612643576126436126de565b500390565b60005b8381101561266357818101518382015260200161264b565b8381111561142f5750506000910152565b600181811c9082168061268857607f821691505b602082108114156126a957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126c3576126c36126de565b5060010190565b6000826126d9576126d96126f4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087a57600080fd5b6001600160e01b03198116811461087a57600080fdfea2646970667358221220d9cb746c1e2a9bd43374dd1695292f098c056cc9cc95677d5459f46518444e4164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000fb3f49283bb7a6481a177cafe3aca9de6c2a3c0000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e736d65697374792e6170702f6d657461646174612f61617963000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c80636352211e11610144578063b88d4fde116100b6578063e100f3d11161007a578063e100f3d114610714578063e985e9c514610734578063f2fde38b14610754578063f3993d1114610774578063f43a22dc14610794578063f73c814b146107aa57600080fd5b8063b88d4fde1461067a578063bc8893b41461069a578063c87b56dd146106b4578063cd7c0326146106d4578063d26ea6c0146106f457600080fd5b80638774e5d0116101085780638774e5d0146105c75780638da5cb5b146105e757806395d89b41146106055780639ec00c951461061a578063a0712d6814610647578063a22cb4651461065a57600080fd5b80636352211e1461053d5780636c0360eb1461055d5780636f8b44b01461057257806370a0823114610592578063715018a6146105b257600080fd5b8063339b2cff116101dd578063438b6300116101a1578063438b6300146104605780634d44660c1461048d5780634f6ccce7146104ad57806355f804b3146104cd5780635a4fee30146104ed5780635bab26e21461050d57600080fd5b8063339b2cff146103d55780633c8da588146103f55780633ccfd60b1461040b57806342842e0e1461042057806342966c681461044057600080fd5b8063095ea7b31161022f578063095ea7b3146103355780630c894cfe1461035557806318160ddd1461036a57806323b872dd1461037f5780632f745c591461039f57806332cb6b0c146103bf57600080fd5b806301ffc9a71461026c578063029877b6146102a157806306fdde03146102b8578063081812fc146102da5780630922f9c514610312575b600080fd5b34801561027857600080fd5b5061028c610287366004612256565b6107ca565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b66107f5565b005b3480156102c457600080fd5b506102cd61087d565b604051610298919061247f565b3480156102e657600080fd5b506102fa6102f53660046122f6565b61090f565b6040516001600160a01b039091168152602001610298565b34801561031e57600080fd5b50610327600081565b604051908152602001610298565b34801561034157600080fd5b506102b661035036600461222a565b610997565b34801561036157600080fd5b506102b6610aad565b34801561037657600080fd5b50600254610327565b34801561038b57600080fd5b506102b661039a3660046120ce565b610aeb565b3480156103ab57600080fd5b506103276103ba36600461222a565b610b1d565b3480156103cb57600080fd5b5061032760095481565b3480156103e157600080fd5b506008546102fa906001600160a01b031681565b34801561040157600080fd5b50610327600b5481565b34801561041757600080fd5b506102b6610bd0565b34801561042c57600080fd5b506102b661043b3660046120ce565b610c73565b34801561044c57600080fd5b506102b661045b3660046122f6565b610c8e565b34801561046c57600080fd5b5061048061047b366004611f8d565b610ce4565b604051610298919061243b565b34801561049957600080fd5b5061028c6104a836600461216f565b610d9d565b3480156104b957600080fd5b506103276104c83660046122f6565b610e1f565b3480156104d957600080fd5b506102b66104e83660046122ad565b610e8c565b3480156104f957600080fd5b506102b6610508366004612045565b610ecd565b34801561051957600080fd5b5061028c610528366004611f8d565b600d6020526000908152604090205460ff1681565b34801561054957600080fd5b506102fa6105583660046122f6565b610f17565b34801561056957600080fd5b506102cd610fa3565b34801561057e57600080fd5b506102b661058d3660046122f6565b611031565b34801561059e57600080fd5b506103276105ad366004611f8d565b611060565b3480156105be57600080fd5b506102b661112e565b3480156105d357600080fd5b506102b66105e23660046122f6565b611162565b3480156105f357600080fd5b506005546001600160a01b03166102fa565b34801561061157600080fd5b506102cd611191565b34801561062657600080fd5b50610327610635366004611f8d565b600e6020526000908152604090205481565b6102b66106553660046122f6565b6111a0565b34801561066657600080fd5b506102b66106753660046121f7565b611338565b34801561068657600080fd5b506102b661069536600461210f565b6113fd565b3480156106a657600080fd5b50600c5461028c9060ff1681565b3480156106c057600080fd5b506102cd6106cf3660046122f6565b611435565b3480156106e057600080fd5b506007546102fa906001600160a01b031681565b34801561070057600080fd5b506102b661070f366004611f8d565b6114b6565b34801561072057600080fd5b506102b661072f3660046122f6565b611502565b34801561074057600080fd5b5061028c61074f366004611faa565b611531565b34801561076057600080fd5b506102b661076f366004611f8d565b611624565b34801561078057600080fd5b506102b661078f366004611fe3565b6116bc565b3480156107a057600080fd5b50610327600a5481565b3480156107b657600080fd5b506102b66107c5366004611f8d565b6116fe565b60006001600160e01b0319821663780e9d6360e01b14806107ef57506107ef82611751565b92915050565b6005546001600160a01b031633146108285760405162461bcd60e51b815260040161081f9061252f565b60405180910390fd5b600254156108785760405162461bcd60e51b815260206004820152601760248201527f526573657276657320616c72656164792074616b656e2e000000000000000000604482015260640161081f565b565b50565b60606000805461088c90612674565b80601f01602080910402602001604051908101604052809291908181526020018280546108b890612674565b80156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b5050505050905090565b600061091a8261181d565b61097b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161081f565b506000908152600360205260409020546001600160a01b031690565b60006109a282610f17565b9050806001600160a01b0316836001600160a01b03161415610a105760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161081f565b336001600160a01b0382161480610a2c5750610a2c8133611531565b610a9e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161081f565b610aa88383611867565b505050565b6005546001600160a01b03163314610ad75760405162461bcd60e51b815260040161081f9061252f565b600c805460ff19811660ff90911615179055565b610af6335b826118d5565b610b125760405162461bcd60e51b815260040161081f90612564565b610aa8838383611997565b6000610b2883611060565b8210610b465760405162461bcd60e51b815260040161081f90612492565b6000805b600254811015610bb75760028181548110610b6757610b6761270a565b6000918252602090912001546001600160a01b0386811691161415610ba55783821415610b975791506107ef9050565b81610ba1816126af565b9250505b80610baf816126af565b915050610b4a565b5060405162461bcd60e51b815260040161081f90612492565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c1d576040519150601f19603f3d011682016040523d82523d6000602084013e610c22565b606091505b505090508061087a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f2074726561737572792e0000000000604482015260640161081f565b610aa8838383604051806020016040528060008152506113fd565b610c9733610af0565b610cdb5760405162461bcd60e51b81526020600482015260156024820152742737ba1030b8383937bb32b2103a3790313ab9371760591b604482015260640161081f565b61087a81611aed565b60606000610cf183611060565b905080610d125760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610d2d57610d2d612720565b604051908082528060200260200182016040528015610d56578160200160208202803683370190505b50905060005b82811015610d0a57610d6e8582610b1d565b828281518110610d8057610d8061270a565b602090810291909101015280610d95816126af565b915050610d5c565b6000805b82811015610e1257846001600160a01b03166002858584818110610dc757610dc761270a565b9050602002013581548110610dde57610dde61270a565b6000918252602090912001546001600160a01b031614610e02576000915050610e18565b610e0b816126af565b9050610da1565b50600190505b9392505050565b6002546000908210610e885760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161081f565b5090565b6005546001600160a01b03163314610eb65760405162461bcd60e51b815260040161081f9061252f565b8051610ec9906006906020840190611dff565b5050565b60005b8251811015610f1057610efe8585858481518110610ef057610ef061270a565b6020026020010151856113fd565b80610f08816126af565b915050610ed0565b5050505050565b60008060028381548110610f2d57610f2d61270a565b6000918252602090912001546001600160a01b03169050806107ef5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161081f565b60068054610fb090612674565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90612674565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b505050505081565b6005546001600160a01b0316331461105b5760405162461bcd60e51b815260040161081f9061252f565b600955565b60006001600160a01b0382166110cb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161081f565b6000805b60025481101561112757600281815481106110ec576110ec61270a565b6000918252602090912001546001600160a01b038581169116141561111757611114826126af565b91505b611120816126af565b90506110cf565b5092915050565b6005546001600160a01b031633146111585760405162461bcd60e51b815260040161081f9061252f565b6108786000611b6f565b6005546001600160a01b0316331461118c5760405162461bcd60e51b815260040161081f9061252f565b600b55565b60606001805461088c90612674565b600254600c5460ff166111f55760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206973206e6f74206163746976652e000000000000604482015260640161081f565b6009546112039060016125e6565b61120d83836125e6565b106112505760405162461bcd60e51b815260206004820152601360248201527222bc31b2b232b99036b0bc1039bab838363c9760691b604482015260640161081f565b600a5461125e9060016125e6565b82106112ac5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d617820706572207472616e73616374696f6e2e00000000604482015260640161081f565b34600b54836112bb9190612612565b146113085760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642066756e64732070726f76696465642e000000000000000000604482015260640161081f565b60005b82811015610aa8576113263361132183856125e6565b6117a1565b80611330816126af565b91505061130b565b6001600160a01b0382163314156113915760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161081f565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61140733836118d5565b6114235760405162461bcd60e51b815260040161081f90612564565b61142f84848484611bc1565b50505050565b60606114408261181d565b6114845760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604482015260640161081f565b600661148f83611bf4565b6040516020016114a0929190612357565b6040516020818303038152906040529050919050565b6005546001600160a01b031633146114e05760405162461bcd60e51b815260040161081f9061252f565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461152c5760405162461bcd60e51b815260040161081f9061252f565b600a55565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b15801561157e57600080fd5b505afa158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b69190612290565b6001600160a01b031614806115e357506001600160a01b0383166000908152600d602052604090205460ff165b156115f25760019150506107ef565b6001600160a01b0380851660009081526004602090815260408083209387168352929052205460ff165b949350505050565b6005546001600160a01b0316331461164e5760405162461bcd60e51b815260040161081f9061252f565b6001600160a01b0381166116b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161081f565b61087a81611b6f565b60005b815181101561142f576116ec84848484815181106116df576116df61270a565b6020026020010151610aeb565b806116f6816126af565b9150506116bf565b6005546001600160a01b031633146117285760405162461bcd60e51b815260040161081f9061252f565b6001600160a01b03166000908152600d60205260409020805460ff19811660ff90911615179055565b60006001600160e01b031982166380ac58cd60e01b148061178257506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316146107ef565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600254600090821080156107ef575060006001600160a01b03166002838154811061184a5761184a61270a565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189c82610f17565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118e08261181d565b6119415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161081f565b600061194c83610f17565b9050806001600160a01b0316846001600160a01b031614806119875750836001600160a01b031661197c8461090f565b6001600160a01b0316145b8061161c575061161c8185611531565b826001600160a01b03166119aa82610f17565b6001600160a01b031614611a125760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161081f565b6001600160a01b038216611a745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161081f565b611a7f600082611867565b8160028281548110611a9357611a9361270a565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000611af882610f17565b9050611b05600083611867565b600060028381548110611b1a57611b1a61270a565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611bcc848484611997565b611bd884848484611cf2565b61142f5760405162461bcd60e51b815260040161081f906124dd565b606081611c185750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c425780611c2c816126af565b9150611c3b9050600a836125fe565b9150611c1c565b60008167ffffffffffffffff811115611c5d57611c5d612720565b6040519080825280601f01601f191660200182016040528015611c87576020820181803683370190505b5090505b841561161c57611c9c600183612631565b9150611ca9600a866126ca565b611cb49060306125e6565b60f81b818381518110611cc957611cc961270a565b60200101906001600160f81b031916908160001a905350611ceb600a866125fe565b9450611c8b565b60006001600160a01b0384163b15611df457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d369033908990889088906004016123fe565b602060405180830381600087803b158015611d5057600080fd5b505af1925050508015611d80575060408051601f3d908101601f19168201909252611d7d91810190612273565b60015b611dda573d808015611dae576040519150601f19603f3d011682016040523d82523d6000602084013e611db3565b606091505b508051611dd25760405162461bcd60e51b815260040161081f906124dd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061161c565b506001949350505050565b828054611e0b90612674565b90600052602060002090601f016020900481019282611e2d5760008555611e73565b82601f10611e4657805160ff1916838001178555611e73565b82800160010185558215611e73579182015b82811115611e73578251825591602001919060010190611e58565b50610e889291505b80821115610e885760008155600101611e7b565b600067ffffffffffffffff831115611ea957611ea9612720565b611ebc601f8401601f19166020016125b5565b9050828152838383011115611ed057600080fd5b828260208301376000602084830101529392505050565b600082601f830112611ef857600080fd5b8135602067ffffffffffffffff821115611f1457611f14612720565b8160051b611f238282016125b5565b838152828101908684018388018501891015611f3e57600080fd5b600093505b85841015611f61578035835260019390930192918401918401611f43565b50979650505050505050565b600082601f830112611f7e57600080fd5b610e1883833560208501611e8f565b600060208284031215611f9f57600080fd5b8135610e1881612736565b60008060408385031215611fbd57600080fd5b8235611fc881612736565b91506020830135611fd881612736565b809150509250929050565b600080600060608486031215611ff857600080fd5b833561200381612736565b9250602084013561201381612736565b9150604084013567ffffffffffffffff81111561202f57600080fd5b61203b86828701611ee7565b9150509250925092565b6000806000806080858703121561205b57600080fd5b843561206681612736565b9350602085013561207681612736565b9250604085013567ffffffffffffffff8082111561209357600080fd5b61209f88838901611ee7565b935060608701359150808211156120b557600080fd5b506120c287828801611f6d565b91505092959194509250565b6000806000606084860312156120e357600080fd5b83356120ee81612736565b925060208401356120fe81612736565b929592945050506040919091013590565b6000806000806080858703121561212557600080fd5b843561213081612736565b9350602085013561214081612736565b925060408501359150606085013567ffffffffffffffff81111561216357600080fd5b6120c287828801611f6d565b60008060006040848603121561218457600080fd5b833561218f81612736565b9250602084013567ffffffffffffffff808211156121ac57600080fd5b818601915086601f8301126121c057600080fd5b8135818111156121cf57600080fd5b8760208260051b85010111156121e457600080fd5b6020830194508093505050509250925092565b6000806040838503121561220a57600080fd5b823561221581612736565b915060208301358015158114611fd857600080fd5b6000806040838503121561223d57600080fd5b823561224881612736565b946020939093013593505050565b60006020828403121561226857600080fd5b8135610e188161274b565b60006020828403121561228557600080fd5b8151610e188161274b565b6000602082840312156122a257600080fd5b8151610e1881612736565b6000602082840312156122bf57600080fd5b813567ffffffffffffffff8111156122d657600080fd5b8201601f810184136122e757600080fd5b61161c84823560208401611e8f565b60006020828403121561230857600080fd5b5035919050565b60008151808452612327816020860160208601612648565b601f01601f19169290920160200192915050565b6000815161234d818560208601612648565b9290920192915050565b600080845481600182811c91508083168061237357607f831692505b602080841082141561239357634e487b7160e01b86526022600452602486fd5b8180156123a757600181146123b8576123e5565b60ff198616895284890196506123e5565b60008b81526020902060005b868110156123dd5781548b8201529085019083016123c4565b505084890196505b5050505050506123f5818561233b565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124319083018461230f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561247357835183529284019291840191600101612457565b50909695505050505050565b602081526000610e18602083018461230f565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125de576125de612720565b604052919050565b600082198211156125f9576125f96126de565b500190565b60008261260d5761260d6126f4565b500490565b600081600019048311821515161561262c5761262c6126de565b500290565b600082821015612643576126436126de565b500390565b60005b8381101561266357818101518382015260200161264b565b8381111561142f5750506000910152565b600181811c9082168061268857607f821691505b602082108114156126a957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126c3576126c36126de565b5060010190565b6000826126d9576126d96126f4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087a57600080fd5b6001600160e01b03198116811461087a57600080fdfea2646970667358221220d9cb746c1e2a9bd43374dd1695292f098c056cc9cc95677d5459f46518444e4164736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000fb3f49283bb7a6481a177cafe3aca9de6c2a3c0000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e736d65697374792e6170702f6d657461646174612f61617963000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://api.smeisty.app/metadata/aayc
Arg [1] : _treasuryAccount (address): 0x0FB3F49283bB7a6481A177cAFE3aCa9dE6c2A3c0

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000fb3f49283bb7a6481a177cafe3aca9de6c2a3c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [3] : 68747470733a2f2f6170692e736d65697374792e6170702f6d65746164617461
Arg [4] : 2f61617963000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31067:5177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26430:224;;;;;;;;;;-1:-1:-1;26430:224:0;;;;;:::i;:::-;;:::i;:::-;;;10901:14:1;;10894:22;10876:41;;10864:2;10849:18;26430:224:0;;;;;;;;33198:188;;;;;;;;;;;;;:::i;:::-;;15047:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15859:308::-;;;;;;;;;;-1:-1:-1;15859:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9562:32:1;;;9544:51;;9532:2;9517:18;15859:308:0;9398:203:1;31307:36:0;;;;;;;;;;;;31342:1;31307:36;;;;;20191:25:1;;;20179:2;20164:18;31307:36:0;20045:177:1;15382:411:0;;;;;;;;;;-1:-1:-1;15382:411:0;;;;;:::i;:::-;;:::i;33082:108::-;;;;;;;;;;;;;:::i;26730:110::-;;;;;;;;;;-1:-1:-1;26818:7:0;:14;26730:110;;16918:376;;;;;;;;;;-1:-1:-1;16918:376:0;;;;;:::i;:::-;;:::i;27206:490::-;;;;;;;;;;-1:-1:-1;27206:490:0;;;;;:::i;:::-;;:::i;31228:33::-;;;;;;;;;;;;;;;;31189:30;;;;;;;;;;-1:-1:-1;31189:30:0;;;;-1:-1:-1;;;;;31189:30:0;;;31350:35;;;;;;;;;;;;;;;;34107:201;;;;;;;;;;;;;:::i;17365:185::-;;;;;;;;;;-1:-1:-1;17365:185:0;;;;;:::i;:::-;;:::i;33905:194::-;;;;;;;;;;-1:-1:-1;33905:194:0;;;;;:::i;:::-;;:::i;34316:432::-;;;;;;;;;;-1:-1:-1;34316:432:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35324:289::-;;;;;;;;;;-1:-1:-1;35324:289:0;;;;;:::i;:::-;;:::i;26917:205::-;;;;;;;;;;-1:-1:-1;26917:205:0;;;;;:::i;:::-;;:::i;32053:98::-;;;;;;;;;;-1:-1:-1;32053:98:0;;;;;:::i;:::-;;:::i;35018:298::-;;;;;;;;;;-1:-1:-1;35018:298:0;;;;;:::i;:::-;;:::i;31440:44::-;;;;;;;;;;-1:-1:-1;31440:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14654:326;;;;;;;;;;-1:-1:-1;14654:326:0;;;;;:::i;:::-;;:::i;31117:21::-;;;;;;;;;;;;;:::i;32159:101::-;;;;;;;;;;-1:-1:-1;32159:101:0;;;;;:::i;:::-;;:::i;14200:392::-;;;;;;;;;;-1:-1:-1;14200:392:0;;;;;:::i;:::-;;:::i;29414:103::-;;;;;;;;;;;;;:::i;32268:104::-;;;;;;;;;;-1:-1:-1;32268:104:0;;;;;:::i;:::-;;:::i;28763:87::-;;;;;;;;;;-1:-1:-1;28836:6:0;;-1:-1:-1;;;;;28836:6:0;28763:87;;15216:104;;;;;;;;;;;;;:::i;31491:50::-;;;;;;;;;;-1:-1:-1;31491:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;33394:503;;;;;;:::i;:::-;;:::i;16239:327::-;;;;;;;;;;-1:-1:-1;16239:327:0;;;;;:::i;:::-;;:::i;17621:365::-;;;;;;;;;;-1:-1:-1;17621:365:0;;;;;:::i;:::-;;:::i;31392:39::-;;;;;;;;;;-1:-1:-1;31392:39:0;;;;;;;;32480:271;;;;;;;;;;-1:-1:-1;32480:271:0;;;;;:::i;:::-;;:::i;31147:35::-;;;;;;;;;;-1:-1:-1;31147:35:0;;;;-1:-1:-1;;;;;31147:35:0;;;32759:169;;;;;;;;;;-1:-1:-1;32759:169:0;;;;;:::i;:::-;;:::i;32380:92::-;;;;;;;;;;-1:-1:-1;32380:92:0;;;;;:::i;:::-;;:::i;35621:458::-;;;;;;;;;;-1:-1:-1;35621:458:0;;;;;:::i;:::-;;:::i;29672:201::-;;;;;;;;;;-1:-1:-1;29672:201:0;;;;;:::i;:::-;;:::i;34756:254::-;;;;;;;;;;-1:-1:-1;34756:254:0;;;;;:::i;:::-;;:::i;31270:30::-;;;;;;;;;;;;;;;;32936:138;;;;;;;;;;-1:-1:-1;32936:138:0;;;;;:::i;:::-;;:::i;26430:224::-;26532:4;-1:-1:-1;;;;;;26556:50:0;;-1:-1:-1;;;26556:50:0;;:90;;;26610:36;26634:11;26610:23;:36::i;:::-;26549:97;26430:224;-1:-1:-1;;26430:224:0:o;33198:188::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;;;;;;;;;33263:7:::1;:14:::0;:19;33255:55:::1;;;::::0;-1:-1:-1;;;33255:55:0;;18707:2:1;33255:55:0::1;::::0;::::1;18689:21:1::0;18746:2;18726:18;;;18719:30;18785:25;18765:18;;;18758:53;18828:18;;33255:55:0::1;18505:347:1::0;33255:55:0::1;33198:188::o:0;33321:57::-:1;;33198:188::o:0;15047:100::-;15101:13;15134:5;15127:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15047:100;:::o;15859:308::-;15980:7;16027:16;16035:7;16027;:16::i;:::-;16005:110;;;;-1:-1:-1;;;16005:110:0;;16771:2:1;16005:110:0;;;16753:21:1;16810:2;16790:18;;;16783:30;16849:34;16829:18;;;16822:62;-1:-1:-1;;;16900:18:1;;;16893:42;16952:19;;16005:110:0;16569:408:1;16005:110:0;-1:-1:-1;16135:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;16135:24:0;;15859:308::o;15382:411::-;15463:13;15479:23;15494:7;15479:14;:23::i;:::-;15463:39;;15527:5;-1:-1:-1;;;;;15521:11:0;:2;-1:-1:-1;;;;;15521:11:0;;;15513:57;;;;-1:-1:-1;;;15513:57:0;;18305:2:1;15513:57:0;;;18287:21:1;18344:2;18324:18;;;18317:30;18383:34;18363:18;;;18356:62;-1:-1:-1;;;18434:18:1;;;18427:31;18475:19;;15513:57:0;18103:397:1;15513:57:0;12891:10;-1:-1:-1;;;;;15605:21:0;;;;:62;;-1:-1:-1;15630:37:0;15647:5;12891:10;35621:458;:::i;15630:37::-;15583:168;;;;-1:-1:-1;;;15583:168:0;;14823:2:1;15583:168:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901:34;14881:18;;;14874:62;14972:26;14952:18;;;14945:54;15016:19;;15583:168:0;14621:420:1;15583:168:0;15764:21;15773:2;15777:7;15764:8;:21::i;:::-;15452:341;15382:411;;:::o;33082:108::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;33166:16:::1;::::0;;-1:-1:-1;;33146:36:0;::::1;33166:16;::::0;;::::1;33165:17;33146:36;::::0;;33082:108::o;16918:376::-;17127:41;12891:10;17146:12;17160:7;17127:18;:41::i;:::-;17105:140;;;;-1:-1:-1;;;17105:140:0;;;;;;;:::i;:::-;17258:28;17268:4;17274:2;17278:7;17258:9;:28::i;27206:490::-;27303:15;27347:16;27357:5;27347:9;:16::i;:::-;27339:5;:24;27331:80;;;;-1:-1:-1;;;27331:80:0;;;;;;;:::i;:::-;27424:10;27449:6;27445:178;27461:7;:14;27457:18;;27445:178;;;27508:7;27516:1;27508:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;27499:19:0;;;27508:10;;27499:19;27496:116;;;27550:5;27541;:14;27538:58;;;27564:1;-1:-1:-1;27557:8:0;;-1:-1:-1;27557:8:0;27538:58;27589:7;;;;:::i;:::-;;;;27538:58;27477:3;;;;:::i;:::-;;;;27445:178;;;;27635:53;;-1:-1:-1;;;27635:53:0;;;;;;;:::i;34107:201::-;34164:15;;:78;;34146:12;;-1:-1:-1;;;;;34164:15:0;;34192:21;;34146:12;34164:78;34146:12;34164:78;34192:21;34164:15;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34145:97;;;34261:7;34253:47;;;;-1:-1:-1;;;34253:47:0;;11702:2:1;34253:47:0;;;11684:21:1;11741:2;11721:18;;;11714:30;11780:29;11760:18;;;11753:57;11827:18;;34253:47:0;11500:351:1;17365:185:0;17503:39;17520:4;17526:2;17530:7;17503:39;;;;;;;;;;;;:16;:39::i;33905:194::-;33976:41;12891:10;33995:12;12811:98;33976:41;33954:112;;;;-1:-1:-1;;;33954:112:0;;17955:2:1;33954:112:0;;;17937:21:1;17994:2;17974:18;;;17967:30;-1:-1:-1;;;18013:18:1;;;18006:51;18074:18;;33954:112:0;17753:345:1;33954:112:0;34077:14;34083:7;34077:5;:14::i;34316:432::-;34403:16;34437:18;34458:17;34468:6;34458:9;:17::i;:::-;34437:38;-1:-1:-1;34490:15:0;34486:44;;34514:16;;;34528:1;34514:16;;;;;;;;;;;-1:-1:-1;34507:23:0;34316:432;-1:-1:-1;;;34316:432:0:o;34486:44::-;34543:25;34585:10;34571:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34571:25:0;;34543:53;;34612:9;34607:108;34627:10;34623:1;:14;34607:108;;;34673:30;34693:6;34701:1;34673:19;:30::i;:::-;34659:8;34668:1;34659:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;34639:3;;;;:::i;:::-;;;;34607:108;;35324:289;35440:4;35467:9;35462:120;35478:20;;;35462:120;;;35549:7;-1:-1:-1;;;;;35524:32:0;:7;35532:9;;35542:1;35532:12;;;;;;;:::i;:::-;;;;;;;35524:21;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35524:21:0;:32;35520:50;;35565:5;35558:12;;;;;35520:50;35500:3;;;:::i;:::-;;;35462:120;;;;35601:4;35594:11;;35324:289;;;;;;:::o;26917:205::-;27028:7;:14;26992:7;;27020:22;;27012:79;;;;-1:-1:-1;;;27012:79:0;;19834:2:1;27012:79:0;;;19816:21:1;19873:2;19853:18;;;19846:30;19912:34;19892:18;;;19885:62;-1:-1:-1;;;19963:18:1;;;19956:42;20015:19;;27012:79:0;19632:408:1;27012:79:0;-1:-1:-1;27109:5:0;26917:205::o;32053:98::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;32125:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;32053:98:::0;:::o;35018:298::-;35191:9;35186:123;35210:9;:16;35206:1;:20;35186:123;;;35248:49;35265:5;35272:3;35277:9;35287:1;35277:12;;;;;;;;:::i;:::-;;;;;;;35291:5;35248:16;:49::i;:::-;35228:3;;;;:::i;:::-;;;;35186:123;;;;35018:298;;;;:::o;14654:326::-;14771:7;14796:13;14812:7;14820;14812:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;14812:16:0;;-1:-1:-1;14861:19:0;14839:110;;;;-1:-1:-1;;;14839:110:0;;15659:2:1;14839:110:0;;;15641:21:1;15698:2;15678:18;;;15671:30;15737:34;15717:18;;;15710:62;-1:-1:-1;;;15788:18:1;;;15781:39;15837:19;;14839:110:0;15457:405:1;31117:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32159:101::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;32229:10:::1;:23:::0;32159:101::o;14200:392::-;14322:4;-1:-1:-1;;;;;14353:19:0;;14345:74;;;;-1:-1:-1;;;14345:74:0;;15248:2:1;14345:74:0;;;15230:21:1;15287:2;15267:18;;;15260:30;15326:34;15306:18;;;15299:62;-1:-1:-1;;;15377:18:1;;;15370:40;15427:19;;14345:74:0;15046:406:1;14345:74:0;14432:10;14458:6;14453:109;14470:7;:14;14466:18;;14453:109;;;14517:7;14525:1;14517:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;14508:19:0;;;14517:10;;14508:19;14504:46;;;14543:7;;;:::i;:::-;;;14504:46;14486:3;;;:::i;:::-;;;14453:109;;;-1:-1:-1;14579:5:0;14200:392;-1:-1:-1;;14200:392:0:o;29414:103::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;29479:30:::1;29506:1;29479:18;:30::i;32268:104::-:0;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;32340:10:::1;:24:::0;32268:104::o;15216:::-;15272:13;15305:7;15298:14;;;;;:::i;33394:503::-;33471:7;:14;33504:16;;;;33496:55;;;;-1:-1:-1;;;33496:55:0;;13296:2:1;33496:55:0;;;13278:21:1;13335:2;13315:18;;;13308:30;13374:28;13354:18;;;13347:56;13420:18;;33496:55:0;13094:350:1;33496:55:0;33592:10;;:14;;33605:1;33592:14;:::i;:::-;33570:19;33584:5;33570:11;:19;:::i;:::-;:36;33562:68;;;;-1:-1:-1;;;33562:68:0;;11354:2:1;33562:68:0;;;11336:21:1;11393:2;11373:18;;;11366:30;-1:-1:-1;;;11412:18:1;;;11405:49;11471:18;;33562:68:0;11152:343:1;33562:68:0;33657:10;;:14;;33670:1;33657:14;:::i;:::-;33649:5;:22;33641:63;;;;-1:-1:-1;;;33641:63:0;;19477:2:1;33641:63:0;;;19459:21:1;19516:2;19496:18;;;19489:30;19555;19535:18;;;19528:58;19603:18;;33641:63:0;19275:352:1;33641:63:0;33745:9;33731:10;;33723:5;:18;;;;:::i;:::-;:31;33715:67;;;;-1:-1:-1;;;33715:67:0;;16069:2:1;33715:67:0;;;16051:21:1;16108:2;16088:18;;;16081:30;16147:25;16127:18;;;16120:53;16190:18;;33715:67:0;15867:347:1;33715:67:0;33800:9;33795:95;33815:5;33811:1;:9;33795:95;;;33842:36;12891:10;33862:15;33876:1;33862:11;:15;:::i;:::-;33842:5;:36::i;:::-;33822:3;;;;:::i;:::-;;;;33795:95;;16239:327;-1:-1:-1;;;;;16374:24:0;;12891:10;16374:24;;16366:62;;;;-1:-1:-1;;;16366:62:0;;14056:2:1;16366:62:0;;;14038:21:1;14095:2;14075:18;;;14068:30;14134:27;14114:18;;;14107:55;14179:18;;16366:62:0;13854:349:1;16366:62:0;12891:10;16441:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16441:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;16441:53:0;;;;;;;;;;16510:48;;10876:41:1;;;16441:42:0;;12891:10;16510:48;;10849:18:1;16510:48:0;;;;;;;16239:327;;:::o;17621:365::-;17810:41;12891:10;17843:7;17810:18;:41::i;:::-;17788:140;;;;-1:-1:-1;;;17788:140:0;;;;;;;:::i;:::-;17939:39;17953:4;17959:2;17963:7;17972:5;17939:13;:39::i;:::-;17621:365;;;;:::o;32480:271::-;32582:13;32621:17;32629:8;32621:7;:17::i;:::-;32613:51;;;;-1:-1:-1;;;32613:51:0;;16421:2:1;32613:51:0;;;16403:21:1;16460:2;16440:18;;;16433:30;-1:-1:-1;;;16479:18:1;;;16472:51;16540:18;;32613:51:0;16219:345:1;32613:51:0;32706:7;32715:26;32732:8;32715:16;:26::i;:::-;32689:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32675:68;;32480:271;;;:::o;32759:169::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;32876:20:::1;:44:::0;;-1:-1:-1;;;;;;32876:44:0::1;-1:-1:-1::0;;;;;32876:44:0;;;::::1;::::0;;;::::1;::::0;;32759:169::o;32380:92::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;32444:10:::1;:20:::0;32380:92::o;35621:458::-;35841:20;;35909:29;;-1:-1:-1;;;35909:29:0;;-1:-1:-1;;;;;9562:32:1;;;35909:29:0;;;9544:51:1;35747:4:0;;35841:20;;;35901:50;;;;35841:20;;35909:21;;9517:18:1;;35909:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35901:50:0;;:89;;;-1:-1:-1;;;;;;35968:22:0;;;;;;:12;:22;;;;;;;;35901:89;35883:130;;;36009:4;36002:11;;;;;35883:130;-1:-1:-1;;;;;16808:25:0;;;16779:4;16808:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;36031:40;36024:47;35621:458;-1:-1:-1;;;;35621:458:0:o;29672:201::-;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29761:22:0;::::1;29753:73;;;::::0;-1:-1:-1;;;29753:73:0;;12889:2:1;29753:73:0::1;::::0;::::1;12871:21:1::0;12928:2;12908:18;;;12901:30;12967:34;12947:18;;;12940:62;-1:-1:-1;;;13018:18:1;;;13011:36;13064:19;;29753:73:0::1;12687:402:1::0;29753:73:0::1;29837:28;29856:8;29837:18;:28::i;34756:254::-:0;34896:9;34891:112;34915:9;:16;34911:1;:20;34891:112;;;34953:38;34966:5;34973:3;34978:9;34988:1;34978:12;;;;;;;;:::i;:::-;;;;;;;34953;:38::i;:::-;34933:3;;;;:::i;:::-;;;;34891:112;;32936:138;28836:6;;-1:-1:-1;;;;;28836:6:0;12891:10;28983:23;28975:68;;;;-1:-1:-1;;;28975:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33040:26:0::1;;::::0;;;:12:::1;:26;::::0;;;;;;-1:-1:-1;;33010:56:0;::::1;33040:26;::::0;;::::1;33039:27;33010:56;::::0;;32936:138::o;13781:355::-;13928:4;-1:-1:-1;;;;;;13970:40:0;;-1:-1:-1;;;13970:40:0;;:105;;-1:-1:-1;;;;;;;14027:48:0;;-1:-1:-1;;;14027:48:0;13970:105;:158;;;-1:-1:-1;;;;;;;;;;5329:40:0;;;14092:36;5220:157;36087:154;36168:7;:16;;;;;;;-1:-1:-1;36168:16:0;;;;;;;-1:-1:-1;;;;;;36168:16:0;-1:-1:-1;;;;;36168:16:0;;;;;;;;36200:33;;36225:7;;-1:-1:-1;36200:33:0;;-1:-1:-1;;36200:33:0;36087:154;;:::o;19533:155::-;19632:7;:14;19598:4;;19622:24;;:58;;;;;19678:1;-1:-1:-1;;;;;19650:30:0;:7;19658;19650:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19650:16:0;:30;;19615:65;19533:155;-1:-1:-1;;19533:155:0:o;23558:174::-;23633:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;23633:29:0;-1:-1:-1;;;;;23633:29:0;;;;;;;;:24;;23687:23;23633:24;23687:14;:23::i;:::-;-1:-1:-1;;;;;23678:46:0;;;;;;;;;;;23558:174;;:::o;19855:452::-;19984:4;20028:16;20036:7;20028;:16::i;:::-;20006:110;;;;-1:-1:-1;;;20006:110:0;;14410:2:1;20006:110:0;;;14392:21:1;14449:2;14429:18;;;14422:30;14488:34;14468:18;;;14461:62;-1:-1:-1;;;14539:18:1;;;14532:42;14591:19;;20006:110:0;14208:408:1;20006:110:0;20127:13;20143:23;20158:7;20143:14;:23::i;:::-;20127:39;;20196:5;-1:-1:-1;;;;;20185:16:0;:7;-1:-1:-1;;;;;20185:16:0;;:64;;;;20242:7;-1:-1:-1;;;;;20218:31:0;:20;20230:7;20218:11;:20::i;:::-;-1:-1:-1;;;;;20218:31:0;;20185:64;:113;;;;20266:32;20283:5;20290:7;20266:16;:32::i;22887:553::-;23060:4;-1:-1:-1;;;;;23033:31:0;:23;23048:7;23033:14;:23::i;:::-;-1:-1:-1;;;;;23033:31:0;;23011:122;;;;-1:-1:-1;;;23011:122:0;;17545:2:1;23011:122:0;;;17527:21:1;17584:2;17564:18;;;17557:30;17623:34;17603:18;;;17596:62;-1:-1:-1;;;17674:18:1;;;17667:39;17723:19;;23011:122:0;17343:405:1;23011:122:0;-1:-1:-1;;;;;23152:16:0;;23144:65;;;;-1:-1:-1;;;23144:65:0;;13651:2:1;23144:65:0;;;13633:21:1;13690:2;13670:18;;;13663:30;13729:34;13709:18;;;13702:62;-1:-1:-1;;;13780:18:1;;;13773:34;13824:19;;23144:65:0;13449:400:1;23144:65:0;23326:29;23343:1;23347:7;23326:8;:29::i;:::-;23385:2;23366:7;23374;23366:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;23366:21:0;-1:-1:-1;;;;;23366:21:0;;;;;;23405:27;;23424:7;;23405:27;;;;;;;;;;23366:16;23405:27;22887:553;;;:::o;22218:332::-;22278:13;22294:23;22309:7;22294:14;:23::i;:::-;22278:39;;22419:29;22436:1;22440:7;22419:8;:29::i;:::-;22486:1;22459:7;22467;22459:16;;;;;;;;:::i;:::-;;;;;;;;;:29;;-1:-1:-1;;;;;;22459:29:0;-1:-1:-1;;;;;22459:29:0;;;;;;22506:36;;22534:7;;22506:36;;;;;22459:16;;22506:36;22267:283;22218:332;:::o;30033:191::-;30126:6;;;-1:-1:-1;;;;;30143:17:0;;;-1:-1:-1;;;;;;30143:17:0;;;;;;;30176:40;;30126:6;;;30143:17;30126:6;;30176:40;;30107:16;;30176:40;30096:128;30033:191;:::o;18868:352::-;19025:28;19035:4;19041:2;19045:7;19025:9;:28::i;:::-;19086:48;19109:4;19115:2;19119:7;19128:5;19086:22;:48::i;:::-;19064:148;;;;-1:-1:-1;;;19064:148:0;;;;;;;:::i;648:723::-;704:13;925:10;921:53;;-1:-1:-1;;952:10:0;;;;;;;;;;;;-1:-1:-1;;;952:10:0;;;;;648:723::o;921:53::-;999:5;984:12;1040:78;1047:9;;1040:78;;1073:8;;;;:::i;:::-;;-1:-1:-1;1096:10:0;;-1:-1:-1;1104:2:0;1096:10;;:::i;:::-;;;1040:78;;;1128:19;1160:6;1150:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:17:0;;1128:39;;1178:154;1185:10;;1178:154;;1212:11;1222:1;1212:11;;:::i;:::-;;-1:-1:-1;1281:10:0;1289:2;1281:5;:10;:::i;:::-;1268:24;;:2;:24;:::i;:::-;1255:39;;1238:6;1245;1238:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1238:56:0;;;;;;;;-1:-1:-1;1309:11:0;1318:2;1309:11;;:::i;:::-;;;1178:154;;24297:980;24452:4;-1:-1:-1;;;;;24473:13:0;;214:20;262:8;24469:801;;24526:175;;-1:-1:-1;;;24526:175:0;;-1:-1:-1;;;;;24526:36:0;;;;;:175;;12891:10;;24620:4;;24647:7;;24677:5;;24526:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24526:175:0;;;;;;;;-1:-1:-1;;24526:175:0;;;;;;;;;;;;:::i;:::-;;;24505:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24884:13:0;;24880:320;;24927:108;;-1:-1:-1;;;24927:108:0;;;;;;;:::i;24880:320::-;25150:6;25144:13;25135:6;25131:2;25127:15;25120:38;24505:710;-1:-1:-1;;;;;;24765:51:0;-1:-1:-1;;;24765:51:0;;-1:-1:-1;24758:58:0;;24469:801;-1:-1:-1;25254:4:0;24297:980;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:723::-;479:5;532:3;525:4;517:6;513:17;509:27;499:55;;550:1;547;540:12;499:55;586:6;573:20;612:4;635:18;631:2;628:26;625:52;;;657:18;;:::i;:::-;703:2;700:1;696:10;726:28;750:2;746;742:11;726:28;:::i;:::-;788:15;;;819:12;;;;851:15;;;885;;;881:24;;878:33;-1:-1:-1;875:53:1;;;924:1;921;914:12;875:53;946:1;937:10;;956:163;970:2;967:1;964:9;956:163;;;1027:17;;1015:30;;988:1;981:9;;;;;1065:12;;;;1097;;956:163;;;-1:-1:-1;1137:5:1;425:723;-1:-1:-1;;;;;;;425:723:1:o;1153:220::-;1195:5;1248:3;1241:4;1233:6;1229:17;1225:27;1215:55;;1266:1;1263;1256:12;1215:55;1288:79;1363:3;1354:6;1341:20;1334:4;1326:6;1322:17;1288:79;:::i;1378:247::-;1437:6;1490:2;1478:9;1469:7;1465:23;1461:32;1458:52;;;1506:1;1503;1496:12;1458:52;1545:9;1532:23;1564:31;1589:5;1564:31;:::i;1630:388::-;1698:6;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1814:9;1801:23;1833:31;1858:5;1833:31;:::i;:::-;1883:5;-1:-1:-1;1940:2:1;1925:18;;1912:32;1953:33;1912:32;1953:33;:::i;:::-;2005:7;1995:17;;;1630:388;;;;;:::o;2023:624::-;2125:6;2133;2141;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2249:9;2236:23;2268:31;2293:5;2268:31;:::i;:::-;2318:5;-1:-1:-1;2375:2:1;2360:18;;2347:32;2388:33;2347:32;2388:33;:::i;:::-;2440:7;-1:-1:-1;2498:2:1;2483:18;;2470:32;2525:18;2514:30;;2511:50;;;2557:1;2554;2547:12;2511:50;2580:61;2633:7;2624:6;2613:9;2609:22;2580:61;:::i;:::-;2570:71;;;2023:624;;;;;:::o;2652:844::-;2772:6;2780;2788;2796;2849:3;2837:9;2828:7;2824:23;2820:33;2817:53;;;2866:1;2863;2856:12;2817:53;2905:9;2892:23;2924:31;2949:5;2924:31;:::i;:::-;2974:5;-1:-1:-1;3031:2:1;3016:18;;3003:32;3044:33;3003:32;3044:33;:::i;:::-;3096:7;-1:-1:-1;3154:2:1;3139:18;;3126:32;3177:18;3207:14;;;3204:34;;;3234:1;3231;3224:12;3204:34;3257:61;3310:7;3301:6;3290:9;3286:22;3257:61;:::i;:::-;3247:71;;3371:2;3360:9;3356:18;3343:32;3327:48;;3400:2;3390:8;3387:16;3384:36;;;3416:1;3413;3406:12;3384:36;;3439:51;3482:7;3471:8;3460:9;3456:24;3439:51;:::i;:::-;3429:61;;;2652:844;;;;;;;:::o;3501:456::-;3578:6;3586;3594;3647:2;3635:9;3626:7;3622:23;3618:32;3615:52;;;3663:1;3660;3653:12;3615:52;3702:9;3689:23;3721:31;3746:5;3721:31;:::i;:::-;3771:5;-1:-1:-1;3828:2:1;3813:18;;3800:32;3841:33;3800:32;3841:33;:::i;:::-;3501:456;;3893:7;;-1:-1:-1;;;3947:2:1;3932:18;;;;3919:32;;3501:456::o;3962:665::-;4057:6;4065;4073;4081;4134:3;4122:9;4113:7;4109:23;4105:33;4102:53;;;4151:1;4148;4141:12;4102:53;4190:9;4177:23;4209:31;4234:5;4209:31;:::i;:::-;4259:5;-1:-1:-1;4316:2:1;4301:18;;4288:32;4329:33;4288:32;4329:33;:::i;:::-;4381:7;-1:-1:-1;4435:2:1;4420:18;;4407:32;;-1:-1:-1;4490:2:1;4475:18;;4462:32;4517:18;4506:30;;4503:50;;;4549:1;4546;4539:12;4503:50;4572:49;4613:7;4604:6;4593:9;4589:22;4572:49;:::i;4632:750::-;4727:6;4735;4743;4796:2;4784:9;4775:7;4771:23;4767:32;4764:52;;;4812:1;4809;4802:12;4764:52;4851:9;4838:23;4870:31;4895:5;4870:31;:::i;:::-;4920:5;-1:-1:-1;4976:2:1;4961:18;;4948:32;4999:18;5029:14;;;5026:34;;;5056:1;5053;5046:12;5026:34;5094:6;5083:9;5079:22;5069:32;;5139:7;5132:4;5128:2;5124:13;5120:27;5110:55;;5161:1;5158;5151:12;5110:55;5201:2;5188:16;5227:2;5219:6;5216:14;5213:34;;;5243:1;5240;5233:12;5213:34;5296:7;5291:2;5281:6;5278:1;5274:14;5270:2;5266:23;5262:32;5259:45;5256:65;;;5317:1;5314;5307:12;5256:65;5348:2;5344;5340:11;5330:21;;5370:6;5360:16;;;;;4632:750;;;;;:::o;5387:416::-;5452:6;5460;5513:2;5501:9;5492:7;5488:23;5484:32;5481:52;;;5529:1;5526;5519:12;5481:52;5568:9;5555:23;5587:31;5612:5;5587:31;:::i;:::-;5637:5;-1:-1:-1;5694:2:1;5679:18;;5666:32;5736:15;;5729:23;5717:36;;5707:64;;5767:1;5764;5757:12;5808:315;5876:6;5884;5937:2;5925:9;5916:7;5912:23;5908:32;5905:52;;;5953:1;5950;5943:12;5905:52;5992:9;5979:23;6011:31;6036:5;6011:31;:::i;:::-;6061:5;6113:2;6098:18;;;;6085:32;;-1:-1:-1;;;5808:315:1:o;6128:245::-;6186:6;6239:2;6227:9;6218:7;6214:23;6210:32;6207:52;;;6255:1;6252;6245:12;6207:52;6294:9;6281:23;6313:30;6337:5;6313:30;:::i;6378:249::-;6447:6;6500:2;6488:9;6479:7;6475:23;6471:32;6468:52;;;6516:1;6513;6506:12;6468:52;6548:9;6542:16;6567:30;6591:5;6567:30;:::i;6632:280::-;6731:6;6784:2;6772:9;6763:7;6759:23;6755:32;6752:52;;;6800:1;6797;6790:12;6752:52;6832:9;6826:16;6851:31;6876:5;6851:31;:::i;6917:450::-;6986:6;7039:2;7027:9;7018:7;7014:23;7010:32;7007:52;;;7055:1;7052;7045:12;7007:52;7095:9;7082:23;7128:18;7120:6;7117:30;7114:50;;;7160:1;7157;7150:12;7114:50;7183:22;;7236:4;7228:13;;7224:27;-1:-1:-1;7214:55:1;;7265:1;7262;7255:12;7214:55;7288:73;7353:7;7348:2;7335:16;7330:2;7326;7322:11;7288:73;:::i;7372:180::-;7431:6;7484:2;7472:9;7463:7;7459:23;7455:32;7452:52;;;7500:1;7497;7490:12;7452:52;-1:-1:-1;7523:23:1;;7372:180;-1:-1:-1;7372:180:1:o;7557:257::-;7598:3;7636:5;7630:12;7663:6;7658:3;7651:19;7679:63;7735:6;7728:4;7723:3;7719:14;7712:4;7705:5;7701:16;7679:63;:::i;:::-;7796:2;7775:15;-1:-1:-1;;7771:29:1;7762:39;;;;7803:4;7758:50;;7557:257;-1:-1:-1;;7557:257:1:o;7819:185::-;7861:3;7899:5;7893:12;7914:52;7959:6;7954:3;7947:4;7940:5;7936:16;7914:52;:::i;:::-;7982:16;;;;;7819:185;-1:-1:-1;;7819:185:1:o;8009:1174::-;8185:3;8214:1;8247:6;8241:13;8277:3;8299:1;8327:9;8323:2;8319:18;8309:28;;8387:2;8376:9;8372:18;8409;8399:61;;8453:4;8445:6;8441:17;8431:27;;8399:61;8479:2;8527;8519:6;8516:14;8496:18;8493:38;8490:165;;;-1:-1:-1;;;8554:33:1;;8610:4;8607:1;8600:15;8640:4;8561:3;8628:17;8490:165;8671:18;8698:104;;;;8816:1;8811:320;;;;8664:467;;8698:104;-1:-1:-1;;8731:24:1;;8719:37;;8776:16;;;;-1:-1:-1;8698:104:1;;8811:320;20580:1;20573:14;;;20617:4;20604:18;;8906:1;8920:165;8934:6;8931:1;8928:13;8920:165;;;9012:14;;8999:11;;;8992:35;9055:16;;;;8949:10;;8920:165;;;8924:3;;9114:6;9109:3;9105:16;9098:23;;8664:467;;;;;;;9147:30;9173:3;9165:6;9147:30;:::i;:::-;9140:37;8009:1174;-1:-1:-1;;;;;8009:1174:1:o;9606:488::-;-1:-1:-1;;;;;9875:15:1;;;9857:34;;9927:15;;9922:2;9907:18;;9900:43;9974:2;9959:18;;9952:34;;;10022:3;10017:2;10002:18;;9995:31;;;9800:4;;10043:45;;10068:19;;10060:6;10043:45;:::i;:::-;10035:53;9606:488;-1:-1:-1;;;;;;9606:488:1:o;10099:632::-;10270:2;10322:21;;;10392:13;;10295:18;;;10414:22;;;10241:4;;10270:2;10493:15;;;;10467:2;10452:18;;;10241:4;10536:169;10550:6;10547:1;10544:13;10536:169;;;10611:13;;10599:26;;10680:15;;;;10645:12;;;;10572:1;10565:9;10536:169;;;-1:-1:-1;10722:3:1;;10099:632;-1:-1:-1;;;;;;10099:632:1:o;10928:219::-;11077:2;11066:9;11059:21;11040:4;11097:44;11137:2;11126:9;11122:18;11114:6;11097:44;:::i;11856:407::-;12058:2;12040:21;;;12097:2;12077:18;;;12070:30;12136:34;12131:2;12116:18;;12109:62;-1:-1:-1;;;12202:2:1;12187:18;;12180:41;12253:3;12238:19;;11856:407::o;12268:414::-;12470:2;12452:21;;;12509:2;12489:18;;;12482:30;12548:34;12543:2;12528:18;;12521:62;-1:-1:-1;;;12614:2:1;12599:18;;12592:48;12672:3;12657:19;;12268:414::o;16982:356::-;17184:2;17166:21;;;17203:18;;;17196:30;17262:34;17257:2;17242:18;;17235:62;17329:2;17314:18;;16982:356::o;18857:413::-;19059:2;19041:21;;;19098:2;19078:18;;;19071:30;19137:34;19132:2;19117:18;;19110:62;-1:-1:-1;;;19203:2:1;19188:18;;19181:47;19260:3;19245:19;;18857:413::o;20227:275::-;20298:2;20292:9;20363:2;20344:13;;-1:-1:-1;;20340:27:1;20328:40;;20398:18;20383:34;;20419:22;;;20380:62;20377:88;;;20445:18;;:::i;:::-;20481:2;20474:22;20227:275;;-1:-1:-1;20227:275:1:o;20633:128::-;20673:3;20704:1;20700:6;20697:1;20694:13;20691:39;;;20710:18;;:::i;:::-;-1:-1:-1;20746:9:1;;20633:128::o;20766:120::-;20806:1;20832;20822:35;;20837:18;;:::i;:::-;-1:-1:-1;20871:9:1;;20766:120::o;20891:168::-;20931:7;20997:1;20993;20989:6;20985:14;20982:1;20979:21;20974:1;20967:9;20960:17;20956:45;20953:71;;;21004:18;;:::i;:::-;-1:-1:-1;21044:9:1;;20891:168::o;21064:125::-;21104:4;21132:1;21129;21126:8;21123:34;;;21137:18;;:::i;:::-;-1:-1:-1;21174:9:1;;21064:125::o;21194:258::-;21266:1;21276:113;21290:6;21287:1;21284:13;21276:113;;;21366:11;;;21360:18;21347:11;;;21340:39;21312:2;21305:10;21276:113;;;21407:6;21404:1;21401:13;21398:48;;;-1:-1:-1;;21442:1:1;21424:16;;21417:27;21194:258::o;21457:380::-;21536:1;21532:12;;;;21579;;;21600:61;;21654:4;21646:6;21642:17;21632:27;;21600:61;21707:2;21699:6;21696:14;21676:18;21673:38;21670:161;;;21753:10;21748:3;21744:20;21741:1;21734:31;21788:4;21785:1;21778:15;21816:4;21813:1;21806:15;21670:161;;21457:380;;;:::o;21842:135::-;21881:3;-1:-1:-1;;21902:17:1;;21899:43;;;21922:18;;:::i;:::-;-1:-1:-1;21969:1:1;21958:13;;21842:135::o;21982:112::-;22014:1;22040;22030:35;;22045:18;;:::i;:::-;-1:-1:-1;22079:9:1;;21982:112::o;22099:127::-;22160:10;22155:3;22151:20;22148:1;22141:31;22191:4;22188:1;22181:15;22215:4;22212:1;22205:15;22231:127;22292:10;22287:3;22283:20;22280:1;22273:31;22323:4;22320:1;22313:15;22347:4;22344:1;22337:15;22363:127;22424:10;22419:3;22415:20;22412:1;22405:31;22455:4;22452:1;22445:15;22479:4;22476:1;22469:15;22495:127;22556:10;22551:3;22547:20;22544:1;22537:31;22587:4;22584:1;22577:15;22611:4;22608:1;22601:15;22627:131;-1:-1:-1;;;;;22702:31:1;;22692:42;;22682:70;;22748:1;22745;22738:12;22763:131;-1:-1:-1;;;;;;22837:32:1;;22827:43;;22817:71;;22884:1;22881;22874:12

Swarm Source

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