ETH Price: $2,880.82 (-5.59%)
Gas: 1 Gwei

Token

CryptoFranks (FRK)
 

Overview

Max Total Supply

252 FRK

Holders

147

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 FRK
0x52c1dc3bd73b58fbf58f89e40a64dafb40f37668
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoFranks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-04
*/

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



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/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/CryptoFranks.sol


pragma solidity ^0.8.0;




contract CryptoFranks is ERC721Enumerable, Ownable {
    using Strings for uint256;

    uint256 public constant MAX_FRANKS = 10000;
    uint256 public constant MAX_PER_MINT = 5;
    uint256 public constant PRESALE_MAX_MINT = 5;
    uint256 public constant MAX_FRANKS_MINT = 10;
    uint256 public constant RESERVED_FRANKS = 200;
    
    //Change price on mainnet deployment!!!!!!!!!!
    uint256 public PRICE = 0.03 ether;
    uint256 public reservedClaimed;
    uint256 public numFranksMinted;

    string public baseTokenURI;
    string public notRevealedUri;
    string public baseExtension = ".json";

    bool public publicSaleStarted;
    bool public presaleStarted;
    bool public revealed = false;

    mapping(address => bool) private _presaleEligible;
    mapping(address => uint256) private _totalClaimed;

    event BaseURIChanged(string baseURI);
    event PresaleMint(address minter, uint256 amountOfFranks);
    event PublicSaleMint(address minter, uint256 amountOfFranks);

    modifier whenPresaleStarted() {
        require(presaleStarted, "Presale has not started");
        _;
    }

    modifier whenPublicSaleStarted() {
        require(publicSaleStarted, "Public sale has not started");
        _;
    }
    
    constructor(string memory baseURI, string memory _initNotRevealedUri) ERC721("CryptoFranks", "FRK") {
        baseTokenURI = baseURI;
        setNotRevealedURI(_initNotRevealedUri);
    }

    function claimReserved(address recipient, uint256 amount) external onlyOwner {
        require(reservedClaimed != RESERVED_FRANKS, "Already have claimed all reserved franks");
        require(reservedClaimed + amount <= RESERVED_FRANKS, "Minting would exceed max reserved franks");
        require(recipient != address(0), "Cannot add null address");
        require(totalSupply() < MAX_FRANKS, "All tokens have been minted");
        require(totalSupply() + amount <= MAX_FRANKS, "Minting would exceed max supply");

        uint256 _nextTokenId = numFranksMinted + 1;

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(recipient, _nextTokenId + i);
        }
        numFranksMinted += amount;
        reservedClaimed += amount;
    }

    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkPresaleEligiblity(address addr) external view returns (bool) {
        return _presaleEligible[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }

    function mintPresale(uint256 amountOfFranks) external payable whenPresaleStarted {
        require(_presaleEligible[msg.sender], "You are not eligible for the presale");
        require(totalSupply() < MAX_FRANKS, "All tokens have been minted");
        require(amountOfFranks <= PRESALE_MAX_MINT, "Cannot purchase this many tokens during presale");
        require(totalSupply() + amountOfFranks <= MAX_FRANKS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfFranks <= PRESALE_MAX_MINT, "Purchase exceeds max allowed");
        require(amountOfFranks > 0, "Must mint at least one frank");
        require(PRICE * amountOfFranks == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfFranks; i++) {
            uint256 tokenId = numFranksMinted + 1;

            numFranksMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfFranks);
    }

    function mint(uint256 amountOfFranks) external payable whenPublicSaleStarted {
        require(totalSupply() < MAX_FRANKS, "All tokens have been minted");
        require(amountOfFranks <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction");
        require(totalSupply() + amountOfFranks <= MAX_FRANKS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfFranks <= MAX_FRANKS_MINT, "Purchase exceeds max allowed per address");
        require(amountOfFranks > 0, "Must mint at least one dad");
        require(PRICE * amountOfFranks == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfFranks; i++) {
            uint256 tokenId = numFranksMinted + 1;

            numFranksMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PublicSaleMint(msg.sender, amountOfFranks);
    }

    function togglePresaleStarted() external onlyOwner {
        presaleStarted = !presaleStarted;
    }

    function togglePublicSaleStarted() external onlyOwner {
        publicSaleStarted = !publicSaleStarted;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
        emit BaseURIChanged(baseURI);
    }
    
    function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
        baseExtension = _newBaseExtension;
   }
    
    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
   }
   
   function setPrice(uint256 _newPrice) public onlyOwner() {
        PRICE = _newPrice;
   }
   
   function reveal() public onlyOwner {
      revealed = true;
   }
   
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
    
        if(revealed == false) {
            return notRevealedUri;
        } 
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
    }
    
    function withdraw() public payable onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","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":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfFranks","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfFranks","type":"uint256"}],"name":"PublicSaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FRANKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FRANKS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_FRANKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","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":[{"internalType":"uint256","name":"amountOfFranks","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfFranks","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numFranksMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","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":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","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":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052666a94d74f430000600b556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601090805190602001906200005c92919062000340565b506000601160026101000a81548160ff0219169083151502179055503480156200008557600080fd5b50604051620061ab380380620061ab8339818101604052810190620000ab91906200046e565b6040518060400160405280600c81526020017f43727970746f4672616e6b7300000000000000000000000000000000000000008152506040518060400160405280600381526020017f46524b000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012f92919062000340565b5080600190805190602001906200014892919062000340565b5050506200016b6200015f6200019d60201b60201c565b620001a560201b60201c565b81600e90805190602001906200018392919062000340565b5062000195816200026b60201b60201c565b5050620006fa565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027b6200019d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a16200031660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f1906200051a565b60405180910390fd5b80600f90805190602001906200031292919062000340565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034e90620005e2565b90600052602060002090601f016020900481019282620003725760008555620003be565b82601f106200038d57805160ff1916838001178555620003be565b82800160010185558215620003be579182015b82811115620003bd578251825591602001919060010190620003a0565b5b509050620003cd9190620003d1565b5090565b5b80821115620003ec576000816000905550600101620003d2565b5090565b600062000407620004018462000565565b6200053c565b905082815260208101848484011115620004265762000425620006b1565b5b62000433848285620005ac565b509392505050565b600082601f830112620004535762000452620006ac565b5b815162000465848260208601620003f0565b91505092915050565b60008060408385031215620004885762000487620006bb565b5b600083015167ffffffffffffffff811115620004a957620004a8620006b6565b5b620004b7858286016200043b565b925050602083015167ffffffffffffffff811115620004db57620004da620006b6565b5b620004e9858286016200043b565b9150509250929050565b6000620005026020836200059b565b91506200050f82620006d1565b602082019050919050565b600060208201905081810360008301526200053581620004f3565b9050919050565b6000620005486200055b565b905062000556828262000618565b919050565b6000604051905090565b600067ffffffffffffffff8211156200058357620005826200067d565b5b6200058e82620006c0565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005cc578082015181840152602081019050620005af565b83811115620005dc576000848401525b50505050565b60006002820490506001821680620005fb57607f821691505b602082108114156200061257620006116200064e565b5b50919050565b6200062382620006c0565b810181811067ffffffffffffffff821117156200064557620006446200067d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615aa1806200070a6000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063a475b5dd116100c1578063da3ef23f1161007a578063da3ef23f14610994578063e985e9c5146109bd578063ed1fc2a2146109fa578063f2c4ce1e14610a11578063f2fde38b14610a3a578063f759867a14610a6357610288565b8063a475b5dd14610898578063aef6ee1f146108af578063b88d4fde146108d8578063c668286214610901578063c87b56dd1461092c578063d547cfb71461096957610288565b806391b7f5ed1161011357806391b7f5ed146107a957806395d89b41146107d25780639fd2fc7d146107fd578063a0712d6814610828578063a22cb46514610844578063a2e914771461086d57610288565b80636352211e1461069757806368845548146106d457806370a08231146106ff578063715018a61461073c5780638d859f3e146107535780638da5cb5b1461077e57610288565b806323b872dd116101fe57806342842e0e116101b757806342842e0e146105875780634f6ccce7146105b057806351830227146105ed578063549527c31461061857806355f804b3146106435780635b89c6b41461066c57610288565b806323b872dd146104aa57806324510043146104d35780632f745c59146104fe5780632f8145751461053b578063337d2dc6146105525780633ccfd60b1461057d57610288565b8063095ea7b311610250578063095ea7b31461038857806309d42b30146103b157806318160ddd146103dc578063191f65ac146104075780631978f469146104445780631b5757f21461048157610288565b806301ffc9a71461028d57806304549d6f146102ca57806306fdde03146102f5578063081812fc14610320578063081c8c441461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614071565b610a7f565b6040516102c1919061482f565b60405180910390f35b3480156102d657600080fd5b506102df610af9565b6040516102ec919061482f565b60405180910390f35b34801561030157600080fd5b5061030a610b0c565b604051610317919061484a565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190614114565b610b9e565b604051610354919061479f565b60405180910390f35b34801561036957600080fd5b50610372610c23565b60405161037f919061484a565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190613fe4565b610cb1565b005b3480156103bd57600080fd5b506103c6610dc9565b6040516103d39190614cac565b60405180910390f35b3480156103e857600080fd5b506103f1610dce565b6040516103fe9190614cac565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190613e61565b610ddb565b60405161043b919061482f565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613e61565b610e31565b6040516104789190614cac565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613fe4565b610ee9565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613ece565b61118c565b005b3480156104df57600080fd5b506104e86111ec565b6040516104f59190614cac565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613fe4565b6111f2565b6040516105329190614cac565b60405180910390f35b34801561054757600080fd5b50610550611297565b005b34801561055e57600080fd5b5061056761133f565b6040516105749190614cac565b60405180910390f35b610585611344565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613ece565b611482565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190614114565b6114a2565b6040516105e49190614cac565b60405180910390f35b3480156105f957600080fd5b50610602611513565b60405161060f919061482f565b60405180910390f35b34801561062457600080fd5b5061062d611526565b60405161063a9190614cac565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906140cb565b61152b565b005b34801561067857600080fd5b506106816115f8565b60405161068e9190614cac565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614114565b6115fe565b6040516106cb919061479f565b60405180910390f35b3480156106e057600080fd5b506106e96116b0565b6040516106f69190614cac565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613e61565b6116b6565b6040516107339190614cac565b60405180910390f35b34801561074857600080fd5b5061075161176e565b005b34801561075f57600080fd5b506107686117f6565b6040516107759190614cac565b60405180910390f35b34801561078a57600080fd5b506107936117fc565b6040516107a0919061479f565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614114565b611826565b005b3480156107de57600080fd5b506107e76118ac565b6040516107f4919061484a565b60405180910390f35b34801561080957600080fd5b5061081261193e565b60405161081f9190614cac565b60405180910390f35b610842600480360381019061083d9190614114565b611943565b005b34801561085057600080fd5b5061086b60048036038101906108669190613fa4565b611c82565b005b34801561087957600080fd5b50610882611e03565b60405161088f919061482f565b60405180910390f35b3480156108a457600080fd5b506108ad611e16565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190614024565b611eaf565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613f21565b612145565b005b34801561090d57600080fd5b506109166121a7565b604051610923919061484a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614114565b612235565b604051610960919061484a565b60405180910390f35b34801561097557600080fd5b5061097e61238e565b60405161098b919061484a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906140cb565b61241c565b005b3480156109c957600080fd5b506109e460048036038101906109df9190613e8e565b6124b2565b6040516109f1919061482f565b60405180910390f35b348015610a0657600080fd5b50610a0f612546565b005b348015610a1d57600080fd5b50610a386004803603810190610a3391906140cb565b6125ee565b005b348015610a4657600080fd5b50610a616004803603810190610a5c9190613e61565b612684565b005b610a7d6004803603810190610a789190614114565b61277c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af25750610af182612b47565b5b9050919050565b601160019054906101000a900460ff1681565b606060008054610b1b90614f7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4790614f7c565b8015610b945780601f10610b6957610100808354040283529160200191610b94565b820191906000526020600020905b815481529060010190602001808311610b7757829003601f168201915b5050505050905090565b6000610ba982612c29565b610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90614aec565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610c3090614f7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c90614f7c565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b505050505081565b6000610cbc826115fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490614bcc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4c612c95565b73ffffffffffffffffffffffffffffffffffffffff161480610d7b5750610d7a81610d75612c95565b6124b2565b5b610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614a0c565b60405180910390fd5b610dc48383612c9d565b505050565b600581565b6000600880549050905090565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990614bec565b60405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ef1612c95565b73ffffffffffffffffffffffffffffffffffffffff16610f0f6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614b2c565b60405180910390fd5b60c8600c541415610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290614b8c565b60405180910390fd5b60c881600c54610fbb9190614db1565b1115610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614c4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390614bec565b60405180910390fd5b612710611077610dce565b106110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614c8c565b60405180910390fd5b612710816110c3610dce565b6110cd9190614db1565b111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590614a6c565b60405180910390fd5b60006001600d5461111f9190614db1565b905060005b828110156111545761114184828461113c9190614db1565b612d56565b808061114c90614fdf565b915050611124565b5081600d60008282546111679190614db1565b9250508190555081600c60008282546111809190614db1565b92505081905550505050565b61119d611197612c95565b82612d74565b6111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390614c0c565b60405180910390fd5b6111e7838383612e52565b505050565b600c5481565b60006111fd836116b6565b821061123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906148ec565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61129f612c95565b73ffffffffffffffffffffffffffffffffffffffff166112bd6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614b2c565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600a81565b61134c612c95565b73ffffffffffffffffffffffffffffffffffffffff1661136a6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614b2c565b60405180910390fd5b600047905060008111611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614b0c565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161142e9061478a565b60006040518083038185875af1925050503d806000811461146b576040519150601f19603f3d011682016040523d82523d6000602084013e611470565b606091505b505090508061147e57600080fd5b5050565b61149d83838360405180602001604052806000815250612145565b505050565b60006114ac610dce565b82106114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e490614c2c565b60405180910390fd5b6008828154811061150157611500615115565b5b90600052602060002001549050919050565b601160029054906101000a900460ff1681565b600581565b611533612c95565b73ffffffffffffffffffffffffffffffffffffffff166115516117fc565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614b2c565b60405180910390fd5b80600e90805190602001906115bd929190613c1f565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516115ed919061484a565b60405180910390a150565b61271081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90614a4c565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614a2c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611776612c95565b73ffffffffffffffffffffffffffffffffffffffff166117946117fc565b73ffffffffffffffffffffffffffffffffffffffff16146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190614b2c565b60405180910390fd5b6117f460006130ae565b565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61182e612c95565b73ffffffffffffffffffffffffffffffffffffffff1661184c6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990614b2c565b60405180910390fd5b80600b8190555050565b6060600180546118bb90614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546118e790614f7c565b80156119345780601f1061190957610100808354040283529160200191611934565b820191906000526020600020905b81548152906001019060200180831161191757829003601f168201915b5050505050905090565b60c881565b601160009054906101000a900460ff16611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061496c565b60405180910390fd5b61271061199d610dce565b106119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490614c8c565b60405180910390fd5b6005811115611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890614a8c565b60405180910390fd5b61271081611a2d610dce565b611a379190614db1565b1115611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614a6c565b60405180910390fd5b600a81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ac59190614db1565b1115611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614bac565b60405180910390fd5b60008111611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906148cc565b60405180910390fd5b3481600b54611b589190614e38565b14611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90614acc565b60405180910390fd5b60005b81811015611c455760006001600d54611bb49190614db1565b90506001600d6000828254611bc99190614db1565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c209190614db1565b92505081905550611c313382612d56565b508080611c3d90614fdf565b915050611b9b565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b53382604051611c77929190614806565b60405180910390a150565b611c8a612c95565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef906149ac565b60405180910390fd5b8060056000611d05612c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611db2612c95565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df7919061482f565b60405180910390a35050565b601160009054906101000a900460ff1681565b611e1e612c95565b73ffffffffffffffffffffffffffffffffffffffff16611e3c6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614b2c565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b611eb7612c95565b73ffffffffffffffffffffffffffffffffffffffff16611ed56117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614b2c565b60405180910390fd5b60005b8282905081101561214057600073ffffffffffffffffffffffffffffffffffffffff16838383818110611f6457611f63615115565b5b9050602002016020810190611f799190613e61565b73ffffffffffffffffffffffffffffffffffffffff161415611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614bec565b60405180910390fd5b600160126000858585818110611fe957611fe8615115565b5b9050602002016020810190611ffe9190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006013600085858581811061206857612067615115565b5b905060200201602081019061207d9190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116120c457600061212c565b601360008484848181106120db576120da615115565b5b90506020020160208101906120f09190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061213890614fdf565b915050611f2e565b505050565b612156612150612c95565b83612d74565b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614c0c565b60405180910390fd5b6121a184848484613174565b50505050565b601080546121b490614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121e090614f7c565b801561222d5780601f106122025761010080835404028352916020019161222d565b820191906000526020600020905b81548152906001019060200180831161221057829003601f168201915b505050505081565b606061224082612c29565b61227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614b6c565b60405180910390fd5b60001515601160029054906101000a900460ff161515141561232d57600f80546122a890614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546122d490614f7c565b80156123215780601f106122f657610100808354040283529160200191612321565b820191906000526020600020905b81548152906001019060200180831161230457829003601f168201915b50505050509050612389565b60006123376131d0565b905060008151116123575760405180602001604052806000815250612385565b8061236184613262565b601060405160200161237593929190614759565b6040516020818303038152906040525b9150505b919050565b600e805461239b90614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546123c790614f7c565b80156124145780601f106123e957610100808354040283529160200191612414565b820191906000526020600020905b8154815290600101906020018083116123f757829003601f168201915b505050505081565b612424612c95565b73ffffffffffffffffffffffffffffffffffffffff166124426117fc565b73ffffffffffffffffffffffffffffffffffffffff1614612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f90614b2c565b60405180910390fd5b80601090805190602001906124ae929190613c1f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61254e612c95565b73ffffffffffffffffffffffffffffffffffffffff1661256c6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614b2c565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6125f6612c95565b73ffffffffffffffffffffffffffffffffffffffff166126146117fc565b73ffffffffffffffffffffffffffffffffffffffff161461266a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266190614b2c565b60405180910390fd5b80600f9080519060200190612680929190613c1f565b5050565b61268c612c95565b73ffffffffffffffffffffffffffffffffffffffff166126aa6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614b2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127679061492c565b60405180910390fd5b612779816130ae565b50565b601160019054906101000a900460ff166127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c29061486c565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e906149cc565b60405180910390fd5b612710612862610dce565b106128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614c8c565b60405180910390fd5b60058111156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd9061488c565b60405180910390fd5b612710816128f2610dce565b6128fc9190614db1565b111561293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490614a6c565b60405180910390fd5b600581601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298a9190614db1565b11156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614c6c565b60405180910390fd5b60008111612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906148ac565b60405180910390fd5b3481600b54612a1d9190614e38565b14612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5490614acc565b60405180910390fd5b60005b81811015612b0a5760006001600d54612a799190614db1565b90506001600d6000828254612a8e9190614db1565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae59190614db1565b92505081905550612af63382612d56565b508080612b0290614fdf565b915050612a60565b507ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a33382604051612b3c929190614806565b60405180910390a150565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c1257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c225750612c21826133c3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d10836115fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612d7082826040518060200160405280600081525061342d565b5050565b6000612d7f82612c29565b612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db5906149ec565b60405180910390fd5b6000612dc9836115fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e3857508373ffffffffffffffffffffffffffffffffffffffff16612e2084610b9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e495750612e4881856124b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e72826115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebf90614b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f9061498c565b60405180910390fd5b612f43838383613488565b612f4e600082612c9d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9e9190614e92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff59190614db1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61317f848484612e52565b61318b8484848461359c565b6131ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c19061490c565b60405180910390fd5b50505050565b6060600e80546131df90614f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461320b90614f7c565b80156132585780601f1061322d57610100808354040283529160200191613258565b820191906000526020600020905b81548152906001019060200180831161323b57829003601f168201915b5050505050905090565b606060008214156132aa576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133be565b600082905060005b600082146132dc5780806132c590614fdf565b915050600a826132d59190614e07565b91506132b2565b60008167ffffffffffffffff8111156132f8576132f7615144565b5b6040519080825280601f01601f19166020018201604052801561332a5781602001600182028036833780820191505090505b5090505b600085146133b7576001826133439190614e92565b9150600a856133529190615028565b603061335e9190614db1565b60f81b81838151811061337457613373615115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133b09190614e07565b945061332e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6134378383613733565b613444600084848461359c565b613483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347a9061490c565b60405180910390fd5b505050565b613493838383613901565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134d6576134d181613906565b613515565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461351457613513838261394f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135585761355381613abc565b613597565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613596576135958282613b8d565b5b5b505050565b60006135bd8473ffffffffffffffffffffffffffffffffffffffff16613c0c565b15613726578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135e6612c95565b8786866040518563ffffffff1660e01b815260040161360894939291906147ba565b602060405180830381600087803b15801561362257600080fd5b505af192505050801561365357506040513d601f19601f82011682018060405250810190613650919061409e565b60015b6136d6573d8060008114613683576040519150601f19603f3d011682016040523d82523d6000602084013e613688565b606091505b506000815114156136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c59061490c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061372b565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379a90614aac565b60405180910390fd5b6137ac81612c29565b156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e39061494c565b60405180910390fd5b6137f860008383613488565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138489190614db1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161395c846116b6565b6139669190614e92565b9050600060076000848152602001908152602001600020549050818114613a4b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ad09190614e92565b9050600060096000848152602001908152602001600020549050600060088381548110613b0057613aff615115565b5b906000526020600020015490508060088381548110613b2257613b21615115565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613b7157613b706150e6565b5b6001900381819060005260206000200160009055905550505050565b6000613b98836116b6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613c2b90614f7c565b90600052602060002090601f016020900481019282613c4d5760008555613c94565b82601f10613c6657805160ff1916838001178555613c94565b82800160010185558215613c94579182015b82811115613c93578251825591602001919060010190613c78565b5b509050613ca19190613ca5565b5090565b5b80821115613cbe576000816000905550600101613ca6565b5090565b6000613cd5613cd084614cec565b614cc7565b905082815260208101848484011115613cf157613cf0615182565b5b613cfc848285614f3a565b509392505050565b6000613d17613d1284614d1d565b614cc7565b905082815260208101848484011115613d3357613d32615182565b5b613d3e848285614f3a565b509392505050565b600081359050613d5581615a0f565b92915050565b60008083601f840112613d7157613d70615178565b5b8235905067ffffffffffffffff811115613d8e57613d8d615173565b5b602083019150836020820283011115613daa57613da961517d565b5b9250929050565b600081359050613dc081615a26565b92915050565b600081359050613dd581615a3d565b92915050565b600081519050613dea81615a3d565b92915050565b600082601f830112613e0557613e04615178565b5b8135613e15848260208601613cc2565b91505092915050565b600082601f830112613e3357613e32615178565b5b8135613e43848260208601613d04565b91505092915050565b600081359050613e5b81615a54565b92915050565b600060208284031215613e7757613e7661518c565b5b6000613e8584828501613d46565b91505092915050565b60008060408385031215613ea557613ea461518c565b5b6000613eb385828601613d46565b9250506020613ec485828601613d46565b9150509250929050565b600080600060608486031215613ee757613ee661518c565b5b6000613ef586828701613d46565b9350506020613f0686828701613d46565b9250506040613f1786828701613e4c565b9150509250925092565b60008060008060808587031215613f3b57613f3a61518c565b5b6000613f4987828801613d46565b9450506020613f5a87828801613d46565b9350506040613f6b87828801613e4c565b925050606085013567ffffffffffffffff811115613f8c57613f8b615187565b5b613f9887828801613df0565b91505092959194509250565b60008060408385031215613fbb57613fba61518c565b5b6000613fc985828601613d46565b9250506020613fda85828601613db1565b9150509250929050565b60008060408385031215613ffb57613ffa61518c565b5b600061400985828601613d46565b925050602061401a85828601613e4c565b9150509250929050565b6000806020838503121561403b5761403a61518c565b5b600083013567ffffffffffffffff81111561405957614058615187565b5b61406585828601613d5b565b92509250509250929050565b6000602082840312156140875761408661518c565b5b600061409584828501613dc6565b91505092915050565b6000602082840312156140b4576140b361518c565b5b60006140c284828501613ddb565b91505092915050565b6000602082840312156140e1576140e061518c565b5b600082013567ffffffffffffffff8111156140ff576140fe615187565b5b61410b84828501613e1e565b91505092915050565b60006020828403121561412a5761412961518c565b5b600061413884828501613e4c565b91505092915050565b61414a81614ec6565b82525050565b61415981614ed8565b82525050565b600061416a82614d63565b6141748185614d79565b9350614184818560208601614f49565b61418d81615191565b840191505092915050565b60006141a382614d6e565b6141ad8185614d95565b93506141bd818560208601614f49565b6141c681615191565b840191505092915050565b60006141dc82614d6e565b6141e68185614da6565b93506141f6818560208601614f49565b80840191505092915050565b6000815461420f81614f7c565b6142198186614da6565b94506001821660008114614234576001811461424557614278565b60ff19831686528186019350614278565b61424e85614d4e565b60005b8381101561427057815481890152600182019150602081019050614251565b838801955050505b50505092915050565b600061428e601783614d95565b9150614299826151a2565b602082019050919050565b60006142b1602f83614d95565b91506142bc826151cb565b604082019050919050565b60006142d4601c83614d95565b91506142df8261521a565b602082019050919050565b60006142f7601a83614d95565b915061430282615243565b602082019050919050565b600061431a602b83614d95565b91506143258261526c565b604082019050919050565b600061433d603283614d95565b9150614348826152bb565b604082019050919050565b6000614360602683614d95565b915061436b8261530a565b604082019050919050565b6000614383601c83614d95565b915061438e82615359565b602082019050919050565b60006143a6601b83614d95565b91506143b182615382565b602082019050919050565b60006143c9602483614d95565b91506143d4826153ab565b604082019050919050565b60006143ec601983614d95565b91506143f7826153fa565b602082019050919050565b600061440f602483614d95565b915061441a82615423565b604082019050919050565b6000614432602c83614d95565b915061443d82615472565b604082019050919050565b6000614455603883614d95565b9150614460826154c1565b604082019050919050565b6000614478602a83614d95565b915061448382615510565b604082019050919050565b600061449b602983614d95565b91506144a68261555f565b604082019050919050565b60006144be601f83614d95565b91506144c9826155ae565b602082019050919050565b60006144e1603183614d95565b91506144ec826155d7565b604082019050919050565b6000614504602083614d95565b915061450f82615626565b602082019050919050565b6000614527601783614d95565b91506145328261564f565b602082019050919050565b600061454a602c83614d95565b915061455582615678565b604082019050919050565b600061456d601383614d95565b9150614578826156c7565b602082019050919050565b6000614590602083614d95565b915061459b826156f0565b602082019050919050565b60006145b3602983614d95565b91506145be82615719565b604082019050919050565b60006145d6602f83614d95565b91506145e182615768565b604082019050919050565b60006145f9602883614d95565b9150614604826157b7565b604082019050919050565b600061461c602883614d95565b915061462782615806565b604082019050919050565b600061463f602183614d95565b915061464a82615855565b604082019050919050565b6000614662600083614d8a565b915061466d826158a4565b600082019050919050565b6000614685601783614d95565b9150614690826158a7565b602082019050919050565b60006146a8603183614d95565b91506146b3826158d0565b604082019050919050565b60006146cb602c83614d95565b91506146d68261591f565b604082019050919050565b60006146ee602883614d95565b91506146f98261596e565b604082019050919050565b6000614711601c83614d95565b915061471c826159bd565b602082019050919050565b6000614734601b83614d95565b915061473f826159e6565b602082019050919050565b61475381614f30565b82525050565b600061476582866141d1565b915061477182856141d1565b915061477d8284614202565b9150819050949350505050565b600061479582614655565b9150819050919050565b60006020820190506147b46000830184614141565b92915050565b60006080820190506147cf6000830187614141565b6147dc6020830186614141565b6147e9604083018561474a565b81810360608301526147fb818461415f565b905095945050505050565b600060408201905061481b6000830185614141565b614828602083018461474a565b9392505050565b60006020820190506148446000830184614150565b92915050565b600060208201905081810360008301526148648184614198565b905092915050565b6000602082019050818103600083015261488581614281565b9050919050565b600060208201905081810360008301526148a5816142a4565b9050919050565b600060208201905081810360008301526148c5816142c7565b9050919050565b600060208201905081810360008301526148e5816142ea565b9050919050565b600060208201905081810360008301526149058161430d565b9050919050565b6000602082019050818103600083015261492581614330565b9050919050565b6000602082019050818103600083015261494581614353565b9050919050565b6000602082019050818103600083015261496581614376565b9050919050565b6000602082019050818103600083015261498581614399565b9050919050565b600060208201905081810360008301526149a5816143bc565b9050919050565b600060208201905081810360008301526149c5816143df565b9050919050565b600060208201905081810360008301526149e581614402565b9050919050565b60006020820190508181036000830152614a0581614425565b9050919050565b60006020820190508181036000830152614a2581614448565b9050919050565b60006020820190508181036000830152614a458161446b565b9050919050565b60006020820190508181036000830152614a658161448e565b9050919050565b60006020820190508181036000830152614a85816144b1565b9050919050565b60006020820190508181036000830152614aa5816144d4565b9050919050565b60006020820190508181036000830152614ac5816144f7565b9050919050565b60006020820190508181036000830152614ae58161451a565b9050919050565b60006020820190508181036000830152614b058161453d565b9050919050565b60006020820190508181036000830152614b2581614560565b9050919050565b60006020820190508181036000830152614b4581614583565b9050919050565b60006020820190508181036000830152614b65816145a6565b9050919050565b60006020820190508181036000830152614b85816145c9565b9050919050565b60006020820190508181036000830152614ba5816145ec565b9050919050565b60006020820190508181036000830152614bc58161460f565b9050919050565b60006020820190508181036000830152614be581614632565b9050919050565b60006020820190508181036000830152614c0581614678565b9050919050565b60006020820190508181036000830152614c258161469b565b9050919050565b60006020820190508181036000830152614c45816146be565b9050919050565b60006020820190508181036000830152614c65816146e1565b9050919050565b60006020820190508181036000830152614c8581614704565b9050919050565b60006020820190508181036000830152614ca581614727565b9050919050565b6000602082019050614cc1600083018461474a565b92915050565b6000614cd1614ce2565b9050614cdd8282614fae565b919050565b6000604051905090565b600067ffffffffffffffff821115614d0757614d06615144565b5b614d1082615191565b9050602081019050919050565b600067ffffffffffffffff821115614d3857614d37615144565b5b614d4182615191565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dbc82614f30565b9150614dc783614f30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dfc57614dfb615059565b5b828201905092915050565b6000614e1282614f30565b9150614e1d83614f30565b925082614e2d57614e2c615088565b5b828204905092915050565b6000614e4382614f30565b9150614e4e83614f30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8757614e86615059565b5b828202905092915050565b6000614e9d82614f30565b9150614ea883614f30565b925082821015614ebb57614eba615059565b5b828203905092915050565b6000614ed182614f10565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f67578082015181840152602081019050614f4c565b83811115614f76576000848401525b50505050565b60006002820490506001821680614f9457607f821691505b60208210811415614fa857614fa76150b7565b5b50919050565b614fb782615191565b810181811067ffffffffffffffff82111715614fd657614fd5615144565b5b80604052505050565b6000614fea82614f30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561501d5761501c615059565b5b600182019050919050565b600061503382614f30565b915061503e83614f30565b92508261504e5761504d615088565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e65206672616e6b00000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6520646164000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c7265616479206861766520636c61696d656420616c6c207265736572766560008201527f64206672616e6b73000000000000000000000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560008201527f64206672616e6b73000000000000000000000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b615a1881614ec6565b8114615a2357600080fd5b50565b615a2f81614ed8565b8114615a3a57600080fd5b50565b615a4681614ee4565b8114615a5157600080fd5b50565b615a5d81614f30565b8114615a6857600080fd5b5056fea2646970667358221220b8a8d161b598e8f46a1f3164e5f54acad8006ea34762dd0bfee1155383eb5b9b64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d52524d537a394c666462326747316175747974344a50327041726a69445a44374573627336576b6334714b732f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636352211e1161015a578063a475b5dd116100c1578063da3ef23f1161007a578063da3ef23f14610994578063e985e9c5146109bd578063ed1fc2a2146109fa578063f2c4ce1e14610a11578063f2fde38b14610a3a578063f759867a14610a6357610288565b8063a475b5dd14610898578063aef6ee1f146108af578063b88d4fde146108d8578063c668286214610901578063c87b56dd1461092c578063d547cfb71461096957610288565b806391b7f5ed1161011357806391b7f5ed146107a957806395d89b41146107d25780639fd2fc7d146107fd578063a0712d6814610828578063a22cb46514610844578063a2e914771461086d57610288565b80636352211e1461069757806368845548146106d457806370a08231146106ff578063715018a61461073c5780638d859f3e146107535780638da5cb5b1461077e57610288565b806323b872dd116101fe57806342842e0e116101b757806342842e0e146105875780634f6ccce7146105b057806351830227146105ed578063549527c31461061857806355f804b3146106435780635b89c6b41461066c57610288565b806323b872dd146104aa57806324510043146104d35780632f745c59146104fe5780632f8145751461053b578063337d2dc6146105525780633ccfd60b1461057d57610288565b8063095ea7b311610250578063095ea7b31461038857806309d42b30146103b157806318160ddd146103dc578063191f65ac146104075780631978f469146104445780631b5757f21461048157610288565b806301ffc9a71461028d57806304549d6f146102ca57806306fdde03146102f5578063081812fc14610320578063081c8c441461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614071565b610a7f565b6040516102c1919061482f565b60405180910390f35b3480156102d657600080fd5b506102df610af9565b6040516102ec919061482f565b60405180910390f35b34801561030157600080fd5b5061030a610b0c565b604051610317919061484a565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190614114565b610b9e565b604051610354919061479f565b60405180910390f35b34801561036957600080fd5b50610372610c23565b60405161037f919061484a565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190613fe4565b610cb1565b005b3480156103bd57600080fd5b506103c6610dc9565b6040516103d39190614cac565b60405180910390f35b3480156103e857600080fd5b506103f1610dce565b6040516103fe9190614cac565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190613e61565b610ddb565b60405161043b919061482f565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613e61565b610e31565b6040516104789190614cac565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613fe4565b610ee9565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613ece565b61118c565b005b3480156104df57600080fd5b506104e86111ec565b6040516104f59190614cac565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613fe4565b6111f2565b6040516105329190614cac565b60405180910390f35b34801561054757600080fd5b50610550611297565b005b34801561055e57600080fd5b5061056761133f565b6040516105749190614cac565b60405180910390f35b610585611344565b005b34801561059357600080fd5b506105ae60048036038101906105a99190613ece565b611482565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190614114565b6114a2565b6040516105e49190614cac565b60405180910390f35b3480156105f957600080fd5b50610602611513565b60405161060f919061482f565b60405180910390f35b34801561062457600080fd5b5061062d611526565b60405161063a9190614cac565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906140cb565b61152b565b005b34801561067857600080fd5b506106816115f8565b60405161068e9190614cac565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614114565b6115fe565b6040516106cb919061479f565b60405180910390f35b3480156106e057600080fd5b506106e96116b0565b6040516106f69190614cac565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613e61565b6116b6565b6040516107339190614cac565b60405180910390f35b34801561074857600080fd5b5061075161176e565b005b34801561075f57600080fd5b506107686117f6565b6040516107759190614cac565b60405180910390f35b34801561078a57600080fd5b506107936117fc565b6040516107a0919061479f565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614114565b611826565b005b3480156107de57600080fd5b506107e76118ac565b6040516107f4919061484a565b60405180910390f35b34801561080957600080fd5b5061081261193e565b60405161081f9190614cac565b60405180910390f35b610842600480360381019061083d9190614114565b611943565b005b34801561085057600080fd5b5061086b60048036038101906108669190613fa4565b611c82565b005b34801561087957600080fd5b50610882611e03565b60405161088f919061482f565b60405180910390f35b3480156108a457600080fd5b506108ad611e16565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190614024565b611eaf565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613f21565b612145565b005b34801561090d57600080fd5b506109166121a7565b604051610923919061484a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614114565b612235565b604051610960919061484a565b60405180910390f35b34801561097557600080fd5b5061097e61238e565b60405161098b919061484a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906140cb565b61241c565b005b3480156109c957600080fd5b506109e460048036038101906109df9190613e8e565b6124b2565b6040516109f1919061482f565b60405180910390f35b348015610a0657600080fd5b50610a0f612546565b005b348015610a1d57600080fd5b50610a386004803603810190610a3391906140cb565b6125ee565b005b348015610a4657600080fd5b50610a616004803603810190610a5c9190613e61565b612684565b005b610a7d6004803603810190610a789190614114565b61277c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af25750610af182612b47565b5b9050919050565b601160019054906101000a900460ff1681565b606060008054610b1b90614f7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4790614f7c565b8015610b945780601f10610b6957610100808354040283529160200191610b94565b820191906000526020600020905b815481529060010190602001808311610b7757829003601f168201915b5050505050905090565b6000610ba982612c29565b610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90614aec565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610c3090614f7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c90614f7c565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b505050505081565b6000610cbc826115fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490614bcc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4c612c95565b73ffffffffffffffffffffffffffffffffffffffff161480610d7b5750610d7a81610d75612c95565b6124b2565b5b610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614a0c565b60405180910390fd5b610dc48383612c9d565b505050565b600581565b6000600880549050905090565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990614bec565b60405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ef1612c95565b73ffffffffffffffffffffffffffffffffffffffff16610f0f6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614b2c565b60405180910390fd5b60c8600c541415610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290614b8c565b60405180910390fd5b60c881600c54610fbb9190614db1565b1115610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390614c4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390614bec565b60405180910390fd5b612710611077610dce565b106110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614c8c565b60405180910390fd5b612710816110c3610dce565b6110cd9190614db1565b111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590614a6c565b60405180910390fd5b60006001600d5461111f9190614db1565b905060005b828110156111545761114184828461113c9190614db1565b612d56565b808061114c90614fdf565b915050611124565b5081600d60008282546111679190614db1565b9250508190555081600c60008282546111809190614db1565b92505081905550505050565b61119d611197612c95565b82612d74565b6111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390614c0c565b60405180910390fd5b6111e7838383612e52565b505050565b600c5481565b60006111fd836116b6565b821061123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906148ec565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61129f612c95565b73ffffffffffffffffffffffffffffffffffffffff166112bd6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614b2c565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600a81565b61134c612c95565b73ffffffffffffffffffffffffffffffffffffffff1661136a6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614b2c565b60405180910390fd5b600047905060008111611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614b0c565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161142e9061478a565b60006040518083038185875af1925050503d806000811461146b576040519150601f19603f3d011682016040523d82523d6000602084013e611470565b606091505b505090508061147e57600080fd5b5050565b61149d83838360405180602001604052806000815250612145565b505050565b60006114ac610dce565b82106114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e490614c2c565b60405180910390fd5b6008828154811061150157611500615115565b5b90600052602060002001549050919050565b601160029054906101000a900460ff1681565b600581565b611533612c95565b73ffffffffffffffffffffffffffffffffffffffff166115516117fc565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614b2c565b60405180910390fd5b80600e90805190602001906115bd929190613c1f565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516115ed919061484a565b60405180910390a150565b61271081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90614a4c565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614a2c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611776612c95565b73ffffffffffffffffffffffffffffffffffffffff166117946117fc565b73ffffffffffffffffffffffffffffffffffffffff16146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190614b2c565b60405180910390fd5b6117f460006130ae565b565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61182e612c95565b73ffffffffffffffffffffffffffffffffffffffff1661184c6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990614b2c565b60405180910390fd5b80600b8190555050565b6060600180546118bb90614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546118e790614f7c565b80156119345780601f1061190957610100808354040283529160200191611934565b820191906000526020600020905b81548152906001019060200180831161191757829003601f168201915b5050505050905090565b60c881565b601160009054906101000a900460ff16611992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119899061496c565b60405180910390fd5b61271061199d610dce565b106119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490614c8c565b60405180910390fd5b6005811115611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890614a8c565b60405180910390fd5b61271081611a2d610dce565b611a379190614db1565b1115611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614a6c565b60405180910390fd5b600a81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ac59190614db1565b1115611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614bac565b60405180910390fd5b60008111611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906148cc565b60405180910390fd5b3481600b54611b589190614e38565b14611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90614acc565b60405180910390fd5b60005b81811015611c455760006001600d54611bb49190614db1565b90506001600d6000828254611bc99190614db1565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c209190614db1565b92505081905550611c313382612d56565b508080611c3d90614fdf565b915050611b9b565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b53382604051611c77929190614806565b60405180910390a150565b611c8a612c95565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef906149ac565b60405180910390fd5b8060056000611d05612c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611db2612c95565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df7919061482f565b60405180910390a35050565b601160009054906101000a900460ff1681565b611e1e612c95565b73ffffffffffffffffffffffffffffffffffffffff16611e3c6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614b2c565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b611eb7612c95565b73ffffffffffffffffffffffffffffffffffffffff16611ed56117fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614b2c565b60405180910390fd5b60005b8282905081101561214057600073ffffffffffffffffffffffffffffffffffffffff16838383818110611f6457611f63615115565b5b9050602002016020810190611f799190613e61565b73ffffffffffffffffffffffffffffffffffffffff161415611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614bec565b60405180910390fd5b600160126000858585818110611fe957611fe8615115565b5b9050602002016020810190611ffe9190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006013600085858581811061206857612067615115565b5b905060200201602081019061207d9190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116120c457600061212c565b601360008484848181106120db576120da615115565b5b90506020020160208101906120f09190613e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061213890614fdf565b915050611f2e565b505050565b612156612150612c95565b83612d74565b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614c0c565b60405180910390fd5b6121a184848484613174565b50505050565b601080546121b490614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121e090614f7c565b801561222d5780601f106122025761010080835404028352916020019161222d565b820191906000526020600020905b81548152906001019060200180831161221057829003601f168201915b505050505081565b606061224082612c29565b61227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614b6c565b60405180910390fd5b60001515601160029054906101000a900460ff161515141561232d57600f80546122a890614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546122d490614f7c565b80156123215780601f106122f657610100808354040283529160200191612321565b820191906000526020600020905b81548152906001019060200180831161230457829003601f168201915b50505050509050612389565b60006123376131d0565b905060008151116123575760405180602001604052806000815250612385565b8061236184613262565b601060405160200161237593929190614759565b6040516020818303038152906040525b9150505b919050565b600e805461239b90614f7c565b80601f01602080910402602001604051908101604052809291908181526020018280546123c790614f7c565b80156124145780601f106123e957610100808354040283529160200191612414565b820191906000526020600020905b8154815290600101906020018083116123f757829003601f168201915b505050505081565b612424612c95565b73ffffffffffffffffffffffffffffffffffffffff166124426117fc565b73ffffffffffffffffffffffffffffffffffffffff1614612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f90614b2c565b60405180910390fd5b80601090805190602001906124ae929190613c1f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61254e612c95565b73ffffffffffffffffffffffffffffffffffffffff1661256c6117fc565b73ffffffffffffffffffffffffffffffffffffffff16146125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614b2c565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6125f6612c95565b73ffffffffffffffffffffffffffffffffffffffff166126146117fc565b73ffffffffffffffffffffffffffffffffffffffff161461266a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266190614b2c565b60405180910390fd5b80600f9080519060200190612680929190613c1f565b5050565b61268c612c95565b73ffffffffffffffffffffffffffffffffffffffff166126aa6117fc565b73ffffffffffffffffffffffffffffffffffffffff1614612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790614b2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127679061492c565b60405180910390fd5b612779816130ae565b50565b601160019054906101000a900460ff166127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c29061486c565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e906149cc565b60405180910390fd5b612710612862610dce565b106128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614c8c565b60405180910390fd5b60058111156128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd9061488c565b60405180910390fd5b612710816128f2610dce565b6128fc9190614db1565b111561293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490614a6c565b60405180910390fd5b600581601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298a9190614db1565b11156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614c6c565b60405180910390fd5b60008111612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906148ac565b60405180910390fd5b3481600b54612a1d9190614e38565b14612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5490614acc565b60405180910390fd5b60005b81811015612b0a5760006001600d54612a799190614db1565b90506001600d6000828254612a8e9190614db1565b925050819055506001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ae59190614db1565b92505081905550612af63382612d56565b508080612b0290614fdf565b915050612a60565b507ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a33382604051612b3c929190614806565b60405180910390a150565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c1257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c225750612c21826133c3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d10836115fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612d7082826040518060200160405280600081525061342d565b5050565b6000612d7f82612c29565b612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db5906149ec565b60405180910390fd5b6000612dc9836115fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e3857508373ffffffffffffffffffffffffffffffffffffffff16612e2084610b9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e495750612e4881856124b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e72826115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebf90614b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f9061498c565b60405180910390fd5b612f43838383613488565b612f4e600082612c9d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9e9190614e92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff59190614db1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61317f848484612e52565b61318b8484848461359c565b6131ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c19061490c565b60405180910390fd5b50505050565b6060600e80546131df90614f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461320b90614f7c565b80156132585780601f1061322d57610100808354040283529160200191613258565b820191906000526020600020905b81548152906001019060200180831161323b57829003601f168201915b5050505050905090565b606060008214156132aa576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133be565b600082905060005b600082146132dc5780806132c590614fdf565b915050600a826132d59190614e07565b91506132b2565b60008167ffffffffffffffff8111156132f8576132f7615144565b5b6040519080825280601f01601f19166020018201604052801561332a5781602001600182028036833780820191505090505b5090505b600085146133b7576001826133439190614e92565b9150600a856133529190615028565b603061335e9190614db1565b60f81b81838151811061337457613373615115565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133b09190614e07565b945061332e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6134378383613733565b613444600084848461359c565b613483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347a9061490c565b60405180910390fd5b505050565b613493838383613901565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134d6576134d181613906565b613515565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461351457613513838261394f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135585761355381613abc565b613597565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613596576135958282613b8d565b5b5b505050565b60006135bd8473ffffffffffffffffffffffffffffffffffffffff16613c0c565b15613726578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135e6612c95565b8786866040518563ffffffff1660e01b815260040161360894939291906147ba565b602060405180830381600087803b15801561362257600080fd5b505af192505050801561365357506040513d601f19601f82011682018060405250810190613650919061409e565b60015b6136d6573d8060008114613683576040519150601f19603f3d011682016040523d82523d6000602084013e613688565b606091505b506000815114156136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c59061490c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061372b565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379a90614aac565b60405180910390fd5b6137ac81612c29565b156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e39061494c565b60405180910390fd5b6137f860008383613488565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138489190614db1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161395c846116b6565b6139669190614e92565b9050600060076000848152602001908152602001600020549050818114613a4b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613ad09190614e92565b9050600060096000848152602001908152602001600020549050600060088381548110613b0057613aff615115565b5b906000526020600020015490508060088381548110613b2257613b21615115565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613b7157613b706150e6565b5b6001900381819060005260206000200160009055905550505050565b6000613b98836116b6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613c2b90614f7c565b90600052602060002090601f016020900481019282613c4d5760008555613c94565b82601f10613c6657805160ff1916838001178555613c94565b82800160010185558215613c94579182015b82811115613c93578251825591602001919060010190613c78565b5b509050613ca19190613ca5565b5090565b5b80821115613cbe576000816000905550600101613ca6565b5090565b6000613cd5613cd084614cec565b614cc7565b905082815260208101848484011115613cf157613cf0615182565b5b613cfc848285614f3a565b509392505050565b6000613d17613d1284614d1d565b614cc7565b905082815260208101848484011115613d3357613d32615182565b5b613d3e848285614f3a565b509392505050565b600081359050613d5581615a0f565b92915050565b60008083601f840112613d7157613d70615178565b5b8235905067ffffffffffffffff811115613d8e57613d8d615173565b5b602083019150836020820283011115613daa57613da961517d565b5b9250929050565b600081359050613dc081615a26565b92915050565b600081359050613dd581615a3d565b92915050565b600081519050613dea81615a3d565b92915050565b600082601f830112613e0557613e04615178565b5b8135613e15848260208601613cc2565b91505092915050565b600082601f830112613e3357613e32615178565b5b8135613e43848260208601613d04565b91505092915050565b600081359050613e5b81615a54565b92915050565b600060208284031215613e7757613e7661518c565b5b6000613e8584828501613d46565b91505092915050565b60008060408385031215613ea557613ea461518c565b5b6000613eb385828601613d46565b9250506020613ec485828601613d46565b9150509250929050565b600080600060608486031215613ee757613ee661518c565b5b6000613ef586828701613d46565b9350506020613f0686828701613d46565b9250506040613f1786828701613e4c565b9150509250925092565b60008060008060808587031215613f3b57613f3a61518c565b5b6000613f4987828801613d46565b9450506020613f5a87828801613d46565b9350506040613f6b87828801613e4c565b925050606085013567ffffffffffffffff811115613f8c57613f8b615187565b5b613f9887828801613df0565b91505092959194509250565b60008060408385031215613fbb57613fba61518c565b5b6000613fc985828601613d46565b9250506020613fda85828601613db1565b9150509250929050565b60008060408385031215613ffb57613ffa61518c565b5b600061400985828601613d46565b925050602061401a85828601613e4c565b9150509250929050565b6000806020838503121561403b5761403a61518c565b5b600083013567ffffffffffffffff81111561405957614058615187565b5b61406585828601613d5b565b92509250509250929050565b6000602082840312156140875761408661518c565b5b600061409584828501613dc6565b91505092915050565b6000602082840312156140b4576140b361518c565b5b60006140c284828501613ddb565b91505092915050565b6000602082840312156140e1576140e061518c565b5b600082013567ffffffffffffffff8111156140ff576140fe615187565b5b61410b84828501613e1e565b91505092915050565b60006020828403121561412a5761412961518c565b5b600061413884828501613e4c565b91505092915050565b61414a81614ec6565b82525050565b61415981614ed8565b82525050565b600061416a82614d63565b6141748185614d79565b9350614184818560208601614f49565b61418d81615191565b840191505092915050565b60006141a382614d6e565b6141ad8185614d95565b93506141bd818560208601614f49565b6141c681615191565b840191505092915050565b60006141dc82614d6e565b6141e68185614da6565b93506141f6818560208601614f49565b80840191505092915050565b6000815461420f81614f7c565b6142198186614da6565b94506001821660008114614234576001811461424557614278565b60ff19831686528186019350614278565b61424e85614d4e565b60005b8381101561427057815481890152600182019150602081019050614251565b838801955050505b50505092915050565b600061428e601783614d95565b9150614299826151a2565b602082019050919050565b60006142b1602f83614d95565b91506142bc826151cb565b604082019050919050565b60006142d4601c83614d95565b91506142df8261521a565b602082019050919050565b60006142f7601a83614d95565b915061430282615243565b602082019050919050565b600061431a602b83614d95565b91506143258261526c565b604082019050919050565b600061433d603283614d95565b9150614348826152bb565b604082019050919050565b6000614360602683614d95565b915061436b8261530a565b604082019050919050565b6000614383601c83614d95565b915061438e82615359565b602082019050919050565b60006143a6601b83614d95565b91506143b182615382565b602082019050919050565b60006143c9602483614d95565b91506143d4826153ab565b604082019050919050565b60006143ec601983614d95565b91506143f7826153fa565b602082019050919050565b600061440f602483614d95565b915061441a82615423565b604082019050919050565b6000614432602c83614d95565b915061443d82615472565b604082019050919050565b6000614455603883614d95565b9150614460826154c1565b604082019050919050565b6000614478602a83614d95565b915061448382615510565b604082019050919050565b600061449b602983614d95565b91506144a68261555f565b604082019050919050565b60006144be601f83614d95565b91506144c9826155ae565b602082019050919050565b60006144e1603183614d95565b91506144ec826155d7565b604082019050919050565b6000614504602083614d95565b915061450f82615626565b602082019050919050565b6000614527601783614d95565b91506145328261564f565b602082019050919050565b600061454a602c83614d95565b915061455582615678565b604082019050919050565b600061456d601383614d95565b9150614578826156c7565b602082019050919050565b6000614590602083614d95565b915061459b826156f0565b602082019050919050565b60006145b3602983614d95565b91506145be82615719565b604082019050919050565b60006145d6602f83614d95565b91506145e182615768565b604082019050919050565b60006145f9602883614d95565b9150614604826157b7565b604082019050919050565b600061461c602883614d95565b915061462782615806565b604082019050919050565b600061463f602183614d95565b915061464a82615855565b604082019050919050565b6000614662600083614d8a565b915061466d826158a4565b600082019050919050565b6000614685601783614d95565b9150614690826158a7565b602082019050919050565b60006146a8603183614d95565b91506146b3826158d0565b604082019050919050565b60006146cb602c83614d95565b91506146d68261591f565b604082019050919050565b60006146ee602883614d95565b91506146f98261596e565b604082019050919050565b6000614711601c83614d95565b915061471c826159bd565b602082019050919050565b6000614734601b83614d95565b915061473f826159e6565b602082019050919050565b61475381614f30565b82525050565b600061476582866141d1565b915061477182856141d1565b915061477d8284614202565b9150819050949350505050565b600061479582614655565b9150819050919050565b60006020820190506147b46000830184614141565b92915050565b60006080820190506147cf6000830187614141565b6147dc6020830186614141565b6147e9604083018561474a565b81810360608301526147fb818461415f565b905095945050505050565b600060408201905061481b6000830185614141565b614828602083018461474a565b9392505050565b60006020820190506148446000830184614150565b92915050565b600060208201905081810360008301526148648184614198565b905092915050565b6000602082019050818103600083015261488581614281565b9050919050565b600060208201905081810360008301526148a5816142a4565b9050919050565b600060208201905081810360008301526148c5816142c7565b9050919050565b600060208201905081810360008301526148e5816142ea565b9050919050565b600060208201905081810360008301526149058161430d565b9050919050565b6000602082019050818103600083015261492581614330565b9050919050565b6000602082019050818103600083015261494581614353565b9050919050565b6000602082019050818103600083015261496581614376565b9050919050565b6000602082019050818103600083015261498581614399565b9050919050565b600060208201905081810360008301526149a5816143bc565b9050919050565b600060208201905081810360008301526149c5816143df565b9050919050565b600060208201905081810360008301526149e581614402565b9050919050565b60006020820190508181036000830152614a0581614425565b9050919050565b60006020820190508181036000830152614a2581614448565b9050919050565b60006020820190508181036000830152614a458161446b565b9050919050565b60006020820190508181036000830152614a658161448e565b9050919050565b60006020820190508181036000830152614a85816144b1565b9050919050565b60006020820190508181036000830152614aa5816144d4565b9050919050565b60006020820190508181036000830152614ac5816144f7565b9050919050565b60006020820190508181036000830152614ae58161451a565b9050919050565b60006020820190508181036000830152614b058161453d565b9050919050565b60006020820190508181036000830152614b2581614560565b9050919050565b60006020820190508181036000830152614b4581614583565b9050919050565b60006020820190508181036000830152614b65816145a6565b9050919050565b60006020820190508181036000830152614b85816145c9565b9050919050565b60006020820190508181036000830152614ba5816145ec565b9050919050565b60006020820190508181036000830152614bc58161460f565b9050919050565b60006020820190508181036000830152614be581614632565b9050919050565b60006020820190508181036000830152614c0581614678565b9050919050565b60006020820190508181036000830152614c258161469b565b9050919050565b60006020820190508181036000830152614c45816146be565b9050919050565b60006020820190508181036000830152614c65816146e1565b9050919050565b60006020820190508181036000830152614c8581614704565b9050919050565b60006020820190508181036000830152614ca581614727565b9050919050565b6000602082019050614cc1600083018461474a565b92915050565b6000614cd1614ce2565b9050614cdd8282614fae565b919050565b6000604051905090565b600067ffffffffffffffff821115614d0757614d06615144565b5b614d1082615191565b9050602081019050919050565b600067ffffffffffffffff821115614d3857614d37615144565b5b614d4182615191565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614dbc82614f30565b9150614dc783614f30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dfc57614dfb615059565b5b828201905092915050565b6000614e1282614f30565b9150614e1d83614f30565b925082614e2d57614e2c615088565b5b828204905092915050565b6000614e4382614f30565b9150614e4e83614f30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8757614e86615059565b5b828202905092915050565b6000614e9d82614f30565b9150614ea883614f30565b925082821015614ebb57614eba615059565b5b828203905092915050565b6000614ed182614f10565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f67578082015181840152602081019050614f4c565b83811115614f76576000848401525b50505050565b60006002820490506001821680614f9457607f821691505b60208210811415614fa857614fa76150b7565b5b50919050565b614fb782615191565b810181811067ffffffffffffffff82111715614fd657614fd5615144565b5b80604052505050565b6000614fea82614f30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561501d5761501c615059565b5b600182019050919050565b600061503382614f30565b915061503e83614f30565b92508261504e5761504d615088565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e65206672616e6b00000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e6520646164000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c7265616479206861766520636c61696d656420616c6c207265736572766560008201527f64206672616e6b73000000000000000000000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560008201527f64206672616e6b73000000000000000000000000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b615a1881614ec6565b8114615a2357600080fd5b50565b615a2f81614ed8565b8114615a3a57600080fd5b50565b615a4681614ee4565b8114615a5157600080fd5b50565b615a5d81614f30565b8114615a6857600080fd5b5056fea2646970667358221220b8a8d161b598e8f46a1f3164e5f54acad8006ea34762dd0bfee1155383eb5b9b64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d52524d537a394c666462326747316175747974344a50327041726a69445a44374573627336576b6334714b732f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):
Arg [1] : _initNotRevealedUri (string): ipfs://QmRRMSz9Lfdb2gG1autyt4JP2pArjiDZD7Esbs6Wkc4qKs/hidden.json

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [4] : 697066733a2f2f516d52524d537a394c666462326747316175747974344a5032
Arg [5] : 7041726a69445a44374573627336576b6334714b732f68696464656e2e6a736f
Arg [6] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45449:6637:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39227:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46115:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27119:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28678:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45998:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28201:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45590:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39867:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48071:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48202:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46925:769;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29568:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45889:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39535:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50498:111;;;;;;;;;;;;;:::i;:::-;;45688:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51827:256;;;:::i;:::-;;29978:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40057:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46148:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45637:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50738:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45541:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26813:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45926:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26543:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6818:94;;;;;;;;;;;;;:::i;:::-;;45849:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6167:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51164:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27288:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45739:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49433:947;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28971:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46079:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51265:66;;;;;;;;;;;;;:::i;:::-;;47702:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30234:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46033:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51342:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45965:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50890:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29337:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50388:102;;;;;;;;;;;;;:::i;:::-;;51029:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7067:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48396:1029;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39227:224;39329:4;39368:35;39353:50;;;:11;:50;;;;:90;;;;39407:36;39431:11;39407:23;:36::i;:::-;39353:90;39346:97;;39227:224;;;:::o;46115:26::-;;;;;;;;;;;;;:::o;27119:100::-;27173:13;27206:5;27199:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27119:100;:::o;28678:221::-;28754:7;28782:16;28790:7;28782;:16::i;:::-;28774:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28867:15;:24;28883:7;28867:24;;;;;;;;;;;;;;;;;;;;;28860:31;;28678:221;;;:::o;45998:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28201:411::-;28282:13;28298:23;28313:7;28298:14;:23::i;:::-;28282:39;;28346:5;28340:11;;:2;:11;;;;28332:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28440:5;28424:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28449:37;28466:5;28473:12;:10;:12::i;:::-;28449:16;:37::i;:::-;28424:62;28402:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28583:21;28592:2;28596:7;28583:8;:21::i;:::-;28271:341;28201:411;;:::o;45590:40::-;45629:1;45590:40;:::o;39867:113::-;39928:7;39955:10;:17;;;;39948:24;;39867:113;:::o;48071:123::-;48140:4;48164:16;:22;48181:4;48164:22;;;;;;;;;;;;;;;;;;;;;;;;;48157:29;;48071:123;;;:::o;48202:186::-;48265:7;48310:1;48293:19;;:5;:19;;;;48285:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48360:13;:20;48374:5;48360:20;;;;;;;;;;;;;;;;48353:27;;48202:186;;;:::o;46925:769::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45781:3:::1;47021:15;;:34;;47013:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45781:3;47137:6;47119:15;;:24;;;;:::i;:::-;:43;;47111:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;47247:1;47226:23;;:9;:23;;;;47218:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5;47296:13;:11;:13::i;:::-;:26;47288:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5;47389:6;47373:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;47365:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47458:20;47499:1;47481:15;;:19;;;;:::i;:::-;47458:42;;47518:9;47513:102;47537:6;47533:1;:10;47513:102;;;47565:38;47575:9;47601:1;47586:12;:16;;;;:::i;:::-;47565:9;:38::i;:::-;47545:3;;;;;:::i;:::-;;;;47513:102;;;;47644:6;47625:15;;:25;;;;;;;:::i;:::-;;;;;;;;47680:6;47661:15;;:25;;;;;;;:::i;:::-;;;;;;;;47002:692;46925:769:::0;;:::o;29568:339::-;29763:41;29782:12;:10;:12::i;:::-;29796:7;29763:18;:41::i;:::-;29755:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29871:28;29881:4;29887:2;29891:7;29871:9;:28::i;:::-;29568:339;;;:::o;45889:30::-;;;;:::o;39535:256::-;39632:7;39668:23;39685:5;39668:16;:23::i;:::-;39660:5;:31;39652:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39757:12;:19;39770:5;39757:19;;;;;;;;;;;;;;;:26;39777:5;39757:26;;;;;;;;;;;;39750:33;;39535:256;;;;:::o;50498:111::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50584:17:::1;;;;;;;;;;;50583:18;50563:17;;:38;;;;;;;;;;;;;;;;;;50498:111::o:0;45688:44::-;45730:2;45688:44;:::o;51827:256::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51883:15:::1;51901:21;51883:39;;51951:1;51941:7;:11;51933:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51988:12;52014:10;52006:24;;52038:7;52006:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51987:63;;;52069:7;52061:16;;;::::0;::::1;;51872:211;;51827:256::o:0;29978:185::-;30116:39;30133:4;30139:2;30143:7;30116:39;;;;;;;;;;;;:16;:39::i;:::-;29978:185;;;:::o;40057:233::-;40132:7;40168:30;:28;:30::i;:::-;40160:5;:38;40152:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40265:10;40276:5;40265:17;;;;;;;;:::i;:::-;;;;;;;;;;40258:24;;40057:233;;;:::o;46148:28::-;;;;;;;;;;;;;:::o;45637:44::-;45680:1;45637:44;:::o;50738:140::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50824:7:::1;50809:12;:22;;;;;;;;;;;;:::i;:::-;;50847:23;50862:7;50847:23;;;;;;:::i;:::-;;;;;;;;50738:140:::0;:::o;45541:42::-;45578:5;45541:42;:::o;26813:239::-;26885:7;26905:13;26921:7;:16;26929:7;26921:16;;;;;;;;;;;;;;;;;;;;;26905:32;;26973:1;26956:19;;:5;:19;;;;26948:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27039:5;27032:12;;;26813:239;;;:::o;45926:30::-;;;;:::o;26543:208::-;26615:7;26660:1;26643:19;;:5;:19;;;;26635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26727:9;:16;26737:5;26727:16;;;;;;;;;;;;;;;;26720:23;;26543:208;;;:::o;6818:94::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6883:21:::1;6901:1;6883:9;:21::i;:::-;6818:94::o:0;45849:33::-;;;;:::o;6167:87::-;6213:7;6240:6;;;;;;;;;;;6233:13;;6167:87;:::o;51164:91::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51239:9:::1;51231:5;:17;;;;51164:91:::0;:::o;27288:104::-;27344:13;27377:7;27370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27288:104;:::o;45739:45::-;45781:3;45739:45;:::o;49433:947::-;46646:17;;;;;;;;;;;46638:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5:::1;49529:13;:11;:13::i;:::-;:26;49521:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45629:1;49606:14;:30;;49598:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5;49725:14;49709:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;49701:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;45730:2;49836:14;49808:13;:25;49822:10;49808:25;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:61;;49800:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;49950:1;49933:14;:18;49925:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50027:9;50009:14;50001:5;;:22;;;;:::i;:::-;:35;49993:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50082:9;50077:236;50101:14;50097:1;:18;50077:236;;;50137:15;50173:1;50155:15;;:19;;;;:::i;:::-;50137:37;;50210:1;50191:15;;:20;;;;;;;:::i;:::-;;;;;;;;50255:1;50226:13;:25;50240:10;50226:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;50271;50281:10;50293:7;50271:9;:30::i;:::-;50122:191;50117:3;;;;;:::i;:::-;;;;50077:236;;;;50330:42;50345:10;50357:14;50330:42;;;;;;;:::i;:::-;;;;;;;;49433:947:::0;:::o;28971:295::-;29086:12;:10;:12::i;:::-;29074:24;;:8;:24;;;;29066:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29186:8;29141:18;:32;29160:12;:10;:12::i;:::-;29141:32;;;;;;;;;;;;;;;:42;29174:8;29141:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29239:8;29210:48;;29225:12;:10;:12::i;:::-;29210:48;;;29249:8;29210:48;;;;;;:::i;:::-;;;;;;;;28971:295;;:::o;46079:29::-;;;;;;;;;;;;;:::o;51265:66::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51320:4:::1;51309:8;;:15;;;;;;;;;;;;;;;;;;51265:66::o:0;47702:361::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47789:9:::1;47784:272;47808:9;;:16;;47804:1;:20;47784:272;;;47878:1;47854:26;;:9;;47864:1;47854:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;47846:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47958:4;47925:16;:30;47942:9;;47952:1;47942:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47925:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;48009:1;47979:13;:27;47993:9;;48003:1;47993:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47979:27;;;;;;;;;;;;;;;;:31;:65;;48043:1;47979:65;;;48013:13;:27;48027:9;;48037:1;48027:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48013:27;;;;;;;;;;;;;;;;47979:65;;47826:3;;;;;:::i;:::-;;;;47784:272;;;;47702:361:::0;;:::o;30234:328::-;30409:41;30428:12;:10;:12::i;:::-;30442:7;30409:18;:41::i;:::-;30401:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30515:39;30529:4;30535:2;30539:7;30548:5;30515:13;:39::i;:::-;30234:328;;;;:::o;46033:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51342:473::-;51415:13;51449:16;51457:7;51449;:16::i;:::-;51441:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51549:5;51537:17;;:8;;;;;;;;;;;:17;;;51534:70;;;51578:14;51571:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51534:70;51615:28;51646:10;:8;:10::i;:::-;51615:41;;51705:1;51680:14;51674:28;:32;:133;;;;;;;;;;;;;;;;;51742:14;51758:18;:7;:16;:18::i;:::-;51778:13;51725:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51674:133;51667:140;;;51342:473;;;;:::o;45965:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50890:127::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50993:17:::1;50977:13;:33;;;;;;;;;;;;:::i;:::-;;50890:127:::0;:::o;29337:164::-;29434:4;29458:18;:25;29477:5;29458:25;;;;;;;;;;;;;;;:35;29484:8;29458:35;;;;;;;;;;;;;;;;;;;;;;;;;29451:42;;29337:164;;;;:::o;50388:102::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50468:14:::1;;;;;;;;;;;50467:15;50450:14;;:32;;;;;;;;;;;;;;;;;;50388:102::o:0;51029:125::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51132:15:::1;51115:14;:32;;;;;;;;;;;;:::i;:::-;;51029:125:::0;:::o;7067:192::-;6398:12;:10;:12::i;:::-;6387:23;;:7;:5;:7::i;:::-;:23;;;6379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7176:1:::1;7156:22;;:8;:22;;;;7148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7232:19;7242:8;7232:9;:19::i;:::-;7067:192:::0;:::o;48396:1029::-;46524:14;;;;;;;;;;;46516:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48496:16:::1;:28;48513:10;48496:28;;;;;;;;;;;;;;;;;;;;;;;;;48488:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5;48584:13;:11;:13::i;:::-;:26;48576:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45680:1;48661:14;:34;;48653:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45578:5;48782:14;48766:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;48758:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;45680:1;48893:14;48865:13;:25;48879:10;48865:25;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:62;;48857:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;48996:1;48979:14;:18;48971:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49075:9;49057:14;49049:5;;:22;;;;:::i;:::-;:35;49041:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49130:9;49125:236;49149:14;49145:1;:18;49125:236;;;49185:15;49221:1;49203:15;;:19;;;;:::i;:::-;49185:37;;49258:1;49239:15;;:20;;;;;;;:::i;:::-;;;;;;;;49303:1;49274:13;:25;49288:10;49274:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;49319;49329:10;49341:7;49319:9;:30::i;:::-;49170:191;49165:3;;;;;:::i;:::-;;;;49125:236;;;;49378:39;49390:10;49402:14;49378:39;;;;;;;:::i;:::-;;;;;;;;48396:1029:::0;:::o;26174:305::-;26276:4;26328:25;26313:40;;;:11;:40;;;;:105;;;;26385:33;26370:48;;;:11;:48;;;;26313:105;:158;;;;26435:36;26459:11;26435:23;:36::i;:::-;26313:158;26293:178;;26174:305;;;:::o;32072:127::-;32137:4;32189:1;32161:30;;:7;:16;32169:7;32161:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32154:37;;32072:127;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;36054:174::-;36156:2;36129:15;:24;36145:7;36129:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36212:7;36208:2;36174:46;;36183:23;36198:7;36183:14;:23::i;:::-;36174:46;;;;;;;;;;;;36054:174;;:::o;33056:110::-;33132:26;33142:2;33146:7;33132:26;;;;;;;;;;;;:9;:26::i;:::-;33056:110;;:::o;32366:348::-;32459:4;32484:16;32492:7;32484;:16::i;:::-;32476:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32560:13;32576:23;32591:7;32576:14;:23::i;:::-;32560:39;;32629:5;32618:16;;:7;:16;;;:51;;;;32662:7;32638:31;;:20;32650:7;32638:11;:20::i;:::-;:31;;;32618:51;:87;;;;32673:32;32690:5;32697:7;32673:16;:32::i;:::-;32618:87;32610:96;;;32366:348;;;;:::o;35358:578::-;35517:4;35490:31;;:23;35505:7;35490:14;:23::i;:::-;:31;;;35482:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35600:1;35586:16;;:2;:16;;;;35578:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35656:39;35677:4;35683:2;35687:7;35656:20;:39::i;:::-;35760:29;35777:1;35781:7;35760:8;:29::i;:::-;35821:1;35802:9;:15;35812:4;35802:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35850:1;35833:9;:13;35843:2;35833:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35881:2;35862:7;:16;35870:7;35862:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35920:7;35916:2;35901:27;;35910:4;35901:27;;;;;;;;;;;;35358:578;;;:::o;7267:173::-;7323:16;7342:6;;;;;;;;;;;7323:25;;7368:8;7359:6;;:17;;;;;;;;;;;;;;;;;;7423:8;7392:40;;7413:8;7392:40;;;;;;;;;;;;7312:128;7267:173;:::o;31444:315::-;31601:28;31611:4;31617:2;31621:7;31601:9;:28::i;:::-;31648:48;31671:4;31677:2;31681:7;31690:5;31648:22;:48::i;:::-;31640:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31444:315;;;;:::o;50617:113::-;50677:13;50710:12;50703:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50617:113;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;18153:157::-;18238:4;18277:25;18262:40;;;:11;:40;;;;18255:47;;18153:157;;;:::o;33393:321::-;33523:18;33529:2;33533:7;33523:5;:18::i;:::-;33574:54;33605:1;33609:2;33613:7;33622:5;33574:22;:54::i;:::-;33552:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33393:321;;;:::o;40903:589::-;41047:45;41074:4;41080:2;41084:7;41047:26;:45::i;:::-;41125:1;41109:18;;:4;:18;;;41105:187;;;41144:40;41176:7;41144:31;:40::i;:::-;41105:187;;;41214:2;41206:10;;:4;:10;;;41202:90;;41233:47;41266:4;41272:7;41233:32;:47::i;:::-;41202:90;41105:187;41320:1;41306:16;;:2;:16;;;41302:183;;;41339:45;41376:7;41339:36;:45::i;:::-;41302:183;;;41412:4;41406:10;;:2;:10;;;41402:83;;41433:40;41461:2;41465:7;41433:27;:40::i;:::-;41402:83;41302:183;40903:589;;;:::o;36793:799::-;36948:4;36969:15;:2;:13;;;:15::i;:::-;36965:620;;;37021:2;37005:36;;;37042:12;:10;:12::i;:::-;37056:4;37062:7;37071:5;37005:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37001:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37264:1;37247:6;:13;:18;37243:272;;;37290:60;;;;;;;;;;:::i;:::-;;;;;;;;37243:272;37465:6;37459:13;37450:6;37446:2;37442:15;37435:38;37001:529;37138:41;;;37128:51;;;:6;:51;;;;37121:58;;;;;36965:620;37569:4;37562:11;;36793:799;;;;;;;:::o;34050:382::-;34144:1;34130:16;;:2;:16;;;;34122:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34203:16;34211:7;34203;:16::i;:::-;34202:17;34194:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34265:45;34294:1;34298:2;34302:7;34265:20;:45::i;:::-;34340:1;34323:9;:13;34333:2;34323:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34371:2;34352:7;:16;34360:7;34352:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34416:7;34412:2;34391:33;;34408:1;34391:33;;;;;;;;;;;;34050:382;;:::o;38164:126::-;;;;:::o;42215:164::-;42319:10;:17;;;;42292:15;:24;42308:7;42292:24;;;;;;;;;;;:44;;;;42347:10;42363:7;42347:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42215:164;:::o;43006:988::-;43272:22;43322:1;43297:22;43314:4;43297:16;:22::i;:::-;:26;;;;:::i;:::-;43272:51;;43334:18;43355:17;:26;43373:7;43355:26;;;;;;;;;;;;43334:47;;43502:14;43488:10;:28;43484:328;;43533:19;43555:12;:18;43568:4;43555:18;;;;;;;;;;;;;;;:34;43574:14;43555:34;;;;;;;;;;;;43533:56;;43639:11;43606:12;:18;43619:4;43606:18;;;;;;;;;;;;;;;:30;43625:10;43606:30;;;;;;;;;;;:44;;;;43756:10;43723:17;:30;43741:11;43723:30;;;;;;;;;;;:43;;;;43518:294;43484:328;43908:17;:26;43926:7;43908:26;;;;;;;;;;;43901:33;;;43952:12;:18;43965:4;43952:18;;;;;;;;;;;;;;;:34;43971:14;43952:34;;;;;;;;;;;43945:41;;;43087:907;;43006:988;;:::o;44289:1079::-;44542:22;44587:1;44567:10;:17;;;;:21;;;;:::i;:::-;44542:46;;44599:18;44620:15;:24;44636:7;44620:24;;;;;;;;;;;;44599:45;;44971:19;44993:10;45004:14;44993:26;;;;;;;;:::i;:::-;;;;;;;;;;44971:48;;45057:11;45032:10;45043;45032:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45168:10;45137:15;:28;45153:11;45137:28;;;;;;;;;;;:41;;;;45309:15;:24;45325:7;45309:24;;;;;;;;;;;45302:31;;;45344:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44360:1008;;;44289:1079;:::o;41793:221::-;41878:14;41895:20;41912:2;41895:16;:20::i;:::-;41878:37;;41953:7;41926:12;:16;41939:2;41926:16;;;;;;;;;;;;;;;:24;41943:6;41926:24;;;;;;;;;;;:34;;;;42000:6;41971:17;:26;41989:7;41971:26;;;;;;;;;;;:35;;;;41867:147;41793:221;;:::o;8213:387::-;8273:4;8481:12;8548:7;8536:20;8528:28;;8591:1;8584:4;:8;8577:15;;;8213:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:::-;12177:3;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12274:93;12363:3;12274:93;:::i;:::-;12392:2;12387:3;12383:12;12376:19;;12035:366;;;:::o;12407:::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:::-;12921:3;12942:67;13006:2;13001:3;12942:67;:::i;:::-;12935:74;;13018:93;13107:3;13018:93;:::i;:::-;13136:2;13131:3;13127:12;13120:19;;12779:366;;;:::o;13151:::-;13293:3;13314:67;13378:2;13373:3;13314:67;:::i;:::-;13307:74;;13390:93;13479:3;13390:93;:::i;:::-;13508:2;13503:3;13499:12;13492:19;;13151:366;;;:::o;13523:::-;13665:3;13686:67;13750:2;13745:3;13686:67;:::i;:::-;13679:74;;13762:93;13851:3;13762:93;:::i;:::-;13880:2;13875:3;13871:12;13864:19;;13523:366;;;:::o;13895:::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:::-;14409:3;14430:67;14494:2;14489:3;14430:67;:::i;:::-;14423:74;;14506:93;14595:3;14506:93;:::i;:::-;14624:2;14619:3;14615:12;14608:19;;14267:366;;;:::o;14639:::-;14781:3;14802:67;14866:2;14861:3;14802:67;:::i;:::-;14795:74;;14878:93;14967:3;14878:93;:::i;:::-;14996:2;14991:3;14987:12;14980:19;;14639:366;;;:::o;15011:::-;15153:3;15174:67;15238:2;15233:3;15174:67;:::i;:::-;15167:74;;15250:93;15339:3;15250:93;:::i;:::-;15368:2;15363:3;15359:12;15352:19;;15011:366;;;:::o;15383:::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:::-;15897:3;15918:67;15982:2;15977:3;15918:67;:::i;:::-;15911:74;;15994:93;16083:3;15994:93;:::i;:::-;16112:2;16107:3;16103:12;16096:19;;15755:366;;;:::o;16127:::-;16269:3;16290:67;16354:2;16349:3;16290:67;:::i;:::-;16283:74;;16366:93;16455:3;16366:93;:::i;:::-;16484:2;16479:3;16475:12;16468:19;;16127:366;;;:::o;16499:::-;16641:3;16662:67;16726:2;16721:3;16662:67;:::i;:::-;16655:74;;16738:93;16827:3;16738:93;:::i;:::-;16856:2;16851:3;16847:12;16840:19;;16499:366;;;:::o;16871:::-;17013:3;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17110:93;17199:3;17110:93;:::i;:::-;17228:2;17223:3;17219:12;17212:19;;16871:366;;;:::o;17243:::-;17385:3;17406:67;17470:2;17465:3;17406:67;:::i;:::-;17399:74;;17482:93;17571:3;17482:93;:::i;:::-;17600:2;17595:3;17591:12;17584:19;;17243:366;;;:::o;17615:::-;17757:3;17778:67;17842:2;17837:3;17778:67;:::i;:::-;17771:74;;17854:93;17943:3;17854:93;:::i;:::-;17972:2;17967:3;17963:12;17956:19;;17615:366;;;:::o;17987:::-;18129:3;18150:67;18214:2;18209:3;18150:67;:::i;:::-;18143:74;;18226:93;18315:3;18226:93;:::i;:::-;18344:2;18339:3;18335:12;18328:19;;17987:366;;;:::o;18359:::-;18501:3;18522:67;18586:2;18581:3;18522:67;:::i;:::-;18515:74;;18598:93;18687:3;18598:93;:::i;:::-;18716:2;18711:3;18707:12;18700:19;;18359:366;;;:::o;18731:::-;18873:3;18894:67;18958:2;18953:3;18894:67;:::i;:::-;18887:74;;18970:93;19059:3;18970:93;:::i;:::-;19088:2;19083:3;19079:12;19072:19;;18731:366;;;:::o;19103:::-;19245:3;19266:67;19330:2;19325:3;19266:67;:::i;:::-;19259:74;;19342:93;19431:3;19342:93;:::i;:::-;19460:2;19455:3;19451:12;19444:19;;19103:366;;;:::o;19475:::-;19617:3;19638:67;19702:2;19697:3;19638:67;:::i;:::-;19631:74;;19714:93;19803:3;19714:93;:::i;:::-;19832:2;19827:3;19823:12;19816:19;;19475:366;;;:::o;19847:::-;19989:3;20010:67;20074:2;20069:3;20010:67;:::i;:::-;20003:74;;20086:93;20175:3;20086:93;:::i;:::-;20204:2;20199:3;20195:12;20188:19;;19847:366;;;:::o;20219:::-;20361:3;20382:67;20446:2;20441:3;20382:67;:::i;:::-;20375:74;;20458:93;20547:3;20458:93;:::i;:::-;20576:2;20571:3;20567:12;20560:19;;20219:366;;;:::o;20591:::-;20733:3;20754:67;20818:2;20813:3;20754:67;:::i;:::-;20747:74;;20830:93;20919:3;20830:93;:::i;:::-;20948:2;20943:3;20939:12;20932:19;;20591:366;;;:::o;20963:398::-;21122:3;21143:83;21224:1;21219:3;21143:83;:::i;:::-;21136:90;;21235:93;21324:3;21235:93;:::i;:::-;21353:1;21348:3;21344:11;21337:18;;20963:398;;;:::o;21367:366::-;21509:3;21530:67;21594:2;21589:3;21530:67;:::i;:::-;21523:74;;21606:93;21695:3;21606:93;:::i;:::-;21724:2;21719:3;21715:12;21708:19;;21367:366;;;:::o;21739:::-;21881:3;21902:67;21966:2;21961:3;21902:67;:::i;:::-;21895:74;;21978:93;22067:3;21978:93;:::i;:::-;22096:2;22091:3;22087:12;22080:19;;21739:366;;;:::o;22111:::-;22253:3;22274:67;22338:2;22333:3;22274:67;:::i;:::-;22267:74;;22350:93;22439:3;22350:93;:::i;:::-;22468:2;22463:3;22459:12;22452:19;;22111:366;;;:::o;22483:::-;22625:3;22646:67;22710:2;22705:3;22646:67;:::i;:::-;22639:74;;22722:93;22811:3;22722:93;:::i;:::-;22840:2;22835:3;22831:12;22824:19;;22483:366;;;:::o;22855:::-;22997:3;23018:67;23082:2;23077:3;23018:67;:::i;:::-;23011:74;;23094:93;23183:3;23094:93;:::i;:::-;23212:2;23207:3;23203:12;23196:19;;22855:366;;;:::o;23227:::-;23369:3;23390:67;23454:2;23449:3;23390:67;:::i;:::-;23383:74;;23466:93;23555:3;23466:93;:::i;:::-;23584:2;23579:3;23575:12;23568:19;;23227:366;;;:::o;23599:118::-;23686:24;23704:5;23686:24;:::i;:::-;23681:3;23674:37;23599:118;;:::o;23723:589::-;23948:3;23970:95;24061:3;24052:6;23970:95;:::i;:::-;23963:102;;24082:95;24173:3;24164:6;24082:95;:::i;:::-;24075:102;;24194:92;24282:3;24273:6;24194:92;:::i;:::-;24187:99;;24303:3;24296:10;;23723:589;;;;;;:::o;24318:379::-;24502:3;24524:147;24667:3;24524:147;:::i;:::-;24517:154;;24688:3;24681:10;;24318:379;;;:::o;24703:222::-;24796:4;24834:2;24823:9;24819:18;24811:26;;24847:71;24915:1;24904:9;24900:17;24891:6;24847:71;:::i;:::-;24703:222;;;;:::o;24931:640::-;25126:4;25164:3;25153:9;25149:19;25141:27;;25178:71;25246:1;25235:9;25231:17;25222:6;25178:71;:::i;:::-;25259:72;25327:2;25316:9;25312:18;25303:6;25259:72;:::i;:::-;25341;25409:2;25398:9;25394:18;25385:6;25341:72;:::i;:::-;25460:9;25454:4;25450:20;25445:2;25434:9;25430:18;25423:48;25488:76;25559:4;25550:6;25488:76;:::i;:::-;25480:84;;24931:640;;;;;;;:::o;25577:332::-;25698:4;25736:2;25725:9;25721:18;25713:26;;25749:71;25817:1;25806:9;25802:17;25793:6;25749:71;:::i;:::-;25830:72;25898:2;25887:9;25883:18;25874:6;25830:72;:::i;:::-;25577:332;;;;;:::o;25915:210::-;26002:4;26040:2;26029:9;26025:18;26017:26;;26053:65;26115:1;26104:9;26100:17;26091:6;26053:65;:::i;:::-;25915:210;;;;:::o;26131:313::-;26244:4;26282:2;26271:9;26267:18;26259:26;;26331:9;26325:4;26321:20;26317:1;26306:9;26302:17;26295:47;26359:78;26432:4;26423:6;26359:78;:::i;:::-;26351:86;;26131:313;;;;:::o;26450:419::-;26616:4;26654:2;26643:9;26639:18;26631:26;;26703:9;26697:4;26693:20;26689:1;26678:9;26674:17;26667:47;26731:131;26857:4;26731:131;:::i;:::-;26723:139;;26450:419;;;:::o;26875:::-;27041:4;27079:2;27068:9;27064:18;27056:26;;27128:9;27122:4;27118:20;27114:1;27103:9;27099:17;27092:47;27156:131;27282:4;27156:131;:::i;:::-;27148:139;;26875:419;;;:::o;27300:::-;27466:4;27504:2;27493:9;27489:18;27481:26;;27553:9;27547:4;27543:20;27539:1;27528:9;27524:17;27517:47;27581:131;27707:4;27581:131;:::i;:::-;27573:139;;27300:419;;;:::o;27725:::-;27891:4;27929:2;27918:9;27914:18;27906:26;;27978:9;27972:4;27968:20;27964:1;27953:9;27949:17;27942:47;28006:131;28132:4;28006:131;:::i;:::-;27998:139;;27725:419;;;:::o;28150:::-;28316:4;28354:2;28343:9;28339:18;28331:26;;28403:9;28397:4;28393:20;28389:1;28378:9;28374:17;28367:47;28431:131;28557:4;28431:131;:::i;:::-;28423:139;;28150:419;;;:::o;28575:::-;28741:4;28779:2;28768:9;28764:18;28756:26;;28828:9;28822:4;28818:20;28814:1;28803:9;28799:17;28792:47;28856:131;28982:4;28856:131;:::i;:::-;28848:139;;28575:419;;;:::o;29000:::-;29166:4;29204:2;29193:9;29189:18;29181:26;;29253:9;29247:4;29243:20;29239:1;29228:9;29224:17;29217:47;29281:131;29407:4;29281:131;:::i;:::-;29273:139;;29000:419;;;:::o;29425:::-;29591:4;29629:2;29618:9;29614:18;29606:26;;29678:9;29672:4;29668:20;29664:1;29653:9;29649:17;29642:47;29706:131;29832:4;29706:131;:::i;:::-;29698:139;;29425:419;;;:::o;29850:::-;30016:4;30054:2;30043:9;30039:18;30031:26;;30103:9;30097:4;30093:20;30089:1;30078:9;30074:17;30067:47;30131:131;30257:4;30131:131;:::i;:::-;30123:139;;29850:419;;;:::o;30275:::-;30441:4;30479:2;30468:9;30464:18;30456:26;;30528:9;30522:4;30518:20;30514:1;30503:9;30499:17;30492:47;30556:131;30682:4;30556:131;:::i;:::-;30548:139;;30275:419;;;:::o;30700:::-;30866:4;30904:2;30893:9;30889:18;30881:26;;30953:9;30947:4;30943:20;30939:1;30928:9;30924:17;30917:47;30981:131;31107:4;30981:131;:::i;:::-;30973:139;;30700:419;;;:::o;31125:::-;31291:4;31329:2;31318:9;31314:18;31306:26;;31378:9;31372:4;31368:20;31364:1;31353:9;31349:17;31342:47;31406:131;31532:4;31406:131;:::i;:::-;31398:139;;31125:419;;;:::o;31550:::-;31716:4;31754:2;31743:9;31739:18;31731:26;;31803:9;31797:4;31793:20;31789:1;31778:9;31774:17;31767:47;31831:131;31957:4;31831:131;:::i;:::-;31823:139;;31550:419;;;:::o;31975:::-;32141:4;32179:2;32168:9;32164:18;32156:26;;32228:9;32222:4;32218:20;32214:1;32203:9;32199:17;32192:47;32256:131;32382:4;32256:131;:::i;:::-;32248:139;;31975:419;;;:::o;32400:::-;32566:4;32604:2;32593:9;32589:18;32581:26;;32653:9;32647:4;32643:20;32639:1;32628:9;32624:17;32617:47;32681:131;32807:4;32681:131;:::i;:::-;32673:139;;32400:419;;;:::o;32825:::-;32991:4;33029:2;33018:9;33014:18;33006:26;;33078:9;33072:4;33068:20;33064:1;33053:9;33049:17;33042:47;33106:131;33232:4;33106:131;:::i;:::-;33098:139;;32825:419;;;:::o;33250:::-;33416:4;33454:2;33443:9;33439:18;33431:26;;33503:9;33497:4;33493:20;33489:1;33478:9;33474:17;33467:47;33531:131;33657:4;33531:131;:::i;:::-;33523:139;;33250:419;;;:::o;33675:::-;33841:4;33879:2;33868:9;33864:18;33856:26;;33928:9;33922:4;33918:20;33914:1;33903:9;33899:17;33892:47;33956:131;34082:4;33956:131;:::i;:::-;33948:139;;33675:419;;;:::o;34100:::-;34266:4;34304:2;34293:9;34289:18;34281:26;;34353:9;34347:4;34343:20;34339:1;34328:9;34324:17;34317:47;34381:131;34507:4;34381:131;:::i;:::-;34373:139;;34100:419;;;:::o;34525:::-;34691:4;34729:2;34718:9;34714:18;34706:26;;34778:9;34772:4;34768:20;34764:1;34753:9;34749:17;34742:47;34806:131;34932:4;34806:131;:::i;:::-;34798:139;;34525:419;;;:::o;34950:::-;35116:4;35154:2;35143:9;35139:18;35131:26;;35203:9;35197:4;35193:20;35189:1;35178:9;35174:17;35167:47;35231:131;35357:4;35231:131;:::i;:::-;35223:139;;34950:419;;;:::o;35375:::-;35541:4;35579:2;35568:9;35564:18;35556:26;;35628:9;35622:4;35618:20;35614:1;35603:9;35599:17;35592:47;35656:131;35782:4;35656:131;:::i;:::-;35648:139;;35375:419;;;:::o;35800:::-;35966:4;36004:2;35993:9;35989:18;35981:26;;36053:9;36047:4;36043:20;36039:1;36028:9;36024:17;36017:47;36081:131;36207:4;36081:131;:::i;:::-;36073:139;;35800:419;;;:::o;36225:::-;36391:4;36429:2;36418:9;36414:18;36406:26;;36478:9;36472:4;36468:20;36464:1;36453:9;36449:17;36442:47;36506:131;36632:4;36506:131;:::i;:::-;36498:139;;36225:419;;;:::o;36650:::-;36816:4;36854:2;36843:9;36839:18;36831:26;;36903:9;36897:4;36893:20;36889:1;36878:9;36874:17;36867:47;36931:131;37057:4;36931:131;:::i;:::-;36923:139;;36650:419;;;:::o;37075:::-;37241:4;37279:2;37268:9;37264:18;37256:26;;37328:9;37322:4;37318:20;37314:1;37303:9;37299:17;37292:47;37356:131;37482:4;37356:131;:::i;:::-;37348:139;;37075:419;;;:::o;37500:::-;37666:4;37704:2;37693:9;37689:18;37681:26;;37753:9;37747:4;37743:20;37739:1;37728:9;37724:17;37717:47;37781:131;37907:4;37781:131;:::i;:::-;37773:139;;37500:419;;;:::o;37925:::-;38091:4;38129:2;38118:9;38114:18;38106:26;;38178:9;38172:4;38168:20;38164:1;38153:9;38149:17;38142:47;38206:131;38332:4;38206:131;:::i;:::-;38198:139;;37925:419;;;:::o;38350:::-;38516:4;38554:2;38543:9;38539:18;38531:26;;38603:9;38597:4;38593:20;38589:1;38578:9;38574:17;38567:47;38631:131;38757:4;38631:131;:::i;:::-;38623:139;;38350:419;;;:::o;38775:::-;38941:4;38979:2;38968:9;38964:18;38956:26;;39028:9;39022:4;39018:20;39014:1;39003:9;38999:17;38992:47;39056:131;39182:4;39056:131;:::i;:::-;39048:139;;38775:419;;;:::o;39200:::-;39366:4;39404:2;39393:9;39389:18;39381:26;;39453:9;39447:4;39443:20;39439:1;39428:9;39424:17;39417:47;39481:131;39607:4;39481:131;:::i;:::-;39473:139;;39200:419;;;:::o;39625:::-;39791:4;39829:2;39818:9;39814:18;39806:26;;39878:9;39872:4;39868:20;39864:1;39853:9;39849:17;39842:47;39906:131;40032:4;39906:131;:::i;:::-;39898:139;;39625:419;;;:::o;40050:::-;40216:4;40254:2;40243:9;40239:18;40231:26;;40303:9;40297:4;40293:20;40289:1;40278:9;40274:17;40267:47;40331:131;40457:4;40331:131;:::i;:::-;40323:139;;40050:419;;;:::o;40475:::-;40641:4;40679:2;40668:9;40664:18;40656:26;;40728:9;40722:4;40718:20;40714:1;40703:9;40699:17;40692:47;40756:131;40882:4;40756:131;:::i;:::-;40748:139;;40475:419;;;:::o;40900:222::-;40993:4;41031:2;41020:9;41016:18;41008:26;;41044:71;41112:1;41101:9;41097:17;41088:6;41044:71;:::i;:::-;40900:222;;;;:::o;41128:129::-;41162:6;41189:20;;:::i;:::-;41179:30;;41218:33;41246:4;41238:6;41218:33;:::i;:::-;41128:129;;;:::o;41263:75::-;41296:6;41329:2;41323:9;41313:19;;41263:75;:::o;41344:307::-;41405:4;41495:18;41487:6;41484:30;41481:56;;;41517:18;;:::i;:::-;41481:56;41555:29;41577:6;41555:29;:::i;:::-;41547:37;;41639:4;41633;41629:15;41621:23;;41344:307;;;:::o;41657:308::-;41719:4;41809:18;41801:6;41798:30;41795:56;;;41831:18;;:::i;:::-;41795:56;41869:29;41891:6;41869:29;:::i;:::-;41861:37;;41953:4;41947;41943:15;41935:23;;41657:308;;;:::o;41971:141::-;42020:4;42043:3;42035:11;;42066:3;42063:1;42056:14;42100:4;42097:1;42087:18;42079:26;;41971:141;;;:::o;42118:98::-;42169:6;42203:5;42197:12;42187:22;;42118:98;;;:::o;42222:99::-;42274:6;42308:5;42302:12;42292:22;;42222:99;;;:::o;42327:168::-;42410:11;42444:6;42439:3;42432:19;42484:4;42479:3;42475:14;42460:29;;42327:168;;;;:::o;42501:147::-;42602:11;42639:3;42624:18;;42501:147;;;;:::o;42654:169::-;42738:11;42772:6;42767:3;42760:19;42812:4;42807:3;42803:14;42788:29;;42654:169;;;;:::o;42829:148::-;42931:11;42968:3;42953:18;;42829:148;;;;:::o;42983:305::-;43023:3;43042:20;43060:1;43042:20;:::i;:::-;43037:25;;43076:20;43094:1;43076:20;:::i;:::-;43071:25;;43230:1;43162:66;43158:74;43155:1;43152:81;43149:107;;;43236:18;;:::i;:::-;43149:107;43280:1;43277;43273:9;43266:16;;42983:305;;;;:::o;43294:185::-;43334:1;43351:20;43369:1;43351:20;:::i;:::-;43346:25;;43385:20;43403:1;43385:20;:::i;:::-;43380:25;;43424:1;43414:35;;43429:18;;:::i;:::-;43414:35;43471:1;43468;43464:9;43459:14;;43294:185;;;;:::o;43485:348::-;43525:7;43548:20;43566:1;43548:20;:::i;:::-;43543:25;;43582:20;43600:1;43582:20;:::i;:::-;43577:25;;43770:1;43702:66;43698:74;43695:1;43692:81;43687:1;43680:9;43673:17;43669:105;43666:131;;;43777:18;;:::i;:::-;43666:131;43825:1;43822;43818:9;43807:20;;43485:348;;;;:::o;43839:191::-;43879:4;43899:20;43917:1;43899:20;:::i;:::-;43894:25;;43933:20;43951:1;43933:20;:::i;:::-;43928:25;;43972:1;43969;43966:8;43963:34;;;43977:18;;:::i;:::-;43963:34;44022:1;44019;44015:9;44007:17;;43839:191;;;;:::o;44036:96::-;44073:7;44102:24;44120:5;44102:24;:::i;:::-;44091:35;;44036:96;;;:::o;44138:90::-;44172:7;44215:5;44208:13;44201:21;44190:32;;44138:90;;;:::o;44234:149::-;44270:7;44310:66;44303:5;44299:78;44288:89;;44234:149;;;:::o;44389:126::-;44426:7;44466:42;44459:5;44455:54;44444:65;;44389:126;;;:::o;44521:77::-;44558:7;44587:5;44576:16;;44521:77;;;:::o;44604:154::-;44688:6;44683:3;44678;44665:30;44750:1;44741:6;44736:3;44732:16;44725:27;44604:154;;;:::o;44764:307::-;44832:1;44842:113;44856:6;44853:1;44850:13;44842:113;;;44941:1;44936:3;44932:11;44926:18;44922:1;44917:3;44913:11;44906:39;44878:2;44875:1;44871:10;44866:15;;44842:113;;;44973:6;44970:1;44967:13;44964:101;;;45053:1;45044:6;45039:3;45035:16;45028:27;44964:101;44813:258;44764:307;;;:::o;45077:320::-;45121:6;45158:1;45152:4;45148:12;45138:22;;45205:1;45199:4;45195:12;45226:18;45216:81;;45282:4;45274:6;45270:17;45260:27;;45216:81;45344:2;45336:6;45333:14;45313:18;45310:38;45307:84;;;45363:18;;:::i;:::-;45307:84;45128:269;45077:320;;;:::o;45403:281::-;45486:27;45508:4;45486:27;:::i;:::-;45478:6;45474:40;45616:6;45604:10;45601:22;45580:18;45568:10;45565:34;45562:62;45559:88;;;45627:18;;:::i;:::-;45559:88;45667:10;45663:2;45656:22;45446:238;45403:281;;:::o;45690:233::-;45729:3;45752:24;45770:5;45752:24;:::i;:::-;45743:33;;45798:66;45791:5;45788:77;45785:103;;;45868:18;;:::i;:::-;45785:103;45915:1;45908:5;45904:13;45897:20;;45690:233;;;:::o;45929:176::-;45961:1;45978:20;45996:1;45978:20;:::i;:::-;45973:25;;46012:20;46030:1;46012:20;:::i;:::-;46007:25;;46051:1;46041:35;;46056:18;;:::i;:::-;46041:35;46097:1;46094;46090:9;46085:14;;45929:176;;;;:::o;46111:180::-;46159:77;46156:1;46149:88;46256:4;46253:1;46246:15;46280:4;46277:1;46270:15;46297:180;46345:77;46342:1;46335:88;46442:4;46439:1;46432:15;46466:4;46463:1;46456:15;46483:180;46531:77;46528:1;46521:88;46628:4;46625:1;46618:15;46652:4;46649:1;46642:15;46669:180;46717:77;46714:1;46707:88;46814:4;46811:1;46804:15;46838:4;46835:1;46828:15;46855:180;46903:77;46900:1;46893:88;47000:4;46997:1;46990:15;47024:4;47021:1;47014:15;47041:180;47089:77;47086:1;47079:88;47186:4;47183:1;47176:15;47210:4;47207:1;47200:15;47227:117;47336:1;47333;47326:12;47350:117;47459:1;47456;47449:12;47473:117;47582:1;47579;47572:12;47596:117;47705:1;47702;47695:12;47719:117;47828:1;47825;47818:12;47842:117;47951:1;47948;47941:12;47965:102;48006:6;48057:2;48053:7;48048:2;48041:5;48037:14;48033:28;48023:38;;47965:102;;;:::o;48073:173::-;48213:25;48209:1;48201:6;48197:14;48190:49;48073:173;:::o;48252:234::-;48392:34;48388:1;48380:6;48376:14;48369:58;48461:17;48456:2;48448:6;48444:15;48437:42;48252:234;:::o;48492:178::-;48632:30;48628:1;48620:6;48616:14;48609:54;48492:178;:::o;48676:176::-;48816:28;48812:1;48804:6;48800:14;48793:52;48676:176;:::o;48858:230::-;48998:34;48994:1;48986:6;48982:14;48975:58;49067:13;49062:2;49054:6;49050:15;49043:38;48858:230;:::o;49094:237::-;49234:34;49230:1;49222:6;49218:14;49211:58;49303:20;49298:2;49290:6;49286:15;49279:45;49094:237;:::o;49337:225::-;49477:34;49473:1;49465:6;49461:14;49454:58;49546:8;49541:2;49533:6;49529:15;49522:33;49337:225;:::o;49568:178::-;49708:30;49704:1;49696:6;49692:14;49685:54;49568:178;:::o;49752:177::-;49892:29;49888:1;49880:6;49876:14;49869:53;49752:177;:::o;49935:223::-;50075:34;50071:1;50063:6;50059:14;50052:58;50144:6;50139:2;50131:6;50127:15;50120:31;49935:223;:::o;50164:175::-;50304:27;50300:1;50292:6;50288:14;50281:51;50164:175;:::o;50345:223::-;50485:34;50481:1;50473:6;50469:14;50462:58;50554:6;50549:2;50541:6;50537:15;50530:31;50345:223;:::o;50574:231::-;50714:34;50710:1;50702:6;50698:14;50691:58;50783:14;50778:2;50770:6;50766:15;50759:39;50574:231;:::o;50811:243::-;50951:34;50947:1;50939:6;50935:14;50928:58;51020:26;51015:2;51007:6;51003:15;50996:51;50811:243;:::o;51060:229::-;51200:34;51196:1;51188:6;51184:14;51177:58;51269:12;51264:2;51256:6;51252:15;51245:37;51060:229;:::o;51295:228::-;51435:34;51431:1;51423:6;51419:14;51412:58;51504:11;51499:2;51491:6;51487:15;51480:36;51295:228;:::o;51529:181::-;51669:33;51665:1;51657:6;51653:14;51646:57;51529:181;:::o;51716:236::-;51856:34;51852:1;51844:6;51840:14;51833:58;51925:19;51920:2;51912:6;51908:15;51901:44;51716:236;:::o;51958:182::-;52098:34;52094:1;52086:6;52082:14;52075:58;51958:182;:::o;52146:173::-;52286:25;52282:1;52274:6;52270:14;52263:49;52146:173;:::o;52325:231::-;52465:34;52461:1;52453:6;52449:14;52442:58;52534:14;52529:2;52521:6;52517:15;52510:39;52325:231;:::o;52562:169::-;52702:21;52698:1;52690:6;52686:14;52679:45;52562:169;:::o;52737:182::-;52877:34;52873:1;52865:6;52861:14;52854:58;52737:182;:::o;52925:228::-;53065:34;53061:1;53053:6;53049:14;53042:58;53134:11;53129:2;53121:6;53117:15;53110:36;52925:228;:::o;53159:234::-;53299:34;53295:1;53287:6;53283:14;53276:58;53368:17;53363:2;53355:6;53351:15;53344:42;53159:234;:::o;53399:227::-;53539:34;53535:1;53527:6;53523:14;53516:58;53608:10;53603:2;53595:6;53591:15;53584:35;53399:227;:::o;53632:::-;53772:34;53768:1;53760:6;53756:14;53749:58;53841:10;53836:2;53828:6;53824:15;53817:35;53632:227;:::o;53865:220::-;54005:34;54001:1;53993:6;53989:14;53982:58;54074:3;54069:2;54061:6;54057:15;54050:28;53865:220;:::o;54091:114::-;;:::o;54211:173::-;54351:25;54347:1;54339:6;54335:14;54328:49;54211:173;:::o;54390:236::-;54530:34;54526:1;54518:6;54514:14;54507:58;54599:19;54594:2;54586:6;54582:15;54575:44;54390:236;:::o;54632:231::-;54772:34;54768:1;54760:6;54756:14;54749:58;54841:14;54836:2;54828:6;54824:15;54817:39;54632:231;:::o;54869:227::-;55009:34;55005:1;54997:6;54993:14;54986:58;55078:10;55073:2;55065:6;55061:15;55054:35;54869:227;:::o;55102:178::-;55242:30;55238:1;55230:6;55226:14;55219:54;55102:178;:::o;55286:177::-;55426:29;55422:1;55414:6;55410:14;55403:53;55286:177;:::o;55469:122::-;55542:24;55560:5;55542:24;:::i;:::-;55535:5;55532:35;55522:63;;55581:1;55578;55571:12;55522:63;55469:122;:::o;55597:116::-;55667:21;55682:5;55667:21;:::i;:::-;55660:5;55657:32;55647:60;;55703:1;55700;55693:12;55647:60;55597:116;:::o;55719:120::-;55791:23;55808:5;55791:23;:::i;:::-;55784:5;55781:34;55771:62;;55829:1;55826;55819:12;55771:62;55719:120;:::o;55845:122::-;55918:24;55936:5;55918:24;:::i;:::-;55911:5;55908:35;55898:63;;55957:1;55954;55947:12;55898:63;55845:122;:::o

Swarm Source

ipfs://b8a8d161b598e8f46a1f3164e5f54acad8006ea34762dd0bfee1155383eb5b9b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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