ETH Price: $2,631.28 (+1.78%)

Token

Chubby Seals (ARF)
 

Overview

Max Total Supply

444 ARF

Holders

387

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ARF
0x55151b934f51FE58a18862e11B069d3e1695f332
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:
RealChubbySeals

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


/*

 
                                                                                                        
                                                                                                        
   ____   ___               ___      ___                          ____                     ___          
  6MMMMb/ `MM                MM       MM                         6MMMMb\                   `MM          
 8P    YM  MM                MM       MM                        6M'    `                    MM          
6M      Y  MM  __  ___   ___ MM____   MM____  ____    ___       MM         ____      ___    MM   ____   
MM         MM 6MMb `MM    MM MMMMMMb  MMMMMMb `MM(    )M'       YM.       6MMMMb   6MMMMb   MM  6MMMMb\ 
MM         MMM9 `Mb MM    MM MM'  `Mb MM'  `Mb `Mb    d'         YMMMMb  6M'  `Mb 8M'  `Mb  MM MM'    ` 
MM         MM'   MM MM    MM MM    MM MM    MM  YM.  ,P              `Mb MM    MM     ,oMM  MM YM.      
MM         MM    MM MM    MM MM    MM MM    MM   MM  M                MM MMMMMMMM ,6MM9'MM  MM  YMMMMb  
YM      6  MM    MM MM    MM MM    MM MM    MM   `Mbd'                MM MM       MM'   MM  MM      `Mb 
 8b    d9  MM    MM YM.   MM MM.  ,M9 MM.  ,M9    YMP           L    ,M9 YM    d9 MM.  ,MM  MM L    ,MM 
  YMMMM9  _MM_  _MM_ YMMM9MM_MYMMMM9 _MYMMMM9      M            MYMMMM9   YMMMM9  `YMMM9'Yb_MM_MYMMMM9  
                                                  d'                                                    
                                              (8),P                                                     
                                               YMM                                                      

  

                                                                                          
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * 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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

    /**
     * dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/ERC721A.sol


pragma solidity ^0.8.4;


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

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

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

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * 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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

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

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

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

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

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

    /**
     * dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

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

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

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

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

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

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

    /**
     * dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

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

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

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

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

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

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

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

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

    /**
     * dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

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

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



pragma solidity >=0.8.9 <0.9.0;


contract RealChubbySeals is ERC721A, Ownable, ReentrancyGuard {

  using Strings for uint256;

  string public uriPrefix = '';
  string public uriSuffix = '.json';
  
  uint256 public cost;
  uint256 public freeMintSupply;
  uint256 public maxSupply;
  uint256 public maxMintAmountPerWallet;

  bool public paused = true;

  mapping(address => uint256) private _walletMints;
  mapping(address => uint256) private _freeWalletMints;

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    uint256 _cost,
    uint256 _freeMintSupply,
    uint256 _maxSupply,
    uint256 _maxMintAmountPerWallet,
    string memory _uriPrefix
  ) ERC721A(_tokenName, _tokenSymbol) {
    setCost(_cost);
    setFreeMint(_freeMintSupply);
    maxSupply = _maxSupply;
    setMaxMintAmountPerWallet(_maxMintAmountPerWallet);
    setUriPrefix(_uriPrefix);
    _safeMint(_msgSender(), 4);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _walletMints[_msgSender()] + _mintAmount < maxMintAmountPerWallet + 1, 'Invalid mint amount!');
    require(totalSupply() + _mintAmount <= maxSupply, 'Max supply exceeded!');
    require(totalSupply() >= freeMintSupply, 'Free mint not finished yet!');
    _;
  }

  modifier freeMintCompliance() {
    require(_freeWalletMints[_msgSender()] + 1 <= 1, 'You have already minted');
    require(totalSupply() + 1 <= freeMintSupply, 'Max free mint supply exceeded!');
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    require(msg.value >= cost * _mintAmount, 'Insufficient funds!');
    _;
  }

  function freeMint() public freeMintCompliance {
    require(!paused, 'The contract is paused!');

    _freeWalletMints[_msgSender()] += 1;
    _safeMint(_msgSender(), 1);
  }


  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(!paused, 'The contract is paused!');

    _walletMints[_msgSender()] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }

  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = _startTokenId();
    uint256 ownedTokenIndex = 0;
    address latestOwnerAddress;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      TokenOwnership memory ownership = _ownerships[currentTokenId];

      if (!ownership.burned && ownership.addr != address(0)) {
        latestOwnerAddress = ownership.addr;
      }

      if (latestOwnerAddress == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

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

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

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setFreeMint(uint256 _supply) public onlyOwner {
    freeMintSupply = _supply;
  }

  function setMaxMintAmountPerWallet(uint256 _maxMintAmountPerWallet) public onlyOwner {
    maxMintAmountPerWallet = _maxMintAmountPerWallet;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner nonReentrant {

    (bool os, ) = payable(owner()).call{value: address(this).balance}('');
    require(os);
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_freeMintSupply","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxMintAmountPerWallet","type":"uint256"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerWallet","type":"uint256"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a90805190602001906200002b92919062000b0a565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200007992919062000b0a565b506001601060006101000a81548160ff021916908315150217905550348015620000a257600080fd5b5060405162005227380380620052278339818101604052810190620000c8919062000d92565b86868160029080519060200190620000e292919062000b0a565b508060039080519060200190620000fb92919062000b0a565b506200010c620001b660201b60201c565b60008190555050506200013462000128620001bf60201b60201c565b620001c760201b60201c565b60016009819055506200014d856200028d60201b60201c565b6200015e846200032660201b60201c565b82600e819055506200017682620003bf60201b60201c565b62000187816200045860201b60201c565b620001a96200019b620001bf60201b60201c565b60046200050360201b60201c565b5050505050505062001120565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200029d620001bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c36200052960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003139062000f03565b60405180910390fd5b80600c8190555050565b62000336620001bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200035c6200052960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ac9062000f03565b60405180910390fd5b80600d8190555050565b620003cf620001bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003f56200052960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200044e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004459062000f03565b60405180910390fd5b80600f8190555050565b62000468620001bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200048e6200052960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004de9062000f03565b60405180910390fd5b80600a9080519060200190620004ff92919062000b0a565b5050565b620005258282604051806020016040528060008152506200055360201b60201c565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200056883838360016200056d60201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620005db576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141562000617576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200062c60008683876200096960201b60201c565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015620008045750620008038773ffffffffffffffffffffffffffffffffffffffff166200096f60201b62001d841760201c565b5b15620008d7575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200088260008884806001019550886200099260201b60201c565b620008b9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156200080b578260005414620008d157600080fd5b62000944565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415620008d8575b81600081905550505062000962600086838762000b0460201b60201c565b5050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009c0620001bf60201b60201c565b8786866040518563ffffffff1660e01b8152600401620009e4949392919062000fd8565b602060405180830381600087803b158015620009ff57600080fd5b505af192505050801562000a3357506040513d601f19601f8201168201806040525081019062000a30919062001089565b60015b62000ab1573d806000811462000a66576040519150601f19603f3d011682016040523d82523d6000602084013e62000a6b565b606091505b5060008151141562000aa9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b82805462000b1890620010ea565b90600052602060002090601f01602090048101928262000b3c576000855562000b88565b82601f1062000b5757805160ff191683800117855562000b88565b8280016001018555821562000b88579182015b8281111562000b8757825182559160200191906001019062000b6a565b5b50905062000b97919062000b9b565b5090565b5b8082111562000bb657600081600090555060010162000b9c565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000c238262000bd8565b810181811067ffffffffffffffff8211171562000c455762000c4462000be9565b5b80604052505050565b600062000c5a62000bba565b905062000c68828262000c18565b919050565b600067ffffffffffffffff82111562000c8b5762000c8a62000be9565b5b62000c968262000bd8565b9050602081019050919050565b60005b8381101562000cc357808201518184015260208101905062000ca6565b8381111562000cd3576000848401525b50505050565b600062000cf062000cea8462000c6d565b62000c4e565b90508281526020810184848401111562000d0f5762000d0e62000bd3565b5b62000d1c84828562000ca3565b509392505050565b600082601f83011262000d3c5762000d3b62000bce565b5b815162000d4e84826020860162000cd9565b91505092915050565b6000819050919050565b62000d6c8162000d57565b811462000d7857600080fd5b50565b60008151905062000d8c8162000d61565b92915050565b600080600080600080600060e0888a03121562000db45762000db362000bc4565b5b600088015167ffffffffffffffff81111562000dd55762000dd462000bc9565b5b62000de38a828b0162000d24565b975050602088015167ffffffffffffffff81111562000e075762000e0662000bc9565b5b62000e158a828b0162000d24565b965050604062000e288a828b0162000d7b565b955050606062000e3b8a828b0162000d7b565b945050608062000e4e8a828b0162000d7b565b93505060a062000e618a828b0162000d7b565b92505060c088015167ffffffffffffffff81111562000e855762000e8462000bc9565b5b62000e938a828b0162000d24565b91505092959891949750929550565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eeb60208362000ea2565b915062000ef88262000eb3565b602082019050919050565b6000602082019050818103600083015262000f1e8162000edc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f528262000f25565b9050919050565b62000f648162000f45565b82525050565b62000f758162000d57565b82525050565b600081519050919050565b600082825260208201905092915050565b600062000fa48262000f7b565b62000fb0818562000f86565b935062000fc281856020860162000ca3565b62000fcd8162000bd8565b840191505092915050565b600060808201905062000fef600083018762000f59565b62000ffe602083018662000f59565b6200100d604083018562000f6a565b818103606083015262001021818462000f97565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001063816200102c565b81146200106f57600080fd5b50565b600081519050620010838162001058565b92915050565b600060208284031215620010a257620010a162000bc4565b5b6000620010b28482850162001072565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110357607f821691505b602082108114156200111a5762001119620010bb565b5b50919050565b6140f780620011306000396000f3fe6080604052600436106101f95760003560e01c80636352211e1161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd146106d6578063d5abeb0114610713578063e150007e1461073e578063e985e9c514610769578063f2fde38b146107a6576101f9565b8063a0712d681461063d578063a22cb46514610659578063b88d4fde14610682578063bc951b91146106ab576101f9565b8063766b7d09116100dc578063766b7d09146105955780637ec4a659146105be5780638da5cb5b146105e757806395d89b4114610612576101f9565b80636352211e146104db57806370a082311461051857806370e0936914610555578063715018a61461057e576101f9565b806323b872dd1161019057806344a0d68a1161015f57806344a0d68a1461041a5780635503a0e8146104435780635b70ea9f1461046e5780635c975abb1461048557806362b99ad4146104b0576101f9565b806323b872dd146103745780633ccfd60b1461039d57806342842e0e146103b4578063438b6300146103dd576101f9565b806313faede6116101cc57806313faede6146102cc57806316ba10e0146102f757806316c38b3c1461032057806318160ddd14610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612fdc565b6107cf565b6040516102329190613024565b60405180910390f35b34801561024757600080fd5b506102506108b1565b60405161025d91906130d8565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613130565b610943565b60405161029a919061319e565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906131e5565b6109bf565b005b3480156102d857600080fd5b506102e1610aca565b6040516102ee9190613234565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613384565b610ad0565b005b34801561032c57600080fd5b50610347600480360381019061034291906133f9565b610b66565b005b34801561035557600080fd5b5061035e610bff565b60405161036b9190613234565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613426565b610c16565b005b3480156103a957600080fd5b506103b2610c26565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613426565b610d78565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613479565b610d98565b6040516104119190613564565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190613130565b610fb3565b005b34801561044f57600080fd5b50610458611039565b60405161046591906130d8565b60405180910390f35b34801561047a57600080fd5b506104836110c7565b005b34801561049157600080fd5b5061049a611276565b6040516104a79190613024565b60405180910390f35b3480156104bc57600080fd5b506104c5611289565b6040516104d291906130d8565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613130565b611317565b60405161050f919061319e565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613479565b61132d565b60405161054c9190613234565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613130565b6113fd565b005b34801561058a57600080fd5b50610593611483565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613130565b61150b565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613384565b611591565b005b3480156105f357600080fd5b506105fc611627565b604051610609919061319e565b60405180910390f35b34801561061e57600080fd5b50610627611651565b60405161063491906130d8565b60405180910390f35b61065760048036038101906106529190613130565b6116e3565b005b34801561066557600080fd5b50610680600480360381019061067b9190613586565b611948565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613667565b611ac0565b005b3480156106b757600080fd5b506106c0611b3c565b6040516106cd9190613234565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613130565b611b42565b60405161070a91906130d8565b60405180910390f35b34801561071f57600080fd5b50610728611bec565b6040516107359190613234565b60405180910390f35b34801561074a57600080fd5b50610753611bf2565b6040516107609190613234565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906136ea565b611bf8565b60405161079d9190613024565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190613479565b611c8c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108aa57506108a982611da7565b5b9050919050565b6060600280546108c090613759565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90613759565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b600061094e82611e11565b610984576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ca82611317565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a32576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a51611e5f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a835750610a8181610a7c611e5f565b611bf8565b155b15610aba576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac5838383611e67565b505050565b600c5481565b610ad8611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610af6611627565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b43906137d7565b60405180910390fd5b80600b9080519060200190610b62929190612e8a565b5050565b610b6e611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610b8c611627565b73ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906137d7565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610c09611f19565b6001546000540303905090565b610c21838383611f22565b505050565b610c2e611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610c4c611627565b73ffffffffffffffffffffffffffffffffffffffff1614610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c99906137d7565b60405180910390fd5b60026009541415610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613843565b60405180910390fd5b60026009819055506000610cfa611627565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d1d90613894565b60006040518083038185875af1925050503d8060008114610d5a576040519150601f19603f3d011682016040523d82523d6000602084013e610d5f565b606091505b5050905080610d6d57600080fd5b506001600981905550565b610d9383838360405180602001604052806000815250611ac0565b505050565b60606000610da58361132d565b905060008167ffffffffffffffff811115610dc357610dc2613259565b5b604051908082528060200260200182016040528015610df15781602001602082028036833780820191505090505b5090506000610dfe611f19565b90506000805b8482108015610e155750600e548311155b15610fa6576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151158015610f225750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b15610f2f57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f925783858481518110610f7757610f766138a9565b5b6020026020010181815250508280610f8e90613907565b9350505b8380610f9d90613907565b94505050610e04565b8395505050505050919050565b610fbb611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610fd9611627565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906137d7565b60405180910390fd5b80600c8190555050565b600b805461104690613759565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613759565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081565b600180601260006110d6611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111b9190613950565b111561115c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611153906139f2565b60405180910390fd5b600d546001611169610bff565b6111739190613950565b11156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613a5e565b60405180910390fd5b601060009054906101000a900460ff1615611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90613aca565b60405180910390fd5b600160126000611212611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461125b9190613950565b9250508190555061127461126d611e5f565b60016123d8565b565b601060009054906101000a900460ff1681565b600a805461129690613759565b80601f01602080910402602001604051908101604052809291908181526020018280546112c290613759565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b505050505081565b6000611322826123f6565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611395576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611405611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611423611627565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906137d7565b60405180910390fd5b80600d8190555050565b61148b611e5f565b73ffffffffffffffffffffffffffffffffffffffff166114a9611627565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906137d7565b60405180910390fd5b6115096000612685565b565b611513611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611531611627565b73ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906137d7565b60405180910390fd5b80600f8190555050565b611599611e5f565b73ffffffffffffffffffffffffffffffffffffffff166115b7611627565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611604906137d7565b60405180910390fd5b80600a9080519060200190611623929190612e8a565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461166090613759565b80601f016020809104026020016040519081016040528092919081815260200182805461168c90613759565b80156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b5050505050905090565b8060008111801561175257506001600f546116fe9190613950565b816011600061170b611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117509190613950565b105b611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890613b36565b60405180910390fd5b600e548161179d610bff565b6117a79190613950565b11156117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613ba2565b60405180910390fd5b600d546117f3610bff565b1015611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90613c0e565b60405180910390fd5b8180600c546118439190613c2e565b341015611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613cd4565b60405180910390fd5b601060009054906101000a900460ff16156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613aca565b60405180910390fd5b82601160006118e2611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192b9190613950565b9250508190555061194361193d611e5f565b846123d8565b505050565b611950611e5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b5576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119c2611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a6f611e5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab49190613024565b60405180910390a35050565b611acb848484611f22565b611aea8373ffffffffffffffffffffffffffffffffffffffff16611d84565b8015611aff5750611afd8484848461274b565b155b15611b36576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f5481565b6060611b4d82611e11565b611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613d66565b60405180910390fd5b6000611b966128ab565b90506000815111611bb65760405180602001604052806000815250611be4565b80611bc08461293d565b600b604051602001611bd493929190613e56565b6040516020818303038152906040525b915050919050565b600e5481565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c94611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611cb2611627565b73ffffffffffffffffffffffffffffffffffffffff1614611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff906137d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90613ef9565b60405180910390fd5b611d8181612685565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e1c611f19565b11158015611e2b575060005482105b8015611e58575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611f2d826123f6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f98576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611fb9611e5f565b73ffffffffffffffffffffffffffffffffffffffff161480611fe85750611fe785611fe2611e5f565b611bf8565b5b8061202d5750611ff6611e5f565b73ffffffffffffffffffffffffffffffffffffffff1661201584610943565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612066576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120cd576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120da8585856001612a9e565b6120e660008487611e67565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561236657600054821461236557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123d18585856001612aa4565b5050505050565b6123f2828260405180602001604052806000815250612aaa565b5050565b6123fe612f10565b60008290508061240c611f19565b1115801561241b575060005481105b1561264e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161264c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612530578092505050612680565b5b60011561264b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612646578092505050612680565b612531565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612771611e5f565b8786866040518563ffffffff1660e01b81526004016127939493929190613f6e565b602060405180830381600087803b1580156127ad57600080fd5b505af19250505080156127de57506040513d601f19601f820116820180604052508101906127db9190613fcf565b60015b612858573d806000811461280e576040519150601f19603f3d011682016040523d82523d6000602084013e612813565b606091505b50600081511415612850576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546128ba90613759565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613759565b80156129335780601f1061290857610100808354040283529160200191612933565b820191906000526020600020905b81548152906001019060200180831161291657829003601f168201915b5050505050905090565b60606000821415612985576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a99565b600082905060005b600082146129b75780806129a090613907565b915050600a826129b0919061402b565b915061298d565b60008167ffffffffffffffff8111156129d3576129d2613259565b5b6040519080825280601f01601f191660200182016040528015612a055781602001600182028036833780820191505090505b5090505b60008514612a9257600182612a1e919061405c565b9150600a85612a2d9190614090565b6030612a399190613950565b60f81b818381518110612a4f57612a4e6138a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a8b919061402b565b9450612a09565b8093505050505b919050565b50505050565b50505050565b612ab78383836001612abc565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612b29576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612b64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b716000868387612a9e565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612d3b5750612d3a8773ffffffffffffffffffffffffffffffffffffffff16611d84565b5b15612e01575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db0600088848060010195508861274b565b612de6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612d41578260005414612dfc57600080fd5b612e6d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e02575b816000819055505050612e836000868387612aa4565b5050505050565b828054612e9690613759565b90600052602060002090601f016020900481019282612eb85760008555612eff565b82601f10612ed157805160ff1916838001178555612eff565b82800160010185558215612eff579182015b82811115612efe578251825591602001919060010190612ee3565b5b509050612f0c9190612f53565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f6c576000816000905550600101612f54565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fb981612f84565b8114612fc457600080fd5b50565b600081359050612fd681612fb0565b92915050565b600060208284031215612ff257612ff1612f7a565b5b600061300084828501612fc7565b91505092915050565b60008115159050919050565b61301e81613009565b82525050565b60006020820190506130396000830184613015565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561307957808201518184015260208101905061305e565b83811115613088576000848401525b50505050565b6000601f19601f8301169050919050565b60006130aa8261303f565b6130b4818561304a565b93506130c481856020860161305b565b6130cd8161308e565b840191505092915050565b600060208201905081810360008301526130f2818461309f565b905092915050565b6000819050919050565b61310d816130fa565b811461311857600080fd5b50565b60008135905061312a81613104565b92915050565b60006020828403121561314657613145612f7a565b5b60006131548482850161311b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131888261315d565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b6131c28161317d565b81146131cd57600080fd5b50565b6000813590506131df816131b9565b92915050565b600080604083850312156131fc576131fb612f7a565b5b600061320a858286016131d0565b925050602061321b8582860161311b565b9150509250929050565b61322e816130fa565b82525050565b60006020820190506132496000830184613225565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132918261308e565b810181811067ffffffffffffffff821117156132b0576132af613259565b5b80604052505050565b60006132c3612f70565b90506132cf8282613288565b919050565b600067ffffffffffffffff8211156132ef576132ee613259565b5b6132f88261308e565b9050602081019050919050565b82818337600083830152505050565b6000613327613322846132d4565b6132b9565b90508281526020810184848401111561334357613342613254565b5b61334e848285613305565b509392505050565b600082601f83011261336b5761336a61324f565b5b813561337b848260208601613314565b91505092915050565b60006020828403121561339a57613399612f7a565b5b600082013567ffffffffffffffff8111156133b8576133b7612f7f565b5b6133c484828501613356565b91505092915050565b6133d681613009565b81146133e157600080fd5b50565b6000813590506133f3816133cd565b92915050565b60006020828403121561340f5761340e612f7a565b5b600061341d848285016133e4565b91505092915050565b60008060006060848603121561343f5761343e612f7a565b5b600061344d868287016131d0565b935050602061345e868287016131d0565b925050604061346f8682870161311b565b9150509250925092565b60006020828403121561348f5761348e612f7a565b5b600061349d848285016131d0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134db816130fa565b82525050565b60006134ed83836134d2565b60208301905092915050565b6000602082019050919050565b6000613511826134a6565b61351b81856134b1565b9350613526836134c2565b8060005b8381101561355757815161353e88826134e1565b9750613549836134f9565b92505060018101905061352a565b5085935050505092915050565b6000602082019050818103600083015261357e8184613506565b905092915050565b6000806040838503121561359d5761359c612f7a565b5b60006135ab858286016131d0565b92505060206135bc858286016133e4565b9150509250929050565b600067ffffffffffffffff8211156135e1576135e0613259565b5b6135ea8261308e565b9050602081019050919050565b600061360a613605846135c6565b6132b9565b90508281526020810184848401111561362657613625613254565b5b613631848285613305565b509392505050565b600082601f83011261364e5761364d61324f565b5b813561365e8482602086016135f7565b91505092915050565b6000806000806080858703121561368157613680612f7a565b5b600061368f878288016131d0565b94505060206136a0878288016131d0565b93505060406136b18782880161311b565b925050606085013567ffffffffffffffff8111156136d2576136d1612f7f565b5b6136de87828801613639565b91505092959194509250565b6000806040838503121561370157613700612f7a565b5b600061370f858286016131d0565b9250506020613720858286016131d0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061377157607f821691505b602082108114156137855761378461372a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137c160208361304a565b91506137cc8261378b565b602082019050919050565b600060208201905081810360008301526137f0816137b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061382d601f8361304a565b9150613838826137f7565b602082019050919050565b6000602082019050818103600083015261385c81613820565b9050919050565b600081905092915050565b50565b600061387e600083613863565b91506138898261386e565b600082019050919050565b600061389f82613871565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613912826130fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613945576139446138d8565b5b600182019050919050565b600061395b826130fa565b9150613966836130fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561399b5761399a6138d8565b5b828201905092915050565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b60006139dc60178361304a565b91506139e7826139a6565b602082019050919050565b60006020820190508181036000830152613a0b816139cf565b9050919050565b7f4d61782066726565206d696e7420737570706c79206578636565646564210000600082015250565b6000613a48601e8361304a565b9150613a5382613a12565b602082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000613ab460178361304a565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b6000613b2060148361304a565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6000613b8c60148361304a565b9150613b9782613b56565b602082019050919050565b60006020820190508181036000830152613bbb81613b7f565b9050919050565b7f46726565206d696e74206e6f742066696e697368656420796574210000000000600082015250565b6000613bf8601b8361304a565b9150613c0382613bc2565b602082019050919050565b60006020820190508181036000830152613c2781613beb565b9050919050565b6000613c39826130fa565b9150613c44836130fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7d57613c7c6138d8565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613cbe60138361304a565b9150613cc982613c88565b602082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d50602f8361304a565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b600081905092915050565b6000613d9c8261303f565b613da68185613d86565b9350613db681856020860161305b565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613de481613759565b613dee8186613d86565b94506001821660008114613e095760018114613e1a57613e4d565b60ff19831686528186019350613e4d565b613e2385613dc2565b60005b83811015613e4557815481890152600182019150602081019050613e26565b838801955050505b50505092915050565b6000613e628286613d91565b9150613e6e8285613d91565b9150613e7a8284613dd7565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee360268361304a565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613f4082613f19565b613f4a8185613f24565b9350613f5a81856020860161305b565b613f638161308e565b840191505092915050565b6000608082019050613f83600083018761318f565b613f90602083018661318f565b613f9d6040830185613225565b8181036060830152613faf8184613f35565b905095945050505050565b600081519050613fc981612fb0565b92915050565b600060208284031215613fe557613fe4612f7a565b5b6000613ff384828501613fba565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614036826130fa565b9150614041836130fa565b92508261405157614050613ffc565b5b828204905092915050565b6000614067826130fa565b9150614072836130fa565b925082821015614085576140846138d8565b5b828203905092915050565b600061409b826130fa565b91506140a6836130fa565b9250826140b6576140b5613ffc565b5b82820690509291505056fea264697066735822122097c0c5db2831a25660f9774991c5d4c41c1d6f879bbf40ec76fd94990a25058a64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000ffcb9e57d4000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000c436875626279205365616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341524600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569667961786d7766336162656e67726c696a70687365376774327a736f6b6670697071377137756a32747377716c7076627a6f63692f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80636352211e1161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd146106d6578063d5abeb0114610713578063e150007e1461073e578063e985e9c514610769578063f2fde38b146107a6576101f9565b8063a0712d681461063d578063a22cb46514610659578063b88d4fde14610682578063bc951b91146106ab576101f9565b8063766b7d09116100dc578063766b7d09146105955780637ec4a659146105be5780638da5cb5b146105e757806395d89b4114610612576101f9565b80636352211e146104db57806370a082311461051857806370e0936914610555578063715018a61461057e576101f9565b806323b872dd1161019057806344a0d68a1161015f57806344a0d68a1461041a5780635503a0e8146104435780635b70ea9f1461046e5780635c975abb1461048557806362b99ad4146104b0576101f9565b806323b872dd146103745780633ccfd60b1461039d57806342842e0e146103b4578063438b6300146103dd576101f9565b806313faede6116101cc57806313faede6146102cc57806316ba10e0146102f757806316c38b3c1461032057806318160ddd14610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612fdc565b6107cf565b6040516102329190613024565b60405180910390f35b34801561024757600080fd5b506102506108b1565b60405161025d91906130d8565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613130565b610943565b60405161029a919061319e565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906131e5565b6109bf565b005b3480156102d857600080fd5b506102e1610aca565b6040516102ee9190613234565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613384565b610ad0565b005b34801561032c57600080fd5b50610347600480360381019061034291906133f9565b610b66565b005b34801561035557600080fd5b5061035e610bff565b60405161036b9190613234565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613426565b610c16565b005b3480156103a957600080fd5b506103b2610c26565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613426565b610d78565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613479565b610d98565b6040516104119190613564565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190613130565b610fb3565b005b34801561044f57600080fd5b50610458611039565b60405161046591906130d8565b60405180910390f35b34801561047a57600080fd5b506104836110c7565b005b34801561049157600080fd5b5061049a611276565b6040516104a79190613024565b60405180910390f35b3480156104bc57600080fd5b506104c5611289565b6040516104d291906130d8565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613130565b611317565b60405161050f919061319e565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613479565b61132d565b60405161054c9190613234565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613130565b6113fd565b005b34801561058a57600080fd5b50610593611483565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613130565b61150b565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613384565b611591565b005b3480156105f357600080fd5b506105fc611627565b604051610609919061319e565b60405180910390f35b34801561061e57600080fd5b50610627611651565b60405161063491906130d8565b60405180910390f35b61065760048036038101906106529190613130565b6116e3565b005b34801561066557600080fd5b50610680600480360381019061067b9190613586565b611948565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613667565b611ac0565b005b3480156106b757600080fd5b506106c0611b3c565b6040516106cd9190613234565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613130565b611b42565b60405161070a91906130d8565b60405180910390f35b34801561071f57600080fd5b50610728611bec565b6040516107359190613234565b60405180910390f35b34801561074a57600080fd5b50610753611bf2565b6040516107609190613234565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906136ea565b611bf8565b60405161079d9190613024565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190613479565b611c8c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108aa57506108a982611da7565b5b9050919050565b6060600280546108c090613759565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90613759565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b600061094e82611e11565b610984576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ca82611317565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a32576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a51611e5f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a835750610a8181610a7c611e5f565b611bf8565b155b15610aba576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac5838383611e67565b505050565b600c5481565b610ad8611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610af6611627565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b43906137d7565b60405180910390fd5b80600b9080519060200190610b62929190612e8a565b5050565b610b6e611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610b8c611627565b73ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906137d7565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610c09611f19565b6001546000540303905090565b610c21838383611f22565b505050565b610c2e611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610c4c611627565b73ffffffffffffffffffffffffffffffffffffffff1614610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c99906137d7565b60405180910390fd5b60026009541415610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613843565b60405180910390fd5b60026009819055506000610cfa611627565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d1d90613894565b60006040518083038185875af1925050503d8060008114610d5a576040519150601f19603f3d011682016040523d82523d6000602084013e610d5f565b606091505b5050905080610d6d57600080fd5b506001600981905550565b610d9383838360405180602001604052806000815250611ac0565b505050565b60606000610da58361132d565b905060008167ffffffffffffffff811115610dc357610dc2613259565b5b604051908082528060200260200182016040528015610df15781602001602082028036833780820191505090505b5090506000610dfe611f19565b90506000805b8482108015610e155750600e548311155b15610fa6576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151158015610f225750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b15610f2f57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f925783858481518110610f7757610f766138a9565b5b6020026020010181815250508280610f8e90613907565b9350505b8380610f9d90613907565b94505050610e04565b8395505050505050919050565b610fbb611e5f565b73ffffffffffffffffffffffffffffffffffffffff16610fd9611627565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906137d7565b60405180910390fd5b80600c8190555050565b600b805461104690613759565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613759565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081565b600180601260006110d6611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111b9190613950565b111561115c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611153906139f2565b60405180910390fd5b600d546001611169610bff565b6111739190613950565b11156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613a5e565b60405180910390fd5b601060009054906101000a900460ff1615611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90613aca565b60405180910390fd5b600160126000611212611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461125b9190613950565b9250508190555061127461126d611e5f565b60016123d8565b565b601060009054906101000a900460ff1681565b600a805461129690613759565b80601f01602080910402602001604051908101604052809291908181526020018280546112c290613759565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b505050505081565b6000611322826123f6565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611395576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611405611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611423611627565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906137d7565b60405180910390fd5b80600d8190555050565b61148b611e5f565b73ffffffffffffffffffffffffffffffffffffffff166114a9611627565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906137d7565b60405180910390fd5b6115096000612685565b565b611513611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611531611627565b73ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906137d7565b60405180910390fd5b80600f8190555050565b611599611e5f565b73ffffffffffffffffffffffffffffffffffffffff166115b7611627565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611604906137d7565b60405180910390fd5b80600a9080519060200190611623929190612e8a565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461166090613759565b80601f016020809104026020016040519081016040528092919081815260200182805461168c90613759565b80156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b5050505050905090565b8060008111801561175257506001600f546116fe9190613950565b816011600061170b611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117509190613950565b105b611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890613b36565b60405180910390fd5b600e548161179d610bff565b6117a79190613950565b11156117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613ba2565b60405180910390fd5b600d546117f3610bff565b1015611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90613c0e565b60405180910390fd5b8180600c546118439190613c2e565b341015611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613cd4565b60405180910390fd5b601060009054906101000a900460ff16156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613aca565b60405180910390fd5b82601160006118e2611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192b9190613950565b9250508190555061194361193d611e5f565b846123d8565b505050565b611950611e5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b5576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119c2611e5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a6f611e5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab49190613024565b60405180910390a35050565b611acb848484611f22565b611aea8373ffffffffffffffffffffffffffffffffffffffff16611d84565b8015611aff5750611afd8484848461274b565b155b15611b36576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f5481565b6060611b4d82611e11565b611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613d66565b60405180910390fd5b6000611b966128ab565b90506000815111611bb65760405180602001604052806000815250611be4565b80611bc08461293d565b600b604051602001611bd493929190613e56565b6040516020818303038152906040525b915050919050565b600e5481565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c94611e5f565b73ffffffffffffffffffffffffffffffffffffffff16611cb2611627565b73ffffffffffffffffffffffffffffffffffffffff1614611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff906137d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90613ef9565b60405180910390fd5b611d8181612685565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e1c611f19565b11158015611e2b575060005482105b8015611e58575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611f2d826123f6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f98576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611fb9611e5f565b73ffffffffffffffffffffffffffffffffffffffff161480611fe85750611fe785611fe2611e5f565b611bf8565b5b8061202d5750611ff6611e5f565b73ffffffffffffffffffffffffffffffffffffffff1661201584610943565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612066576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120cd576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120da8585856001612a9e565b6120e660008487611e67565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561236657600054821461236557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123d18585856001612aa4565b5050505050565b6123f2828260405180602001604052806000815250612aaa565b5050565b6123fe612f10565b60008290508061240c611f19565b1115801561241b575060005481105b1561264e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161264c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612530578092505050612680565b5b60011561264b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612646578092505050612680565b612531565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612771611e5f565b8786866040518563ffffffff1660e01b81526004016127939493929190613f6e565b602060405180830381600087803b1580156127ad57600080fd5b505af19250505080156127de57506040513d601f19601f820116820180604052508101906127db9190613fcf565b60015b612858573d806000811461280e576040519150601f19603f3d011682016040523d82523d6000602084013e612813565b606091505b50600081511415612850576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546128ba90613759565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613759565b80156129335780601f1061290857610100808354040283529160200191612933565b820191906000526020600020905b81548152906001019060200180831161291657829003601f168201915b5050505050905090565b60606000821415612985576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a99565b600082905060005b600082146129b75780806129a090613907565b915050600a826129b0919061402b565b915061298d565b60008167ffffffffffffffff8111156129d3576129d2613259565b5b6040519080825280601f01601f191660200182016040528015612a055781602001600182028036833780820191505090505b5090505b60008514612a9257600182612a1e919061405c565b9150600a85612a2d9190614090565b6030612a399190613950565b60f81b818381518110612a4f57612a4e6138a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a8b919061402b565b9450612a09565b8093505050505b919050565b50505050565b50505050565b612ab78383836001612abc565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612b29576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612b64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b716000868387612a9e565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612d3b5750612d3a8773ffffffffffffffffffffffffffffffffffffffff16611d84565b5b15612e01575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db0600088848060010195508861274b565b612de6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612d41578260005414612dfc57600080fd5b612e6d565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e02575b816000819055505050612e836000868387612aa4565b5050505050565b828054612e9690613759565b90600052602060002090601f016020900481019282612eb85760008555612eff565b82601f10612ed157805160ff1916838001178555612eff565b82800160010185558215612eff579182015b82811115612efe578251825591602001919060010190612ee3565b5b509050612f0c9190612f53565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f6c576000816000905550600101612f54565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fb981612f84565b8114612fc457600080fd5b50565b600081359050612fd681612fb0565b92915050565b600060208284031215612ff257612ff1612f7a565b5b600061300084828501612fc7565b91505092915050565b60008115159050919050565b61301e81613009565b82525050565b60006020820190506130396000830184613015565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561307957808201518184015260208101905061305e565b83811115613088576000848401525b50505050565b6000601f19601f8301169050919050565b60006130aa8261303f565b6130b4818561304a565b93506130c481856020860161305b565b6130cd8161308e565b840191505092915050565b600060208201905081810360008301526130f2818461309f565b905092915050565b6000819050919050565b61310d816130fa565b811461311857600080fd5b50565b60008135905061312a81613104565b92915050565b60006020828403121561314657613145612f7a565b5b60006131548482850161311b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131888261315d565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b6131c28161317d565b81146131cd57600080fd5b50565b6000813590506131df816131b9565b92915050565b600080604083850312156131fc576131fb612f7a565b5b600061320a858286016131d0565b925050602061321b8582860161311b565b9150509250929050565b61322e816130fa565b82525050565b60006020820190506132496000830184613225565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132918261308e565b810181811067ffffffffffffffff821117156132b0576132af613259565b5b80604052505050565b60006132c3612f70565b90506132cf8282613288565b919050565b600067ffffffffffffffff8211156132ef576132ee613259565b5b6132f88261308e565b9050602081019050919050565b82818337600083830152505050565b6000613327613322846132d4565b6132b9565b90508281526020810184848401111561334357613342613254565b5b61334e848285613305565b509392505050565b600082601f83011261336b5761336a61324f565b5b813561337b848260208601613314565b91505092915050565b60006020828403121561339a57613399612f7a565b5b600082013567ffffffffffffffff8111156133b8576133b7612f7f565b5b6133c484828501613356565b91505092915050565b6133d681613009565b81146133e157600080fd5b50565b6000813590506133f3816133cd565b92915050565b60006020828403121561340f5761340e612f7a565b5b600061341d848285016133e4565b91505092915050565b60008060006060848603121561343f5761343e612f7a565b5b600061344d868287016131d0565b935050602061345e868287016131d0565b925050604061346f8682870161311b565b9150509250925092565b60006020828403121561348f5761348e612f7a565b5b600061349d848285016131d0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134db816130fa565b82525050565b60006134ed83836134d2565b60208301905092915050565b6000602082019050919050565b6000613511826134a6565b61351b81856134b1565b9350613526836134c2565b8060005b8381101561355757815161353e88826134e1565b9750613549836134f9565b92505060018101905061352a565b5085935050505092915050565b6000602082019050818103600083015261357e8184613506565b905092915050565b6000806040838503121561359d5761359c612f7a565b5b60006135ab858286016131d0565b92505060206135bc858286016133e4565b9150509250929050565b600067ffffffffffffffff8211156135e1576135e0613259565b5b6135ea8261308e565b9050602081019050919050565b600061360a613605846135c6565b6132b9565b90508281526020810184848401111561362657613625613254565b5b613631848285613305565b509392505050565b600082601f83011261364e5761364d61324f565b5b813561365e8482602086016135f7565b91505092915050565b6000806000806080858703121561368157613680612f7a565b5b600061368f878288016131d0565b94505060206136a0878288016131d0565b93505060406136b18782880161311b565b925050606085013567ffffffffffffffff8111156136d2576136d1612f7f565b5b6136de87828801613639565b91505092959194509250565b6000806040838503121561370157613700612f7a565b5b600061370f858286016131d0565b9250506020613720858286016131d0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061377157607f821691505b602082108114156137855761378461372a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137c160208361304a565b91506137cc8261378b565b602082019050919050565b600060208201905081810360008301526137f0816137b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061382d601f8361304a565b9150613838826137f7565b602082019050919050565b6000602082019050818103600083015261385c81613820565b9050919050565b600081905092915050565b50565b600061387e600083613863565b91506138898261386e565b600082019050919050565b600061389f82613871565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613912826130fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613945576139446138d8565b5b600182019050919050565b600061395b826130fa565b9150613966836130fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561399b5761399a6138d8565b5b828201905092915050565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b60006139dc60178361304a565b91506139e7826139a6565b602082019050919050565b60006020820190508181036000830152613a0b816139cf565b9050919050565b7f4d61782066726565206d696e7420737570706c79206578636565646564210000600082015250565b6000613a48601e8361304a565b9150613a5382613a12565b602082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000613ab460178361304a565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b6000613b2060148361304a565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6000613b8c60148361304a565b9150613b9782613b56565b602082019050919050565b60006020820190508181036000830152613bbb81613b7f565b9050919050565b7f46726565206d696e74206e6f742066696e697368656420796574210000000000600082015250565b6000613bf8601b8361304a565b9150613c0382613bc2565b602082019050919050565b60006020820190508181036000830152613c2781613beb565b9050919050565b6000613c39826130fa565b9150613c44836130fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7d57613c7c6138d8565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613cbe60138361304a565b9150613cc982613c88565b602082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d50602f8361304a565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b600081905092915050565b6000613d9c8261303f565b613da68185613d86565b9350613db681856020860161305b565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613de481613759565b613dee8186613d86565b94506001821660008114613e095760018114613e1a57613e4d565b60ff19831686528186019350613e4d565b613e2385613dc2565b60005b83811015613e4557815481890152600182019150602081019050613e26565b838801955050505b50505092915050565b6000613e628286613d91565b9150613e6e8285613d91565b9150613e7a8284613dd7565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee360268361304a565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613f4082613f19565b613f4a8185613f24565b9350613f5a81856020860161305b565b613f638161308e565b840191505092915050565b6000608082019050613f83600083018761318f565b613f90602083018661318f565b613f9d6040830185613225565b8181036060830152613faf8184613f35565b905095945050505050565b600081519050613fc981612fb0565b92915050565b600060208284031215613fe557613fe4612f7a565b5b6000613ff384828501613fba565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614036826130fa565b9150614041836130fa565b92508261405157614050613ffc565b5b828204905092915050565b6000614067826130fa565b9150614072836130fa565b925082821015614085576140846138d8565b5b828203905092915050565b600061409b826130fa565b91506140a6836130fa565b9250826140b6576140b5613ffc565b5b82820690509291505056fea264697066735822122097c0c5db2831a25660f9774991c5d4c41c1d6f879bbf40ec76fd94990a25058a64736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000ffcb9e57d4000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000c436875626279205365616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341524600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569667961786d7766336162656e67726c696a70687365376774327a736f6b6670697071377137756a32747377716c7076627a6f63692f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): Chubby Seals
Arg [1] : _tokenSymbol (string): ARF
Arg [2] : _cost (uint256): 4500000000000000
Arg [3] : _freeMintSupply (uint256): 100
Arg [4] : _maxSupply (uint256): 444
Arg [5] : _maxMintAmountPerWallet (uint256): 1
Arg [6] : _uriPrefix (string): ipfs://bafybeifyaxmwf3abengrlijphse7gt2zsokfpipq7q7uj2tswqlpvbzoci/

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000000000000000000000000000000ffcb9e57d4000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001bc
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [8] : 436875626279205365616c730000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 4152460000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [12] : 697066733a2f2f62616679626569667961786d7766336162656e67726c696a70
Arg [13] : 687365376774327a736f6b6670697071377137756a32747377716c7076627a6f
Arg [14] : 63692f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49265:4261:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34599:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36097:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35661:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49441:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53072:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53178:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30739:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36959:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53261:152;;;;;;;;;;;;;:::i;:::-;;37199:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51354:796;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52636:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49399:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50901:179;;;;;;;;;;;;;:::i;:::-;;49572:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49366:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34408:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31857:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52716:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9325:103;;;;;;;;;;;;;:::i;:::-;;52814:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52966:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8676:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34767:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51088:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36372:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37454:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49528:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52257:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49499:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49465:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36729:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9582:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31489:305;31591:4;31643:25;31628:40;;;:11;:40;;;;:105;;;;31700:33;31685:48;;;:11;:48;;;;31628:105;:158;;;;31750:36;31774:11;31750:23;:36::i;:::-;31628:158;31608:178;;31489:305;;;:::o;34599:100::-;34653:13;34686:5;34679:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34599:100;:::o;36097:204::-;36165:7;36190:16;36198:7;36190;:16::i;:::-;36185:64;;36215:34;;;;;;;;;;;;;;36185:64;36269:15;:24;36285:7;36269:24;;;;;;;;;;;;;;;;;;;;;36262:31;;36097:204;;;:::o;35661:371::-;35734:13;35750:24;35766:7;35750:15;:24::i;:::-;35734:40;;35795:5;35789:11;;:2;:11;;;35785:48;;;35809:24;;;;;;;;;;;;;;35785:48;35866:5;35850:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;35876:37;35893:5;35900:12;:10;:12::i;:::-;35876:16;:37::i;:::-;35875:38;35850:63;35846:138;;;35937:35;;;;;;;;;;;;;;35846:138;35996:28;36005:2;36009:7;36018:5;35996:8;:28::i;:::-;35723:309;35661:371;;:::o;49441:19::-;;;;:::o;53072:100::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53156:10:::1;53144:9;:22;;;;;;;;;;;;:::i;:::-;;53072:100:::0;:::o;53178:77::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53243:6:::1;53234;;:15;;;;;;;;;;;;;;;;;;53178:77:::0;:::o;30739:303::-;30783:7;31008:15;:13;:15::i;:::-;30993:12;;30977:13;;:28;:46;30970:53;;30739:303;:::o;36959:170::-;37093:28;37103:4;37109:2;37113:7;37093:9;:28::i;:::-;36959:170;;;:::o;53261:152::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3659:1:::1;4256:7;;:19;;4248:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3659:1;4389:7;:18;;;;53321:7:::2;53342;:5;:7::i;:::-;53334:21;;53363;53334:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53320:69;;;53404:2;53396:11;;;::::0;::::2;;53311:102;3615:1:::1;4568:7;:22;;;;53261:152::o:0;37199:185::-;37337:39;37354:4;37360:2;37364:7;37337:39;;;;;;;;;;;;:16;:39::i;:::-;37199:185;;;:::o;51354:796::-;51414:16;51439:23;51465:17;51475:6;51465:9;:17::i;:::-;51439:43;;51489:30;51536:15;51522:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51489:63;;51559:22;51584:15;:13;:15::i;:::-;51559:40;;51606:23;51640:26;51675:441;51700:15;51682;:33;:64;;;;;51737:9;;51719:14;:27;;51682:64;51675:441;;;51757:31;51791:11;:27;51803:14;51791:27;;;;;;;;;;;51757:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51834:9;:16;;;51833:17;:49;;;;;51880:1;51854:28;;:9;:14;;;:28;;;;51833:49;51829:111;;;51916:9;:14;;;51895:35;;51829:111;51976:6;51954:28;;:18;:28;;;51950:132;;;52028:14;51995:13;52009:15;51995:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;52055:17;;;;;:::i;:::-;;;;51950:132;52092:16;;;;;:::i;:::-;;;;51748:368;51675:441;;;52131:13;52124:20;;;;;;;51354:796;;;:::o;52636:74::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52699:5:::1;52692:4;:12;;;;52636:74:::0;:::o;49399:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50901:179::-;50627:1;50622;50589:16;:30;50606:12;:10;:12::i;:::-;50589:30;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;:39;;50581:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50692:14;;50687:1;50671:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;50663:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;50963:6:::1;;;;;;;;;;;50962:7;50954:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51040:1;51006:16;:30;51023:12;:10;:12::i;:::-;51006:30;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;51048:26;51058:12;:10;:12::i;:::-;51072:1;51048:9;:26::i;:::-;50901:179::o:0;49572:25::-;;;;;;;;;;;;;:::o;49366:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34408:125::-;34472:7;34499:21;34512:7;34499:12;:21::i;:::-;:26;;;34492:33;;34408:125;;;:::o;31857:206::-;31921:7;31962:1;31945:19;;:5;:19;;;31941:60;;;31973:28;;;;;;;;;;;;;;31941:60;32027:12;:19;32040:5;32027:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;32019:36;;32012:43;;31857:206;;;:::o;52716:92::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52795:7:::1;52778:14;:24;;;;52716:92:::0;:::o;9325:103::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9390:30:::1;9417:1;9390:18;:30::i;:::-;9325:103::o:0;52814:146::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52931:23:::1;52906:22;:48;;;;52814:146:::0;:::o;52966:100::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53050:10:::1;53038:9;:22;;;;;;;;;;;;:::i;:::-;;52966:100:::0;:::o;8676:87::-;8722:7;8749:6;;;;;;;;;;;8742:13;;8676:87;:::o;34767:104::-;34823:13;34856:7;34849:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34767:104;:::o;51088:260::-;51153:11;50267:1;50253:11;:15;:88;;;;;50340:1;50315:22;;:26;;;;:::i;:::-;50301:11;50272:12;:26;50285:12;:10;:12::i;:::-;50272:26;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:69;50253:88;50245:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;50412:9;;50397:11;50381:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;50373:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50478:14;;50461:13;:11;:13::i;:::-;:31;;50453:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51186:11:::1;50846;50839:4;;:18;;;;:::i;:::-;50826:9;:31;;50818:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51215:6:::2;;;;;;;;;;;51214:7;51206:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51288:11;51258:12;:26;51271:12;:10;:12::i;:::-;51258:26;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;51306:36;51316:12;:10;:12::i;:::-;51330:11;51306:9;:36::i;:::-;50531:1:::1;51088:260:::0;;:::o;36372:287::-;36483:12;:10;:12::i;:::-;36471:24;;:8;:24;;;36467:54;;;36504:17;;;;;;;;;;;;;;36467:54;36579:8;36534:18;:32;36553:12;:10;:12::i;:::-;36534:32;;;;;;;;;;;;;;;:42;36567:8;36534:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36632:8;36603:48;;36618:12;:10;:12::i;:::-;36603:48;;;36642:8;36603:48;;;;;;:::i;:::-;;;;;;;;36372:287;;:::o;37454:369::-;37621:28;37631:4;37637:2;37641:7;37621:9;:28::i;:::-;37664:15;:2;:13;;;:15::i;:::-;:76;;;;;37684:56;37715:4;37721:2;37725:7;37734:5;37684:30;:56::i;:::-;37683:57;37664:76;37660:156;;;37764:40;;;;;;;;;;;;;;37660:156;37454:369;;;;:::o;49528:37::-;;;;:::o;52257:373::-;52331:13;52361:17;52369:8;52361:7;:17::i;:::-;52353:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52439:28;52470:10;:8;:10::i;:::-;52439:41;;52525:1;52500:14;52494:28;:32;:130;;;;;;;;;;;;;;;;;52562:14;52578:19;:8;:17;:19::i;:::-;52599:9;52545:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52494:130;52487:137;;;52257:373;;;:::o;49499:24::-;;;;:::o;49465:29::-;;;;:::o;36729:164::-;36826:4;36850:18;:25;36869:5;36850:25;;;;;;;;;;;;;;;:35;36876:8;36850:35;;;;;;;;;;;;;;;;;;;;;;;;;36843:42;;36729:164;;;;:::o;9582:201::-;8906:12;:10;:12::i;:::-;8895:23;;:7;:5;:7::i;:::-;:23;;;8887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9691:1:::1;9671:22;;:8;:22;;;;9663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9747:28;9766:8;9747:18;:28::i;:::-;9582:201:::0;:::o;11371:326::-;11431:4;11688:1;11666:7;:19;;;:23;11659:30;;11371:326;;;:::o;21438:157::-;21523:4;21562:25;21547:40;;;:11;:40;;;;21540:47;;21438:157;;;:::o;38077:187::-;38134:4;38177:7;38158:15;:13;:15::i;:::-;:26;;:53;;;;;38198:13;;38188:7;:23;38158:53;:98;;;;;38229:11;:20;38241:7;38229:20;;;;;;;;;;;:27;;;;;;;;;;;;38228:28;38158:98;38151:105;;38077:187;;;:::o;7403:98::-;7456:7;7483:10;7476:17;;7403:98;:::o;46241:196::-;46383:2;46356:15;:24;46372:7;46356:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46421:7;46417:2;46401:28;;46410:5;46401:28;;;;;;;;;;;;46241:196;;;:::o;52156:95::-;52221:7;52244:1;52237:8;;52156:95;:::o;41187:2130::-;41302:35;41340:21;41353:7;41340:12;:21::i;:::-;41302:59;;41400:4;41378:26;;:13;:18;;;:26;;;41374:67;;41413:28;;;;;;;;;;;;;;41374:67;41454:22;41496:4;41480:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;41517:36;41534:4;41540:12;:10;:12::i;:::-;41517:16;:36::i;:::-;41480:73;:126;;;;41594:12;:10;:12::i;:::-;41570:36;;:20;41582:7;41570:11;:20::i;:::-;:36;;;41480:126;41454:153;;41625:17;41620:66;;41651:35;;;;;;;;;;;;;;41620:66;41715:1;41701:16;;:2;:16;;;41697:52;;;41726:23;;;;;;;;;;;;;;41697:52;41762:43;41784:4;41790:2;41794:7;41803:1;41762:21;:43::i;:::-;41870:35;41887:1;41891:7;41900:4;41870:8;:35::i;:::-;42231:1;42201:12;:18;42214:4;42201:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42275:1;42247:12;:16;42260:2;42247:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42293:31;42327:11;:20;42339:7;42327:20;;;;;;;;;;;42293:54;;42378:2;42362:8;:13;;;:18;;;;;;;;;;;;;;;;;;42428:15;42395:8;:23;;;:49;;;;;;;;;;;;;;;;;;42696:19;42728:1;42718:7;:11;42696:33;;42744:31;42778:11;:24;42790:11;42778:24;;;;;;;;;;;42744:58;;42846:1;42821:27;;:8;:13;;;;;;;;;;;;:27;;;42817:384;;;43031:13;;43016:11;:28;43012:174;;43085:4;43069:8;:13;;;:20;;;;;;;;;;;;;;;;;;43138:13;:28;;;43112:8;:23;;;:54;;;;;;;;;;;;;;;;;;43012:174;42817:384;42176:1036;;;43248:7;43244:2;43229:27;;43238:4;43229:27;;;;;;;;;;;;43267:42;43288:4;43294:2;43298:7;43307:1;43267:20;:42::i;:::-;41291:2026;;41187:2130;;;:::o;38272:104::-;38341:27;38351:2;38355:8;38341:27;;;;;;;;;;;;:9;:27::i;:::-;38272:104;;:::o;33238:1109::-;33300:21;;:::i;:::-;33334:12;33349:7;33334:22;;33417:4;33398:15;:13;:15::i;:::-;:23;;:47;;;;;33432:13;;33425:4;:20;33398:47;33394:886;;;33466:31;33500:11;:17;33512:4;33500:17;;;;;;;;;;;33466:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33541:9;:16;;;33536:729;;33612:1;33586:28;;:9;:14;;;:28;;;33582:101;;33650:9;33643:16;;;;;;33582:101;33985:261;33992:4;33985:261;;;34025:6;;;;;;;;34070:11;:17;34082:4;34070:17;;;;;;;;;;;34058:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34144:1;34118:28;;:9;:14;;;:28;;;34114:109;;34186:9;34179:16;;;;;;34114:109;33985:261;;;33536:729;33447:833;33394:886;34308:31;;;;;;;;;;;;;;33238:1109;;;;:::o;9942:191::-;10016:16;10035:6;;;;;;;;;;;10016:25;;10061:8;10052:6;;:17;;;;;;;;;;;;;;;;;;10116:8;10085:40;;10106:8;10085:40;;;;;;;;;;;;10005:128;9942:191;:::o;46928:667::-;47091:4;47128:2;47112:36;;;47149:12;:10;:12::i;:::-;47163:4;47169:7;47178:5;47112:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47108:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47363:1;47346:6;:13;:18;47342:235;;;47392:40;;;;;;;;;;;;;;47342:235;47535:6;47529:13;47520:6;47516:2;47512:15;47505:38;47108:480;47241:45;;;47231:55;;;:6;:55;;;;47224:62;;;46928:667;;;;;;:::o;53419:104::-;53479:13;53508:9;53501:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53419:104;:::o;4968:723::-;5024:13;5254:1;5245:5;:10;5241:53;;;5272:10;;;;;;;;;;;;;;;;;;;;;5241:53;5304:12;5319:5;5304:20;;5335:14;5360:78;5375:1;5367:4;:9;5360:78;;5393:8;;;;;:::i;:::-;;;;5424:2;5416:10;;;;;:::i;:::-;;;5360:78;;;5448:19;5480:6;5470:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5448:39;;5498:154;5514:1;5505:5;:10;5498:154;;5542:1;5532:11;;;;;:::i;:::-;;;5609:2;5601:5;:10;;;;:::i;:::-;5588:2;:24;;;;:::i;:::-;5575:39;;5558:6;5565;5558:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5638:2;5629:11;;;;;:::i;:::-;;;5498:154;;;5676:6;5662:21;;;;;4968:723;;;;:::o;48242:159::-;;;;;:::o;49059:158::-;;;;;:::o;38738:163::-;38861:32;38867:2;38871:8;38881:5;38888:4;38861:5;:32::i;:::-;38738:163;;;:::o;39159:1775::-;39298:20;39321:13;;39298:36;;39363:1;39349:16;;:2;:16;;;39345:48;;;39374:19;;;;;;;;;;;;;;39345:48;39420:1;39408:8;:13;39404:44;;;39430:18;;;;;;;;;;;;;;39404:44;39461:61;39491:1;39495:2;39499:12;39513:8;39461:21;:61::i;:::-;39834:8;39799:12;:16;39812:2;39799:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39898:8;39858:12;:16;39871:2;39858:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39957:2;39924:11;:25;39936:12;39924:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40024:15;39974:11;:25;39986:12;39974:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;40057:20;40080:12;40057:35;;40107:11;40136:8;40121:12;:23;40107:37;;40165:4;:23;;;;;40173:15;:2;:13;;;:15::i;:::-;40165:23;40161:641;;;40209:314;40265:12;40261:2;40240:38;;40257:1;40240:38;;;;;;;;;;;;40306:69;40345:1;40349:2;40353:14;;;;;;40369:5;40306:30;:69::i;:::-;40301:174;;40411:40;;;;;;;;;;;;;;40301:174;40518:3;40502:12;:19;;40209:314;;40604:12;40587:13;;:29;40583:43;;40618:8;;;40583:43;40161:641;;;40667:120;40723:14;;;;;;40719:2;40698:40;;40715:1;40698:40;;;;;;;;;;;;40782:3;40766:12;:19;;40667:120;;40161:641;40832:12;40816:13;:28;;;;39774:1082;;40866:60;40895:1;40899:2;40903:12;40917:8;40866:20;:60::i;:::-;39287:1647;39159:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:308::-;6206:4;6296:18;6288:6;6285:30;6282:56;;;6318:18;;:::i;:::-;6282:56;6356:29;6378:6;6356:29;:::i;:::-;6348:37;;6440:4;6434;6430:15;6422:23;;6144:308;;;:::o;6458:154::-;6542:6;6537:3;6532;6519:30;6604:1;6595:6;6590:3;6586:16;6579:27;6458:154;;;:::o;6618:412::-;6696:5;6721:66;6737:49;6779:6;6737:49;:::i;:::-;6721:66;:::i;:::-;6712:75;;6810:6;6803:5;6796:21;6848:4;6841:5;6837:16;6886:3;6877:6;6872:3;6868:16;6865:25;6862:112;;;6893:79;;:::i;:::-;6862:112;6983:41;7017:6;7012:3;7007;6983:41;:::i;:::-;6702:328;6618:412;;;;;:::o;7050:340::-;7106:5;7155:3;7148:4;7140:6;7136:17;7132:27;7122:122;;7163:79;;:::i;:::-;7122:122;7280:6;7267:20;7305:79;7380:3;7372:6;7365:4;7357:6;7353:17;7305:79;:::i;:::-;7296:88;;7112:278;7050:340;;;;:::o;7396:509::-;7465:6;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7825:63;7880:7;7871:6;7860:9;7856:22;7825:63;:::i;:::-;7815:73;;7611:287;7396:509;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:323::-;8228:6;8277:2;8265:9;8256:7;8252:23;8248:32;8245:119;;;8283:79;;:::i;:::-;8245:119;8403:1;8428:50;8470:7;8461:6;8450:9;8446:22;8428:50;:::i;:::-;8418:60;;8374:114;8172:323;;;;:::o;8501:619::-;8578:6;8586;8594;8643:2;8631:9;8622:7;8618:23;8614:32;8611:119;;;8649:79;;:::i;:::-;8611:119;8769:1;8794:53;8839:7;8830:6;8819:9;8815:22;8794:53;:::i;:::-;8784:63;;8740:117;8896:2;8922:53;8967:7;8958:6;8947:9;8943:22;8922:53;:::i;:::-;8912:63;;8867:118;9024:2;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8995:118;8501:619;;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:114::-;9528:6;9562:5;9556:12;9546:22;;9461:114;;;:::o;9581:184::-;9680:11;9714:6;9709:3;9702:19;9754:4;9749:3;9745:14;9730:29;;9581:184;;;;:::o;9771:132::-;9838:4;9861:3;9853:11;;9891:4;9886:3;9882:14;9874:22;;9771:132;;;:::o;9909:108::-;9986:24;10004:5;9986:24;:::i;:::-;9981:3;9974:37;9909:108;;:::o;10023:179::-;10092:10;10113:46;10155:3;10147:6;10113:46;:::i;:::-;10191:4;10186:3;10182:14;10168:28;;10023:179;;;;:::o;10208:113::-;10278:4;10310;10305:3;10301:14;10293:22;;10208:113;;;:::o;10357:732::-;10476:3;10505:54;10553:5;10505:54;:::i;:::-;10575:86;10654:6;10649:3;10575:86;:::i;:::-;10568:93;;10685:56;10735:5;10685:56;:::i;:::-;10764:7;10795:1;10780:284;10805:6;10802:1;10799:13;10780:284;;;10881:6;10875:13;10908:63;10967:3;10952:13;10908:63;:::i;:::-;10901:70;;10994:60;11047:6;10994:60;:::i;:::-;10984:70;;10840:224;10827:1;10824;10820:9;10815:14;;10780:284;;;10784:14;11080:3;11073:10;;10481:608;;;10357:732;;;;:::o;11095:373::-;11238:4;11276:2;11265:9;11261:18;11253:26;;11325:9;11319:4;11315:20;11311:1;11300:9;11296:17;11289:47;11353:108;11456:4;11447:6;11353:108;:::i;:::-;11345:116;;11095:373;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:180::-;14511:77;14508:1;14501:88;14608:4;14605:1;14598:15;14632:4;14629:1;14622:15;14649:320;14693:6;14730:1;14724:4;14720:12;14710:22;;14777:1;14771:4;14767:12;14798:18;14788:81;;14854:4;14846:6;14842:17;14832:27;;14788:81;14916:2;14908:6;14905:14;14885:18;14882:38;14879:84;;;14935:18;;:::i;:::-;14879:84;14700:269;14649:320;;;:::o;14975:182::-;15115:34;15111:1;15103:6;15099:14;15092:58;14975:182;:::o;15163:366::-;15305:3;15326:67;15390:2;15385:3;15326:67;:::i;:::-;15319:74;;15402:93;15491:3;15402:93;:::i;:::-;15520:2;15515:3;15511:12;15504:19;;15163:366;;;:::o;15535:419::-;15701:4;15739:2;15728:9;15724:18;15716:26;;15788:9;15782:4;15778:20;15774:1;15763:9;15759:17;15752:47;15816:131;15942:4;15816:131;:::i;:::-;15808:139;;15535:419;;;:::o;15960:181::-;16100:33;16096:1;16088:6;16084:14;16077:57;15960:181;:::o;16147:366::-;16289:3;16310:67;16374:2;16369:3;16310:67;:::i;:::-;16303:74;;16386:93;16475:3;16386:93;:::i;:::-;16504:2;16499:3;16495:12;16488:19;;16147:366;;;:::o;16519:419::-;16685:4;16723:2;16712:9;16708:18;16700:26;;16772:9;16766:4;16762:20;16758:1;16747:9;16743:17;16736:47;16800:131;16926:4;16800:131;:::i;:::-;16792:139;;16519:419;;;:::o;16944:147::-;17045:11;17082:3;17067:18;;16944:147;;;;:::o;17097:114::-;;:::o;17217:398::-;17376:3;17397:83;17478:1;17473:3;17397:83;:::i;:::-;17390:90;;17489:93;17578:3;17489:93;:::i;:::-;17607:1;17602:3;17598:11;17591:18;;17217:398;;;:::o;17621:379::-;17805:3;17827:147;17970:3;17827:147;:::i;:::-;17820:154;;17991:3;17984:10;;17621:379;;;:::o;18006:180::-;18054:77;18051:1;18044:88;18151:4;18148:1;18141:15;18175:4;18172:1;18165:15;18192:180;18240:77;18237:1;18230:88;18337:4;18334:1;18327:15;18361:4;18358:1;18351:15;18378:233;18417:3;18440:24;18458:5;18440:24;:::i;:::-;18431:33;;18486:66;18479:5;18476:77;18473:103;;;18556:18;;:::i;:::-;18473:103;18603:1;18596:5;18592:13;18585:20;;18378:233;;;:::o;18617:305::-;18657:3;18676:20;18694:1;18676:20;:::i;:::-;18671:25;;18710:20;18728:1;18710:20;:::i;:::-;18705:25;;18864:1;18796:66;18792:74;18789:1;18786:81;18783:107;;;18870:18;;:::i;:::-;18783:107;18914:1;18911;18907:9;18900:16;;18617:305;;;;:::o;18928:173::-;19068:25;19064:1;19056:6;19052:14;19045:49;18928:173;:::o;19107:366::-;19249:3;19270:67;19334:2;19329:3;19270:67;:::i;:::-;19263:74;;19346:93;19435:3;19346:93;:::i;:::-;19464:2;19459:3;19455:12;19448:19;;19107:366;;;:::o;19479:419::-;19645:4;19683:2;19672:9;19668:18;19660:26;;19732:9;19726:4;19722:20;19718:1;19707:9;19703:17;19696:47;19760:131;19886:4;19760:131;:::i;:::-;19752:139;;19479:419;;;:::o;19904:180::-;20044:32;20040:1;20032:6;20028:14;20021:56;19904:180;:::o;20090:366::-;20232:3;20253:67;20317:2;20312:3;20253:67;:::i;:::-;20246:74;;20329:93;20418:3;20329:93;:::i;:::-;20447:2;20442:3;20438:12;20431:19;;20090:366;;;:::o;20462:419::-;20628:4;20666:2;20655:9;20651:18;20643:26;;20715:9;20709:4;20705:20;20701:1;20690:9;20686:17;20679:47;20743:131;20869:4;20743:131;:::i;:::-;20735:139;;20462:419;;;:::o;20887:173::-;21027:25;21023:1;21015:6;21011:14;21004:49;20887:173;:::o;21066:366::-;21208:3;21229:67;21293:2;21288:3;21229:67;:::i;:::-;21222:74;;21305:93;21394:3;21305:93;:::i;:::-;21423:2;21418:3;21414:12;21407:19;;21066:366;;;:::o;21438:419::-;21604:4;21642:2;21631:9;21627:18;21619:26;;21691:9;21685:4;21681:20;21677:1;21666:9;21662:17;21655:47;21719:131;21845:4;21719:131;:::i;:::-;21711:139;;21438:419;;;:::o;21863:170::-;22003:22;21999:1;21991:6;21987:14;21980:46;21863:170;:::o;22039:366::-;22181:3;22202:67;22266:2;22261:3;22202:67;:::i;:::-;22195:74;;22278:93;22367:3;22278:93;:::i;:::-;22396:2;22391:3;22387:12;22380:19;;22039:366;;;:::o;22411:419::-;22577:4;22615:2;22604:9;22600:18;22592:26;;22664:9;22658:4;22654:20;22650:1;22639:9;22635:17;22628:47;22692:131;22818:4;22692:131;:::i;:::-;22684:139;;22411:419;;;:::o;22836:170::-;22976:22;22972:1;22964:6;22960:14;22953:46;22836:170;:::o;23012:366::-;23154:3;23175:67;23239:2;23234:3;23175:67;:::i;:::-;23168:74;;23251:93;23340:3;23251:93;:::i;:::-;23369:2;23364:3;23360:12;23353:19;;23012:366;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23384:419;;;:::o;23809:177::-;23949:29;23945:1;23937:6;23933:14;23926:53;23809:177;:::o;23992:366::-;24134:3;24155:67;24219:2;24214:3;24155:67;:::i;:::-;24148:74;;24231:93;24320:3;24231:93;:::i;:::-;24349:2;24344:3;24340:12;24333:19;;23992:366;;;:::o;24364:419::-;24530:4;24568:2;24557:9;24553:18;24545:26;;24617:9;24611:4;24607:20;24603:1;24592:9;24588:17;24581:47;24645:131;24771:4;24645:131;:::i;:::-;24637:139;;24364:419;;;:::o;24789:348::-;24829:7;24852:20;24870:1;24852:20;:::i;:::-;24847:25;;24886:20;24904:1;24886:20;:::i;:::-;24881:25;;25074:1;25006:66;25002:74;24999:1;24996:81;24991:1;24984:9;24977:17;24973:105;24970:131;;;25081:18;;:::i;:::-;24970:131;25129:1;25126;25122:9;25111:20;;24789:348;;;;:::o;25143:169::-;25283:21;25279:1;25271:6;25267:14;25260:45;25143:169;:::o;25318:366::-;25460:3;25481:67;25545:2;25540:3;25481:67;:::i;:::-;25474:74;;25557:93;25646:3;25557:93;:::i;:::-;25675:2;25670:3;25666:12;25659:19;;25318:366;;;:::o;25690:419::-;25856:4;25894:2;25883:9;25879:18;25871:26;;25943:9;25937:4;25933:20;25929:1;25918:9;25914:17;25907:47;25971:131;26097:4;25971:131;:::i;:::-;25963:139;;25690:419;;;:::o;26115:234::-;26255:34;26251:1;26243:6;26239:14;26232:58;26324:17;26319:2;26311:6;26307:15;26300:42;26115:234;:::o;26355:366::-;26497:3;26518:67;26582:2;26577:3;26518:67;:::i;:::-;26511:74;;26594:93;26683:3;26594:93;:::i;:::-;26712:2;26707:3;26703:12;26696:19;;26355:366;;;:::o;26727:419::-;26893:4;26931:2;26920:9;26916:18;26908:26;;26980:9;26974:4;26970:20;26966:1;26955:9;26951:17;26944:47;27008:131;27134:4;27008:131;:::i;:::-;27000:139;;26727:419;;;:::o;27152:148::-;27254:11;27291:3;27276:18;;27152:148;;;;:::o;27306:377::-;27412:3;27440:39;27473:5;27440:39;:::i;:::-;27495:89;27577:6;27572:3;27495:89;:::i;:::-;27488:96;;27593:52;27638:6;27633:3;27626:4;27619:5;27615:16;27593:52;:::i;:::-;27670:6;27665:3;27661:16;27654:23;;27416:267;27306:377;;;;:::o;27689:141::-;27738:4;27761:3;27753:11;;27784:3;27781:1;27774:14;27818:4;27815:1;27805:18;27797:26;;27689:141;;;:::o;27860:845::-;27963:3;28000:5;27994:12;28029:36;28055:9;28029:36;:::i;:::-;28081:89;28163:6;28158:3;28081:89;:::i;:::-;28074:96;;28201:1;28190:9;28186:17;28217:1;28212:137;;;;28363:1;28358:341;;;;28179:520;;28212:137;28296:4;28292:9;28281;28277:25;28272:3;28265:38;28332:6;28327:3;28323:16;28316:23;;28212:137;;28358:341;28425:38;28457:5;28425:38;:::i;:::-;28485:1;28499:154;28513:6;28510:1;28507:13;28499:154;;;28587:7;28581:14;28577:1;28572:3;28568:11;28561:35;28637:1;28628:7;28624:15;28613:26;;28535:4;28532:1;28528:12;28523:17;;28499:154;;;28682:6;28677:3;28673:16;28666:23;;28365:334;;28179:520;;27967:738;;27860:845;;;;:::o;28711:589::-;28936:3;28958:95;29049:3;29040:6;28958:95;:::i;:::-;28951:102;;29070:95;29161:3;29152:6;29070:95;:::i;:::-;29063:102;;29182:92;29270:3;29261:6;29182:92;:::i;:::-;29175:99;;29291:3;29284:10;;28711:589;;;;;;:::o;29306:225::-;29446:34;29442:1;29434:6;29430:14;29423:58;29515:8;29510:2;29502:6;29498:15;29491:33;29306:225;:::o;29537:366::-;29679:3;29700:67;29764:2;29759:3;29700:67;:::i;:::-;29693:74;;29776:93;29865:3;29776:93;:::i;:::-;29894:2;29889:3;29885:12;29878:19;;29537:366;;;:::o;29909:419::-;30075:4;30113:2;30102:9;30098:18;30090:26;;30162:9;30156:4;30152:20;30148:1;30137:9;30133:17;30126:47;30190:131;30316:4;30190:131;:::i;:::-;30182:139;;29909:419;;;:::o;30334:98::-;30385:6;30419:5;30413:12;30403:22;;30334:98;;;:::o;30438:168::-;30521:11;30555:6;30550:3;30543:19;30595:4;30590:3;30586:14;30571:29;;30438:168;;;;:::o;30612:360::-;30698:3;30726:38;30758:5;30726:38;:::i;:::-;30780:70;30843:6;30838:3;30780:70;:::i;:::-;30773:77;;30859:52;30904:6;30899:3;30892:4;30885:5;30881:16;30859:52;:::i;:::-;30936:29;30958:6;30936:29;:::i;:::-;30931:3;30927:39;30920:46;;30702:270;30612:360;;;;:::o;30978:640::-;31173:4;31211:3;31200:9;31196:19;31188:27;;31225:71;31293:1;31282:9;31278:17;31269:6;31225:71;:::i;:::-;31306:72;31374:2;31363:9;31359:18;31350:6;31306:72;:::i;:::-;31388;31456:2;31445:9;31441:18;31432:6;31388:72;:::i;:::-;31507:9;31501:4;31497:20;31492:2;31481:9;31477:18;31470:48;31535:76;31606:4;31597:6;31535:76;:::i;:::-;31527:84;;30978:640;;;;;;;:::o;31624:141::-;31680:5;31711:6;31705:13;31696:22;;31727:32;31753:5;31727:32;:::i;:::-;31624:141;;;;:::o;31771:349::-;31840:6;31889:2;31877:9;31868:7;31864:23;31860:32;31857:119;;;31895:79;;:::i;:::-;31857:119;32015:1;32040:63;32095:7;32086:6;32075:9;32071:22;32040:63;:::i;:::-;32030:73;;31986:127;31771:349;;;;:::o;32126:180::-;32174:77;32171:1;32164:88;32271:4;32268:1;32261:15;32295:4;32292:1;32285:15;32312:185;32352:1;32369:20;32387:1;32369:20;:::i;:::-;32364:25;;32403:20;32421:1;32403:20;:::i;:::-;32398:25;;32442:1;32432:35;;32447:18;;:::i;:::-;32432:35;32489:1;32486;32482:9;32477:14;;32312:185;;;;:::o;32503:191::-;32543:4;32563:20;32581:1;32563:20;:::i;:::-;32558:25;;32597:20;32615:1;32597:20;:::i;:::-;32592:25;;32636:1;32633;32630:8;32627:34;;;32641:18;;:::i;:::-;32627:34;32686:1;32683;32679:9;32671:17;;32503:191;;;;:::o;32700:176::-;32732:1;32749:20;32767:1;32749:20;:::i;:::-;32744:25;;32783:20;32801:1;32783:20;:::i;:::-;32778:25;;32822:1;32812:35;;32827:18;;:::i;:::-;32812:35;32868:1;32865;32861:9;32856:14;;32700:176;;;;:::o

Swarm Source

ipfs://97c0c5db2831a25660f9774991c5d4c41c1d6f879bbf40ec76fd94990a25058a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.