ETH Price: $3,277.81 (+0.82%)
Gas: 1 Gwei

Token

GlitchGalactic (GGT)
 

Overview

Max Total Supply

0 GGT

Holders

46

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jerrybu.eth
Balance
1 GGT
0x146521a0a24869b82b4a5aae4d8ae559d2C98e36
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:
GlitchGalactic

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: contracts/poc.sol


/**
* Glitch Galactic is a generative art project by Eliya Stein (@prettyblocks). 
*
* Each invocation is pre-rendered without any curation. 
*
* The project is free to mint for Art Blocks holders of Gravity Grid, Incantation,
* Labyrometry, and Prismatic.
*
* One mint is available per token. 
*
* If you bought your Art Blocks piece on secondary, please confirm the corresponding
* Glitch Galactic is not claimed yet by referencing the `claimed` mapping.
*
* Otherwise, you are free to mint a Glitch Galactic by calling the `mint` function.
*
* You will need to provide the tokenId of the Art Blocks piece you are claiming for,
* and the address you are minting to.
*
* You must mint from the address that owns the Art Blocks piece.
*
*/
pragma solidity ^0.8.2;




interface ARTBLOCKS {    
    function ownerOf ( uint256 tokenId ) external view returns ( address );    
}

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

    ARTBLOCKS artblocks;

    string baseURI;
    uint Counter;

    mapping(uint => bool) public claimed;

    constructor(address artblocksContract, string memory _baseURI) ERC721("GlitchGalactic", "GGT") {
        artblocks = ARTBLOCKS(artblocksContract);
        baseURI = _baseURI;
    }

    function mint(address to, uint tokenId) public payable {
        require(msg.sender == artblocks.ownerOf(tokenId), "Not the owner.");
        require(Counter <= 2323, "All out.");
        require(claimed[tokenId] == false, "Already claimed.");
        require((tokenId >= 45000000 && tokenId <= 45000080)
                || (tokenId >= 82000000 && tokenId <= 82000084)
                || (tokenId >= 127000000 && tokenId <= 127000799)
                || (tokenId >= 199000000 && tokenId <= 199000598), 
                "Invalid tokenId");

        Counter++;
        claimed[tokenId] = true;
        _safeMint(to, Counter);   
    }

    function godMint(address to) public onlyOwner {
        require(Counter <= 2323, "All out.");

        Counter++;
        _safeMint(to, Counter);       
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "Token doesn't exist.");

        return string(abi.encodePacked(baseURI, tokenId.toString()));
    }

    function updateTokenURI(string memory newURI) public onlyOwner {
        baseURI = newURI;
    }

    receive() external payable { }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"artblocksContract","type":"address"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"godMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"string","name":"newURI","type":"string"}],"name":"updateTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003b2938038062003b2983398181016040528101906200003791906200036c565b6040518060400160405280600e81526020017f476c6974636847616c61637469630000000000000000000000000000000000008152506040518060400160405280600381526020017f47475400000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000227565b508060019080519060200190620000d492919062000227565b505050620000f7620000eb6200015960201b60201c565b6200016160201b60201c565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600890805190602001906200015092919062000227565b505050620005a4565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000235906200049b565b90600052602060002090601f016020900481019282620002595760008555620002a5565b82601f106200027457805160ff1916838001178555620002a5565b82800160010185558215620002a5579182015b82811115620002a457825182559160200191906001019062000287565b5b509050620002b49190620002b8565b5090565b5b80821115620002d3576000816000905550600101620002b9565b5090565b6000620002ee620002e884620003fb565b620003d2565b9050828152602081018484840111156200030d576200030c6200056a565b5b6200031a84828562000465565b509392505050565b60008151905062000333816200058a565b92915050565b600082601f83011262000351576200035062000565565b5b815162000363848260208601620002d7565b91505092915050565b6000806040838503121562000386576200038562000574565b5b6000620003968582860162000322565b925050602083015167ffffffffffffffff811115620003ba57620003b96200056f565b5b620003c88582860162000339565b9150509250929050565b6000620003de620003f1565b9050620003ec8282620004d1565b919050565b6000604051905090565b600067ffffffffffffffff82111562000419576200041862000536565b5b620004248262000579565b9050602081019050919050565b60006200043e8262000445565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200048557808201518184015260208101905062000468565b8381111562000495576000848401525b50505050565b60006002820490506001821680620004b457607f821691505b60208210811415620004cb57620004ca62000507565b5b50919050565b620004dc8262000579565b810181811067ffffffffffffffff82111715620004fe57620004fd62000536565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005958162000431565b8114620005a157600080fd5b50565b61357580620005b46000396000f3fe60806040526004361061012e5760003560e01c806370a08231116100ab578063a22cb4651161006f578063a22cb465146103c6578063b88d4fde146103ef578063c87b56dd14610418578063dbe7e3bd14610455578063e985e9c514610492578063f2fde38b146104cf57610135565b806370a08231146102f3578063715018a6146103305780638da5cb5b1461034757806395d89b411461037257806398cd61531461039d57610135565b80633ccfd60b116100f25780633ccfd60b1461023157806340c10f191461024857806342842e0e146102645780634ac7bc431461028d5780636352211e146102b657610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806323b872dd1461020857610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612392565b6104f8565b60405161016e91906128f8565b60405180910390f35b34801561018357600080fd5b5061018c6105da565b6040516101999190612913565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612435565b61066c565b6040516101d69190612891565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190612352565b6106f1565b005b34801561021457600080fd5b5061022f600480360381019061022a919061223c565b610809565b005b34801561023d57600080fd5b50610246610869565b005b610262600480360381019061025d9190612352565b61092e565b005b34801561027057600080fd5b5061028b6004803603810190610286919061223c565b610bfc565b005b34801561029957600080fd5b506102b460048036038101906102af91906121a2565b610c1c565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612435565b610d06565b6040516102ea9190612891565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906121a2565b610db8565b6040516103279190612bb5565b60405180910390f35b34801561033c57600080fd5b50610345610e70565b005b34801561035357600080fd5b5061035c610ef8565b6040516103699190612891565b60405180910390f35b34801561037e57600080fd5b50610387610f22565b6040516103949190612913565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906123ec565b610fb4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612312565b61104a565b005b3480156103fb57600080fd5b506104166004803603810190610411919061228f565b611060565b005b34801561042457600080fd5b5061043f600480360381019061043a9190612435565b6110c2565b60405161044c9190612913565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190612435565b61113e565b60405161048991906128f8565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906121fc565b61115e565b6040516104c691906128f8565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906121a2565b6111f2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d357506105d2826112ea565b5b9050919050565b6060600080546105e990612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461061590612e20565b80156106625780601f1061063757610100808354040283529160200191610662565b820191906000526020600020905b81548152906001019060200180831161064557829003601f168201915b5050505050905090565b600061067782611354565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90612ad5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106fc82610d06565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490612b35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078c6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba816107b56113c0565b61115e565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612a55565b60405180910390fd5b61080483836113c8565b505050565b61081a6108146113c0565b82611481565b610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090612b75565b60405180910390fd5b61086483838361155f565b505050565b6108716113c0565b73ffffffffffffffffffffffffffffffffffffffff1661088f610ef8565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90612af5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561092b573d6000803e3d6000fd5b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016109899190612bb5565b60206040518083038186803b1580156109a157600080fd5b505afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906121cf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90612b95565b60405180910390fd5b6109136009541115610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490612975565b60405180910390fd5b60001515600a600083815260200190815260200160002060009054906101000a900460ff16151514610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90612a35565b60405180910390fd5b6302aea5408110158015610b0c57506302aea5908111155b80610b2b57506304e338808110158015610b2a57506304e338d48111155b5b80610b4a5750630791ddc08110158015610b495750630791e0df8111155b5b80610b695750630bdc7fc08110158015610b685750630bdc82168111155b5b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f906129f5565b60405180910390fd5b60096000815480929190610bbb90612e83565b91905055506001600a600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610bf8826009546117bb565b5050565b610c1783838360405180602001604052806000815250611060565b505050565b610c246113c0565b73ffffffffffffffffffffffffffffffffffffffff16610c42610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612af5565b60405180910390fd5b6109136009541115610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612975565b60405180910390fd5b60096000815480929190610cf290612e83565b9190505550610d03816009546117bb565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690612a95565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612a75565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e786113c0565b73ffffffffffffffffffffffffffffffffffffffff16610e96610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390612af5565b60405180910390fd5b610ef660006117d9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f3190612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5d90612e20565b8015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b5050505050905090565b610fbc6113c0565b73ffffffffffffffffffffffffffffffffffffffff16610fda610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790612af5565b60405180910390fd5b8060089080519060200190611046929190611fa1565b5050565b61105c6110556113c0565b838361189f565b5050565b61107161106b6113c0565b83611481565b6110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790612b75565b60405180910390fd5b6110bc84848484611a0c565b50505050565b60606110cd82611354565b61110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612b55565b60405180910390fd5b600861111783611a68565b60405160200161112892919061286d565b6040516020818303038152906040529050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111fa6113c0565b73ffffffffffffffffffffffffffffffffffffffff16611218610ef8565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590612955565b60405180910390fd5b6112e7816117d9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661143b83610d06565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061148c82611354565b6114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290612a15565b60405180910390fd5b60006114d683610d06565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061154557508373ffffffffffffffffffffffffffffffffffffffff1661152d8461066c565b73ffffffffffffffffffffffffffffffffffffffff16145b806115565750611555818561115e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661157f82610d06565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90612b15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906129b5565b60405180910390fd5b611650838383611bc9565b61165b6000826113c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ab9190612d36565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117029190612caf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6117d5828260405180602001604052806000815250611bce565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561190e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611905906129d5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ff91906128f8565b60405180910390a3505050565b611a1784848461155f565b611a2384848484611c29565b611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5990612935565b60405180910390fd5b50505050565b60606000821415611ab0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bc4565b600082905060005b60008214611ae2578080611acb90612e83565b915050600a82611adb9190612d05565b9150611ab8565b60008167ffffffffffffffff811115611afe57611afd612fb9565b5b6040519080825280601f01601f191660200182016040528015611b305781602001600182028036833780820191505090505b5090505b60008514611bbd57600182611b499190612d36565b9150600a85611b589190612ecc565b6030611b649190612caf565b60f81b818381518110611b7a57611b79612f8a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bb69190612d05565b9450611b34565b8093505050505b919050565b505050565b611bd88383611dc0565b611be56000848484611c29565b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90612935565b60405180910390fd5b505050565b6000611c4a8473ffffffffffffffffffffffffffffffffffffffff16611f8e565b15611db3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c736113c0565b8786866040518563ffffffff1660e01b8152600401611c9594939291906128ac565b602060405180830381600087803b158015611caf57600080fd5b505af1925050508015611ce057506040513d601f19601f82011682018060405250810190611cdd91906123bf565b60015b611d63573d8060008114611d10576040519150601f19603f3d011682016040523d82523d6000602084013e611d15565b606091505b50600081511415611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290612935565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611db8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790612ab5565b60405180910390fd5b611e3981611354565b15611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090612995565b60405180910390fd5b611e8560008383611bc9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed59190612caf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054611fad90612e20565b90600052602060002090601f016020900481019282611fcf5760008555612016565b82601f10611fe857805160ff1916838001178555612016565b82800160010185558215612016579182015b82811115612015578251825591602001919060010190611ffa565b5b5090506120239190612027565b5090565b5b80821115612040576000816000905550600101612028565b5090565b600061205761205284612bf5565b612bd0565b90508281526020810184848401111561207357612072612fed565b5b61207e848285612dde565b509392505050565b600061209961209484612c26565b612bd0565b9050828152602081018484840111156120b5576120b4612fed565b5b6120c0848285612dde565b509392505050565b6000813590506120d7816134e3565b92915050565b6000815190506120ec816134e3565b92915050565b600081359050612101816134fa565b92915050565b60008135905061211681613511565b92915050565b60008151905061212b81613511565b92915050565b600082601f83011261214657612145612fe8565b5b8135612156848260208601612044565b91505092915050565b600082601f83011261217457612173612fe8565b5b8135612184848260208601612086565b91505092915050565b60008135905061219c81613528565b92915050565b6000602082840312156121b8576121b7612ff7565b5b60006121c6848285016120c8565b91505092915050565b6000602082840312156121e5576121e4612ff7565b5b60006121f3848285016120dd565b91505092915050565b6000806040838503121561221357612212612ff7565b5b6000612221858286016120c8565b9250506020612232858286016120c8565b9150509250929050565b60008060006060848603121561225557612254612ff7565b5b6000612263868287016120c8565b9350506020612274868287016120c8565b92505060406122858682870161218d565b9150509250925092565b600080600080608085870312156122a9576122a8612ff7565b5b60006122b7878288016120c8565b94505060206122c8878288016120c8565b93505060406122d98782880161218d565b925050606085013567ffffffffffffffff8111156122fa576122f9612ff2565b5b61230687828801612131565b91505092959194509250565b6000806040838503121561232957612328612ff7565b5b6000612337858286016120c8565b9250506020612348858286016120f2565b9150509250929050565b6000806040838503121561236957612368612ff7565b5b6000612377858286016120c8565b92505060206123888582860161218d565b9150509250929050565b6000602082840312156123a8576123a7612ff7565b5b60006123b684828501612107565b91505092915050565b6000602082840312156123d5576123d4612ff7565b5b60006123e38482850161211c565b91505092915050565b60006020828403121561240257612401612ff7565b5b600082013567ffffffffffffffff8111156124205761241f612ff2565b5b61242c8482850161215f565b91505092915050565b60006020828403121561244b5761244a612ff7565b5b60006124598482850161218d565b91505092915050565b61246b81612d6a565b82525050565b61247a81612d7c565b82525050565b600061248b82612c6c565b6124958185612c82565b93506124a5818560208601612ded565b6124ae81612ffc565b840191505092915050565b60006124c482612c77565b6124ce8185612c93565b93506124de818560208601612ded565b6124e781612ffc565b840191505092915050565b60006124fd82612c77565b6125078185612ca4565b9350612517818560208601612ded565b80840191505092915050565b6000815461253081612e20565b61253a8186612ca4565b94506001821660008114612555576001811461256657612599565b60ff19831686528186019350612599565b61256f85612c57565b60005b8381101561259157815481890152600182019150602081019050612572565b838801955050505b50505092915050565b60006125af603283612c93565b91506125ba8261300d565b604082019050919050565b60006125d2602683612c93565b91506125dd8261305c565b604082019050919050565b60006125f5600883612c93565b9150612600826130ab565b602082019050919050565b6000612618601c83612c93565b9150612623826130d4565b602082019050919050565b600061263b602483612c93565b9150612646826130fd565b604082019050919050565b600061265e601983612c93565b91506126698261314c565b602082019050919050565b6000612681600f83612c93565b915061268c82613175565b602082019050919050565b60006126a4602c83612c93565b91506126af8261319e565b604082019050919050565b60006126c7601083612c93565b91506126d2826131ed565b602082019050919050565b60006126ea603883612c93565b91506126f582613216565b604082019050919050565b600061270d602a83612c93565b915061271882613265565b604082019050919050565b6000612730602983612c93565b915061273b826132b4565b604082019050919050565b6000612753602083612c93565b915061275e82613303565b602082019050919050565b6000612776602c83612c93565b91506127818261332c565b604082019050919050565b6000612799602083612c93565b91506127a48261337b565b602082019050919050565b60006127bc602983612c93565b91506127c7826133a4565b604082019050919050565b60006127df602183612c93565b91506127ea826133f3565b604082019050919050565b6000612802601483612c93565b915061280d82613442565b602082019050919050565b6000612825603183612c93565b91506128308261346b565b604082019050919050565b6000612848600e83612c93565b9150612853826134ba565b602082019050919050565b61286781612dd4565b82525050565b60006128798285612523565b915061288582846124f2565b91508190509392505050565b60006020820190506128a66000830184612462565b92915050565b60006080820190506128c16000830187612462565b6128ce6020830186612462565b6128db604083018561285e565b81810360608301526128ed8184612480565b905095945050505050565b600060208201905061290d6000830184612471565b92915050565b6000602082019050818103600083015261292d81846124b9565b905092915050565b6000602082019050818103600083015261294e816125a2565b9050919050565b6000602082019050818103600083015261296e816125c5565b9050919050565b6000602082019050818103600083015261298e816125e8565b9050919050565b600060208201905081810360008301526129ae8161260b565b9050919050565b600060208201905081810360008301526129ce8161262e565b9050919050565b600060208201905081810360008301526129ee81612651565b9050919050565b60006020820190508181036000830152612a0e81612674565b9050919050565b60006020820190508181036000830152612a2e81612697565b9050919050565b60006020820190508181036000830152612a4e816126ba565b9050919050565b60006020820190508181036000830152612a6e816126dd565b9050919050565b60006020820190508181036000830152612a8e81612700565b9050919050565b60006020820190508181036000830152612aae81612723565b9050919050565b60006020820190508181036000830152612ace81612746565b9050919050565b60006020820190508181036000830152612aee81612769565b9050919050565b60006020820190508181036000830152612b0e8161278c565b9050919050565b60006020820190508181036000830152612b2e816127af565b9050919050565b60006020820190508181036000830152612b4e816127d2565b9050919050565b60006020820190508181036000830152612b6e816127f5565b9050919050565b60006020820190508181036000830152612b8e81612818565b9050919050565b60006020820190508181036000830152612bae8161283b565b9050919050565b6000602082019050612bca600083018461285e565b92915050565b6000612bda612beb565b9050612be68282612e52565b919050565b6000604051905090565b600067ffffffffffffffff821115612c1057612c0f612fb9565b5b612c1982612ffc565b9050602081019050919050565b600067ffffffffffffffff821115612c4157612c40612fb9565b5b612c4a82612ffc565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cba82612dd4565b9150612cc583612dd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cfa57612cf9612efd565b5b828201905092915050565b6000612d1082612dd4565b9150612d1b83612dd4565b925082612d2b57612d2a612f2c565b5b828204905092915050565b6000612d4182612dd4565b9150612d4c83612dd4565b925082821015612d5f57612d5e612efd565b5b828203905092915050565b6000612d7582612db4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e0b578082015181840152602081019050612df0565b83811115612e1a576000848401525b50505050565b60006002820490506001821680612e3857607f821691505b60208210811415612e4c57612e4b612f5b565b5b50919050565b612e5b82612ffc565b810181811067ffffffffffffffff82111715612e7a57612e79612fb9565b5b80604052505050565b6000612e8e82612dd4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ec157612ec0612efd565b5b600182019050919050565b6000612ed782612dd4565b9150612ee283612dd4565b925082612ef257612ef1612f2c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416c6c206f75742e000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e76616c696420746f6b656e49640000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f416c726561647920636c61696d65642e00000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f65736e27742065786973742e000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e65722e000000000000000000000000000000000000600082015250565b6134ec81612d6a565b81146134f757600080fd5b50565b61350381612d7c565b811461350e57600080fd5b50565b61351a81612d88565b811461352557600080fd5b50565b61353181612dd4565b811461353c57600080fd5b5056fea2646970667358221220ebf54325a6bd2f6023869ecb8efc9ffab68ec3c72459acd03d000205216c66ef64736f6c63430008070033000000000000000000000000a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd2700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f676c697463686e6562756c612e6e7963332e6469676974616c6f6365616e7370616365732e636f6d2f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061012e5760003560e01c806370a08231116100ab578063a22cb4651161006f578063a22cb465146103c6578063b88d4fde146103ef578063c87b56dd14610418578063dbe7e3bd14610455578063e985e9c514610492578063f2fde38b146104cf57610135565b806370a08231146102f3578063715018a6146103305780638da5cb5b1461034757806395d89b411461037257806398cd61531461039d57610135565b80633ccfd60b116100f25780633ccfd60b1461023157806340c10f191461024857806342842e0e146102645780634ac7bc431461028d5780636352211e146102b657610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806323b872dd1461020857610135565b3661013557005b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612392565b6104f8565b60405161016e91906128f8565b60405180910390f35b34801561018357600080fd5b5061018c6105da565b6040516101999190612913565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612435565b61066c565b6040516101d69190612891565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190612352565b6106f1565b005b34801561021457600080fd5b5061022f600480360381019061022a919061223c565b610809565b005b34801561023d57600080fd5b50610246610869565b005b610262600480360381019061025d9190612352565b61092e565b005b34801561027057600080fd5b5061028b6004803603810190610286919061223c565b610bfc565b005b34801561029957600080fd5b506102b460048036038101906102af91906121a2565b610c1c565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612435565b610d06565b6040516102ea9190612891565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906121a2565b610db8565b6040516103279190612bb5565b60405180910390f35b34801561033c57600080fd5b50610345610e70565b005b34801561035357600080fd5b5061035c610ef8565b6040516103699190612891565b60405180910390f35b34801561037e57600080fd5b50610387610f22565b6040516103949190612913565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906123ec565b610fb4565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612312565b61104a565b005b3480156103fb57600080fd5b506104166004803603810190610411919061228f565b611060565b005b34801561042457600080fd5b5061043f600480360381019061043a9190612435565b6110c2565b60405161044c9190612913565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190612435565b61113e565b60405161048991906128f8565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906121fc565b61115e565b6040516104c691906128f8565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906121a2565b6111f2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d357506105d2826112ea565b5b9050919050565b6060600080546105e990612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461061590612e20565b80156106625780601f1061063757610100808354040283529160200191610662565b820191906000526020600020905b81548152906001019060200180831161064557829003601f168201915b5050505050905090565b600061067782611354565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90612ad5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106fc82610d06565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490612b35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078c6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba816107b56113c0565b61115e565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612a55565b60405180910390fd5b61080483836113c8565b505050565b61081a6108146113c0565b82611481565b610859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085090612b75565b60405180910390fd5b61086483838361155f565b505050565b6108716113c0565b73ffffffffffffffffffffffffffffffffffffffff1661088f610ef8565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90612af5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561092b573d6000803e3d6000fd5b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016109899190612bb5565b60206040518083038186803b1580156109a157600080fd5b505afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906121cf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90612b95565b60405180910390fd5b6109136009541115610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490612975565b60405180910390fd5b60001515600a600083815260200190815260200160002060009054906101000a900460ff16151514610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90612a35565b60405180910390fd5b6302aea5408110158015610b0c57506302aea5908111155b80610b2b57506304e338808110158015610b2a57506304e338d48111155b5b80610b4a5750630791ddc08110158015610b495750630791e0df8111155b5b80610b695750630bdc7fc08110158015610b685750630bdc82168111155b5b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f906129f5565b60405180910390fd5b60096000815480929190610bbb90612e83565b91905055506001600a600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610bf8826009546117bb565b5050565b610c1783838360405180602001604052806000815250611060565b505050565b610c246113c0565b73ffffffffffffffffffffffffffffffffffffffff16610c42610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90612af5565b60405180910390fd5b6109136009541115610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612975565b60405180910390fd5b60096000815480929190610cf290612e83565b9190505550610d03816009546117bb565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690612a95565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612a75565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e786113c0565b73ffffffffffffffffffffffffffffffffffffffff16610e96610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390612af5565b60405180910390fd5b610ef660006117d9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f3190612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5d90612e20565b8015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b5050505050905090565b610fbc6113c0565b73ffffffffffffffffffffffffffffffffffffffff16610fda610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790612af5565b60405180910390fd5b8060089080519060200190611046929190611fa1565b5050565b61105c6110556113c0565b838361189f565b5050565b61107161106b6113c0565b83611481565b6110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790612b75565b60405180910390fd5b6110bc84848484611a0c565b50505050565b60606110cd82611354565b61110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612b55565b60405180910390fd5b600861111783611a68565b60405160200161112892919061286d565b6040516020818303038152906040529050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111fa6113c0565b73ffffffffffffffffffffffffffffffffffffffff16611218610ef8565b73ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590612955565b60405180910390fd5b6112e7816117d9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661143b83610d06565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061148c82611354565b6114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290612a15565b60405180910390fd5b60006114d683610d06565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061154557508373ffffffffffffffffffffffffffffffffffffffff1661152d8461066c565b73ffffffffffffffffffffffffffffffffffffffff16145b806115565750611555818561115e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661157f82610d06565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90612b15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906129b5565b60405180910390fd5b611650838383611bc9565b61165b6000826113c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ab9190612d36565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117029190612caf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6117d5828260405180602001604052806000815250611bce565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561190e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611905906129d5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ff91906128f8565b60405180910390a3505050565b611a1784848461155f565b611a2384848484611c29565b611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5990612935565b60405180910390fd5b50505050565b60606000821415611ab0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bc4565b600082905060005b60008214611ae2578080611acb90612e83565b915050600a82611adb9190612d05565b9150611ab8565b60008167ffffffffffffffff811115611afe57611afd612fb9565b5b6040519080825280601f01601f191660200182016040528015611b305781602001600182028036833780820191505090505b5090505b60008514611bbd57600182611b499190612d36565b9150600a85611b589190612ecc565b6030611b649190612caf565b60f81b818381518110611b7a57611b79612f8a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bb69190612d05565b9450611b34565b8093505050505b919050565b505050565b611bd88383611dc0565b611be56000848484611c29565b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90612935565b60405180910390fd5b505050565b6000611c4a8473ffffffffffffffffffffffffffffffffffffffff16611f8e565b15611db3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c736113c0565b8786866040518563ffffffff1660e01b8152600401611c9594939291906128ac565b602060405180830381600087803b158015611caf57600080fd5b505af1925050508015611ce057506040513d601f19601f82011682018060405250810190611cdd91906123bf565b60015b611d63573d8060008114611d10576040519150601f19603f3d011682016040523d82523d6000602084013e611d15565b606091505b50600081511415611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290612935565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611db8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790612ab5565b60405180910390fd5b611e3981611354565b15611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090612995565b60405180910390fd5b611e8560008383611bc9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed59190612caf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054611fad90612e20565b90600052602060002090601f016020900481019282611fcf5760008555612016565b82601f10611fe857805160ff1916838001178555612016565b82800160010185558215612016579182015b82811115612015578251825591602001919060010190611ffa565b5b5090506120239190612027565b5090565b5b80821115612040576000816000905550600101612028565b5090565b600061205761205284612bf5565b612bd0565b90508281526020810184848401111561207357612072612fed565b5b61207e848285612dde565b509392505050565b600061209961209484612c26565b612bd0565b9050828152602081018484840111156120b5576120b4612fed565b5b6120c0848285612dde565b509392505050565b6000813590506120d7816134e3565b92915050565b6000815190506120ec816134e3565b92915050565b600081359050612101816134fa565b92915050565b60008135905061211681613511565b92915050565b60008151905061212b81613511565b92915050565b600082601f83011261214657612145612fe8565b5b8135612156848260208601612044565b91505092915050565b600082601f83011261217457612173612fe8565b5b8135612184848260208601612086565b91505092915050565b60008135905061219c81613528565b92915050565b6000602082840312156121b8576121b7612ff7565b5b60006121c6848285016120c8565b91505092915050565b6000602082840312156121e5576121e4612ff7565b5b60006121f3848285016120dd565b91505092915050565b6000806040838503121561221357612212612ff7565b5b6000612221858286016120c8565b9250506020612232858286016120c8565b9150509250929050565b60008060006060848603121561225557612254612ff7565b5b6000612263868287016120c8565b9350506020612274868287016120c8565b92505060406122858682870161218d565b9150509250925092565b600080600080608085870312156122a9576122a8612ff7565b5b60006122b7878288016120c8565b94505060206122c8878288016120c8565b93505060406122d98782880161218d565b925050606085013567ffffffffffffffff8111156122fa576122f9612ff2565b5b61230687828801612131565b91505092959194509250565b6000806040838503121561232957612328612ff7565b5b6000612337858286016120c8565b9250506020612348858286016120f2565b9150509250929050565b6000806040838503121561236957612368612ff7565b5b6000612377858286016120c8565b92505060206123888582860161218d565b9150509250929050565b6000602082840312156123a8576123a7612ff7565b5b60006123b684828501612107565b91505092915050565b6000602082840312156123d5576123d4612ff7565b5b60006123e38482850161211c565b91505092915050565b60006020828403121561240257612401612ff7565b5b600082013567ffffffffffffffff8111156124205761241f612ff2565b5b61242c8482850161215f565b91505092915050565b60006020828403121561244b5761244a612ff7565b5b60006124598482850161218d565b91505092915050565b61246b81612d6a565b82525050565b61247a81612d7c565b82525050565b600061248b82612c6c565b6124958185612c82565b93506124a5818560208601612ded565b6124ae81612ffc565b840191505092915050565b60006124c482612c77565b6124ce8185612c93565b93506124de818560208601612ded565b6124e781612ffc565b840191505092915050565b60006124fd82612c77565b6125078185612ca4565b9350612517818560208601612ded565b80840191505092915050565b6000815461253081612e20565b61253a8186612ca4565b94506001821660008114612555576001811461256657612599565b60ff19831686528186019350612599565b61256f85612c57565b60005b8381101561259157815481890152600182019150602081019050612572565b838801955050505b50505092915050565b60006125af603283612c93565b91506125ba8261300d565b604082019050919050565b60006125d2602683612c93565b91506125dd8261305c565b604082019050919050565b60006125f5600883612c93565b9150612600826130ab565b602082019050919050565b6000612618601c83612c93565b9150612623826130d4565b602082019050919050565b600061263b602483612c93565b9150612646826130fd565b604082019050919050565b600061265e601983612c93565b91506126698261314c565b602082019050919050565b6000612681600f83612c93565b915061268c82613175565b602082019050919050565b60006126a4602c83612c93565b91506126af8261319e565b604082019050919050565b60006126c7601083612c93565b91506126d2826131ed565b602082019050919050565b60006126ea603883612c93565b91506126f582613216565b604082019050919050565b600061270d602a83612c93565b915061271882613265565b604082019050919050565b6000612730602983612c93565b915061273b826132b4565b604082019050919050565b6000612753602083612c93565b915061275e82613303565b602082019050919050565b6000612776602c83612c93565b91506127818261332c565b604082019050919050565b6000612799602083612c93565b91506127a48261337b565b602082019050919050565b60006127bc602983612c93565b91506127c7826133a4565b604082019050919050565b60006127df602183612c93565b91506127ea826133f3565b604082019050919050565b6000612802601483612c93565b915061280d82613442565b602082019050919050565b6000612825603183612c93565b91506128308261346b565b604082019050919050565b6000612848600e83612c93565b9150612853826134ba565b602082019050919050565b61286781612dd4565b82525050565b60006128798285612523565b915061288582846124f2565b91508190509392505050565b60006020820190506128a66000830184612462565b92915050565b60006080820190506128c16000830187612462565b6128ce6020830186612462565b6128db604083018561285e565b81810360608301526128ed8184612480565b905095945050505050565b600060208201905061290d6000830184612471565b92915050565b6000602082019050818103600083015261292d81846124b9565b905092915050565b6000602082019050818103600083015261294e816125a2565b9050919050565b6000602082019050818103600083015261296e816125c5565b9050919050565b6000602082019050818103600083015261298e816125e8565b9050919050565b600060208201905081810360008301526129ae8161260b565b9050919050565b600060208201905081810360008301526129ce8161262e565b9050919050565b600060208201905081810360008301526129ee81612651565b9050919050565b60006020820190508181036000830152612a0e81612674565b9050919050565b60006020820190508181036000830152612a2e81612697565b9050919050565b60006020820190508181036000830152612a4e816126ba565b9050919050565b60006020820190508181036000830152612a6e816126dd565b9050919050565b60006020820190508181036000830152612a8e81612700565b9050919050565b60006020820190508181036000830152612aae81612723565b9050919050565b60006020820190508181036000830152612ace81612746565b9050919050565b60006020820190508181036000830152612aee81612769565b9050919050565b60006020820190508181036000830152612b0e8161278c565b9050919050565b60006020820190508181036000830152612b2e816127af565b9050919050565b60006020820190508181036000830152612b4e816127d2565b9050919050565b60006020820190508181036000830152612b6e816127f5565b9050919050565b60006020820190508181036000830152612b8e81612818565b9050919050565b60006020820190508181036000830152612bae8161283b565b9050919050565b6000602082019050612bca600083018461285e565b92915050565b6000612bda612beb565b9050612be68282612e52565b919050565b6000604051905090565b600067ffffffffffffffff821115612c1057612c0f612fb9565b5b612c1982612ffc565b9050602081019050919050565b600067ffffffffffffffff821115612c4157612c40612fb9565b5b612c4a82612ffc565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cba82612dd4565b9150612cc583612dd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cfa57612cf9612efd565b5b828201905092915050565b6000612d1082612dd4565b9150612d1b83612dd4565b925082612d2b57612d2a612f2c565b5b828204905092915050565b6000612d4182612dd4565b9150612d4c83612dd4565b925082821015612d5f57612d5e612efd565b5b828203905092915050565b6000612d7582612db4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e0b578082015181840152602081019050612df0565b83811115612e1a576000848401525b50505050565b60006002820490506001821680612e3857607f821691505b60208210811415612e4c57612e4b612f5b565b5b50919050565b612e5b82612ffc565b810181811067ffffffffffffffff82111715612e7a57612e79612fb9565b5b80604052505050565b6000612e8e82612dd4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ec157612ec0612efd565b5b600182019050919050565b6000612ed782612dd4565b9150612ee283612dd4565b925082612ef257612ef1612f2c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416c6c206f75742e000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e76616c696420746f6b656e49640000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f416c726561647920636c61696d65642e00000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20646f65736e27742065786973742e000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420746865206f776e65722e000000000000000000000000000000000000600082015250565b6134ec81612d6a565b81146134f757600080fd5b50565b61350381612d7c565b811461350e57600080fd5b50565b61351a81612d88565b811461352557600080fd5b50565b61353181612dd4565b811461353c57600080fd5b5056fea2646970667358221220ebf54325a6bd2f6023869ecb8efc9ffab68ec3c72459acd03d000205216c66ef64736f6c63430008070033

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

000000000000000000000000a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd2700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f676c697463686e6562756c612e6e7963332e6469676974616c6f6365616e7370616365732e636f6d2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : artblocksContract (address): 0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270
Arg [1] : _baseURI (string): https://glitchnebula.nyc3.digitaloceanspaces.com/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [3] : 68747470733a2f2f676c697463686e6562756c612e6e7963332e646967697461
Arg [4] : 6c6f6365616e7370616365732e636f6d2f000000000000000000000000000000


Deployed Bytecode Sourcemap

37161:1707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23782:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24727:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26286:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25809:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27036:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38756:109;;;;;;;;;;;;;:::i;:::-;;37551:645;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27446:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38204:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24421:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24151:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4770:103;;;;;;;;;;;;;:::i;:::-;;4119:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24896:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38612:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26579:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27702:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38375:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37315:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26805:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5028:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23782:305;23884:4;23936:25;23921:40;;;:11;:40;;;;:105;;;;23993:33;23978:48;;;:11;:48;;;;23921:105;:158;;;;24043:36;24067:11;24043:23;:36::i;:::-;23921:158;23901:178;;23782:305;;;:::o;24727:100::-;24781:13;24814:5;24807:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24727:100;:::o;26286:221::-;26362:7;26390:16;26398:7;26390;:16::i;:::-;26382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26475:15;:24;26491:7;26475:24;;;;;;;;;;;;;;;;;;;;;26468:31;;26286:221;;;:::o;25809:411::-;25890:13;25906:23;25921:7;25906:14;:23::i;:::-;25890:39;;25954:5;25948:11;;:2;:11;;;;25940:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26048:5;26032:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26057:37;26074:5;26081:12;:10;:12::i;:::-;26057:16;:37::i;:::-;26032:62;26010:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26191:21;26200:2;26204:7;26191:8;:21::i;:::-;25879:341;25809:411;;:::o;27036:339::-;27231:41;27250:12;:10;:12::i;:::-;27264:7;27231:18;:41::i;:::-;27223:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27339:28;27349:4;27355:2;27359:7;27339:9;:28::i;:::-;27036:339;;;:::o;38756:109::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:10:::1;38806:28;;:51;38835:21;38806:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38756:109::o:0;37551:645::-;37639:9;;;;;;;;;;;:17;;;37657:7;37639:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37625:40;;:10;:40;;;37617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37714:4;37703:7;;:15;;37695:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37770:5;37750:25;;:7;:16;37758:7;37750:16;;;;;;;;;;;;;;;;;;;;;:25;;;37742:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37827:8;37816:7;:19;;:42;;;;;37850:8;37839:7;:19;;37816:42;37815:109;;;;37892:8;37881:7;:19;;:42;;;;;37915:8;37904:7;:19;;37881:42;37815:109;:176;;;;37957:9;37946:7;:20;;:44;;;;;37981:9;37970:7;:20;;37946:44;37815:176;:243;;;;38024:9;38013:7;:20;;:44;;;;;38048:9;38037:7;:20;;38013:44;37815:243;37807:289;;;;;;;;;;;;:::i;:::-;;;;;;;;;38109:7;;:9;;;;;;;;;:::i;:::-;;;;;;38148:4;38129:7;:16;38137:7;38129:16;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38163:22;38173:2;38177:7;;38163:9;:22::i;:::-;37551:645;;:::o;27446:185::-;27584:39;27601:4;27607:2;27611:7;27584:39;;;;;;;;;;;;:16;:39::i;:::-;27446:185;;;:::o;38204:163::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38280:4:::1;38269:7;;:15;;38261:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38310:7;;:9;;;;;;;;;:::i;:::-;;;;;;38330:22;38340:2;38344:7;;38330:9;:22::i;:::-;38204:163:::0;:::o;24421:239::-;24493:7;24513:13;24529:7;:16;24537:7;24529:16;;;;;;;;;;;;;;;;;;;;;24513:32;;24581:1;24564:19;;:5;:19;;;;24556:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24647:5;24640:12;;;24421:239;;;:::o;24151:208::-;24223:7;24268:1;24251:19;;:5;:19;;;;24243:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24335:9;:16;24345:5;24335:16;;;;;;;;;;;;;;;;24328:23;;24151:208;;;:::o;4770:103::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4835:30:::1;4862:1;4835:18;:30::i;:::-;4770:103::o:0;4119:87::-;4165:7;4192:6;;;;;;;;;;;4185:13;;4119:87;:::o;24896:104::-;24952:13;24985:7;24978:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24896:104;:::o;38612:98::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38696:6:::1;38686:7;:16;;;;;;;;;;;;:::i;:::-;;38612:98:::0;:::o;26579:155::-;26674:52;26693:12;:10;:12::i;:::-;26707:8;26717;26674:18;:52::i;:::-;26579:155;;:::o;27702:328::-;27877:41;27896:12;:10;:12::i;:::-;27910:7;27877:18;:41::i;:::-;27869:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:39;27997:4;28003:2;28007:7;28016:5;27983:13;:39::i;:::-;27702:328;;;;:::o;38375:229::-;38448:13;38482:16;38490:7;38482;:16::i;:::-;38474:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38567:7;38576:18;:7;:16;:18::i;:::-;38550:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38536:60;;38375:229;;;:::o;37315:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;26805:164::-;26902:4;26926:18;:25;26945:5;26926:25;;;;;;;;;;;;;;;:35;26952:8;26926:35;;;;;;;;;;;;;;;;;;;;;;;;;26919:42;;26805:164;;;;:::o;5028:201::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5137:1:::1;5117:22;;:8;:22;;;;5109:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5193:28;5212:8;5193:18;:28::i;:::-;5028:201:::0;:::o;16551:157::-;16636:4;16675:25;16660:40;;;:11;:40;;;;16653:47;;16551:157;;;:::o;29540:127::-;29605:4;29657:1;29629:30;;:7;:16;29637:7;29629:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29622:37;;29540:127;;;:::o;2843:98::-;2896:7;2923:10;2916:17;;2843:98;:::o;33522:174::-;33624:2;33597:15;:24;33613:7;33597:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33680:7;33676:2;33642:46;;33651:23;33666:7;33651:14;:23::i;:::-;33642:46;;;;;;;;;;;;33522:174;;:::o;29834:348::-;29927:4;29952:16;29960:7;29952;:16::i;:::-;29944:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30028:13;30044:23;30059:7;30044:14;:23::i;:::-;30028:39;;30097:5;30086:16;;:7;:16;;;:51;;;;30130:7;30106:31;;:20;30118:7;30106:11;:20::i;:::-;:31;;;30086:51;:87;;;;30141:32;30158:5;30165:7;30141:16;:32::i;:::-;30086:87;30078:96;;;29834:348;;;;:::o;32826:578::-;32985:4;32958:31;;:23;32973:7;32958:14;:23::i;:::-;:31;;;32950:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33068:1;33054:16;;:2;:16;;;;33046:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33124:39;33145:4;33151:2;33155:7;33124:20;:39::i;:::-;33228:29;33245:1;33249:7;33228:8;:29::i;:::-;33289:1;33270:9;:15;33280:4;33270:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33318:1;33301:9;:13;33311:2;33301:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33349:2;33330:7;:16;33338:7;33330:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33388:7;33384:2;33369:27;;33378:4;33369:27;;;;;;;;;;;;32826:578;;;:::o;30524:110::-;30600:26;30610:2;30614:7;30600:26;;;;;;;;;;;;:9;:26::i;:::-;30524:110;;:::o;5389:191::-;5463:16;5482:6;;;;;;;;;;;5463:25;;5508:8;5499:6;;:17;;;;;;;;;;;;;;;;;;5563:8;5532:40;;5553:8;5532:40;;;;;;;;;;;;5452:128;5389:191;:::o;33838:315::-;33993:8;33984:17;;:5;:17;;;;33976:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34080:8;34042:18;:25;34061:5;34042:25;;;;;;;;;;;;;;;:35;34068:8;34042:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34126:8;34104:41;;34119:5;34104:41;;;34136:8;34104:41;;;;;;:::i;:::-;;;;;;;;33838:315;;;:::o;28912:::-;29069:28;29079:4;29085:2;29089:7;29069:9;:28::i;:::-;29116:48;29139:4;29145:2;29149:7;29158:5;29116:22;:48::i;:::-;29108:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28912:315;;;;:::o;405:723::-;461:13;691:1;682:5;:10;678:53;;;709:10;;;;;;;;;;;;;;;;;;;;;678:53;741:12;756:5;741:20;;772:14;797:78;812:1;804:4;:9;797:78;;830:8;;;;;:::i;:::-;;;;861:2;853:10;;;;;:::i;:::-;;;797:78;;;885:19;917:6;907:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:39;;935:154;951:1;942:5;:10;935:154;;979:1;969:11;;;;;:::i;:::-;;;1046:2;1038:5;:10;;;;:::i;:::-;1025:2;:24;;;;:::i;:::-;1012:39;;995:6;1002;995:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1075:2;1066:11;;;;;:::i;:::-;;;935:154;;;1113:6;1099:21;;;;;405:723;;;;:::o;36089:126::-;;;;:::o;30861:321::-;30991:18;30997:2;31001:7;30991:5;:18::i;:::-;31042:54;31073:1;31077:2;31081:7;31090:5;31042:22;:54::i;:::-;31020:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30861:321;;;:::o;34718:799::-;34873:4;34894:15;:2;:13;;;:15::i;:::-;34890:620;;;34946:2;34930:36;;;34967:12;:10;:12::i;:::-;34981:4;34987:7;34996:5;34930:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34926:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35189:1;35172:6;:13;:18;35168:272;;;35215:60;;;;;;;;;;:::i;:::-;;;;;;;;35168:272;35390:6;35384:13;35375:6;35371:2;35367:15;35360:38;34926:529;35063:41;;;35053:51;;;:6;:51;;;;35046:58;;;;;34890:620;35494:4;35487:11;;34718:799;;;;;;;:::o;31518:382::-;31612:1;31598:16;;:2;:16;;;;31590:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31671:16;31679:7;31671;:16::i;:::-;31670:17;31662:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31733:45;31762:1;31766:2;31770:7;31733:20;:45::i;:::-;31808:1;31791:9;:13;31801:2;31791:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31839:2;31820:7;:16;31828:7;31820:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31884:7;31880:2;31859:33;;31876:1;31859:33;;;;;;;;;;;;31518:382;;:::o;6407:387::-;6467:4;6675:12;6742:7;6730:20;6722:28;;6785:1;6778:4;:8;6771:15;;;6407:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:351::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:64;3087:7;3078:6;3067:9;3063:22;3031:64;:::i;:::-;3021:74;;2977:128;2761:351;;;;:::o;3118:474::-;3186:6;3194;3243:2;3231:9;3222:7;3218:23;3214:32;3211:119;;;3249:79;;:::i;:::-;3211:119;3369:1;3394:53;3439:7;3430:6;3419:9;3415:22;3394:53;:::i;:::-;3384:63;;3340:117;3496:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3467:118;3118:474;;;;;:::o;3598:619::-;3675:6;3683;3691;3740:2;3728:9;3719:7;3715:23;3711:32;3708:119;;;3746:79;;:::i;:::-;3708:119;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3598:619;;;;;:::o;4223:943::-;4318:6;4326;4334;4342;4391:3;4379:9;4370:7;4366:23;4362:33;4359:120;;;4398:79;;:::i;:::-;4359:120;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4616:118;4773:2;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4744:118;4929:2;4918:9;4914:18;4901:32;4960:18;4952:6;4949:30;4946:117;;;4982:79;;:::i;:::-;4946:117;5087:62;5141:7;5132:6;5121:9;5117:22;5087:62;:::i;:::-;5077:72;;4872:287;4223:943;;;;;;;:::o;5172:468::-;5237:6;5245;5294:2;5282:9;5273:7;5269:23;5265:32;5262:119;;;5300:79;;:::i;:::-;5262:119;5420:1;5445:53;5490:7;5481:6;5470:9;5466:22;5445:53;:::i;:::-;5435:63;;5391:117;5547:2;5573:50;5615:7;5606:6;5595:9;5591:22;5573:50;:::i;:::-;5563:60;;5518:115;5172:468;;;;;:::o;5646:474::-;5714:6;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;5646:474;;;;;:::o;6126:327::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:52;6428:7;6419:6;6408:9;6404:22;6384:52;:::i;:::-;6374:62;;6330:116;6126:327;;;;:::o;6459:349::-;6528:6;6577:2;6565:9;6556:7;6552:23;6548:32;6545:119;;;6583:79;;:::i;:::-;6545:119;6703:1;6728:63;6783:7;6774:6;6763:9;6759:22;6728:63;:::i;:::-;6718:73;;6674:127;6459:349;;;;:::o;6814:509::-;6883:6;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7086:1;7075:9;7071:17;7058:31;7116:18;7108:6;7105:30;7102:117;;;7138:79;;:::i;:::-;7102:117;7243:63;7298:7;7289:6;7278:9;7274:22;7243:63;:::i;:::-;7233:73;;7029:287;6814:509;;;;:::o;7329:329::-;7388:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:119;;;7443:79;;:::i;:::-;7405:119;7563:1;7588:53;7633:7;7624:6;7613:9;7609:22;7588:53;:::i;:::-;7578:63;;7534:117;7329:329;;;;:::o;7664:118::-;7751:24;7769:5;7751:24;:::i;:::-;7746:3;7739:37;7664:118;;:::o;7788:109::-;7869:21;7884:5;7869:21;:::i;:::-;7864:3;7857:34;7788:109;;:::o;7903:360::-;7989:3;8017:38;8049:5;8017:38;:::i;:::-;8071:70;8134:6;8129:3;8071:70;:::i;:::-;8064:77;;8150:52;8195:6;8190:3;8183:4;8176:5;8172:16;8150:52;:::i;:::-;8227:29;8249:6;8227:29;:::i;:::-;8222:3;8218:39;8211:46;;7993:270;7903:360;;;;:::o;8269:364::-;8357:3;8385:39;8418:5;8385:39;:::i;:::-;8440:71;8504:6;8499:3;8440:71;:::i;:::-;8433:78;;8520:52;8565:6;8560:3;8553:4;8546:5;8542:16;8520:52;:::i;:::-;8597:29;8619:6;8597:29;:::i;:::-;8592:3;8588:39;8581:46;;8361:272;8269:364;;;;:::o;8639:377::-;8745:3;8773:39;8806:5;8773:39;:::i;:::-;8828:89;8910:6;8905:3;8828:89;:::i;:::-;8821:96;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:6;8998:3;8994:16;8987:23;;8749:267;8639:377;;;;:::o;9046:845::-;9149:3;9186:5;9180:12;9215:36;9241:9;9215:36;:::i;:::-;9267:89;9349:6;9344:3;9267:89;:::i;:::-;9260:96;;9387:1;9376:9;9372:17;9403:1;9398:137;;;;9549:1;9544:341;;;;9365:520;;9398:137;9482:4;9478:9;9467;9463:25;9458:3;9451:38;9518:6;9513:3;9509:16;9502:23;;9398:137;;9544:341;9611:38;9643:5;9611:38;:::i;:::-;9671:1;9685:154;9699:6;9696:1;9693:13;9685:154;;;9773:7;9767:14;9763:1;9758:3;9754:11;9747:35;9823:1;9814:7;9810:15;9799:26;;9721:4;9718:1;9714:12;9709:17;;9685:154;;;9868:6;9863:3;9859:16;9852:23;;9551:334;;9365:520;;9153:738;;9046:845;;;;:::o;9897:366::-;10039:3;10060:67;10124:2;10119:3;10060:67;:::i;:::-;10053:74;;10136:93;10225:3;10136:93;:::i;:::-;10254:2;10249:3;10245:12;10238:19;;9897:366;;;:::o;10269:::-;10411:3;10432:67;10496:2;10491:3;10432:67;:::i;:::-;10425:74;;10508:93;10597:3;10508:93;:::i;:::-;10626:2;10621:3;10617:12;10610:19;;10269:366;;;:::o;10641:365::-;10783:3;10804:66;10868:1;10863:3;10804:66;:::i;:::-;10797:73;;10879:93;10968:3;10879:93;:::i;:::-;10997:2;10992:3;10988:12;10981:19;;10641:365;;;:::o;11012:366::-;11154:3;11175:67;11239:2;11234:3;11175:67;:::i;:::-;11168:74;;11251:93;11340:3;11251:93;:::i;:::-;11369:2;11364:3;11360:12;11353:19;;11012:366;;;:::o;11384:::-;11526:3;11547:67;11611:2;11606:3;11547:67;:::i;:::-;11540:74;;11623:93;11712:3;11623:93;:::i;:::-;11741:2;11736:3;11732:12;11725:19;;11384:366;;;:::o;11756:::-;11898:3;11919:67;11983:2;11978:3;11919:67;:::i;:::-;11912:74;;11995:93;12084:3;11995:93;:::i;:::-;12113:2;12108:3;12104:12;12097:19;;11756:366;;;:::o;12128:::-;12270:3;12291:67;12355:2;12350:3;12291:67;:::i;:::-;12284:74;;12367:93;12456:3;12367:93;:::i;:::-;12485:2;12480:3;12476:12;12469:19;;12128:366;;;:::o;12500:::-;12642:3;12663:67;12727:2;12722:3;12663:67;:::i;:::-;12656:74;;12739:93;12828:3;12739:93;:::i;:::-;12857:2;12852:3;12848:12;12841:19;;12500:366;;;:::o;12872:::-;13014:3;13035:67;13099:2;13094:3;13035:67;:::i;:::-;13028:74;;13111:93;13200:3;13111:93;:::i;:::-;13229:2;13224:3;13220:12;13213:19;;12872:366;;;:::o;13244:::-;13386:3;13407:67;13471:2;13466:3;13407:67;:::i;:::-;13400:74;;13483:93;13572:3;13483:93;:::i;:::-;13601:2;13596:3;13592:12;13585:19;;13244:366;;;:::o;13616:::-;13758:3;13779:67;13843:2;13838:3;13779:67;:::i;:::-;13772:74;;13855:93;13944:3;13855:93;:::i;:::-;13973:2;13968:3;13964:12;13957:19;;13616:366;;;:::o;13988:::-;14130:3;14151:67;14215:2;14210:3;14151:67;:::i;:::-;14144:74;;14227:93;14316:3;14227:93;:::i;:::-;14345:2;14340:3;14336:12;14329:19;;13988:366;;;:::o;14360:::-;14502:3;14523:67;14587:2;14582:3;14523:67;:::i;:::-;14516:74;;14599:93;14688:3;14599:93;:::i;:::-;14717:2;14712:3;14708:12;14701:19;;14360:366;;;:::o;14732:::-;14874:3;14895:67;14959:2;14954:3;14895:67;:::i;:::-;14888:74;;14971:93;15060:3;14971:93;:::i;:::-;15089:2;15084:3;15080:12;15073:19;;14732:366;;;:::o;15104:::-;15246:3;15267:67;15331:2;15326:3;15267:67;:::i;:::-;15260:74;;15343:93;15432:3;15343:93;:::i;:::-;15461:2;15456:3;15452:12;15445:19;;15104:366;;;:::o;15476:::-;15618:3;15639:67;15703:2;15698:3;15639:67;:::i;:::-;15632:74;;15715:93;15804:3;15715:93;:::i;:::-;15833:2;15828:3;15824:12;15817:19;;15476:366;;;:::o;15848:::-;15990:3;16011:67;16075:2;16070:3;16011:67;:::i;:::-;16004:74;;16087:93;16176:3;16087:93;:::i;:::-;16205:2;16200:3;16196:12;16189:19;;15848:366;;;:::o;16220:::-;16362:3;16383:67;16447:2;16442:3;16383:67;:::i;:::-;16376:74;;16459:93;16548:3;16459:93;:::i;:::-;16577:2;16572:3;16568:12;16561:19;;16220:366;;;:::o;16592:::-;16734:3;16755:67;16819:2;16814:3;16755:67;:::i;:::-;16748:74;;16831:93;16920:3;16831:93;:::i;:::-;16949:2;16944:3;16940:12;16933:19;;16592:366;;;:::o;16964:::-;17106:3;17127:67;17191:2;17186:3;17127:67;:::i;:::-;17120:74;;17203:93;17292:3;17203:93;:::i;:::-;17321:2;17316:3;17312:12;17305:19;;16964:366;;;:::o;17336:118::-;17423:24;17441:5;17423:24;:::i;:::-;17418:3;17411:37;17336:118;;:::o;17460:429::-;17637:3;17659:92;17747:3;17738:6;17659:92;:::i;:::-;17652:99;;17768:95;17859:3;17850:6;17768:95;:::i;:::-;17761:102;;17880:3;17873:10;;17460:429;;;;;:::o;17895:222::-;17988:4;18026:2;18015:9;18011:18;18003:26;;18039:71;18107:1;18096:9;18092:17;18083:6;18039:71;:::i;:::-;17895:222;;;;:::o;18123:640::-;18318:4;18356:3;18345:9;18341:19;18333:27;;18370:71;18438:1;18427:9;18423:17;18414:6;18370:71;:::i;:::-;18451:72;18519:2;18508:9;18504:18;18495:6;18451:72;:::i;:::-;18533;18601:2;18590:9;18586:18;18577:6;18533:72;:::i;:::-;18652:9;18646:4;18642:20;18637:2;18626:9;18622:18;18615:48;18680:76;18751:4;18742:6;18680:76;:::i;:::-;18672:84;;18123:640;;;;;;;:::o;18769:210::-;18856:4;18894:2;18883:9;18879:18;18871:26;;18907:65;18969:1;18958:9;18954:17;18945:6;18907:65;:::i;:::-;18769:210;;;;:::o;18985:313::-;19098:4;19136:2;19125:9;19121:18;19113:26;;19185:9;19179:4;19175:20;19171:1;19160:9;19156:17;19149:47;19213:78;19286:4;19277:6;19213:78;:::i;:::-;19205:86;;18985:313;;;;:::o;19304:419::-;19470:4;19508:2;19497:9;19493:18;19485:26;;19557:9;19551:4;19547:20;19543:1;19532:9;19528:17;19521:47;19585:131;19711:4;19585:131;:::i;:::-;19577:139;;19304:419;;;:::o;19729:::-;19895:4;19933:2;19922:9;19918:18;19910:26;;19982:9;19976:4;19972:20;19968:1;19957:9;19953:17;19946:47;20010:131;20136:4;20010:131;:::i;:::-;20002:139;;19729:419;;;:::o;20154:::-;20320:4;20358:2;20347:9;20343:18;20335:26;;20407:9;20401:4;20397:20;20393:1;20382:9;20378:17;20371:47;20435:131;20561:4;20435:131;:::i;:::-;20427:139;;20154:419;;;:::o;20579:::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20832:9;20826:4;20822:20;20818:1;20807:9;20803:17;20796:47;20860:131;20986:4;20860:131;:::i;:::-;20852:139;;20579:419;;;:::o;21004:::-;21170:4;21208:2;21197:9;21193:18;21185:26;;21257:9;21251:4;21247:20;21243:1;21232:9;21228:17;21221:47;21285:131;21411:4;21285:131;:::i;:::-;21277:139;;21004:419;;;:::o;21429:::-;21595:4;21633:2;21622:9;21618:18;21610:26;;21682:9;21676:4;21672:20;21668:1;21657:9;21653:17;21646:47;21710:131;21836:4;21710:131;:::i;:::-;21702:139;;21429:419;;;:::o;21854:::-;22020:4;22058:2;22047:9;22043:18;22035:26;;22107:9;22101:4;22097:20;22093:1;22082:9;22078:17;22071:47;22135:131;22261:4;22135:131;:::i;:::-;22127:139;;21854:419;;;:::o;22279:::-;22445:4;22483:2;22472:9;22468:18;22460:26;;22532:9;22526:4;22522:20;22518:1;22507:9;22503:17;22496:47;22560:131;22686:4;22560:131;:::i;:::-;22552:139;;22279:419;;;:::o;22704:::-;22870:4;22908:2;22897:9;22893:18;22885:26;;22957:9;22951:4;22947:20;22943:1;22932:9;22928:17;22921:47;22985:131;23111:4;22985:131;:::i;:::-;22977:139;;22704:419;;;:::o;23129:::-;23295:4;23333:2;23322:9;23318:18;23310:26;;23382:9;23376:4;23372:20;23368:1;23357:9;23353:17;23346:47;23410:131;23536:4;23410:131;:::i;:::-;23402:139;;23129:419;;;:::o;23554:::-;23720:4;23758:2;23747:9;23743:18;23735:26;;23807:9;23801:4;23797:20;23793:1;23782:9;23778:17;23771:47;23835:131;23961:4;23835:131;:::i;:::-;23827:139;;23554:419;;;:::o;23979:::-;24145:4;24183:2;24172:9;24168:18;24160:26;;24232:9;24226:4;24222:20;24218:1;24207:9;24203:17;24196:47;24260:131;24386:4;24260:131;:::i;:::-;24252:139;;23979:419;;;:::o;24404:::-;24570:4;24608:2;24597:9;24593:18;24585:26;;24657:9;24651:4;24647:20;24643:1;24632:9;24628:17;24621:47;24685:131;24811:4;24685:131;:::i;:::-;24677:139;;24404:419;;;:::o;24829:::-;24995:4;25033:2;25022:9;25018:18;25010:26;;25082:9;25076:4;25072:20;25068:1;25057:9;25053:17;25046:47;25110:131;25236:4;25110:131;:::i;:::-;25102:139;;24829:419;;;:::o;25254:::-;25420:4;25458:2;25447:9;25443:18;25435:26;;25507:9;25501:4;25497:20;25493:1;25482:9;25478:17;25471:47;25535:131;25661:4;25535:131;:::i;:::-;25527:139;;25254:419;;;:::o;25679:::-;25845:4;25883:2;25872:9;25868:18;25860:26;;25932:9;25926:4;25922:20;25918:1;25907:9;25903:17;25896:47;25960:131;26086:4;25960:131;:::i;:::-;25952:139;;25679:419;;;:::o;26104:::-;26270:4;26308:2;26297:9;26293:18;26285:26;;26357:9;26351:4;26347:20;26343:1;26332:9;26328:17;26321:47;26385:131;26511:4;26385:131;:::i;:::-;26377:139;;26104:419;;;:::o;26529:::-;26695:4;26733:2;26722:9;26718:18;26710:26;;26782:9;26776:4;26772:20;26768:1;26757:9;26753:17;26746:47;26810:131;26936:4;26810:131;:::i;:::-;26802:139;;26529:419;;;:::o;26954:::-;27120:4;27158:2;27147:9;27143:18;27135:26;;27207:9;27201:4;27197:20;27193:1;27182:9;27178:17;27171:47;27235:131;27361:4;27235:131;:::i;:::-;27227:139;;26954:419;;;:::o;27379:::-;27545:4;27583:2;27572:9;27568:18;27560:26;;27632:9;27626:4;27622:20;27618:1;27607:9;27603:17;27596:47;27660:131;27786:4;27660:131;:::i;:::-;27652:139;;27379:419;;;:::o;27804:222::-;27897:4;27935:2;27924:9;27920:18;27912:26;;27948:71;28016:1;28005:9;28001:17;27992:6;27948:71;:::i;:::-;27804:222;;;;:::o;28032:129::-;28066:6;28093:20;;:::i;:::-;28083:30;;28122:33;28150:4;28142:6;28122:33;:::i;:::-;28032:129;;;:::o;28167:75::-;28200:6;28233:2;28227:9;28217:19;;28167:75;:::o;28248:307::-;28309:4;28399:18;28391:6;28388:30;28385:56;;;28421:18;;:::i;:::-;28385:56;28459:29;28481:6;28459:29;:::i;:::-;28451:37;;28543:4;28537;28533:15;28525:23;;28248:307;;;:::o;28561:308::-;28623:4;28713:18;28705:6;28702:30;28699:56;;;28735:18;;:::i;:::-;28699:56;28773:29;28795:6;28773:29;:::i;:::-;28765:37;;28857:4;28851;28847:15;28839:23;;28561:308;;;:::o;28875:141::-;28924:4;28947:3;28939:11;;28970:3;28967:1;28960:14;29004:4;29001:1;28991:18;28983:26;;28875:141;;;:::o;29022:98::-;29073:6;29107:5;29101:12;29091:22;;29022:98;;;:::o;29126:99::-;29178:6;29212:5;29206:12;29196:22;;29126:99;;;:::o;29231:168::-;29314:11;29348:6;29343:3;29336:19;29388:4;29383:3;29379:14;29364:29;;29231:168;;;;:::o;29405:169::-;29489:11;29523:6;29518:3;29511:19;29563:4;29558:3;29554:14;29539:29;;29405:169;;;;:::o;29580:148::-;29682:11;29719:3;29704:18;;29580:148;;;;:::o;29734:305::-;29774:3;29793:20;29811:1;29793:20;:::i;:::-;29788:25;;29827:20;29845:1;29827:20;:::i;:::-;29822:25;;29981:1;29913:66;29909:74;29906:1;29903:81;29900:107;;;29987:18;;:::i;:::-;29900:107;30031:1;30028;30024:9;30017:16;;29734:305;;;;:::o;30045:185::-;30085:1;30102:20;30120:1;30102:20;:::i;:::-;30097:25;;30136:20;30154:1;30136:20;:::i;:::-;30131:25;;30175:1;30165:35;;30180:18;;:::i;:::-;30165:35;30222:1;30219;30215:9;30210:14;;30045:185;;;;:::o;30236:191::-;30276:4;30296:20;30314:1;30296:20;:::i;:::-;30291:25;;30330:20;30348:1;30330:20;:::i;:::-;30325:25;;30369:1;30366;30363:8;30360:34;;;30374:18;;:::i;:::-;30360:34;30419:1;30416;30412:9;30404:17;;30236:191;;;;:::o;30433:96::-;30470:7;30499:24;30517:5;30499:24;:::i;:::-;30488:35;;30433:96;;;:::o;30535:90::-;30569:7;30612:5;30605:13;30598:21;30587:32;;30535:90;;;:::o;30631:149::-;30667:7;30707:66;30700:5;30696:78;30685:89;;30631:149;;;:::o;30786:126::-;30823:7;30863:42;30856:5;30852:54;30841:65;;30786:126;;;:::o;30918:77::-;30955:7;30984:5;30973:16;;30918:77;;;:::o;31001:154::-;31085:6;31080:3;31075;31062:30;31147:1;31138:6;31133:3;31129:16;31122:27;31001:154;;;:::o;31161:307::-;31229:1;31239:113;31253:6;31250:1;31247:13;31239:113;;;31338:1;31333:3;31329:11;31323:18;31319:1;31314:3;31310:11;31303:39;31275:2;31272:1;31268:10;31263:15;;31239:113;;;31370:6;31367:1;31364:13;31361:101;;;31450:1;31441:6;31436:3;31432:16;31425:27;31361:101;31210:258;31161:307;;;:::o;31474:320::-;31518:6;31555:1;31549:4;31545:12;31535:22;;31602:1;31596:4;31592:12;31623:18;31613:81;;31679:4;31671:6;31667:17;31657:27;;31613:81;31741:2;31733:6;31730:14;31710:18;31707:38;31704:84;;;31760:18;;:::i;:::-;31704:84;31525:269;31474:320;;;:::o;31800:281::-;31883:27;31905:4;31883:27;:::i;:::-;31875:6;31871:40;32013:6;32001:10;31998:22;31977:18;31965:10;31962:34;31959:62;31956:88;;;32024:18;;:::i;:::-;31956:88;32064:10;32060:2;32053:22;31843:238;31800:281;;:::o;32087:233::-;32126:3;32149:24;32167:5;32149:24;:::i;:::-;32140:33;;32195:66;32188:5;32185:77;32182:103;;;32265:18;;:::i;:::-;32182:103;32312:1;32305:5;32301:13;32294:20;;32087:233;;;:::o;32326:176::-;32358:1;32375:20;32393:1;32375:20;:::i;:::-;32370:25;;32409:20;32427:1;32409:20;:::i;:::-;32404:25;;32448:1;32438:35;;32453:18;;:::i;:::-;32438:35;32494:1;32491;32487:9;32482:14;;32326:176;;;;:::o;32508:180::-;32556:77;32553:1;32546:88;32653:4;32650:1;32643:15;32677:4;32674:1;32667:15;32694:180;32742:77;32739:1;32732:88;32839:4;32836:1;32829:15;32863:4;32860:1;32853:15;32880:180;32928:77;32925:1;32918:88;33025:4;33022:1;33015:15;33049:4;33046:1;33039:15;33066:180;33114:77;33111:1;33104:88;33211:4;33208:1;33201:15;33235:4;33232:1;33225:15;33252:180;33300:77;33297:1;33290:88;33397:4;33394:1;33387:15;33421:4;33418:1;33411:15;33438:117;33547:1;33544;33537:12;33561:117;33670:1;33667;33660:12;33684:117;33793:1;33790;33783:12;33807:117;33916:1;33913;33906:12;33930:102;33971:6;34022:2;34018:7;34013:2;34006:5;34002:14;33998:28;33988:38;;33930:102;;;:::o;34038:237::-;34178:34;34174:1;34166:6;34162:14;34155:58;34247:20;34242:2;34234:6;34230:15;34223:45;34038:237;:::o;34281:225::-;34421:34;34417:1;34409:6;34405:14;34398:58;34490:8;34485:2;34477:6;34473:15;34466:33;34281:225;:::o;34512:158::-;34652:10;34648:1;34640:6;34636:14;34629:34;34512:158;:::o;34676:178::-;34816:30;34812:1;34804:6;34800:14;34793:54;34676:178;:::o;34860:223::-;35000:34;34996:1;34988:6;34984:14;34977:58;35069:6;35064:2;35056:6;35052:15;35045:31;34860:223;:::o;35089:175::-;35229:27;35225:1;35217:6;35213:14;35206:51;35089:175;:::o;35270:165::-;35410:17;35406:1;35398:6;35394:14;35387:41;35270:165;:::o;35441:231::-;35581:34;35577:1;35569:6;35565:14;35558:58;35650:14;35645:2;35637:6;35633:15;35626:39;35441:231;:::o;35678:166::-;35818:18;35814:1;35806:6;35802:14;35795:42;35678:166;:::o;35850:243::-;35990:34;35986:1;35978:6;35974:14;35967:58;36059:26;36054:2;36046:6;36042:15;36035:51;35850:243;:::o;36099:229::-;36239:34;36235:1;36227:6;36223:14;36216:58;36308:12;36303:2;36295:6;36291:15;36284:37;36099:229;:::o;36334:228::-;36474:34;36470:1;36462:6;36458:14;36451:58;36543:11;36538:2;36530:6;36526:15;36519:36;36334:228;:::o;36568:182::-;36708:34;36704:1;36696:6;36692:14;36685:58;36568:182;:::o;36756:231::-;36896:34;36892:1;36884:6;36880:14;36873:58;36965:14;36960:2;36952:6;36948:15;36941:39;36756:231;:::o;36993:182::-;37133:34;37129:1;37121:6;37117:14;37110:58;36993:182;:::o;37181:228::-;37321:34;37317:1;37309:6;37305:14;37298:58;37390:11;37385:2;37377:6;37373:15;37366:36;37181:228;:::o;37415:220::-;37555:34;37551:1;37543:6;37539:14;37532:58;37624:3;37619:2;37611:6;37607:15;37600:28;37415:220;:::o;37641:170::-;37781:22;37777:1;37769:6;37765:14;37758:46;37641:170;:::o;37817:236::-;37957:34;37953:1;37945:6;37941:14;37934:58;38026:19;38021:2;38013:6;38009:15;38002:44;37817:236;:::o;38059:164::-;38199:16;38195:1;38187:6;38183:14;38176:40;38059:164;:::o;38229:122::-;38302:24;38320:5;38302:24;:::i;:::-;38295:5;38292:35;38282:63;;38341:1;38338;38331:12;38282:63;38229:122;:::o;38357:116::-;38427:21;38442:5;38427:21;:::i;:::-;38420:5;38417:32;38407:60;;38463:1;38460;38453:12;38407:60;38357:116;:::o;38479:120::-;38551:23;38568:5;38551:23;:::i;:::-;38544:5;38541:34;38531:62;;38589:1;38586;38579:12;38531:62;38479:120;:::o;38605:122::-;38678:24;38696:5;38678:24;:::i;:::-;38671:5;38668:35;38658:63;;38717:1;38714;38707:12;38658:63;38605:122;:::o

Swarm Source

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