FTM Price: $0.32 (-2.64%)
Gas: 30 Gwei

Token

Fugly Fantom Frogs (FROG)
 

Overview

Max Total Supply

328 FROG

Holders

135

Market

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Balance
0 FROG
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FuglyFantomFrogs

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 ftmscan.com on 2021-11-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// File @openzeppelin/contracts/utils/introspection/[email protected]

/**
 * @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/token/ERC721/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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');

        // solhint-disable-next-line avoid-low-level-calls
        (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');

        // solhint-disable-next-line avoid-low-level-calls
        (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');

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File @openzeppelin/contracts/utils/[email protected]

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = '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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, 'Strings: hex length insufficient');
        return string(buffer);
    }
}

// File @openzeppelin/contracts/utils/introspection/[email protected]

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/[email protected]

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}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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 tokenId);

    /**
     * @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/[email protected]

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 @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), 'ERC721URIStorage: URI set of nonexistent token');
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File @openzeppelin/contracts/security/Pausabl[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), 'Pausable: paused');
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), 'Pausable: not paused');
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File @openzeppelin/contracts/access/[email protected]

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721Burnable: caller is not owner nor approved');
        _burn(tokenId);
    }
}

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, 'Counter: decrement overflow');
        unchecked {
            counter._value = value - 1;
        }
    }
}

pragma solidity ^0.8.0;

contract FuglyFantomFrogs is ERC721, ERC721Enumerable, ERC721URIStorage, Pausable, Ownable, ERC721Burnable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    uint256 public maxSupply = 3333;
    uint256 public price = 66 * 1 ether;
    bool public saleOpen = false;
    bool public presaleOpen = false;
    string public baseURI;

    mapping(address => uint256) public Whitelist;

    receive() external payable {}

    constructor() ERC721('Fugly Fantom Frogs', 'FROG') {}

    function reserveMints(address to, uint256 amount) public onlyOwner {
        for (uint256 i = 0; i < amount; i++) internalMint(to);
    }

    function whitelistAddress(address[] memory who, uint256 amount) public onlyOwner {
        for (uint256 i = 0; i < who.length; i++) Whitelist[who[i]] = amount;
    }

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

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function toggleSale() public onlyOwner {
        saleOpen = !saleOpen;
    }

    function togglePresale() public onlyOwner {
        presaleOpen = !presaleOpen;
    }

    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    function setMaxSupply(uint256 newMaxSupply) public onlyOwner {
        maxSupply = newMaxSupply;
    }

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

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

    function internalMint(address to) internal {
        require(totalSupply() < maxSupply, 'supply depleted');
        _safeMint(to, _tokenIdCounter.current());
        _tokenIdCounter.increment();
    }

    function safeMint(address to) public onlyOwner {
        internalMint(to);
    }

    function mint(uint256 amount) public payable {
        require(msg.value >= price * amount, 'not enough was paid');
        if (!saleOpen) {
            require(presaleOpen == true, 'presale is not open');
            uint256 who = Whitelist[msg.sender];
            require(who > 0, 'this address is not whitelisted for the presale');
            require(amount <= who, 'this address is not allowed to mint that many during the presale');
            for (uint256 i = 0; i < amount; i++) internalMint(msg.sender);
            Whitelist[msg.sender] = who - amount;
            return;
        }
        for (uint256 i = 0; i < amount; i++) internalMint(msg.sender);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) whenNotPaused {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"who","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Contract Creation Code

6080604052610d05600d55680393ef1a5127c80000600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200005a57600080fd5b506040518060400160405280601281526020017f4675676c792046616e746f6d2046726f677300000000000000000000000000008152506040518060400160405280600481526020017f46524f47000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000df929190620001d5565b508060019080519060200190620000f8929190620001d5565b5050506000600b60006101000a81548160ff021916908315150217905550600062000128620001cd60201b60201c565b905080600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002ea565b600033905090565b828054620001e39062000285565b90600052602060002090601f01602090048101928262000207576000855562000253565b82601f106200022257805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025257825182559160200191906001019062000235565b5b50905062000262919062000266565b5090565b5b808211156200028157600081600090555060010162000267565b5090565b600060028204905060018216806200029e57607f821691505b60208210811415620002b557620002b4620002bb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614fca80620002fa6000396000f3fe6080604052600436106102345760003560e01c80636f8b44b01161012e578063a035b1fe116100ab578063c87b56dd1161006f578063c87b56dd146107c3578063d5abeb0114610800578063e985e9c51461082b578063eb73900b14610868578063f2fde38b146108a55761023b565b8063a035b1fe146106ff578063a0712d681461072a578063a22cb46514610746578063b88d4fde1461076f578063bee6348a146107985761023b565b80638456cb59116100f25780638456cb591461063e5780638da5cb5b1461065557806391b7f5ed1461068057806395d89b41146106a957806399288dbb146106d45761023b565b80636f8b44b01461058157806370a08231146105aa578063715018a6146105e75780637b055b38146105fe5780637d8966e4146106275761023b565b80633f4ba83a116101bc57806355f804b31161018057806355f804b31461049c5780635c975abb146104c55780636352211e146104f05780636b6384db1461052d5780636c0360eb146105565761023b565b80633f4ba83a146103cd57806340d097c3146103e457806342842e0e1461040d57806342966c68146104365780634f6ccce71461045f5761023b565b806318160ddd1161020357806318160ddd1461030e57806323b872dd146103395780632f745c5914610362578063343937431461039f5780633ccfd60b146103b65761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906139c3565b6108ce565b6040516102749190613f9f565b60405180910390f35b34801561028957600080fd5b506102926108e0565b60405161029f9190613fba565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a66565b610972565b6040516102dc9190613f38565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613927565b6109f7565b005b34801561031a57600080fd5b50610323610b0f565b604051610330919061433c565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613811565b610b1c565b005b34801561036e57600080fd5b5061038960048036038101906103849190613927565b610b7c565b604051610396919061433c565b60405180910390f35b3480156103ab57600080fd5b506103b4610c21565b005b3480156103c257600080fd5b506103cb610cc9565b005b3480156103d957600080fd5b506103e2610d94565b005b3480156103f057600080fd5b5061040b600480360381019061040691906137a4565b610e1a565b005b34801561041957600080fd5b50610434600480360381019061042f9190613811565b610ea2565b005b34801561044257600080fd5b5061045d60048036038101906104589190613a66565b610ec2565b005b34801561046b57600080fd5b5061048660048036038101906104819190613a66565b610f1e565b604051610493919061433c565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190613a1d565b610f8f565b005b3480156104d157600080fd5b506104da611025565b6040516104e79190613f9f565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613a66565b61103c565b6040516105249190613f38565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613967565b6110ee565b005b34801561056257600080fd5b5061056b6111ec565b6040516105789190613fba565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613a66565b61127a565b005b3480156105b657600080fd5b506105d160048036038101906105cc91906137a4565b611300565b6040516105de919061433c565b60405180910390f35b3480156105f357600080fd5b506105fc6113b8565b005b34801561060a57600080fd5b5061062560048036038101906106209190613927565b6114f5565b005b34801561063357600080fd5b5061063c61159d565b005b34801561064a57600080fd5b50610653611645565b005b34801561066157600080fd5b5061066a6116cb565b6040516106779190613f38565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190613a66565b6116f5565b005b3480156106b557600080fd5b506106be61177b565b6040516106cb9190613fba565b60405180910390f35b3480156106e057600080fd5b506106e961180d565b6040516106f69190613f9f565b60405180910390f35b34801561070b57600080fd5b50610714611820565b604051610721919061433c565b60405180910390f35b610744600480360381019061073f9190613a66565b611826565b005b34801561075257600080fd5b5061076d600480360381019061076891906138e7565b611a53565b005b34801561077b57600080fd5b5061079660048036038101906107919190613864565b611bd4565b005b3480156107a457600080fd5b506107ad611c36565b6040516107ba9190613f9f565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613a66565b611c49565b6040516107f79190613fba565b60405180910390f35b34801561080c57600080fd5b50610815611c5b565b604051610822919061433c565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906137d1565b611c61565b60405161085f9190613f9f565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a91906137a4565b611cf5565b60405161089c919061433c565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906137a4565b611d0d565b005b60006108d982611eb9565b9050919050565b6060600080546108ef90614618565b80601f016020809104026020016040519081016040528092919081815260200182805461091b90614618565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b600061097d82611f33565b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b3906141dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a028261103c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a9061425c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a92611f9f565b73ffffffffffffffffffffffffffffffffffffffff161480610ac15750610ac081610abb611f9f565b611c61565b5b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af79061411c565b60405180910390fd5b610b0a8383611fa7565b505050565b6000600880549050905090565b610b2d610b27611f9f565b82612060565b610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061429c565b60405180910390fd5b610b7783838361213e565b505050565b6000610b8783611300565b8210610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf9061401c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c29611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610c476116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c94906141fc565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610cd1611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610cef6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906141fc565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d90573d6000803e3d6000fd5b5050565b610d9c611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610dba6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906141fc565b60405180910390fd5b610e1861239a565b565b610e22611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610e406116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906141fc565b60405180910390fd5b610e9f8161243c565b50565b610ebd83838360405180602001604052806000815250611bd4565b505050565b610ed3610ecd611f9f565b82612060565b610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061431c565b60405180910390fd5b610f1b816124a7565b50565b6000610f28610b0f565b8210610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f60906142dc565b60405180910390fd5b60088281548110610f7d57610f7c6147b1565b5b90600052602060002001549050919050565b610f97611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610fb56116cb565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906141fc565b60405180910390fd5b80601090805190602001906110219291906134da565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061417c565b60405180910390fd5b80915050919050565b6110f6611f9f565b73ffffffffffffffffffffffffffffffffffffffff166111146116cb565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906141fc565b60405180910390fd5b60005b82518110156111e757816011600085848151811061118e5761118d6147b1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806111df9061467b565b91505061116d565b505050565b601080546111f990614618565b80601f016020809104026020016040519081016040528092919081815260200182805461122590614618565b80156112725780601f1061124757610100808354040283529160200191611272565b820191906000526020600020905b81548152906001019060200180831161125557829003601f168201915b505050505081565b611282611f9f565b73ffffffffffffffffffffffffffffffffffffffff166112a06116cb565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906141fc565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113689061415c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c0611f9f565b73ffffffffffffffffffffffffffffffffffffffff166113de6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b906141fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114fd611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661151b6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906141fc565b60405180910390fd5b60005b81811015611598576115858361243c565b80806115909061467b565b915050611574565b505050565b6115a5611f9f565b73ffffffffffffffffffffffffffffffffffffffff166115c36116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611610906141fc565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b61164d611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661166b6116cb565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b8906141fc565b60405180910390fd5b6116c96124b3565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116fd611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661171b6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906141fc565b60405180910390fd5b80600e8190555050565b60606001805461178a90614618565b80601f01602080910402602001604051908101604052809291908181526020018280546117b690614618565b80156118035780601f106117d857610100808354040283529160200191611803565b820191906000526020600020905b8154815290600101906020018083116117e657829003601f168201915b5050505050905090565b600f60009054906101000a900460ff1681565b600e5481565b80600e5461183491906144d4565b341015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061427c565b60405180910390fd5b600f60009054906101000a900460ff16611a275760011515600f60019054906101000a900460ff161515146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7906142bc565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906142fc565b60405180910390fd5b808211156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061413c565b60405180910390fd5b60005b828110156119d1576119be3361243c565b80806119c99061467b565b9150506119ad565b5081816119de919061452e565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050611a50565b60005b81811015611a4e57611a3b3361243c565b8080611a469061467b565b915050611a2a565b505b50565b611a5b611f9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906140bc565b60405180910390fd5b8060056000611ad6611f9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b83611f9f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc89190613f9f565b60405180910390a35050565b611be5611bdf611f9f565b83612060565b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061429c565b60405180910390fd5b611c3084848484612556565b50505050565b600f60019054906101000a900460ff1681565b6060611c54826125b2565b9050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611d15611f9f565b73ffffffffffffffffffffffffffffffffffffffff16611d336116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d80906141fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df09061405c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f2c5750611f2b82612704565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661201a8361103c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206b82611f33565b6120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906140dc565b60405180910390fd5b60006120b58361103c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212457508373ffffffffffffffffffffffffffffffffffffffff1661210c84610972565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213557506121348185611c61565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215e8261103c565b73ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab9061421c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061409c565b60405180910390fd5b61222f8383836127e6565b61223a600082611fa7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228a919061452e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061444d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123a2611025565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613fdc565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612425611f9f565b6040516124329190613f38565b60405180910390a1565b600d54612447610b0f565b10612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90613ffc565b60405180910390fd5b61249a81612495600c61283e565b61284c565b6124a4600c61286a565b50565b6124b081612880565b50565b6124bb611025565b156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f2906140fc565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861253f611f9f565b60405161254c9190613f38565b60405180910390a1565b61256184848461213e565b61256d848484846128d3565b6125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a39061403c565b60405180910390fd5b50505050565b60606125bd82611f33565b6125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906141bc565b60405180910390fd5b6000600a6000848152602001908152602001600020805461261c90614618565b80601f016020809104026020016040519081016040528092919081815260200182805461264890614618565b80156126955780601f1061266a57610100808354040283529160200191612695565b820191906000526020600020905b81548152906001019060200180831161267857829003601f168201915b5050505050905060006126a6612a6a565b90506000815114156126bc5781925050506126ff565b6000825111156126f15780826040516020016126d9929190613f14565b604051602081830303815290604052925050506126ff565b6126fa84612afc565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127df57506127de82612ba3565b5b9050919050565b6127ee611025565b1561282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906140fc565b60405180910390fd5b612839838383612c0d565b505050565b600081600001549050919050565b612866828260405180602001604052806000815250612d21565b5050565b6001816000016000828254019250508190555050565b61288981612d7c565b6000600a600083815260200190815260200160002080546128a990614618565b9050146128d057600a600082815260200190815260200160002060006128cf9190613560565b5b50565b60006128f48473ffffffffffffffffffffffffffffffffffffffff16612e8d565b15612a5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261291d611f9f565b8786866040518563ffffffff1660e01b815260040161293f9493929190613f53565b602060405180830381600087803b15801561295957600080fd5b505af192505050801561298a57506040513d601f19601f8201168201806040525081019061298791906139f0565b60015b612a0d573d80600081146129ba576040519150601f19603f3d011682016040523d82523d6000602084013e6129bf565b606091505b50600081511415612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc9061403c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a62565b600190505b949350505050565b606060108054612a7990614618565b80601f0160208091040260200160405190810160405280929190818152602001828054612aa590614618565b8015612af25780601f10612ac757610100808354040283529160200191612af2565b820191906000526020600020905b815481529060010190602001808311612ad557829003601f168201915b5050505050905090565b6060612b0782611f33565b612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061423c565b60405180910390fd5b6000612b50612a6a565b90506000815111612b705760405180602001604052806000815250612b9b565b80612b7a84612ea0565b604051602001612b8b929190613f14565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c18838383613001565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c5b57612c5681613006565b612c9a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c9957612c98838261304f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdd57612cd8816131bc565b612d1c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d1b57612d1a828261328d565b5b5b505050565b612d2b838361330c565b612d3860008484846128d3565b612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e9061403c565b60405180910390fd5b505050565b6000612d878261103c565b9050612d95816000846127e6565b612da0600083611fa7565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df0919061452e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612ee8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ffc565b600082905060005b60008214612f1a578080612f039061467b565b915050600a82612f1391906144a3565b9150612ef0565b60008167ffffffffffffffff811115612f3657612f356147e0565b5b6040519080825280601f01601f191660200182016040528015612f685781602001600182028036833780820191505090505b5090505b60008514612ff557600182612f81919061452e565b9150600a85612f9091906146c4565b6030612f9c919061444d565b60f81b818381518110612fb257612fb16147b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fee91906144a3565b9450612f6c565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161305c84611300565b613066919061452e565b905060006007600084815260200190815260200160002054905081811461314b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131d0919061452e565b9050600060096000848152602001908152602001600020549050600060088381548110613200576131ff6147b1565b5b906000526020600020015490508060088381548110613222576132216147b1565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061327157613270614782565b5b6001900381819060005260206000200160009055905550505050565b600061329883611300565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061419c565b60405180910390fd5b61338581611f33565b156133c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bc9061407c565b60405180910390fd5b6133d1600083836127e6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613421919061444d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134e690614618565b90600052602060002090601f016020900481019282613508576000855561354f565b82601f1061352157805160ff191683800117855561354f565b8280016001018555821561354f579182015b8281111561354e578251825591602001919060010190613533565b5b50905061355c91906135a0565b5090565b50805461356c90614618565b6000825580601f1061357e575061359d565b601f01602090049060005260206000209081019061359c91906135a0565b5b50565b5b808211156135b95760008160009055506001016135a1565b5090565b60006135d06135cb8461437c565b614357565b905080838252602082019050828560208602820111156135f3576135f2614814565b5b60005b85811015613623578161360988826136b1565b8452602084019350602083019250506001810190506135f6565b5050509392505050565b600061364061363b846143a8565b614357565b90508281526020810184848401111561365c5761365b614819565b5b6136678482856145d6565b509392505050565b600061368261367d846143d9565b614357565b90508281526020810184848401111561369e5761369d614819565b5b6136a98482856145d6565b509392505050565b6000813590506136c081614f38565b92915050565b600082601f8301126136db576136da61480f565b5b81356136eb8482602086016135bd565b91505092915050565b60008135905061370381614f4f565b92915050565b60008135905061371881614f66565b92915050565b60008151905061372d81614f66565b92915050565b600082601f8301126137485761374761480f565b5b813561375884826020860161362d565b91505092915050565b600082601f8301126137765761377561480f565b5b813561378684826020860161366f565b91505092915050565b60008135905061379e81614f7d565b92915050565b6000602082840312156137ba576137b9614823565b5b60006137c8848285016136b1565b91505092915050565b600080604083850312156137e8576137e7614823565b5b60006137f6858286016136b1565b9250506020613807858286016136b1565b9150509250929050565b60008060006060848603121561382a57613829614823565b5b6000613838868287016136b1565b9350506020613849868287016136b1565b925050604061385a8682870161378f565b9150509250925092565b6000806000806080858703121561387e5761387d614823565b5b600061388c878288016136b1565b945050602061389d878288016136b1565b93505060406138ae8782880161378f565b925050606085013567ffffffffffffffff8111156138cf576138ce61481e565b5b6138db87828801613733565b91505092959194509250565b600080604083850312156138fe576138fd614823565b5b600061390c858286016136b1565b925050602061391d858286016136f4565b9150509250929050565b6000806040838503121561393e5761393d614823565b5b600061394c858286016136b1565b925050602061395d8582860161378f565b9150509250929050565b6000806040838503121561397e5761397d614823565b5b600083013567ffffffffffffffff81111561399c5761399b61481e565b5b6139a8858286016136c6565b92505060206139b98582860161378f565b9150509250929050565b6000602082840312156139d9576139d8614823565b5b60006139e784828501613709565b91505092915050565b600060208284031215613a0657613a05614823565b5b6000613a148482850161371e565b91505092915050565b600060208284031215613a3357613a32614823565b5b600082013567ffffffffffffffff811115613a5157613a5061481e565b5b613a5d84828501613761565b91505092915050565b600060208284031215613a7c57613a7b614823565b5b6000613a8a8482850161378f565b91505092915050565b613a9c81614562565b82525050565b613aab81614574565b82525050565b6000613abc8261440a565b613ac68185614420565b9350613ad68185602086016145e5565b613adf81614828565b840191505092915050565b6000613af582614415565b613aff8185614431565b9350613b0f8185602086016145e5565b613b1881614828565b840191505092915050565b6000613b2e82614415565b613b388185614442565b9350613b488185602086016145e5565b80840191505092915050565b6000613b61601483614431565b9150613b6c82614839565b602082019050919050565b6000613b84600f83614431565b9150613b8f82614862565b602082019050919050565b6000613ba7602b83614431565b9150613bb28261488b565b604082019050919050565b6000613bca603283614431565b9150613bd5826148da565b604082019050919050565b6000613bed602683614431565b9150613bf882614929565b604082019050919050565b6000613c10601c83614431565b9150613c1b82614978565b602082019050919050565b6000613c33602483614431565b9150613c3e826149a1565b604082019050919050565b6000613c56601983614431565b9150613c61826149f0565b602082019050919050565b6000613c79602c83614431565b9150613c8482614a19565b604082019050919050565b6000613c9c601083614431565b9150613ca782614a68565b602082019050919050565b6000613cbf603883614431565b9150613cca82614a91565b604082019050919050565b6000613ce2604083614431565b9150613ced82614ae0565b604082019050919050565b6000613d05602a83614431565b9150613d1082614b2f565b604082019050919050565b6000613d28602983614431565b9150613d3382614b7e565b604082019050919050565b6000613d4b602083614431565b9150613d5682614bcd565b602082019050919050565b6000613d6e603183614431565b9150613d7982614bf6565b604082019050919050565b6000613d91602c83614431565b9150613d9c82614c45565b604082019050919050565b6000613db4602083614431565b9150613dbf82614c94565b602082019050919050565b6000613dd7602983614431565b9150613de282614cbd565b604082019050919050565b6000613dfa602f83614431565b9150613e0582614d0c565b604082019050919050565b6000613e1d602183614431565b9150613e2882614d5b565b604082019050919050565b6000613e40601383614431565b9150613e4b82614daa565b602082019050919050565b6000613e63603183614431565b9150613e6e82614dd3565b604082019050919050565b6000613e86601383614431565b9150613e9182614e22565b602082019050919050565b6000613ea9602c83614431565b9150613eb482614e4b565b604082019050919050565b6000613ecc602f83614431565b9150613ed782614e9a565b604082019050919050565b6000613eef603083614431565b9150613efa82614ee9565b604082019050919050565b613f0e816145cc565b82525050565b6000613f208285613b23565b9150613f2c8284613b23565b91508190509392505050565b6000602082019050613f4d6000830184613a93565b92915050565b6000608082019050613f686000830187613a93565b613f756020830186613a93565b613f826040830185613f05565b8181036060830152613f948184613ab1565b905095945050505050565b6000602082019050613fb46000830184613aa2565b92915050565b60006020820190508181036000830152613fd48184613aea565b905092915050565b60006020820190508181036000830152613ff581613b54565b9050919050565b6000602082019050818103600083015261401581613b77565b9050919050565b6000602082019050818103600083015261403581613b9a565b9050919050565b6000602082019050818103600083015261405581613bbd565b9050919050565b6000602082019050818103600083015261407581613be0565b9050919050565b6000602082019050818103600083015261409581613c03565b9050919050565b600060208201905081810360008301526140b581613c26565b9050919050565b600060208201905081810360008301526140d581613c49565b9050919050565b600060208201905081810360008301526140f581613c6c565b9050919050565b6000602082019050818103600083015261411581613c8f565b9050919050565b6000602082019050818103600083015261413581613cb2565b9050919050565b6000602082019050818103600083015261415581613cd5565b9050919050565b6000602082019050818103600083015261417581613cf8565b9050919050565b6000602082019050818103600083015261419581613d1b565b9050919050565b600060208201905081810360008301526141b581613d3e565b9050919050565b600060208201905081810360008301526141d581613d61565b9050919050565b600060208201905081810360008301526141f581613d84565b9050919050565b6000602082019050818103600083015261421581613da7565b9050919050565b6000602082019050818103600083015261423581613dca565b9050919050565b6000602082019050818103600083015261425581613ded565b9050919050565b6000602082019050818103600083015261427581613e10565b9050919050565b6000602082019050818103600083015261429581613e33565b9050919050565b600060208201905081810360008301526142b581613e56565b9050919050565b600060208201905081810360008301526142d581613e79565b9050919050565b600060208201905081810360008301526142f581613e9c565b9050919050565b6000602082019050818103600083015261431581613ebf565b9050919050565b6000602082019050818103600083015261433581613ee2565b9050919050565b60006020820190506143516000830184613f05565b92915050565b6000614361614372565b905061436d828261464a565b919050565b6000604051905090565b600067ffffffffffffffff821115614397576143966147e0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143c3576143c26147e0565b5b6143cc82614828565b9050602081019050919050565b600067ffffffffffffffff8211156143f4576143f36147e0565b5b6143fd82614828565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614458826145cc565b9150614463836145cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614498576144976146f5565b5b828201905092915050565b60006144ae826145cc565b91506144b9836145cc565b9250826144c9576144c8614724565b5b828204905092915050565b60006144df826145cc565b91506144ea836145cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614523576145226146f5565b5b828202905092915050565b6000614539826145cc565b9150614544836145cc565b925082821015614557576145566146f5565b5b828203905092915050565b600061456d826145ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146035780820151818401526020810190506145e8565b83811115614612576000848401525b50505050565b6000600282049050600182168061463057607f821691505b6020821081141561464457614643614753565b5b50919050565b61465382614828565b810181811067ffffffffffffffff82111715614672576146716147e0565b5b80604052505050565b6000614686826145cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146b9576146b86146f5565b5b600182019050919050565b60006146cf826145cc565b91506146da836145cc565b9250826146ea576146e9614724565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f737570706c79206465706c657465640000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f746869732061646472657373206973206e6f7420616c6c6f77656420746f206d60008201527f696e742074686174206d616e7920647572696e67207468652070726573616c65602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820776173207061696400000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f70726573616c65206973206e6f74206f70656e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f746869732061646472657373206973206e6f742077686974656c69737465642060008201527f666f72207468652070726573616c650000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614f4181614562565b8114614f4c57600080fd5b50565b614f5881614574565b8114614f6357600080fd5b50565b614f6f81614580565b8114614f7a57600080fd5b50565b614f86816145cc565b8114614f9157600080fd5b5056fea26469706673582212201c8abbda024ffa5f9631fa5df759d5ffd6a5479d0db9e11d467566d455552f9964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80636f8b44b01161012e578063a035b1fe116100ab578063c87b56dd1161006f578063c87b56dd146107c3578063d5abeb0114610800578063e985e9c51461082b578063eb73900b14610868578063f2fde38b146108a55761023b565b8063a035b1fe146106ff578063a0712d681461072a578063a22cb46514610746578063b88d4fde1461076f578063bee6348a146107985761023b565b80638456cb59116100f25780638456cb591461063e5780638da5cb5b1461065557806391b7f5ed1461068057806395d89b41146106a957806399288dbb146106d45761023b565b80636f8b44b01461058157806370a08231146105aa578063715018a6146105e75780637b055b38146105fe5780637d8966e4146106275761023b565b80633f4ba83a116101bc57806355f804b31161018057806355f804b31461049c5780635c975abb146104c55780636352211e146104f05780636b6384db1461052d5780636c0360eb146105565761023b565b80633f4ba83a146103cd57806340d097c3146103e457806342842e0e1461040d57806342966c68146104365780634f6ccce71461045f5761023b565b806318160ddd1161020357806318160ddd1461030e57806323b872dd146103395780632f745c5914610362578063343937431461039f5780633ccfd60b146103b65761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906139c3565b6108ce565b6040516102749190613f9f565b60405180910390f35b34801561028957600080fd5b506102926108e0565b60405161029f9190613fba565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a66565b610972565b6040516102dc9190613f38565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613927565b6109f7565b005b34801561031a57600080fd5b50610323610b0f565b604051610330919061433c565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613811565b610b1c565b005b34801561036e57600080fd5b5061038960048036038101906103849190613927565b610b7c565b604051610396919061433c565b60405180910390f35b3480156103ab57600080fd5b506103b4610c21565b005b3480156103c257600080fd5b506103cb610cc9565b005b3480156103d957600080fd5b506103e2610d94565b005b3480156103f057600080fd5b5061040b600480360381019061040691906137a4565b610e1a565b005b34801561041957600080fd5b50610434600480360381019061042f9190613811565b610ea2565b005b34801561044257600080fd5b5061045d60048036038101906104589190613a66565b610ec2565b005b34801561046b57600080fd5b5061048660048036038101906104819190613a66565b610f1e565b604051610493919061433c565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190613a1d565b610f8f565b005b3480156104d157600080fd5b506104da611025565b6040516104e79190613f9f565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613a66565b61103c565b6040516105249190613f38565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613967565b6110ee565b005b34801561056257600080fd5b5061056b6111ec565b6040516105789190613fba565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613a66565b61127a565b005b3480156105b657600080fd5b506105d160048036038101906105cc91906137a4565b611300565b6040516105de919061433c565b60405180910390f35b3480156105f357600080fd5b506105fc6113b8565b005b34801561060a57600080fd5b5061062560048036038101906106209190613927565b6114f5565b005b34801561063357600080fd5b5061063c61159d565b005b34801561064a57600080fd5b50610653611645565b005b34801561066157600080fd5b5061066a6116cb565b6040516106779190613f38565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190613a66565b6116f5565b005b3480156106b557600080fd5b506106be61177b565b6040516106cb9190613fba565b60405180910390f35b3480156106e057600080fd5b506106e961180d565b6040516106f69190613f9f565b60405180910390f35b34801561070b57600080fd5b50610714611820565b604051610721919061433c565b60405180910390f35b610744600480360381019061073f9190613a66565b611826565b005b34801561075257600080fd5b5061076d600480360381019061076891906138e7565b611a53565b005b34801561077b57600080fd5b5061079660048036038101906107919190613864565b611bd4565b005b3480156107a457600080fd5b506107ad611c36565b6040516107ba9190613f9f565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613a66565b611c49565b6040516107f79190613fba565b60405180910390f35b34801561080c57600080fd5b50610815611c5b565b604051610822919061433c565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906137d1565b611c61565b60405161085f9190613f9f565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a91906137a4565b611cf5565b60405161089c919061433c565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906137a4565b611d0d565b005b60006108d982611eb9565b9050919050565b6060600080546108ef90614618565b80601f016020809104026020016040519081016040528092919081815260200182805461091b90614618565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b600061097d82611f33565b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b3906141dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a028261103c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a9061425c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a92611f9f565b73ffffffffffffffffffffffffffffffffffffffff161480610ac15750610ac081610abb611f9f565b611c61565b5b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af79061411c565b60405180910390fd5b610b0a8383611fa7565b505050565b6000600880549050905090565b610b2d610b27611f9f565b82612060565b610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b639061429c565b60405180910390fd5b610b7783838361213e565b505050565b6000610b8783611300565b8210610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf9061401c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c29611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610c476116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c94906141fc565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610cd1611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610cef6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906141fc565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d90573d6000803e3d6000fd5b5050565b610d9c611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610dba6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906141fc565b60405180910390fd5b610e1861239a565b565b610e22611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610e406116cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906141fc565b60405180910390fd5b610e9f8161243c565b50565b610ebd83838360405180602001604052806000815250611bd4565b505050565b610ed3610ecd611f9f565b82612060565b610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061431c565b60405180910390fd5b610f1b816124a7565b50565b6000610f28610b0f565b8210610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f60906142dc565b60405180910390fd5b60088281548110610f7d57610f7c6147b1565b5b90600052602060002001549050919050565b610f97611f9f565b73ffffffffffffffffffffffffffffffffffffffff16610fb56116cb565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906141fc565b60405180910390fd5b80601090805190602001906110219291906134da565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061417c565b60405180910390fd5b80915050919050565b6110f6611f9f565b73ffffffffffffffffffffffffffffffffffffffff166111146116cb565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906141fc565b60405180910390fd5b60005b82518110156111e757816011600085848151811061118e5761118d6147b1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806111df9061467b565b91505061116d565b505050565b601080546111f990614618565b80601f016020809104026020016040519081016040528092919081815260200182805461122590614618565b80156112725780601f1061124757610100808354040283529160200191611272565b820191906000526020600020905b81548152906001019060200180831161125557829003601f168201915b505050505081565b611282611f9f565b73ffffffffffffffffffffffffffffffffffffffff166112a06116cb565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906141fc565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113689061415c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c0611f9f565b73ffffffffffffffffffffffffffffffffffffffff166113de6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b906141fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114fd611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661151b6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906141fc565b60405180910390fd5b60005b81811015611598576115858361243c565b80806115909061467b565b915050611574565b505050565b6115a5611f9f565b73ffffffffffffffffffffffffffffffffffffffff166115c36116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611610906141fc565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b61164d611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661166b6116cb565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b8906141fc565b60405180910390fd5b6116c96124b3565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116fd611f9f565b73ffffffffffffffffffffffffffffffffffffffff1661171b6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906141fc565b60405180910390fd5b80600e8190555050565b60606001805461178a90614618565b80601f01602080910402602001604051908101604052809291908181526020018280546117b690614618565b80156118035780601f106117d857610100808354040283529160200191611803565b820191906000526020600020905b8154815290600101906020018083116117e657829003601f168201915b5050505050905090565b600f60009054906101000a900460ff1681565b600e5481565b80600e5461183491906144d4565b341015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061427c565b60405180910390fd5b600f60009054906101000a900460ff16611a275760011515600f60019054906101000a900460ff161515146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7906142bc565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906142fc565b60405180910390fd5b808211156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061413c565b60405180910390fd5b60005b828110156119d1576119be3361243c565b80806119c99061467b565b9150506119ad565b5081816119de919061452e565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050611a50565b60005b81811015611a4e57611a3b3361243c565b8080611a469061467b565b915050611a2a565b505b50565b611a5b611f9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906140bc565b60405180910390fd5b8060056000611ad6611f9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b83611f9f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc89190613f9f565b60405180910390a35050565b611be5611bdf611f9f565b83612060565b611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061429c565b60405180910390fd5b611c3084848484612556565b50505050565b600f60019054906101000a900460ff1681565b6060611c54826125b2565b9050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611d15611f9f565b73ffffffffffffffffffffffffffffffffffffffff16611d336116cb565b73ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d80906141fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df09061405c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f2c5750611f2b82612704565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661201a8361103c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206b82611f33565b6120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906140dc565b60405180910390fd5b60006120b58361103c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212457508373ffffffffffffffffffffffffffffffffffffffff1661210c84610972565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213557506121348185611c61565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215e8261103c565b73ffffffffffffffffffffffffffffffffffffffff16146121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab9061421c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061409c565b60405180910390fd5b61222f8383836127e6565b61223a600082611fa7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228a919061452e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061444d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123a2611025565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613fdc565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612425611f9f565b6040516124329190613f38565b60405180910390a1565b600d54612447610b0f565b10612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90613ffc565b60405180910390fd5b61249a81612495600c61283e565b61284c565b6124a4600c61286a565b50565b6124b081612880565b50565b6124bb611025565b156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f2906140fc565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861253f611f9f565b60405161254c9190613f38565b60405180910390a1565b61256184848461213e565b61256d848484846128d3565b6125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a39061403c565b60405180910390fd5b50505050565b60606125bd82611f33565b6125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906141bc565b60405180910390fd5b6000600a6000848152602001908152602001600020805461261c90614618565b80601f016020809104026020016040519081016040528092919081815260200182805461264890614618565b80156126955780601f1061266a57610100808354040283529160200191612695565b820191906000526020600020905b81548152906001019060200180831161267857829003601f168201915b5050505050905060006126a6612a6a565b90506000815114156126bc5781925050506126ff565b6000825111156126f15780826040516020016126d9929190613f14565b604051602081830303815290604052925050506126ff565b6126fa84612afc565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127df57506127de82612ba3565b5b9050919050565b6127ee611025565b1561282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906140fc565b60405180910390fd5b612839838383612c0d565b505050565b600081600001549050919050565b612866828260405180602001604052806000815250612d21565b5050565b6001816000016000828254019250508190555050565b61288981612d7c565b6000600a600083815260200190815260200160002080546128a990614618565b9050146128d057600a600082815260200190815260200160002060006128cf9190613560565b5b50565b60006128f48473ffffffffffffffffffffffffffffffffffffffff16612e8d565b15612a5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261291d611f9f565b8786866040518563ffffffff1660e01b815260040161293f9493929190613f53565b602060405180830381600087803b15801561295957600080fd5b505af192505050801561298a57506040513d601f19601f8201168201806040525081019061298791906139f0565b60015b612a0d573d80600081146129ba576040519150601f19603f3d011682016040523d82523d6000602084013e6129bf565b606091505b50600081511415612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc9061403c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a62565b600190505b949350505050565b606060108054612a7990614618565b80601f0160208091040260200160405190810160405280929190818152602001828054612aa590614618565b8015612af25780601f10612ac757610100808354040283529160200191612af2565b820191906000526020600020905b815481529060010190602001808311612ad557829003601f168201915b5050505050905090565b6060612b0782611f33565b612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061423c565b60405180910390fd5b6000612b50612a6a565b90506000815111612b705760405180602001604052806000815250612b9b565b80612b7a84612ea0565b604051602001612b8b929190613f14565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c18838383613001565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c5b57612c5681613006565b612c9a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c9957612c98838261304f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdd57612cd8816131bc565b612d1c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d1b57612d1a828261328d565b5b5b505050565b612d2b838361330c565b612d3860008484846128d3565b612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e9061403c565b60405180910390fd5b505050565b6000612d878261103c565b9050612d95816000846127e6565b612da0600083611fa7565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df0919061452e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612ee8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ffc565b600082905060005b60008214612f1a578080612f039061467b565b915050600a82612f1391906144a3565b9150612ef0565b60008167ffffffffffffffff811115612f3657612f356147e0565b5b6040519080825280601f01601f191660200182016040528015612f685781602001600182028036833780820191505090505b5090505b60008514612ff557600182612f81919061452e565b9150600a85612f9091906146c4565b6030612f9c919061444d565b60f81b818381518110612fb257612fb16147b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fee91906144a3565b9450612f6c565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161305c84611300565b613066919061452e565b905060006007600084815260200190815260200160002054905081811461314b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131d0919061452e565b9050600060096000848152602001908152602001600020549050600060088381548110613200576131ff6147b1565b5b906000526020600020015490508060088381548110613222576132216147b1565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061327157613270614782565b5b6001900381819060005260206000200160009055905550505050565b600061329883611300565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061419c565b60405180910390fd5b61338581611f33565b156133c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bc9061407c565b60405180910390fd5b6133d1600083836127e6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613421919061444d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134e690614618565b90600052602060002090601f016020900481019282613508576000855561354f565b82601f1061352157805160ff191683800117855561354f565b8280016001018555821561354f579182015b8281111561354e578251825591602001919060010190613533565b5b50905061355c91906135a0565b5090565b50805461356c90614618565b6000825580601f1061357e575061359d565b601f01602090049060005260206000209081019061359c91906135a0565b5b50565b5b808211156135b95760008160009055506001016135a1565b5090565b60006135d06135cb8461437c565b614357565b905080838252602082019050828560208602820111156135f3576135f2614814565b5b60005b85811015613623578161360988826136b1565b8452602084019350602083019250506001810190506135f6565b5050509392505050565b600061364061363b846143a8565b614357565b90508281526020810184848401111561365c5761365b614819565b5b6136678482856145d6565b509392505050565b600061368261367d846143d9565b614357565b90508281526020810184848401111561369e5761369d614819565b5b6136a98482856145d6565b509392505050565b6000813590506136c081614f38565b92915050565b600082601f8301126136db576136da61480f565b5b81356136eb8482602086016135bd565b91505092915050565b60008135905061370381614f4f565b92915050565b60008135905061371881614f66565b92915050565b60008151905061372d81614f66565b92915050565b600082601f8301126137485761374761480f565b5b813561375884826020860161362d565b91505092915050565b600082601f8301126137765761377561480f565b5b813561378684826020860161366f565b91505092915050565b60008135905061379e81614f7d565b92915050565b6000602082840312156137ba576137b9614823565b5b60006137c8848285016136b1565b91505092915050565b600080604083850312156137e8576137e7614823565b5b60006137f6858286016136b1565b9250506020613807858286016136b1565b9150509250929050565b60008060006060848603121561382a57613829614823565b5b6000613838868287016136b1565b9350506020613849868287016136b1565b925050604061385a8682870161378f565b9150509250925092565b6000806000806080858703121561387e5761387d614823565b5b600061388c878288016136b1565b945050602061389d878288016136b1565b93505060406138ae8782880161378f565b925050606085013567ffffffffffffffff8111156138cf576138ce61481e565b5b6138db87828801613733565b91505092959194509250565b600080604083850312156138fe576138fd614823565b5b600061390c858286016136b1565b925050602061391d858286016136f4565b9150509250929050565b6000806040838503121561393e5761393d614823565b5b600061394c858286016136b1565b925050602061395d8582860161378f565b9150509250929050565b6000806040838503121561397e5761397d614823565b5b600083013567ffffffffffffffff81111561399c5761399b61481e565b5b6139a8858286016136c6565b92505060206139b98582860161378f565b9150509250929050565b6000602082840312156139d9576139d8614823565b5b60006139e784828501613709565b91505092915050565b600060208284031215613a0657613a05614823565b5b6000613a148482850161371e565b91505092915050565b600060208284031215613a3357613a32614823565b5b600082013567ffffffffffffffff811115613a5157613a5061481e565b5b613a5d84828501613761565b91505092915050565b600060208284031215613a7c57613a7b614823565b5b6000613a8a8482850161378f565b91505092915050565b613a9c81614562565b82525050565b613aab81614574565b82525050565b6000613abc8261440a565b613ac68185614420565b9350613ad68185602086016145e5565b613adf81614828565b840191505092915050565b6000613af582614415565b613aff8185614431565b9350613b0f8185602086016145e5565b613b1881614828565b840191505092915050565b6000613b2e82614415565b613b388185614442565b9350613b488185602086016145e5565b80840191505092915050565b6000613b61601483614431565b9150613b6c82614839565b602082019050919050565b6000613b84600f83614431565b9150613b8f82614862565b602082019050919050565b6000613ba7602b83614431565b9150613bb28261488b565b604082019050919050565b6000613bca603283614431565b9150613bd5826148da565b604082019050919050565b6000613bed602683614431565b9150613bf882614929565b604082019050919050565b6000613c10601c83614431565b9150613c1b82614978565b602082019050919050565b6000613c33602483614431565b9150613c3e826149a1565b604082019050919050565b6000613c56601983614431565b9150613c61826149f0565b602082019050919050565b6000613c79602c83614431565b9150613c8482614a19565b604082019050919050565b6000613c9c601083614431565b9150613ca782614a68565b602082019050919050565b6000613cbf603883614431565b9150613cca82614a91565b604082019050919050565b6000613ce2604083614431565b9150613ced82614ae0565b604082019050919050565b6000613d05602a83614431565b9150613d1082614b2f565b604082019050919050565b6000613d28602983614431565b9150613d3382614b7e565b604082019050919050565b6000613d4b602083614431565b9150613d5682614bcd565b602082019050919050565b6000613d6e603183614431565b9150613d7982614bf6565b604082019050919050565b6000613d91602c83614431565b9150613d9c82614c45565b604082019050919050565b6000613db4602083614431565b9150613dbf82614c94565b602082019050919050565b6000613dd7602983614431565b9150613de282614cbd565b604082019050919050565b6000613dfa602f83614431565b9150613e0582614d0c565b604082019050919050565b6000613e1d602183614431565b9150613e2882614d5b565b604082019050919050565b6000613e40601383614431565b9150613e4b82614daa565b602082019050919050565b6000613e63603183614431565b9150613e6e82614dd3565b604082019050919050565b6000613e86601383614431565b9150613e9182614e22565b602082019050919050565b6000613ea9602c83614431565b9150613eb482614e4b565b604082019050919050565b6000613ecc602f83614431565b9150613ed782614e9a565b604082019050919050565b6000613eef603083614431565b9150613efa82614ee9565b604082019050919050565b613f0e816145cc565b82525050565b6000613f208285613b23565b9150613f2c8284613b23565b91508190509392505050565b6000602082019050613f4d6000830184613a93565b92915050565b6000608082019050613f686000830187613a93565b613f756020830186613a93565b613f826040830185613f05565b8181036060830152613f948184613ab1565b905095945050505050565b6000602082019050613fb46000830184613aa2565b92915050565b60006020820190508181036000830152613fd48184613aea565b905092915050565b60006020820190508181036000830152613ff581613b54565b9050919050565b6000602082019050818103600083015261401581613b77565b9050919050565b6000602082019050818103600083015261403581613b9a565b9050919050565b6000602082019050818103600083015261405581613bbd565b9050919050565b6000602082019050818103600083015261407581613be0565b9050919050565b6000602082019050818103600083015261409581613c03565b9050919050565b600060208201905081810360008301526140b581613c26565b9050919050565b600060208201905081810360008301526140d581613c49565b9050919050565b600060208201905081810360008301526140f581613c6c565b9050919050565b6000602082019050818103600083015261411581613c8f565b9050919050565b6000602082019050818103600083015261413581613cb2565b9050919050565b6000602082019050818103600083015261415581613cd5565b9050919050565b6000602082019050818103600083015261417581613cf8565b9050919050565b6000602082019050818103600083015261419581613d1b565b9050919050565b600060208201905081810360008301526141b581613d3e565b9050919050565b600060208201905081810360008301526141d581613d61565b9050919050565b600060208201905081810360008301526141f581613d84565b9050919050565b6000602082019050818103600083015261421581613da7565b9050919050565b6000602082019050818103600083015261423581613dca565b9050919050565b6000602082019050818103600083015261425581613ded565b9050919050565b6000602082019050818103600083015261427581613e10565b9050919050565b6000602082019050818103600083015261429581613e33565b9050919050565b600060208201905081810360008301526142b581613e56565b9050919050565b600060208201905081810360008301526142d581613e79565b9050919050565b600060208201905081810360008301526142f581613e9c565b9050919050565b6000602082019050818103600083015261431581613ebf565b9050919050565b6000602082019050818103600083015261433581613ee2565b9050919050565b60006020820190506143516000830184613f05565b92915050565b6000614361614372565b905061436d828261464a565b919050565b6000604051905090565b600067ffffffffffffffff821115614397576143966147e0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143c3576143c26147e0565b5b6143cc82614828565b9050602081019050919050565b600067ffffffffffffffff8211156143f4576143f36147e0565b5b6143fd82614828565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614458826145cc565b9150614463836145cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614498576144976146f5565b5b828201905092915050565b60006144ae826145cc565b91506144b9836145cc565b9250826144c9576144c8614724565b5b828204905092915050565b60006144df826145cc565b91506144ea836145cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614523576145226146f5565b5b828202905092915050565b6000614539826145cc565b9150614544836145cc565b925082821015614557576145566146f5565b5b828203905092915050565b600061456d826145ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146035780820151818401526020810190506145e8565b83811115614612576000848401525b50505050565b6000600282049050600182168061463057607f821691505b6020821081141561464457614643614753565b5b50919050565b61465382614828565b810181811067ffffffffffffffff82111715614672576146716147e0565b5b80604052505050565b6000614686826145cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146b9576146b86146f5565b5b600182019050919050565b60006146cf826145cc565b91506146da836145cc565b9250826146ea576146e9614724565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f737570706c79206465706c657465640000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f746869732061646472657373206973206e6f7420616c6c6f77656420746f206d60008201527f696e742074686174206d616e7920647572696e67207468652070726573616c65602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820776173207061696400000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f70726573616c65206973206e6f74206f70656e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f746869732061646472657373206973206e6f742077686974656c69737465642060008201527f666f72207468652070726573616c650000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b614f4181614562565b8114614f4c57600080fd5b50565b614f5881614574565b8114614f6357600080fd5b50565b614f6f81614580565b8114614f7a57600080fd5b50565b614f86816145cc565b8114614f9157600080fd5b5056fea26469706673582212201c8abbda024ffa5f9631fa5df759d5ffd6a5479d0db9e11d467566d455552f9964736f6c63430008070033

Deployed Bytecode Sourcemap

49581:3521:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52928:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21871:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23282:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22842:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35537:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24172:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35205:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50821:87;;;;;;;;;;;;;:::i;:::-;;50442:143;;;;;;;;;;;;;:::i;:::-;;50662:65;;;;;;;;;;;;;:::i;:::-;;51554:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24582:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47984:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35727:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51124:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44043:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21565:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50267:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49939:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51012:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21295:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46975:148;;;;;;;;;;;;;:::i;:::-;;50120:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50735:78;;;;;;;;;;;;;:::i;:::-;;50593:61;;;;;;;;;;;;;:::i;:::-;;46324:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50916:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22040:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49866:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49824:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51644:683;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23575:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24838:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49901:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52765:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49786:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23941:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49969:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47278:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52928:171;53031:4;53055:36;53079:11;53055:23;:36::i;:::-;53048:43;;52928:171;;;:::o;21871:100::-;21925:13;21958:5;21951:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21871:100;:::o;23282:221::-;23358:7;23386:16;23394:7;23386;:16::i;:::-;23378:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23471:15;:24;23487:7;23471:24;;;;;;;;;;;;;;;;;;;;;23464:31;;23282:221;;;:::o;22842:374::-;22923:13;22939:23;22954:7;22939:14;:23::i;:::-;22923:39;;22987:5;22981:11;;:2;:11;;;;22973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23067:5;23051:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23076:37;23093:5;23100:12;:10;:12::i;:::-;23076:16;:37::i;:::-;23051:62;23043:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;23187:21;23196:2;23200:7;23187:8;:21::i;:::-;22912:304;22842:374;;:::o;35537:113::-;35598:7;35625:10;:17;;;;35618:24;;35537:113;:::o;24172:339::-;24367:41;24386:12;:10;:12::i;:::-;24400:7;24367:18;:41::i;:::-;24359:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24475:28;24485:4;24491:2;24495:7;24475:9;:28::i;:::-;24172:339;;;:::o;35205:256::-;35302:7;35338:23;35355:5;35338:16;:23::i;:::-;35330:5;:31;35322:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35427:12;:19;35440:5;35427:19;;;;;;;;;;;;;;;:26;35447:5;35427:26;;;;;;;;;;;;35420:33;;35205:256;;;;:::o;50821:87::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50889:11:::1;;;;;;;;;;;50888:12;50874:11;;:26;;;;;;;;;;;;;;;;;;50821:87::o:0;50442:143::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50490:15:::1;50508:21;50490:39;;50548:10;50540:28;;:37;50569:7;50540:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50479:106;50442:143::o:0;50662:65::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50709:10:::1;:8;:10::i;:::-;50662:65::o:0;51554:82::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51612:16:::1;51625:2;51612:12;:16::i;:::-;51554:82:::0;:::o;24582:185::-;24720:39;24737:4;24743:2;24747:7;24720:39;;;;;;;;;;;;:16;:39::i;:::-;24582:185;;;:::o;47984:245::-;48102:41;48121:12;:10;:12::i;:::-;48135:7;48102:18;:41::i;:::-;48094:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;48207:14;48213:7;48207:5;:14::i;:::-;47984:245;:::o;35727:233::-;35802:7;35838:30;:28;:30::i;:::-;35830:5;:38;35822:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35935:10;35946:5;35935:17;;;;;;;;:::i;:::-;;;;;;;;;;35928:24;;35727:233;;;:::o;51124:102::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51208:10:::1;51198:7;:20;;;;;;;;;;;;:::i;:::-;;51124:102:::0;:::o;44043:86::-;44090:4;44114:7;;;;;;;;;;;44107:14;;44043:86;:::o;21565:239::-;21637:7;21657:13;21673:7;:16;21681:7;21673:16;;;;;;;;;;;;;;;;;;;;;21657:32;;21725:1;21708:19;;:5;:19;;;;21700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21791:5;21784:12;;;21565:239;;;:::o;50267:167::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50364:9:::1;50359:67;50383:3;:10;50379:1;:14;50359:67;;;50420:6;50400:9;:17;50410:3;50414:1;50410:6;;;;;;;;:::i;:::-;;;;;;;;50400:17;;;;;;;;;;;;;;;:26;;;;50395:3;;;;;:::i;:::-;;;;50359:67;;;;50267:167:::0;;:::o;49939:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51012:104::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51096:12:::1;51084:9;:24;;;;51012:104:::0;:::o;21295:208::-;21367:7;21412:1;21395:19;;:5;:19;;;;21387:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21479:9;:16;21489:5;21479:16;;;;;;;;;;;;;;;;21472:23;;21295:208;;;:::o;46975:148::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47082:1:::1;47045:40;;47066:6;;;;;;;;;;;47045:40;;;;;;;;;;;;47113:1;47096:6;;:19;;;;;;;;;;;;;;;;;;46975:148::o:0;50120:139::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50203:9:::1;50198:53;50222:6;50218:1;:10;50198:53;;;50235:16;50248:2;50235:12;:16::i;:::-;50230:3;;;;;:::i;:::-;;;;50198:53;;;;50120:139:::0;;:::o;50735:78::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50797:8:::1;;;;;;;;;;;50796:9;50785:8;;:20;;;;;;;;;;;;;;;;;;50735:78::o:0;50593:61::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50638:8:::1;:6;:8::i;:::-;50593:61::o:0;46324:87::-;46370:7;46397:6;;;;;;;;;;;46390:13;;46324:87;:::o;50916:88::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50988:8:::1;50980:5;:16;;;;50916:88:::0;:::o;22040:104::-;22096:13;22129:7;22122:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22040:104;:::o;49866:28::-;;;;;;;;;;;;;:::o;49824:35::-;;;;:::o;51644:683::-;51729:6;51721:5;;:14;;;;:::i;:::-;51708:9;:27;;51700:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51775:8;;;;;;;;;;;51770:478;;51823:4;51808:19;;:11;;;;;;;;;;;:19;;;51800:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51866:11;51880:9;:21;51890:10;51880:21;;;;;;;;;;;;;;;;51866:35;;51930:1;51924:3;:7;51916:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52016:3;52006:6;:13;;51998:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;52108:9;52103:61;52127:6;52123:1;:10;52103:61;;;52140:24;52153:10;52140:12;:24::i;:::-;52135:3;;;;;:::i;:::-;;;;52103:61;;;;52209:6;52203:3;:12;;;;:::i;:::-;52179:9;:21;52189:10;52179:21;;;;;;;;;;;;;;;:36;;;;52230:7;;;51770:478;52263:9;52258:61;52282:6;52278:1;:10;52258:61;;;52295:24;52308:10;52295:12;:24::i;:::-;52290:3;;;;;:::i;:::-;;;;52258:61;;;;51644:683;;:::o;23575:295::-;23690:12;:10;:12::i;:::-;23678:24;;:8;:24;;;;23670:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23790:8;23745:18;:32;23764:12;:10;:12::i;:::-;23745:32;;;;;;;;;;;;;;;:42;23778:8;23745:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23843:8;23814:48;;23829:12;:10;:12::i;:::-;23814:48;;;23853:8;23814:48;;;;;;:::i;:::-;;;;;;;;23575:295;;:::o;24838:328::-;25013:41;25032:12;:10;:12::i;:::-;25046:7;25013:18;:41::i;:::-;25005:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25119:39;25133:4;25139:2;25143:7;25152:5;25119:13;:39::i;:::-;24838:328;;;;:::o;49901:31::-;;;;;;;;;;;;;:::o;52765:155::-;52856:13;52889:23;52904:7;52889:14;:23::i;:::-;52882:30;;52765:155;;;:::o;49786:31::-;;;;:::o;23941:164::-;24038:4;24062:18;:25;24081:5;24062:25;;;;;;;;;;;;;;;:35;24088:8;24062:35;;;;;;;;;;;;;;;;;;;;;;;;;24055:42;;23941:164;;;;:::o;49969:44::-;;;;;;;;;;;;;;;;;:::o;47278:244::-;46555:12;:10;:12::i;:::-;46544:23;;:7;:5;:7::i;:::-;:23;;;46536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47387:1:::1;47367:22;;:8;:22;;;;47359:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47477:8;47448:38;;47469:6;;;;;;;;;;;47448:38;;;;;;;;;;;;47506:8;47497:6;;:17;;;;;;;;;;;;;;;;;;47278:244:::0;:::o;34897:224::-;34999:4;35038:35;35023:50;;;:11;:50;;;;:90;;;;35077:36;35101:11;35077:23;:36::i;:::-;35023:90;35016:97;;34897:224;;;:::o;26676:127::-;26741:4;26793:1;26765:30;;:7;:16;26773:7;26765:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26758:37;;26676:127;;;:::o;16271:98::-;16324:7;16351:10;16344:17;;16271:98;:::o;30621:174::-;30723:2;30696:15;:24;30712:7;30696:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30779:7;30775:2;30741:46;;30750:23;30765:7;30750:14;:23::i;:::-;30741:46;;;;;;;;;;;;30621:174;;:::o;26970:348::-;27063:4;27088:16;27096:7;27088;:16::i;:::-;27080:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27164:13;27180:23;27195:7;27180:14;:23::i;:::-;27164:39;;27233:5;27222:16;;:7;:16;;;:51;;;;27266:7;27242:31;;:20;27254:7;27242:11;:20::i;:::-;:31;;;27222:51;:87;;;;27277:32;27294:5;27301:7;27277:16;:32::i;:::-;27222:87;27214:96;;;26970:348;;;;:::o;29925:578::-;30084:4;30057:31;;:23;30072:7;30057:14;:23::i;:::-;:31;;;30049:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30167:1;30153:16;;:2;:16;;;;30145:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30223:39;30244:4;30250:2;30254:7;30223:20;:39::i;:::-;30327:29;30344:1;30348:7;30327:8;:29::i;:::-;30388:1;30369:9;:15;30379:4;30369:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30417:1;30400:9;:13;30410:2;30400:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30448:2;30429:7;:16;30437:7;30429:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30487:7;30483:2;30468:27;;30477:4;30468:27;;;;;;;;;;;;29925:578;;;:::o;45102:120::-;44646:8;:6;:8::i;:::-;44638:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45171:5:::1;45161:7;;:15;;;;;;;;;;;;;;;;;;45192:22;45201:12;:10;:12::i;:::-;45192:22;;;;;;:::i;:::-;;;;;;;;45102:120::o:0;51342:204::-;51420:9;;51404:13;:11;:13::i;:::-;:25;51396:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51460:40;51470:2;51474:25;:15;:23;:25::i;:::-;51460:9;:40::i;:::-;51511:27;:15;:25;:27::i;:::-;51342:204;:::o;52642:115::-;52729:20;52741:7;52729:11;:20::i;:::-;52642:115;:::o;44843:118::-;44369:8;:6;:8::i;:::-;44368:9;44360:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44913:4:::1;44903:7;;:14;;;;;;;;;;;;;;;;;;44933:20;44940:12;:10;:12::i;:::-;44933:20;;;;;;:::i;:::-;;;;;;;;44843:118::o:0;26048:315::-;26205:28;26215:4;26221:2;26225:7;26205:9;:28::i;:::-;26252:48;26275:4;26281:2;26285:7;26294:5;26252:22;:48::i;:::-;26244:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26048:315;;;;:::o;41475:679::-;41548:13;41582:16;41590:7;41582;:16::i;:::-;41574:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;41665:23;41691:10;:19;41702:7;41691:19;;;;;;;;;;;41665:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41721:18;41742:10;:8;:10::i;:::-;41721:31;;41850:1;41834:4;41828:18;:23;41824:72;;;41875:9;41868:16;;;;;;41824:72;42026:1;42006:9;42000:23;:27;41996:108;;;42075:4;42081:9;42058:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42044:48;;;;;;41996:108;42123:23;42138:7;42123:14;:23::i;:::-;42116:30;;;;41475:679;;;;:::o;20965:266::-;21067:4;21106:25;21091:40;;;:11;:40;;;;:92;;;;21150:33;21135:48;;;:11;:48;;;;21091:92;:132;;;;21187:36;21211:11;21187:23;:36::i;:::-;21091:132;21084:139;;20965:266;;;:::o;52335:229::-;44369:8;:6;:8::i;:::-;44368:9;44360:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52511:45:::1;52538:4;52544:2;52548:7;52511:26;:45::i;:::-;52335:229:::0;;;:::o;49055:114::-;49120:7;49147;:14;;;49140:21;;49055:114;;;:::o;27660:110::-;27736:26;27746:2;27750:7;27736:26;;;;;;;;;;;;:9;:26::i;:::-;27660:110;;:::o;49177:127::-;49284:1;49266:7;:14;;;:19;;;;;;;;;;;49177:127;:::o;42756:206::-;42825:20;42837:7;42825:11;:20::i;:::-;42899:1;42868:10;:19;42879:7;42868:19;;;;;;;;;;;42862:33;;;;;:::i;:::-;;;:38;42858:97;;42924:10;:19;42935:7;42924:19;;;;;;;;;;;;42917:26;;;;:::i;:::-;42858:97;42756:206;:::o;31360:872::-;31515:4;31536:15;:2;:13;;;:15::i;:::-;31532:693;;;31588:2;31572:36;;;31609:12;:10;:12::i;:::-;31623:4;31629:7;31638:5;31572:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31568:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31835:1;31818:6;:13;:18;31814:341;;;31861:60;;;;;;;;;;:::i;:::-;;;;;;;;31814:341;32105:6;32099:13;32090:6;32086:2;32082:15;32075:38;31568:602;31705:45;;;31695:55;;;:6;:55;;;;31688:62;;;;;31532:693;32209:4;32202:11;;31360:872;;;;;;;:::o;51234:100::-;51286:13;51319:7;51312:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51234:100;:::o;22215:334::-;22288:13;22322:16;22330:7;22322;:16::i;:::-;22314:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22403:21;22427:10;:8;:10::i;:::-;22403:34;;22479:1;22461:7;22455:21;:25;:86;;;;;;;;;;;;;;;;;22507:7;22516:18;:7;:16;:18::i;:::-;22490:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22455:86;22448:93;;;22215:334;;;:::o;19481:157::-;19566:4;19605:25;19590:40;;;:11;:40;;;;19583:47;;19481:157;;;:::o;36573:589::-;36717:45;36744:4;36750:2;36754:7;36717:26;:45::i;:::-;36795:1;36779:18;;:4;:18;;;36775:187;;;36814:40;36846:7;36814:31;:40::i;:::-;36775:187;;;36884:2;36876:10;;:4;:10;;;36872:90;;36903:47;36936:4;36942:7;36903:32;:47::i;:::-;36872:90;36775:187;36990:1;36976:16;;:2;:16;;;36972:183;;;37009:45;37046:7;37009:36;:45::i;:::-;36972:183;;;37082:4;37076:10;;:2;:10;;;37072:83;;37103:40;37131:2;37135:7;37103:27;:40::i;:::-;37072:83;36972:183;36573:589;;;:::o;27997:284::-;28127:18;28133:2;28137:7;28127:5;:18::i;:::-;28164:54;28195:1;28199:2;28203:7;28212:5;28164:22;:54::i;:::-;28156:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27997:284;;;:::o;29228:360::-;29288:13;29304:23;29319:7;29304:14;:23::i;:::-;29288:39;;29340:48;29361:5;29376:1;29380:7;29340:20;:48::i;:::-;29429:29;29446:1;29450:7;29429:8;:29::i;:::-;29491:1;29471:9;:16;29481:5;29471:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29510:7;:16;29518:7;29510:16;;;;;;;;;;;;29503:23;;;;;;;;;;;29572:7;29568:1;29544:36;;29553:5;29544:36;;;;;;;;;;;;29277:311;29228:360;:::o;8152:444::-;8212:4;8420:12;8544:7;8532:20;8524:28;;8587:1;8580:4;:8;8573:15;;;8152:444;;;:::o;16928:723::-;16984:13;17214:1;17205:5;:10;17201:53;;;17232:10;;;;;;;;;;;;;;;;;;;;;17201:53;17264:12;17279:5;17264:20;;17295:14;17320:78;17335:1;17327:4;:9;17320:78;;17353:8;;;;;:::i;:::-;;;;17384:2;17376:10;;;;;:::i;:::-;;;17320:78;;;17408:19;17440:6;17430:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17408:39;;17458:154;17474:1;17465:5;:10;17458:154;;17502:1;17492:11;;;;;:::i;:::-;;;17569:2;17561:5;:10;;;;:::i;:::-;17548:2;:24;;;;:::i;:::-;17535:39;;17518:6;17525;17518:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17598:2;17589:11;;;;;:::i;:::-;;;17458:154;;;17636:6;17622:21;;;;;16928:723;;;;:::o;32845:126::-;;;;:::o;37885:164::-;37989:10;:17;;;;37962:15;:24;37978:7;37962:24;;;;;;;;;;;:44;;;;38017:10;38033:7;38017:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37885:164;:::o;38676:988::-;38942:22;38992:1;38967:22;38984:4;38967:16;:22::i;:::-;:26;;;;:::i;:::-;38942:51;;39004:18;39025:17;:26;39043:7;39025:26;;;;;;;;;;;;39004:47;;39172:14;39158:10;:28;39154:328;;39203:19;39225:12;:18;39238:4;39225:18;;;;;;;;;;;;;;;:34;39244:14;39225:34;;;;;;;;;;;;39203:56;;39309:11;39276:12;:18;39289:4;39276:18;;;;;;;;;;;;;;;:30;39295:10;39276:30;;;;;;;;;;;:44;;;;39426:10;39393:17;:30;39411:11;39393:30;;;;;;;;;;;:43;;;;39188:294;39154:328;39578:17;:26;39596:7;39578:26;;;;;;;;;;;39571:33;;;39622:12;:18;39635:4;39622:18;;;;;;;;;;;;;;;:34;39641:14;39622:34;;;;;;;;;;;39615:41;;;38757:907;;38676:988;;:::o;39959:1079::-;40212:22;40257:1;40237:10;:17;;;;:21;;;;:::i;:::-;40212:46;;40269:18;40290:15;:24;40306:7;40290:24;;;;;;;;;;;;40269:45;;40641:19;40663:10;40674:14;40663:26;;;;;;;;:::i;:::-;;;;;;;;;;40641:48;;40727:11;40702:10;40713;40702:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40838:10;40807:15;:28;40823:11;40807:28;;;;;;;;;;;:41;;;;40979:15;:24;40995:7;40979:24;;;;;;;;;;;40972:31;;;41014:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40030:1008;;;39959:1079;:::o;37463:221::-;37548:14;37565:20;37582:2;37565:16;:20::i;:::-;37548:37;;37623:7;37596:12;:16;37609:2;37596:16;;;;;;;;;;;;;;;:24;37613:6;37596:24;;;;;;;;;;;:34;;;;37670:6;37641:17;:26;37659:7;37641:26;;;;;;;;;;;:35;;;;37537:147;37463:221;;:::o;28617:382::-;28711:1;28697:16;;:2;:16;;;;28689:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28770:16;28778:7;28770;:16::i;:::-;28769:17;28761:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28832:45;28861:1;28865:2;28869:7;28832:20;:45::i;:::-;28907:1;28890:9;:13;28900:2;28890:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28938:2;28919:7;:16;28927:7;28919:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28983:7;28979:2;28958:33;;28975:1;28958:33;;;;;;;;;;;;28617:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:684::-;6851:6;6859;6908:2;6896:9;6887:7;6883:23;6879:32;6876:119;;;6914:79;;:::i;:::-;6876:119;7062:1;7051:9;7047:17;7034:31;7092:18;7084:6;7081:30;7078:117;;;7114:79;;:::i;:::-;7078:117;7219:78;7289:7;7280:6;7269:9;7265:22;7219:78;:::i;:::-;7209:88;;7005:302;7346:2;7372:53;7417:7;7408:6;7397:9;7393:22;7372:53;:::i;:::-;7362:63;;7317:118;6758:684;;;;;:::o;7448:327::-;7506:6;7555:2;7543:9;7534:7;7530:23;7526:32;7523:119;;;7561:79;;:::i;:::-;7523:119;7681:1;7706:52;7750:7;7741:6;7730:9;7726:22;7706:52;:::i;:::-;7696:62;;7652:116;7448:327;;;;:::o;7781:349::-;7850:6;7899:2;7887:9;7878:7;7874:23;7870:32;7867:119;;;7905:79;;:::i;:::-;7867:119;8025:1;8050:63;8105:7;8096:6;8085:9;8081:22;8050:63;:::i;:::-;8040:73;;7996:127;7781:349;;;;:::o;8136:509::-;8205:6;8254:2;8242:9;8233:7;8229:23;8225:32;8222:119;;;8260:79;;:::i;:::-;8222:119;8408:1;8397:9;8393:17;8380:31;8438:18;8430:6;8427:30;8424:117;;;8460:79;;:::i;:::-;8424:117;8565:63;8620:7;8611:6;8600:9;8596:22;8565:63;:::i;:::-;8555:73;;8351:287;8136:509;;;;:::o;8651:329::-;8710:6;8759:2;8747:9;8738:7;8734:23;8730:32;8727:119;;;8765:79;;:::i;:::-;8727:119;8885:1;8910:53;8955:7;8946:6;8935:9;8931:22;8910:53;:::i;:::-;8900:63;;8856:117;8651:329;;;;:::o;8986:118::-;9073:24;9091:5;9073:24;:::i;:::-;9068:3;9061:37;8986:118;;:::o;9110:109::-;9191:21;9206:5;9191:21;:::i;:::-;9186:3;9179:34;9110:109;;:::o;9225:360::-;9311:3;9339:38;9371:5;9339:38;:::i;:::-;9393:70;9456:6;9451:3;9393:70;:::i;:::-;9386:77;;9472:52;9517:6;9512:3;9505:4;9498:5;9494:16;9472:52;:::i;:::-;9549:29;9571:6;9549:29;:::i;:::-;9544:3;9540:39;9533:46;;9315:270;9225:360;;;;:::o;9591:364::-;9679:3;9707:39;9740:5;9707:39;:::i;:::-;9762:71;9826:6;9821:3;9762:71;:::i;:::-;9755:78;;9842:52;9887:6;9882:3;9875:4;9868:5;9864:16;9842:52;:::i;:::-;9919:29;9941:6;9919:29;:::i;:::-;9914:3;9910:39;9903:46;;9683:272;9591:364;;;;:::o;9961:377::-;10067:3;10095:39;10128:5;10095:39;:::i;:::-;10150:89;10232:6;10227:3;10150:89;:::i;:::-;10143:96;;10248:52;10293:6;10288:3;10281:4;10274:5;10270:16;10248:52;:::i;:::-;10325:6;10320:3;10316:16;10309:23;;10071:267;9961:377;;;;:::o;10344:366::-;10486:3;10507:67;10571:2;10566:3;10507:67;:::i;:::-;10500:74;;10583:93;10672:3;10583:93;:::i;:::-;10701:2;10696:3;10692:12;10685:19;;10344:366;;;:::o;10716:::-;10858:3;10879:67;10943:2;10938:3;10879:67;:::i;:::-;10872:74;;10955:93;11044:3;10955:93;:::i;:::-;11073:2;11068:3;11064:12;11057:19;;10716:366;;;:::o;11088:::-;11230:3;11251:67;11315:2;11310:3;11251:67;:::i;:::-;11244:74;;11327:93;11416:3;11327:93;:::i;:::-;11445:2;11440:3;11436:12;11429:19;;11088:366;;;:::o;11460:::-;11602:3;11623:67;11687:2;11682:3;11623:67;:::i;:::-;11616:74;;11699:93;11788:3;11699:93;:::i;:::-;11817:2;11812:3;11808:12;11801:19;;11460:366;;;:::o;11832:::-;11974:3;11995:67;12059:2;12054:3;11995:67;:::i;:::-;11988:74;;12071:93;12160:3;12071:93;:::i;:::-;12189:2;12184:3;12180:12;12173:19;;11832:366;;;:::o;12204:::-;12346:3;12367:67;12431:2;12426:3;12367:67;:::i;:::-;12360:74;;12443:93;12532:3;12443:93;:::i;:::-;12561:2;12556:3;12552:12;12545:19;;12204:366;;;:::o;12576:::-;12718:3;12739:67;12803:2;12798:3;12739:67;:::i;:::-;12732:74;;12815:93;12904:3;12815:93;:::i;:::-;12933:2;12928:3;12924:12;12917:19;;12576:366;;;:::o;12948:::-;13090:3;13111:67;13175:2;13170:3;13111:67;:::i;:::-;13104:74;;13187:93;13276:3;13187:93;:::i;:::-;13305:2;13300:3;13296:12;13289:19;;12948:366;;;:::o;13320:::-;13462:3;13483:67;13547:2;13542:3;13483:67;:::i;:::-;13476:74;;13559:93;13648:3;13559:93;:::i;:::-;13677:2;13672:3;13668:12;13661:19;;13320:366;;;:::o;13692:::-;13834:3;13855:67;13919:2;13914:3;13855:67;:::i;:::-;13848:74;;13931:93;14020:3;13931:93;:::i;:::-;14049:2;14044:3;14040:12;14033:19;;13692:366;;;:::o;14064:::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:::-;14950:3;14971:67;15035:2;15030:3;14971:67;:::i;:::-;14964:74;;15047:93;15136:3;15047:93;:::i;:::-;15165:2;15160:3;15156:12;15149:19;;14808:366;;;:::o;15180:::-;15322:3;15343:67;15407:2;15402:3;15343:67;:::i;:::-;15336:74;;15419:93;15508:3;15419:93;:::i;:::-;15537:2;15532:3;15528:12;15521:19;;15180:366;;;:::o;15552:::-;15694:3;15715:67;15779:2;15774:3;15715:67;:::i;:::-;15708:74;;15791:93;15880:3;15791:93;:::i;:::-;15909:2;15904:3;15900:12;15893:19;;15552:366;;;:::o;15924:::-;16066:3;16087:67;16151:2;16146:3;16087:67;:::i;:::-;16080:74;;16163:93;16252:3;16163:93;:::i;:::-;16281:2;16276:3;16272:12;16265:19;;15924:366;;;:::o;16296:::-;16438:3;16459:67;16523:2;16518:3;16459:67;:::i;:::-;16452:74;;16535:93;16624:3;16535:93;:::i;:::-;16653:2;16648:3;16644:12;16637:19;;16296:366;;;:::o;16668:::-;16810:3;16831:67;16895:2;16890:3;16831:67;:::i;:::-;16824:74;;16907:93;16996:3;16907:93;:::i;:::-;17025:2;17020:3;17016:12;17009:19;;16668:366;;;:::o;17040:::-;17182:3;17203:67;17267:2;17262:3;17203:67;:::i;:::-;17196:74;;17279:93;17368:3;17279:93;:::i;:::-;17397:2;17392:3;17388:12;17381:19;;17040:366;;;:::o;17412:::-;17554:3;17575:67;17639:2;17634:3;17575:67;:::i;:::-;17568:74;;17651:93;17740:3;17651:93;:::i;:::-;17769:2;17764:3;17760:12;17753:19;;17412:366;;;:::o;17784:::-;17926:3;17947:67;18011:2;18006:3;17947:67;:::i;:::-;17940:74;;18023:93;18112:3;18023:93;:::i;:::-;18141:2;18136:3;18132:12;18125:19;;17784:366;;;:::o;18156:::-;18298:3;18319:67;18383:2;18378:3;18319:67;:::i;:::-;18312:74;;18395:93;18484:3;18395:93;:::i;:::-;18513:2;18508:3;18504:12;18497:19;;18156:366;;;:::o;18528:::-;18670:3;18691:67;18755:2;18750:3;18691:67;:::i;:::-;18684:74;;18767:93;18856:3;18767:93;:::i;:::-;18885:2;18880:3;18876:12;18869:19;;18528:366;;;:::o;18900:::-;19042:3;19063:67;19127:2;19122:3;19063:67;:::i;:::-;19056:74;;19139:93;19228:3;19139:93;:::i;:::-;19257:2;19252:3;19248:12;19241:19;;18900:366;;;:::o;19272:::-;19414:3;19435:67;19499:2;19494:3;19435:67;:::i;:::-;19428:74;;19511:93;19600:3;19511:93;:::i;:::-;19629:2;19624:3;19620:12;19613:19;;19272:366;;;:::o;19644:::-;19786:3;19807:67;19871:2;19866:3;19807:67;:::i;:::-;19800:74;;19883:93;19972:3;19883:93;:::i;:::-;20001:2;19996:3;19992:12;19985:19;;19644:366;;;:::o;20016:::-;20158:3;20179:67;20243:2;20238:3;20179:67;:::i;:::-;20172:74;;20255:93;20344:3;20255:93;:::i;:::-;20373:2;20368:3;20364:12;20357:19;;20016:366;;;:::o;20388:118::-;20475:24;20493:5;20475:24;:::i;:::-;20470:3;20463:37;20388:118;;:::o;20512:435::-;20692:3;20714:95;20805:3;20796:6;20714:95;:::i;:::-;20707:102;;20826:95;20917:3;20908:6;20826:95;:::i;:::-;20819:102;;20938:3;20931:10;;20512:435;;;;;:::o;20953:222::-;21046:4;21084:2;21073:9;21069:18;21061:26;;21097:71;21165:1;21154:9;21150:17;21141:6;21097:71;:::i;:::-;20953:222;;;;:::o;21181:640::-;21376:4;21414:3;21403:9;21399:19;21391:27;;21428:71;21496:1;21485:9;21481:17;21472:6;21428:71;:::i;:::-;21509:72;21577:2;21566:9;21562:18;21553:6;21509:72;:::i;:::-;21591;21659:2;21648:9;21644:18;21635:6;21591:72;:::i;:::-;21710:9;21704:4;21700:20;21695:2;21684:9;21680:18;21673:48;21738:76;21809:4;21800:6;21738:76;:::i;:::-;21730:84;;21181:640;;;;;;;:::o;21827:210::-;21914:4;21952:2;21941:9;21937:18;21929:26;;21965:65;22027:1;22016:9;22012:17;22003:6;21965:65;:::i;:::-;21827:210;;;;:::o;22043:313::-;22156:4;22194:2;22183:9;22179:18;22171:26;;22243:9;22237:4;22233:20;22229:1;22218:9;22214:17;22207:47;22271:78;22344:4;22335:6;22271:78;:::i;:::-;22263:86;;22043:313;;;;:::o;22362:419::-;22528:4;22566:2;22555:9;22551:18;22543:26;;22615:9;22609:4;22605:20;22601:1;22590:9;22586:17;22579:47;22643:131;22769:4;22643:131;:::i;:::-;22635:139;;22362:419;;;:::o;22787:::-;22953:4;22991:2;22980:9;22976:18;22968:26;;23040:9;23034:4;23030:20;23026:1;23015:9;23011:17;23004:47;23068:131;23194:4;23068:131;:::i;:::-;23060:139;;22787:419;;;:::o;23212:::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23465:9;23459:4;23455:20;23451:1;23440:9;23436:17;23429:47;23493:131;23619:4;23493:131;:::i;:::-;23485:139;;23212:419;;;:::o;23637:::-;23803:4;23841:2;23830:9;23826:18;23818:26;;23890:9;23884:4;23880:20;23876:1;23865:9;23861:17;23854:47;23918:131;24044:4;23918:131;:::i;:::-;23910:139;;23637:419;;;:::o;24062:::-;24228:4;24266:2;24255:9;24251:18;24243:26;;24315:9;24309:4;24305:20;24301:1;24290:9;24286:17;24279:47;24343:131;24469:4;24343:131;:::i;:::-;24335:139;;24062:419;;;:::o;24487:::-;24653:4;24691:2;24680:9;24676:18;24668:26;;24740:9;24734:4;24730:20;24726:1;24715:9;24711:17;24704:47;24768:131;24894:4;24768:131;:::i;:::-;24760:139;;24487:419;;;:::o;24912:::-;25078:4;25116:2;25105:9;25101:18;25093:26;;25165:9;25159:4;25155:20;25151:1;25140:9;25136:17;25129:47;25193:131;25319:4;25193:131;:::i;:::-;25185:139;;24912:419;;;:::o;25337:::-;25503:4;25541:2;25530:9;25526:18;25518:26;;25590:9;25584:4;25580:20;25576:1;25565:9;25561:17;25554:47;25618:131;25744:4;25618:131;:::i;:::-;25610:139;;25337:419;;;:::o;25762:::-;25928:4;25966:2;25955:9;25951:18;25943:26;;26015:9;26009:4;26005:20;26001:1;25990:9;25986:17;25979:47;26043:131;26169:4;26043:131;:::i;:::-;26035:139;;25762:419;;;:::o;26187:::-;26353:4;26391:2;26380:9;26376:18;26368:26;;26440:9;26434:4;26430:20;26426:1;26415:9;26411:17;26404:47;26468:131;26594:4;26468:131;:::i;:::-;26460:139;;26187:419;;;:::o;26612:::-;26778:4;26816:2;26805:9;26801:18;26793:26;;26865:9;26859:4;26855:20;26851:1;26840:9;26836:17;26829:47;26893:131;27019:4;26893:131;:::i;:::-;26885:139;;26612:419;;;:::o;27037:::-;27203:4;27241:2;27230:9;27226:18;27218:26;;27290:9;27284:4;27280:20;27276:1;27265:9;27261:17;27254:47;27318:131;27444:4;27318:131;:::i;:::-;27310:139;;27037:419;;;:::o;27462:::-;27628:4;27666:2;27655:9;27651:18;27643:26;;27715:9;27709:4;27705:20;27701:1;27690:9;27686:17;27679:47;27743:131;27869:4;27743:131;:::i;:::-;27735:139;;27462:419;;;:::o;27887:::-;28053:4;28091:2;28080:9;28076:18;28068:26;;28140:9;28134:4;28130:20;28126:1;28115:9;28111:17;28104:47;28168:131;28294:4;28168:131;:::i;:::-;28160:139;;27887:419;;;:::o;28312:::-;28478:4;28516:2;28505:9;28501:18;28493:26;;28565:9;28559:4;28555:20;28551:1;28540:9;28536:17;28529:47;28593:131;28719:4;28593:131;:::i;:::-;28585:139;;28312:419;;;:::o;28737:::-;28903:4;28941:2;28930:9;28926:18;28918:26;;28990:9;28984:4;28980:20;28976:1;28965:9;28961:17;28954:47;29018:131;29144:4;29018:131;:::i;:::-;29010:139;;28737:419;;;:::o;29162:::-;29328:4;29366:2;29355:9;29351:18;29343:26;;29415:9;29409:4;29405:20;29401:1;29390:9;29386:17;29379:47;29443:131;29569:4;29443:131;:::i;:::-;29435:139;;29162:419;;;:::o;29587:::-;29753:4;29791:2;29780:9;29776:18;29768:26;;29840:9;29834:4;29830:20;29826:1;29815:9;29811:17;29804:47;29868:131;29994:4;29868:131;:::i;:::-;29860:139;;29587:419;;;:::o;30012:::-;30178:4;30216:2;30205:9;30201:18;30193:26;;30265:9;30259:4;30255:20;30251:1;30240:9;30236:17;30229:47;30293:131;30419:4;30293:131;:::i;:::-;30285:139;;30012:419;;;:::o;30437:::-;30603:4;30641:2;30630:9;30626:18;30618:26;;30690:9;30684:4;30680:20;30676:1;30665:9;30661:17;30654:47;30718:131;30844:4;30718:131;:::i;:::-;30710:139;;30437:419;;;:::o;30862:::-;31028:4;31066:2;31055:9;31051:18;31043:26;;31115:9;31109:4;31105:20;31101:1;31090:9;31086:17;31079:47;31143:131;31269:4;31143:131;:::i;:::-;31135:139;;30862:419;;;:::o;31287:::-;31453:4;31491:2;31480:9;31476:18;31468:26;;31540:9;31534:4;31530:20;31526:1;31515:9;31511:17;31504:47;31568:131;31694:4;31568:131;:::i;:::-;31560:139;;31287:419;;;:::o;31712:::-;31878:4;31916:2;31905:9;31901:18;31893:26;;31965:9;31959:4;31955:20;31951:1;31940:9;31936:17;31929:47;31993:131;32119:4;31993:131;:::i;:::-;31985:139;;31712:419;;;:::o;32137:::-;32303:4;32341:2;32330:9;32326:18;32318:26;;32390:9;32384:4;32380:20;32376:1;32365:9;32361:17;32354:47;32418:131;32544:4;32418:131;:::i;:::-;32410:139;;32137:419;;;:::o;32562:::-;32728:4;32766:2;32755:9;32751:18;32743:26;;32815:9;32809:4;32805:20;32801:1;32790:9;32786:17;32779:47;32843:131;32969:4;32843:131;:::i;:::-;32835:139;;32562:419;;;:::o;32987:::-;33153:4;33191:2;33180:9;33176:18;33168:26;;33240:9;33234:4;33230:20;33226:1;33215:9;33211:17;33204:47;33268:131;33394:4;33268:131;:::i;:::-;33260:139;;32987:419;;;:::o;33412:::-;33578:4;33616:2;33605:9;33601:18;33593:26;;33665:9;33659:4;33655:20;33651:1;33640:9;33636:17;33629:47;33693:131;33819:4;33693:131;:::i;:::-;33685:139;;33412:419;;;:::o;33837:222::-;33930:4;33968:2;33957:9;33953:18;33945:26;;33981:71;34049:1;34038:9;34034:17;34025:6;33981:71;:::i;:::-;33837:222;;;;:::o;34065:129::-;34099:6;34126:20;;:::i;:::-;34116:30;;34155:33;34183:4;34175:6;34155:33;:::i;:::-;34065:129;;;:::o;34200:75::-;34233:6;34266:2;34260:9;34250:19;;34200:75;:::o;34281:311::-;34358:4;34448:18;34440:6;34437:30;34434:56;;;34470:18;;:::i;:::-;34434:56;34520:4;34512:6;34508:17;34500:25;;34580:4;34574;34570:15;34562:23;;34281:311;;;:::o;34598:307::-;34659:4;34749:18;34741:6;34738:30;34735:56;;;34771:18;;:::i;:::-;34735:56;34809:29;34831:6;34809:29;:::i;:::-;34801:37;;34893:4;34887;34883:15;34875:23;;34598:307;;;:::o;34911:308::-;34973:4;35063:18;35055:6;35052:30;35049:56;;;35085:18;;:::i;:::-;35049:56;35123:29;35145:6;35123:29;:::i;:::-;35115:37;;35207:4;35201;35197:15;35189:23;;34911:308;;;:::o;35225:98::-;35276:6;35310:5;35304:12;35294:22;;35225:98;;;:::o;35329:99::-;35381:6;35415:5;35409:12;35399:22;;35329:99;;;:::o;35434:168::-;35517:11;35551:6;35546:3;35539:19;35591:4;35586:3;35582:14;35567:29;;35434:168;;;;:::o;35608:169::-;35692:11;35726:6;35721:3;35714:19;35766:4;35761:3;35757:14;35742:29;;35608:169;;;;:::o;35783:148::-;35885:11;35922:3;35907:18;;35783:148;;;;:::o;35937:305::-;35977:3;35996:20;36014:1;35996:20;:::i;:::-;35991:25;;36030:20;36048:1;36030:20;:::i;:::-;36025:25;;36184:1;36116:66;36112:74;36109:1;36106:81;36103:107;;;36190:18;;:::i;:::-;36103:107;36234:1;36231;36227:9;36220:16;;35937:305;;;;:::o;36248:185::-;36288:1;36305:20;36323:1;36305:20;:::i;:::-;36300:25;;36339:20;36357:1;36339:20;:::i;:::-;36334:25;;36378:1;36368:35;;36383:18;;:::i;:::-;36368:35;36425:1;36422;36418:9;36413:14;;36248:185;;;;:::o;36439:348::-;36479:7;36502:20;36520:1;36502:20;:::i;:::-;36497:25;;36536:20;36554:1;36536:20;:::i;:::-;36531:25;;36724:1;36656:66;36652:74;36649:1;36646:81;36641:1;36634:9;36627:17;36623:105;36620:131;;;36731:18;;:::i;:::-;36620:131;36779:1;36776;36772:9;36761:20;;36439:348;;;;:::o;36793:191::-;36833:4;36853:20;36871:1;36853:20;:::i;:::-;36848:25;;36887:20;36905:1;36887:20;:::i;:::-;36882:25;;36926:1;36923;36920:8;36917:34;;;36931:18;;:::i;:::-;36917:34;36976:1;36973;36969:9;36961:17;;36793:191;;;;:::o;36990:96::-;37027:7;37056:24;37074:5;37056:24;:::i;:::-;37045:35;;36990:96;;;:::o;37092:90::-;37126:7;37169:5;37162:13;37155:21;37144:32;;37092:90;;;:::o;37188:149::-;37224:7;37264:66;37257:5;37253:78;37242:89;;37188:149;;;:::o;37343:126::-;37380:7;37420:42;37413:5;37409:54;37398:65;;37343:126;;;:::o;37475:77::-;37512:7;37541:5;37530:16;;37475:77;;;:::o;37558:154::-;37642:6;37637:3;37632;37619:30;37704:1;37695:6;37690:3;37686:16;37679:27;37558:154;;;:::o;37718:307::-;37786:1;37796:113;37810:6;37807:1;37804:13;37796:113;;;37895:1;37890:3;37886:11;37880:18;37876:1;37871:3;37867:11;37860:39;37832:2;37829:1;37825:10;37820:15;;37796:113;;;37927:6;37924:1;37921:13;37918:101;;;38007:1;37998:6;37993:3;37989:16;37982:27;37918:101;37767:258;37718:307;;;:::o;38031:320::-;38075:6;38112:1;38106:4;38102:12;38092:22;;38159:1;38153:4;38149:12;38180:18;38170:81;;38236:4;38228:6;38224:17;38214:27;;38170:81;38298:2;38290:6;38287:14;38267:18;38264:38;38261:84;;;38317:18;;:::i;:::-;38261:84;38082:269;38031:320;;;:::o;38357:281::-;38440:27;38462:4;38440:27;:::i;:::-;38432:6;38428:40;38570:6;38558:10;38555:22;38534:18;38522:10;38519:34;38516:62;38513:88;;;38581:18;;:::i;:::-;38513:88;38621:10;38617:2;38610:22;38400:238;38357:281;;:::o;38644:233::-;38683:3;38706:24;38724:5;38706:24;:::i;:::-;38697:33;;38752:66;38745:5;38742:77;38739:103;;;38822:18;;:::i;:::-;38739:103;38869:1;38862:5;38858:13;38851:20;;38644:233;;;:::o;38883:176::-;38915:1;38932:20;38950:1;38932:20;:::i;:::-;38927:25;;38966:20;38984:1;38966:20;:::i;:::-;38961:25;;39005:1;38995:35;;39010:18;;:::i;:::-;38995:35;39051:1;39048;39044:9;39039:14;;38883:176;;;;:::o;39065:180::-;39113:77;39110:1;39103:88;39210:4;39207:1;39200:15;39234:4;39231:1;39224:15;39251:180;39299:77;39296:1;39289:88;39396:4;39393:1;39386:15;39420:4;39417:1;39410:15;39437:180;39485:77;39482:1;39475:88;39582:4;39579:1;39572:15;39606:4;39603:1;39596:15;39623:180;39671:77;39668:1;39661:88;39768:4;39765:1;39758:15;39792:4;39789:1;39782:15;39809:180;39857:77;39854:1;39847:88;39954:4;39951:1;39944:15;39978:4;39975:1;39968:15;39995:180;40043:77;40040:1;40033:88;40140:4;40137:1;40130:15;40164:4;40161:1;40154:15;40181:117;40290:1;40287;40280:12;40304:117;40413:1;40410;40403:12;40427:117;40536:1;40533;40526:12;40550:117;40659:1;40656;40649:12;40673:117;40782:1;40779;40772:12;40796:102;40837:6;40888:2;40884:7;40879:2;40872:5;40868:14;40864:28;40854:38;;40796:102;;;:::o;40904:170::-;41044:22;41040:1;41032:6;41028:14;41021:46;40904:170;:::o;41080:165::-;41220:17;41216:1;41208:6;41204:14;41197:41;41080:165;:::o;41251:230::-;41391:34;41387:1;41379:6;41375:14;41368:58;41460:13;41455:2;41447:6;41443:15;41436:38;41251:230;:::o;41487:237::-;41627:34;41623:1;41615:6;41611:14;41604:58;41696:20;41691:2;41683:6;41679:15;41672:45;41487:237;:::o;41730:225::-;41870:34;41866:1;41858:6;41854:14;41847:58;41939:8;41934:2;41926:6;41922:15;41915:33;41730:225;:::o;41961:178::-;42101:30;42097:1;42089:6;42085:14;42078:54;41961:178;:::o;42145:223::-;42285:34;42281:1;42273:6;42269:14;42262:58;42354:6;42349:2;42341:6;42337:15;42330:31;42145:223;:::o;42374:175::-;42514:27;42510:1;42502:6;42498:14;42491:51;42374:175;:::o;42555:231::-;42695:34;42691:1;42683:6;42679:14;42672:58;42764:14;42759:2;42751:6;42747:15;42740:39;42555:231;:::o;42792:166::-;42932:18;42928:1;42920:6;42916:14;42909:42;42792:166;:::o;42964:243::-;43104:34;43100:1;43092:6;43088:14;43081:58;43173:26;43168:2;43160:6;43156:15;43149:51;42964:243;:::o;43213:251::-;43353:34;43349:1;43341:6;43337:14;43330:58;43422:34;43417:2;43409:6;43405:15;43398:59;43213:251;:::o;43470:229::-;43610:34;43606:1;43598:6;43594:14;43587:58;43679:12;43674:2;43666:6;43662:15;43655:37;43470:229;:::o;43705:228::-;43845:34;43841:1;43833:6;43829:14;43822:58;43914:11;43909:2;43901:6;43897:15;43890:36;43705:228;:::o;43939:182::-;44079:34;44075:1;44067:6;44063:14;44056:58;43939:182;:::o;44127:236::-;44267:34;44263:1;44255:6;44251:14;44244:58;44336:19;44331:2;44323:6;44319:15;44312:44;44127:236;:::o;44369:231::-;44509:34;44505:1;44497:6;44493:14;44486:58;44578:14;44573:2;44565:6;44561:15;44554:39;44369:231;:::o;44606:182::-;44746:34;44742:1;44734:6;44730:14;44723:58;44606:182;:::o;44794:228::-;44934:34;44930:1;44922:6;44918:14;44911:58;45003:11;44998:2;44990:6;44986:15;44979:36;44794:228;:::o;45028:234::-;45168:34;45164:1;45156:6;45152:14;45145:58;45237:17;45232:2;45224:6;45220:15;45213:42;45028:234;:::o;45268:220::-;45408:34;45404:1;45396:6;45392:14;45385:58;45477:3;45472:2;45464:6;45460:15;45453:28;45268:220;:::o;45494:169::-;45634:21;45630:1;45622:6;45618:14;45611:45;45494:169;:::o;45669:236::-;45809:34;45805:1;45797:6;45793:14;45786:58;45878:19;45873:2;45865:6;45861:15;45854:44;45669:236;:::o;45911:169::-;46051:21;46047:1;46039:6;46035:14;46028:45;45911:169;:::o;46086:231::-;46226:34;46222:1;46214:6;46210:14;46203:58;46295:14;46290:2;46282:6;46278:15;46271:39;46086:231;:::o;46323:234::-;46463:34;46459:1;46451:6;46447:14;46440:58;46532:17;46527:2;46519:6;46515:15;46508:42;46323:234;:::o;46563:235::-;46703:34;46699:1;46691:6;46687:14;46680:58;46772:18;46767:2;46759:6;46755:15;46748:43;46563:235;:::o;46804:122::-;46877:24;46895:5;46877:24;:::i;:::-;46870:5;46867:35;46857:63;;46916:1;46913;46906:12;46857:63;46804:122;:::o;46932:116::-;47002:21;47017:5;47002:21;:::i;:::-;46995:5;46992:32;46982:60;;47038:1;47035;47028:12;46982:60;46932:116;:::o;47054:120::-;47126:23;47143:5;47126:23;:::i;:::-;47119:5;47116:34;47106:62;;47164:1;47161;47154:12;47106:62;47054:120;:::o;47180:122::-;47253:24;47271:5;47253:24;:::i;:::-;47246:5;47243:35;47233:63;;47292:1;47289;47282:12;47233:63;47180:122;:::o

Swarm Source

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