ETH Price: $2,468.33 (+5.85%)

Token

Genesis Pharmacy Pass (GenesisPharmacyPass)
 

Overview

Max Total Supply

8 GenesisPharmacyPass

Holders

6

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 GenesisPharmacyPass
0x3fE6A6F359DE40674382d49FE396824d83eA6AD7
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:
GenesisPharmacyPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-26
*/

// File: GenesisPharmacyPass.sol

/**
 *Submitted for verification at polygonscan.com on 2023-01-25
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

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

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: pharma.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;



contract GenesisPharmacyPass is ERC721Enumerable, Ownable {
    using Strings for uint256;
    string public baseURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.26 ether;
    uint256 public presaleCost = 0.26 ether;
    uint256 public maxSupply = 266;
    uint256 public maxMintAmount = 20;
    bool public paused = false;
    bool public revealed = true;
    string public notRevealedUri;
    mapping(address => bool) public presaleWallets;
    mapping(address => bool) private _allowList;

    bool public enforcePublicDropTime = true;
    uint256 public publicDropTime = 1668034860;
    bool public enforcePresaleDropTime = true;
    uint256 public presaleDropTime = 1672527660;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
    }

    // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    
    // public
    function mint(address _to, uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(_mintAmount > 0);
        require(supply + _mintAmount <= maxSupply);
        require(_mintAmount <= maxMintAmount);
        
        if (msg.sender != owner()) {
            if (!publicDropTimePassed() && presaleDropTimePassed()) {
                //general public
                require(!paused);
                require(msg.value >= presaleCost * _mintAmount);
                for (uint256 i = 1; i <= _mintAmount; i++) {
                    _safeMint(_to, supply + i);
                }
            } else if (presaleDropTimePassed()){
                //presale
                require(!paused);
                require(msg.value >= cost * _mintAmount);
                for (uint256 i = 1; i <= _mintAmount; i++) {
                    _safeMint(_to, supply + i);
                }
            }else{
                revert();
            } 
        }else{
        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(_to, supply + i);
        }
        }
    }
    function claimNFT() public {
        uint256 supply = totalSupply();
        require(_allowList[msg.sender], "Address is not on the allow list.");
        _allowList[msg.sender] = false;
        _safeMint(msg.sender, supply + 1);
    }
    function airdrop(address[] memory _addresses) public onlyOwner{
        
        for (uint i = 0; i < _addresses.length; i++) {
            uint256 supply = totalSupply();
            require(_addresses.length + supply <= maxSupply, "The total supply of tokens would exceed the max supply.");
            _safeMint(_addresses[i], supply+1);
        }
    }


    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        if(revealed == false) {
        return notRevealedUri;
        }
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        tokenId.toString(),
                        baseExtension
                    )
                )
                : "";
    }

    function addToAllowList(address[] memory _addresses) public onlyOwner {
        for (uint i = 0; i < _addresses.length; i++) {
            _allowList[_addresses[i]] = true;
        }
    }
    function removeFromAllowList(address[] memory _addresses) public onlyOwner {
        for (uint i = 0; i < _addresses.length; i++) {
            _allowList[_addresses[i]] = false;
        }
    }

    function setPublicDropTime(uint256 _newDropTime) public onlyOwner {
        require(_newDropTime > block.timestamp, "Drop date must be in future! Otherwise call disablePublicDropTime!");
        publicDropTime = _newDropTime;
    }
    function usePublicDropTime() public onlyOwner {
        enforcePublicDropTime = true;
    }

    function disablePublicDropTime() public onlyOwner {
        enforcePublicDropTime = false;
    }
    function publicDropTimePassed() public view returns(bool) {
        if(enforcePublicDropTime == false) {
            return true;
        }
        return block.timestamp >= publicDropTime;
    }

    function setPresaleDropTime(uint256 _newDropTime) public onlyOwner {
        require(_newDropTime > block.timestamp, "Drop date must be in future! Otherwise call disablePresaleDropTime!");
        presaleDropTime = _newDropTime;
    }

    function usePresaleDropTime() public onlyOwner {
        enforcePresaleDropTime = true;
    }

    function disablePresaleDropTime() public onlyOwner {
        enforcePresaleDropTime = false;
    }

    function presaleDropTimePassed() public view returns(bool) {
        if(enforcePresaleDropTime == false) {
            return true;
        }
        return block.timestamp >= presaleDropTime;
    }

    //only owner
    function reveal() public onlyOwner {
        revealed = true;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }
    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setPresaleCost(uint256 _newCost) public onlyOwner {
        presaleCost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

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

    function addPresaleUser(address _user) public onlyOwner {
        presaleWallets[_user] = true;
    }

    function addMultiplePresaleUsers(address[] memory _users) public onlyOwner {
        for (uint256 i = 0; i < _users.length; i++) {
            presaleWallets[_users[i]] = true;
        }
    }

    function removePresaleUser(address _user) public onlyOwner {
        presaleWallets[_user] = false;
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":"_users","type":"address[]"}],"name":"addMultiplePresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disablePresaleDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePublicDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enforcePresaleDropTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enforcePublicDropTime","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleDropTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleDropTimePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicDropTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicDropTimePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeFromAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDropTime","type":"uint256"}],"name":"setPresaleDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDropTime","type":"uint256"}],"name":"setPublicDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usePresaleDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usePublicDropTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000387565b5067039bb49f599a0000600d5567039bb49f599a0000600e5561010a600f5560146010556000601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601560006101000a81548160ff02191690831515021790555063636c312c6016556001601760006101000a81548160ff0219169083151502179055506363b0bf2c601855348015620000fe57600080fd5b506040516200583e3803806200583e8339818101604052810190620001249190620004b5565b838381600090805190602001906200013e92919062000387565b5080600190805190602001906200015792919062000387565b5050506200017a6200016e620001a660201b60201c565b620001ae60201b60201c565b6200018b826200027460201b60201c565b6200019c81620002a060201b60201c565b50505050620007aa565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000284620002cc60201b60201c565b80600b90805190602001906200029c92919062000387565b5050565b620002b0620002cc60201b60201c565b8060129080519060200190620002c892919062000387565b5050565b620002dc620001a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003026200035d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035290620005ca565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003959062000692565b90600052602060002090601f016020900481019282620003b9576000855562000405565b82601f10620003d457805160ff191683800117855562000405565b8280016001018555821562000405579182015b8281111562000404578251825591602001919060010190620003e7565b5b50905062000414919062000418565b5090565b5b808211156200043357600081600090555060010162000419565b5090565b60006200044e620004488462000615565b620005ec565b9050828152602081018484840111156200046d576200046c62000761565b5b6200047a8482856200065c565b509392505050565b600082601f8301126200049a57620004996200075c565b5b8151620004ac84826020860162000437565b91505092915050565b60008060008060808587031215620004d257620004d16200076b565b5b600085015167ffffffffffffffff811115620004f357620004f262000766565b5b620005018782880162000482565b945050602085015167ffffffffffffffff81111562000525576200052462000766565b5b620005338782880162000482565b935050604085015167ffffffffffffffff81111562000557576200055662000766565b5b620005658782880162000482565b925050606085015167ffffffffffffffff81111562000589576200058862000766565b5b620005978782880162000482565b91505092959194509250565b6000620005b26020836200064b565b9150620005bf8262000781565b602082019050919050565b60006020820190508181036000830152620005e581620005a3565b9050919050565b6000620005f86200060b565b9050620006068282620006c8565b919050565b6000604051905090565b600067ffffffffffffffff8211156200063357620006326200072d565b5b6200063e8262000770565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200067c5780820151818401526020810190506200065f565b838111156200068c576000848401525b50505050565b60006002820490506001821680620006ab57607f821691505b60208210811415620006c257620006c1620006fe565b5b50919050565b620006d38262000770565b810181811067ffffffffffffffff82111715620006f557620006f46200072d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61508480620007ba6000396000f3fe60806040526004361061038c5760003560e01c8063672756ad116101dc578063b2f3e85e11610102578063da3ef23f116100a0578063ed931e171161006f578063ed931e1714610ca4578063ee54be9614610ccd578063f2c4ce1e14610cf6578063f2fde38b14610d1f5761038c565b8063da3ef23f14610bfe578063db26cff414610c27578063e5473dae14610c50578063e985e9c514610c675761038c565b8063c46e9f7c116100dc578063c46e9f7c14610b40578063c668286214610b6b578063c87b56dd14610b96578063d5abeb0114610bd35761038c565b8063b2f3e85e14610ad7578063b88d4fde14610b00578063bc05748e14610b295761038c565b80638da5cb5b1161017a578063a22cb46511610149578063a22cb46514610a45578063a475b5dd14610a6e578063a51139b114610a85578063a51312c814610aae5761038c565b80638da5cb5b1461099b5780638fdcf942146109c657806391c4b574146109ef57806395d89b4114610a1a5761038c565b8063715018a6116101b6578063715018a6146109095780637263cfe214610920578063729ad39e146109495780637f00c7a6146109725761038c565b8063672756ad1461088a5780636c0360eb146108a157806370a08231146108cc5761038c565b80632f745c59116102c157806344eed8811161025f57806358feaa591161022e57806358feaa59146107e05780635c7706c2146107f75780635c975abb146108225780636352211e1461084d5761038c565b806344eed881146107245780634f6ccce71461074f578063518302271461078c57806355f804b3146107b75761038c565b806340c10f191161029b57806340c10f191461067957806342842e0e14610695578063438b6300146106be57806344a0d68a146106fb5761038c565b80632f745c59146105f557806330b2264e146106325780633ccfd60b1461066f5761038c565b8063138c6d9f1161032e57806318160ddd1161030857806318160ddd1461054b578063239c70ae1461057657806323b872dd146105a15780632a23d07d146105ca5761038c565b8063138c6d9f146104de57806313faede6146104f557806316ca0f97146105205761038c565b8063081812fc1161036a578063081812fc14610422578063081c8c441461045f578063095ea7b31461048a5780630c863bb6146104b35761038c565b806301ffc9a71461039157806302329a29146103ce57806306fdde03146103f7575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613a86565b610d48565b6040516103c5919061411e565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a59565b610dc2565b005b34801561040357600080fd5b5061040c610de7565b6040516104199190614139565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613b29565b610e79565b6040516104569190614095565b60405180910390f35b34801561046b57600080fd5b50610474610efe565b6040516104819190614139565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906139d0565b610f8c565b005b3480156104bf57600080fd5b506104c86110a4565b6040516104d5919061411e565b60405180910390f35b3480156104ea57600080fd5b506104f36110d6565b005b34801561050157600080fd5b5061050a6110fb565b604051610517919061441b565b60405180910390f35b34801561052c57600080fd5b50610535611101565b604051610542919061441b565b60405180910390f35b34801561055757600080fd5b50610560611107565b60405161056d919061441b565b60405180910390f35b34801561058257600080fd5b5061058b611114565b604051610598919061441b565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906138ba565b61111a565b005b3480156105d657600080fd5b506105df61117a565b6040516105ec919061441b565b60405180910390f35b34801561060157600080fd5b5061061c600480360381019061061791906139d0565b611180565b604051610629919061441b565b60405180910390f35b34801561063e57600080fd5b506106596004803603810190610654919061384d565b611225565b604051610666919061411e565b60405180910390f35b610677611245565b005b610693600480360381019061068e91906139d0565b6112c6565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906138ba565b611495565b005b3480156106ca57600080fd5b506106e560048036038101906106e0919061384d565b6114b5565b6040516106f291906140fc565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190613b29565b611563565b005b34801561073057600080fd5b50610739611575565b604051610746919061441b565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190613b29565b61157b565b604051610783919061441b565b60405180910390f35b34801561079857600080fd5b506107a16115ec565b6040516107ae919061411e565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613ae0565b6115ff565b005b3480156107ec57600080fd5b506107f5611621565b005b34801561080357600080fd5b5061080c611646565b604051610819919061411e565b60405180910390f35b34801561082e57600080fd5b50610837611678565b604051610844919061411e565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190613b29565b61168b565b6040516108819190614095565b60405180910390f35b34801561089657600080fd5b5061089f61173d565b005b3480156108ad57600080fd5b506108b6611846565b6040516108c39190614139565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061384d565b6118d4565b604051610900919061441b565b60405180910390f35b34801561091557600080fd5b5061091e61198c565b005b34801561092c57600080fd5b5061094760048036038101906109429190613a10565b6119a0565b005b34801561095557600080fd5b50610970600480360381019061096b9190613a10565b611a3d565b005b34801561097e57600080fd5b5061099960048036038101906109949190613b29565b611af6565b005b3480156109a757600080fd5b506109b0611b08565b6040516109bd9190614095565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613b29565b611b32565b005b3480156109fb57600080fd5b50610a04611b44565b604051610a11919061411e565b60405180910390f35b348015610a2657600080fd5b50610a2f611b57565b604051610a3c9190614139565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a679190613990565b611be9565b005b348015610a7a57600080fd5b50610a83611bff565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190613b29565b611c24565b005b348015610aba57600080fd5b50610ad56004803603810190610ad09190613a10565b611c78565b005b348015610ae357600080fd5b50610afe6004803603810190610af9919061384d565b611d15565b005b348015610b0c57600080fd5b50610b276004803603810190610b22919061390d565b611d78565b005b348015610b3557600080fd5b50610b3e611dda565b005b348015610b4c57600080fd5b50610b55611dff565b604051610b62919061411e565b60405180910390f35b348015610b7757600080fd5b50610b80611e12565b604051610b8d9190614139565b60405180910390f35b348015610ba257600080fd5b50610bbd6004803603810190610bb89190613b29565b611ea0565b604051610bca9190614139565b60405180910390f35b348015610bdf57600080fd5b50610be8611ff9565b604051610bf5919061441b565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c209190613ae0565b611fff565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613a10565b612021565b005b348015610c5c57600080fd5b50610c656120be565b005b348015610c7357600080fd5b50610c8e6004803603810190610c89919061387a565b6120e3565b604051610c9b919061411e565b60405180910390f35b348015610cb057600080fd5b50610ccb6004803603810190610cc6919061384d565b612177565b005b348015610cd957600080fd5b50610cf46004803603810190610cef9190613b29565b6121da565b005b348015610d0257600080fd5b50610d1d6004803603810190610d189190613ae0565b61222e565b005b348015610d2b57600080fd5b50610d466004803603810190610d41919061384d565b612250565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dbb5750610dba826122d4565b5b9050919050565b610dca6123b6565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610df690614750565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2290614750565b8015610e6f5780601f10610e4457610100808354040283529160200191610e6f565b820191906000526020600020905b815481529060010190602001808311610e5257829003601f168201915b5050505050905090565b6000610e8482612434565b610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061433b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610f0b90614750565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3790614750565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b505050505081565b6000610f978261168b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061439b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110276124a0565b73ffffffffffffffffffffffffffffffffffffffff1614806110565750611055816110506124a0565b6120e3565b5b611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c906142bb565b60405180910390fd5b61109f83836124a8565b505050565b6000801515601560009054906101000a900460ff16151514156110ca57600190506110d3565b60165442101590505b90565b6110de6123b6565b6000601760006101000a81548160ff021916908315150217905550565b600d5481565b60185481565b6000600880549050905090565b60105481565b61112b6111256124a0565b82612561565b61116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906143db565b60405180910390fd5b61117583838361263f565b505050565b600e5481565b600061118b836118d4565b82106111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061419b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b61124d6123b6565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161127390614080565b60006040518083038185875af1925050503d80600081146112b0576040519150601f19603f3d011682016040523d82523d6000602084013e6112b5565b606091505b50509050806112c357600080fd5b50565b60006112d0611107565b9050600082116112df57600080fd5b600f5482826112ee9190614585565b11156112f957600080fd5b60105482111561130857600080fd5b611310611b08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114585761134a6110a4565b15801561135b575061135a611646565b5b156113d057601160009054906101000a900460ff161561137a57600080fd5b81600e54611388919061460c565b34101561139457600080fd5b6000600190505b8281116113ca576113b78482846113b29190614585565b6128a6565b80806113c2906147b3565b91505061139b565b50611453565b6113d8611646565b1561144d57601160009054906101000a900460ff16156113f757600080fd5b81600d54611405919061460c565b34101561141157600080fd5b6000600190505b8281116114475761143484828461142f9190614585565b6128a6565b808061143f906147b3565b915050611418565b50611452565b600080fd5b5b611490565b6000600190505b82811161148e5761147b8482846114769190614585565b6128a6565b8080611486906147b3565b91505061145f565b505b505050565b6114b083838360405180602001604052806000815250611d78565b505050565b606060006114c2836118d4565b905060008167ffffffffffffffff8111156114e0576114df614918565b5b60405190808252806020026020018201604052801561150e5781602001602082028036833780820191505090505b50905060005b82811015611558576115268582611180565b828281518110611539576115386148e9565b5b6020026020010181815250508080611550906147b3565b915050611514565b508092505050919050565b61156b6123b6565b80600d8190555050565b60165481565b6000611585611107565b82106115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906143fb565b60405180910390fd5b600882815481106115da576115d96148e9565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6116076123b6565b80600b908051906020019061161d9291906135c3565b5050565b6116296123b6565b6000601560006101000a81548160ff021916908315150217905550565b6000801515601760009054906101000a900460ff161515141561166c5760019050611675565b60185442101590505b90565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b906142fb565b60405180910390fd5b80915050919050565b6000611747611107565b9050601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc906143bb565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118433360018361183e9190614585565b6128a6565b50565b600b805461185390614750565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90614750565b80156118cc5780601f106118a1576101008083540402835291602001916118cc565b820191906000526020600020905b8154815290600101906020018083116118af57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c906142db565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119946123b6565b61199e60006128c4565b565b6119a86123b6565b60005b8151811015611a39576001601460008484815181106119cd576119cc6148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a31906147b3565b9150506119ab565b5050565b611a456123b6565b60005b8151811015611af2576000611a5b611107565b9050600f54818451611a6d9190614585565b1115611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906141db565b60405180910390fd5b611ade838381518110611ac457611ac36148e9565b5b6020026020010151600183611ad99190614585565b6128a6565b508080611aea906147b3565b915050611a48565b5050565b611afe6123b6565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b3a6123b6565b80600e8190555050565b601560009054906101000a900460ff1681565b606060018054611b6690614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9290614750565b8015611bdf5780601f10611bb457610100808354040283529160200191611bdf565b820191906000526020600020905b815481529060010190602001808311611bc257829003601f168201915b5050505050905090565b611bfb611bf46124a0565b838361298a565b5050565b611c076123b6565b6001601160016101000a81548160ff021916908315150217905550565b611c2c6123b6565b428111611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061417b565b60405180910390fd5b8060188190555050565b611c806123b6565b60005b8151811015611d1157600060146000848481518110611ca557611ca46148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d09906147b3565b915050611c83565b5050565b611d1d6123b6565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d89611d836124a0565b83612561565b611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906143db565b60405180910390fd5b611dd484848484612af7565b50505050565b611de26123b6565b6001601560006101000a81548160ff021916908315150217905550565b601760009054906101000a900460ff1681565b600c8054611e1f90614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4b90614750565b8015611e985780601f10611e6d57610100808354040283529160200191611e98565b820191906000526020600020905b815481529060010190602001808311611e7b57829003601f168201915b505050505081565b6060611eab82612434565b611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee19061437b565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611f985760128054611f1390614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f90614750565b8015611f8c5780601f10611f6157610100808354040283529160200191611f8c565b820191906000526020600020905b815481529060010190602001808311611f6f57829003601f168201915b50505050509050611ff4565b6000611fa2612b53565b90506000815111611fc25760405180602001604052806000815250611ff0565b80611fcc84612be5565b600c604051602001611fe09392919061404f565b6040516020818303038152906040525b9150505b919050565b600f5481565b6120076123b6565b80600c908051906020019061201d9291906135c3565b5050565b6120296123b6565b60005b81518110156120ba5760016013600084848151811061204e5761204d6148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120b2906147b3565b91505061202c565b5050565b6120c66123b6565b6001601760006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217f6123b6565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121e26123b6565b428111612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061415b565b60405180910390fd5b8060168190555050565b6122366123b6565b806012908051906020019061224c9291906135c3565b5050565b6122586123b6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf906141fb565b60405180910390fd5b6122d1816128c4565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061239f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123af57506123ae82612d46565b5b9050919050565b6123be6124a0565b73ffffffffffffffffffffffffffffffffffffffff166123dc611b08565b73ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124299061435b565b60405180910390fd5b565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661251b8361168b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061256c82612434565b6125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a29061429b565b60405180910390fd5b60006125b68361168b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125f857506125f781856120e3565b5b8061263657508373ffffffffffffffffffffffffffffffffffffffff1661261e84610e79565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661265f8261168b565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac9061421b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c9061425b565b60405180910390fd5b612730838383612db0565b61273b6000826124a8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278b9190614666565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e29190614585565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128a1838383612ec4565b505050565b6128c0828260405180602001604052806000815250612ec9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612aea919061411e565b60405180910390a3505050565b612b0284848461263f565b612b0e84848484612f24565b612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b44906141bb565b60405180910390fd5b50505050565b6060600b8054612b6290614750565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8e90614750565b8015612bdb5780601f10612bb057610100808354040283529160200191612bdb565b820191906000526020600020905b815481529060010190602001808311612bbe57829003601f168201915b5050505050905090565b60606000821415612c2d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d41565b600082905060005b60008214612c5f578080612c48906147b3565b915050600a82612c5891906145db565b9150612c35565b60008167ffffffffffffffff811115612c7b57612c7a614918565b5b6040519080825280601f01601f191660200182016040528015612cad5781602001600182028036833780820191505090505b5090505b60008514612d3a57600182612cc69190614666565b9150600a85612cd591906147fc565b6030612ce19190614585565b60f81b818381518110612cf757612cf66148e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d3391906145db565b9450612cb1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612dbb8383836130bb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe57612df9816130c0565b612e3d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e3c57612e3b8382613109565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8057612e7b81613276565b612ebf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ebe57612ebd8282613347565b5b5b505050565b505050565b612ed383836133c6565b612ee06000848484612f24565b612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f16906141bb565b60405180910390fd5b505050565b6000612f458473ffffffffffffffffffffffffffffffffffffffff166135a0565b156130ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f6e6124a0565b8786866040518563ffffffff1660e01b8152600401612f9094939291906140b0565b602060405180830381600087803b158015612faa57600080fd5b505af1925050508015612fdb57506040513d601f19601f82011682018060405250810190612fd89190613ab3565b60015b61305e573d806000811461300b576040519150601f19603f3d011682016040523d82523d6000602084013e613010565b606091505b50600081511415613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906141bb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613116846118d4565b6131209190614666565b9050600060076000848152602001908152602001600020549050818114613205576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061328a9190614666565b90506000600960008481526020019081526020016000205490506000600883815481106132ba576132b96148e9565b5b9060005260206000200154905080600883815481106132dc576132db6148e9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061332b5761332a6148ba565b5b6001900381819060005260206000200160009055905550505050565b6000613352836118d4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d9061431b565b60405180910390fd5b61343f81612434565b1561347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134769061423b565b60405180910390fd5b61348b60008383612db0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134db9190614585565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461359c60008383612ec4565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135cf90614750565b90600052602060002090601f0160209004810192826135f15760008555613638565b82601f1061360a57805160ff1916838001178555613638565b82800160010185558215613638579182015b8281111561363757825182559160200191906001019061361c565b5b5090506136459190613649565b5090565b5b8082111561366257600081600090555060010161364a565b5090565b60006136796136748461445b565b614436565b9050808382526020820190508285602086028201111561369c5761369b61494c565b5b60005b858110156136cc57816136b2888261375a565b84526020840193506020830192505060018101905061369f565b5050509392505050565b60006136e96136e484614487565b614436565b90508281526020810184848401111561370557613704614951565b5b61371084828561470e565b509392505050565b600061372b613726846144b8565b614436565b90508281526020810184848401111561374757613746614951565b5b61375284828561470e565b509392505050565b60008135905061376981614ff2565b92915050565b600082601f83011261378457613783614947565b5b8135613794848260208601613666565b91505092915050565b6000813590506137ac81615009565b92915050565b6000813590506137c181615020565b92915050565b6000815190506137d681615020565b92915050565b600082601f8301126137f1576137f0614947565b5b81356138018482602086016136d6565b91505092915050565b600082601f83011261381f5761381e614947565b5b813561382f848260208601613718565b91505092915050565b60008135905061384781615037565b92915050565b6000602082840312156138635761386261495b565b5b60006138718482850161375a565b91505092915050565b600080604083850312156138915761389061495b565b5b600061389f8582860161375a565b92505060206138b08582860161375a565b9150509250929050565b6000806000606084860312156138d3576138d261495b565b5b60006138e18682870161375a565b93505060206138f28682870161375a565b925050604061390386828701613838565b9150509250925092565b600080600080608085870312156139275761392661495b565b5b60006139358782880161375a565b94505060206139468782880161375a565b935050604061395787828801613838565b925050606085013567ffffffffffffffff81111561397857613977614956565b5b613984878288016137dc565b91505092959194509250565b600080604083850312156139a7576139a661495b565b5b60006139b58582860161375a565b92505060206139c68582860161379d565b9150509250929050565b600080604083850312156139e7576139e661495b565b5b60006139f58582860161375a565b9250506020613a0685828601613838565b9150509250929050565b600060208284031215613a2657613a2561495b565b5b600082013567ffffffffffffffff811115613a4457613a43614956565b5b613a508482850161376f565b91505092915050565b600060208284031215613a6f57613a6e61495b565b5b6000613a7d8482850161379d565b91505092915050565b600060208284031215613a9c57613a9b61495b565b5b6000613aaa848285016137b2565b91505092915050565b600060208284031215613ac957613ac861495b565b5b6000613ad7848285016137c7565b91505092915050565b600060208284031215613af657613af561495b565b5b600082013567ffffffffffffffff811115613b1457613b13614956565b5b613b208482850161380a565b91505092915050565b600060208284031215613b3f57613b3e61495b565b5b6000613b4d84828501613838565b91505092915050565b6000613b628383614031565b60208301905092915050565b613b778161469a565b82525050565b6000613b888261450e565b613b92818561453c565b9350613b9d836144e9565b8060005b83811015613bce578151613bb58882613b56565b9750613bc08361452f565b925050600181019050613ba1565b5085935050505092915050565b613be4816146ac565b82525050565b6000613bf582614519565b613bff818561454d565b9350613c0f81856020860161471d565b613c1881614960565b840191505092915050565b6000613c2e82614524565b613c388185614569565b9350613c4881856020860161471d565b613c5181614960565b840191505092915050565b6000613c6782614524565b613c71818561457a565b9350613c8181856020860161471d565b80840191505092915050565b60008154613c9a81614750565b613ca4818661457a565b94506001821660008114613cbf5760018114613cd057613d03565b60ff19831686528186019350613d03565b613cd9856144f9565b60005b83811015613cfb57815481890152600182019150602081019050613cdc565b838801955050505b50505092915050565b6000613d19604283614569565b9150613d2482614971565b606082019050919050565b6000613d3c604383614569565b9150613d47826149e6565b606082019050919050565b6000613d5f602b83614569565b9150613d6a82614a5b565b604082019050919050565b6000613d82603283614569565b9150613d8d82614aaa565b604082019050919050565b6000613da5603783614569565b9150613db082614af9565b604082019050919050565b6000613dc8602683614569565b9150613dd382614b48565b604082019050919050565b6000613deb602583614569565b9150613df682614b97565b604082019050919050565b6000613e0e601c83614569565b9150613e1982614be6565b602082019050919050565b6000613e31602483614569565b9150613e3c82614c0f565b604082019050919050565b6000613e54601983614569565b9150613e5f82614c5e565b602082019050919050565b6000613e77602c83614569565b9150613e8282614c87565b604082019050919050565b6000613e9a603883614569565b9150613ea582614cd6565b604082019050919050565b6000613ebd602a83614569565b9150613ec882614d25565b604082019050919050565b6000613ee0602983614569565b9150613eeb82614d74565b604082019050919050565b6000613f03602083614569565b9150613f0e82614dc3565b602082019050919050565b6000613f26602c83614569565b9150613f3182614dec565b604082019050919050565b6000613f49602083614569565b9150613f5482614e3b565b602082019050919050565b6000613f6c602f83614569565b9150613f7782614e64565b604082019050919050565b6000613f8f602183614569565b9150613f9a82614eb3565b604082019050919050565b6000613fb2602183614569565b9150613fbd82614f02565b604082019050919050565b6000613fd560008361455e565b9150613fe082614f51565b600082019050919050565b6000613ff8603183614569565b915061400382614f54565b604082019050919050565b600061401b602c83614569565b915061402682614fa3565b604082019050919050565b61403a81614704565b82525050565b61404981614704565b82525050565b600061405b8286613c5c565b91506140678285613c5c565b91506140738284613c8d565b9150819050949350505050565b600061408b82613fc8565b9150819050919050565b60006020820190506140aa6000830184613b6e565b92915050565b60006080820190506140c56000830187613b6e565b6140d26020830186613b6e565b6140df6040830185614040565b81810360608301526140f18184613bea565b905095945050505050565b600060208201905081810360008301526141168184613b7d565b905092915050565b60006020820190506141336000830184613bdb565b92915050565b600060208201905081810360008301526141538184613c23565b905092915050565b6000602082019050818103600083015261417481613d0c565b9050919050565b6000602082019050818103600083015261419481613d2f565b9050919050565b600060208201905081810360008301526141b481613d52565b9050919050565b600060208201905081810360008301526141d481613d75565b9050919050565b600060208201905081810360008301526141f481613d98565b9050919050565b6000602082019050818103600083015261421481613dbb565b9050919050565b6000602082019050818103600083015261423481613dde565b9050919050565b6000602082019050818103600083015261425481613e01565b9050919050565b6000602082019050818103600083015261427481613e24565b9050919050565b6000602082019050818103600083015261429481613e47565b9050919050565b600060208201905081810360008301526142b481613e6a565b9050919050565b600060208201905081810360008301526142d481613e8d565b9050919050565b600060208201905081810360008301526142f481613eb0565b9050919050565b6000602082019050818103600083015261431481613ed3565b9050919050565b6000602082019050818103600083015261433481613ef6565b9050919050565b6000602082019050818103600083015261435481613f19565b9050919050565b6000602082019050818103600083015261437481613f3c565b9050919050565b6000602082019050818103600083015261439481613f5f565b9050919050565b600060208201905081810360008301526143b481613f82565b9050919050565b600060208201905081810360008301526143d481613fa5565b9050919050565b600060208201905081810360008301526143f481613feb565b9050919050565b600060208201905081810360008301526144148161400e565b9050919050565b60006020820190506144306000830184614040565b92915050565b6000614440614451565b905061444c8282614782565b919050565b6000604051905090565b600067ffffffffffffffff82111561447657614475614918565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a2576144a1614918565b5b6144ab82614960565b9050602081019050919050565b600067ffffffffffffffff8211156144d3576144d2614918565b5b6144dc82614960565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061459082614704565b915061459b83614704565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d0576145cf61482d565b5b828201905092915050565b60006145e682614704565b91506145f183614704565b9250826146015761460061485c565b5b828204905092915050565b600061461782614704565b915061462283614704565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465b5761465a61482d565b5b828202905092915050565b600061467182614704565b915061467c83614704565b92508282101561468f5761468e61482d565b5b828203905092915050565b60006146a5826146e4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561473b578082015181840152602081019050614720565b8381111561474a576000848401525b50505050565b6000600282049050600182168061476857607f821691505b6020821081141561477c5761477b61488b565b5b50919050565b61478b82614960565b810181811067ffffffffffffffff821117156147aa576147a9614918565b5b80604052505050565b60006147be82614704565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f1576147f061482d565b5b600182019050919050565b600061480782614704565b915061481283614704565b9250826148225761482161485c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f44726f702064617465206d75737420626520696e2066757475726521204f746860008201527f6572776973652063616c6c2064697361626c655075626c696344726f7054696d60208201527f6521000000000000000000000000000000000000000000000000000000000000604082015250565b7f44726f702064617465206d75737420626520696e2066757475726521204f746860008201527f6572776973652063616c6c2064697361626c6550726573616c6544726f70546960208201527f6d65210000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520746f74616c20737570706c79206f6620746f6b656e7320776f756c6460008201527f2065786365656420746865206d617820737570706c792e000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206973206e6f74206f6e2074686520616c6c6f77206c69737460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ffb8161469a565b811461500657600080fd5b50565b615012816146ac565b811461501d57600080fd5b50565b615029816146b8565b811461503457600080fd5b50565b61504081614704565b811461504b57600080fd5b5056fea264697066735822122057d004b1fa468fb5c4e2867f75d57e688457a404443c1d9f08029d4f78de90db64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001547656e6573697320506861726d61637920506173730000000000000000000000000000000000000000000000000000000000000000000000000000000000001347656e65736973506861726d61637950617373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696379767664336f737261676d7475763463647a72677435776f6d7866637665376a7a6f6f776e776636663535796b3671626836612f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696379767664336f737261676d7475763463647a72677435776f6d7866637665376a7a6f6f776e776636663535796b3671626836612f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061038c5760003560e01c8063672756ad116101dc578063b2f3e85e11610102578063da3ef23f116100a0578063ed931e171161006f578063ed931e1714610ca4578063ee54be9614610ccd578063f2c4ce1e14610cf6578063f2fde38b14610d1f5761038c565b8063da3ef23f14610bfe578063db26cff414610c27578063e5473dae14610c50578063e985e9c514610c675761038c565b8063c46e9f7c116100dc578063c46e9f7c14610b40578063c668286214610b6b578063c87b56dd14610b96578063d5abeb0114610bd35761038c565b8063b2f3e85e14610ad7578063b88d4fde14610b00578063bc05748e14610b295761038c565b80638da5cb5b1161017a578063a22cb46511610149578063a22cb46514610a45578063a475b5dd14610a6e578063a51139b114610a85578063a51312c814610aae5761038c565b80638da5cb5b1461099b5780638fdcf942146109c657806391c4b574146109ef57806395d89b4114610a1a5761038c565b8063715018a6116101b6578063715018a6146109095780637263cfe214610920578063729ad39e146109495780637f00c7a6146109725761038c565b8063672756ad1461088a5780636c0360eb146108a157806370a08231146108cc5761038c565b80632f745c59116102c157806344eed8811161025f57806358feaa591161022e57806358feaa59146107e05780635c7706c2146107f75780635c975abb146108225780636352211e1461084d5761038c565b806344eed881146107245780634f6ccce71461074f578063518302271461078c57806355f804b3146107b75761038c565b806340c10f191161029b57806340c10f191461067957806342842e0e14610695578063438b6300146106be57806344a0d68a146106fb5761038c565b80632f745c59146105f557806330b2264e146106325780633ccfd60b1461066f5761038c565b8063138c6d9f1161032e57806318160ddd1161030857806318160ddd1461054b578063239c70ae1461057657806323b872dd146105a15780632a23d07d146105ca5761038c565b8063138c6d9f146104de57806313faede6146104f557806316ca0f97146105205761038c565b8063081812fc1161036a578063081812fc14610422578063081c8c441461045f578063095ea7b31461048a5780630c863bb6146104b35761038c565b806301ffc9a71461039157806302329a29146103ce57806306fdde03146103f7575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613a86565b610d48565b6040516103c5919061411e565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a59565b610dc2565b005b34801561040357600080fd5b5061040c610de7565b6040516104199190614139565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613b29565b610e79565b6040516104569190614095565b60405180910390f35b34801561046b57600080fd5b50610474610efe565b6040516104819190614139565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906139d0565b610f8c565b005b3480156104bf57600080fd5b506104c86110a4565b6040516104d5919061411e565b60405180910390f35b3480156104ea57600080fd5b506104f36110d6565b005b34801561050157600080fd5b5061050a6110fb565b604051610517919061441b565b60405180910390f35b34801561052c57600080fd5b50610535611101565b604051610542919061441b565b60405180910390f35b34801561055757600080fd5b50610560611107565b60405161056d919061441b565b60405180910390f35b34801561058257600080fd5b5061058b611114565b604051610598919061441b565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906138ba565b61111a565b005b3480156105d657600080fd5b506105df61117a565b6040516105ec919061441b565b60405180910390f35b34801561060157600080fd5b5061061c600480360381019061061791906139d0565b611180565b604051610629919061441b565b60405180910390f35b34801561063e57600080fd5b506106596004803603810190610654919061384d565b611225565b604051610666919061411e565b60405180910390f35b610677611245565b005b610693600480360381019061068e91906139d0565b6112c6565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906138ba565b611495565b005b3480156106ca57600080fd5b506106e560048036038101906106e0919061384d565b6114b5565b6040516106f291906140fc565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190613b29565b611563565b005b34801561073057600080fd5b50610739611575565b604051610746919061441b565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190613b29565b61157b565b604051610783919061441b565b60405180910390f35b34801561079857600080fd5b506107a16115ec565b6040516107ae919061411e565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613ae0565b6115ff565b005b3480156107ec57600080fd5b506107f5611621565b005b34801561080357600080fd5b5061080c611646565b604051610819919061411e565b60405180910390f35b34801561082e57600080fd5b50610837611678565b604051610844919061411e565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190613b29565b61168b565b6040516108819190614095565b60405180910390f35b34801561089657600080fd5b5061089f61173d565b005b3480156108ad57600080fd5b506108b6611846565b6040516108c39190614139565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061384d565b6118d4565b604051610900919061441b565b60405180910390f35b34801561091557600080fd5b5061091e61198c565b005b34801561092c57600080fd5b5061094760048036038101906109429190613a10565b6119a0565b005b34801561095557600080fd5b50610970600480360381019061096b9190613a10565b611a3d565b005b34801561097e57600080fd5b5061099960048036038101906109949190613b29565b611af6565b005b3480156109a757600080fd5b506109b0611b08565b6040516109bd9190614095565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613b29565b611b32565b005b3480156109fb57600080fd5b50610a04611b44565b604051610a11919061411e565b60405180910390f35b348015610a2657600080fd5b50610a2f611b57565b604051610a3c9190614139565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a679190613990565b611be9565b005b348015610a7a57600080fd5b50610a83611bff565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190613b29565b611c24565b005b348015610aba57600080fd5b50610ad56004803603810190610ad09190613a10565b611c78565b005b348015610ae357600080fd5b50610afe6004803603810190610af9919061384d565b611d15565b005b348015610b0c57600080fd5b50610b276004803603810190610b22919061390d565b611d78565b005b348015610b3557600080fd5b50610b3e611dda565b005b348015610b4c57600080fd5b50610b55611dff565b604051610b62919061411e565b60405180910390f35b348015610b7757600080fd5b50610b80611e12565b604051610b8d9190614139565b60405180910390f35b348015610ba257600080fd5b50610bbd6004803603810190610bb89190613b29565b611ea0565b604051610bca9190614139565b60405180910390f35b348015610bdf57600080fd5b50610be8611ff9565b604051610bf5919061441b565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c209190613ae0565b611fff565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613a10565b612021565b005b348015610c5c57600080fd5b50610c656120be565b005b348015610c7357600080fd5b50610c8e6004803603810190610c89919061387a565b6120e3565b604051610c9b919061411e565b60405180910390f35b348015610cb057600080fd5b50610ccb6004803603810190610cc6919061384d565b612177565b005b348015610cd957600080fd5b50610cf46004803603810190610cef9190613b29565b6121da565b005b348015610d0257600080fd5b50610d1d6004803603810190610d189190613ae0565b61222e565b005b348015610d2b57600080fd5b50610d466004803603810190610d41919061384d565b612250565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dbb5750610dba826122d4565b5b9050919050565b610dca6123b6565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610df690614750565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2290614750565b8015610e6f5780601f10610e4457610100808354040283529160200191610e6f565b820191906000526020600020905b815481529060010190602001808311610e5257829003601f168201915b5050505050905090565b6000610e8482612434565b610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061433b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610f0b90614750565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3790614750565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b505050505081565b6000610f978261168b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061439b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110276124a0565b73ffffffffffffffffffffffffffffffffffffffff1614806110565750611055816110506124a0565b6120e3565b5b611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c906142bb565b60405180910390fd5b61109f83836124a8565b505050565b6000801515601560009054906101000a900460ff16151514156110ca57600190506110d3565b60165442101590505b90565b6110de6123b6565b6000601760006101000a81548160ff021916908315150217905550565b600d5481565b60185481565b6000600880549050905090565b60105481565b61112b6111256124a0565b82612561565b61116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906143db565b60405180910390fd5b61117583838361263f565b505050565b600e5481565b600061118b836118d4565b82106111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061419b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b61124d6123b6565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161127390614080565b60006040518083038185875af1925050503d80600081146112b0576040519150601f19603f3d011682016040523d82523d6000602084013e6112b5565b606091505b50509050806112c357600080fd5b50565b60006112d0611107565b9050600082116112df57600080fd5b600f5482826112ee9190614585565b11156112f957600080fd5b60105482111561130857600080fd5b611310611b08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114585761134a6110a4565b15801561135b575061135a611646565b5b156113d057601160009054906101000a900460ff161561137a57600080fd5b81600e54611388919061460c565b34101561139457600080fd5b6000600190505b8281116113ca576113b78482846113b29190614585565b6128a6565b80806113c2906147b3565b91505061139b565b50611453565b6113d8611646565b1561144d57601160009054906101000a900460ff16156113f757600080fd5b81600d54611405919061460c565b34101561141157600080fd5b6000600190505b8281116114475761143484828461142f9190614585565b6128a6565b808061143f906147b3565b915050611418565b50611452565b600080fd5b5b611490565b6000600190505b82811161148e5761147b8482846114769190614585565b6128a6565b8080611486906147b3565b91505061145f565b505b505050565b6114b083838360405180602001604052806000815250611d78565b505050565b606060006114c2836118d4565b905060008167ffffffffffffffff8111156114e0576114df614918565b5b60405190808252806020026020018201604052801561150e5781602001602082028036833780820191505090505b50905060005b82811015611558576115268582611180565b828281518110611539576115386148e9565b5b6020026020010181815250508080611550906147b3565b915050611514565b508092505050919050565b61156b6123b6565b80600d8190555050565b60165481565b6000611585611107565b82106115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906143fb565b60405180910390fd5b600882815481106115da576115d96148e9565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6116076123b6565b80600b908051906020019061161d9291906135c3565b5050565b6116296123b6565b6000601560006101000a81548160ff021916908315150217905550565b6000801515601760009054906101000a900460ff161515141561166c5760019050611675565b60185442101590505b90565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b906142fb565b60405180910390fd5b80915050919050565b6000611747611107565b9050601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc906143bb565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118433360018361183e9190614585565b6128a6565b50565b600b805461185390614750565b80601f016020809104026020016040519081016040528092919081815260200182805461187f90614750565b80156118cc5780601f106118a1576101008083540402835291602001916118cc565b820191906000526020600020905b8154815290600101906020018083116118af57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c906142db565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119946123b6565b61199e60006128c4565b565b6119a86123b6565b60005b8151811015611a39576001601460008484815181106119cd576119cc6148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a31906147b3565b9150506119ab565b5050565b611a456123b6565b60005b8151811015611af2576000611a5b611107565b9050600f54818451611a6d9190614585565b1115611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906141db565b60405180910390fd5b611ade838381518110611ac457611ac36148e9565b5b6020026020010151600183611ad99190614585565b6128a6565b508080611aea906147b3565b915050611a48565b5050565b611afe6123b6565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b3a6123b6565b80600e8190555050565b601560009054906101000a900460ff1681565b606060018054611b6690614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9290614750565b8015611bdf5780601f10611bb457610100808354040283529160200191611bdf565b820191906000526020600020905b815481529060010190602001808311611bc257829003601f168201915b5050505050905090565b611bfb611bf46124a0565b838361298a565b5050565b611c076123b6565b6001601160016101000a81548160ff021916908315150217905550565b611c2c6123b6565b428111611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061417b565b60405180910390fd5b8060188190555050565b611c806123b6565b60005b8151811015611d1157600060146000848481518110611ca557611ca46148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d09906147b3565b915050611c83565b5050565b611d1d6123b6565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d89611d836124a0565b83612561565b611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906143db565b60405180910390fd5b611dd484848484612af7565b50505050565b611de26123b6565b6001601560006101000a81548160ff021916908315150217905550565b601760009054906101000a900460ff1681565b600c8054611e1f90614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4b90614750565b8015611e985780601f10611e6d57610100808354040283529160200191611e98565b820191906000526020600020905b815481529060010190602001808311611e7b57829003601f168201915b505050505081565b6060611eab82612434565b611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee19061437b565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611f985760128054611f1390614750565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f90614750565b8015611f8c5780601f10611f6157610100808354040283529160200191611f8c565b820191906000526020600020905b815481529060010190602001808311611f6f57829003601f168201915b50505050509050611ff4565b6000611fa2612b53565b90506000815111611fc25760405180602001604052806000815250611ff0565b80611fcc84612be5565b600c604051602001611fe09392919061404f565b6040516020818303038152906040525b9150505b919050565b600f5481565b6120076123b6565b80600c908051906020019061201d9291906135c3565b5050565b6120296123b6565b60005b81518110156120ba5760016013600084848151811061204e5761204d6148e9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120b2906147b3565b91505061202c565b5050565b6120c66123b6565b6001601760006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217f6123b6565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121e26123b6565b428111612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061415b565b60405180910390fd5b8060168190555050565b6122366123b6565b806012908051906020019061224c9291906135c3565b5050565b6122586123b6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf906141fb565b60405180910390fd5b6122d1816128c4565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061239f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123af57506123ae82612d46565b5b9050919050565b6123be6124a0565b73ffffffffffffffffffffffffffffffffffffffff166123dc611b08565b73ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124299061435b565b60405180910390fd5b565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661251b8361168b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061256c82612434565b6125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a29061429b565b60405180910390fd5b60006125b68361168b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125f857506125f781856120e3565b5b8061263657508373ffffffffffffffffffffffffffffffffffffffff1661261e84610e79565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661265f8261168b565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac9061421b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c9061425b565b60405180910390fd5b612730838383612db0565b61273b6000826124a8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278b9190614666565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e29190614585565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128a1838383612ec4565b505050565b6128c0828260405180602001604052806000815250612ec9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612aea919061411e565b60405180910390a3505050565b612b0284848461263f565b612b0e84848484612f24565b612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b44906141bb565b60405180910390fd5b50505050565b6060600b8054612b6290614750565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8e90614750565b8015612bdb5780601f10612bb057610100808354040283529160200191612bdb565b820191906000526020600020905b815481529060010190602001808311612bbe57829003601f168201915b5050505050905090565b60606000821415612c2d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d41565b600082905060005b60008214612c5f578080612c48906147b3565b915050600a82612c5891906145db565b9150612c35565b60008167ffffffffffffffff811115612c7b57612c7a614918565b5b6040519080825280601f01601f191660200182016040528015612cad5781602001600182028036833780820191505090505b5090505b60008514612d3a57600182612cc69190614666565b9150600a85612cd591906147fc565b6030612ce19190614585565b60f81b818381518110612cf757612cf66148e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d3391906145db565b9450612cb1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612dbb8383836130bb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe57612df9816130c0565b612e3d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e3c57612e3b8382613109565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8057612e7b81613276565b612ebf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ebe57612ebd8282613347565b5b5b505050565b505050565b612ed383836133c6565b612ee06000848484612f24565b612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f16906141bb565b60405180910390fd5b505050565b6000612f458473ffffffffffffffffffffffffffffffffffffffff166135a0565b156130ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f6e6124a0565b8786866040518563ffffffff1660e01b8152600401612f9094939291906140b0565b602060405180830381600087803b158015612faa57600080fd5b505af1925050508015612fdb57506040513d601f19601f82011682018060405250810190612fd89190613ab3565b60015b61305e573d806000811461300b576040519150601f19603f3d011682016040523d82523d6000602084013e613010565b606091505b50600081511415613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906141bb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613116846118d4565b6131209190614666565b9050600060076000848152602001908152602001600020549050818114613205576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061328a9190614666565b90506000600960008481526020019081526020016000205490506000600883815481106132ba576132b96148e9565b5b9060005260206000200154905080600883815481106132dc576132db6148e9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061332b5761332a6148ba565b5b6001900381819060005260206000200160009055905550505050565b6000613352836118d4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d9061431b565b60405180910390fd5b61343f81612434565b1561347f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134769061423b565b60405180910390fd5b61348b60008383612db0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134db9190614585565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461359c60008383612ec4565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135cf90614750565b90600052602060002090601f0160209004810192826135f15760008555613638565b82601f1061360a57805160ff1916838001178555613638565b82800160010185558215613638579182015b8281111561363757825182559160200191906001019061361c565b5b5090506136459190613649565b5090565b5b8082111561366257600081600090555060010161364a565b5090565b60006136796136748461445b565b614436565b9050808382526020820190508285602086028201111561369c5761369b61494c565b5b60005b858110156136cc57816136b2888261375a565b84526020840193506020830192505060018101905061369f565b5050509392505050565b60006136e96136e484614487565b614436565b90508281526020810184848401111561370557613704614951565b5b61371084828561470e565b509392505050565b600061372b613726846144b8565b614436565b90508281526020810184848401111561374757613746614951565b5b61375284828561470e565b509392505050565b60008135905061376981614ff2565b92915050565b600082601f83011261378457613783614947565b5b8135613794848260208601613666565b91505092915050565b6000813590506137ac81615009565b92915050565b6000813590506137c181615020565b92915050565b6000815190506137d681615020565b92915050565b600082601f8301126137f1576137f0614947565b5b81356138018482602086016136d6565b91505092915050565b600082601f83011261381f5761381e614947565b5b813561382f848260208601613718565b91505092915050565b60008135905061384781615037565b92915050565b6000602082840312156138635761386261495b565b5b60006138718482850161375a565b91505092915050565b600080604083850312156138915761389061495b565b5b600061389f8582860161375a565b92505060206138b08582860161375a565b9150509250929050565b6000806000606084860312156138d3576138d261495b565b5b60006138e18682870161375a565b93505060206138f28682870161375a565b925050604061390386828701613838565b9150509250925092565b600080600080608085870312156139275761392661495b565b5b60006139358782880161375a565b94505060206139468782880161375a565b935050604061395787828801613838565b925050606085013567ffffffffffffffff81111561397857613977614956565b5b613984878288016137dc565b91505092959194509250565b600080604083850312156139a7576139a661495b565b5b60006139b58582860161375a565b92505060206139c68582860161379d565b9150509250929050565b600080604083850312156139e7576139e661495b565b5b60006139f58582860161375a565b9250506020613a0685828601613838565b9150509250929050565b600060208284031215613a2657613a2561495b565b5b600082013567ffffffffffffffff811115613a4457613a43614956565b5b613a508482850161376f565b91505092915050565b600060208284031215613a6f57613a6e61495b565b5b6000613a7d8482850161379d565b91505092915050565b600060208284031215613a9c57613a9b61495b565b5b6000613aaa848285016137b2565b91505092915050565b600060208284031215613ac957613ac861495b565b5b6000613ad7848285016137c7565b91505092915050565b600060208284031215613af657613af561495b565b5b600082013567ffffffffffffffff811115613b1457613b13614956565b5b613b208482850161380a565b91505092915050565b600060208284031215613b3f57613b3e61495b565b5b6000613b4d84828501613838565b91505092915050565b6000613b628383614031565b60208301905092915050565b613b778161469a565b82525050565b6000613b888261450e565b613b92818561453c565b9350613b9d836144e9565b8060005b83811015613bce578151613bb58882613b56565b9750613bc08361452f565b925050600181019050613ba1565b5085935050505092915050565b613be4816146ac565b82525050565b6000613bf582614519565b613bff818561454d565b9350613c0f81856020860161471d565b613c1881614960565b840191505092915050565b6000613c2e82614524565b613c388185614569565b9350613c4881856020860161471d565b613c5181614960565b840191505092915050565b6000613c6782614524565b613c71818561457a565b9350613c8181856020860161471d565b80840191505092915050565b60008154613c9a81614750565b613ca4818661457a565b94506001821660008114613cbf5760018114613cd057613d03565b60ff19831686528186019350613d03565b613cd9856144f9565b60005b83811015613cfb57815481890152600182019150602081019050613cdc565b838801955050505b50505092915050565b6000613d19604283614569565b9150613d2482614971565b606082019050919050565b6000613d3c604383614569565b9150613d47826149e6565b606082019050919050565b6000613d5f602b83614569565b9150613d6a82614a5b565b604082019050919050565b6000613d82603283614569565b9150613d8d82614aaa565b604082019050919050565b6000613da5603783614569565b9150613db082614af9565b604082019050919050565b6000613dc8602683614569565b9150613dd382614b48565b604082019050919050565b6000613deb602583614569565b9150613df682614b97565b604082019050919050565b6000613e0e601c83614569565b9150613e1982614be6565b602082019050919050565b6000613e31602483614569565b9150613e3c82614c0f565b604082019050919050565b6000613e54601983614569565b9150613e5f82614c5e565b602082019050919050565b6000613e77602c83614569565b9150613e8282614c87565b604082019050919050565b6000613e9a603883614569565b9150613ea582614cd6565b604082019050919050565b6000613ebd602a83614569565b9150613ec882614d25565b604082019050919050565b6000613ee0602983614569565b9150613eeb82614d74565b604082019050919050565b6000613f03602083614569565b9150613f0e82614dc3565b602082019050919050565b6000613f26602c83614569565b9150613f3182614dec565b604082019050919050565b6000613f49602083614569565b9150613f5482614e3b565b602082019050919050565b6000613f6c602f83614569565b9150613f7782614e64565b604082019050919050565b6000613f8f602183614569565b9150613f9a82614eb3565b604082019050919050565b6000613fb2602183614569565b9150613fbd82614f02565b604082019050919050565b6000613fd560008361455e565b9150613fe082614f51565b600082019050919050565b6000613ff8603183614569565b915061400382614f54565b604082019050919050565b600061401b602c83614569565b915061402682614fa3565b604082019050919050565b61403a81614704565b82525050565b61404981614704565b82525050565b600061405b8286613c5c565b91506140678285613c5c565b91506140738284613c8d565b9150819050949350505050565b600061408b82613fc8565b9150819050919050565b60006020820190506140aa6000830184613b6e565b92915050565b60006080820190506140c56000830187613b6e565b6140d26020830186613b6e565b6140df6040830185614040565b81810360608301526140f18184613bea565b905095945050505050565b600060208201905081810360008301526141168184613b7d565b905092915050565b60006020820190506141336000830184613bdb565b92915050565b600060208201905081810360008301526141538184613c23565b905092915050565b6000602082019050818103600083015261417481613d0c565b9050919050565b6000602082019050818103600083015261419481613d2f565b9050919050565b600060208201905081810360008301526141b481613d52565b9050919050565b600060208201905081810360008301526141d481613d75565b9050919050565b600060208201905081810360008301526141f481613d98565b9050919050565b6000602082019050818103600083015261421481613dbb565b9050919050565b6000602082019050818103600083015261423481613dde565b9050919050565b6000602082019050818103600083015261425481613e01565b9050919050565b6000602082019050818103600083015261427481613e24565b9050919050565b6000602082019050818103600083015261429481613e47565b9050919050565b600060208201905081810360008301526142b481613e6a565b9050919050565b600060208201905081810360008301526142d481613e8d565b9050919050565b600060208201905081810360008301526142f481613eb0565b9050919050565b6000602082019050818103600083015261431481613ed3565b9050919050565b6000602082019050818103600083015261433481613ef6565b9050919050565b6000602082019050818103600083015261435481613f19565b9050919050565b6000602082019050818103600083015261437481613f3c565b9050919050565b6000602082019050818103600083015261439481613f5f565b9050919050565b600060208201905081810360008301526143b481613f82565b9050919050565b600060208201905081810360008301526143d481613fa5565b9050919050565b600060208201905081810360008301526143f481613feb565b9050919050565b600060208201905081810360008301526144148161400e565b9050919050565b60006020820190506144306000830184614040565b92915050565b6000614440614451565b905061444c8282614782565b919050565b6000604051905090565b600067ffffffffffffffff82111561447657614475614918565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a2576144a1614918565b5b6144ab82614960565b9050602081019050919050565b600067ffffffffffffffff8211156144d3576144d2614918565b5b6144dc82614960565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061459082614704565b915061459b83614704565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d0576145cf61482d565b5b828201905092915050565b60006145e682614704565b91506145f183614704565b9250826146015761460061485c565b5b828204905092915050565b600061461782614704565b915061462283614704565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465b5761465a61482d565b5b828202905092915050565b600061467182614704565b915061467c83614704565b92508282101561468f5761468e61482d565b5b828203905092915050565b60006146a5826146e4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561473b578082015181840152602081019050614720565b8381111561474a576000848401525b50505050565b6000600282049050600182168061476857607f821691505b6020821081141561477c5761477b61488b565b5b50919050565b61478b82614960565b810181811067ffffffffffffffff821117156147aa576147a9614918565b5b80604052505050565b60006147be82614704565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f1576147f061482d565b5b600182019050919050565b600061480782614704565b915061481283614704565b9250826148225761482161485c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f44726f702064617465206d75737420626520696e2066757475726521204f746860008201527f6572776973652063616c6c2064697361626c655075626c696344726f7054696d60208201527f6521000000000000000000000000000000000000000000000000000000000000604082015250565b7f44726f702064617465206d75737420626520696e2066757475726521204f746860008201527f6572776973652063616c6c2064697361626c6550726573616c6544726f70546960208201527f6d65210000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520746f74616c20737570706c79206f6620746f6b656e7320776f756c6460008201527f2065786365656420746865206d617820737570706c792e000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206973206e6f74206f6e2074686520616c6c6f77206c69737460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ffb8161469a565b811461500657600080fd5b50565b615012816146ac565b811461501d57600080fd5b50565b615029816146b8565b811461503457600080fd5b50565b61504081614704565b811461504b57600080fd5b5056fea264697066735822122057d004b1fa468fb5c4e2867f75d57e688457a404443c1d9f08029d4f78de90db64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001547656e6573697320506861726d61637920506173730000000000000000000000000000000000000000000000000000000000000000000000000000000000001347656e65736973506861726d61637950617373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696379767664336f737261676d7475763463647a72677435776f6d7866637665376a7a6f6f776e776636663535796b3671626836612f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696379767664336f737261676d7475763463647a72677435776f6d7866637665376a7a6f6f776e776636663535796b3671626836612f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Genesis Pharmacy Pass
Arg [1] : _symbol (string): GenesisPharmacyPass
Arg [2] : _initBaseURI (string): ipfs://bafybeicyvvd3osragmtuv4cdzrgt5womxfcve7jzoownwf6f55yk6qbh6a/
Arg [3] : _initNotRevealedUri (string): ipfs://bafybeicyvvd3osragmtuv4cdzrgt5womxfcve7jzoownwf6f55yk6qbh6a/

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 47656e6573697320506861726d61637920506173730000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [7] : 47656e65736973506861726d6163795061737300000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [9] : 697066733a2f2f626166796265696379767664336f737261676d747576346364
Arg [10] : 7a72677435776f6d7866637665376a7a6f6f776e776636663535796b36716268
Arg [11] : 36612f0000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [13] : 697066733a2f2f626166796265696379767664336f737261676d747576346364
Arg [14] : 7a72677435776f6d7866637665376a7a6f6f776e776636663535796b36716268
Arg [15] : 36612f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45869:7313:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39633:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52470:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28012:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46267:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27535:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50765:200;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51321:100;;;;;;;;;;;;;:::i;:::-;;46038:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46551:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46160:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28762:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46077:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39941:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46302:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52987:192;;;:::i;:::-;;47040:1129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29172:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48794:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51735:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46454:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40463:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46233:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52199:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50661:98;;;;;;;;;;;;;:::i;:::-;;51429:203;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46200:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26146:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48175:240;;;;;;;;;;;;;:::i;:::-;;45966:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5010:103;;;;;;;;;;;;;:::i;:::-;;49916:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48421:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52069:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4362:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51961:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46407:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26621:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28305:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51658:69;;;;;;;;;;;;;:::i;:::-;;50973:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50114:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52557:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29428:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50560:93;;;;;;;;;;;;;:::i;:::-;;46503:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45994:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49192:716;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46123:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52311:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52668:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51218:95;;;;;;;;;;;;;:::i;:::-;;28531:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52872:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50320:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51827:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5268:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39633:224;39735:4;39774:35;39759:50;;;:11;:50;;;;:90;;;;39813:36;39837:11;39813:23;:36::i;:::-;39759:90;39752:97;;39633:224;;;:::o;52470:79::-;4248:13;:11;:13::i;:::-;52535:6:::1;52526;;:15;;;;;;;;;;;;;;;;;;52470:79:::0;:::o;26452:100::-;26506:13;26539:5;26532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26452:100;:::o;28012:221::-;28088:7;28116:16;28124:7;28116;:16::i;:::-;28108:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28201:15;:24;28217:7;28201:24;;;;;;;;;;;;;;;;;;;;;28194:31;;28012:221;;;:::o;46267:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27535:411::-;27616:13;27632:23;27647:7;27632:14;:23::i;:::-;27616:39;;27680:5;27674:11;;:2;:11;;;;27666:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27774:5;27758:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27783:37;27800:5;27807:12;:10;:12::i;:::-;27783:16;:37::i;:::-;27758:62;27736:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27917:21;27926:2;27930:7;27917:8;:21::i;:::-;27605:341;27535:411;;:::o;50765:200::-;50817:4;50862:5;50837:30;;:21;;;;;;;;;;;:30;;;50834:73;;;50891:4;50884:11;;;;50834:73;50943:14;;50924:15;:33;;50917:40;;50765:200;;:::o;51321:100::-;4248:13;:11;:13::i;:::-;51408:5:::1;51383:22;;:30;;;;;;;;;;;;;;;;;;51321:100::o:0;46038:32::-;;;;:::o;46551:43::-;;;;:::o;40273:113::-;40334:7;40361:10;:17;;;;40354:24;;40273:113;:::o;46160:33::-;;;;:::o;28762:339::-;28957:41;28976:12;:10;:12::i;:::-;28990:7;28957:18;:41::i;:::-;28949:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29065:28;29075:4;29081:2;29085:7;29065:9;:28::i;:::-;28762:339;;;:::o;46077:39::-;;;;:::o;39941:256::-;40038:7;40074:23;40091:5;40074:16;:23::i;:::-;40066:5;:31;40058:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40163:12;:19;40176:5;40163:19;;;;;;;;;;;;;;;:26;40183:5;40163:26;;;;;;;;;;;;40156:33;;39941:256;;;;:::o;46302:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;52987:192::-;4248:13;:11;:13::i;:::-;53044:12:::1;53070:10;53062:24;;53108:21;53062:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53043:101;;;53163:7;53155:16;;;::::0;::::1;;53032:147;52987:192::o:0;47040:1129::-;47114:14;47131:13;:11;:13::i;:::-;47114:30;;47177:1;47163:11;:15;47155:24;;;;;;47222:9;;47207:11;47198:6;:20;;;;:::i;:::-;:33;;47190:42;;;;;;47266:13;;47251:11;:28;;47243:37;;;;;;47319:7;:5;:7::i;:::-;47305:21;;:10;:21;;;47301:861;;47348:22;:20;:22::i;:::-;47347:23;:50;;;;;47374:23;:21;:23::i;:::-;47347:50;47343:685;;;47461:6;;;;;;;;;;;47460:7;47452:16;;;;;;47522:11;47508;;:25;;;;:::i;:::-;47495:9;:38;;47487:47;;;;;;47558:9;47570:1;47558:13;;47553:112;47578:11;47573:1;:16;47553:112;;47619:26;47629:3;47643:1;47634:6;:10;;;;:::i;:::-;47619:9;:26::i;:::-;47591:3;;;;;:::i;:::-;;;;47553:112;;;;47343:685;;;47690:23;:21;:23::i;:::-;47686:342;;;47769:6;;;;;;;;;;;47768:7;47760:16;;;;;;47823:11;47816:4;;:18;;;;:::i;:::-;47803:9;:31;;47795:40;;;;;;47859:9;47871:1;47859:13;;47854:112;47879:11;47874:1;:16;47854:112;;47920:26;47930:3;47944:1;47935:6;:10;;;;:::i;:::-;47920:9;:26::i;:::-;47892:3;;;;;:::i;:::-;;;;47854:112;;;;47686:342;;;48004:8;;;47686:342;47343:685;47301:861;;;48060:9;48072:1;48060:13;;48055:96;48080:11;48075:1;:16;48055:96;;48113:26;48123:3;48137:1;48128:6;:10;;;;:::i;:::-;48113:9;:26::i;:::-;48093:3;;;;;:::i;:::-;;;;48055:96;;;;47301:861;47103:1066;47040:1129;;:::o;29172:185::-;29310:39;29327:4;29333:2;29337:7;29310:39;;;;;;;;;;;;:16;:39::i;:::-;29172:185;;;:::o;48794:390::-;48881:16;48915:23;48941:17;48951:6;48941:9;:17::i;:::-;48915:43;;48969:25;49011:15;48997:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48969:58;;49043:9;49038:113;49058:15;49054:1;:19;49038:113;;;49109:30;49129:6;49137:1;49109:19;:30::i;:::-;49095:8;49104:1;49095:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49075:3;;;;;:::i;:::-;;;;49038:113;;;;49168:8;49161:15;;;;48794:390;;;:::o;51735:86::-;4248:13;:11;:13::i;:::-;51805:8:::1;51798:4;:15;;;;51735:86:::0;:::o;46454:42::-;;;;:::o;40463:233::-;40538:7;40574:30;:28;:30::i;:::-;40566:5;:38;40558:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40671:10;40682:5;40671:17;;;;;;;;:::i;:::-;;;;;;;;;;40664:24;;40463:233;;;:::o;46233:27::-;;;;;;;;;;;;;:::o;52199:104::-;4248:13;:11;:13::i;:::-;52284:11:::1;52274:7;:21;;;;;;;;;;;;:::i;:::-;;52199:104:::0;:::o;50661:98::-;4248:13;:11;:13::i;:::-;50746:5:::1;50722:21;;:29;;;;;;;;;;;;;;;;;;50661:98::o:0;51429:203::-;51482:4;51528:5;51502:31;;:22;;;;;;;;;;;:31;;;51499:74;;;51557:4;51550:11;;;;51499:74;51609:15;;51590;:34;;51583:41;;51429:203;;:::o;46200:26::-;;;;;;;;;;;;;:::o;26146:239::-;26218:7;26238:13;26254:7;:16;26262:7;26254:16;;;;;;;;;;;;;;;;;;;;;26238:32;;26306:1;26289:19;;:5;:19;;;;26281:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26372:5;26365:12;;;26146:239;;;:::o;48175:240::-;48213:14;48230:13;:11;:13::i;:::-;48213:30;;48262:10;:22;48273:10;48262:22;;;;;;;;;;;;;;;;;;;;;;;;;48254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48358:5;48333:10;:22;48344:10;48333:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;48374:33;48384:10;48405:1;48396:6;:10;;;;:::i;:::-;48374:9;:33::i;:::-;48202:213;48175:240::o;45966:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25876:208::-;25948:7;25993:1;25976:19;;:5;:19;;;;25968:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:9;:16;26070:5;26060:16;;;;;;;;;;;;;;;;26053:23;;25876:208;;;:::o;5010:103::-;4248:13;:11;:13::i;:::-;5075:30:::1;5102:1;5075:18;:30::i;:::-;5010:103::o:0;49916:192::-;4248:13;:11;:13::i;:::-;50002:6:::1;49997:104;50018:10;:17;50014:1;:21;49997:104;;;50085:4;50057:10;:25;50068:10;50079:1;50068:13;;;;;;;;:::i;:::-;;;;;;;;50057:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;50037:3;;;;;:::i;:::-;;;;49997:104;;;;49916:192:::0;:::o;48421:363::-;4248:13;:11;:13::i;:::-;48509:6:::1;48504:273;48525:10;:17;48521:1;:21;48504:273;;;48564:14;48581:13;:11;:13::i;:::-;48564:30;;48647:9;;48637:6;48617:10;:17;:26;;;;:::i;:::-;:39;;48609:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;48731:34;48741:10;48752:1;48741:13;;;;;;;;:::i;:::-;;;;;;;;48763:1;48756:6;:8;;;;:::i;:::-;48731:9;:34::i;:::-;48549:228;48544:3;;;;;:::i;:::-;;;;48504:273;;;;48421:363:::0;:::o;52069:122::-;4248:13;:11;:13::i;:::-;52166:17:::1;52150:13;:33;;;;52069:122:::0;:::o;4362:87::-;4408:7;4435:6;;;;;;;;;;;4428:13;;4362:87;:::o;51961:100::-;4248:13;:11;:13::i;:::-;52045:8:::1;52031:11;:22;;;;51961:100:::0;:::o;46407:40::-;;;;;;;;;;;;;:::o;26621:104::-;26677:13;26710:7;26703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26621:104;:::o;28305:155::-;28400:52;28419:12;:10;:12::i;:::-;28433:8;28443;28400:18;:52::i;:::-;28305:155;;:::o;51658:69::-;4248:13;:11;:13::i;:::-;51715:4:::1;51704:8;;:15;;;;;;;;;;;;;;;;;;51658:69::o:0;50973:237::-;4248:13;:11;:13::i;:::-;51074:15:::1;51059:12;:30;51051:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;51190:12;51172:15;:30;;;;50973:237:::0;:::o;50114:198::-;4248:13;:11;:13::i;:::-;50205:6:::1;50200:105;50221:10;:17;50217:1;:21;50200:105;;;50288:5;50260:10;:25;50271:10;50282:1;50271:13;;;;;;;;:::i;:::-;;;;;;;;50260:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50240:3;;;;;:::i;:::-;;;;50200:105;;;;50114:198:::0;:::o;52557:103::-;4248:13;:11;:13::i;:::-;52648:4:::1;52624:14;:21;52639:5;52624:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;52557:103:::0;:::o;29428:328::-;29603:41;29622:12;:10;:12::i;:::-;29636:7;29603:18;:41::i;:::-;29595:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29709:39;29723:4;29729:2;29733:7;29742:5;29709:13;:39::i;:::-;29428:328;;;;:::o;50560:93::-;4248:13;:11;:13::i;:::-;50641:4:::1;50617:21;;:28;;;;;;;;;;;;;;;;;;50560:93::o:0;46503:41::-;;;;;;;;;;;;;:::o;45994:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49192:716::-;49310:13;49363:16;49371:7;49363;:16::i;:::-;49341:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;49480:5;49468:17;;:8;;;;;;;;;;;:17;;;49465:66;;;49505:14;49498:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49465:66;49541:28;49572:10;:8;:10::i;:::-;49541:41;;49644:1;49619:14;49613:28;:32;:287;;;;;;;;;;;;;;;;;49737:14;49778:18;:7;:16;:18::i;:::-;49823:13;49694:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49613:287;49593:307;;;49192:716;;;;:::o;46123:30::-;;;;:::o;52311:151::-;4248:13;:11;:13::i;:::-;52437:17:::1;52421:13;:33;;;;;;;;;;;;:::i;:::-;;52311:151:::0;:::o;52668:196::-;4248:13;:11;:13::i;:::-;52759:9:::1;52754:103;52778:6;:13;52774:1;:17;52754:103;;;52841:4;52813:14;:25;52828:6;52835:1;52828:9;;;;;;;;:::i;:::-;;;;;;;;52813:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;52793:3;;;;;:::i;:::-;;;;52754:103;;;;52668:196:::0;:::o;51218:95::-;4248:13;:11;:13::i;:::-;51301:4:::1;51276:22;;:29;;;;;;;;;;;;;;;;;;51218:95::o:0;28531:164::-;28628:4;28652:18;:25;28671:5;28652:25;;;;;;;;;;;;;;;:35;28678:8;28652:35;;;;;;;;;;;;;;;;;;;;;;;;;28645:42;;28531:164;;;;:::o;52872:107::-;4248:13;:11;:13::i;:::-;52966:5:::1;52942:14;:21;52957:5;52942:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;52872:107:::0;:::o;50320:234::-;4248:13;:11;:13::i;:::-;50420:15:::1;50405:12;:30;50397:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;50534:12;50517:14;:29;;;;50320:234:::0;:::o;51827:126::-;4248:13;:11;:13::i;:::-;51930:15:::1;51913:14;:32;;;;;;;;;;;;:::i;:::-;;51827:126:::0;:::o;5268:201::-;4248:13;:11;:13::i;:::-;5377:1:::1;5357:22;;:8;:22;;;;5349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5433:28;5452:8;5433:18;:28::i;:::-;5268:201:::0;:::o;25507:305::-;25609:4;25661:25;25646:40;;;:11;:40;;;;:105;;;;25718:33;25703:48;;;:11;:48;;;;25646:105;:158;;;;25768:36;25792:11;25768:23;:36::i;:::-;25646:158;25626:178;;25507:305;;;:::o;4527:132::-;4602:12;:10;:12::i;:::-;4591:23;;:7;:5;:7::i;:::-;:23;;;4583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4527:132::o;31266:127::-;31331:4;31383:1;31355:30;;:7;:16;31363:7;31355:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31348:37;;31266:127;;;:::o;2913:98::-;2966:7;2993:10;2986:17;;2913:98;:::o;35412:174::-;35514:2;35487:15;:24;35503:7;35487:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35570:7;35566:2;35532:46;;35541:23;35556:7;35541:14;:23::i;:::-;35532:46;;;;;;;;;;;;35412:174;;:::o;31560:348::-;31653:4;31678:16;31686:7;31678;:16::i;:::-;31670:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:13;31770:23;31785:7;31770:14;:23::i;:::-;31754:39;;31823:5;31812:16;;:7;:16;;;:52;;;;31832:32;31849:5;31856:7;31832:16;:32::i;:::-;31812:52;:87;;;;31892:7;31868:31;;:20;31880:7;31868:11;:20::i;:::-;:31;;;31812:87;31804:96;;;31560:348;;;;:::o;34669:625::-;34828:4;34801:31;;:23;34816:7;34801:14;:23::i;:::-;:31;;;34793:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34907:1;34893:16;;:2;:16;;;;34885:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34963:39;34984:4;34990:2;34994:7;34963:20;:39::i;:::-;35067:29;35084:1;35088:7;35067:8;:29::i;:::-;35128:1;35109:9;:15;35119:4;35109:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35157:1;35140:9;:13;35150:2;35140:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35188:2;35169:7;:16;35177:7;35169:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35227:7;35223:2;35208:27;;35217:4;35208:27;;;;;;;;;;;;35248:38;35268:4;35274:2;35278:7;35248:19;:38::i;:::-;34669:625;;;:::o;32250:110::-;32326:26;32336:2;32340:7;32326:26;;;;;;;;;;;;:9;:26::i;:::-;32250:110;;:::o;5629:191::-;5703:16;5722:6;;;;;;;;;;;5703:25;;5748:8;5739:6;;:17;;;;;;;;;;;;;;;;;;5803:8;5772:40;;5793:8;5772:40;;;;;;;;;;;;5692:128;5629:191;:::o;35728:315::-;35883:8;35874:17;;:5;:17;;;;35866:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35970:8;35932:18;:25;35951:5;35932:25;;;;;;;;;;;;;;;:35;35958:8;35932:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36016:8;35994:41;;36009:5;35994:41;;;36026:8;35994:41;;;;;;:::i;:::-;;;;;;;;35728:315;;;:::o;30638:::-;30795:28;30805:4;30811:2;30815:7;30795:9;:28::i;:::-;30842:48;30865:4;30871:2;30875:7;30884:5;30842:22;:48::i;:::-;30834:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30638:315;;;;:::o;46905:108::-;46965:13;46998:7;46991:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46905:108;:::o;475:723::-;531:13;761:1;752:5;:10;748:53;;;779:10;;;;;;;;;;;;;;;;;;;;;748:53;811:12;826:5;811:20;;842:14;867:78;882:1;874:4;:9;867:78;;900:8;;;;;:::i;:::-;;;;931:2;923:10;;;;;:::i;:::-;;;867:78;;;955:19;987:6;977:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;955:39;;1005:154;1021:1;1012:5;:10;1005:154;;1049:1;1039:11;;;;;:::i;:::-;;;1116:2;1108:5;:10;;;;:::i;:::-;1095:2;:24;;;;:::i;:::-;1082:39;;1065:6;1072;1065:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1145:2;1136:11;;;;;:::i;:::-;;;1005:154;;;1183:6;1169:21;;;;;475:723;;;;:::o;17166:157::-;17251:4;17290:25;17275:40;;;:11;:40;;;;17268:47;;17166:157;;;:::o;41309:589::-;41453:45;41480:4;41486:2;41490:7;41453:26;:45::i;:::-;41531:1;41515:18;;:4;:18;;;41511:187;;;41550:40;41582:7;41550:31;:40::i;:::-;41511:187;;;41620:2;41612:10;;:4;:10;;;41608:90;;41639:47;41672:4;41678:7;41639:32;:47::i;:::-;41608:90;41511:187;41726:1;41712:16;;:2;:16;;;41708:183;;;41745:45;41782:7;41745:36;:45::i;:::-;41708:183;;;41818:4;41812:10;;:2;:10;;;41808:83;;41839:40;41867:2;41871:7;41839:27;:40::i;:::-;41808:83;41708:183;41309:589;;;:::o;38490:125::-;;;;:::o;32587:321::-;32717:18;32723:2;32727:7;32717:5;:18::i;:::-;32768:54;32799:1;32803:2;32807:7;32816:5;32768:22;:54::i;:::-;32746:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32587:321;;;:::o;36608:799::-;36763:4;36784:15;:2;:13;;;:15::i;:::-;36780:620;;;36836:2;36820:36;;;36857:12;:10;:12::i;:::-;36871:4;36877:7;36886:5;36820:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36816:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:1;37062:6;:13;:18;37058:272;;;37105:60;;;;;;;;;;:::i;:::-;;;;;;;;37058:272;37280:6;37274:13;37265:6;37261:2;37257:15;37250:38;36816:529;36953:41;;;36943:51;;;:6;:51;;;;36936:58;;;;;36780:620;37384:4;37377:11;;36608:799;;;;;;;:::o;37979:126::-;;;;:::o;42621:164::-;42725:10;:17;;;;42698:15;:24;42714:7;42698:24;;;;;;;;;;;:44;;;;42753:10;42769:7;42753:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42621:164;:::o;43412:988::-;43678:22;43728:1;43703:22;43720:4;43703:16;:22::i;:::-;:26;;;;:::i;:::-;43678:51;;43740:18;43761:17;:26;43779:7;43761:26;;;;;;;;;;;;43740:47;;43908:14;43894:10;:28;43890:328;;43939:19;43961:12;:18;43974:4;43961:18;;;;;;;;;;;;;;;:34;43980:14;43961:34;;;;;;;;;;;;43939:56;;44045:11;44012:12;:18;44025:4;44012:18;;;;;;;;;;;;;;;:30;44031:10;44012:30;;;;;;;;;;;:44;;;;44162:10;44129:17;:30;44147:11;44129:30;;;;;;;;;;;:43;;;;43924:294;43890:328;44314:17;:26;44332:7;44314:26;;;;;;;;;;;44307:33;;;44358:12;:18;44371:4;44358:18;;;;;;;;;;;;;;;:34;44377:14;44358:34;;;;;;;;;;;44351:41;;;43493:907;;43412:988;;:::o;44695:1079::-;44948:22;44993:1;44973:10;:17;;;;:21;;;;:::i;:::-;44948:46;;45005:18;45026:15;:24;45042:7;45026:24;;;;;;;;;;;;45005:45;;45377:19;45399:10;45410:14;45399:26;;;;;;;;:::i;:::-;;;;;;;;;;45377:48;;45463:11;45438:10;45449;45438:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45574:10;45543:15;:28;45559:11;45543:28;;;;;;;;;;;:41;;;;45715:15;:24;45731:7;45715:24;;;;;;;;;;;45708:31;;;45750:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44766:1008;;;44695:1079;:::o;42199:221::-;42284:14;42301:20;42318:2;42301:16;:20::i;:::-;42284:37;;42359:7;42332:12;:16;42345:2;42332:16;;;;;;;;;;;;;;;:24;42349:6;42332:24;;;;;;;;;;;:34;;;;42406:6;42377:17;:26;42395:7;42377:26;;;;;;;;;;;:35;;;;42273:147;42199:221;;:::o;33244:439::-;33338:1;33324:16;;:2;:16;;;;33316:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33397:16;33405:7;33397;:16::i;:::-;33396:17;33388:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33459:45;33488:1;33492:2;33496:7;33459:20;:45::i;:::-;33534:1;33517:9;:13;33527:2;33517:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33565:2;33546:7;:16;33554:7;33546:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33610:7;33606:2;33585:33;;33602:1;33585:33;;;;;;;;;;;;33631:44;33659:1;33663:2;33667:7;33631:19;:44::i;:::-;33244:439;;:::o;7060:326::-;7120:4;7377:1;7355:7;:19;;;:23;7348:30;;7060:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:118::-;9442:24;9460:5;9442:24;:::i;:::-;9437:3;9430:37;9355:118;;:::o;9509:732::-;9628:3;9657:54;9705:5;9657:54;:::i;:::-;9727:86;9806:6;9801:3;9727:86;:::i;:::-;9720:93;;9837:56;9887:5;9837:56;:::i;:::-;9916:7;9947:1;9932:284;9957:6;9954:1;9951:13;9932:284;;;10033:6;10027:13;10060:63;10119:3;10104:13;10060:63;:::i;:::-;10053:70;;10146:60;10199:6;10146:60;:::i;:::-;10136:70;;9992:224;9979:1;9976;9972:9;9967:14;;9932:284;;;9936:14;10232:3;10225:10;;9633:608;;;9509:732;;;;:::o;10247:109::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10247:109;;:::o;10362:360::-;10448:3;10476:38;10508:5;10476:38;:::i;:::-;10530:70;10593:6;10588:3;10530:70;:::i;:::-;10523:77;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10452:270;10362:360;;;;:::o;10728:364::-;10816:3;10844:39;10877:5;10844:39;:::i;:::-;10899:71;10963:6;10958:3;10899:71;:::i;:::-;10892:78;;10979:52;11024:6;11019:3;11012:4;11005:5;11001:16;10979:52;:::i;:::-;11056:29;11078:6;11056:29;:::i;:::-;11051:3;11047:39;11040:46;;10820:272;10728:364;;;;:::o;11098:377::-;11204:3;11232:39;11265:5;11232:39;:::i;:::-;11287:89;11369:6;11364:3;11287:89;:::i;:::-;11280:96;;11385:52;11430:6;11425:3;11418:4;11411:5;11407:16;11385:52;:::i;:::-;11462:6;11457:3;11453:16;11446:23;;11208:267;11098:377;;;;:::o;11505:845::-;11608:3;11645:5;11639:12;11674:36;11700:9;11674:36;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11846:1;11835:9;11831:17;11862:1;11857:137;;;;12008:1;12003:341;;;;11824:520;;11857:137;11941:4;11937:9;11926;11922:25;11917:3;11910:38;11977:6;11972:3;11968:16;11961:23;;11857:137;;12003:341;12070:38;12102:5;12070:38;:::i;:::-;12130:1;12144:154;12158:6;12155:1;12152:13;12144:154;;;12232:7;12226:14;12222:1;12217:3;12213:11;12206:35;12282:1;12273:7;12269:15;12258:26;;12180:4;12177:1;12173:12;12168:17;;12144:154;;;12327:6;12322:3;12318:16;12311:23;;12010:334;;11824:520;;11612:738;;11505:845;;;;:::o;12356:366::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:::-;19194:3;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19291:93;19380:3;19291:93;:::i;:::-;19409:2;19404:3;19400:12;19393:19;;19052:366;;;:::o;19424:::-;19566:3;19587:67;19651:2;19646:3;19587:67;:::i;:::-;19580:74;;19663:93;19752:3;19663:93;:::i;:::-;19781:2;19776:3;19772:12;19765:19;;19424:366;;;:::o;19796:398::-;19955:3;19976:83;20057:1;20052:3;19976:83;:::i;:::-;19969:90;;20068:93;20157:3;20068:93;:::i;:::-;20186:1;20181:3;20177:11;20170:18;;19796:398;;;:::o;20200:366::-;20342:3;20363:67;20427:2;20422:3;20363:67;:::i;:::-;20356:74;;20439:93;20528:3;20439:93;:::i;:::-;20557:2;20552:3;20548:12;20541:19;;20200:366;;;:::o;20572:::-;20714:3;20735:67;20799:2;20794:3;20735:67;:::i;:::-;20728:74;;20811:93;20900:3;20811:93;:::i;:::-;20929:2;20924:3;20920:12;20913:19;;20572:366;;;:::o;20944:108::-;21021:24;21039:5;21021:24;:::i;:::-;21016:3;21009:37;20944:108;;:::o;21058:118::-;21145:24;21163:5;21145:24;:::i;:::-;21140:3;21133:37;21058:118;;:::o;21182:589::-;21407:3;21429:95;21520:3;21511:6;21429:95;:::i;:::-;21422:102;;21541:95;21632:3;21623:6;21541:95;:::i;:::-;21534:102;;21653:92;21741:3;21732:6;21653:92;:::i;:::-;21646:99;;21762:3;21755:10;;21182:589;;;;;;:::o;21777:379::-;21961:3;21983:147;22126:3;21983:147;:::i;:::-;21976:154;;22147:3;22140:10;;21777:379;;;:::o;22162:222::-;22255:4;22293:2;22282:9;22278:18;22270:26;;22306:71;22374:1;22363:9;22359:17;22350:6;22306:71;:::i;:::-;22162:222;;;;:::o;22390:640::-;22585:4;22623:3;22612:9;22608:19;22600:27;;22637:71;22705:1;22694:9;22690:17;22681:6;22637:71;:::i;:::-;22718:72;22786:2;22775:9;22771:18;22762:6;22718:72;:::i;:::-;22800;22868:2;22857:9;22853:18;22844:6;22800:72;:::i;:::-;22919:9;22913:4;22909:20;22904:2;22893:9;22889:18;22882:48;22947:76;23018:4;23009:6;22947:76;:::i;:::-;22939:84;;22390:640;;;;;;;:::o;23036:373::-;23179:4;23217:2;23206:9;23202:18;23194:26;;23266:9;23260:4;23256:20;23252:1;23241:9;23237:17;23230:47;23294:108;23397:4;23388:6;23294:108;:::i;:::-;23286:116;;23036:373;;;;:::o;23415:210::-;23502:4;23540:2;23529:9;23525:18;23517:26;;23553:65;23615:1;23604:9;23600:17;23591:6;23553:65;:::i;:::-;23415:210;;;;:::o;23631:313::-;23744:4;23782:2;23771:9;23767:18;23759:26;;23831:9;23825:4;23821:20;23817:1;23806:9;23802:17;23795:47;23859:78;23932:4;23923:6;23859:78;:::i;:::-;23851:86;;23631:313;;;;:::o;23950:419::-;24116:4;24154:2;24143:9;24139:18;24131:26;;24203:9;24197:4;24193:20;24189:1;24178:9;24174:17;24167:47;24231:131;24357:4;24231:131;:::i;:::-;24223:139;;23950:419;;;:::o;24375:::-;24541:4;24579:2;24568:9;24564:18;24556:26;;24628:9;24622:4;24618:20;24614:1;24603:9;24599:17;24592:47;24656:131;24782:4;24656:131;:::i;:::-;24648:139;;24375:419;;;:::o;24800:::-;24966:4;25004:2;24993:9;24989:18;24981:26;;25053:9;25047:4;25043:20;25039:1;25028:9;25024:17;25017:47;25081:131;25207:4;25081:131;:::i;:::-;25073:139;;24800:419;;;:::o;25225:::-;25391:4;25429:2;25418:9;25414:18;25406:26;;25478:9;25472:4;25468:20;25464:1;25453:9;25449:17;25442:47;25506:131;25632:4;25506:131;:::i;:::-;25498:139;;25225:419;;;:::o;25650:::-;25816:4;25854:2;25843:9;25839:18;25831:26;;25903:9;25897:4;25893:20;25889:1;25878:9;25874:17;25867:47;25931:131;26057:4;25931:131;:::i;:::-;25923:139;;25650:419;;;:::o;26075:::-;26241:4;26279:2;26268:9;26264:18;26256:26;;26328:9;26322:4;26318:20;26314:1;26303:9;26299:17;26292:47;26356:131;26482:4;26356:131;:::i;:::-;26348:139;;26075:419;;;:::o;26500:::-;26666:4;26704:2;26693:9;26689:18;26681:26;;26753:9;26747:4;26743:20;26739:1;26728:9;26724:17;26717:47;26781:131;26907:4;26781:131;:::i;:::-;26773:139;;26500:419;;;:::o;26925:::-;27091:4;27129:2;27118:9;27114:18;27106:26;;27178:9;27172:4;27168:20;27164:1;27153:9;27149:17;27142:47;27206:131;27332:4;27206:131;:::i;:::-;27198:139;;26925:419;;;:::o;27350:::-;27516:4;27554:2;27543:9;27539:18;27531:26;;27603:9;27597:4;27593:20;27589:1;27578:9;27574:17;27567:47;27631:131;27757:4;27631:131;:::i;:::-;27623:139;;27350:419;;;:::o;27775:::-;27941:4;27979:2;27968:9;27964:18;27956:26;;28028:9;28022:4;28018:20;28014:1;28003:9;27999:17;27992:47;28056:131;28182:4;28056:131;:::i;:::-;28048:139;;27775:419;;;:::o;28200:::-;28366:4;28404:2;28393:9;28389:18;28381:26;;28453:9;28447:4;28443:20;28439:1;28428:9;28424:17;28417:47;28481:131;28607:4;28481:131;:::i;:::-;28473:139;;28200:419;;;:::o;28625:::-;28791:4;28829:2;28818:9;28814:18;28806:26;;28878:9;28872:4;28868:20;28864:1;28853:9;28849:17;28842:47;28906:131;29032:4;28906:131;:::i;:::-;28898:139;;28625:419;;;:::o;29050:::-;29216:4;29254:2;29243:9;29239:18;29231:26;;29303:9;29297:4;29293:20;29289:1;29278:9;29274:17;29267:47;29331:131;29457:4;29331:131;:::i;:::-;29323:139;;29050:419;;;:::o;29475:::-;29641:4;29679:2;29668:9;29664:18;29656:26;;29728:9;29722:4;29718:20;29714:1;29703:9;29699:17;29692:47;29756:131;29882:4;29756:131;:::i;:::-;29748:139;;29475:419;;;:::o;29900:::-;30066:4;30104:2;30093:9;30089:18;30081:26;;30153:9;30147:4;30143:20;30139:1;30128:9;30124:17;30117:47;30181:131;30307:4;30181:131;:::i;:::-;30173:139;;29900:419;;;:::o;30325:::-;30491:4;30529:2;30518:9;30514:18;30506:26;;30578:9;30572:4;30568:20;30564:1;30553:9;30549:17;30542:47;30606:131;30732:4;30606:131;:::i;:::-;30598:139;;30325:419;;;:::o;30750:::-;30916:4;30954:2;30943:9;30939:18;30931:26;;31003:9;30997:4;30993:20;30989:1;30978:9;30974:17;30967:47;31031:131;31157:4;31031:131;:::i;:::-;31023:139;;30750:419;;;:::o;31175:::-;31341:4;31379:2;31368:9;31364:18;31356:26;;31428:9;31422:4;31418:20;31414:1;31403:9;31399:17;31392:47;31456:131;31582:4;31456:131;:::i;:::-;31448:139;;31175:419;;;:::o;31600:::-;31766:4;31804:2;31793:9;31789:18;31781:26;;31853:9;31847:4;31843:20;31839:1;31828:9;31824:17;31817:47;31881:131;32007:4;31881:131;:::i;:::-;31873:139;;31600:419;;;:::o;32025:::-;32191:4;32229:2;32218:9;32214:18;32206:26;;32278:9;32272:4;32268:20;32264:1;32253:9;32249:17;32242:47;32306:131;32432:4;32306:131;:::i;:::-;32298:139;;32025:419;;;:::o;32450:::-;32616:4;32654:2;32643:9;32639:18;32631:26;;32703:9;32697:4;32693:20;32689:1;32678:9;32674:17;32667:47;32731:131;32857:4;32731:131;:::i;:::-;32723:139;;32450:419;;;:::o;32875:::-;33041:4;33079:2;33068:9;33064:18;33056:26;;33128:9;33122:4;33118:20;33114:1;33103:9;33099:17;33092:47;33156:131;33282:4;33156:131;:::i;:::-;33148:139;;32875:419;;;:::o;33300:222::-;33393:4;33431:2;33420:9;33416:18;33408:26;;33444:71;33512:1;33501:9;33497:17;33488:6;33444:71;:::i;:::-;33300:222;;;;:::o;33528:129::-;33562:6;33589:20;;:::i;:::-;33579:30;;33618:33;33646:4;33638:6;33618:33;:::i;:::-;33528:129;;;:::o;33663:75::-;33696:6;33729:2;33723:9;33713:19;;33663:75;:::o;33744:311::-;33821:4;33911:18;33903:6;33900:30;33897:56;;;33933:18;;:::i;:::-;33897:56;33983:4;33975:6;33971:17;33963:25;;34043:4;34037;34033:15;34025:23;;33744:311;;;:::o;34061:307::-;34122:4;34212:18;34204:6;34201:30;34198:56;;;34234:18;;:::i;:::-;34198:56;34272:29;34294:6;34272:29;:::i;:::-;34264:37;;34356:4;34350;34346:15;34338:23;;34061:307;;;:::o;34374:308::-;34436:4;34526:18;34518:6;34515:30;34512:56;;;34548:18;;:::i;:::-;34512:56;34586:29;34608:6;34586:29;:::i;:::-;34578:37;;34670:4;34664;34660:15;34652:23;;34374:308;;;:::o;34688:132::-;34755:4;34778:3;34770:11;;34808:4;34803:3;34799:14;34791:22;;34688:132;;;:::o;34826:141::-;34875:4;34898:3;34890:11;;34921:3;34918:1;34911:14;34955:4;34952:1;34942:18;34934:26;;34826:141;;;:::o;34973:114::-;35040:6;35074:5;35068:12;35058:22;;34973:114;;;:::o;35093:98::-;35144:6;35178:5;35172:12;35162:22;;35093:98;;;:::o;35197:99::-;35249:6;35283:5;35277:12;35267:22;;35197:99;;;:::o;35302:113::-;35372:4;35404;35399:3;35395:14;35387:22;;35302:113;;;:::o;35421:184::-;35520:11;35554:6;35549:3;35542:19;35594:4;35589:3;35585:14;35570:29;;35421:184;;;;:::o;35611:168::-;35694:11;35728:6;35723:3;35716:19;35768:4;35763:3;35759:14;35744:29;;35611:168;;;;:::o;35785:147::-;35886:11;35923:3;35908:18;;35785:147;;;;:::o;35938:169::-;36022:11;36056:6;36051:3;36044:19;36096:4;36091:3;36087:14;36072:29;;35938:169;;;;:::o;36113:148::-;36215:11;36252:3;36237:18;;36113:148;;;;:::o;36267:305::-;36307:3;36326:20;36344:1;36326:20;:::i;:::-;36321:25;;36360:20;36378:1;36360:20;:::i;:::-;36355:25;;36514:1;36446:66;36442:74;36439:1;36436:81;36433:107;;;36520:18;;:::i;:::-;36433:107;36564:1;36561;36557:9;36550:16;;36267:305;;;;:::o;36578:185::-;36618:1;36635:20;36653:1;36635:20;:::i;:::-;36630:25;;36669:20;36687:1;36669:20;:::i;:::-;36664:25;;36708:1;36698:35;;36713:18;;:::i;:::-;36698:35;36755:1;36752;36748:9;36743:14;;36578:185;;;;:::o;36769:348::-;36809:7;36832:20;36850:1;36832:20;:::i;:::-;36827:25;;36866:20;36884:1;36866:20;:::i;:::-;36861:25;;37054:1;36986:66;36982:74;36979:1;36976:81;36971:1;36964:9;36957:17;36953:105;36950:131;;;37061:18;;:::i;:::-;36950:131;37109:1;37106;37102:9;37091:20;;36769:348;;;;:::o;37123:191::-;37163:4;37183:20;37201:1;37183:20;:::i;:::-;37178:25;;37217:20;37235:1;37217:20;:::i;:::-;37212:25;;37256:1;37253;37250:8;37247:34;;;37261:18;;:::i;:::-;37247:34;37306:1;37303;37299:9;37291:17;;37123:191;;;;:::o;37320:96::-;37357:7;37386:24;37404:5;37386:24;:::i;:::-;37375:35;;37320:96;;;:::o;37422:90::-;37456:7;37499:5;37492:13;37485:21;37474:32;;37422:90;;;:::o;37518:149::-;37554:7;37594:66;37587:5;37583:78;37572:89;;37518:149;;;:::o;37673:126::-;37710:7;37750:42;37743:5;37739:54;37728:65;;37673:126;;;:::o;37805:77::-;37842:7;37871:5;37860:16;;37805:77;;;:::o;37888:154::-;37972:6;37967:3;37962;37949:30;38034:1;38025:6;38020:3;38016:16;38009:27;37888:154;;;:::o;38048:307::-;38116:1;38126:113;38140:6;38137:1;38134:13;38126:113;;;38225:1;38220:3;38216:11;38210:18;38206:1;38201:3;38197:11;38190:39;38162:2;38159:1;38155:10;38150:15;;38126:113;;;38257:6;38254:1;38251:13;38248:101;;;38337:1;38328:6;38323:3;38319:16;38312:27;38248:101;38097:258;38048:307;;;:::o;38361:320::-;38405:6;38442:1;38436:4;38432:12;38422:22;;38489:1;38483:4;38479:12;38510:18;38500:81;;38566:4;38558:6;38554:17;38544:27;;38500:81;38628:2;38620:6;38617:14;38597:18;38594:38;38591:84;;;38647:18;;:::i;:::-;38591:84;38412:269;38361:320;;;:::o;38687:281::-;38770:27;38792:4;38770:27;:::i;:::-;38762:6;38758:40;38900:6;38888:10;38885:22;38864:18;38852:10;38849:34;38846:62;38843:88;;;38911:18;;:::i;:::-;38843:88;38951:10;38947:2;38940:22;38730:238;38687:281;;:::o;38974:233::-;39013:3;39036:24;39054:5;39036:24;:::i;:::-;39027:33;;39082:66;39075:5;39072:77;39069:103;;;39152:18;;:::i;:::-;39069:103;39199:1;39192:5;39188:13;39181:20;;38974:233;;;:::o;39213:176::-;39245:1;39262:20;39280:1;39262:20;:::i;:::-;39257:25;;39296:20;39314:1;39296:20;:::i;:::-;39291:25;;39335:1;39325:35;;39340:18;;:::i;:::-;39325:35;39381:1;39378;39374:9;39369:14;;39213:176;;;;:::o;39395:180::-;39443:77;39440:1;39433:88;39540:4;39537:1;39530:15;39564:4;39561:1;39554:15;39581:180;39629:77;39626:1;39619:88;39726:4;39723:1;39716:15;39750:4;39747:1;39740:15;39767:180;39815:77;39812:1;39805:88;39912:4;39909:1;39902:15;39936:4;39933:1;39926:15;39953:180;40001:77;39998:1;39991:88;40098:4;40095:1;40088:15;40122:4;40119:1;40112:15;40139:180;40187:77;40184:1;40177:88;40284:4;40281:1;40274:15;40308:4;40305:1;40298:15;40325:180;40373:77;40370:1;40363:88;40470:4;40467:1;40460:15;40494:4;40491:1;40484:15;40511:117;40620:1;40617;40610:12;40634:117;40743:1;40740;40733:12;40757:117;40866:1;40863;40856:12;40880:117;40989:1;40986;40979:12;41003:117;41112:1;41109;41102:12;41126:102;41167:6;41218:2;41214:7;41209:2;41202:5;41198:14;41194:28;41184:38;;41126:102;;;:::o;41234:290::-;41374:34;41370:1;41362:6;41358:14;41351:58;41443:34;41438:2;41430:6;41426:15;41419:59;41512:4;41507:2;41499:6;41495:15;41488:29;41234:290;:::o;41530:291::-;41670:34;41666:1;41658:6;41654:14;41647:58;41739:34;41734:2;41726:6;41722:15;41715:59;41808:5;41803:2;41795:6;41791:15;41784:30;41530:291;:::o;41827:230::-;41967:34;41963:1;41955:6;41951:14;41944:58;42036:13;42031:2;42023:6;42019:15;42012:38;41827:230;:::o;42063:237::-;42203:34;42199:1;42191:6;42187:14;42180:58;42272:20;42267:2;42259:6;42255:15;42248:45;42063:237;:::o;42306:242::-;42446:34;42442:1;42434:6;42430:14;42423:58;42515:25;42510:2;42502:6;42498:15;42491:50;42306:242;:::o;42554:225::-;42694:34;42690:1;42682:6;42678:14;42671:58;42763:8;42758:2;42750:6;42746:15;42739:33;42554:225;:::o;42785:224::-;42925:34;42921:1;42913:6;42909:14;42902:58;42994:7;42989:2;42981:6;42977:15;42970:32;42785:224;:::o;43015:178::-;43155:30;43151:1;43143:6;43139:14;43132:54;43015:178;:::o;43199:223::-;43339:34;43335:1;43327:6;43323:14;43316:58;43408:6;43403:2;43395:6;43391:15;43384:31;43199:223;:::o;43428:175::-;43568:27;43564:1;43556:6;43552:14;43545:51;43428:175;:::o;43609:231::-;43749:34;43745:1;43737:6;43733:14;43726:58;43818:14;43813:2;43805:6;43801:15;43794:39;43609:231;:::o;43846:243::-;43986:34;43982:1;43974:6;43970:14;43963:58;44055:26;44050:2;44042:6;44038:15;44031:51;43846:243;:::o;44095:229::-;44235:34;44231:1;44223:6;44219:14;44212:58;44304:12;44299:2;44291:6;44287:15;44280:37;44095:229;:::o;44330:228::-;44470:34;44466:1;44458:6;44454:14;44447:58;44539:11;44534:2;44526:6;44522:15;44515:36;44330:228;:::o;44564:182::-;44704:34;44700:1;44692:6;44688:14;44681:58;44564:182;:::o;44752:231::-;44892:34;44888:1;44880:6;44876:14;44869:58;44961:14;44956:2;44948:6;44944:15;44937:39;44752:231;:::o;44989:182::-;45129:34;45125:1;45117:6;45113:14;45106:58;44989:182;:::o;45177:234::-;45317:34;45313:1;45305:6;45301:14;45294:58;45386:17;45381:2;45373:6;45369:15;45362:42;45177:234;:::o;45417:220::-;45557:34;45553:1;45545:6;45541:14;45534:58;45626:3;45621:2;45613:6;45609:15;45602:28;45417:220;:::o;45643:::-;45783:34;45779:1;45771:6;45767:14;45760:58;45852:3;45847:2;45839:6;45835:15;45828:28;45643:220;:::o;45869:114::-;;:::o;45989:236::-;46129:34;46125:1;46117:6;46113:14;46106:58;46198:19;46193:2;46185:6;46181:15;46174:44;45989:236;:::o;46231:231::-;46371:34;46367:1;46359:6;46355:14;46348:58;46440:14;46435:2;46427:6;46423:15;46416:39;46231:231;:::o;46468:122::-;46541:24;46559:5;46541:24;:::i;:::-;46534:5;46531:35;46521:63;;46580:1;46577;46570:12;46521:63;46468:122;:::o;46596:116::-;46666:21;46681:5;46666:21;:::i;:::-;46659:5;46656:32;46646:60;;46702:1;46699;46692:12;46646:60;46596:116;:::o;46718:120::-;46790:23;46807:5;46790:23;:::i;:::-;46783:5;46780:34;46770:62;;46828:1;46825;46818:12;46770:62;46718:120;:::o;46844:122::-;46917:24;46935:5;46917:24;:::i;:::-;46910:5;46907:35;46897:63;;46956:1;46953;46946:12;46897:63;46844:122;:::o

Swarm Source

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