ETH Price: $3,289.03 (+1.21%)
Gas: 2 Gwei

Token

CoolPixels (COOLPIXELS)
 

Overview

Max Total Supply

1,141 COOLPIXELS

Holders

72

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 COOLPIXELS
0x7d26241c6e52bac6629447e278efada8b58c48e7
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:
CoolPixels

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-16
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.3/contracts/token/ERC721/ERC721.sol



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

        // Clear approvals
        _approve(address(0), tokenId);

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File: contracts/CoolPixels.sol


pragma solidity ^0.8.7;

contract CoolPixels is Ownable, ERC721 {
    using SafeMath for uint256;

  uint public maxPerTransaction = 25;
  uint public supplyLimit = 9000;
  uint public freeSupplyLimit = 1000;
  bool public publicSaleActive = false;
  uint256 public totalSupply = 1000;
  uint256 public freeSupply;
  string public baseURI;
  uint256 public tokenPrice = 25000000000000000;

  constructor(string memory name, string memory symbol, string memory baseURIinput)
    ERC721(name, symbol)
  {
      baseURI = baseURIinput;
  }

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

  function setBaseURI(string calldata newBaseUri) external onlyOwner {
    baseURI = newBaseUri;
  }

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

  function reduceSupplyLimit() public onlyOwner {
    require(
    supplyLimit - 1000 > totalSupply,
    "Cannot reduce supplyLimit."
    );
    supplyLimit = supplyLimit - 1000;
  }

  function changePrice(uint256 newPrice) public onlyOwner {
    tokenPrice = newPrice;
  }

  function buyCoolPixels(uint _count) public payable{
    require(_count <= maxPerTransaction, "invalid token count");
    require(tokenPrice.mul(_count) <= msg.value,"Ether value sent is not correct");
    require(publicSaleActive == true, "Sale is Paused.");
    require((totalSupply + _count) <= supplyLimit, "Supply reached");  
    uint256 newId = totalSupply;  
        for(uint i = 0; i < _count; i++){
            newId+=1;
            _safeMint(msg.sender, newId);
        }  
    totalSupply = newId;
  }

  function freeMintCoolPixels() public {
    require(freeSupply <= freeSupplyLimit, "Free supply is over!");
    require(publicSaleActive == true, "Sale is Paused.");
    require(balanceOf(msg.sender) + 1 <= 1, "Free cat is already claimed!");

    uint256 newId = freeSupply;

    newId+=1;
    _safeMint(msg.sender, newId);

    freeSupply = newId;
  }

  function withdraw() public onlyOwner {
      uint256 balance = address(this).balance;
      payable(msg.sender).transfer(balance);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURIinput","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buyCoolPixels","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintCoolPixels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeSupplyLimit","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":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260196007556123286008556103e86009556000600a60006101000a81548160ff0219169083151502179055506103e8600b556658d15e17628000600e553480156200004e57600080fd5b5060405162003fda38038062003fda8339818101604052810190620000749190620002e6565b8282620000966200008a620000ec60201b60201c565b620000f460201b60201c565b8160019080519060200190620000ae929190620001b8565b508060029080519060200190620000c7929190620001b8565b50505080600d9080519060200190620000e2929190620001b8565b5050505062000523565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c69062000434565b90600052602060002090601f016020900481019282620001ea576000855562000236565b82601f106200020557805160ff191683800117855562000236565b8280016001018555821562000236579182015b828111156200023557825182559160200191906001019062000218565b5b50905062000245919062000249565b5090565b5b80821115620002645760008160009055506001016200024a565b5090565b60006200027f6200027984620003c8565b6200039f565b9050828152602081018484840111156200029e576200029d62000503565b5b620002ab848285620003fe565b509392505050565b600082601f830112620002cb57620002ca620004fe565b5b8151620002dd84826020860162000268565b91505092915050565b6000806000606084860312156200030257620003016200050d565b5b600084015167ffffffffffffffff81111562000323576200032262000508565b5b6200033186828701620002b3565b935050602084015167ffffffffffffffff81111562000355576200035462000508565b5b6200036386828701620002b3565b925050604084015167ffffffffffffffff81111562000387576200038662000508565b5b6200039586828701620002b3565b9150509250925092565b6000620003ab620003be565b9050620003b982826200046a565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e657620003e5620004cf565b5b620003f18262000512565b9050602081019050919050565b60005b838110156200041e57808201518184015260208101905062000401565b838111156200042e576000848401525b50505050565b600060028204905060018216806200044d57607f821691505b60208210811415620004645762000463620004a0565b5b50919050565b620004758262000512565b810181811067ffffffffffffffff82111715620004975762000496620004cf565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613aa780620005336000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063c0a44f8911610064578063c0a44f891461063c578063c87b56dd14610658578063e985e9c514610695578063f2fde38b146106d2576101d8565b8063b88d4fde146105a6578063bc8893b4146105cf578063bd71f922146105fa578063be905c4014610611576101d8565b806395d89b41116100d157806395d89b4114610512578063a22cb4651461053d578063a2b40d1914610566578063a968353f1461058f576101d8565b806370a0823114610468578063715018a6146104a55780637ff9b596146104bc5780638da5cb5b146104e7576101d8565b806323b872dd1161017a5780634b980d67116101495780634b980d67146103ac57806355f804b3146103d75780636352211e146104005780636c0360eb1461043d576101d8565b806323b872dd1461031857806324a6ab0c146103415780633ccfd60b1461036c57806342842e0e14610383576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780630c894cfe146102ab57806318160ddd146102c257806319d1997a146102ed576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906127b7565b6106fb565b6040516102119190612d0b565b60405180910390f35b34801561022657600080fd5b5061022f6107dd565b60405161023c9190612d26565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061285e565b61086f565b6040516102799190612ca4565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612777565b6108f4565b005b3480156102b757600080fd5b506102c0610a0c565b005b3480156102ce57600080fd5b506102d7610ab4565b6040516102e49190613028565b60405180910390f35b3480156102f957600080fd5b50610302610aba565b60405161030f9190613028565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612661565b610ac0565b005b34801561034d57600080fd5b50610356610b20565b6040516103639190613028565b60405180910390f35b34801561037857600080fd5b50610381610b26565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190612661565b610bf1565b005b3480156103b857600080fd5b506103c1610c11565b6040516103ce9190613028565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612811565b610c17565b005b34801561040c57600080fd5b506104276004803603810190610422919061285e565b610ca9565b6040516104349190612ca4565b60405180910390f35b34801561044957600080fd5b50610452610d5b565b60405161045f9190612d26565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906125f4565b610de9565b60405161049c9190613028565b60405180910390f35b3480156104b157600080fd5b506104ba610ea1565b005b3480156104c857600080fd5b506104d1610f29565b6040516104de9190613028565b60405180910390f35b3480156104f357600080fd5b506104fc610f2f565b6040516105099190612ca4565b60405180910390f35b34801561051e57600080fd5b50610527610f58565b6040516105349190612d26565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190612737565b610fea565b005b34801561057257600080fd5b5061058d6004803603810190610588919061285e565b61116b565b005b34801561059b57600080fd5b506105a46111f1565b005b3480156105b257600080fd5b506105cd60048036038101906105c891906126b4565b61130f565b005b3480156105db57600080fd5b506105e4611371565b6040516105f19190612d0b565b60405180910390f35b34801561060657600080fd5b5061060f611384565b005b34801561061d57600080fd5b5061062661146b565b6040516106339190613028565b60405180910390f35b6106566004803603810190610651919061285e565b611471565b005b34801561066457600080fd5b5061067f600480360381019061067a919061285e565b6115ff565b60405161068c9190612d26565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612621565b6116a6565b6040516106c99190612d0b565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906125f4565b61173a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d657506107d582611832565b5b9050919050565b6060600180546107ec906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610818906132a7565b80156108655780601f1061083a57610100808354040283529160200191610865565b820191906000526020600020905b81548152906001019060200180831161084857829003601f168201915b5050505050905090565b600061087a8261189c565b6108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612ee8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ff82610ca9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096790612f88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661098f611908565b73ffffffffffffffffffffffffffffffffffffffff1614806109be57506109bd816109b8611908565b6116a6565b5b6109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490612e48565b60405180910390fd5b610a078383611910565b505050565b610a14611908565b73ffffffffffffffffffffffffffffffffffffffff16610a32610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90612f08565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600b5481565b60085481565b610ad1610acb611908565b826119c9565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790612fa8565b60405180910390fd5b610b1b838383611aa7565b505050565b600c5481565b610b2e611908565b73ffffffffffffffffffffffffffffffffffffffff16610b4c610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612f08565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bed573d6000803e3d6000fd5b5050565b610c0c8383836040518060200160405280600081525061130f565b505050565b60075481565b610c1f611908565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90612f08565b60405180910390fd5b8181600d9190610ca4929190612422565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990612e88565b60405180910390fd5b80915050919050565b600d8054610d68906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d94906132a7565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190612e68565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea9611908565b73ffffffffffffffffffffffffffffffffffffffff16610ec7610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490612f08565b60405180910390fd5b610f276000611d03565b565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f67906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f93906132a7565b8015610fe05780601f10610fb557610100808354040283529160200191610fe0565b820191906000526020600020905b815481529060010190602001808311610fc357829003601f168201915b5050505050905090565b610ff2611908565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790612de8565b60405180910390fd5b806006600061106d611908565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661111a611908565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161115f9190612d0b565b60405180910390a35050565b611173611908565b73ffffffffffffffffffffffffffffffffffffffff16611191610f2f565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612f08565b60405180910390fd5b80600e8190555050565b600954600c541115611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612fc8565b60405180910390fd5b60011515600a60009054906101000a900460ff1615151461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613008565b60405180910390fd5b60018061129a33610de9565b6112a491906130dc565b11156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90612d48565b60405180910390fd5b6000600c5490506001816112f991906130dc565b90506113053382611dc7565b80600c8190555050565b61132061131a611908565b836119c9565b61135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690612fa8565b60405180910390fd5b61136b84848484611de5565b50505050565b600a60009054906101000a900460ff1681565b61138c611908565b73ffffffffffffffffffffffffffffffffffffffff166113aa610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790612f08565b60405180910390fd5b600b546103e860085461141391906131bd565b11611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612ea8565b60405180910390fd5b6103e860085461146391906131bd565b600881905550565b60095481565b6007548111156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612f68565b60405180910390fd5b346114cc82600e54611e4190919063ffffffff16565b111561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612e08565b60405180910390fd5b60011515600a60009054906101000a900460ff16151514611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613008565b60405180910390fd5b60085481600b5461157491906130dc565b11156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90612fe8565b60405180910390fd5b6000600b54905060005b828110156115f3576001826115d491906130dc565b91506115e03383611dc7565b80806115eb9061330a565b9150506115bf565b5080600b819055505050565b606061160a8261189c565b611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090612f48565b60405180910390fd5b6000611653611e57565b90506000815111611673576040518060200160405280600081525061169e565b8061167d84611ee9565b60405160200161168e929190612c80565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611742611908565b73ffffffffffffffffffffffffffffffffffffffff16611760610f2f565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90612f08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90612d88565b60405180910390fd5b61182f81611d03565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661198383610ca9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119d48261189c565b611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90612e28565b60405180910390fd5b6000611a1e83610ca9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a8d57508373ffffffffffffffffffffffffffffffffffffffff16611a758461086f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a9e5750611a9d81856116a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ac782610ca9565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490612f28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490612dc8565b60405180910390fd5b611b9883838361204a565b611ba3600082611910565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bf391906131bd565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c4a91906130dc565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611de182826040518060200160405280600081525061204f565b5050565b611df0848484611aa7565b611dfc848484846120aa565b611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612d68565b60405180910390fd5b50505050565b60008183611e4f9190613163565b905092915050565b6060600d8054611e66906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e92906132a7565b8015611edf5780601f10611eb457610100808354040283529160200191611edf565b820191906000526020600020905b815481529060010190602001808311611ec257829003601f168201915b5050505050905090565b60606000821415611f31576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612045565b600082905060005b60008214611f63578080611f4c9061330a565b915050600a82611f5c9190613132565b9150611f39565b60008167ffffffffffffffff811115611f7f57611f7e613440565b5b6040519080825280601f01601f191660200182016040528015611fb15781602001600182028036833780820191505090505b5090505b6000851461203e57600182611fca91906131bd565b9150600a85611fd99190613353565b6030611fe591906130dc565b60f81b818381518110611ffb57611ffa613411565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120379190613132565b9450611fb5565b8093505050505b919050565b505050565b6120598383612241565b61206660008484846120aa565b6120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90612d68565b60405180910390fd5b505050565b60006120cb8473ffffffffffffffffffffffffffffffffffffffff1661240f565b15612234578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f4611908565b8786866040518563ffffffff1660e01b81526004016121169493929190612cbf565b602060405180830381600087803b15801561213057600080fd5b505af192505050801561216157506040513d601f19601f8201168201806040525081019061215e91906127e4565b60015b6121e4573d8060008114612191576040519150601f19603f3d011682016040523d82523d6000602084013e612196565b606091505b506000815114156121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390612d68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612239565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890612ec8565b60405180910390fd5b6122ba8161189c565b156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190612da8565b60405180910390fd5b6123066000838361204a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235691906130dc565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461242e906132a7565b90600052602060002090601f0160209004810192826124505760008555612497565b82601f1061246957803560ff1916838001178555612497565b82800160010185558215612497579182015b8281111561249657823582559160200191906001019061247b565b5b5090506124a491906124a8565b5090565b5b808211156124c15760008160009055506001016124a9565b5090565b60006124d86124d384613068565b613043565b9050828152602081018484840111156124f4576124f361347e565b5b6124ff848285613265565b509392505050565b60008135905061251681613a15565b92915050565b60008135905061252b81613a2c565b92915050565b60008135905061254081613a43565b92915050565b60008151905061255581613a43565b92915050565b600082601f8301126125705761256f613474565b5b81356125808482602086016124c5565b91505092915050565b60008083601f84011261259f5761259e613474565b5b8235905067ffffffffffffffff8111156125bc576125bb61346f565b5b6020830191508360018202830111156125d8576125d7613479565b5b9250929050565b6000813590506125ee81613a5a565b92915050565b60006020828403121561260a57612609613488565b5b600061261884828501612507565b91505092915050565b6000806040838503121561263857612637613488565b5b600061264685828601612507565b925050602061265785828601612507565b9150509250929050565b60008060006060848603121561267a57612679613488565b5b600061268886828701612507565b935050602061269986828701612507565b92505060406126aa868287016125df565b9150509250925092565b600080600080608085870312156126ce576126cd613488565b5b60006126dc87828801612507565b94505060206126ed87828801612507565b93505060406126fe878288016125df565b925050606085013567ffffffffffffffff81111561271f5761271e613483565b5b61272b8782880161255b565b91505092959194509250565b6000806040838503121561274e5761274d613488565b5b600061275c85828601612507565b925050602061276d8582860161251c565b9150509250929050565b6000806040838503121561278e5761278d613488565b5b600061279c85828601612507565b92505060206127ad858286016125df565b9150509250929050565b6000602082840312156127cd576127cc613488565b5b60006127db84828501612531565b91505092915050565b6000602082840312156127fa576127f9613488565b5b600061280884828501612546565b91505092915050565b6000806020838503121561282857612827613488565b5b600083013567ffffffffffffffff81111561284657612845613483565b5b61285285828601612589565b92509250509250929050565b60006020828403121561287457612873613488565b5b6000612882848285016125df565b91505092915050565b612894816131f1565b82525050565b6128a381613203565b82525050565b60006128b482613099565b6128be81856130af565b93506128ce818560208601613274565b6128d78161348d565b840191505092915050565b60006128ed826130a4565b6128f781856130c0565b9350612907818560208601613274565b6129108161348d565b840191505092915050565b6000612926826130a4565b61293081856130d1565b9350612940818560208601613274565b80840191505092915050565b6000612959601c836130c0565b91506129648261349e565b602082019050919050565b600061297c6032836130c0565b9150612987826134c7565b604082019050919050565b600061299f6026836130c0565b91506129aa82613516565b604082019050919050565b60006129c2601c836130c0565b91506129cd82613565565b602082019050919050565b60006129e56024836130c0565b91506129f08261358e565b604082019050919050565b6000612a086019836130c0565b9150612a13826135dd565b602082019050919050565b6000612a2b601f836130c0565b9150612a3682613606565b602082019050919050565b6000612a4e602c836130c0565b9150612a598261362f565b604082019050919050565b6000612a716038836130c0565b9150612a7c8261367e565b604082019050919050565b6000612a94602a836130c0565b9150612a9f826136cd565b604082019050919050565b6000612ab76029836130c0565b9150612ac28261371c565b604082019050919050565b6000612ada601a836130c0565b9150612ae58261376b565b602082019050919050565b6000612afd6020836130c0565b9150612b0882613794565b602082019050919050565b6000612b20602c836130c0565b9150612b2b826137bd565b604082019050919050565b6000612b436020836130c0565b9150612b4e8261380c565b602082019050919050565b6000612b666029836130c0565b9150612b7182613835565b604082019050919050565b6000612b89602f836130c0565b9150612b9482613884565b604082019050919050565b6000612bac6013836130c0565b9150612bb7826138d3565b602082019050919050565b6000612bcf6021836130c0565b9150612bda826138fc565b604082019050919050565b6000612bf26031836130c0565b9150612bfd8261394b565b604082019050919050565b6000612c156014836130c0565b9150612c208261399a565b602082019050919050565b6000612c38600e836130c0565b9150612c43826139c3565b602082019050919050565b6000612c5b600f836130c0565b9150612c66826139ec565b602082019050919050565b612c7a8161325b565b82525050565b6000612c8c828561291b565b9150612c98828461291b565b91508190509392505050565b6000602082019050612cb9600083018461288b565b92915050565b6000608082019050612cd4600083018761288b565b612ce1602083018661288b565b612cee6040830185612c71565b8181036060830152612d0081846128a9565b905095945050505050565b6000602082019050612d20600083018461289a565b92915050565b60006020820190508181036000830152612d4081846128e2565b905092915050565b60006020820190508181036000830152612d618161294c565b9050919050565b60006020820190508181036000830152612d818161296f565b9050919050565b60006020820190508181036000830152612da181612992565b9050919050565b60006020820190508181036000830152612dc1816129b5565b9050919050565b60006020820190508181036000830152612de1816129d8565b9050919050565b60006020820190508181036000830152612e01816129fb565b9050919050565b60006020820190508181036000830152612e2181612a1e565b9050919050565b60006020820190508181036000830152612e4181612a41565b9050919050565b60006020820190508181036000830152612e6181612a64565b9050919050565b60006020820190508181036000830152612e8181612a87565b9050919050565b60006020820190508181036000830152612ea181612aaa565b9050919050565b60006020820190508181036000830152612ec181612acd565b9050919050565b60006020820190508181036000830152612ee181612af0565b9050919050565b60006020820190508181036000830152612f0181612b13565b9050919050565b60006020820190508181036000830152612f2181612b36565b9050919050565b60006020820190508181036000830152612f4181612b59565b9050919050565b60006020820190508181036000830152612f6181612b7c565b9050919050565b60006020820190508181036000830152612f8181612b9f565b9050919050565b60006020820190508181036000830152612fa181612bc2565b9050919050565b60006020820190508181036000830152612fc181612be5565b9050919050565b60006020820190508181036000830152612fe181612c08565b9050919050565b6000602082019050818103600083015261300181612c2b565b9050919050565b6000602082019050818103600083015261302181612c4e565b9050919050565b600060208201905061303d6000830184612c71565b92915050565b600061304d61305e565b905061305982826132d9565b919050565b6000604051905090565b600067ffffffffffffffff82111561308357613082613440565b5b61308c8261348d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130e78261325b565b91506130f28361325b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561312757613126613384565b5b828201905092915050565b600061313d8261325b565b91506131488361325b565b925082613158576131576133b3565b5b828204905092915050565b600061316e8261325b565b91506131798361325b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b2576131b1613384565b5b828202905092915050565b60006131c88261325b565b91506131d38361325b565b9250828210156131e6576131e5613384565b5b828203905092915050565b60006131fc8261323b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613292578082015181840152602081019050613277565b838111156132a1576000848401525b50505050565b600060028204905060018216806132bf57607f821691505b602082108114156132d3576132d26133e2565b5b50919050565b6132e28261348d565b810181811067ffffffffffffffff8211171561330157613300613440565b5b80604052505050565b60006133158261325b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561334857613347613384565b5b600182019050919050565b600061335e8261325b565b91506133698361325b565b925082613379576133786133b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f467265652063617420697320616c726561647920636c61696d65642100000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742072656475636520737570706c794c696d69742e000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f696e76616c696420746f6b656e20636f756e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4672656520737570706c79206973206f76657221000000000000000000000000600082015250565b7f537570706c792072656163686564000000000000000000000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613a1e816131f1565b8114613a2957600080fd5b50565b613a3581613203565b8114613a4057600080fd5b50565b613a4c8161320f565b8114613a5757600080fd5b50565b613a638161325b565b8114613a6e57600080fd5b5056fea2646970667358221220158f202e2cdabb9d0ed164d74614532e2e86fb420e6d03830e76cdb343dda10e64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a436f6f6c506978656c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a434f4f4c504958454c5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d593769716a76377072526b6778643756717246586473777579683456513975696579383879783642554876432f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063c0a44f8911610064578063c0a44f891461063c578063c87b56dd14610658578063e985e9c514610695578063f2fde38b146106d2576101d8565b8063b88d4fde146105a6578063bc8893b4146105cf578063bd71f922146105fa578063be905c4014610611576101d8565b806395d89b41116100d157806395d89b4114610512578063a22cb4651461053d578063a2b40d1914610566578063a968353f1461058f576101d8565b806370a0823114610468578063715018a6146104a55780637ff9b596146104bc5780638da5cb5b146104e7576101d8565b806323b872dd1161017a5780634b980d67116101495780634b980d67146103ac57806355f804b3146103d75780636352211e146104005780636c0360eb1461043d576101d8565b806323b872dd1461031857806324a6ab0c146103415780633ccfd60b1461036c57806342842e0e14610383576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780630c894cfe146102ab57806318160ddd146102c257806319d1997a146102ed576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906127b7565b6106fb565b6040516102119190612d0b565b60405180910390f35b34801561022657600080fd5b5061022f6107dd565b60405161023c9190612d26565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061285e565b61086f565b6040516102799190612ca4565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612777565b6108f4565b005b3480156102b757600080fd5b506102c0610a0c565b005b3480156102ce57600080fd5b506102d7610ab4565b6040516102e49190613028565b60405180910390f35b3480156102f957600080fd5b50610302610aba565b60405161030f9190613028565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612661565b610ac0565b005b34801561034d57600080fd5b50610356610b20565b6040516103639190613028565b60405180910390f35b34801561037857600080fd5b50610381610b26565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190612661565b610bf1565b005b3480156103b857600080fd5b506103c1610c11565b6040516103ce9190613028565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612811565b610c17565b005b34801561040c57600080fd5b506104276004803603810190610422919061285e565b610ca9565b6040516104349190612ca4565b60405180910390f35b34801561044957600080fd5b50610452610d5b565b60405161045f9190612d26565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906125f4565b610de9565b60405161049c9190613028565b60405180910390f35b3480156104b157600080fd5b506104ba610ea1565b005b3480156104c857600080fd5b506104d1610f29565b6040516104de9190613028565b60405180910390f35b3480156104f357600080fd5b506104fc610f2f565b6040516105099190612ca4565b60405180910390f35b34801561051e57600080fd5b50610527610f58565b6040516105349190612d26565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190612737565b610fea565b005b34801561057257600080fd5b5061058d6004803603810190610588919061285e565b61116b565b005b34801561059b57600080fd5b506105a46111f1565b005b3480156105b257600080fd5b506105cd60048036038101906105c891906126b4565b61130f565b005b3480156105db57600080fd5b506105e4611371565b6040516105f19190612d0b565b60405180910390f35b34801561060657600080fd5b5061060f611384565b005b34801561061d57600080fd5b5061062661146b565b6040516106339190613028565b60405180910390f35b6106566004803603810190610651919061285e565b611471565b005b34801561066457600080fd5b5061067f600480360381019061067a919061285e565b6115ff565b60405161068c9190612d26565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612621565b6116a6565b6040516106c99190612d0b565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906125f4565b61173a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d657506107d582611832565b5b9050919050565b6060600180546107ec906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610818906132a7565b80156108655780601f1061083a57610100808354040283529160200191610865565b820191906000526020600020905b81548152906001019060200180831161084857829003601f168201915b5050505050905090565b600061087a8261189c565b6108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612ee8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ff82610ca9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096790612f88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661098f611908565b73ffffffffffffffffffffffffffffffffffffffff1614806109be57506109bd816109b8611908565b6116a6565b5b6109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490612e48565b60405180910390fd5b610a078383611910565b505050565b610a14611908565b73ffffffffffffffffffffffffffffffffffffffff16610a32610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90612f08565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b600b5481565b60085481565b610ad1610acb611908565b826119c9565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790612fa8565b60405180910390fd5b610b1b838383611aa7565b505050565b600c5481565b610b2e611908565b73ffffffffffffffffffffffffffffffffffffffff16610b4c610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612f08565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bed573d6000803e3d6000fd5b5050565b610c0c8383836040518060200160405280600081525061130f565b505050565b60075481565b610c1f611908565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90612f08565b60405180910390fd5b8181600d9190610ca4929190612422565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990612e88565b60405180910390fd5b80915050919050565b600d8054610d68906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d94906132a7565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190612e68565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea9611908565b73ffffffffffffffffffffffffffffffffffffffff16610ec7610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490612f08565b60405180910390fd5b610f276000611d03565b565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f67906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f93906132a7565b8015610fe05780601f10610fb557610100808354040283529160200191610fe0565b820191906000526020600020905b815481529060010190602001808311610fc357829003601f168201915b5050505050905090565b610ff2611908565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790612de8565b60405180910390fd5b806006600061106d611908565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661111a611908565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161115f9190612d0b565b60405180910390a35050565b611173611908565b73ffffffffffffffffffffffffffffffffffffffff16611191610f2f565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612f08565b60405180910390fd5b80600e8190555050565b600954600c541115611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612fc8565b60405180910390fd5b60011515600a60009054906101000a900460ff1615151461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613008565b60405180910390fd5b60018061129a33610de9565b6112a491906130dc565b11156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90612d48565b60405180910390fd5b6000600c5490506001816112f991906130dc565b90506113053382611dc7565b80600c8190555050565b61132061131a611908565b836119c9565b61135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690612fa8565b60405180910390fd5b61136b84848484611de5565b50505050565b600a60009054906101000a900460ff1681565b61138c611908565b73ffffffffffffffffffffffffffffffffffffffff166113aa610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790612f08565b60405180910390fd5b600b546103e860085461141391906131bd565b11611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612ea8565b60405180910390fd5b6103e860085461146391906131bd565b600881905550565b60095481565b6007548111156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612f68565b60405180910390fd5b346114cc82600e54611e4190919063ffffffff16565b111561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612e08565b60405180910390fd5b60011515600a60009054906101000a900460ff16151514611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613008565b60405180910390fd5b60085481600b5461157491906130dc565b11156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90612fe8565b60405180910390fd5b6000600b54905060005b828110156115f3576001826115d491906130dc565b91506115e03383611dc7565b80806115eb9061330a565b9150506115bf565b5080600b819055505050565b606061160a8261189c565b611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090612f48565b60405180910390fd5b6000611653611e57565b90506000815111611673576040518060200160405280600081525061169e565b8061167d84611ee9565b60405160200161168e929190612c80565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611742611908565b73ffffffffffffffffffffffffffffffffffffffff16611760610f2f565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90612f08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90612d88565b60405180910390fd5b61182f81611d03565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661198383610ca9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119d48261189c565b611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90612e28565b60405180910390fd5b6000611a1e83610ca9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a8d57508373ffffffffffffffffffffffffffffffffffffffff16611a758461086f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a9e5750611a9d81856116a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ac782610ca9565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490612f28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490612dc8565b60405180910390fd5b611b9883838361204a565b611ba3600082611910565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bf391906131bd565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c4a91906130dc565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611de182826040518060200160405280600081525061204f565b5050565b611df0848484611aa7565b611dfc848484846120aa565b611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612d68565b60405180910390fd5b50505050565b60008183611e4f9190613163565b905092915050565b6060600d8054611e66906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e92906132a7565b8015611edf5780601f10611eb457610100808354040283529160200191611edf565b820191906000526020600020905b815481529060010190602001808311611ec257829003601f168201915b5050505050905090565b60606000821415611f31576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612045565b600082905060005b60008214611f63578080611f4c9061330a565b915050600a82611f5c9190613132565b9150611f39565b60008167ffffffffffffffff811115611f7f57611f7e613440565b5b6040519080825280601f01601f191660200182016040528015611fb15781602001600182028036833780820191505090505b5090505b6000851461203e57600182611fca91906131bd565b9150600a85611fd99190613353565b6030611fe591906130dc565b60f81b818381518110611ffb57611ffa613411565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120379190613132565b9450611fb5565b8093505050505b919050565b505050565b6120598383612241565b61206660008484846120aa565b6120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90612d68565b60405180910390fd5b505050565b60006120cb8473ffffffffffffffffffffffffffffffffffffffff1661240f565b15612234578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f4611908565b8786866040518563ffffffff1660e01b81526004016121169493929190612cbf565b602060405180830381600087803b15801561213057600080fd5b505af192505050801561216157506040513d601f19601f8201168201806040525081019061215e91906127e4565b60015b6121e4573d8060008114612191576040519150601f19603f3d011682016040523d82523d6000602084013e612196565b606091505b506000815114156121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390612d68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612239565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890612ec8565b60405180910390fd5b6122ba8161189c565b156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190612da8565b60405180910390fd5b6123066000838361204a565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461235691906130dc565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461242e906132a7565b90600052602060002090601f0160209004810192826124505760008555612497565b82601f1061246957803560ff1916838001178555612497565b82800160010185558215612497579182015b8281111561249657823582559160200191906001019061247b565b5b5090506124a491906124a8565b5090565b5b808211156124c15760008160009055506001016124a9565b5090565b60006124d86124d384613068565b613043565b9050828152602081018484840111156124f4576124f361347e565b5b6124ff848285613265565b509392505050565b60008135905061251681613a15565b92915050565b60008135905061252b81613a2c565b92915050565b60008135905061254081613a43565b92915050565b60008151905061255581613a43565b92915050565b600082601f8301126125705761256f613474565b5b81356125808482602086016124c5565b91505092915050565b60008083601f84011261259f5761259e613474565b5b8235905067ffffffffffffffff8111156125bc576125bb61346f565b5b6020830191508360018202830111156125d8576125d7613479565b5b9250929050565b6000813590506125ee81613a5a565b92915050565b60006020828403121561260a57612609613488565b5b600061261884828501612507565b91505092915050565b6000806040838503121561263857612637613488565b5b600061264685828601612507565b925050602061265785828601612507565b9150509250929050565b60008060006060848603121561267a57612679613488565b5b600061268886828701612507565b935050602061269986828701612507565b92505060406126aa868287016125df565b9150509250925092565b600080600080608085870312156126ce576126cd613488565b5b60006126dc87828801612507565b94505060206126ed87828801612507565b93505060406126fe878288016125df565b925050606085013567ffffffffffffffff81111561271f5761271e613483565b5b61272b8782880161255b565b91505092959194509250565b6000806040838503121561274e5761274d613488565b5b600061275c85828601612507565b925050602061276d8582860161251c565b9150509250929050565b6000806040838503121561278e5761278d613488565b5b600061279c85828601612507565b92505060206127ad858286016125df565b9150509250929050565b6000602082840312156127cd576127cc613488565b5b60006127db84828501612531565b91505092915050565b6000602082840312156127fa576127f9613488565b5b600061280884828501612546565b91505092915050565b6000806020838503121561282857612827613488565b5b600083013567ffffffffffffffff81111561284657612845613483565b5b61285285828601612589565b92509250509250929050565b60006020828403121561287457612873613488565b5b6000612882848285016125df565b91505092915050565b612894816131f1565b82525050565b6128a381613203565b82525050565b60006128b482613099565b6128be81856130af565b93506128ce818560208601613274565b6128d78161348d565b840191505092915050565b60006128ed826130a4565b6128f781856130c0565b9350612907818560208601613274565b6129108161348d565b840191505092915050565b6000612926826130a4565b61293081856130d1565b9350612940818560208601613274565b80840191505092915050565b6000612959601c836130c0565b91506129648261349e565b602082019050919050565b600061297c6032836130c0565b9150612987826134c7565b604082019050919050565b600061299f6026836130c0565b91506129aa82613516565b604082019050919050565b60006129c2601c836130c0565b91506129cd82613565565b602082019050919050565b60006129e56024836130c0565b91506129f08261358e565b604082019050919050565b6000612a086019836130c0565b9150612a13826135dd565b602082019050919050565b6000612a2b601f836130c0565b9150612a3682613606565b602082019050919050565b6000612a4e602c836130c0565b9150612a598261362f565b604082019050919050565b6000612a716038836130c0565b9150612a7c8261367e565b604082019050919050565b6000612a94602a836130c0565b9150612a9f826136cd565b604082019050919050565b6000612ab76029836130c0565b9150612ac28261371c565b604082019050919050565b6000612ada601a836130c0565b9150612ae58261376b565b602082019050919050565b6000612afd6020836130c0565b9150612b0882613794565b602082019050919050565b6000612b20602c836130c0565b9150612b2b826137bd565b604082019050919050565b6000612b436020836130c0565b9150612b4e8261380c565b602082019050919050565b6000612b666029836130c0565b9150612b7182613835565b604082019050919050565b6000612b89602f836130c0565b9150612b9482613884565b604082019050919050565b6000612bac6013836130c0565b9150612bb7826138d3565b602082019050919050565b6000612bcf6021836130c0565b9150612bda826138fc565b604082019050919050565b6000612bf26031836130c0565b9150612bfd8261394b565b604082019050919050565b6000612c156014836130c0565b9150612c208261399a565b602082019050919050565b6000612c38600e836130c0565b9150612c43826139c3565b602082019050919050565b6000612c5b600f836130c0565b9150612c66826139ec565b602082019050919050565b612c7a8161325b565b82525050565b6000612c8c828561291b565b9150612c98828461291b565b91508190509392505050565b6000602082019050612cb9600083018461288b565b92915050565b6000608082019050612cd4600083018761288b565b612ce1602083018661288b565b612cee6040830185612c71565b8181036060830152612d0081846128a9565b905095945050505050565b6000602082019050612d20600083018461289a565b92915050565b60006020820190508181036000830152612d4081846128e2565b905092915050565b60006020820190508181036000830152612d618161294c565b9050919050565b60006020820190508181036000830152612d818161296f565b9050919050565b60006020820190508181036000830152612da181612992565b9050919050565b60006020820190508181036000830152612dc1816129b5565b9050919050565b60006020820190508181036000830152612de1816129d8565b9050919050565b60006020820190508181036000830152612e01816129fb565b9050919050565b60006020820190508181036000830152612e2181612a1e565b9050919050565b60006020820190508181036000830152612e4181612a41565b9050919050565b60006020820190508181036000830152612e6181612a64565b9050919050565b60006020820190508181036000830152612e8181612a87565b9050919050565b60006020820190508181036000830152612ea181612aaa565b9050919050565b60006020820190508181036000830152612ec181612acd565b9050919050565b60006020820190508181036000830152612ee181612af0565b9050919050565b60006020820190508181036000830152612f0181612b13565b9050919050565b60006020820190508181036000830152612f2181612b36565b9050919050565b60006020820190508181036000830152612f4181612b59565b9050919050565b60006020820190508181036000830152612f6181612b7c565b9050919050565b60006020820190508181036000830152612f8181612b9f565b9050919050565b60006020820190508181036000830152612fa181612bc2565b9050919050565b60006020820190508181036000830152612fc181612be5565b9050919050565b60006020820190508181036000830152612fe181612c08565b9050919050565b6000602082019050818103600083015261300181612c2b565b9050919050565b6000602082019050818103600083015261302181612c4e565b9050919050565b600060208201905061303d6000830184612c71565b92915050565b600061304d61305e565b905061305982826132d9565b919050565b6000604051905090565b600067ffffffffffffffff82111561308357613082613440565b5b61308c8261348d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130e78261325b565b91506130f28361325b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561312757613126613384565b5b828201905092915050565b600061313d8261325b565b91506131488361325b565b925082613158576131576133b3565b5b828204905092915050565b600061316e8261325b565b91506131798361325b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b2576131b1613384565b5b828202905092915050565b60006131c88261325b565b91506131d38361325b565b9250828210156131e6576131e5613384565b5b828203905092915050565b60006131fc8261323b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613292578082015181840152602081019050613277565b838111156132a1576000848401525b50505050565b600060028204905060018216806132bf57607f821691505b602082108114156132d3576132d26133e2565b5b50919050565b6132e28261348d565b810181811067ffffffffffffffff8211171561330157613300613440565b5b80604052505050565b60006133158261325b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561334857613347613384565b5b600182019050919050565b600061335e8261325b565b91506133698361325b565b925082613379576133786133b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f467265652063617420697320616c726561647920636c61696d65642100000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742072656475636520737570706c794c696d69742e000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f696e76616c696420746f6b656e20636f756e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4672656520737570706c79206973206f76657221000000000000000000000000600082015250565b7f537570706c792072656163686564000000000000000000000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b613a1e816131f1565b8114613a2957600080fd5b50565b613a3581613203565b8114613a4057600080fd5b50565b613a4c8161320f565b8114613a5757600080fd5b50565b613a638161325b565b8114613a6e57600080fd5b5056fea2646970667358221220158f202e2cdabb9d0ed164d74614532e2e86fb420e6d03830e76cdb343dda10e64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a436f6f6c506978656c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a434f4f4c504958454c5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d593769716a76377072526b6778643756717246586473777579683456513975696579383879783642554876432f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): CoolPixels
Arg [1] : symbol (string): COOLPIXELS
Arg [2] : baseURIinput (string): https://gateway.pinata.cloud/ipfs/QmY7iqjv7prRkgxd7VqrFXdswuyh4VQ9uiey88yx6BUHvC/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 436f6f6c506978656c7300000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 434f4f4c504958454c5300000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d593769716a76377072526b6778643756717246586473777579683456
Arg [10] : 513975696579383879783642554876432f000000000000000000000000000000


Deployed Bytecode Sourcemap

42652:2173:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30463:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31408:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32967:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32490:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43391:102;;;;;;;;;;;;;:::i;:::-;;42885:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42770:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33857:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42923:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44685:137;;;;;;;;;;;;;:::i;:::-;;34267:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42731:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43285:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31102:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42953:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30832:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11727:94;;;;;;;;;;;;;:::i;:::-;;42979:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11076:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31577:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33260:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43691:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44316:363;;;;;;;;;;;;;:::i;:::-;;34523:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42844:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43499:186;;;;;;;;;;;;;:::i;:::-;;42805:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43787:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31752:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33626:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11976:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30463:305;30565:4;30617:25;30602:40;;;:11;:40;;;;:105;;;;30674:33;30659:48;;;:11;:48;;;;30602:105;:158;;;;30724:36;30748:11;30724:23;:36::i;:::-;30602:158;30582:178;;30463:305;;;:::o;31408:100::-;31462:13;31495:5;31488:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31408:100;:::o;32967:221::-;33043:7;33071:16;33079:7;33071;:16::i;:::-;33063:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33156:15;:24;33172:7;33156:24;;;;;;;;;;;;;;;;;;;;;33149:31;;32967:221;;;:::o;32490:411::-;32571:13;32587:23;32602:7;32587:14;:23::i;:::-;32571:39;;32635:5;32629:11;;:2;:11;;;;32621:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32729:5;32713:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32738:37;32755:5;32762:12;:10;:12::i;:::-;32738:16;:37::i;:::-;32713:62;32691:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32872:21;32881:2;32885:7;32872:8;:21::i;:::-;32560:341;32490:411;;:::o;43391:102::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43471:16:::1;;;;;;;;;;;43470:17;43451:16;;:36;;;;;;;;;;;;;;;;;;43391:102::o:0;42885:33::-;;;;:::o;42770:30::-;;;;:::o;33857:339::-;34052:41;34071:12;:10;:12::i;:::-;34085:7;34052:18;:41::i;:::-;34044:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34160:28;34170:4;34176:2;34180:7;34160:9;:28::i;:::-;33857:339;;;:::o;42923:25::-;;;;:::o;44685:137::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44731:15:::1;44749:21;44731:39;;44787:10;44779:28;;:37;44808:7;44779:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44722:100;44685:137::o:0;34267:185::-;34405:39;34422:4;34428:2;34432:7;34405:39;;;;;;;;;;;;:16;:39::i;:::-;34267:185;;;:::o;42731:34::-;;;;:::o;43285:100::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:10:::1;;43359:7;:20;;;;;;;:::i;:::-;;43285:100:::0;;:::o;31102:239::-;31174:7;31194:13;31210:7;:16;31218:7;31210:16;;;;;;;;;;;;;;;;;;;;;31194:32;;31262:1;31245:19;;:5;:19;;;;31237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31328:5;31321:12;;;31102:239;;;:::o;42953:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30832:208::-;30904:7;30949:1;30932:19;;:5;:19;;;;30924:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31016:9;:16;31026:5;31016:16;;;;;;;;;;;;;;;;31009:23;;30832:208;;;:::o;11727:94::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11792:21:::1;11810:1;11792:9;:21::i;:::-;11727:94::o:0;42979:45::-;;;;:::o;11076:87::-;11122:7;11149:6;;;;;;;;;;;11142:13;;11076:87;:::o;31577:104::-;31633:13;31666:7;31659:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31577:104;:::o;33260:295::-;33375:12;:10;:12::i;:::-;33363:24;;:8;:24;;;;33355:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33475:8;33430:18;:32;33449:12;:10;:12::i;:::-;33430:32;;;;;;;;;;;;;;;:42;33463:8;33430:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33528:8;33499:48;;33514:12;:10;:12::i;:::-;33499:48;;;33538:8;33499:48;;;;;;:::i;:::-;;;;;;;;33260:295;;:::o;43691:90::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43767:8:::1;43754:10;:21;;;;43691:90:::0;:::o;44316:363::-;44382:15;;44368:10;;:29;;44360:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44457:4;44437:24;;:16;;;;;;;;;;;:24;;;44429:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44525:1;44520;44496:21;44506:10;44496:9;:21::i;:::-;:25;;;;:::i;:::-;:30;;44488:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44568:13;44584:10;;44568:26;;44610:1;44603:8;;;;;:::i;:::-;;;44618:28;44628:10;44640:5;44618:9;:28::i;:::-;44668:5;44655:10;:18;;;;44353:326;44316:363::o;34523:328::-;34698:41;34717:12;:10;:12::i;:::-;34731:7;34698:18;:41::i;:::-;34690:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34804:39;34818:4;34824:2;34828:7;34837:5;34804:13;:39::i;:::-;34523:328;;;;:::o;42844:36::-;;;;;;;;;;;;;:::o;43499:186::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43587:11:::1;;43580:4;43566:11;;:18;;;;:::i;:::-;:32;43552:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;43675:4;43661:11;;:18;;;;:::i;:::-;43647:11;:32;;;;43499:186::o:0;42805:34::-;;;;:::o;43787:523::-;43862:17;;43852:6;:27;;43844:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43944:9;43918:22;43933:6;43918:10;;:14;;:22;;;;:::i;:::-;:35;;43910:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44023:4;44003:24;;:16;;;;;;;;;;;:24;;;43995:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44088:11;;44077:6;44063:11;;:20;;;;:::i;:::-;44062:37;;44054:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44127:13;44143:11;;44127:27;;44171:6;44167:110;44187:6;44183:1;:10;44167:110;;;44221:1;44214:8;;;;;:::i;:::-;;;44237:28;44247:10;44259:5;44237:9;:28::i;:::-;44195:3;;;;;:::i;:::-;;;;44167:110;;;;44299:5;44285:11;:19;;;;43837:473;43787:523;:::o;31752:334::-;31825:13;31859:16;31867:7;31859;:16::i;:::-;31851:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31940:21;31964:10;:8;:10::i;:::-;31940:34;;32016:1;31998:7;31992:21;:25;:86;;;;;;;;;;;;;;;;;32044:7;32053:18;:7;:16;:18::i;:::-;32027:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31992:86;31985:93;;;31752:334;;;:::o;33626:164::-;33723:4;33747:18;:25;33766:5;33747:25;;;;;;;;;;;;;;;:35;33773:8;33747:35;;;;;;;;;;;;;;;;;;;;;;;;;33740:42;;33626:164;;;;:::o;11976:192::-;11307:12;:10;:12::i;:::-;11296:23;;:7;:5;:7::i;:::-;:23;;;11288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12085:1:::1;12065:22;;:8;:22;;;;12057:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12141:19;12151:8;12141:9;:19::i;:::-;11976:192:::0;:::o;23274:157::-;23359:4;23398:25;23383:40;;;:11;:40;;;;23376:47;;23274:157;;;:::o;36361:127::-;36426:4;36478:1;36450:30;;:7;:16;36458:7;36450:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36443:37;;36361:127;;;:::o;9811:98::-;9864:7;9891:10;9884:17;;9811:98;:::o;40343:174::-;40445:2;40418:15;:24;40434:7;40418:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40501:7;40497:2;40463:46;;40472:23;40487:7;40472:14;:23::i;:::-;40463:46;;;;;;;;;;;;40343:174;;:::o;36655:348::-;36748:4;36773:16;36781:7;36773;:16::i;:::-;36765:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36849:13;36865:23;36880:7;36865:14;:23::i;:::-;36849:39;;36918:5;36907:16;;:7;:16;;;:51;;;;36951:7;36927:31;;:20;36939:7;36927:11;:20::i;:::-;:31;;;36907:51;:87;;;;36962:32;36979:5;36986:7;36962:16;:32::i;:::-;36907:87;36899:96;;;36655:348;;;;:::o;39647:578::-;39806:4;39779:31;;:23;39794:7;39779:14;:23::i;:::-;:31;;;39771:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39889:1;39875:16;;:2;:16;;;;39867:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39945:39;39966:4;39972:2;39976:7;39945:20;:39::i;:::-;40049:29;40066:1;40070:7;40049:8;:29::i;:::-;40110:1;40091:9;:15;40101:4;40091:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40139:1;40122:9;:13;40132:2;40122:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40170:2;40151:7;:16;40159:7;40151:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40209:7;40205:2;40190:27;;40199:4;40190:27;;;;;;;;;;;;39647:578;;;:::o;12176:173::-;12232:16;12251:6;;;;;;;;;;;12232:25;;12277:8;12268:6;;:17;;;;;;;;;;;;;;;;;;12332:8;12301:40;;12322:8;12301:40;;;;;;;;;;;;12221:128;12176:173;:::o;37345:110::-;37421:26;37431:2;37435:7;37421:26;;;;;;;;;;;;:9;:26::i;:::-;37345:110;;:::o;35733:315::-;35890:28;35900:4;35906:2;35910:7;35890:9;:28::i;:::-;35937:48;35960:4;35966:2;35970:7;35979:5;35937:22;:48::i;:::-;35929:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35733:315;;;;:::o;3583:98::-;3641:7;3672:1;3668;:5;;;;:::i;:::-;3661:12;;3583:98;;;;:::o;43185:94::-;43237:13;43266:7;43259:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43185:94;:::o;7374:723::-;7430:13;7660:1;7651:5;:10;7647:53;;;7678:10;;;;;;;;;;;;;;;;;;;;;7647:53;7710:12;7725:5;7710:20;;7741:14;7766:78;7781:1;7773:4;:9;7766:78;;7799:8;;;;;:::i;:::-;;;;7830:2;7822:10;;;;;:::i;:::-;;;7766:78;;;7854:19;7886:6;7876:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7854:39;;7904:154;7920:1;7911:5;:10;7904:154;;7948:1;7938:11;;;;;:::i;:::-;;;8015:2;8007:5;:10;;;;:::i;:::-;7994:2;:24;;;;:::i;:::-;7981:39;;7964:6;7971;7964:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8044:2;8035:11;;;;;:::i;:::-;;;7904:154;;;8082:6;8068:21;;;;;7374:723;;;;:::o;42453:126::-;;;;:::o;37682:321::-;37812:18;37818:2;37822:7;37812:5;:18::i;:::-;37863:54;37894:1;37898:2;37902:7;37911:5;37863:22;:54::i;:::-;37841:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37682:321;;;:::o;41082:799::-;41237:4;41258:15;:2;:13;;;:15::i;:::-;41254:620;;;41310:2;41294:36;;;41331:12;:10;:12::i;:::-;41345:4;41351:7;41360:5;41294:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41290:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41553:1;41536:6;:13;:18;41532:272;;;41579:60;;;;;;;;;;:::i;:::-;;;;;;;;41532:272;41754:6;41748:13;41739:6;41735:2;41731:15;41724:38;41290:529;41427:41;;;41417:51;;;:6;:51;;;;41410:58;;;;;41254:620;41858:4;41851:11;;41082:799;;;;;;;:::o;38339:382::-;38433:1;38419:16;;:2;:16;;;;38411:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38492:16;38500:7;38492;:16::i;:::-;38491:17;38483:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38554:45;38583:1;38587:2;38591:7;38554:20;:45::i;:::-;38629:1;38612:9;:13;38622:2;38612:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38660:2;38641:7;:16;38649:7;38641:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38705:7;38701:2;38680:33;;38697:1;38680:33;;;;;;;;;;;;38339:382;;:::o;13175:387::-;13235:4;13443:12;13510:7;13498:20;13490:28;;13553:1;13546:4;:8;13539:15;;;13175:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;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:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:360::-;7298:3;7326:38;7358:5;7326:38;:::i;:::-;7380:70;7443:6;7438:3;7380:70;:::i;:::-;7373:77;;7459:52;7504:6;7499:3;7492:4;7485:5;7481:16;7459:52;:::i;:::-;7536:29;7558:6;7536:29;:::i;:::-;7531:3;7527:39;7520:46;;7302:270;7212:360;;;;:::o;7578:364::-;7666:3;7694:39;7727:5;7694:39;:::i;:::-;7749:71;7813:6;7808:3;7749:71;:::i;:::-;7742:78;;7829:52;7874:6;7869:3;7862:4;7855:5;7851:16;7829:52;:::i;:::-;7906:29;7928:6;7906:29;:::i;:::-;7901:3;7897:39;7890:46;;7670:272;7578:364;;;;:::o;7948:377::-;8054:3;8082:39;8115:5;8082:39;:::i;:::-;8137:89;8219:6;8214:3;8137:89;:::i;:::-;8130:96;;8235:52;8280:6;8275:3;8268:4;8261:5;8257:16;8235:52;:::i;:::-;8312:6;8307:3;8303:16;8296:23;;8058:267;7948:377;;;;:::o;8331:366::-;8473:3;8494:67;8558:2;8553:3;8494:67;:::i;:::-;8487:74;;8570:93;8659:3;8570:93;:::i;:::-;8688:2;8683:3;8679:12;8672:19;;8331:366;;;:::o;8703:::-;8845:3;8866:67;8930:2;8925:3;8866:67;:::i;:::-;8859:74;;8942:93;9031:3;8942:93;:::i;:::-;9060:2;9055:3;9051:12;9044:19;;8703:366;;;:::o;9075:::-;9217:3;9238:67;9302:2;9297:3;9238:67;:::i;:::-;9231:74;;9314:93;9403:3;9314:93;:::i;:::-;9432:2;9427:3;9423:12;9416:19;;9075:366;;;:::o;9447:::-;9589:3;9610:67;9674:2;9669:3;9610:67;:::i;:::-;9603:74;;9686:93;9775:3;9686:93;:::i;:::-;9804:2;9799:3;9795:12;9788:19;;9447:366;;;:::o;9819:::-;9961:3;9982:67;10046:2;10041:3;9982:67;:::i;:::-;9975:74;;10058:93;10147:3;10058:93;:::i;:::-;10176:2;10171:3;10167:12;10160:19;;9819:366;;;:::o;10191:::-;10333:3;10354:67;10418:2;10413:3;10354:67;:::i;:::-;10347:74;;10430:93;10519:3;10430:93;:::i;:::-;10548:2;10543:3;10539:12;10532:19;;10191:366;;;:::o;10563:::-;10705:3;10726:67;10790:2;10785:3;10726:67;:::i;:::-;10719:74;;10802:93;10891:3;10802:93;:::i;:::-;10920:2;10915:3;10911:12;10904:19;;10563:366;;;:::o;10935:::-;11077:3;11098:67;11162:2;11157:3;11098:67;:::i;:::-;11091:74;;11174:93;11263:3;11174:93;:::i;:::-;11292:2;11287:3;11283:12;11276:19;;10935:366;;;:::o;11307:::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:::-;11821:3;11842:67;11906:2;11901:3;11842:67;:::i;:::-;11835:74;;11918:93;12007:3;11918:93;:::i;:::-;12036:2;12031:3;12027:12;12020:19;;11679:366;;;:::o;12051:::-;12193:3;12214:67;12278:2;12273:3;12214:67;:::i;:::-;12207:74;;12290:93;12379:3;12290:93;:::i;:::-;12408:2;12403:3;12399:12;12392:19;;12051:366;;;:::o;12423:::-;12565:3;12586:67;12650:2;12645:3;12586:67;:::i;:::-;12579:74;;12662:93;12751:3;12662:93;:::i;:::-;12780:2;12775:3;12771:12;12764:19;;12423:366;;;:::o;12795:::-;12937:3;12958:67;13022:2;13017:3;12958:67;:::i;:::-;12951:74;;13034:93;13123:3;13034:93;:::i;:::-;13152:2;13147:3;13143:12;13136:19;;12795:366;;;:::o;13167:::-;13309:3;13330:67;13394:2;13389:3;13330:67;:::i;:::-;13323:74;;13406:93;13495:3;13406:93;:::i;:::-;13524:2;13519:3;13515:12;13508:19;;13167:366;;;:::o;13539:::-;13681:3;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13778:93;13867:3;13778:93;:::i;:::-;13896:2;13891:3;13887:12;13880:19;;13539:366;;;:::o;13911:::-;14053:3;14074:67;14138:2;14133:3;14074:67;:::i;:::-;14067:74;;14150:93;14239:3;14150:93;:::i;:::-;14268:2;14263:3;14259:12;14252:19;;13911:366;;;:::o;14283:::-;14425:3;14446:67;14510:2;14505:3;14446:67;:::i;:::-;14439:74;;14522:93;14611:3;14522:93;:::i;:::-;14640:2;14635:3;14631:12;14624:19;;14283:366;;;:::o;14655:::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:::-;15169:3;15190:67;15254:2;15249:3;15190:67;:::i;:::-;15183:74;;15266:93;15355:3;15266:93;:::i;:::-;15384:2;15379:3;15375:12;15368:19;;15027:366;;;:::o;15399:::-;15541:3;15562:67;15626:2;15621:3;15562:67;:::i;:::-;15555:74;;15638:93;15727:3;15638:93;:::i;:::-;15756:2;15751:3;15747:12;15740:19;;15399:366;;;:::o;15771:::-;15913:3;15934:67;15998:2;15993:3;15934:67;:::i;:::-;15927:74;;16010:93;16099:3;16010:93;:::i;:::-;16128:2;16123:3;16119:12;16112:19;;15771:366;;;:::o;16143:::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:::-;16657:3;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16754:93;16843:3;16754:93;:::i;:::-;16872:2;16867:3;16863:12;16856:19;;16515:366;;;:::o;16887:118::-;16974:24;16992:5;16974:24;:::i;:::-;16969:3;16962:37;16887:118;;:::o;17011:435::-;17191:3;17213:95;17304:3;17295:6;17213:95;:::i;:::-;17206:102;;17325:95;17416:3;17407:6;17325:95;:::i;:::-;17318:102;;17437:3;17430:10;;17011:435;;;;;:::o;17452:222::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17596:71;17664:1;17653:9;17649:17;17640:6;17596:71;:::i;:::-;17452:222;;;;:::o;17680:640::-;17875:4;17913:3;17902:9;17898:19;17890:27;;17927:71;17995:1;17984:9;17980:17;17971:6;17927:71;:::i;:::-;18008:72;18076:2;18065:9;18061:18;18052:6;18008:72;:::i;:::-;18090;18158:2;18147:9;18143:18;18134:6;18090:72;:::i;:::-;18209:9;18203:4;18199:20;18194:2;18183:9;18179:18;18172:48;18237:76;18308:4;18299:6;18237:76;:::i;:::-;18229:84;;17680:640;;;;;;;:::o;18326:210::-;18413:4;18451:2;18440:9;18436:18;18428:26;;18464:65;18526:1;18515:9;18511:17;18502:6;18464:65;:::i;:::-;18326:210;;;;:::o;18542:313::-;18655:4;18693:2;18682:9;18678:18;18670:26;;18742:9;18736:4;18732:20;18728:1;18717:9;18713:17;18706:47;18770:78;18843:4;18834:6;18770:78;:::i;:::-;18762:86;;18542:313;;;;:::o;18861:419::-;19027:4;19065:2;19054:9;19050:18;19042:26;;19114:9;19108:4;19104:20;19100:1;19089:9;19085:17;19078:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;18861:419;;;:::o;19286:::-;19452:4;19490:2;19479:9;19475:18;19467:26;;19539:9;19533:4;19529:20;19525:1;19514:9;19510:17;19503:47;19567:131;19693:4;19567:131;:::i;:::-;19559:139;;19286:419;;;:::o;19711:::-;19877:4;19915:2;19904:9;19900:18;19892:26;;19964:9;19958:4;19954:20;19950:1;19939:9;19935:17;19928:47;19992:131;20118:4;19992:131;:::i;:::-;19984:139;;19711:419;;;:::o;20136:::-;20302:4;20340:2;20329:9;20325:18;20317:26;;20389:9;20383:4;20379:20;20375:1;20364:9;20360:17;20353:47;20417:131;20543:4;20417:131;:::i;:::-;20409:139;;20136:419;;;:::o;20561:::-;20727:4;20765:2;20754:9;20750:18;20742:26;;20814:9;20808:4;20804:20;20800:1;20789:9;20785:17;20778:47;20842:131;20968:4;20842:131;:::i;:::-;20834:139;;20561:419;;;:::o;20986:::-;21152:4;21190:2;21179:9;21175:18;21167:26;;21239:9;21233:4;21229:20;21225:1;21214:9;21210:17;21203:47;21267:131;21393:4;21267:131;:::i;:::-;21259:139;;20986:419;;;:::o;21411:::-;21577:4;21615:2;21604:9;21600:18;21592:26;;21664:9;21658:4;21654:20;21650:1;21639:9;21635:17;21628:47;21692:131;21818:4;21692:131;:::i;:::-;21684:139;;21411:419;;;:::o;21836:::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:131;22243:4;22117:131;:::i;:::-;22109:139;;21836:419;;;:::o;22261:::-;22427:4;22465:2;22454:9;22450:18;22442:26;;22514:9;22508:4;22504:20;22500:1;22489:9;22485:17;22478:47;22542:131;22668:4;22542:131;:::i;:::-;22534:139;;22261:419;;;:::o;22686:::-;22852:4;22890:2;22879:9;22875:18;22867:26;;22939:9;22933:4;22929:20;22925:1;22914:9;22910:17;22903:47;22967:131;23093:4;22967:131;:::i;:::-;22959:139;;22686:419;;;:::o;23111:::-;23277:4;23315:2;23304:9;23300:18;23292:26;;23364:9;23358:4;23354:20;23350:1;23339:9;23335:17;23328:47;23392:131;23518:4;23392:131;:::i;:::-;23384:139;;23111:419;;;:::o;23536:::-;23702:4;23740:2;23729:9;23725:18;23717:26;;23789:9;23783:4;23779:20;23775:1;23764:9;23760:17;23753:47;23817:131;23943:4;23817:131;:::i;:::-;23809:139;;23536:419;;;:::o;23961:::-;24127:4;24165:2;24154:9;24150:18;24142:26;;24214:9;24208:4;24204:20;24200:1;24189:9;24185:17;24178:47;24242:131;24368:4;24242:131;:::i;:::-;24234:139;;23961:419;;;:::o;24386:::-;24552:4;24590:2;24579:9;24575:18;24567:26;;24639:9;24633:4;24629:20;24625:1;24614:9;24610:17;24603:47;24667:131;24793:4;24667:131;:::i;:::-;24659:139;;24386:419;;;:::o;24811:::-;24977:4;25015:2;25004:9;25000:18;24992:26;;25064:9;25058:4;25054:20;25050:1;25039:9;25035:17;25028:47;25092:131;25218:4;25092:131;:::i;:::-;25084:139;;24811:419;;;:::o;25236:::-;25402:4;25440:2;25429:9;25425:18;25417:26;;25489:9;25483:4;25479:20;25475:1;25464:9;25460:17;25453:47;25517:131;25643:4;25517:131;:::i;:::-;25509:139;;25236:419;;;:::o;25661:::-;25827:4;25865:2;25854:9;25850:18;25842:26;;25914:9;25908:4;25904:20;25900:1;25889:9;25885:17;25878:47;25942:131;26068:4;25942:131;:::i;:::-;25934:139;;25661:419;;;:::o;26086:::-;26252:4;26290:2;26279:9;26275:18;26267:26;;26339:9;26333:4;26329:20;26325:1;26314:9;26310:17;26303:47;26367:131;26493:4;26367:131;:::i;:::-;26359:139;;26086:419;;;:::o;26511:::-;26677:4;26715:2;26704:9;26700:18;26692:26;;26764:9;26758:4;26754:20;26750:1;26739:9;26735:17;26728:47;26792:131;26918:4;26792:131;:::i;:::-;26784:139;;26511:419;;;:::o;26936:::-;27102:4;27140:2;27129:9;27125:18;27117:26;;27189:9;27183:4;27179:20;27175:1;27164:9;27160:17;27153:47;27217:131;27343:4;27217:131;:::i;:::-;27209:139;;26936:419;;;:::o;27361:::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27614:9;27608:4;27604:20;27600:1;27589:9;27585:17;27578:47;27642:131;27768:4;27642:131;:::i;:::-;27634:139;;27361:419;;;:::o;27786:::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27786:419;;;:::o;28211:::-;28377:4;28415:2;28404:9;28400:18;28392:26;;28464:9;28458:4;28454:20;28450:1;28439:9;28435:17;28428:47;28492:131;28618:4;28492:131;:::i;:::-;28484:139;;28211:419;;;:::o;28636:222::-;28729:4;28767:2;28756:9;28752:18;28744:26;;28780:71;28848:1;28837:9;28833:17;28824:6;28780:71;:::i;:::-;28636:222;;;;:::o;28864:129::-;28898:6;28925:20;;:::i;:::-;28915:30;;28954:33;28982:4;28974:6;28954:33;:::i;:::-;28864:129;;;:::o;28999:75::-;29032:6;29065:2;29059:9;29049:19;;28999:75;:::o;29080:307::-;29141:4;29231:18;29223:6;29220:30;29217:56;;;29253:18;;:::i;:::-;29217:56;29291:29;29313:6;29291:29;:::i;:::-;29283:37;;29375:4;29369;29365:15;29357:23;;29080:307;;;:::o;29393:98::-;29444:6;29478:5;29472:12;29462:22;;29393:98;;;:::o;29497:99::-;29549:6;29583:5;29577:12;29567:22;;29497:99;;;:::o;29602:168::-;29685:11;29719:6;29714:3;29707:19;29759:4;29754:3;29750:14;29735:29;;29602:168;;;;:::o;29776:169::-;29860:11;29894:6;29889:3;29882:19;29934:4;29929:3;29925:14;29910:29;;29776:169;;;;:::o;29951:148::-;30053:11;30090:3;30075:18;;29951:148;;;;:::o;30105:305::-;30145:3;30164:20;30182:1;30164:20;:::i;:::-;30159:25;;30198:20;30216:1;30198:20;:::i;:::-;30193:25;;30352:1;30284:66;30280:74;30277:1;30274:81;30271:107;;;30358:18;;:::i;:::-;30271:107;30402:1;30399;30395:9;30388:16;;30105:305;;;;:::o;30416:185::-;30456:1;30473:20;30491:1;30473:20;:::i;:::-;30468:25;;30507:20;30525:1;30507:20;:::i;:::-;30502:25;;30546:1;30536:35;;30551:18;;:::i;:::-;30536:35;30593:1;30590;30586:9;30581:14;;30416:185;;;;:::o;30607:348::-;30647:7;30670:20;30688:1;30670:20;:::i;:::-;30665:25;;30704:20;30722:1;30704:20;:::i;:::-;30699:25;;30892:1;30824:66;30820:74;30817:1;30814:81;30809:1;30802:9;30795:17;30791:105;30788:131;;;30899:18;;:::i;:::-;30788:131;30947:1;30944;30940:9;30929:20;;30607:348;;;;:::o;30961:191::-;31001:4;31021:20;31039:1;31021:20;:::i;:::-;31016:25;;31055:20;31073:1;31055:20;:::i;:::-;31050:25;;31094:1;31091;31088:8;31085:34;;;31099:18;;:::i;:::-;31085:34;31144:1;31141;31137:9;31129:17;;30961:191;;;;:::o;31158:96::-;31195:7;31224:24;31242:5;31224:24;:::i;:::-;31213:35;;31158:96;;;:::o;31260:90::-;31294:7;31337:5;31330:13;31323:21;31312:32;;31260:90;;;:::o;31356:149::-;31392:7;31432:66;31425:5;31421:78;31410:89;;31356:149;;;:::o;31511:126::-;31548:7;31588:42;31581:5;31577:54;31566:65;;31511:126;;;:::o;31643:77::-;31680:7;31709:5;31698:16;;31643:77;;;:::o;31726:154::-;31810:6;31805:3;31800;31787:30;31872:1;31863:6;31858:3;31854:16;31847:27;31726:154;;;:::o;31886:307::-;31954:1;31964:113;31978:6;31975:1;31972:13;31964:113;;;32063:1;32058:3;32054:11;32048:18;32044:1;32039:3;32035:11;32028:39;32000:2;31997:1;31993:10;31988:15;;31964:113;;;32095:6;32092:1;32089:13;32086:101;;;32175:1;32166:6;32161:3;32157:16;32150:27;32086:101;31935:258;31886:307;;;:::o;32199:320::-;32243:6;32280:1;32274:4;32270:12;32260:22;;32327:1;32321:4;32317:12;32348:18;32338:81;;32404:4;32396:6;32392:17;32382:27;;32338:81;32466:2;32458:6;32455:14;32435:18;32432:38;32429:84;;;32485:18;;:::i;:::-;32429:84;32250:269;32199:320;;;:::o;32525:281::-;32608:27;32630:4;32608:27;:::i;:::-;32600:6;32596:40;32738:6;32726:10;32723:22;32702:18;32690:10;32687:34;32684:62;32681:88;;;32749:18;;:::i;:::-;32681:88;32789:10;32785:2;32778:22;32568:238;32525:281;;:::o;32812:233::-;32851:3;32874:24;32892:5;32874:24;:::i;:::-;32865:33;;32920:66;32913:5;32910:77;32907:103;;;32990:18;;:::i;:::-;32907:103;33037:1;33030:5;33026:13;33019:20;;32812:233;;;:::o;33051:176::-;33083:1;33100:20;33118:1;33100:20;:::i;:::-;33095:25;;33134:20;33152:1;33134:20;:::i;:::-;33129:25;;33173:1;33163:35;;33178:18;;:::i;:::-;33163:35;33219:1;33216;33212:9;33207:14;;33051:176;;;;:::o;33233:180::-;33281:77;33278:1;33271:88;33378:4;33375:1;33368:15;33402:4;33399:1;33392:15;33419:180;33467:77;33464:1;33457:88;33564:4;33561:1;33554:15;33588:4;33585:1;33578:15;33605:180;33653:77;33650:1;33643:88;33750:4;33747:1;33740:15;33774:4;33771:1;33764:15;33791:180;33839:77;33836:1;33829:88;33936:4;33933:1;33926:15;33960:4;33957:1;33950:15;33977:180;34025:77;34022:1;34015:88;34122:4;34119:1;34112:15;34146:4;34143:1;34136:15;34163:117;34272:1;34269;34262:12;34286:117;34395:1;34392;34385:12;34409:117;34518:1;34515;34508:12;34532:117;34641:1;34638;34631:12;34655:117;34764:1;34761;34754:12;34778:117;34887:1;34884;34877:12;34901:102;34942:6;34993:2;34989:7;34984:2;34977:5;34973:14;34969:28;34959:38;;34901:102;;;:::o;35009:178::-;35149:30;35145:1;35137:6;35133:14;35126:54;35009:178;:::o;35193:237::-;35333:34;35329:1;35321:6;35317:14;35310:58;35402:20;35397:2;35389:6;35385:15;35378:45;35193:237;:::o;35436:225::-;35576:34;35572:1;35564:6;35560:14;35553:58;35645:8;35640:2;35632:6;35628:15;35621:33;35436:225;:::o;35667:178::-;35807:30;35803:1;35795:6;35791:14;35784:54;35667:178;:::o;35851:223::-;35991:34;35987:1;35979:6;35975:14;35968:58;36060:6;36055:2;36047:6;36043:15;36036:31;35851:223;:::o;36080:175::-;36220:27;36216:1;36208:6;36204:14;36197:51;36080:175;:::o;36261:181::-;36401:33;36397:1;36389:6;36385:14;36378:57;36261:181;:::o;36448:231::-;36588:34;36584:1;36576:6;36572:14;36565:58;36657:14;36652:2;36644:6;36640:15;36633:39;36448:231;:::o;36685:243::-;36825:34;36821:1;36813:6;36809:14;36802:58;36894:26;36889:2;36881:6;36877:15;36870:51;36685:243;:::o;36934:229::-;37074:34;37070:1;37062:6;37058:14;37051:58;37143:12;37138:2;37130:6;37126:15;37119:37;36934:229;:::o;37169:228::-;37309:34;37305:1;37297:6;37293:14;37286:58;37378:11;37373:2;37365:6;37361:15;37354:36;37169:228;:::o;37403:176::-;37543:28;37539:1;37531:6;37527:14;37520:52;37403:176;:::o;37585:182::-;37725:34;37721:1;37713:6;37709:14;37702:58;37585:182;:::o;37773:231::-;37913:34;37909:1;37901:6;37897:14;37890:58;37982:14;37977:2;37969:6;37965:15;37958:39;37773:231;:::o;38010:182::-;38150:34;38146:1;38138:6;38134:14;38127:58;38010:182;:::o;38198:228::-;38338:34;38334:1;38326:6;38322:14;38315:58;38407:11;38402:2;38394:6;38390:15;38383:36;38198:228;:::o;38432:234::-;38572:34;38568:1;38560:6;38556:14;38549:58;38641:17;38636:2;38628:6;38624:15;38617:42;38432:234;:::o;38672:169::-;38812:21;38808:1;38800:6;38796:14;38789:45;38672:169;:::o;38847:220::-;38987:34;38983:1;38975:6;38971:14;38964:58;39056:3;39051:2;39043:6;39039:15;39032:28;38847:220;:::o;39073:236::-;39213:34;39209:1;39201:6;39197:14;39190:58;39282:19;39277:2;39269:6;39265:15;39258:44;39073:236;:::o;39315:170::-;39455:22;39451:1;39443:6;39439:14;39432:46;39315:170;:::o;39491:164::-;39631:16;39627:1;39619:6;39615:14;39608:40;39491:164;:::o;39661:165::-;39801:17;39797:1;39789:6;39785:14;39778:41;39661:165;:::o;39832:122::-;39905:24;39923:5;39905:24;:::i;:::-;39898:5;39895:35;39885:63;;39944:1;39941;39934:12;39885:63;39832:122;:::o;39960:116::-;40030:21;40045:5;40030:21;:::i;:::-;40023:5;40020:32;40010:60;;40066:1;40063;40056:12;40010:60;39960:116;:::o;40082:120::-;40154:23;40171:5;40154:23;:::i;:::-;40147:5;40144:34;40134:62;;40192:1;40189;40182:12;40134:62;40082:120;:::o;40208:122::-;40281:24;40299:5;40281:24;:::i;:::-;40274:5;40271:35;40261:63;;40320:1;40317;40310:12;40261:63;40208:122;:::o

Swarm Source

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