ETH Price: $3,117.55 (+2.94%)
Gas: 3 Gwei

Token

SQUADTS (SQUADT)
 

Overview

Max Total Supply

8,888 SQUADT

Holders

457

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
11 SQUADT
0x147315b89468da7f7026ae4d3ddfa9fc5490b4ea
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:
Squadts

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-23
*/

// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}


// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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/Squadts.sol
pragma solidity ^0.8.13;

contract Squadts is ERC721, Ownable {
    using Strings for uint256;

    string private _baseTokenURI = "";
    bool public isMintAllowListActive = false;
    bool public isMintEarlyAccessActive = false;
    bool public isMintPublicActive = false;
    bool public isMintPublicGiveawayActive = false;

    uint256 constant TOKEN_IDS_STARTS_AT = 1;
    uint256 public constant TOTAL_TOKENS = 8888;
    uint256 public constant TOTAL_PRIVATE_TOKENS = 100;
    uint256 public constant TOTAL_PUBLIC_TOKENS = TOTAL_TOKENS - TOTAL_PRIVATE_TOKENS;
    uint256 public constant PRICE = 0.07 ether;
    uint256 public constant MINT_ALLOW_LIST_LIMIT = 5;
    uint256 public constant MINT_EARLY_ACCESS_LIMIT = 10;
    uint256 public constant MINT_PUBLIC_LIMIT = 10;
    uint256 public MINT_PUBLIC_GIVEAWAY_LIMIT = 1;
    uint256 public privateTokensCount = 0;
    uint256 public publicTokensCount = 0;

    bytes32 public merkleRoot = 0x5662aa1481ad8acf4d65287062577c5609832383d249827884a2183e5b3e2c32;

    mapping(address => bool) public earlyAccessContracts;
    mapping(address => bool) public giveawayAddresses;
    mapping(address => uint256) public allowListClaimed;
    mapping(address => uint256) public earlyAccessClaimed;
    mapping(address => uint256) public publicGiveawayClaimed;

    // add "baseURI" to our constructor
    constructor(
        string memory name,
        string memory symbol,
        string memory baseURI
    ) ERC721(name, symbol) {
        setBaseURI(baseURI);
        setEarlyAccessContract(0x0Ee24c748445Fb48028a74b0ccb6b46d7D3e3b33, true); // Nah Fungible Bones
        setEarlyAccessContract(0x6317C4CAB501655D7B85128A5868E98a094C0082, true); // MonsterBuds
    }

    // Getters & Setters
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    function setBaseURI(string memory value) public onlyOwner {
        _baseTokenURI = value;
    }
    function setMintAllowListActive(bool value) external onlyOwner {
        isMintAllowListActive = value;
    }
    function setMintEarlyAccessActive(bool value) external onlyOwner {
        isMintEarlyAccessActive = value;
    }
    function setMintPublicActive(bool value) external onlyOwner {
        isMintPublicActive = value;
    }
    function setMintPublicGiveawayActive(bool value) external onlyOwner {
        isMintPublicGiveawayActive = value;
    }
    function setMintPublicGiveawayLimit(uint256 value) external onlyOwner {
        MINT_PUBLIC_GIVEAWAY_LIMIT = value;
    }
    function setEarlyAccessContract(address contractAddress, bool value) public onlyOwner {
        earlyAccessContracts[contractAddress] = value;
    }
    function setGiveawayAddress(address giveawayAddress, bool value) public onlyOwner {
        giveawayAddresses[giveawayAddress] = value;
    }
    function getPrice(uint256 amount) public pure returns (uint256) {
        return PRICE * amount;
    }
    function totalSupply() public view returns (uint256) {
        return privateTokensCount + publicTokensCount;
    }

    // Minting
    function mint(uint256 amount) external payable {
        require(isMintPublicActive, "Public minting is inactive");
        require(amount > 0, "Need to mint at least one token");
        require(amount <= MINT_PUBLIC_LIMIT, "Over mint limit");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + amount <= TOTAL_TOKENS, "Over total tokens");
        require(publicTokensCount < TOTAL_PUBLIC_TOKENS, "All public tokens minted");
        require(publicTokensCount + amount <= TOTAL_PUBLIC_TOKENS, "Over total public tokens");
        require(msg.value >= getPrice(amount), "Value is below price");
        for (uint256 i = 0; i < amount; i++) {
            publicTokensCount += 1;
            _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply + i);
        }
    }
    function mintAllowList(uint256 amount, bytes32[] calldata merkleProof) external payable {
        require(isMintAllowListActive, "Allow list is inactive");

        bytes32 merkleLeaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(merkleProof, merkleRoot, merkleLeaf), "Address is not on the allow list list");

        require(amount > 0, "Need to mint at least one token");
        require(amount <= MINT_ALLOW_LIST_LIMIT, "Over allow list mint limit");
        require(allowListClaimed[msg.sender] + amount <= MINT_ALLOW_LIST_LIMIT, "Over allow list limit");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + amount <= TOTAL_TOKENS, "Over total tokens");
        require(publicTokensCount < TOTAL_PUBLIC_TOKENS, "All public tokens minted");
        require(publicTokensCount + amount <= TOTAL_PUBLIC_TOKENS, "Over total public tokens");
        require(msg.value >= getPrice(amount), "Value is below price");
        for (uint256 i = 0; i < amount; i++) {
            publicTokensCount += 1;
            allowListClaimed[msg.sender] += 1;
            _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply + i);
        }
    }
    function mintEarlyAccess(address contractAddress, uint256 amount) external payable {
        require(isMintEarlyAccessActive, "Early access is inactive");
        require(earlyAccessContracts[contractAddress], "Invalid contract address");
        require(ERC721(contractAddress).balanceOf(msg.sender) > 0, "Wallet is missing token");
        require(amount > 0, "Need to mint at least one token");
        require(amount <= MINT_EARLY_ACCESS_LIMIT, "Over early access mint limit");
        require(earlyAccessClaimed[msg.sender] + amount <= MINT_EARLY_ACCESS_LIMIT, "Over early access limit");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + amount <= TOTAL_TOKENS, "Over total tokens");
        require(publicTokensCount < TOTAL_PUBLIC_TOKENS, "All public tokens minted");
        require(publicTokensCount + amount <= TOTAL_PUBLIC_TOKENS, "Over total public tokens");
        require(msg.value >= getPrice(amount), "Value is below price");
        for (uint256 i = 0; i < amount; i++) {
            publicTokensCount += 1;
            earlyAccessClaimed[msg.sender] += 1;
            _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply + i);
        }
    }
    function mintPublicGiveaway(uint256 amount) external payable {
        require(isMintPublicGiveawayActive, "Public giveaway is inactive");
        require(balanceOf(msg.sender) > 0, "Wallet is missing token");
        require(amount > 0, "Need to mint at least one token");
        require(amount <= MINT_PUBLIC_GIVEAWAY_LIMIT, "Over public giveaway mint limit");
        require(publicGiveawayClaimed[msg.sender] + amount <= MINT_PUBLIC_GIVEAWAY_LIMIT, "Over public giveaway limit");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + amount <= TOTAL_TOKENS, "Over total tokens");
        require(publicTokensCount < TOTAL_PUBLIC_TOKENS, "All public tokens minted");
        require(publicTokensCount + amount <= TOTAL_PUBLIC_TOKENS, "Over total public tokens");
        for (uint256 i = 0; i < amount; i++) {
            publicTokensCount += 1;
            publicGiveawayClaimed[msg.sender] += 1;
            _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply + i);
        }
    }
    function mintGiveaway() external payable {
        require(giveawayAddresses[msg.sender], "Address is not on the giveaway list");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + 1 <= TOTAL_TOKENS, "Over total tokens");
        require(privateTokensCount < TOTAL_PRIVATE_TOKENS, "All private tokens minted");
        require(privateTokensCount + 1 <= TOTAL_PRIVATE_TOKENS, "Over total private tokens");
        privateTokensCount += 1;
        giveawayAddresses[msg.sender] = false;
        _safeMint(msg.sender, TOKEN_IDS_STARTS_AT + supply);
    }
    function gift(address to, uint256 amount) external onlyOwner {
        require(amount > 0, "Need to mint at least one token");
        uint256 supply = totalSupply();
        require(supply < TOTAL_TOKENS, "All tokens minted");
        require(supply + amount <= TOTAL_TOKENS, "Over total tokens");
        require(privateTokensCount < TOTAL_PRIVATE_TOKENS, "All private tokens minted");
        require(privateTokensCount + amount <= TOTAL_PRIVATE_TOKENS, "Over total private tokens");
        for (uint256 i = 0; i < amount; i++) {
            privateTokensCount += 1;
            _safeMint(to, TOKEN_IDS_STARTS_AT + supply + i);
        }
    }

    // Withdraw
    function withdraw() external payable onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success, "Transfer failed");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"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":"MINT_ALLOW_LIST_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_EARLY_ACCESS_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PUBLIC_GIVEAWAY_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PUBLIC_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_PRIVATE_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_PUBLIC_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowListClaimed","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":"address","name":"","type":"address"}],"name":"earlyAccessClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earlyAccessContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"giveawayAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isMintAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintEarlyAccessActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintPublicActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintPublicGiveawayActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintEarlyAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintGiveaway","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPublicGiveaway","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateTokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicGiveawayClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicTokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setEarlyAccessContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"giveawayAddress","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setGiveawayAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMintAllowListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMintEarlyAccessActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMintPublicActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMintPublicGiveawayActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMintPublicGiveawayLimit","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":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60a06040819052600060808190526200001b9160079162000262565b506008805463ffffffff1916905560016009556000600a819055600b557f5662aa1481ad8acf4d65287062577c5609832383d249827884a2183e5b3e2c32600c553480156200006957600080fd5b50604051620036d6380380620036d68339810160408190526200008c91620003d5565b825183908390620000a590600090602085019062000262565b508051620000bb90600190602084019062000262565b505050620000d8620000d26200012e60201b60201c565b62000132565b620000e38162000184565b62000104730ee24c748445fb48028a74b0ccb6b46d7d3e3b336001620001ec565b62000125736317c4cab501655d7b85128a5868e98a094c00826001620001ec565b505050620004a2565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001d35760405162461bcd60e51b81526020600482018190526024820152600080516020620036b683398151915260448201526064015b60405180910390fd5b8051620001e890600790602084019062000262565b5050565b6006546001600160a01b03163314620002375760405162461bcd60e51b81526020600482018190526024820152600080516020620036b68339815191526044820152606401620001ca565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b828054620002709062000466565b90600052602060002090601f016020900481019282620002945760008555620002df565b82601f10620002af57805160ff1916838001178555620002df565b82800160010185558215620002df579182015b82811115620002df578251825591602001919060010190620002c2565b50620002ed929150620002f1565b5090565b5b80821115620002ed5760008155600101620002f2565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200033057600080fd5b81516001600160401b03808211156200034d576200034d62000308565b604051601f8301601f19908116603f0116810190828211818310171562000378576200037862000308565b816040528381526020925086838588010111156200039557600080fd5b600091505b83821015620003b957858201830151818301840152908201906200039a565b83821115620003cb5760008385830101525b9695505050505050565b600080600060608486031215620003eb57600080fd5b83516001600160401b03808211156200040357600080fd5b62000411878388016200031e565b945060208601519150808211156200042857600080fd5b62000436878388016200031e565b935060408601519150808211156200044d57600080fd5b506200045c868287016200031e565b9150509250925092565b600181811c908216806200047b57607f821691505b6020821081036200049c57634e487b7160e01b600052602260045260246000fd5b50919050565b61320480620004b26000396000f3fe60806040526004361061031a5760003560e01c80636352211e116101ab5780639ff048fc116100f7578063cbce4c9711610095578063f0b4cbd11161006f578063f0b4cbd1146108db578063f2fde38b146108fb578063f6ab15061461091b578063fa05a6571461094b57600080fd5b8063cbce4c9714610852578063e757223014610872578063e985e9c51461089257600080fd5b8063a22cb465116100d1578063a22cb465146107d2578063a561c641146107f2578063b88d4fde14610812578063c87b56dd1461083257600080fd5b80639ff048fc146107a1578063a0712d68146107a9578063a18f4e7c146107bc57600080fd5b80638ae08dc011610164578063936093711161013e578063936093711461074457806393f25b941461075957806395d89b411461076c5780639ddf35991461078157600080fd5b80638ae08dc0146106f55780638d859f3e1461070b5780638da5cb5b1461072657600080fd5b80636352211e1461063957806370a0823114610659578063715018a61461067957806374dd665a1461068e57806377a3ebaf146106ae578063884b3c82146106c857600080fd5b80633ccfd60b1161026a578063465fceb61161022357806353f4b449116101fd57806353f4b449146105e557806355f804b3146105fa5780635c209bca1461061a578063600b1eaf146104c057600080fd5b8063465fceb6146105835780634e16128f146105b05780634f17928d146105d057600080fd5b80633ccfd60b146104d55780634001d92c146104dd57806342842e0e1461050d57806342dec8ff1461052d57806343ff314a1461054d57806346364d031461056d57600080fd5b806318160ddd116102d75780632eb4a7ab116102b15780632eb4a7ab146104695780633374a6121461047f57806337a704fc1461049f5780633894a44c146104c057600080fd5b806318160ddd14610421578063228c102e1461043657806323b872dd1461044957600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630b7abf77146103d05780630f35dce9146103f4575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612a8a565b61095e565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109b0565b60405161034b9190612aff565b34801561038257600080fd5b50610396610391366004612b12565b610a42565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612b47565b610adc565b005b3480156103dc57600080fd5b506103e66122b881565b60405190815260200161034b565b34801561040057600080fd5b506103e661040f366004612b71565b60106020526000908152604090205481565b34801561042d57600080fd5b506103e6610bf1565b6103ce610444366004612b47565b610c08565b34801561045557600080fd5b506103ce610464366004612b8c565b610fbc565b34801561047557600080fd5b506103e6600c5481565b34801561048b57600080fd5b506103ce61049a366004612bd8565b610fed565b3480156104ab57600080fd5b5060085461033f906301000000900460ff1681565b3480156104cc57600080fd5b506103e6600a81565b6103ce611031565b3480156104e957600080fd5b5061033f6104f8366004612b71565b600e6020526000908152604090205460ff1681565b34801561051957600080fd5b506103ce610528366004612b8c565b6110eb565b34801561053957600080fd5b506103ce610548366004612bd8565b611106565b34801561055957600080fd5b506103ce610568366004612bd8565b61114e565b34801561057957600080fd5b506103e6600b5481565b34801561058f57600080fd5b506103e661059e366004612b71565b60116020526000908152604090205481565b3480156105bc57600080fd5b506103ce6105cb366004612bd8565b61118b565b3480156105dc57600080fd5b506103e66111d1565b3480156105f157600080fd5b506103e6606481565b34801561060657600080fd5b506103ce610615366004612c7f565b6111e1565b34801561062657600080fd5b5060085461033f90610100900460ff1681565b34801561064557600080fd5b50610396610654366004612b12565b61121e565b34801561066557600080fd5b506103e6610674366004612b71565b611295565b34801561068557600080fd5b506103ce61131c565b34801561069a57600080fd5b506103ce6106a9366004612b12565b611352565b3480156106ba57600080fd5b5060085461033f9060ff1681565b3480156106d457600080fd5b506103e66106e3366004612b71565b600f6020526000908152604090205481565b34801561070157600080fd5b506103e660095481565b34801561071757600080fd5b506103e666f8b0a10e47000081565b34801561073257600080fd5b506006546001600160a01b0316610396565b34801561075057600080fd5b506103e6600581565b6103ce610767366004612b12565b611381565b34801561077857600080fd5b50610369611633565b34801561078d57600080fd5b5060085461033f9062010000900460ff1681565b6103ce611642565b6103ce6107b7366004612b12565b6117f0565b3480156107c857600080fd5b506103e6600a5481565b3480156107de57600080fd5b506103ce6107ed366004612cc8565b6119d7565b3480156107fe57600080fd5b506103ce61080d366004612cc8565b6119e2565b34801561081e57600080fd5b506103ce61082d366004612cfb565b611a37565b34801561083e57600080fd5b5061036961084d366004612b12565b611a69565b34801561085e57600080fd5b506103ce61086d366004612b47565b611b44565b34801561087e57600080fd5b506103e661088d366004612b12565b611cd4565b34801561089e57600080fd5b5061033f6108ad366004612d77565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108e757600080fd5b506103ce6108f6366004612cc8565b611ce7565b34801561090757600080fd5b506103ce610916366004612b71565b611d3c565b34801561092757600080fd5b5061033f610936366004612b71565b600d6020526000908152604090205460ff1681565b6103ce610959366004612da1565b611dd4565b60006001600160e01b031982166380ac58cd60e01b148061098f57506001600160e01b03198216635b5e139f60e01b145b806109aa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546109bf90612e20565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb90612e20565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ae78261121e565b9050806001600160a01b0316836001600160a01b031603610b545760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ab7565b336001600160a01b0382161480610b705750610b7081336108ad565b610be25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ab7565b610bec8383612121565b505050565b6000600b54600a54610c039190612e70565b905090565b600854610100900460ff16610c5f5760405162461bcd60e51b815260206004820152601860248201527f4561726c792061636365737320697320696e61637469766500000000000000006044820152606401610ab7565b6001600160a01b0382166000908152600d602052604090205460ff16610cc75760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e7472616374206164647265737300000000000000006044820152606401610ab7565b6040516370a0823160e01b81523360048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d329190612e88565b11610d795760405162461bcd60e51b81526020600482015260176024820152762bb0b63632ba1034b99036b4b9b9b4b733903a37b5b2b760491b6044820152606401610ab7565b60008111610d995760405162461bcd60e51b8152600401610ab790612ea1565b600a811115610dea5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206561726c7920616363657373206d696e74206c696d6974000000006044820152606401610ab7565b33600090815260106020526040902054600a90610e08908390612e70565b1115610e565760405162461bcd60e51b815260206004820152601760248201527f4f766572206561726c7920616363657373206c696d69740000000000000000006044820152606401610ab7565b6000610e60610bf1565b90506122b88110610e835760405162461bcd60e51b8152600401610ab790612ed8565b6122b8610e908383612e70565b1115610eae5760405162461bcd60e51b8152600401610ab790612f03565b610ebb60646122b8612f2e565b600b5410610edb5760405162461bcd60e51b8152600401610ab790612f45565b610ee860646122b8612f2e565b82600b54610ef69190612e70565b1115610f145760405162461bcd60e51b8152600401610ab790612f7c565b610f1d82611cd4565b341015610f3c5760405162461bcd60e51b8152600401610ab790612fb3565b60005b82811015610fb6576001600b6000828254610f5a9190612e70565b9091555050336000908152601060205260408120805460019290610f7f908490612e70565b90915550610fa490503382610f95856001612e70565b610f9f9190612e70565b61218f565b80610fae81612fe1565b915050610f3f565b50505050565b610fc633826121a9565b610fe25760405162461bcd60e51b8152600401610ab790612ffa565b610bec8383836122a0565b6006546001600160a01b031633146110175760405162461bcd60e51b8152600401610ab79061304b565b600880549115156101000261ff0019909216919091179055565b6006546001600160a01b0316331461105b5760405162461bcd60e51b8152600401610ab79061304b565b6040514790600090339083908381818185875af1925050503d806000811461109f576040519150601f19603f3d011682016040523d82523d6000602084013e6110a4565b606091505b50509050806110e75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ab7565b5050565b610bec83838360405180602001604052806000815250611a37565b6006546001600160a01b031633146111305760405162461bcd60e51b8152600401610ab79061304b565b6008805491151563010000000263ff00000019909216919091179055565b6006546001600160a01b031633146111785760405162461bcd60e51b8152600401610ab79061304b565b6008805460ff1916911515919091179055565b6006546001600160a01b031633146111b55760405162461bcd60e51b8152600401610ab79061304b565b60088054911515620100000262ff000019909216919091179055565b6111de60646122b8612f2e565b81565b6006546001600160a01b0316331461120b5760405162461bcd60e51b8152600401610ab79061304b565b80516110e79060079060208401906129db565b6000818152600260205260408120546001600160a01b0316806109aa5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ab7565b60006001600160a01b0382166113005760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ab7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146113465760405162461bcd60e51b8152600401610ab79061304b565b6113506000612440565b565b6006546001600160a01b0316331461137c5760405162461bcd60e51b8152600401610ab79061304b565b600955565b6008546301000000900460ff166113da5760405162461bcd60e51b815260206004820152601b60248201527f5075626c696320676976656177617920697320696e61637469766500000000006044820152606401610ab7565b60006113e533611295565b1161142c5760405162461bcd60e51b81526020600482015260176024820152762bb0b63632ba1034b99036b4b9b9b4b733903a37b5b2b760491b6044820152606401610ab7565b6000811161144c5760405162461bcd60e51b8152600401610ab790612ea1565b60095481111561149e5760405162461bcd60e51b815260206004820152601f60248201527f4f766572207075626c6963206769766561776179206d696e74206c696d6974006044820152606401610ab7565b600954336000908152601160205260409020546114bc908390612e70565b111561150a5760405162461bcd60e51b815260206004820152601a60248201527f4f766572207075626c6963206769766561776179206c696d69740000000000006044820152606401610ab7565b6000611514610bf1565b90506122b881106115375760405162461bcd60e51b8152600401610ab790612ed8565b6122b86115448383612e70565b11156115625760405162461bcd60e51b8152600401610ab790612f03565b61156f60646122b8612f2e565b600b541061158f5760405162461bcd60e51b8152600401610ab790612f45565b61159c60646122b8612f2e565b82600b546115aa9190612e70565b11156115c85760405162461bcd60e51b8152600401610ab790612f7c565b60005b82811015610bec576001600b60008282546115e69190612e70565b909155505033600090815260116020526040812080546001929061160b908490612e70565b9091555061162190503382610f95856001612e70565b8061162b81612fe1565b9150506115cb565b6060600180546109bf90612e20565b336000908152600e602052604090205460ff166116ad5760405162461bcd60e51b815260206004820152602360248201527f41646472657373206973206e6f74206f6e20746865206769766561776179206c6044820152621a5cdd60ea1b6064820152608401610ab7565b60006116b7610bf1565b90506122b881106116da5760405162461bcd60e51b8152600401610ab790612ed8565b6122b86116e8826001612e70565b11156117065760405162461bcd60e51b8152600401610ab790612f03565b6064600a54106117545760405162461bcd60e51b8152602060048201526019602482015278105b1b081c1c9a5d985d19481d1bdad95b9cc81b5a5b9d1959603a1b6044820152606401610ab7565b6064600a5460016117659190612e70565b11156117af5760405162461bcd60e51b81526020600482015260196024820152784f76657220746f74616c207072697661746520746f6b656e7360381b6044820152606401610ab7565b6001600a60008282546117c29190612e70565b9091555050336000818152600e60205260409020805460ff191690556117ed90610f9f836001612e70565b50565b60085462010000900460ff166118485760405162461bcd60e51b815260206004820152601a60248201527f5075626c6963206d696e74696e6720697320696e6163746976650000000000006044820152606401610ab7565b600081116118685760405162461bcd60e51b8152600401610ab790612ea1565b600a8111156118ab5760405162461bcd60e51b815260206004820152600f60248201526e13dd995c881b5a5b9d081b1a5b5a5d608a1b6044820152606401610ab7565b60006118b5610bf1565b90506122b881106118d85760405162461bcd60e51b8152600401610ab790612ed8565b6122b86118e58383612e70565b11156119035760405162461bcd60e51b8152600401610ab790612f03565b61191060646122b8612f2e565b600b54106119305760405162461bcd60e51b8152600401610ab790612f45565b61193d60646122b8612f2e565b82600b5461194b9190612e70565b11156119695760405162461bcd60e51b8152600401610ab790612f7c565b61197282611cd4565b3410156119915760405162461bcd60e51b8152600401610ab790612fb3565b60005b82811015610bec576001600b60008282546119af9190612e70565b909155506119c590503382610f95856001612e70565b806119cf81612fe1565b915050611994565b6110e7338383612492565b6006546001600160a01b03163314611a0c5760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b611a4133836121a9565b611a5d5760405162461bcd60e51b8152600401610ab790612ffa565b610fb684848484612560565b6000818152600260205260409020546060906001600160a01b0316611ae85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ab7565b6000611af2612593565b90506000815111611b125760405180602001604052806000815250611b3d565b80611b1c846125a2565b604051602001611b2d929190613080565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611b6e5760405162461bcd60e51b8152600401610ab79061304b565b60008111611b8e5760405162461bcd60e51b8152600401610ab790612ea1565b6000611b98610bf1565b90506122b88110611bbb5760405162461bcd60e51b8152600401610ab790612ed8565b6122b8611bc88383612e70565b1115611be65760405162461bcd60e51b8152600401610ab790612f03565b6064600a5410611c345760405162461bcd60e51b8152602060048201526019602482015278105b1b081c1c9a5d985d19481d1bdad95b9cc81b5a5b9d1959603a1b6044820152606401610ab7565b606482600a54611c449190612e70565b1115611c8e5760405162461bcd60e51b81526020600482015260196024820152784f76657220746f74616c207072697661746520746f6b656e7360381b6044820152606401610ab7565b60005b82811015610fb6576001600a6000828254611cac9190612e70565b90915550611cc290508482610f95856001612e70565b80611ccc81612fe1565b915050611c91565b60006109aa8266f8b0a10e4700006130af565b6006546001600160a01b03163314611d115760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611d665760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b038116611dcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab7565b6117ed81612440565b60085460ff16611e1f5760405162461bcd60e51b8152602060048201526016602482015275416c6c6f77206c69737420697320696e61637469766560501b6044820152606401610ab7565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611e9983838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600c5491508490506126a3565b611ef35760405162461bcd60e51b815260206004820152602560248201527f41646472657373206973206e6f74206f6e2074686520616c6c6f77206c697374604482015264081b1a5cdd60da1b6064820152608401610ab7565b60008411611f135760405162461bcd60e51b8152600401610ab790612ea1565b6005841115611f645760405162461bcd60e51b815260206004820152601a60248201527f4f76657220616c6c6f77206c697374206d696e74206c696d69740000000000006044820152606401610ab7565b336000908152600f6020526040902054600590611f82908690612e70565b1115611fc85760405162461bcd60e51b815260206004820152601560248201527413dd995c88185b1b1bddc81b1a5cdd081b1a5b5a5d605a1b6044820152606401610ab7565b6000611fd2610bf1565b90506122b88110611ff55760405162461bcd60e51b8152600401610ab790612ed8565b6122b86120028683612e70565b11156120205760405162461bcd60e51b8152600401610ab790612f03565b61202d60646122b8612f2e565b600b541061204d5760405162461bcd60e51b8152600401610ab790612f45565b61205a60646122b8612f2e565b85600b546120689190612e70565b11156120865760405162461bcd60e51b8152600401610ab790612f7c565b61208f85611cd4565b3410156120ae5760405162461bcd60e51b8152600401610ab790612fb3565b60005b85811015612119576001600b60008282546120cc9190612e70565b9091555050336000908152600f602052604081208054600192906120f1908490612e70565b9091555061210790503382610f95856001612e70565b8061211181612fe1565b9150506120b1565b505050505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906121568261121e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6110e78282604051806020016040528060008152506126b9565b6000818152600260205260408120546001600160a01b03166122225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ab7565b600061222d8361121e565b9050806001600160a01b0316846001600160a01b031614806122685750836001600160a01b031661225d84610a42565b6001600160a01b0316145b8061229857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122b38261121e565b6001600160a01b03161461231b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ab7565b6001600160a01b03821661237d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab7565b612388600082612121565b6001600160a01b03831660009081526003602052604081208054600192906123b1908490612f2e565b90915550506001600160a01b03821660009081526003602052604081208054600192906123df908490612e70565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036124f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ab7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61256b8484846122a0565b612577848484846126ec565b610fb65760405162461bcd60e51b8152600401610ab7906130ce565b6060600780546109bf90612e20565b6060816000036125c95750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125f357806125dd81612fe1565b91506125ec9050600a83613136565b91506125cd565b60008167ffffffffffffffff81111561260e5761260e612bf3565b6040519080825280601f01601f191660200182016040528015612638576020820181803683370190505b5090505b84156122985761264d600183612f2e565b915061265a600a8661314a565b612665906030612e70565b60f81b81838151811061267a5761267a61315e565b60200101906001600160f81b031916908160001a90535061269c600a86613136565b945061263c565b6000826126b085846127ed565b14949350505050565b6126c38383612899565b6126d060008484846126ec565b610bec5760405162461bcd60e51b8152600401610ab7906130ce565b60006001600160a01b0384163b156127e257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612730903390899088908890600401613174565b6020604051808303816000875af192505050801561276b575060408051601f3d908101601f19168201909252612768918101906131b1565b60015b6127c8573d808015612799576040519150601f19603f3d011682016040523d82523d6000602084013e61279e565b606091505b5080516000036127c05760405162461bcd60e51b8152600401610ab7906130ce565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612298565b506001949350505050565b600081815b845181101561289157600085828151811061280f5761280f61315e565b6020026020010151905080831161285157604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061287e565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061288981612fe1565b9150506127f2565b509392505050565b6001600160a01b0382166128ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ab7565b6000818152600260205260409020546001600160a01b0316156129545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ab7565b6001600160a01b038216600090815260036020526040812080546001929061297d908490612e70565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546129e790612e20565b90600052602060002090601f016020900481019282612a095760008555612a4f565b82601f10612a2257805160ff1916838001178555612a4f565b82800160010185558215612a4f579182015b82811115612a4f578251825591602001919060010190612a34565b50612a5b929150612a5f565b5090565b5b80821115612a5b5760008155600101612a60565b6001600160e01b0319811681146117ed57600080fd5b600060208284031215612a9c57600080fd5b8135611b3d81612a74565b60005b83811015612ac2578181015183820152602001612aaa565b83811115610fb65750506000910152565b60008151808452612aeb816020860160208601612aa7565b601f01601f19169290920160200192915050565b602081526000611b3d6020830184612ad3565b600060208284031215612b2457600080fd5b5035919050565b80356001600160a01b0381168114612b4257600080fd5b919050565b60008060408385031215612b5a57600080fd5b612b6383612b2b565b946020939093013593505050565b600060208284031215612b8357600080fd5b611b3d82612b2b565b600080600060608486031215612ba157600080fd5b612baa84612b2b565b9250612bb860208501612b2b565b9150604084013590509250925092565b80358015158114612b4257600080fd5b600060208284031215612bea57600080fd5b611b3d82612bc8565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612c2457612c24612bf3565b604051601f8501601f19908116603f01168101908282118183101715612c4c57612c4c612bf3565b81604052809350858152868686011115612c6557600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612c9157600080fd5b813567ffffffffffffffff811115612ca857600080fd5b8201601f81018413612cb957600080fd5b61229884823560208401612c09565b60008060408385031215612cdb57600080fd5b612ce483612b2b565b9150612cf260208401612bc8565b90509250929050565b60008060008060808587031215612d1157600080fd5b612d1a85612b2b565b9350612d2860208601612b2b565b925060408501359150606085013567ffffffffffffffff811115612d4b57600080fd5b8501601f81018713612d5c57600080fd5b612d6b87823560208401612c09565b91505092959194509250565b60008060408385031215612d8a57600080fd5b612d9383612b2b565b9150612cf260208401612b2b565b600080600060408486031215612db657600080fd5b83359250602084013567ffffffffffffffff80821115612dd557600080fd5b818601915086601f830112612de957600080fd5b813581811115612df857600080fd5b8760208260051b8501011115612e0d57600080fd5b6020830194508093505050509250925092565b600181811c90821680612e3457607f821691505b602082108103612e5457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e8357612e83612e5a565b500190565b600060208284031215612e9a57600080fd5b5051919050565b6020808252601f908201527f4e65656420746f206d696e74206174206c65617374206f6e6520746f6b656e00604082015260600190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252601190820152704f76657220746f74616c20746f6b656e7360781b604082015260600190565b600082821015612f4057612f40612e5a565b500390565b60208082526018908201527f416c6c207075626c696320746f6b656e73206d696e7465640000000000000000604082015260600190565b60208082526018908201527f4f76657220746f74616c207075626c696320746f6b656e730000000000000000604082015260600190565b60208082526014908201527356616c75652069732062656c6f7720707269636560601b604082015260600190565b600060018201612ff357612ff3612e5a565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008351613092818460208801612aa7565b8351908301906130a6818360208801612aa7565b01949350505050565b60008160001904831182151516156130c9576130c9612e5a565b500290565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261314557613145613120565b500490565b60008261315957613159613120565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131a790830184612ad3565b9695505050505050565b6000602082840312156131c357600080fd5b8151611b3d81612a7456fea2646970667358221220f531b832e325e1cb231476ad4429b2587b8bba25a530a9376fa0c25a5846a65464736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007535155414454530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065351554144540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f737175616474732e636f6d2f636f6c6c656374696f6e2f6d657461646174612f000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061031a5760003560e01c80636352211e116101ab5780639ff048fc116100f7578063cbce4c9711610095578063f0b4cbd11161006f578063f0b4cbd1146108db578063f2fde38b146108fb578063f6ab15061461091b578063fa05a6571461094b57600080fd5b8063cbce4c9714610852578063e757223014610872578063e985e9c51461089257600080fd5b8063a22cb465116100d1578063a22cb465146107d2578063a561c641146107f2578063b88d4fde14610812578063c87b56dd1461083257600080fd5b80639ff048fc146107a1578063a0712d68146107a9578063a18f4e7c146107bc57600080fd5b80638ae08dc011610164578063936093711161013e578063936093711461074457806393f25b941461075957806395d89b411461076c5780639ddf35991461078157600080fd5b80638ae08dc0146106f55780638d859f3e1461070b5780638da5cb5b1461072657600080fd5b80636352211e1461063957806370a0823114610659578063715018a61461067957806374dd665a1461068e57806377a3ebaf146106ae578063884b3c82146106c857600080fd5b80633ccfd60b1161026a578063465fceb61161022357806353f4b449116101fd57806353f4b449146105e557806355f804b3146105fa5780635c209bca1461061a578063600b1eaf146104c057600080fd5b8063465fceb6146105835780634e16128f146105b05780634f17928d146105d057600080fd5b80633ccfd60b146104d55780634001d92c146104dd57806342842e0e1461050d57806342dec8ff1461052d57806343ff314a1461054d57806346364d031461056d57600080fd5b806318160ddd116102d75780632eb4a7ab116102b15780632eb4a7ab146104695780633374a6121461047f57806337a704fc1461049f5780633894a44c146104c057600080fd5b806318160ddd14610421578063228c102e1461043657806323b872dd1461044957600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630b7abf77146103d05780630f35dce9146103f4575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612a8a565b61095e565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109b0565b60405161034b9190612aff565b34801561038257600080fd5b50610396610391366004612b12565b610a42565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612b47565b610adc565b005b3480156103dc57600080fd5b506103e66122b881565b60405190815260200161034b565b34801561040057600080fd5b506103e661040f366004612b71565b60106020526000908152604090205481565b34801561042d57600080fd5b506103e6610bf1565b6103ce610444366004612b47565b610c08565b34801561045557600080fd5b506103ce610464366004612b8c565b610fbc565b34801561047557600080fd5b506103e6600c5481565b34801561048b57600080fd5b506103ce61049a366004612bd8565b610fed565b3480156104ab57600080fd5b5060085461033f906301000000900460ff1681565b3480156104cc57600080fd5b506103e6600a81565b6103ce611031565b3480156104e957600080fd5b5061033f6104f8366004612b71565b600e6020526000908152604090205460ff1681565b34801561051957600080fd5b506103ce610528366004612b8c565b6110eb565b34801561053957600080fd5b506103ce610548366004612bd8565b611106565b34801561055957600080fd5b506103ce610568366004612bd8565b61114e565b34801561057957600080fd5b506103e6600b5481565b34801561058f57600080fd5b506103e661059e366004612b71565b60116020526000908152604090205481565b3480156105bc57600080fd5b506103ce6105cb366004612bd8565b61118b565b3480156105dc57600080fd5b506103e66111d1565b3480156105f157600080fd5b506103e6606481565b34801561060657600080fd5b506103ce610615366004612c7f565b6111e1565b34801561062657600080fd5b5060085461033f90610100900460ff1681565b34801561064557600080fd5b50610396610654366004612b12565b61121e565b34801561066557600080fd5b506103e6610674366004612b71565b611295565b34801561068557600080fd5b506103ce61131c565b34801561069a57600080fd5b506103ce6106a9366004612b12565b611352565b3480156106ba57600080fd5b5060085461033f9060ff1681565b3480156106d457600080fd5b506103e66106e3366004612b71565b600f6020526000908152604090205481565b34801561070157600080fd5b506103e660095481565b34801561071757600080fd5b506103e666f8b0a10e47000081565b34801561073257600080fd5b506006546001600160a01b0316610396565b34801561075057600080fd5b506103e6600581565b6103ce610767366004612b12565b611381565b34801561077857600080fd5b50610369611633565b34801561078d57600080fd5b5060085461033f9062010000900460ff1681565b6103ce611642565b6103ce6107b7366004612b12565b6117f0565b3480156107c857600080fd5b506103e6600a5481565b3480156107de57600080fd5b506103ce6107ed366004612cc8565b6119d7565b3480156107fe57600080fd5b506103ce61080d366004612cc8565b6119e2565b34801561081e57600080fd5b506103ce61082d366004612cfb565b611a37565b34801561083e57600080fd5b5061036961084d366004612b12565b611a69565b34801561085e57600080fd5b506103ce61086d366004612b47565b611b44565b34801561087e57600080fd5b506103e661088d366004612b12565b611cd4565b34801561089e57600080fd5b5061033f6108ad366004612d77565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108e757600080fd5b506103ce6108f6366004612cc8565b611ce7565b34801561090757600080fd5b506103ce610916366004612b71565b611d3c565b34801561092757600080fd5b5061033f610936366004612b71565b600d6020526000908152604090205460ff1681565b6103ce610959366004612da1565b611dd4565b60006001600160e01b031982166380ac58cd60e01b148061098f57506001600160e01b03198216635b5e139f60e01b145b806109aa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546109bf90612e20565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb90612e20565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ae78261121e565b9050806001600160a01b0316836001600160a01b031603610b545760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ab7565b336001600160a01b0382161480610b705750610b7081336108ad565b610be25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ab7565b610bec8383612121565b505050565b6000600b54600a54610c039190612e70565b905090565b600854610100900460ff16610c5f5760405162461bcd60e51b815260206004820152601860248201527f4561726c792061636365737320697320696e61637469766500000000000000006044820152606401610ab7565b6001600160a01b0382166000908152600d602052604090205460ff16610cc75760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e7472616374206164647265737300000000000000006044820152606401610ab7565b6040516370a0823160e01b81523360048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d329190612e88565b11610d795760405162461bcd60e51b81526020600482015260176024820152762bb0b63632ba1034b99036b4b9b9b4b733903a37b5b2b760491b6044820152606401610ab7565b60008111610d995760405162461bcd60e51b8152600401610ab790612ea1565b600a811115610dea5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206561726c7920616363657373206d696e74206c696d6974000000006044820152606401610ab7565b33600090815260106020526040902054600a90610e08908390612e70565b1115610e565760405162461bcd60e51b815260206004820152601760248201527f4f766572206561726c7920616363657373206c696d69740000000000000000006044820152606401610ab7565b6000610e60610bf1565b90506122b88110610e835760405162461bcd60e51b8152600401610ab790612ed8565b6122b8610e908383612e70565b1115610eae5760405162461bcd60e51b8152600401610ab790612f03565b610ebb60646122b8612f2e565b600b5410610edb5760405162461bcd60e51b8152600401610ab790612f45565b610ee860646122b8612f2e565b82600b54610ef69190612e70565b1115610f145760405162461bcd60e51b8152600401610ab790612f7c565b610f1d82611cd4565b341015610f3c5760405162461bcd60e51b8152600401610ab790612fb3565b60005b82811015610fb6576001600b6000828254610f5a9190612e70565b9091555050336000908152601060205260408120805460019290610f7f908490612e70565b90915550610fa490503382610f95856001612e70565b610f9f9190612e70565b61218f565b80610fae81612fe1565b915050610f3f565b50505050565b610fc633826121a9565b610fe25760405162461bcd60e51b8152600401610ab790612ffa565b610bec8383836122a0565b6006546001600160a01b031633146110175760405162461bcd60e51b8152600401610ab79061304b565b600880549115156101000261ff0019909216919091179055565b6006546001600160a01b0316331461105b5760405162461bcd60e51b8152600401610ab79061304b565b6040514790600090339083908381818185875af1925050503d806000811461109f576040519150601f19603f3d011682016040523d82523d6000602084013e6110a4565b606091505b50509050806110e75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ab7565b5050565b610bec83838360405180602001604052806000815250611a37565b6006546001600160a01b031633146111305760405162461bcd60e51b8152600401610ab79061304b565b6008805491151563010000000263ff00000019909216919091179055565b6006546001600160a01b031633146111785760405162461bcd60e51b8152600401610ab79061304b565b6008805460ff1916911515919091179055565b6006546001600160a01b031633146111b55760405162461bcd60e51b8152600401610ab79061304b565b60088054911515620100000262ff000019909216919091179055565b6111de60646122b8612f2e565b81565b6006546001600160a01b0316331461120b5760405162461bcd60e51b8152600401610ab79061304b565b80516110e79060079060208401906129db565b6000818152600260205260408120546001600160a01b0316806109aa5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610ab7565b60006001600160a01b0382166113005760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ab7565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146113465760405162461bcd60e51b8152600401610ab79061304b565b6113506000612440565b565b6006546001600160a01b0316331461137c5760405162461bcd60e51b8152600401610ab79061304b565b600955565b6008546301000000900460ff166113da5760405162461bcd60e51b815260206004820152601b60248201527f5075626c696320676976656177617920697320696e61637469766500000000006044820152606401610ab7565b60006113e533611295565b1161142c5760405162461bcd60e51b81526020600482015260176024820152762bb0b63632ba1034b99036b4b9b9b4b733903a37b5b2b760491b6044820152606401610ab7565b6000811161144c5760405162461bcd60e51b8152600401610ab790612ea1565b60095481111561149e5760405162461bcd60e51b815260206004820152601f60248201527f4f766572207075626c6963206769766561776179206d696e74206c696d6974006044820152606401610ab7565b600954336000908152601160205260409020546114bc908390612e70565b111561150a5760405162461bcd60e51b815260206004820152601a60248201527f4f766572207075626c6963206769766561776179206c696d69740000000000006044820152606401610ab7565b6000611514610bf1565b90506122b881106115375760405162461bcd60e51b8152600401610ab790612ed8565b6122b86115448383612e70565b11156115625760405162461bcd60e51b8152600401610ab790612f03565b61156f60646122b8612f2e565b600b541061158f5760405162461bcd60e51b8152600401610ab790612f45565b61159c60646122b8612f2e565b82600b546115aa9190612e70565b11156115c85760405162461bcd60e51b8152600401610ab790612f7c565b60005b82811015610bec576001600b60008282546115e69190612e70565b909155505033600090815260116020526040812080546001929061160b908490612e70565b9091555061162190503382610f95856001612e70565b8061162b81612fe1565b9150506115cb565b6060600180546109bf90612e20565b336000908152600e602052604090205460ff166116ad5760405162461bcd60e51b815260206004820152602360248201527f41646472657373206973206e6f74206f6e20746865206769766561776179206c6044820152621a5cdd60ea1b6064820152608401610ab7565b60006116b7610bf1565b90506122b881106116da5760405162461bcd60e51b8152600401610ab790612ed8565b6122b86116e8826001612e70565b11156117065760405162461bcd60e51b8152600401610ab790612f03565b6064600a54106117545760405162461bcd60e51b8152602060048201526019602482015278105b1b081c1c9a5d985d19481d1bdad95b9cc81b5a5b9d1959603a1b6044820152606401610ab7565b6064600a5460016117659190612e70565b11156117af5760405162461bcd60e51b81526020600482015260196024820152784f76657220746f74616c207072697661746520746f6b656e7360381b6044820152606401610ab7565b6001600a60008282546117c29190612e70565b9091555050336000818152600e60205260409020805460ff191690556117ed90610f9f836001612e70565b50565b60085462010000900460ff166118485760405162461bcd60e51b815260206004820152601a60248201527f5075626c6963206d696e74696e6720697320696e6163746976650000000000006044820152606401610ab7565b600081116118685760405162461bcd60e51b8152600401610ab790612ea1565b600a8111156118ab5760405162461bcd60e51b815260206004820152600f60248201526e13dd995c881b5a5b9d081b1a5b5a5d608a1b6044820152606401610ab7565b60006118b5610bf1565b90506122b881106118d85760405162461bcd60e51b8152600401610ab790612ed8565b6122b86118e58383612e70565b11156119035760405162461bcd60e51b8152600401610ab790612f03565b61191060646122b8612f2e565b600b54106119305760405162461bcd60e51b8152600401610ab790612f45565b61193d60646122b8612f2e565b82600b5461194b9190612e70565b11156119695760405162461bcd60e51b8152600401610ab790612f7c565b61197282611cd4565b3410156119915760405162461bcd60e51b8152600401610ab790612fb3565b60005b82811015610bec576001600b60008282546119af9190612e70565b909155506119c590503382610f95856001612e70565b806119cf81612fe1565b915050611994565b6110e7338383612492565b6006546001600160a01b03163314611a0c5760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b611a4133836121a9565b611a5d5760405162461bcd60e51b8152600401610ab790612ffa565b610fb684848484612560565b6000818152600260205260409020546060906001600160a01b0316611ae85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ab7565b6000611af2612593565b90506000815111611b125760405180602001604052806000815250611b3d565b80611b1c846125a2565b604051602001611b2d929190613080565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611b6e5760405162461bcd60e51b8152600401610ab79061304b565b60008111611b8e5760405162461bcd60e51b8152600401610ab790612ea1565b6000611b98610bf1565b90506122b88110611bbb5760405162461bcd60e51b8152600401610ab790612ed8565b6122b8611bc88383612e70565b1115611be65760405162461bcd60e51b8152600401610ab790612f03565b6064600a5410611c345760405162461bcd60e51b8152602060048201526019602482015278105b1b081c1c9a5d985d19481d1bdad95b9cc81b5a5b9d1959603a1b6044820152606401610ab7565b606482600a54611c449190612e70565b1115611c8e5760405162461bcd60e51b81526020600482015260196024820152784f76657220746f74616c207072697661746520746f6b656e7360381b6044820152606401610ab7565b60005b82811015610fb6576001600a6000828254611cac9190612e70565b90915550611cc290508482610f95856001612e70565b80611ccc81612fe1565b915050611c91565b60006109aa8266f8b0a10e4700006130af565b6006546001600160a01b03163314611d115760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611d665760405162461bcd60e51b8152600401610ab79061304b565b6001600160a01b038116611dcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab7565b6117ed81612440565b60085460ff16611e1f5760405162461bcd60e51b8152602060048201526016602482015275416c6c6f77206c69737420697320696e61637469766560501b6044820152606401610ab7565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611e9983838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600c5491508490506126a3565b611ef35760405162461bcd60e51b815260206004820152602560248201527f41646472657373206973206e6f74206f6e2074686520616c6c6f77206c697374604482015264081b1a5cdd60da1b6064820152608401610ab7565b60008411611f135760405162461bcd60e51b8152600401610ab790612ea1565b6005841115611f645760405162461bcd60e51b815260206004820152601a60248201527f4f76657220616c6c6f77206c697374206d696e74206c696d69740000000000006044820152606401610ab7565b336000908152600f6020526040902054600590611f82908690612e70565b1115611fc85760405162461bcd60e51b815260206004820152601560248201527413dd995c88185b1b1bddc81b1a5cdd081b1a5b5a5d605a1b6044820152606401610ab7565b6000611fd2610bf1565b90506122b88110611ff55760405162461bcd60e51b8152600401610ab790612ed8565b6122b86120028683612e70565b11156120205760405162461bcd60e51b8152600401610ab790612f03565b61202d60646122b8612f2e565b600b541061204d5760405162461bcd60e51b8152600401610ab790612f45565b61205a60646122b8612f2e565b85600b546120689190612e70565b11156120865760405162461bcd60e51b8152600401610ab790612f7c565b61208f85611cd4565b3410156120ae5760405162461bcd60e51b8152600401610ab790612fb3565b60005b85811015612119576001600b60008282546120cc9190612e70565b9091555050336000908152600f602052604081208054600192906120f1908490612e70565b9091555061210790503382610f95856001612e70565b8061211181612fe1565b9150506120b1565b505050505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906121568261121e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6110e78282604051806020016040528060008152506126b9565b6000818152600260205260408120546001600160a01b03166122225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ab7565b600061222d8361121e565b9050806001600160a01b0316846001600160a01b031614806122685750836001600160a01b031661225d84610a42565b6001600160a01b0316145b8061229857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122b38261121e565b6001600160a01b03161461231b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ab7565b6001600160a01b03821661237d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab7565b612388600082612121565b6001600160a01b03831660009081526003602052604081208054600192906123b1908490612f2e565b90915550506001600160a01b03821660009081526003602052604081208054600192906123df908490612e70565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036124f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ab7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61256b8484846122a0565b612577848484846126ec565b610fb65760405162461bcd60e51b8152600401610ab7906130ce565b6060600780546109bf90612e20565b6060816000036125c95750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125f357806125dd81612fe1565b91506125ec9050600a83613136565b91506125cd565b60008167ffffffffffffffff81111561260e5761260e612bf3565b6040519080825280601f01601f191660200182016040528015612638576020820181803683370190505b5090505b84156122985761264d600183612f2e565b915061265a600a8661314a565b612665906030612e70565b60f81b81838151811061267a5761267a61315e565b60200101906001600160f81b031916908160001a90535061269c600a86613136565b945061263c565b6000826126b085846127ed565b14949350505050565b6126c38383612899565b6126d060008484846126ec565b610bec5760405162461bcd60e51b8152600401610ab7906130ce565b60006001600160a01b0384163b156127e257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612730903390899088908890600401613174565b6020604051808303816000875af192505050801561276b575060408051601f3d908101601f19168201909252612768918101906131b1565b60015b6127c8573d808015612799576040519150601f19603f3d011682016040523d82523d6000602084013e61279e565b606091505b5080516000036127c05760405162461bcd60e51b8152600401610ab7906130ce565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612298565b506001949350505050565b600081815b845181101561289157600085828151811061280f5761280f61315e565b6020026020010151905080831161285157604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061287e565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061288981612fe1565b9150506127f2565b509392505050565b6001600160a01b0382166128ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ab7565b6000818152600260205260409020546001600160a01b0316156129545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ab7565b6001600160a01b038216600090815260036020526040812080546001929061297d908490612e70565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546129e790612e20565b90600052602060002090601f016020900481019282612a095760008555612a4f565b82601f10612a2257805160ff1916838001178555612a4f565b82800160010185558215612a4f579182015b82811115612a4f578251825591602001919060010190612a34565b50612a5b929150612a5f565b5090565b5b80821115612a5b5760008155600101612a60565b6001600160e01b0319811681146117ed57600080fd5b600060208284031215612a9c57600080fd5b8135611b3d81612a74565b60005b83811015612ac2578181015183820152602001612aaa565b83811115610fb65750506000910152565b60008151808452612aeb816020860160208601612aa7565b601f01601f19169290920160200192915050565b602081526000611b3d6020830184612ad3565b600060208284031215612b2457600080fd5b5035919050565b80356001600160a01b0381168114612b4257600080fd5b919050565b60008060408385031215612b5a57600080fd5b612b6383612b2b565b946020939093013593505050565b600060208284031215612b8357600080fd5b611b3d82612b2b565b600080600060608486031215612ba157600080fd5b612baa84612b2b565b9250612bb860208501612b2b565b9150604084013590509250925092565b80358015158114612b4257600080fd5b600060208284031215612bea57600080fd5b611b3d82612bc8565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612c2457612c24612bf3565b604051601f8501601f19908116603f01168101908282118183101715612c4c57612c4c612bf3565b81604052809350858152868686011115612c6557600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612c9157600080fd5b813567ffffffffffffffff811115612ca857600080fd5b8201601f81018413612cb957600080fd5b61229884823560208401612c09565b60008060408385031215612cdb57600080fd5b612ce483612b2b565b9150612cf260208401612bc8565b90509250929050565b60008060008060808587031215612d1157600080fd5b612d1a85612b2b565b9350612d2860208601612b2b565b925060408501359150606085013567ffffffffffffffff811115612d4b57600080fd5b8501601f81018713612d5c57600080fd5b612d6b87823560208401612c09565b91505092959194509250565b60008060408385031215612d8a57600080fd5b612d9383612b2b565b9150612cf260208401612b2b565b600080600060408486031215612db657600080fd5b83359250602084013567ffffffffffffffff80821115612dd557600080fd5b818601915086601f830112612de957600080fd5b813581811115612df857600080fd5b8760208260051b8501011115612e0d57600080fd5b6020830194508093505050509250925092565b600181811c90821680612e3457607f821691505b602082108103612e5457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e8357612e83612e5a565b500190565b600060208284031215612e9a57600080fd5b5051919050565b6020808252601f908201527f4e65656420746f206d696e74206174206c65617374206f6e6520746f6b656e00604082015260600190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252601190820152704f76657220746f74616c20746f6b656e7360781b604082015260600190565b600082821015612f4057612f40612e5a565b500390565b60208082526018908201527f416c6c207075626c696320746f6b656e73206d696e7465640000000000000000604082015260600190565b60208082526018908201527f4f76657220746f74616c207075626c696320746f6b656e730000000000000000604082015260600190565b60208082526014908201527356616c75652069732062656c6f7720707269636560601b604082015260600190565b600060018201612ff357612ff3612e5a565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008351613092818460208801612aa7565b8351908301906130a6818360208801612aa7565b01949350505050565b60008160001904831182151516156130c9576130c9612e5a565b500290565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261314557613145613120565b500490565b60008261315957613159613120565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131a790830184612ad3565b9695505050505050565b6000602082840312156131c357600080fd5b8151611b3d81612a7456fea2646970667358221220f531b832e325e1cb231476ad4429b2587b8bba25a530a9376fa0c25a5846a65464736f6c634300080d0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007535155414454530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065351554144540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f737175616474732e636f6d2f636f6c6c656374696f6e2f6d657461646174612f000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): SQUADTS
Arg [1] : symbol (string): SQUADT
Arg [2] : baseURI (string): https://squadts.com/collection/metadata/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5351554144545300000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5351554144540000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [8] : 68747470733a2f2f737175616474732e636f6d2f636f6c6c656374696f6e2f6d
Arg [9] : 657461646174612f000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38381:9161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23355:305;;;;;;;;;;-1:-1:-1;23355:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;23355:305:0;;;;;;;;24300:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25859:221::-;;;;;;;;;;-1:-1:-1;25859:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;25859:221:0;1528:203:1;25382:411:0;;;;;;;;;;-1:-1:-1;25382:411:0;;;;;:::i;:::-;;:::i;:::-;;38743:43;;;;;;;;;;;;38782:4;38743:43;;;;;2319:25:1;;;2307:2;2292:18;38743:43:0;2173:177:1;39572:53:0;;;;;;;;;;-1:-1:-1;39572:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;41389:117;;;;;;;;;;;;;:::i;43647:1254::-;;;;;;:::i;:::-;;:::i;26609:339::-;;;;;;;;;;-1:-1:-1;26609:339:0;;;;;:::i;:::-;;:::i;39296:94::-;;;;;;;;;;;;;;;;40486:115;;;;;;;;;;-1:-1:-1;40486:115:0;;;;;:::i;:::-;;:::i;38641:46::-;;;;;;;;;;-1:-1:-1;38641:46:0;;;;;;;;;;;39102;;;;;;;;;;;;39146:2;39102:46;;47312:225;;;:::i;39458:49::-;;;;;;;;;;-1:-1:-1;39458:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27019:185;;;;;;;;;;-1:-1:-1;27019:185:0;;;;;:::i;:::-;;:::i;40718:121::-;;;;;;;;;;-1:-1:-1;40718:121:0;;;;;:::i;:::-;;:::i;40369:111::-;;;;;;;;;;-1:-1:-1;40369:111:0;;;;;:::i;:::-;;:::i;39251:36::-;;;;;;;;;;;;;;;;39632:56;;;;;;;;;;-1:-1:-1;39632:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;40607:105;;;;;;;;;;-1:-1:-1;40607:105:0;;;;;:::i;:::-;;:::i;38850:81::-;;;;;;;;;;;;;:::i;38793:50::-;;;;;;;;;;;;38840:3;38793:50;;40265:98;;;;;;;;;;-1:-1:-1;40265:98:0;;;;;:::i;:::-;;:::i;38546:43::-;;;;;;;;;;-1:-1:-1;38546:43:0;;;;;;;;;;;23994:239;;;;;;;;;;-1:-1:-1;23994:239:0;;;;;:::i;:::-;;:::i;23724:208::-;;;;;;;;;;-1:-1:-1;23724:208:0;;;;;:::i;:::-;;:::i;37502:103::-;;;;;;;;;;;;;:::i;40845:123::-;;;;;;;;;;-1:-1:-1;40845:123:0;;;;;:::i;:::-;;:::i;38498:41::-;;;;;;;;;;-1:-1:-1;38498:41:0;;;;;;;;39514:51;;;;;;;;;;-1:-1:-1;39514:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;39155:45;;;;;;;;;;;;;;;;38938:42;;;;;;;;;;;;38970:10;38938:42;;36851:87;;;;;;;;;;-1:-1:-1;36924:6:0;;-1:-1:-1;;;;;36924:6:0;36851:87;;38987:49;;;;;;;;;;;;39035:1;38987:49;;44907:1074;;;;;;:::i;:::-;;:::i;24469:104::-;;;;;;;;;;;;;:::i;38596:38::-;;;;;;;;;;-1:-1:-1;38596:38:0;;;;;;;;;;;45987:636;;;:::i;41530:852::-;;;;;;:::i;:::-;;:::i;39207:37::-;;;;;;;;;;;;;;;;26152:155;;;;;;;;;;-1:-1:-1;26152:155:0;;;;;:::i;:::-;;:::i;41130:143::-;;;;;;;;;;-1:-1:-1;41130:143:0;;;;;:::i;:::-;;:::i;27275:328::-;;;;;;;;;;-1:-1:-1;27275:328:0;;;;;:::i;:::-;;:::i;24644:334::-;;;;;;;;;;-1:-1:-1;24644:334:0;;;;;:::i;:::-;;:::i;46629:658::-;;;;;;;;;;-1:-1:-1;46629:658:0;;;;;:::i;:::-;;:::i;41279:104::-;;;;;;;;;;-1:-1:-1;41279:104:0;;;;;:::i;:::-;;:::i;26378:164::-;;;;;;;;;;-1:-1:-1;26378:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26499:25:0;;;26475:4;26499:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26378:164;40974:150;;;;;;;;;;-1:-1:-1;40974:150:0;;;;;:::i;:::-;;:::i;37760:201::-;;;;;;;;;;-1:-1:-1;37760:201:0;;;;;:::i;:::-;;:::i;39399:52::-;;;;;;;;;;-1:-1:-1;39399:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42388:1253;;;;;;:::i;:::-;;:::i;23355:305::-;23457:4;-1:-1:-1;;;;;;23494:40:0;;-1:-1:-1;;;23494:40:0;;:105;;-1:-1:-1;;;;;;;23551:48:0;;-1:-1:-1;;;23551:48:0;23494:105;:158;;;-1:-1:-1;;;;;;;;;;15374:40:0;;;23616:36;23474:178;23355:305;-1:-1:-1;;23355:305:0:o;24300:100::-;24354:13;24387:5;24380:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24300:100;:::o;25859:221::-;25935:7;29202:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29202:16:0;25955:73;;;;-1:-1:-1;;;25955:73:0;;7107:2:1;25955:73:0;;;7089:21:1;7146:2;7126:18;;;7119:30;7185:34;7165:18;;;7158:62;-1:-1:-1;;;7236:18:1;;;7229:42;7288:19;;25955:73:0;;;;;;;;;-1:-1:-1;26048:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26048:24:0;;25859:221::o;25382:411::-;25463:13;25479:23;25494:7;25479:14;:23::i;:::-;25463:39;;25527:5;-1:-1:-1;;;;;25521:11:0;:2;-1:-1:-1;;;;;25521:11:0;;25513:57;;;;-1:-1:-1;;;25513:57:0;;7520:2:1;25513:57:0;;;7502:21:1;7559:2;7539:18;;;7532:30;7598:34;7578:18;;;7571:62;-1:-1:-1;;;7649:18:1;;;7642:31;7690:19;;25513:57:0;7318:397:1;25513:57:0;21847:10;-1:-1:-1;;;;;25605:21:0;;;;:62;;-1:-1:-1;25630:37:0;25647:5;21847:10;26378:164;:::i;25630:37::-;25583:168;;;;-1:-1:-1;;;25583:168:0;;7922:2:1;25583:168:0;;;7904:21:1;7961:2;7941:18;;;7934:30;8000:34;7980:18;;;7973:62;8071:26;8051:18;;;8044:54;8115:19;;25583:168:0;7720:420:1;25583:168:0;25764:21;25773:2;25777:7;25764:8;:21::i;:::-;25452:341;25382:411;;:::o;41389:117::-;41433:7;41481:17;;41460:18;;:38;;;;:::i;:::-;41453:45;;41389:117;:::o;43647:1254::-;43749:23;;;;;;;43741:60;;;;-1:-1:-1;;;43741:60:0;;8612:2:1;43741:60:0;;;8594:21:1;8651:2;8631:18;;;8624:30;8690:26;8670:18;;;8663:54;8734:18;;43741:60:0;8410:348:1;43741:60:0;-1:-1:-1;;;;;43820:37:0;;;;;;:20;:37;;;;;;;;43812:74;;;;-1:-1:-1;;;43812:74:0;;8965:2:1;43812:74:0;;;8947:21:1;9004:2;8984:18;;;8977:30;9043:26;9023:18;;;9016:54;9087:18;;43812:74:0;8763:348:1;43812:74:0;43905:45;;-1:-1:-1;;;43905:45:0;;43939:10;43905:45;;;1674:51:1;43953:1:0;;-1:-1:-1;;;;;43905:33:0;;;;;1647:18:1;;43905:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;43897:85;;;;-1:-1:-1;;;43897:85:0;;9507:2:1;43897:85:0;;;9489:21:1;9546:2;9526:18;;;9519:30;-1:-1:-1;;;9565:18:1;;;9558:53;9628:18;;43897:85:0;9305:347:1;43897:85:0;44010:1;44001:6;:10;43993:54;;;;-1:-1:-1;;;43993:54:0;;;;;;;:::i;:::-;39093:2;44066:6;:33;;44058:74;;;;-1:-1:-1;;;44058:74:0;;10219:2:1;44058:74:0;;;10201:21:1;10258:2;10238:18;;;10231:30;10297;10277:18;;;10270:58;10345:18;;44058:74:0;10017:352:1;44058:74:0;44170:10;44151:30;;;;:18;:30;;;;;;39093:2;;44151:39;;44184:6;;44151:39;:::i;:::-;:66;;44143:102;;;;-1:-1:-1;;;44143:102:0;;10576:2:1;44143:102:0;;;10558:21:1;10615:2;10595:18;;;10588:30;10654:25;10634:18;;;10627:53;10697:18;;44143:102:0;10374:347:1;44143:102:0;44256:14;44273:13;:11;:13::i;:::-;44256:30;;38782:4;44305:6;:21;44297:51;;;;-1:-1:-1;;;44297:51:0;;;;;;;:::i;:::-;38782:4;44367:15;44376:6;44367;:15;:::i;:::-;:31;;44359:61;;;;-1:-1:-1;;;44359:61:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;44439:17;;:39;44431:76;;;;-1:-1:-1;;;44431:76:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;44546:6;44526:17;;:26;;;;:::i;:::-;:49;;44518:86;;;;-1:-1:-1;;;44518:86:0;;;;;;;:::i;:::-;44636:16;44645:6;44636:8;:16::i;:::-;44623:9;:29;;44615:62;;;;-1:-1:-1;;;44615:62:0;;;;;;;:::i;:::-;44693:9;44688:206;44712:6;44708:1;:10;44688:206;;;44761:1;44740:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;44796:10:0;44777:30;;;;:18;:30;;;;;:35;;44811:1;;44777:30;:35;;44811:1;;44777:35;:::i;:::-;;;;-1:-1:-1;44827:55:0;;-1:-1:-1;44837:10:0;44880:1;44849:28;44871:6;38735:1;44849:28;:::i;:::-;:32;;;;:::i;:::-;44827:9;:55::i;:::-;44720:3;;;;:::i;:::-;;;;44688:206;;;;43730:1171;43647:1254;;:::o;26609:339::-;26804:41;21847:10;26837:7;26804:18;:41::i;:::-;26796:103;;;;-1:-1:-1;;;26796:103:0;;;;;;;:::i;:::-;26912:28;26922:4;26928:2;26932:7;26912:9;:28::i;40486:115::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40562:23:::1;:31:::0;;;::::1;;;;-1:-1:-1::0;;40562:31:0;;::::1;::::0;;;::::1;::::0;;40486:115::o;47312:225::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;47439:44:::1;::::0;47388:21:::1;::::0;47370:15:::1;::::0;47447:10:::1;::::0;47388:21;;47370:15;47439:44;47370:15;47439:44;47388:21;47447:10;47439:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47420:63;;;47502:7;47494:35;;;::::0;-1:-1:-1;;;47494:35:0;;13934:2:1;47494:35:0::1;::::0;::::1;13916:21:1::0;13973:2;13953:18;;;13946:30;-1:-1:-1;;;13992:18:1;;;13985:45;14047:18;;47494:35:0::1;13732:339:1::0;47494:35:0::1;47359:178;;47312:225::o:0;27019:185::-;27157:39;27174:4;27180:2;27184:7;27157:39;;;;;;;;;;;;:16;:39::i;40718:121::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40797:26:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40797:34:0;;::::1;::::0;;;::::1;::::0;;40718:121::o;40369:111::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40443:21:::1;:29:::0;;-1:-1:-1;;40443:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40369:111::o;40607:105::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40678:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40678:26:0;;::::1;::::0;;;::::1;::::0;;40607:105::o;38850:81::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;38850:81;:::o;40265:98::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40334:21;;::::1;::::0;:13:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;23994:239::-:0;24066:7;24102:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24102:16:0;;24129:73;;;;-1:-1:-1;;;24129:73:0;;14278:2:1;24129:73:0;;;14260:21:1;14317:2;14297:18;;;14290:30;14356:34;14336:18;;;14329:62;-1:-1:-1;;;14407:18:1;;;14400:39;14456:19;;24129:73:0;14076:405:1;23724:208:0;23796:7;-1:-1:-1;;;;;23824:19:0;;23816:74;;;;-1:-1:-1;;;23816:74:0;;14688:2:1;23816:74:0;;;14670:21:1;14727:2;14707:18;;;14700:30;14766:34;14746:18;;;14739:62;-1:-1:-1;;;14817:18:1;;;14810:40;14867:19;;23816:74:0;14486:406:1;23816:74:0;-1:-1:-1;;;;;;23908:16:0;;;;;:9;:16;;;;;;;23724:208::o;37502:103::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;37567:30:::1;37594:1;37567:18;:30::i;:::-;37502:103::o:0;40845:123::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;40926:26:::1;:34:::0;40845:123::o;44907:1074::-;44987:26;;;;;;;44979:66;;;;-1:-1:-1;;;44979:66:0;;15099:2:1;44979:66:0;;;15081:21:1;15138:2;15118:18;;;15111:30;15177:29;15157:18;;;15150:57;15224:18;;44979:66:0;14897:351:1;44979:66:0;45088:1;45064:21;45074:10;45064:9;:21::i;:::-;:25;45056:61;;;;-1:-1:-1;;;45056:61:0;;9507:2:1;45056:61:0;;;9489:21:1;9546:2;9526:18;;;9519:30;-1:-1:-1;;;9565:18:1;;;9558:53;9628:18;;45056:61:0;9305:347:1;45056:61:0;45145:1;45136:6;:10;45128:54;;;;-1:-1:-1;;;45128:54:0;;;;;;;:::i;:::-;45211:26;;45201:6;:36;;45193:80;;;;-1:-1:-1;;;45193:80:0;;15455:2:1;45193:80:0;;;15437:21:1;15494:2;15474:18;;;15467:30;15533:33;15513:18;;;15506:61;15584:18;;45193:80:0;15253:355:1;45193:80:0;45338:26;;45314:10;45292:33;;;;:21;:33;;;;;;:42;;45328:6;;45292:42;:::i;:::-;:72;;45284:111;;;;-1:-1:-1;;;45284:111:0;;15815:2:1;45284:111:0;;;15797:21:1;15854:2;15834:18;;;15827:30;15893:28;15873:18;;;15866:56;15939:18;;45284:111:0;15613:350:1;45284:111:0;45406:14;45423:13;:11;:13::i;:::-;45406:30;;38782:4;45455:6;:21;45447:51;;;;-1:-1:-1;;;45447:51:0;;;;;;;:::i;:::-;38782:4;45517:15;45526:6;45517;:15;:::i;:::-;:31;;45509:61;;;;-1:-1:-1;;;45509:61:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;45589:17;;:39;45581:76;;;;-1:-1:-1;;;45581:76:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;45696:6;45676:17;;:26;;;;:::i;:::-;:49;;45668:86;;;;-1:-1:-1;;;45668:86:0;;;;;;;:::i;:::-;45770:9;45765:209;45789:6;45785:1;:10;45765:209;;;45838:1;45817:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;45876:10:0;45854:33;;;;:21;:33;;;;;:38;;45891:1;;45854:33;:38;;45891:1;;45854:38;:::i;:::-;;;;-1:-1:-1;45907:55:0;;-1:-1:-1;45917:10:0;45960:1;45929:28;45951:6;38735:1;45929:28;:::i;45907:55::-;45797:3;;;;:::i;:::-;;;;45765:209;;24469:104;24525:13;24558:7;24551:14;;;;;:::i;45987:636::-;46065:10;46047:29;;;;:17;:29;;;;;;;;46039:77;;;;-1:-1:-1;;;46039:77:0;;16170:2:1;46039:77:0;;;16152:21:1;16209:2;16189:18;;;16182:30;16248:34;16228:18;;;16221:62;-1:-1:-1;;;16299:18:1;;;16292:33;16342:19;;46039:77:0;15968:399:1;46039:77:0;46127:14;46144:13;:11;:13::i;:::-;46127:30;;38782:4;46176:6;:21;46168:51;;;;-1:-1:-1;;;46168:51:0;;;;;;;:::i;:::-;38782:4;46238:10;:6;46247:1;46238:10;:::i;:::-;:26;;46230:56;;;;-1:-1:-1;;;46230:56:0;;;;;;;:::i;:::-;38840:3;46305:18;;:41;46297:79;;;;-1:-1:-1;;;46297:79:0;;16574:2:1;46297:79:0;;;16556:21:1;16613:2;16593:18;;;16586:30;-1:-1:-1;;;16632:18:1;;;16625:55;16697:18;;46297:79:0;16372:349:1;46297:79:0;38840:3;46395:18;;46416:1;46395:22;;;;:::i;:::-;:46;;46387:84;;;;-1:-1:-1;;;46387:84:0;;16928:2:1;46387:84:0;;;16910:21:1;16967:2;16947:18;;;16940:30;-1:-1:-1;;;16986:18:1;;;16979:55;17051:18;;46387:84:0;16726:349:1;46387:84:0;46504:1;46482:18;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;46534:10:0;46548:5;46516:29;;;:17;:29;;;;;:37;;-1:-1:-1;;46516:37:0;;;46564:51;;46586:28;46608:6;46516:37;46586:28;:::i;46564:51::-;46028:595;45987:636::o;41530:852::-;41596:18;;;;;;;41588:57;;;;-1:-1:-1;;;41588:57:0;;17282:2:1;41588:57:0;;;17264:21:1;17321:2;17301:18;;;17294:30;17360:28;17340:18;;;17333:56;17406:18;;41588:57:0;17080:350:1;41588:57:0;41673:1;41664:6;:10;41656:54;;;;-1:-1:-1;;;41656:54:0;;;;;;;:::i;:::-;39146:2;41729:6;:27;;41721:55;;;;-1:-1:-1;;;41721:55:0;;17637:2:1;41721:55:0;;;17619:21:1;17676:2;17656:18;;;17649:30;-1:-1:-1;;;17695:18:1;;;17688:45;17750:18;;41721:55:0;17435:339:1;41721:55:0;41787:14;41804:13;:11;:13::i;:::-;41787:30;;38782:4;41836:6;:21;41828:51;;;;-1:-1:-1;;;41828:51:0;;;;;;;:::i;:::-;38782:4;41898:15;41907:6;41898;:15;:::i;:::-;:31;;41890:61;;;;-1:-1:-1;;;41890:61:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;41970:17;;:39;41962:76;;;;-1:-1:-1;;;41962:76:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;42077:6;42057:17;;:26;;;;:::i;:::-;:49;;42049:86;;;;-1:-1:-1;;;42049:86:0;;;;;;;:::i;:::-;42167:16;42176:6;42167:8;:16::i;:::-;42154:9;:29;;42146:62;;;;-1:-1:-1;;;42146:62:0;;;;;;;:::i;:::-;42224:9;42219:156;42243:6;42239:1;:10;42219:156;;;42292:1;42271:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;42308:55:0;;-1:-1:-1;42318:10:0;42361:1;42330:28;42352:6;38735:1;42330:28;:::i;42308:55::-;42251:3;;;;:::i;:::-;;;;42219:156;;26152:155;26247:52;21847:10;26280:8;26290;26247:18;:52::i;41130:143::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41223:34:0;;;::::1;;::::0;;;:17:::1;:34;::::0;;;;:42;;-1:-1:-1;;41223:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41130:143::o;27275:328::-;27450:41;21847:10;27483:7;27450:18;:41::i;:::-;27442:103;;;;-1:-1:-1;;;27442:103:0;;;;;;;:::i;:::-;27556:39;27570:4;27576:2;27580:7;27589:5;27556:13;:39::i;24644:334::-;29178:4;29202:16;;;:7;:16;;;;;;24717:13;;-1:-1:-1;;;;;29202:16:0;24743:76;;;;-1:-1:-1;;;24743:76:0;;17981:2:1;24743:76:0;;;17963:21:1;18020:2;18000:18;;;17993:30;18059:34;18039:18;;;18032:62;-1:-1:-1;;;18110:18:1;;;18103:45;18165:19;;24743:76:0;17779:411:1;24743:76:0;24832:21;24856:10;:8;:10::i;:::-;24832:34;;24908:1;24890:7;24884:21;:25;:86;;;;;;;;;;;;;;;;;24936:7;24945:18;:7;:16;:18::i;:::-;24919:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24884:86;24877:93;24644:334;-1:-1:-1;;;24644:334:0:o;46629:658::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;46718:1:::1;46709:6;:10;46701:54;;;;-1:-1:-1::0;;;46701:54:0::1;;;;;;;:::i;:::-;46766:14;46783:13;:11;:13::i;:::-;46766:30;;38782:4;46815:6;:21;46807:51;;;;-1:-1:-1::0;;;46807:51:0::1;;;;;;;:::i;:::-;38782:4;46877:15;46886:6:::0;46877;:15:::1;:::i;:::-;:31;;46869:61;;;;-1:-1:-1::0;;;46869:61:0::1;;;;;;;:::i;:::-;38840:3;46949:18;;:41;46941:79;;;::::0;-1:-1:-1;;;46941:79:0;;16574:2:1;46941:79:0::1;::::0;::::1;16556:21:1::0;16613:2;16593:18;;;16586:30;-1:-1:-1;;;16632:18:1;;;16625:55;16697:18;;46941:79:0::1;16372:349:1::0;46941:79:0::1;38840:3;47060:6;47039:18;;:27;;;;:::i;:::-;:51;;47031:89;;;::::0;-1:-1:-1;;;47031:89:0;;16928:2:1;47031:89:0::1;::::0;::::1;16910:21:1::0;16967:2;16947:18;;;16940:30;-1:-1:-1;;;16986:18:1;;;16979:55;17051:18;;47031:89:0::1;16726:349:1::0;47031:89:0::1;47136:9;47131:149;47155:6;47151:1;:10;47131:149;;;47205:1;47183:18;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;47221:47:0::1;::::0;-1:-1:-1;47231:2:0;47266:1;47235:28:::1;47257:6:::0;38735:1:::1;47235:28;:::i;47221:47::-;47163:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47131:149;;41279:104:::0;41334:7;41361:14;41369:6;38970:10;41361:14;:::i;40974:150::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41071:37:0;;;::::1;;::::0;;;:20:::1;:37;::::0;;;;:45;;-1:-1:-1;;41071:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40974:150::o;37760:201::-;36924:6;;-1:-1:-1;;;;;36924:6:0;21847:10;37071:23;37063:68;;;;-1:-1:-1;;;37063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37849:22:0;::::1;37841:73;;;::::0;-1:-1:-1;;;37841:73:0;;19045:2:1;37841:73:0::1;::::0;::::1;19027:21:1::0;19084:2;19064:18;;;19057:30;19123:34;19103:18;;;19096:62;-1:-1:-1;;;19174:18:1;;;19167:36;19220:19;;37841:73:0::1;18843:402:1::0;37841:73:0::1;37925:28;37944:8;37925:18;:28::i;42388:1253::-:0;42495:21;;;;42487:56;;;;-1:-1:-1;;;42487:56:0;;19452:2:1;42487:56:0;;;19434:21:1;19491:2;19471:18;;;19464:30;-1:-1:-1;;;19510:18:1;;;19503:52;19572:18;;42487:56:0;19250:346:1;42487:56:0;42587:28;;-1:-1:-1;;42604:10:0;19750:2:1;19746:15;19742:53;42587:28:0;;;19730:66:1;42556:18:0;;19812:12:1;;42587:28:0;;;;;;;;;;;;42577:39;;;;;;42556:60;;42635:55;42654:11;;42635:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42667:10:0;;;-1:-1:-1;42679:10:0;;-1:-1:-1;42635:18:0;:55::i;:::-;42627:105;;;;-1:-1:-1;;;42627:105:0;;20037:2:1;42627:105:0;;;20019:21:1;20076:2;20056:18;;;20049:30;20115:34;20095:18;;;20088:62;-1:-1:-1;;;20166:18:1;;;20159:35;20211:19;;42627:105:0;19835:401:1;42627:105:0;42762:1;42753:6;:10;42745:54;;;;-1:-1:-1;;;42745:54:0;;;;;;;:::i;:::-;39035:1;42818:6;:31;;42810:70;;;;-1:-1:-1;;;42810:70:0;;20443:2:1;42810:70:0;;;20425:21:1;20482:2;20462:18;;;20455:30;20521:28;20501:18;;;20494:56;20567:18;;42810:70:0;20241:350:1;42810:70:0;42916:10;42899:28;;;;:16;:28;;;;;;39035:1;;42899:37;;42930:6;;42899:37;:::i;:::-;:62;;42891:96;;;;-1:-1:-1;;;42891:96:0;;20798:2:1;42891:96:0;;;20780:21:1;20837:2;20817:18;;;20810:30;-1:-1:-1;;;20856:18:1;;;20849:51;20917:18;;42891:96:0;20596:345:1;42891:96:0;42998:14;43015:13;:11;:13::i;:::-;42998:30;;38782:4;43047:6;:21;43039:51;;;;-1:-1:-1;;;43039:51:0;;;;;;;:::i;:::-;38782:4;43109:15;43118:6;43109;:15;:::i;:::-;:31;;43101:61;;;;-1:-1:-1;;;43101:61:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;43181:17;;:39;43173:76;;;;-1:-1:-1;;;43173:76:0;;;;;;;:::i;:::-;38896:35;38840:3;38782:4;38896:35;:::i;:::-;43288:6;43268:17;;:26;;;;:::i;:::-;:49;;43260:86;;;;-1:-1:-1;;;43260:86:0;;;;;;;:::i;:::-;43378:16;43387:6;43378:8;:16::i;:::-;43365:9;:29;;43357:62;;;;-1:-1:-1;;;43357:62:0;;;;;;;:::i;:::-;43435:9;43430:204;43454:6;43450:1;:10;43430:204;;;43503:1;43482:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;43536:10:0;43519:28;;;;:16;:28;;;;;:33;;43551:1;;43519:28;:33;;43551:1;;43519:33;:::i;:::-;;;;-1:-1:-1;43567:55:0;;-1:-1:-1;43577:10:0;43620:1;43589:28;43611:6;38735:1;43589:28;:::i;43567:55::-;43462:3;;;;:::i;:::-;;;;43430:204;;;;42476:1165;;42388:1253;;;:::o;33095:174::-;33170:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33170:29:0;-1:-1:-1;;;;;33170:29:0;;;;;;;;:24;;33224:23;33170:24;33224:14;:23::i;:::-;-1:-1:-1;;;;;33215:46:0;;;;;;;;;;;33095:174;;:::o;30097:110::-;30173:26;30183:2;30187:7;30173:26;;;;;;;;;;;;:9;:26::i;29407:348::-;29500:4;29202:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29202:16:0;29517:73;;;;-1:-1:-1;;;29517:73:0;;21148:2:1;29517:73:0;;;21130:21:1;21187:2;21167:18;;;21160:30;21226:34;21206:18;;;21199:62;-1:-1:-1;;;21277:18:1;;;21270:42;21329:19;;29517:73:0;20946:408:1;29517:73:0;29601:13;29617:23;29632:7;29617:14;:23::i;:::-;29601:39;;29670:5;-1:-1:-1;;;;;29659:16:0;:7;-1:-1:-1;;;;;29659:16:0;;:51;;;;29703:7;-1:-1:-1;;;;;29679:31:0;:20;29691:7;29679:11;:20::i;:::-;-1:-1:-1;;;;;29679:31:0;;29659:51;:87;;;-1:-1:-1;;;;;;26499:25:0;;;26475:4;26499:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29714:32;29651:96;29407:348;-1:-1:-1;;;;29407:348:0:o;32399:578::-;32558:4;-1:-1:-1;;;;;32531:31:0;:23;32546:7;32531:14;:23::i;:::-;-1:-1:-1;;;;;32531:31:0;;32523:85;;;;-1:-1:-1;;;32523:85:0;;21561:2:1;32523:85:0;;;21543:21:1;21600:2;21580:18;;;21573:30;21639:34;21619:18;;;21612:62;-1:-1:-1;;;21690:18:1;;;21683:39;21739:19;;32523:85:0;21359:405:1;32523:85:0;-1:-1:-1;;;;;32627:16:0;;32619:65;;;;-1:-1:-1;;;32619:65:0;;21971:2:1;32619:65:0;;;21953:21:1;22010:2;21990:18;;;21983:30;22049:34;22029:18;;;22022:62;-1:-1:-1;;;22100:18:1;;;22093:34;22144:19;;32619:65:0;21769:400:1;32619:65:0;32801:29;32818:1;32822:7;32801:8;:29::i;:::-;-1:-1:-1;;;;;32843:15:0;;;;;;:9;:15;;;;;:20;;32862:1;;32843:15;:20;;32862:1;;32843:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32874:13:0;;;;;;:9;:13;;;;;:18;;32891:1;;32874:13;:18;;32891:1;;32874:18;:::i;:::-;;;;-1:-1:-1;;32903:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32903:21:0;-1:-1:-1;;;;;32903:21:0;;;;;;;;;32942:27;;32903:16;;32942:27;;;;;;;32399:578;;;:::o;38121:191::-;38214:6;;;-1:-1:-1;;;;;38231:17:0;;;-1:-1:-1;;;;;;38231:17:0;;;;;;;38264:40;;38214:6;;;38231:17;38214:6;;38264:40;;38195:16;;38264:40;38184:128;38121:191;:::o;33411:315::-;33566:8;-1:-1:-1;;;;;33557:17:0;:5;-1:-1:-1;;;;;33557:17:0;;33549:55;;;;-1:-1:-1;;;33549:55:0;;22376:2:1;33549:55:0;;;22358:21:1;22415:2;22395:18;;;22388:30;22454:27;22434:18;;;22427:55;22499:18;;33549:55:0;22174:349:1;33549:55:0;-1:-1:-1;;;;;33615:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33615:46:0;;;;;;;;;;33677:41;;540::1;;;33677::0;;513:18:1;33677:41:0;;;;;;;33411:315;;;:::o;28485:::-;28642:28;28652:4;28658:2;28662:7;28642:9;:28::i;:::-;28689:48;28712:4;28718:2;28722:7;28731:5;28689:22;:48::i;:::-;28681:111;;;;-1:-1:-1;;;28681:111:0;;;;;;;:::i;40145:114::-;40205:13;40238;40231:20;;;;;:::i;2560:723::-;2616:13;2837:5;2846:1;2837:10;2833:53;;-1:-1:-1;;2864:10:0;;;;;;;;;;;;-1:-1:-1;;;2864:10:0;;;;;2560:723::o;2833:53::-;2911:5;2896:12;2952:78;2959:9;;2952:78;;2985:8;;;;:::i;:::-;;-1:-1:-1;3008:10:0;;-1:-1:-1;3016:2:0;3008:10;;:::i;:::-;;;2952:78;;;3040:19;3072:6;3062:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3062:17:0;;3040:39;;3090:154;3097:10;;3090:154;;3124:11;3134:1;3124:11;;:::i;:::-;;-1:-1:-1;3193:10:0;3201:2;3193:5;:10;:::i;:::-;3180:24;;:2;:24;:::i;:::-;3167:39;;3150:6;3157;3150:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3150:56:0;;;;;;;;-1:-1:-1;3221:11:0;3230:2;3221:11;;:::i;:::-;;;3090:154;;939:190;1064:4;1117;1088:25;1101:5;1108:4;1088:12;:25::i;:::-;:33;;939:190;-1:-1:-1;;;;939:190:0:o;30434:321::-;30564:18;30570:2;30574:7;30564:5;:18::i;:::-;30615:54;30646:1;30650:2;30654:7;30663:5;30615:22;:54::i;:::-;30593:154;;;;-1:-1:-1;;;30593:154:0;;;;;;;:::i;34291:799::-;34446:4;-1:-1:-1;;;;;34467:13:0;;5458:20;5506:8;34463:620;;34503:72;;-1:-1:-1;;;34503:72:0;;-1:-1:-1;;;;;34503:36:0;;;;;:72;;21847:10;;34554:4;;34560:7;;34569:5;;34503:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34503:72:0;;;;;;;;-1:-1:-1;;34503:72:0;;;;;;;;;;;;:::i;:::-;;;34499:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34745:6;:13;34762:1;34745:18;34741:272;;34788:60;;-1:-1:-1;;;34788:60:0;;;;;;;:::i;34741:272::-;34963:6;34957:13;34948:6;34944:2;34940:15;34933:38;34499:529;-1:-1:-1;;;;;;34626:51:0;-1:-1:-1;;;34626:51:0;;-1:-1:-1;34619:58:0;;34463:620;-1:-1:-1;35067:4:0;34291:799;;;;;;:::o;1491:701::-;1574:7;1617:4;1574:7;1632:523;1656:5;:12;1652:1;:16;1632:523;;;1690:20;1713:5;1719:1;1713:8;;;;;;;;:::i;:::-;;;;;;;1690:31;;1756:12;1740;:28;1736:408;;1893:44;;;;;;24358:19:1;;;24393:12;;;24386:28;;;24430:12;;1893:44:0;;;;;;;;;;;;1883:55;;;;;;1868:70;;1736:408;;;2083:44;;;;;;24358:19:1;;;24393:12;;;24386:28;;;24430:12;;2083:44:0;;;;;;;;;;;;2073:55;;;;;;2058:70;;1736:408;-1:-1:-1;1670:3:0;;;;:::i;:::-;;;;1632:523;;;-1:-1:-1;2172:12:0;1491:701;-1:-1:-1;;;1491:701:0:o;31091:382::-;-1:-1:-1;;;;;31171:16:0;;31163:61;;;;-1:-1:-1;;;31163:61:0;;24655:2:1;31163:61:0;;;24637:21:1;;;24674:18;;;24667:30;24733:34;24713:18;;;24706:62;24785:18;;31163:61:0;24453:356:1;31163:61:0;29178:4;29202:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29202:16:0;:30;31235:58;;;;-1:-1:-1;;;31235:58:0;;25016:2:1;31235:58:0;;;24998:21:1;25055:2;25035:18;;;25028:30;25094;25074:18;;;25067:58;25142:18;;31235:58:0;24814:352:1;31235:58:0;-1:-1:-1;;;;;31364:13:0;;;;;;:9;:13;;;;;:18;;31381:1;;31364:13;:18;;31381:1;;31364:18;:::i;:::-;;;;-1:-1:-1;;31393:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31393:21:0;-1:-1:-1;;;;;31393:21:0;;;;;;;;31432:33;;31393:16;;;31432:33;;31393:16;;31432:33;31091:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:186::-;2414:6;2467:2;2455:9;2446:7;2442:23;2438:32;2435:52;;;2483:1;2480;2473:12;2435:52;2506:29;2525:9;2506:29;:::i;2546:328::-;2623:6;2631;2639;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;2731:29;2750:9;2731:29;:::i;:::-;2721:39;;2779:38;2813:2;2802:9;2798:18;2779:38;:::i;:::-;2769:48;;2864:2;2853:9;2849:18;2836:32;2826:42;;2546:328;;;;;:::o;3061:160::-;3126:20;;3182:13;;3175:21;3165:32;;3155:60;;3211:1;3208;3201:12;3226:180;3282:6;3335:2;3323:9;3314:7;3310:23;3306:32;3303:52;;;3351:1;3348;3341:12;3303:52;3374:26;3390:9;3374:26;:::i;3411:127::-;3472:10;3467:3;3463:20;3460:1;3453:31;3503:4;3500:1;3493:15;3527:4;3524:1;3517:15;3543:632;3608:5;3638:18;3679:2;3671:6;3668:14;3665:40;;;3685:18;;:::i;:::-;3760:2;3754:9;3728:2;3814:15;;-1:-1:-1;;3810:24:1;;;3836:2;3806:33;3802:42;3790:55;;;3860:18;;;3880:22;;;3857:46;3854:72;;;3906:18;;:::i;:::-;3946:10;3942:2;3935:22;3975:6;3966:15;;4005:6;3997;3990:22;4045:3;4036:6;4031:3;4027:16;4024:25;4021:45;;;4062:1;4059;4052:12;4021:45;4112:6;4107:3;4100:4;4092:6;4088:17;4075:44;4167:1;4160:4;4151:6;4143;4139:19;4135:30;4128:41;;;;3543:632;;;;;:::o;4180:451::-;4249:6;4302:2;4290:9;4281:7;4277:23;4273:32;4270:52;;;4318:1;4315;4308:12;4270:52;4358:9;4345:23;4391:18;4383:6;4380:30;4377:50;;;4423:1;4420;4413:12;4377:50;4446:22;;4499:4;4491:13;;4487:27;-1:-1:-1;4477:55:1;;4528:1;4525;4518:12;4477:55;4551:74;4617:7;4612:2;4599:16;4594:2;4590;4586:11;4551:74;:::i;4636:254::-;4701:6;4709;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;4801:29;4820:9;4801:29;:::i;:::-;4791:39;;4849:35;4880:2;4869:9;4865:18;4849:35;:::i;:::-;4839:45;;4636:254;;;;;:::o;4895:667::-;4990:6;4998;5006;5014;5067:3;5055:9;5046:7;5042:23;5038:33;5035:53;;;5084:1;5081;5074:12;5035:53;5107:29;5126:9;5107:29;:::i;:::-;5097:39;;5155:38;5189:2;5178:9;5174:18;5155:38;:::i;:::-;5145:48;;5240:2;5229:9;5225:18;5212:32;5202:42;;5295:2;5284:9;5280:18;5267:32;5322:18;5314:6;5311:30;5308:50;;;5354:1;5351;5344:12;5308:50;5377:22;;5430:4;5422:13;;5418:27;-1:-1:-1;5408:55:1;;5459:1;5456;5449:12;5408:55;5482:74;5548:7;5543:2;5530:16;5525:2;5521;5517:11;5482:74;:::i;:::-;5472:84;;;4895:667;;;;;;;:::o;5567:260::-;5635:6;5643;5696:2;5684:9;5675:7;5671:23;5667:32;5664:52;;;5712:1;5709;5702:12;5664:52;5735:29;5754:9;5735:29;:::i;:::-;5725:39;;5783:38;5817:2;5806:9;5802:18;5783:38;:::i;5832:683::-;5927:6;5935;5943;5996:2;5984:9;5975:7;5971:23;5967:32;5964:52;;;6012:1;6009;6002:12;5964:52;6048:9;6035:23;6025:33;;6109:2;6098:9;6094:18;6081:32;6132:18;6173:2;6165:6;6162:14;6159:34;;;6189:1;6186;6179:12;6159:34;6227:6;6216:9;6212:22;6202:32;;6272:7;6265:4;6261:2;6257:13;6253:27;6243:55;;6294:1;6291;6284:12;6243:55;6334:2;6321:16;6360:2;6352:6;6349:14;6346:34;;;6376:1;6373;6366:12;6346:34;6429:7;6424:2;6414:6;6411:1;6407:14;6403:2;6399:23;6395:32;6392:45;6389:65;;;6450:1;6447;6440:12;6389:65;6481:2;6477;6473:11;6463:21;;6503:6;6493:16;;;;;5832:683;;;;;:::o;6520:380::-;6599:1;6595:12;;;;6642;;;6663:61;;6717:4;6709:6;6705:17;6695:27;;6663:61;6770:2;6762:6;6759:14;6739:18;6736:38;6733:161;;6816:10;6811:3;6807:20;6804:1;6797:31;6851:4;6848:1;6841:15;6879:4;6876:1;6869:15;6733:161;;6520:380;;;:::o;8145:127::-;8206:10;8201:3;8197:20;8194:1;8187:31;8237:4;8234:1;8227:15;8261:4;8258:1;8251:15;8277:128;8317:3;8348:1;8344:6;8341:1;8338:13;8335:39;;;8354:18;;:::i;:::-;-1:-1:-1;8390:9:1;;8277:128::o;9116:184::-;9186:6;9239:2;9227:9;9218:7;9214:23;9210:32;9207:52;;;9255:1;9252;9245:12;9207:52;-1:-1:-1;9278:16:1;;9116:184;-1:-1:-1;9116:184:1:o;9657:355::-;9859:2;9841:21;;;9898:2;9878:18;;;9871:30;9937:33;9932:2;9917:18;;9910:61;10003:2;9988:18;;9657:355::o;10726:341::-;10928:2;10910:21;;;10967:2;10947:18;;;10940:30;-1:-1:-1;;;11001:2:1;10986:18;;10979:47;11058:2;11043:18;;10726:341::o;11072:::-;11274:2;11256:21;;;11313:2;11293:18;;;11286:30;-1:-1:-1;;;11347:2:1;11332:18;;11325:47;11404:2;11389:18;;11072:341::o;11418:125::-;11458:4;11486:1;11483;11480:8;11477:34;;;11491:18;;:::i;:::-;-1:-1:-1;11528:9:1;;11418:125::o;11548:348::-;11750:2;11732:21;;;11789:2;11769:18;;;11762:30;11828:26;11823:2;11808:18;;11801:54;11887:2;11872:18;;11548:348::o;11901:::-;12103:2;12085:21;;;12142:2;12122:18;;;12115:30;12181:26;12176:2;12161:18;;12154:54;12240:2;12225:18;;11901:348::o;12254:344::-;12456:2;12438:21;;;12495:2;12475:18;;;12468:30;-1:-1:-1;;;12529:2:1;12514:18;;12507:50;12589:2;12574:18;;12254:344::o;12603:135::-;12642:3;12663:17;;;12660:43;;12683:18;;:::i;:::-;-1:-1:-1;12730:1:1;12719:13;;12603:135::o;12743:413::-;12945:2;12927:21;;;12984:2;12964:18;;;12957:30;13023:34;13018:2;13003:18;;12996:62;-1:-1:-1;;;13089:2:1;13074:18;;13067:47;13146:3;13131:19;;12743:413::o;13161:356::-;13363:2;13345:21;;;13382:18;;;13375:30;13441:34;13436:2;13421:18;;13414:62;13508:2;13493:18;;13161:356::o;18195:470::-;18374:3;18412:6;18406:13;18428:53;18474:6;18469:3;18462:4;18454:6;18450:17;18428:53;:::i;:::-;18544:13;;18503:16;;;;18566:57;18544:13;18503:16;18600:4;18588:17;;18566:57;:::i;:::-;18639:20;;18195:470;-1:-1:-1;;;;18195:470:1:o;18670:168::-;18710:7;18776:1;18772;18768:6;18764:14;18761:1;18758:21;18753:1;18746:9;18739:17;18735:45;18732:71;;;18783:18;;:::i;:::-;-1:-1:-1;18823:9:1;;18670:168::o;22528:414::-;22730:2;22712:21;;;22769:2;22749:18;;;22742:30;22808:34;22803:2;22788:18;;22781:62;-1:-1:-1;;;22874:2:1;22859:18;;22852:48;22932:3;22917:19;;22528:414::o;22947:127::-;23008:10;23003:3;22999:20;22996:1;22989:31;23039:4;23036:1;23029:15;23063:4;23060:1;23053:15;23079:120;23119:1;23145;23135:35;;23150:18;;:::i;:::-;-1:-1:-1;23184:9:1;;23079:120::o;23204:112::-;23236:1;23262;23252:35;;23267:18;;:::i;:::-;-1:-1:-1;23301:9:1;;23204:112::o;23321:127::-;23382:10;23377:3;23373:20;23370:1;23363:31;23413:4;23410:1;23403:15;23437:4;23434:1;23427:15;23453:489;-1:-1:-1;;;;;23722:15:1;;;23704:34;;23774:15;;23769:2;23754:18;;23747:43;23821:2;23806:18;;23799:34;;;23869:3;23864:2;23849:18;;23842:31;;;23647:4;;23890:46;;23916:19;;23908:6;23890:46;:::i;:::-;23882:54;23453:489;-1:-1:-1;;;;;;23453:489:1:o;23947:249::-;24016:6;24069:2;24057:9;24048:7;24044:23;24040:32;24037:52;;;24085:1;24082;24075:12;24037:52;24117:9;24111:16;24136:30;24160:5;24136:30;:::i

Swarm Source

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