ETH Price: $3,109.70 (+1.22%)
Gas: 6 Gwei

Token

Invisible Ape Yatch Club (IAYC)
 

Overview

Max Total Supply

2,110 IAYC

Holders

314

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
smilenft.eth
Balance
4 IAYC
0xdd69c8b49873d6b9bf0e4fd90a5bfcb819cc2456
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:
IAYC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-31
*/

// 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/utils/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 _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);

        _balances[to] += 1;
        _owners[tokenId] = 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);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

// File: contracts/BAPC.sol

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



contract IAYC is ERC721, Ownable {
  bool public paused = true;
  bool public isPaidMint = true;
  string private _baseTokenURI;
  uint256 public totalSupply = 0;
  uint256 public constant PRICE = 0.02 ether;
  mapping(address => uint256) private freeWallets;

  constructor(string memory baseURI) ERC721('Invisible Ape Yatch Club', 'IAYC') {
    setBaseURI(baseURI);
  }

  function mint(uint256 num) public payable {
    uint256 supply = totalSupply;

    require(!paused, 'MINTING PAUSED');
    require(totalSupply + num < 4001, 'EXCEEDS MAX SUPPLY');

    if (totalSupply + num > 2000 && isPaidMint) {
      require(num < 11, 'MAX PER TRANSACTION IS 10');
      require(msg.value >= PRICE * num, 'NOT ENOUGH ETH');
    } else {
      require(
        freeWallets[msg.sender] + num < 11,
        'MAX FREE MINTS PER WALLET IS 10'
      );

      freeWallets[msg.sender] += num;
    }

    totalSupply += num;

    for (uint256 i; i < num; i++) {
      _mint(msg.sender, supply + i);
    }
  }

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

  function setBaseURI(string memory baseUri) public onlyOwner {
    _baseTokenURI = baseUri;
  }

  function pause(bool state) public onlyOwner {
    paused = state;
  }

  function paidMint(bool state) public onlyOwner {
    isPaidMint = state;
  }

  function withdrawAll() public onlyOwner {
    require(
      payable(owner()).send(address(this).balance),
      'WITHDRAW UNSUCCESSFUL'
    );
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[],"name":"isPaidMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","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":[{"internalType":"bool","name":"state","type":"bool"}],"name":"paidMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff02191690831515021790555060006008553480156200004c57600080fd5b5060405162003e2238038062003e2283398181016040528101906200007291906200041b565b6040518060400160405280601881526020017f496e76697369626c652041706520596174636820436c756200000000000000008152506040518060400160405280600481526020017f49415943000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f6929190620002ed565b5080600190805190602001906200010f929190620002ed565b50505062000132620001266200014a60201b60201c565b6200015260201b60201c565b62000143816200021860201b60201c565b5062000673565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002286200014a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200024e620002c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029e9062000493565b60405180910390fd5b8060079080519060200190620002bf929190620002ed565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002fb906200055b565b90600052602060002090601f0160209004810192826200031f57600085556200036b565b82601f106200033a57805160ff19168380011785556200036b565b828001600101855582156200036b579182015b828111156200036a5782518255916020019190600101906200034d565b5b5090506200037a91906200037e565b5090565b5b80821115620003995760008160009055506001016200037f565b5090565b6000620003b4620003ae84620004de565b620004b5565b905082815260208101848484011115620003d357620003d26200062a565b5b620003e084828562000525565b509392505050565b600082601f8301126200040057620003ff62000625565b5b8151620004128482602086016200039d565b91505092915050565b60006020828403121562000434576200043362000634565b5b600082015167ffffffffffffffff8111156200045557620004546200062f565b5b6200046384828501620003e8565b91505092915050565b60006200047b60208362000514565b915062000488826200064a565b602082019050919050565b60006020820190508181036000830152620004ae816200046c565b9050919050565b6000620004c1620004d4565b9050620004cf828262000591565b919050565b6000604051905090565b600067ffffffffffffffff821115620004fc57620004fb620005f6565b5b620005078262000639565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200054557808201518184015260208101905062000528565b8381111562000555576000848401525b50505050565b600060028204905060018216806200057457607f821691505b602082108114156200058b576200058a620005c7565b5b50919050565b6200059c8262000639565b810181811067ffffffffffffffff82111715620005be57620005bd620005f6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61379f80620006836000396000f3fe6080604052600436106101665760003560e01c80636352211e116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde146104f5578063c87b56dd1461051e578063e985e9c51461055b578063f2fde38b1461059857610166565b806395d89b4114610485578063a0712d68146104b0578063a22cb465146104cc57610166565b80636352211e1461038757806370a08231146103c4578063715018a614610401578063853828b6146104185780638d859f3e1461042f5780638da5cb5b1461045a57610166565b806323b872dd1161012357806323b872dd1461028d57806327d2a39e146102b65780633b13be40146102e157806342842e0e1461030a57806355f804b3146103335780635c975abb1461035c57610166565b806301ffc9a71461016b57806302329a29146101a857806306fdde03146101d1578063081812fc146101fc578063095ea7b31461023957806318160ddd14610262575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906124f8565b6105c1565b60405161019f9190612a25565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906124cb565b6106a3565b005b3480156101dd57600080fd5b506101e661073c565b6040516101f39190612a40565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e919061259b565b6107ce565b60405161023091906129be565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b919061248b565b610853565b005b34801561026e57600080fd5b5061027761096b565b6040516102849190612d22565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612375565b610971565b005b3480156102c257600080fd5b506102cb6109d1565b6040516102d89190612a25565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906124cb565b6109e4565b005b34801561031657600080fd5b50610331600480360381019061032c9190612375565b610a7d565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612552565b610a9d565b005b34801561036857600080fd5b50610371610b33565b60405161037e9190612a25565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061259b565b610b46565b6040516103bb91906129be565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190612308565b610bf8565b6040516103f89190612d22565b60405180910390f35b34801561040d57600080fd5b50610416610cb0565b005b34801561042457600080fd5b5061042d610d38565b005b34801561043b57600080fd5b50610444610e31565b6040516104519190612d22565b60405180910390f35b34801561046657600080fd5b5061046f610e3c565b60405161047c91906129be565b60405180910390f35b34801561049157600080fd5b5061049a610e66565b6040516104a79190612a40565b60405180910390f35b6104ca60048036038101906104c5919061259b565b610ef8565b005b3480156104d857600080fd5b506104f360048036038101906104ee919061244b565b6111a1565b005b34801561050157600080fd5b5061051c600480360381019061051791906123c8565b6111b7565b005b34801561052a57600080fd5b506105456004803603810190610540919061259b565b611219565b6040516105529190612a40565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612335565b6112c0565b60405161058f9190612a25565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190612308565b611354565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069c575061069b8261144c565b5b9050919050565b6106ab6114b6565b73ffffffffffffffffffffffffffffffffffffffff166106c9610e3c565b73ffffffffffffffffffffffffffffffffffffffff161461071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071690612c42565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461074b90612fd2565b80601f016020809104026020016040519081016040528092919081815260200182805461077790612fd2565b80156107c45780601f10610799576101008083540402835291602001916107c4565b820191906000526020600020905b8154815290600101906020018083116107a757829003601f168201915b5050505050905090565b60006107d9826114be565b610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f90612c22565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085e82610b46565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690612cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ee6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061091d575061091c816109176114b6565b6112c0565b5b61095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390612b82565b60405180910390fd5b610966838361152a565b505050565b60085481565b61098261097c6114b6565b826115e3565b6109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890612ce2565b60405180910390fd5b6109cc8383836116c1565b505050565b600660159054906101000a900460ff1681565b6109ec6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610a0a610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790612c42565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610a98838383604051806020016040528060008152506111b7565b505050565b610aa56114b6565b73ffffffffffffffffffffffffffffffffffffffff16610ac3610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090612c42565b60405180910390fd5b8060079080519060200190610b2f92919061211c565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690612be2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090612bc2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cb86114b6565b73ffffffffffffffffffffffffffffffffffffffff16610cd6610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2390612c42565b60405180910390fd5b610d36600061191d565b565b610d406114b6565b73ffffffffffffffffffffffffffffffffffffffff16610d5e610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90612c42565b60405180910390fd5b610dbc610e3c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690612a82565b60405180910390fd5b565b66470de4df82000081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e7590612fd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190612fd2565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b5050505050905090565b60006008549050600660149054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612aa2565b60405180910390fd5b610fa182600854610f609190612e07565b10610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790612a62565b60405180910390fd5b6107d082600854610fb19190612e07565b118015610fca5750600660159054906101000a900460ff165b1561106c57600b8210611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990612d02565b60405180910390fd5b8166470de4df8200006110259190612e8e565b341015611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90612ba2565b60405180910390fd5b611150565b600b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b99190612e07565b106110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612ca2565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111489190612e07565b925050819055505b81600860008282546111629190612e07565b9250508190555060005b8281101561119c576111893382846111849190612e07565b6119e3565b808061119490613035565b91505061116c565b505050565b6111b36111ac6114b6565b8383611bb1565b5050565b6111c86111c26114b6565b836115e3565b611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612ce2565b60405180910390fd5b61121384848484611d1e565b50505050565b6060611224826114be565b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90612c82565b60405180910390fd5b600061126d611d7a565b9050600081511161128d57604051806020016040528060008152506112b8565b8061129784611e0c565b6040516020016112a892919061299a565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135c6114b6565b73ffffffffffffffffffffffffffffffffffffffff1661137a610e3c565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790612c42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612ae2565b60405180910390fd5b6114498161191d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661159d83610b46565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ee826114be565b61162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490612b62565b60405180910390fd5b600061163883610b46565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116a757508373ffffffffffffffffffffffffffffffffffffffff1661168f846107ce565b73ffffffffffffffffffffffffffffffffffffffff16145b806116b857506116b781856112c0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116e182610b46565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90612c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90612b22565b60405180910390fd5b6117b2838383611f6d565b6117bd60008261152a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461180d9190612ee8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118649190612e07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90612c02565b60405180910390fd5b611a5c816114be565b15611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612b02565b60405180910390fd5b611aa860008383611f6d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190612e07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790612b42565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d119190612a25565b60405180910390a3505050565b611d298484846116c1565b611d3584848484611f72565b611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90612ac2565b60405180910390fd5b50505050565b606060078054611d8990612fd2565b80601f0160208091040260200160405190810160405280929190818152602001828054611db590612fd2565b8015611e025780601f10611dd757610100808354040283529160200191611e02565b820191906000526020600020905b815481529060010190602001808311611de557829003601f168201915b5050505050905090565b60606000821415611e54576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f68565b600082905060005b60008214611e86578080611e6f90613035565b915050600a82611e7f9190612e5d565b9150611e5c565b60008167ffffffffffffffff811115611ea257611ea161316b565b5b6040519080825280601f01601f191660200182016040528015611ed45781602001600182028036833780820191505090505b5090505b60008514611f6157600182611eed9190612ee8565b9150600a85611efc919061307e565b6030611f089190612e07565b60f81b818381518110611f1e57611f1d61313c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f5a9190612e5d565b9450611ed8565b8093505050505b919050565b505050565b6000611f938473ffffffffffffffffffffffffffffffffffffffff16612109565b156120fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fbc6114b6565b8786866040518563ffffffff1660e01b8152600401611fde94939291906129d9565b602060405180830381600087803b158015611ff857600080fd5b505af192505050801561202957506040513d601f19601f820116820180604052508101906120269190612525565b60015b6120ac573d8060008114612059576040519150601f19603f3d011682016040523d82523d6000602084013e61205e565b606091505b506000815114156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90612ac2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612101565b600190505b949350505050565b600080823b905060008111915050919050565b82805461212890612fd2565b90600052602060002090601f01602090048101928261214a5760008555612191565b82601f1061216357805160ff1916838001178555612191565b82800160010185558215612191579182015b82811115612190578251825591602001919060010190612175565b5b50905061219e91906121a2565b5090565b5b808211156121bb5760008160009055506001016121a3565b5090565b60006121d26121cd84612d62565b612d3d565b9050828152602081018484840111156121ee576121ed61319f565b5b6121f9848285612f90565b509392505050565b600061221461220f84612d93565b612d3d565b9050828152602081018484840111156122305761222f61319f565b5b61223b848285612f90565b509392505050565b6000813590506122528161370d565b92915050565b60008135905061226781613724565b92915050565b60008135905061227c8161373b565b92915050565b6000815190506122918161373b565b92915050565b600082601f8301126122ac576122ab61319a565b5b81356122bc8482602086016121bf565b91505092915050565b600082601f8301126122da576122d961319a565b5b81356122ea848260208601612201565b91505092915050565b60008135905061230281613752565b92915050565b60006020828403121561231e5761231d6131a9565b5b600061232c84828501612243565b91505092915050565b6000806040838503121561234c5761234b6131a9565b5b600061235a85828601612243565b925050602061236b85828601612243565b9150509250929050565b60008060006060848603121561238e5761238d6131a9565b5b600061239c86828701612243565b93505060206123ad86828701612243565b92505060406123be868287016122f3565b9150509250925092565b600080600080608085870312156123e2576123e16131a9565b5b60006123f087828801612243565b945050602061240187828801612243565b9350506040612412878288016122f3565b925050606085013567ffffffffffffffff811115612433576124326131a4565b5b61243f87828801612297565b91505092959194509250565b60008060408385031215612462576124616131a9565b5b600061247085828601612243565b925050602061248185828601612258565b9150509250929050565b600080604083850312156124a2576124a16131a9565b5b60006124b085828601612243565b92505060206124c1858286016122f3565b9150509250929050565b6000602082840312156124e1576124e06131a9565b5b60006124ef84828501612258565b91505092915050565b60006020828403121561250e5761250d6131a9565b5b600061251c8482850161226d565b91505092915050565b60006020828403121561253b5761253a6131a9565b5b600061254984828501612282565b91505092915050565b600060208284031215612568576125676131a9565b5b600082013567ffffffffffffffff811115612586576125856131a4565b5b612592848285016122c5565b91505092915050565b6000602082840312156125b1576125b06131a9565b5b60006125bf848285016122f3565b91505092915050565b6125d181612f1c565b82525050565b6125e081612f2e565b82525050565b60006125f182612dc4565b6125fb8185612dda565b935061260b818560208601612f9f565b612614816131ae565b840191505092915050565b600061262a82612dcf565b6126348185612deb565b9350612644818560208601612f9f565b61264d816131ae565b840191505092915050565b600061266382612dcf565b61266d8185612dfc565b935061267d818560208601612f9f565b80840191505092915050565b6000612696601283612deb565b91506126a1826131bf565b602082019050919050565b60006126b9601583612deb565b91506126c4826131e8565b602082019050919050565b60006126dc600e83612deb565b91506126e782613211565b602082019050919050565b60006126ff603283612deb565b915061270a8261323a565b604082019050919050565b6000612722602683612deb565b915061272d82613289565b604082019050919050565b6000612745601c83612deb565b9150612750826132d8565b602082019050919050565b6000612768602483612deb565b915061277382613301565b604082019050919050565b600061278b601983612deb565b915061279682613350565b602082019050919050565b60006127ae602c83612deb565b91506127b982613379565b604082019050919050565b60006127d1603883612deb565b91506127dc826133c8565b604082019050919050565b60006127f4600e83612deb565b91506127ff82613417565b602082019050919050565b6000612817602a83612deb565b915061282282613440565b604082019050919050565b600061283a602983612deb565b91506128458261348f565b604082019050919050565b600061285d602083612deb565b9150612868826134de565b602082019050919050565b6000612880602c83612deb565b915061288b82613507565b604082019050919050565b60006128a3602083612deb565b91506128ae82613556565b602082019050919050565b60006128c6602983612deb565b91506128d18261357f565b604082019050919050565b60006128e9602f83612deb565b91506128f4826135ce565b604082019050919050565b600061290c601f83612deb565b91506129178261361d565b602082019050919050565b600061292f602183612deb565b915061293a82613646565b604082019050919050565b6000612952603183612deb565b915061295d82613695565b604082019050919050565b6000612975601983612deb565b9150612980826136e4565b602082019050919050565b61299481612f86565b82525050565b60006129a68285612658565b91506129b28284612658565b91508190509392505050565b60006020820190506129d360008301846125c8565b92915050565b60006080820190506129ee60008301876125c8565b6129fb60208301866125c8565b612a08604083018561298b565b8181036060830152612a1a81846125e6565b905095945050505050565b6000602082019050612a3a60008301846125d7565b92915050565b60006020820190508181036000830152612a5a818461261f565b905092915050565b60006020820190508181036000830152612a7b81612689565b9050919050565b60006020820190508181036000830152612a9b816126ac565b9050919050565b60006020820190508181036000830152612abb816126cf565b9050919050565b60006020820190508181036000830152612adb816126f2565b9050919050565b60006020820190508181036000830152612afb81612715565b9050919050565b60006020820190508181036000830152612b1b81612738565b9050919050565b60006020820190508181036000830152612b3b8161275b565b9050919050565b60006020820190508181036000830152612b5b8161277e565b9050919050565b60006020820190508181036000830152612b7b816127a1565b9050919050565b60006020820190508181036000830152612b9b816127c4565b9050919050565b60006020820190508181036000830152612bbb816127e7565b9050919050565b60006020820190508181036000830152612bdb8161280a565b9050919050565b60006020820190508181036000830152612bfb8161282d565b9050919050565b60006020820190508181036000830152612c1b81612850565b9050919050565b60006020820190508181036000830152612c3b81612873565b9050919050565b60006020820190508181036000830152612c5b81612896565b9050919050565b60006020820190508181036000830152612c7b816128b9565b9050919050565b60006020820190508181036000830152612c9b816128dc565b9050919050565b60006020820190508181036000830152612cbb816128ff565b9050919050565b60006020820190508181036000830152612cdb81612922565b9050919050565b60006020820190508181036000830152612cfb81612945565b9050919050565b60006020820190508181036000830152612d1b81612968565b9050919050565b6000602082019050612d37600083018461298b565b92915050565b6000612d47612d58565b9050612d538282613004565b919050565b6000604051905090565b600067ffffffffffffffff821115612d7d57612d7c61316b565b5b612d86826131ae565b9050602081019050919050565b600067ffffffffffffffff821115612dae57612dad61316b565b5b612db7826131ae565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e1282612f86565b9150612e1d83612f86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e5257612e516130af565b5b828201905092915050565b6000612e6882612f86565b9150612e7383612f86565b925082612e8357612e826130de565b5b828204905092915050565b6000612e9982612f86565b9150612ea483612f86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612edd57612edc6130af565b5b828202905092915050565b6000612ef382612f86565b9150612efe83612f86565b925082821015612f1157612f106130af565b5b828203905092915050565b6000612f2782612f66565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fbd578082015181840152602081019050612fa2565b83811115612fcc576000848401525b50505050565b60006002820490506001821680612fea57607f821691505b60208210811415612ffe57612ffd61310d565b5b50919050565b61300d826131ae565b810181811067ffffffffffffffff8211171561302c5761302b61316b565b5b80604052505050565b600061304082612f86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613073576130726130af565b5b600182019050919050565b600061308982612f86565b915061309483612f86565b9250826130a4576130a36130de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45584345454453204d415820535550504c590000000000000000000000000000600082015250565b7f574954484452415720554e5355434345535346554c0000000000000000000000600082015250565b7f4d494e54494e4720504155534544000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e4f5420454e4f55474820455448000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d41582046524545204d494e5453205045522057414c4c455420495320313000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d415820504552205452414e53414354494f4e20495320313000000000000000600082015250565b61371681612f1c565b811461372157600080fd5b50565b61372d81612f2e565b811461373857600080fd5b50565b61374481612f3a565b811461374f57600080fd5b50565b61375b81612f86565b811461376657600080fd5b5056fea2646970667358221220df480c700a03698c9c8bccc5600ff4994a6ec923895cb36b5fcdb8e09a5899aa64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d574e434a62516d67775044526550754d36447957724b48573435355a4367665447735044425171534641696d2f00000000000000000000

Deployed Bytecode

0x6080604052600436106101665760003560e01c80636352211e116100d157806395d89b411161008a578063b88d4fde11610064578063b88d4fde146104f5578063c87b56dd1461051e578063e985e9c51461055b578063f2fde38b1461059857610166565b806395d89b4114610485578063a0712d68146104b0578063a22cb465146104cc57610166565b80636352211e1461038757806370a08231146103c4578063715018a614610401578063853828b6146104185780638d859f3e1461042f5780638da5cb5b1461045a57610166565b806323b872dd1161012357806323b872dd1461028d57806327d2a39e146102b65780633b13be40146102e157806342842e0e1461030a57806355f804b3146103335780635c975abb1461035c57610166565b806301ffc9a71461016b57806302329a29146101a857806306fdde03146101d1578063081812fc146101fc578063095ea7b31461023957806318160ddd14610262575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d91906124f8565b6105c1565b60405161019f9190612a25565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906124cb565b6106a3565b005b3480156101dd57600080fd5b506101e661073c565b6040516101f39190612a40565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e919061259b565b6107ce565b60405161023091906129be565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b919061248b565b610853565b005b34801561026e57600080fd5b5061027761096b565b6040516102849190612d22565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612375565b610971565b005b3480156102c257600080fd5b506102cb6109d1565b6040516102d89190612a25565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906124cb565b6109e4565b005b34801561031657600080fd5b50610331600480360381019061032c9190612375565b610a7d565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612552565b610a9d565b005b34801561036857600080fd5b50610371610b33565b60405161037e9190612a25565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061259b565b610b46565b6040516103bb91906129be565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190612308565b610bf8565b6040516103f89190612d22565b60405180910390f35b34801561040d57600080fd5b50610416610cb0565b005b34801561042457600080fd5b5061042d610d38565b005b34801561043b57600080fd5b50610444610e31565b6040516104519190612d22565b60405180910390f35b34801561046657600080fd5b5061046f610e3c565b60405161047c91906129be565b60405180910390f35b34801561049157600080fd5b5061049a610e66565b6040516104a79190612a40565b60405180910390f35b6104ca60048036038101906104c5919061259b565b610ef8565b005b3480156104d857600080fd5b506104f360048036038101906104ee919061244b565b6111a1565b005b34801561050157600080fd5b5061051c600480360381019061051791906123c8565b6111b7565b005b34801561052a57600080fd5b506105456004803603810190610540919061259b565b611219565b6040516105529190612a40565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612335565b6112c0565b60405161058f9190612a25565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190612308565b611354565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069c575061069b8261144c565b5b9050919050565b6106ab6114b6565b73ffffffffffffffffffffffffffffffffffffffff166106c9610e3c565b73ffffffffffffffffffffffffffffffffffffffff161461071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071690612c42565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461074b90612fd2565b80601f016020809104026020016040519081016040528092919081815260200182805461077790612fd2565b80156107c45780601f10610799576101008083540402835291602001916107c4565b820191906000526020600020905b8154815290600101906020018083116107a757829003601f168201915b5050505050905090565b60006107d9826114be565b610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f90612c22565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085e82610b46565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690612cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ee6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061091d575061091c816109176114b6565b6112c0565b5b61095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390612b82565b60405180910390fd5b610966838361152a565b505050565b60085481565b61098261097c6114b6565b826115e3565b6109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890612ce2565b60405180910390fd5b6109cc8383836116c1565b505050565b600660159054906101000a900460ff1681565b6109ec6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610a0a610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790612c42565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610a98838383604051806020016040528060008152506111b7565b505050565b610aa56114b6565b73ffffffffffffffffffffffffffffffffffffffff16610ac3610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090612c42565b60405180910390fd5b8060079080519060200190610b2f92919061211c565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690612be2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090612bc2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cb86114b6565b73ffffffffffffffffffffffffffffffffffffffff16610cd6610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2390612c42565b60405180910390fd5b610d36600061191d565b565b610d406114b6565b73ffffffffffffffffffffffffffffffffffffffff16610d5e610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90612c42565b60405180910390fd5b610dbc610e3c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690612a82565b60405180910390fd5b565b66470de4df82000081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e7590612fd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190612fd2565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b5050505050905090565b60006008549050600660149054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612aa2565b60405180910390fd5b610fa182600854610f609190612e07565b10610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790612a62565b60405180910390fd5b6107d082600854610fb19190612e07565b118015610fca5750600660159054906101000a900460ff165b1561106c57600b8210611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990612d02565b60405180910390fd5b8166470de4df8200006110259190612e8e565b341015611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90612ba2565b60405180910390fd5b611150565b600b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b99190612e07565b106110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612ca2565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111489190612e07565b925050819055505b81600860008282546111629190612e07565b9250508190555060005b8281101561119c576111893382846111849190612e07565b6119e3565b808061119490613035565b91505061116c565b505050565b6111b36111ac6114b6565b8383611bb1565b5050565b6111c86111c26114b6565b836115e3565b611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612ce2565b60405180910390fd5b61121384848484611d1e565b50505050565b6060611224826114be565b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90612c82565b60405180910390fd5b600061126d611d7a565b9050600081511161128d57604051806020016040528060008152506112b8565b8061129784611e0c565b6040516020016112a892919061299a565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135c6114b6565b73ffffffffffffffffffffffffffffffffffffffff1661137a610e3c565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790612c42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612ae2565b60405180910390fd5b6114498161191d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661159d83610b46565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ee826114be565b61162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490612b62565b60405180910390fd5b600061163883610b46565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116a757508373ffffffffffffffffffffffffffffffffffffffff1661168f846107ce565b73ffffffffffffffffffffffffffffffffffffffff16145b806116b857506116b781856112c0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116e182610b46565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90612c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90612b22565b60405180910390fd5b6117b2838383611f6d565b6117bd60008261152a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461180d9190612ee8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118649190612e07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90612c02565b60405180910390fd5b611a5c816114be565b15611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612b02565b60405180910390fd5b611aa860008383611f6d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190612e07565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790612b42565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d119190612a25565b60405180910390a3505050565b611d298484846116c1565b611d3584848484611f72565b611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90612ac2565b60405180910390fd5b50505050565b606060078054611d8990612fd2565b80601f0160208091040260200160405190810160405280929190818152602001828054611db590612fd2565b8015611e025780601f10611dd757610100808354040283529160200191611e02565b820191906000526020600020905b815481529060010190602001808311611de557829003601f168201915b5050505050905090565b60606000821415611e54576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f68565b600082905060005b60008214611e86578080611e6f90613035565b915050600a82611e7f9190612e5d565b9150611e5c565b60008167ffffffffffffffff811115611ea257611ea161316b565b5b6040519080825280601f01601f191660200182016040528015611ed45781602001600182028036833780820191505090505b5090505b60008514611f6157600182611eed9190612ee8565b9150600a85611efc919061307e565b6030611f089190612e07565b60f81b818381518110611f1e57611f1d61313c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f5a9190612e5d565b9450611ed8565b8093505050505b919050565b505050565b6000611f938473ffffffffffffffffffffffffffffffffffffffff16612109565b156120fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fbc6114b6565b8786866040518563ffffffff1660e01b8152600401611fde94939291906129d9565b602060405180830381600087803b158015611ff857600080fd5b505af192505050801561202957506040513d601f19601f820116820180604052508101906120269190612525565b60015b6120ac573d8060008114612059576040519150601f19603f3d011682016040523d82523d6000602084013e61205e565b606091505b506000815114156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90612ac2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612101565b600190505b949350505050565b600080823b905060008111915050919050565b82805461212890612fd2565b90600052602060002090601f01602090048101928261214a5760008555612191565b82601f1061216357805160ff1916838001178555612191565b82800160010185558215612191579182015b82811115612190578251825591602001919060010190612175565b5b50905061219e91906121a2565b5090565b5b808211156121bb5760008160009055506001016121a3565b5090565b60006121d26121cd84612d62565b612d3d565b9050828152602081018484840111156121ee576121ed61319f565b5b6121f9848285612f90565b509392505050565b600061221461220f84612d93565b612d3d565b9050828152602081018484840111156122305761222f61319f565b5b61223b848285612f90565b509392505050565b6000813590506122528161370d565b92915050565b60008135905061226781613724565b92915050565b60008135905061227c8161373b565b92915050565b6000815190506122918161373b565b92915050565b600082601f8301126122ac576122ab61319a565b5b81356122bc8482602086016121bf565b91505092915050565b600082601f8301126122da576122d961319a565b5b81356122ea848260208601612201565b91505092915050565b60008135905061230281613752565b92915050565b60006020828403121561231e5761231d6131a9565b5b600061232c84828501612243565b91505092915050565b6000806040838503121561234c5761234b6131a9565b5b600061235a85828601612243565b925050602061236b85828601612243565b9150509250929050565b60008060006060848603121561238e5761238d6131a9565b5b600061239c86828701612243565b93505060206123ad86828701612243565b92505060406123be868287016122f3565b9150509250925092565b600080600080608085870312156123e2576123e16131a9565b5b60006123f087828801612243565b945050602061240187828801612243565b9350506040612412878288016122f3565b925050606085013567ffffffffffffffff811115612433576124326131a4565b5b61243f87828801612297565b91505092959194509250565b60008060408385031215612462576124616131a9565b5b600061247085828601612243565b925050602061248185828601612258565b9150509250929050565b600080604083850312156124a2576124a16131a9565b5b60006124b085828601612243565b92505060206124c1858286016122f3565b9150509250929050565b6000602082840312156124e1576124e06131a9565b5b60006124ef84828501612258565b91505092915050565b60006020828403121561250e5761250d6131a9565b5b600061251c8482850161226d565b91505092915050565b60006020828403121561253b5761253a6131a9565b5b600061254984828501612282565b91505092915050565b600060208284031215612568576125676131a9565b5b600082013567ffffffffffffffff811115612586576125856131a4565b5b612592848285016122c5565b91505092915050565b6000602082840312156125b1576125b06131a9565b5b60006125bf848285016122f3565b91505092915050565b6125d181612f1c565b82525050565b6125e081612f2e565b82525050565b60006125f182612dc4565b6125fb8185612dda565b935061260b818560208601612f9f565b612614816131ae565b840191505092915050565b600061262a82612dcf565b6126348185612deb565b9350612644818560208601612f9f565b61264d816131ae565b840191505092915050565b600061266382612dcf565b61266d8185612dfc565b935061267d818560208601612f9f565b80840191505092915050565b6000612696601283612deb565b91506126a1826131bf565b602082019050919050565b60006126b9601583612deb565b91506126c4826131e8565b602082019050919050565b60006126dc600e83612deb565b91506126e782613211565b602082019050919050565b60006126ff603283612deb565b915061270a8261323a565b604082019050919050565b6000612722602683612deb565b915061272d82613289565b604082019050919050565b6000612745601c83612deb565b9150612750826132d8565b602082019050919050565b6000612768602483612deb565b915061277382613301565b604082019050919050565b600061278b601983612deb565b915061279682613350565b602082019050919050565b60006127ae602c83612deb565b91506127b982613379565b604082019050919050565b60006127d1603883612deb565b91506127dc826133c8565b604082019050919050565b60006127f4600e83612deb565b91506127ff82613417565b602082019050919050565b6000612817602a83612deb565b915061282282613440565b604082019050919050565b600061283a602983612deb565b91506128458261348f565b604082019050919050565b600061285d602083612deb565b9150612868826134de565b602082019050919050565b6000612880602c83612deb565b915061288b82613507565b604082019050919050565b60006128a3602083612deb565b91506128ae82613556565b602082019050919050565b60006128c6602983612deb565b91506128d18261357f565b604082019050919050565b60006128e9602f83612deb565b91506128f4826135ce565b604082019050919050565b600061290c601f83612deb565b91506129178261361d565b602082019050919050565b600061292f602183612deb565b915061293a82613646565b604082019050919050565b6000612952603183612deb565b915061295d82613695565b604082019050919050565b6000612975601983612deb565b9150612980826136e4565b602082019050919050565b61299481612f86565b82525050565b60006129a68285612658565b91506129b28284612658565b91508190509392505050565b60006020820190506129d360008301846125c8565b92915050565b60006080820190506129ee60008301876125c8565b6129fb60208301866125c8565b612a08604083018561298b565b8181036060830152612a1a81846125e6565b905095945050505050565b6000602082019050612a3a60008301846125d7565b92915050565b60006020820190508181036000830152612a5a818461261f565b905092915050565b60006020820190508181036000830152612a7b81612689565b9050919050565b60006020820190508181036000830152612a9b816126ac565b9050919050565b60006020820190508181036000830152612abb816126cf565b9050919050565b60006020820190508181036000830152612adb816126f2565b9050919050565b60006020820190508181036000830152612afb81612715565b9050919050565b60006020820190508181036000830152612b1b81612738565b9050919050565b60006020820190508181036000830152612b3b8161275b565b9050919050565b60006020820190508181036000830152612b5b8161277e565b9050919050565b60006020820190508181036000830152612b7b816127a1565b9050919050565b60006020820190508181036000830152612b9b816127c4565b9050919050565b60006020820190508181036000830152612bbb816127e7565b9050919050565b60006020820190508181036000830152612bdb8161280a565b9050919050565b60006020820190508181036000830152612bfb8161282d565b9050919050565b60006020820190508181036000830152612c1b81612850565b9050919050565b60006020820190508181036000830152612c3b81612873565b9050919050565b60006020820190508181036000830152612c5b81612896565b9050919050565b60006020820190508181036000830152612c7b816128b9565b9050919050565b60006020820190508181036000830152612c9b816128dc565b9050919050565b60006020820190508181036000830152612cbb816128ff565b9050919050565b60006020820190508181036000830152612cdb81612922565b9050919050565b60006020820190508181036000830152612cfb81612945565b9050919050565b60006020820190508181036000830152612d1b81612968565b9050919050565b6000602082019050612d37600083018461298b565b92915050565b6000612d47612d58565b9050612d538282613004565b919050565b6000604051905090565b600067ffffffffffffffff821115612d7d57612d7c61316b565b5b612d86826131ae565b9050602081019050919050565b600067ffffffffffffffff821115612dae57612dad61316b565b5b612db7826131ae565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e1282612f86565b9150612e1d83612f86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e5257612e516130af565b5b828201905092915050565b6000612e6882612f86565b9150612e7383612f86565b925082612e8357612e826130de565b5b828204905092915050565b6000612e9982612f86565b9150612ea483612f86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612edd57612edc6130af565b5b828202905092915050565b6000612ef382612f86565b9150612efe83612f86565b925082821015612f1157612f106130af565b5b828203905092915050565b6000612f2782612f66565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fbd578082015181840152602081019050612fa2565b83811115612fcc576000848401525b50505050565b60006002820490506001821680612fea57607f821691505b60208210811415612ffe57612ffd61310d565b5b50919050565b61300d826131ae565b810181811067ffffffffffffffff8211171561302c5761302b61316b565b5b80604052505050565b600061304082612f86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613073576130726130af565b5b600182019050919050565b600061308982612f86565b915061309483612f86565b9250826130a4576130a36130de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45584345454453204d415820535550504c590000000000000000000000000000600082015250565b7f574954484452415720554e5355434345535346554c0000000000000000000000600082015250565b7f4d494e54494e4720504155534544000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e4f5420454e4f55474820455448000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d41582046524545204d494e5453205045522057414c4c455420495320313000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d415820504552205452414e53414354494f4e20495320313000000000000000600082015250565b61371681612f1c565b811461372157600080fd5b50565b61372d81612f2e565b811461373857600080fd5b50565b61374481612f3a565b811461374f57600080fd5b50565b61375b81612f86565b811461376657600080fd5b5056fea2646970667358221220df480c700a03698c9c8bccc5600ff4994a6ec923895cb36b5fcdb8e09a5899aa64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d574e434a62516d67775044526550754d36447957724b48573435355a4367665447735044425171534641696d2f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmWNCJbQmgwPDRePuM6DyWrKHW455ZCgfTGsPDBQqSFAim/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d574e434a62516d67775044526550754d36447957724b48
Arg [3] : 573435355a4367665447735044425171534641696d2f00000000000000000000


Deployed Bytecode Sourcemap

36283:1568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21212:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37535:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22157:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23716:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23239:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36418:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24466:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36351:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37612:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24876:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37433:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36321:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21851:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21581:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35365:103;;;;;;;;;;;;;:::i;:::-;;37696:152;;;;;;;;;;;;;:::i;:::-;;36453:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22326:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36670:643;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24009:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25132:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22501:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24235:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35623:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21212:305;21314:4;21366:25;21351:40;;;:11;:40;;;;:105;;;;21423:33;21408:48;;;:11;:48;;;;21351:105;:158;;;;21473:36;21497:11;21473:23;:36::i;:::-;21351:158;21331:178;;21212:305;;;:::o;37535:71::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37595:5:::1;37586:6;;:14;;;;;;;;;;;;;;;;;;37535:71:::0;:::o;22157:100::-;22211:13;22244:5;22237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22157:100;:::o;23716:221::-;23792:7;23820:16;23828:7;23820;:16::i;:::-;23812:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23905:15;:24;23921:7;23905:24;;;;;;;;;;;;;;;;;;;;;23898:31;;23716:221;;;:::o;23239:411::-;23320:13;23336:23;23351:7;23336:14;:23::i;:::-;23320:39;;23384:5;23378:11;;:2;:11;;;;23370:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23478:5;23462:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23487:37;23504:5;23511:12;:10;:12::i;:::-;23487:16;:37::i;:::-;23462:62;23440:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:21;23630:2;23634:7;23621:8;:21::i;:::-;23309:341;23239:411;;:::o;36418:30::-;;;;:::o;24466:339::-;24661:41;24680:12;:10;:12::i;:::-;24694:7;24661:18;:41::i;:::-;24653:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24769:28;24779:4;24785:2;24789:7;24769:9;:28::i;:::-;24466:339;;;:::o;36351:29::-;;;;;;;;;;;;;:::o;37612:78::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37679:5:::1;37666:10;;:18;;;;;;;;;;;;;;;;;;37612:78:::0;:::o;24876:185::-;25014:39;25031:4;25037:2;25041:7;25014:39;;;;;;;;;;;;:16;:39::i;:::-;24876:185;;;:::o;37433:96::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37516:7:::1;37500:13;:23;;;;;;;;;;;;:::i;:::-;;37433:96:::0;:::o;36321:25::-;;;;;;;;;;;;;:::o;21851:239::-;21923:7;21943:13;21959:7;:16;21967:7;21959:16;;;;;;;;;;;;;;;;;;;;;21943:32;;22011:1;21994:19;;:5;:19;;;;21986:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22077:5;22070:12;;;21851:239;;;:::o;21581:208::-;21653:7;21698:1;21681:19;;:5;:19;;;;21673:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21765:9;:16;21775:5;21765:16;;;;;;;;;;;;;;;;21758:23;;21581:208;;;:::o;35365:103::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35430:30:::1;35457:1;35430:18;:30::i;:::-;35365:103::o:0;37696:152::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37767:7:::1;:5;:7::i;:::-;37759:21;;:44;37781:21;37759:44;;;;;;;;;;;;;;;;;;;;;;;37743:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;37696:152::o:0;36453:42::-;36485:10;36453:42;:::o;34714:87::-;34760:7;34787:6;;;;;;;;;;;34780:13;;34714:87;:::o;22326:104::-;22382:13;22415:7;22408:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22326:104;:::o;36670:643::-;36719:14;36736:11;;36719:28;;36765:6;;;;;;;;;;;36764:7;36756:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:4;36819:3;36805:11;;:17;;;;:::i;:::-;:24;36797:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36885:4;36879:3;36865:11;;:17;;;;:::i;:::-;:24;:38;;;;;36893:10;;;;;;;;;;;36865:38;36861:336;;;36928:2;36922:3;:8;36914:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36998:3;36485:10;36990:11;;;;:::i;:::-;36977:9;:24;;36969:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36861:336;;;37093:2;37087:3;37061:11;:23;37073:10;37061:23;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:34;37043:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;37186:3;37159:11;:23;37171:10;37159:23;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;36861:336;37220:3;37205:11;;:18;;;;;;;:::i;:::-;;;;;;;;37237:9;37232:76;37252:3;37248:1;:7;37232:76;;;37271:29;37277:10;37298:1;37289:6;:10;;;;:::i;:::-;37271:5;:29::i;:::-;37257:3;;;;;:::i;:::-;;;;37232:76;;;;36712:601;36670:643;:::o;24009:155::-;24104:52;24123:12;:10;:12::i;:::-;24137:8;24147;24104:18;:52::i;:::-;24009:155;;:::o;25132:328::-;25307:41;25326:12;:10;:12::i;:::-;25340:7;25307:18;:41::i;:::-;25299:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25413:39;25427:4;25433:2;25437:7;25446:5;25413:13;:39::i;:::-;25132:328;;;;:::o;22501:334::-;22574:13;22608:16;22616:7;22608;:16::i;:::-;22600:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22689:21;22713:10;:8;:10::i;:::-;22689:34;;22765:1;22747:7;22741:21;:25;:86;;;;;;;;;;;;;;;;;22793:7;22802:18;:7;:16;:18::i;:::-;22776:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22741:86;22734:93;;;22501:334;;;:::o;24235:164::-;24332:4;24356:18;:25;24375:5;24356:25;;;;;;;;;;;;;;;:35;24382:8;24356:35;;;;;;;;;;;;;;;;;;;;;;;;;24349:42;;24235:164;;;;:::o;35623:201::-;34945:12;:10;:12::i;:::-;34934:23;;:7;:5;:7::i;:::-;:23;;;34926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35732:1:::1;35712:22;;:8;:22;;;;35704:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35788:28;35807:8;35788:18;:28::i;:::-;35623:201:::0;:::o;13088:157::-;13173:4;13212:25;13197:40;;;:11;:40;;;;13190:47;;13088:157;;;:::o;19606:98::-;19659:7;19686:10;19679:17;;19606:98;:::o;26970:127::-;27035:4;27087:1;27059:30;;:7;:16;27067:7;27059:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27052:37;;26970:127;;;:::o;30952:174::-;31054:2;31027:15;:24;31043:7;31027:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31110:7;31106:2;31072:46;;31081:23;31096:7;31081:14;:23::i;:::-;31072:46;;;;;;;;;;;;30952:174;;:::o;27264:348::-;27357:4;27382:16;27390:7;27382;:16::i;:::-;27374:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27458:13;27474:23;27489:7;27474:14;:23::i;:::-;27458:39;;27527:5;27516:16;;:7;:16;;;:51;;;;27560:7;27536:31;;:20;27548:7;27536:11;:20::i;:::-;:31;;;27516:51;:87;;;;27571:32;27588:5;27595:7;27571:16;:32::i;:::-;27516:87;27508:96;;;27264:348;;;;:::o;30256:578::-;30415:4;30388:31;;:23;30403:7;30388:14;:23::i;:::-;:31;;;30380:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30498:1;30484:16;;:2;:16;;;;30476:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30554:39;30575:4;30581:2;30585:7;30554:20;:39::i;:::-;30658:29;30675:1;30679:7;30658:8;:29::i;:::-;30719:1;30700:9;:15;30710:4;30700:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30748:1;30731:9;:13;30741:2;30731:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30779:2;30760:7;:16;30768:7;30760:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30818:7;30814:2;30799:27;;30808:4;30799:27;;;;;;;;;;;;30256:578;;;:::o;35984:191::-;36058:16;36077:6;;;;;;;;;;;36058:25;;36103:8;36094:6;;:17;;;;;;;;;;;;;;;;;;36158:8;36127:40;;36148:8;36127:40;;;;;;;;;;;;36047:128;35984:191;:::o;28948:382::-;29042:1;29028:16;;:2;:16;;;;29020:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29101:16;29109:7;29101;:16::i;:::-;29100:17;29092:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29163:45;29192:1;29196:2;29200:7;29163:20;:45::i;:::-;29238:1;29221:9;:13;29231:2;29221:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29269:2;29250:7;:16;29258:7;29250:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29314:7;29310:2;29289:33;;29306:1;29289:33;;;;;;;;;;;;28948:382;;:::o;31268:315::-;31423:8;31414:17;;:5;:17;;;;31406:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31510:8;31472:18;:25;31491:5;31472:25;;;;;;;;;;;;;;;:35;31498:8;31472:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31556:8;31534:41;;31549:5;31534:41;;;31566:8;31534:41;;;;;;:::i;:::-;;;;;;;;31268:315;;;:::o;26342:::-;26499:28;26509:4;26515:2;26519:7;26499:9;:28::i;:::-;26546:48;26569:4;26575:2;26579:7;26588:5;26546:22;:48::i;:::-;26538:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26342:315;;;;:::o;37319:108::-;37379:13;37408;37401:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37319:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;33519:126::-;;;;:::o;32148:799::-;32303:4;32324:15;:2;:13;;;:15::i;:::-;32320:620;;;32376:2;32360:36;;;32397:12;:10;:12::i;:::-;32411:4;32417:7;32426:5;32360:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32356:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32619:1;32602:6;:13;:18;32598:272;;;32645:60;;;;;;;;;;:::i;:::-;;;;;;;;32598:272;32820:6;32814:13;32805:6;32801:2;32797:15;32790:38;32356:529;32493:41;;;32483:51;;;:6;:51;;;;32476:58;;;;;32320:620;32924:4;32917:11;;32148:799;;;;;;;:::o;2944:387::-;3004:4;3212:12;3279:7;3267:20;3259:28;;3322:1;3315:4;:8;3308:15;;;2944:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:::-;14567:3;14588:67;14652:2;14647:3;14588:67;:::i;:::-;14581:74;;14664:93;14753:3;14664:93;:::i;:::-;14782:2;14777:3;14773:12;14766:19;;14425:366;;;:::o;14797:::-;14939:3;14960:67;15024:2;15019:3;14960:67;:::i;:::-;14953:74;;15036:93;15125:3;15036:93;:::i;:::-;15154:2;15149:3;15145:12;15138:19;;14797:366;;;:::o;15169:::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:::-;15683:3;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15780:93;15869:3;15780:93;:::i;:::-;15898:2;15893:3;15889:12;15882:19;;15541:366;;;:::o;15913:::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:::-;16427:3;16448:67;16512:2;16507:3;16448:67;:::i;:::-;16441:74;;16524:93;16613:3;16524:93;:::i;:::-;16642:2;16637:3;16633:12;16626:19;;16285:366;;;:::o;16657:::-;16799:3;16820:67;16884:2;16879:3;16820:67;:::i;:::-;16813:74;;16896:93;16985:3;16896:93;:::i;:::-;17014:2;17009:3;17005:12;16998:19;;16657:366;;;:::o;17029:118::-;17116:24;17134:5;17116:24;:::i;:::-;17111:3;17104:37;17029:118;;:::o;17153:435::-;17333:3;17355:95;17446:3;17437:6;17355:95;:::i;:::-;17348:102;;17467:95;17558:3;17549:6;17467:95;:::i;:::-;17460:102;;17579:3;17572:10;;17153:435;;;;;:::o;17594:222::-;17687:4;17725:2;17714:9;17710:18;17702:26;;17738:71;17806:1;17795:9;17791:17;17782:6;17738:71;:::i;:::-;17594:222;;;;:::o;17822:640::-;18017:4;18055:3;18044:9;18040:19;18032:27;;18069:71;18137:1;18126:9;18122:17;18113:6;18069:71;:::i;:::-;18150:72;18218:2;18207:9;18203:18;18194:6;18150:72;:::i;:::-;18232;18300:2;18289:9;18285:18;18276:6;18232:72;:::i;:::-;18351:9;18345:4;18341:20;18336:2;18325:9;18321:18;18314:48;18379:76;18450:4;18441:6;18379:76;:::i;:::-;18371:84;;17822:640;;;;;;;:::o;18468:210::-;18555:4;18593:2;18582:9;18578:18;18570:26;;18606:65;18668:1;18657:9;18653:17;18644:6;18606:65;:::i;:::-;18468:210;;;;:::o;18684:313::-;18797:4;18835:2;18824:9;18820:18;18812:26;;18884:9;18878:4;18874:20;18870:1;18859:9;18855:17;18848:47;18912:78;18985:4;18976:6;18912:78;:::i;:::-;18904:86;;18684:313;;;;:::o;19003:419::-;19169:4;19207:2;19196:9;19192:18;19184:26;;19256:9;19250:4;19246:20;19242:1;19231:9;19227:17;19220:47;19284:131;19410:4;19284:131;:::i;:::-;19276:139;;19003:419;;;:::o;19428:::-;19594:4;19632:2;19621:9;19617:18;19609:26;;19681:9;19675:4;19671:20;19667:1;19656:9;19652:17;19645:47;19709:131;19835:4;19709:131;:::i;:::-;19701:139;;19428:419;;;:::o;19853:::-;20019:4;20057:2;20046:9;20042:18;20034:26;;20106:9;20100:4;20096:20;20092:1;20081:9;20077:17;20070:47;20134:131;20260:4;20134:131;:::i;:::-;20126:139;;19853:419;;;:::o;20278:::-;20444:4;20482:2;20471:9;20467:18;20459:26;;20531:9;20525:4;20521:20;20517:1;20506:9;20502:17;20495:47;20559:131;20685:4;20559:131;:::i;:::-;20551:139;;20278:419;;;:::o;20703:::-;20869:4;20907:2;20896:9;20892:18;20884:26;;20956:9;20950:4;20946:20;20942:1;20931:9;20927:17;20920:47;20984:131;21110:4;20984:131;:::i;:::-;20976:139;;20703:419;;;:::o;21128:::-;21294:4;21332:2;21321:9;21317:18;21309:26;;21381:9;21375:4;21371:20;21367:1;21356:9;21352:17;21345:47;21409:131;21535:4;21409:131;:::i;:::-;21401:139;;21128:419;;;:::o;21553:::-;21719:4;21757:2;21746:9;21742:18;21734:26;;21806:9;21800:4;21796:20;21792:1;21781:9;21777:17;21770:47;21834:131;21960:4;21834:131;:::i;:::-;21826:139;;21553:419;;;:::o;21978:::-;22144:4;22182:2;22171:9;22167:18;22159:26;;22231:9;22225:4;22221:20;22217:1;22206:9;22202:17;22195:47;22259:131;22385:4;22259:131;:::i;:::-;22251:139;;21978:419;;;:::o;22403:::-;22569:4;22607:2;22596:9;22592:18;22584:26;;22656:9;22650:4;22646:20;22642:1;22631:9;22627:17;22620:47;22684:131;22810:4;22684:131;:::i;:::-;22676:139;;22403:419;;;:::o;22828:::-;22994:4;23032:2;23021:9;23017:18;23009:26;;23081:9;23075:4;23071:20;23067:1;23056:9;23052:17;23045:47;23109:131;23235:4;23109:131;:::i;:::-;23101:139;;22828:419;;;:::o;23253:::-;23419:4;23457:2;23446:9;23442:18;23434:26;;23506:9;23500:4;23496:20;23492:1;23481:9;23477:17;23470:47;23534:131;23660:4;23534:131;:::i;:::-;23526:139;;23253:419;;;:::o;23678:::-;23844:4;23882:2;23871:9;23867:18;23859:26;;23931:9;23925:4;23921:20;23917:1;23906:9;23902:17;23895:47;23959:131;24085:4;23959:131;:::i;:::-;23951:139;;23678:419;;;:::o;24103:::-;24269:4;24307:2;24296:9;24292:18;24284:26;;24356:9;24350:4;24346:20;24342:1;24331:9;24327:17;24320:47;24384:131;24510:4;24384:131;:::i;:::-;24376:139;;24103:419;;;:::o;24528:::-;24694:4;24732:2;24721:9;24717:18;24709:26;;24781:9;24775:4;24771:20;24767:1;24756:9;24752:17;24745:47;24809:131;24935:4;24809:131;:::i;:::-;24801:139;;24528:419;;;:::o;24953:::-;25119:4;25157:2;25146:9;25142:18;25134:26;;25206:9;25200:4;25196:20;25192:1;25181:9;25177:17;25170:47;25234:131;25360:4;25234:131;:::i;:::-;25226:139;;24953:419;;;:::o;25378:::-;25544:4;25582:2;25571:9;25567:18;25559:26;;25631:9;25625:4;25621:20;25617:1;25606:9;25602:17;25595:47;25659:131;25785:4;25659:131;:::i;:::-;25651:139;;25378:419;;;:::o;25803:::-;25969:4;26007:2;25996:9;25992:18;25984:26;;26056:9;26050:4;26046:20;26042:1;26031:9;26027:17;26020:47;26084:131;26210:4;26084:131;:::i;:::-;26076:139;;25803:419;;;:::o;26228:::-;26394:4;26432:2;26421:9;26417:18;26409:26;;26481:9;26475:4;26471:20;26467:1;26456:9;26452:17;26445:47;26509:131;26635:4;26509:131;:::i;:::-;26501:139;;26228:419;;;:::o;26653:::-;26819:4;26857:2;26846:9;26842:18;26834:26;;26906:9;26900:4;26896:20;26892:1;26881:9;26877:17;26870:47;26934:131;27060:4;26934:131;:::i;:::-;26926:139;;26653:419;;;:::o;27078:::-;27244:4;27282:2;27271:9;27267:18;27259:26;;27331:9;27325:4;27321:20;27317:1;27306:9;27302:17;27295:47;27359:131;27485:4;27359:131;:::i;:::-;27351:139;;27078:419;;;:::o;27503:::-;27669:4;27707:2;27696:9;27692:18;27684:26;;27756:9;27750:4;27746:20;27742:1;27731:9;27727:17;27720:47;27784:131;27910:4;27784:131;:::i;:::-;27776:139;;27503:419;;;:::o;27928:::-;28094:4;28132:2;28121:9;28117:18;28109:26;;28181:9;28175:4;28171:20;28167:1;28156:9;28152:17;28145:47;28209:131;28335:4;28209:131;:::i;:::-;28201:139;;27928:419;;;:::o;28353:222::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28497:71;28565:1;28554:9;28550:17;28541:6;28497:71;:::i;:::-;28353:222;;;;:::o;28581:129::-;28615:6;28642:20;;:::i;:::-;28632:30;;28671:33;28699:4;28691:6;28671:33;:::i;:::-;28581:129;;;:::o;28716:75::-;28749:6;28782:2;28776:9;28766:19;;28716:75;:::o;28797:307::-;28858:4;28948:18;28940:6;28937:30;28934:56;;;28970:18;;:::i;:::-;28934:56;29008:29;29030:6;29008:29;:::i;:::-;29000:37;;29092:4;29086;29082:15;29074:23;;28797:307;;;:::o;29110:308::-;29172:4;29262:18;29254:6;29251:30;29248:56;;;29284:18;;:::i;:::-;29248:56;29322:29;29344:6;29322:29;:::i;:::-;29314:37;;29406:4;29400;29396:15;29388:23;;29110:308;;;:::o;29424:98::-;29475:6;29509:5;29503:12;29493:22;;29424:98;;;:::o;29528:99::-;29580:6;29614:5;29608:12;29598:22;;29528:99;;;:::o;29633:168::-;29716:11;29750:6;29745:3;29738:19;29790:4;29785:3;29781:14;29766:29;;29633:168;;;;:::o;29807:169::-;29891:11;29925:6;29920:3;29913:19;29965:4;29960:3;29956:14;29941:29;;29807:169;;;;:::o;29982:148::-;30084:11;30121:3;30106:18;;29982:148;;;;:::o;30136:305::-;30176:3;30195:20;30213:1;30195:20;:::i;:::-;30190:25;;30229:20;30247:1;30229:20;:::i;:::-;30224:25;;30383:1;30315:66;30311:74;30308:1;30305:81;30302:107;;;30389:18;;:::i;:::-;30302:107;30433:1;30430;30426:9;30419:16;;30136:305;;;;:::o;30447:185::-;30487:1;30504:20;30522:1;30504:20;:::i;:::-;30499:25;;30538:20;30556:1;30538:20;:::i;:::-;30533:25;;30577:1;30567:35;;30582:18;;:::i;:::-;30567:35;30624:1;30621;30617:9;30612:14;;30447:185;;;;:::o;30638:348::-;30678:7;30701:20;30719:1;30701:20;:::i;:::-;30696:25;;30735:20;30753:1;30735:20;:::i;:::-;30730:25;;30923:1;30855:66;30851:74;30848:1;30845:81;30840:1;30833:9;30826:17;30822:105;30819:131;;;30930:18;;:::i;:::-;30819:131;30978:1;30975;30971:9;30960:20;;30638:348;;;;:::o;30992:191::-;31032:4;31052:20;31070:1;31052:20;:::i;:::-;31047:25;;31086:20;31104:1;31086:20;:::i;:::-;31081:25;;31125:1;31122;31119:8;31116:34;;;31130:18;;:::i;:::-;31116:34;31175:1;31172;31168:9;31160:17;;30992:191;;;;:::o;31189:96::-;31226:7;31255:24;31273:5;31255:24;:::i;:::-;31244:35;;31189:96;;;:::o;31291:90::-;31325:7;31368:5;31361:13;31354:21;31343:32;;31291:90;;;:::o;31387:149::-;31423:7;31463:66;31456:5;31452:78;31441:89;;31387:149;;;:::o;31542:126::-;31579:7;31619:42;31612:5;31608:54;31597:65;;31542:126;;;:::o;31674:77::-;31711:7;31740:5;31729:16;;31674:77;;;:::o;31757:154::-;31841:6;31836:3;31831;31818:30;31903:1;31894:6;31889:3;31885:16;31878:27;31757:154;;;:::o;31917:307::-;31985:1;31995:113;32009:6;32006:1;32003:13;31995:113;;;32094:1;32089:3;32085:11;32079:18;32075:1;32070:3;32066:11;32059:39;32031:2;32028:1;32024:10;32019:15;;31995:113;;;32126:6;32123:1;32120:13;32117:101;;;32206:1;32197:6;32192:3;32188:16;32181:27;32117:101;31966:258;31917:307;;;:::o;32230:320::-;32274:6;32311:1;32305:4;32301:12;32291:22;;32358:1;32352:4;32348:12;32379:18;32369:81;;32435:4;32427:6;32423:17;32413:27;;32369:81;32497:2;32489:6;32486:14;32466:18;32463:38;32460:84;;;32516:18;;:::i;:::-;32460:84;32281:269;32230:320;;;:::o;32556:281::-;32639:27;32661:4;32639:27;:::i;:::-;32631:6;32627:40;32769:6;32757:10;32754:22;32733:18;32721:10;32718:34;32715:62;32712:88;;;32780:18;;:::i;:::-;32712:88;32820:10;32816:2;32809:22;32599:238;32556:281;;:::o;32843:233::-;32882:3;32905:24;32923:5;32905:24;:::i;:::-;32896:33;;32951:66;32944:5;32941:77;32938:103;;;33021:18;;:::i;:::-;32938:103;33068:1;33061:5;33057:13;33050:20;;32843:233;;;:::o;33082:176::-;33114:1;33131:20;33149:1;33131:20;:::i;:::-;33126:25;;33165:20;33183:1;33165:20;:::i;:::-;33160:25;;33204:1;33194:35;;33209:18;;:::i;:::-;33194:35;33250:1;33247;33243:9;33238:14;;33082:176;;;;:::o;33264:180::-;33312:77;33309:1;33302:88;33409:4;33406:1;33399:15;33433:4;33430:1;33423:15;33450:180;33498:77;33495:1;33488:88;33595:4;33592:1;33585:15;33619:4;33616:1;33609:15;33636:180;33684:77;33681:1;33674:88;33781:4;33778:1;33771:15;33805:4;33802:1;33795:15;33822:180;33870:77;33867:1;33860:88;33967:4;33964:1;33957:15;33991:4;33988:1;33981:15;34008:180;34056:77;34053:1;34046:88;34153:4;34150:1;34143:15;34177:4;34174:1;34167:15;34194:117;34303:1;34300;34293:12;34317:117;34426:1;34423;34416:12;34440:117;34549:1;34546;34539:12;34563:117;34672:1;34669;34662:12;34686:102;34727:6;34778:2;34774:7;34769:2;34762:5;34758:14;34754:28;34744:38;;34686:102;;;:::o;34794:168::-;34934:20;34930:1;34922:6;34918:14;34911:44;34794:168;:::o;34968:171::-;35108:23;35104:1;35096:6;35092:14;35085:47;34968:171;:::o;35145:164::-;35285:16;35281:1;35273:6;35269:14;35262:40;35145:164;:::o;35315:237::-;35455:34;35451:1;35443:6;35439:14;35432:58;35524:20;35519:2;35511:6;35507:15;35500:45;35315:237;:::o;35558:225::-;35698:34;35694:1;35686:6;35682:14;35675:58;35767:8;35762:2;35754:6;35750:15;35743:33;35558:225;:::o;35789:178::-;35929:30;35925:1;35917:6;35913:14;35906:54;35789:178;:::o;35973:223::-;36113:34;36109:1;36101:6;36097:14;36090:58;36182:6;36177:2;36169:6;36165:15;36158:31;35973:223;:::o;36202:175::-;36342:27;36338:1;36330:6;36326:14;36319:51;36202:175;:::o;36383:231::-;36523:34;36519:1;36511:6;36507:14;36500:58;36592:14;36587:2;36579:6;36575:15;36568:39;36383:231;:::o;36620:243::-;36760:34;36756:1;36748:6;36744:14;36737:58;36829:26;36824:2;36816:6;36812:15;36805:51;36620:243;:::o;36869:164::-;37009:16;37005:1;36997:6;36993:14;36986:40;36869:164;:::o;37039:229::-;37179:34;37175:1;37167:6;37163:14;37156:58;37248:12;37243:2;37235:6;37231:15;37224:37;37039:229;:::o;37274:228::-;37414:34;37410:1;37402:6;37398:14;37391:58;37483:11;37478:2;37470:6;37466:15;37459:36;37274:228;:::o;37508:182::-;37648:34;37644:1;37636:6;37632:14;37625:58;37508:182;:::o;37696:231::-;37836:34;37832:1;37824:6;37820:14;37813:58;37905:14;37900:2;37892:6;37888:15;37881:39;37696:231;:::o;37933:182::-;38073:34;38069:1;38061:6;38057:14;38050:58;37933:182;:::o;38121:228::-;38261:34;38257:1;38249:6;38245:14;38238:58;38330:11;38325:2;38317:6;38313:15;38306:36;38121:228;:::o;38355:234::-;38495:34;38491:1;38483:6;38479:14;38472:58;38564:17;38559:2;38551:6;38547:15;38540:42;38355:234;:::o;38595:181::-;38735:33;38731:1;38723:6;38719:14;38712:57;38595:181;:::o;38782:220::-;38922:34;38918:1;38910:6;38906:14;38899:58;38991:3;38986:2;38978:6;38974:15;38967:28;38782:220;:::o;39008:236::-;39148:34;39144:1;39136:6;39132:14;39125:58;39217:19;39212:2;39204:6;39200:15;39193:44;39008:236;:::o;39250:175::-;39390:27;39386:1;39378:6;39374:14;39367:51;39250:175;:::o;39431:122::-;39504:24;39522:5;39504:24;:::i;:::-;39497:5;39494:35;39484:63;;39543:1;39540;39533:12;39484:63;39431:122;:::o;39559:116::-;39629:21;39644:5;39629:21;:::i;:::-;39622:5;39619:32;39609:60;;39665:1;39662;39655:12;39609:60;39559:116;:::o;39681:120::-;39753:23;39770:5;39753:23;:::i;:::-;39746:5;39743:34;39733:62;;39791:1;39788;39781:12;39733:62;39681:120;:::o;39807:122::-;39880:24;39898:5;39880:24;:::i;:::-;39873:5;39870:35;39860:63;;39919:1;39916;39909:12;39860:63;39807:122;:::o

Swarm Source

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