ETH Price: $3,478.16 (+5.07%)

Token

Nekobox uwus (NEKOUWU)
 

Overview

Max Total Supply

0 NEKOUWU

Holders

53

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
vaultofomar.eth
Balance
1 NEKOUWU
0x2d88b2a18305942337ea0b3fd7e98d638236fc10
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:
uwuClaim

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-09-25
*/

// Sources flattened with hardhat v2.7.0 https://hardhat.org

// File contracts/utils/Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}



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

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

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

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

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

}

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


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

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata {
    /**
     * @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);
}

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

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

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

/**
 * @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, ERC721Holder {
    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 {}
}

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


// File contracts/utils/MerkleProof.sol

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}


// File contracts/uwuClaim.sol

pragma solidity ^0.8.0;

/*
                  &(,    @%(,.                   @%(,.    &(*                   
     (%/,        @%(/,   @((*,       @#(*.       @%((,,  @%(/*        &#*,      
     @#(*.       @%(/*   @%((..     @&(((,.     @&((/*   @%(*.       @&(/,      
      @#(/.,, *&&#(//     @&(((///((((((((((//(((((((     @%(/.,, .&&#((//      
       @@%(((((((#%%         @@&%#%%&&   @@&%#%%&&&        @@&((((((((#%        
            %@(                                                 ,@@             
                     (/          ,       #(.     ,     .    ,                   
                 /&(%@@@%/   @((&@&   @##  @/,  &&,. @&*.  @(/                  
                 @%.         @**      @//%&&#    /&,/(#%&,#(/                   
                  @&(/(##(   @/*       @#*(##(    .@#/  @@((                    
*/




contract uwuClaim is Ownable, ERC721 {
  address public immutable sourceNFT;
  bytes32 public claimRoot;

  string public baseURI;

  constructor(string memory _name, string memory _symbol, address _sourceNFT, bytes32 _claimRoot) Ownable() ERC721(_name, _symbol) {
    sourceNFT = _sourceNFT;
    claimRoot = _claimRoot;
  }

  function claim(uint256 tokenId, bytes32[] calldata merkleProof) external payable {
    require(msg.sender == ERC721(sourceNFT).ownerOf(tokenId), "Cannot claim if not owner");
    require(!_exists(tokenId), 'MerkleDistributor: Drop already claimed.');

    // Verify the merkle proof.
    bytes32 node = keccak256(abi.encodePacked(tokenId));
    require(MerkleProof.verify(merkleProof, claimRoot, node), 'MerkleDistributor: Invalid proof.');
    
    _mint(msg.sender, tokenId);
  }

  function withdrawTips() external onlyOwner {
    sendValue(payable(0x354A70969F0b4a4C994403051A81C2ca45db3615), address(this).balance);
  }

  function allTokenIdsHeldBy(address who) external view returns (uint256[] memory) {
    IERC721Enumerable _nft = IERC721Enumerable(sourceNFT);
    uint256 balance = _nft.balanceOf(who);
    uint256[] memory tokensHeld = new uint256[](balance);
    for (uint256 i = 0; i < balance; i++) {
      tokensHeld[i] = _nft.tokenOfOwnerByIndex(who, i);
    }
    return tokensHeld;
  }

  function claimed(uint256[] memory indexes) external view returns (bool[] memory) {
    bool[] memory _claimed = new bool[](indexes.length);
    for (uint256 i; i < indexes.length; ++i) {
      _claimed[i] = _exists(indexes[i]);
    }
    return _claimed;
  }

  function isClaimed(uint256 index) external view returns (bool) {
    return _exists(index);
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
    (bool success, ) = recipient.call{ value: amount }("");
    require(success, "Address: unable to send value, recipient may have reverted");
  }

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

  function setClaimRoot(bytes32 _claimRoot) public onlyOwner {
    claimRoot = _claimRoot;
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_sourceNFT","type":"address"},{"internalType":"bytes32","name":"_claimRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"allTokenIdsHeldBy","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"name":"claimed","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_claimRoot","type":"bytes32"}],"name":"setClaimRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sourceNFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTips","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200478b3803806200478b8339818101604052810190620000379190620002bd565b838360006200004b6200016560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508160019080519060200190620001019291906200016d565b5080600290805190602001906200011a9291906200016d565b5050508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600781905550505050506200053d565b600033905090565b8280546200017b906200042e565b90600052602060002090601f0160209004810192826200019f5760008555620001eb565b82601f10620001ba57805160ff1916838001178555620001eb565b82800160010185558215620001eb579182015b82811115620001ea578251825591602001919060010190620001cd565b5b509050620001fa9190620001fe565b5090565b5b8082111562000219576000816000905550600101620001ff565b5090565b6000620002346200022e8462000384565b6200035b565b9050828152602081018484840111156200024d57600080fd5b6200025a848285620003f8565b509392505050565b600081519050620002738162000509565b92915050565b6000815190506200028a8162000523565b92915050565b600082601f830112620002a257600080fd5b8151620002b48482602086016200021d565b91505092915050565b60008060008060808587031215620002d457600080fd5b600085015167ffffffffffffffff811115620002ef57600080fd5b620002fd8782880162000290565b945050602085015167ffffffffffffffff8111156200031b57600080fd5b620003298782880162000290565b93505060406200033c8782880162000262565b92505060606200034f8782880162000279565b91505092959194509250565b6000620003676200037a565b905062000375828262000464565b919050565b6000604051905090565b600067ffffffffffffffff821115620003a257620003a1620004c9565b5b620003ad82620004f8565b9050602081019050919050565b6000620003c782620003d8565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000418578082015181840152602081019050620003fb565b8381111562000428576000848401525b50505050565b600060028204905060018216806200044757607f821691505b602082108114156200045e576200045d6200049a565b5b50919050565b6200046f82620004f8565b810181811067ffffffffffffffff82111715620004915762000490620004c9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200051481620003ba565b81146200052057600080fd5b50565b6200052e81620003ce565b81146200053a57600080fd5b50565b60805160601c6142216200056a600039600081816109aa01528181610ace015261155e01526142216000f3fe60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063c66c93fe11610064578063c66c93fe146105b7578063c87b56dd146105f4578063e985e9c514610631578063f2fde38b1461066e5761019c565b8063a22cb46514610528578063b4c592e414610551578063b88d4fde1461058e5761019c565b8063715018a6116100c6578063715018a61461047e5780638da5cb5b1461049557806395d89b41146104c05780639e34070f146104eb5761019c565b80636352211e146103d95780636c0360eb1461041657806370a08231146104415761019c565b8063150b7a02116101595780632f52ebb7116101335780632f52ebb7146103545780633aaa74b21461037057806342842e0e1461038757806355f804b3146103b05761019c565b8063150b7a02146102c557806321b97f201461030257806323b872dd1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780630e207e0f1461026f57806314ea35e71461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c4b565b610697565b6040516101d59190613404565b60405180910390f35b3480156101ea57600080fd5b506101f3610779565b6040516102009190613455565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cde565b61080b565b60405161023d9190613330565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ba5565b610890565b005b34801561027b57600080fd5b506102846109a8565b6040516102919190613330565b60405180910390f35b3480156102a657600080fd5b506102af6109cc565b6040516102bc919061341f565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612aee565b6109d2565b6040516102f9919061343a565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612c22565b6109e6565b005b34801561033757600080fd5b50610352600480360381019061034d9190612a9f565b610a6c565b005b61036e60048036038101906103699190612d30565b610acc565b005b34801561037c57600080fd5b50610385610cf3565b005b34801561039357600080fd5b506103ae60048036038101906103a99190612a9f565b610d8f565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612c9d565b610daf565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190612cde565b610e45565b60405161040d9190613330565b60405180910390f35b34801561042257600080fd5b5061042b610ef7565b6040516104389190613455565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612a11565b610f85565b6040516104759190613717565b60405180910390f35b34801561048a57600080fd5b5061049361103d565b005b3480156104a157600080fd5b506104aa611177565b6040516104b79190613330565b60405180910390f35b3480156104cc57600080fd5b506104d56111a0565b6040516104e29190613455565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612cde565b611232565b60405161051f9190613404565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612b69565b611244565b005b34801561055d57600080fd5b5061057860048036038101906105739190612be1565b6113c5565b60405161058591906133c0565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190612aee565b6114f6565b005b3480156105c357600080fd5b506105de60048036038101906105d99190612a11565b611558565b6040516105eb91906133e2565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190612cde565b611779565b6040516106289190613455565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190612a63565b611820565b6040516106659190613404565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612a11565b6118b4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610772575061077182611a5d565b5b9050919050565b60606001805461078890613a20565b80601f01602080910402602001604051908101604052809291908181526020018280546107b490613a20565b80156108015780601f106107d657610100808354040283529160200191610801565b820191906000526020600020905b8154815290600101906020018083116107e457829003601f168201915b5050505050905090565b600061081682611ac7565b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90613657565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089b82610e45565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610903906136d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092b611b33565b73ffffffffffffffffffffffffffffffffffffffff16148061095a575061095981610954611b33565b611820565b5b610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906135b7565b60405180910390fd5b6109a38383611b3b565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60075481565b600063150b7a0260e01b9050949350505050565b6109ee611b33565b73ffffffffffffffffffffffffffffffffffffffff16610a0c611177565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613677565b60405180910390fd5b8060078190555050565b610a7d610a77611b33565b82611bf4565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab3906136f7565b60405180910390fd5b610ac7838383611cd2565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610b259190613717565b60206040518083038186803b158015610b3d57600080fd5b505afa158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190612a3a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613617565b60405180910390fd5b610beb83611ac7565b15610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c22906134d7565b60405180910390fd5b600083604051602001610c3e9190613315565b604051602081830303815290604052805190602001209050610ca4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060075483611f2e565b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613597565b60405180910390fd5b610ced338561200a565b50505050565b610cfb611b33565b73ffffffffffffffffffffffffffffffffffffffff16610d19611177565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690613677565b60405180910390fd5b610d8d73354a70969f0b4a4c994403051a81c2ca45db3615476121d8565b565b610daa838383604051806020016040528060008152506114f6565b505050565b610db7611b33565b73ffffffffffffffffffffffffffffffffffffffff16610dd5611177565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613677565b60405180910390fd5b8060089080519060200190610e41929190612716565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee5906135f7565b60405180910390fd5b80915050919050565b60088054610f0490613a20565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613a20565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906135d7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611045611b33565b73ffffffffffffffffffffffffffffffffffffffff16611063611177565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090613677565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111af90613a20565b80601f01602080910402602001604051908101604052809291908181526020018280546111db90613a20565b80156112285780601f106111fd57610100808354040283529160200191611228565b820191906000526020600020905b81548152906001019060200180831161120b57829003601f168201915b5050505050905090565b600061123d82611ac7565b9050919050565b61124c611b33565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613517565b60405180910390fd5b80600660006112c7611b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611374611b33565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113b99190613404565b60405180910390a35050565b60606000825167ffffffffffffffff81111561140a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114385781602001602082028036833780820191505090505b50905060005b83518110156114ec57611490848281518110611483577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611ac7565b8282815181106114c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050806114e590613a83565b905061143e565b5080915050919050565b611507611501611b33565b83611bf4565b611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d906136f7565b60405180910390fd5b611552848484846122cc565b50505050565b606060007f0000000000000000000000000000000000000000000000000000000000000000905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016115ba9190613330565b60206040518083038186803b1580156115d257600080fd5b505afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a9190612d07565b905060008167ffffffffffffffff81111561164e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561167c5781602001602082028036833780820191505090505b50905060005b8281101561176d578373ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b81526004016116c5929190613397565b60206040518083038186803b1580156116dd57600080fd5b505afa1580156116f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117159190612d07565b82828151811061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061176590613a83565b915050611682565b50809350505050919050565b606061178482611ac7565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906136b7565b60405180910390fd5b60006117cd612328565b905060008151116117ed5760405180602001604052806000815250611818565b806117f7846123ba565b6040516020016118089291906132dc565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118bc611b33565b73ffffffffffffffffffffffffffffffffffffffff166118da611177565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613677565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613497565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bae83610e45565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bff82611ac7565b611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613577565b60405180910390fd5b6000611c4983610e45565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cb857508373ffffffffffffffffffffffffffffffffffffffff16611ca08461080b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc95750611cc88185611820565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cf282610e45565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613697565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf906134f7565b60405180910390fd5b611dc3838383612567565b611dce600082611b3b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e1e919061392c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7591906138a5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008082905060005b8551811015611ffc576000868281518110611f7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311611fbc578281604051602001611f9f9291906132b0565b604051602081830303815290604052805190602001209250611fe8565b8083604051602001611fcf9291906132b0565b6040516020818303038152906040528051906020012092505b508080611ff490613a83565b915050611f37565b508381149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207190613637565b60405180910390fd5b61208381611ac7565b156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906134b7565b60405180910390fd5b6120cf60008383612567565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211f91906138a5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8047101561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613557565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161224190613300565b60006040518083038185875af1925050503d806000811461227e576040519150601f19603f3d011682016040523d82523d6000602084013e612283565b606091505b50509050806122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90613537565b60405180910390fd5b505050565b6122d7848484611cd2565b6122e38484848461256c565b612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990613477565b60405180910390fd5b50505050565b60606008805461233790613a20565b80601f016020809104026020016040519081016040528092919081815260200182805461236390613a20565b80156123b05780601f10612385576101008083540402835291602001916123b0565b820191906000526020600020905b81548152906001019060200180831161239357829003601f168201915b5050505050905090565b60606000821415612402576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612562565b600082905060005b6000821461243457808061241d90613a83565b915050600a8261242d91906138fb565b915061240a565b60008167ffffffffffffffff811115612476577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124a85781602001600182028036833780820191505090505b5090505b6000851461255b576001826124c1919061392c565b9150600a856124d09190613ae0565b60306124dc91906138a5565b60f81b818381518110612518577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561255491906138fb565b94506124ac565b8093505050505b919050565b505050565b600061258d8473ffffffffffffffffffffffffffffffffffffffff16612703565b156126f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125b6611b33565b8786866040518563ffffffff1660e01b81526004016125d8949392919061334b565b602060405180830381600087803b1580156125f257600080fd5b505af192505050801561262357506040513d601f19601f820116820180604052508101906126209190612c74565b60015b6126a6573d8060008114612653576040519150601f19603f3d011682016040523d82523d6000602084013e612658565b606091505b5060008151141561269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590613477565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126fb565b600190505b949350505050565b600080823b905060008111915050919050565b82805461272290613a20565b90600052602060002090601f016020900481019282612744576000855561278b565b82601f1061275d57805160ff191683800117855561278b565b8280016001018555821561278b579182015b8281111561278a57825182559160200191906001019061276f565b5b509050612798919061279c565b5090565b5b808211156127b557600081600090555060010161279d565b5090565b60006127cc6127c784613757565b613732565b905080838252602082019050828560208602820111156127eb57600080fd5b60005b8581101561281b578161280188826129e7565b8452602084019350602083019250506001810190506127ee565b5050509392505050565b600061283861283384613783565b613732565b90508281526020810184848401111561285057600080fd5b61285b8482856139de565b509392505050565b6000612876612871846137b4565b613732565b90508281526020810184848401111561288e57600080fd5b6128998482856139de565b509392505050565b6000813590506128b081614178565b92915050565b6000815190506128c581614178565b92915050565b60008083601f8401126128dd57600080fd5b8235905067ffffffffffffffff8111156128f657600080fd5b60208301915083602082028301111561290e57600080fd5b9250929050565b600082601f83011261292657600080fd5b81356129368482602086016127b9565b91505092915050565b60008135905061294e8161418f565b92915050565b600081359050612963816141a6565b92915050565b600081359050612978816141bd565b92915050565b60008151905061298d816141bd565b92915050565b600082601f8301126129a457600080fd5b81356129b4848260208601612825565b91505092915050565b600082601f8301126129ce57600080fd5b81356129de848260208601612863565b91505092915050565b6000813590506129f6816141d4565b92915050565b600081519050612a0b816141d4565b92915050565b600060208284031215612a2357600080fd5b6000612a31848285016128a1565b91505092915050565b600060208284031215612a4c57600080fd5b6000612a5a848285016128b6565b91505092915050565b60008060408385031215612a7657600080fd5b6000612a84858286016128a1565b9250506020612a95858286016128a1565b9150509250929050565b600080600060608486031215612ab457600080fd5b6000612ac2868287016128a1565b9350506020612ad3868287016128a1565b9250506040612ae4868287016129e7565b9150509250925092565b60008060008060808587031215612b0457600080fd5b6000612b12878288016128a1565b9450506020612b23878288016128a1565b9350506040612b34878288016129e7565b925050606085013567ffffffffffffffff811115612b5157600080fd5b612b5d87828801612993565b91505092959194509250565b60008060408385031215612b7c57600080fd5b6000612b8a858286016128a1565b9250506020612b9b8582860161293f565b9150509250929050565b60008060408385031215612bb857600080fd5b6000612bc6858286016128a1565b9250506020612bd7858286016129e7565b9150509250929050565b600060208284031215612bf357600080fd5b600082013567ffffffffffffffff811115612c0d57600080fd5b612c1984828501612915565b91505092915050565b600060208284031215612c3457600080fd5b6000612c4284828501612954565b91505092915050565b600060208284031215612c5d57600080fd5b6000612c6b84828501612969565b91505092915050565b600060208284031215612c8657600080fd5b6000612c948482850161297e565b91505092915050565b600060208284031215612caf57600080fd5b600082013567ffffffffffffffff811115612cc957600080fd5b612cd5848285016129bd565b91505092915050565b600060208284031215612cf057600080fd5b6000612cfe848285016129e7565b91505092915050565b600060208284031215612d1957600080fd5b6000612d27848285016129fc565b91505092915050565b600080600060408486031215612d4557600080fd5b6000612d53868287016129e7565b935050602084013567ffffffffffffffff811115612d7057600080fd5b612d7c868287016128cb565b92509250509250925092565b6000612d948383612e83565b60208301905092915050565b6000612dac838361327b565b60208301905092915050565b612dc181613960565b82525050565b6000612dd282613805565b612ddc818561384b565b9350612de7836137e5565b8060005b83811015612e18578151612dff8882612d88565b9750612e0a83613831565b925050600181019050612deb565b5085935050505092915050565b6000612e3082613810565b612e3a818561385c565b9350612e45836137f5565b8060005b83811015612e76578151612e5d8882612da0565b9750612e688361383e565b925050600181019050612e49565b5085935050505092915050565b612e8c81613972565b82525050565b612e9b81613972565b82525050565b612eaa8161397e565b82525050565b612ec1612ebc8261397e565b613acc565b82525050565b612ed081613988565b82525050565b6000612ee18261381b565b612eeb818561386d565b9350612efb8185602086016139ed565b612f0481613bcd565b840191505092915050565b6000612f1a82613826565b612f248185613889565b9350612f348185602086016139ed565b612f3d81613bcd565b840191505092915050565b6000612f5382613826565b612f5d818561389a565b9350612f6d8185602086016139ed565b80840191505092915050565b6000612f86603283613889565b9150612f9182613bde565b604082019050919050565b6000612fa9602683613889565b9150612fb482613c2d565b604082019050919050565b6000612fcc601c83613889565b9150612fd782613c7c565b602082019050919050565b6000612fef602883613889565b9150612ffa82613ca5565b604082019050919050565b6000613012602483613889565b915061301d82613cf4565b604082019050919050565b6000613035601983613889565b915061304082613d43565b602082019050919050565b6000613058603a83613889565b915061306382613d6c565b604082019050919050565b600061307b601d83613889565b915061308682613dbb565b602082019050919050565b600061309e602c83613889565b91506130a982613de4565b604082019050919050565b60006130c1602183613889565b91506130cc82613e33565b604082019050919050565b60006130e4603883613889565b91506130ef82613e82565b604082019050919050565b6000613107602a83613889565b915061311282613ed1565b604082019050919050565b600061312a602983613889565b915061313582613f20565b604082019050919050565b600061314d601983613889565b915061315882613f6f565b602082019050919050565b6000613170602083613889565b915061317b82613f98565b602082019050919050565b6000613193602c83613889565b915061319e82613fc1565b604082019050919050565b60006131b6602083613889565b91506131c182614010565b602082019050919050565b60006131d9602983613889565b91506131e482614039565b604082019050919050565b60006131fc602f83613889565b915061320782614088565b604082019050919050565b600061321f602183613889565b915061322a826140d7565b604082019050919050565b600061324260008361387e565b915061324d82614126565b600082019050919050565b6000613265603183613889565b915061327082614129565b604082019050919050565b613284816139d4565b82525050565b613293816139d4565b82525050565b6132aa6132a5826139d4565b613ad6565b82525050565b60006132bc8285612eb0565b6020820191506132cc8284612eb0565b6020820191508190509392505050565b60006132e88285612f48565b91506132f48284612f48565b91508190509392505050565b600061330b82613235565b9150819050919050565b60006133218284613299565b60208201915081905092915050565b60006020820190506133456000830184612db8565b92915050565b60006080820190506133606000830187612db8565b61336d6020830186612db8565b61337a604083018561328a565b818103606083015261338c8184612ed6565b905095945050505050565b60006040820190506133ac6000830185612db8565b6133b9602083018461328a565b9392505050565b600060208201905081810360008301526133da8184612dc7565b905092915050565b600060208201905081810360008301526133fc8184612e25565b905092915050565b60006020820190506134196000830184612e92565b92915050565b60006020820190506134346000830184612ea1565b92915050565b600060208201905061344f6000830184612ec7565b92915050565b6000602082019050818103600083015261346f8184612f0f565b905092915050565b6000602082019050818103600083015261349081612f79565b9050919050565b600060208201905081810360008301526134b081612f9c565b9050919050565b600060208201905081810360008301526134d081612fbf565b9050919050565b600060208201905081810360008301526134f081612fe2565b9050919050565b6000602082019050818103600083015261351081613005565b9050919050565b6000602082019050818103600083015261353081613028565b9050919050565b600060208201905081810360008301526135508161304b565b9050919050565b600060208201905081810360008301526135708161306e565b9050919050565b6000602082019050818103600083015261359081613091565b9050919050565b600060208201905081810360008301526135b0816130b4565b9050919050565b600060208201905081810360008301526135d0816130d7565b9050919050565b600060208201905081810360008301526135f0816130fa565b9050919050565b600060208201905081810360008301526136108161311d565b9050919050565b6000602082019050818103600083015261363081613140565b9050919050565b6000602082019050818103600083015261365081613163565b9050919050565b6000602082019050818103600083015261367081613186565b9050919050565b60006020820190508181036000830152613690816131a9565b9050919050565b600060208201905081810360008301526136b0816131cc565b9050919050565b600060208201905081810360008301526136d0816131ef565b9050919050565b600060208201905081810360008301526136f081613212565b9050919050565b6000602082019050818103600083015261371081613258565b9050919050565b600060208201905061372c600083018461328a565b92915050565b600061373c61374d565b90506137488282613a52565b919050565b6000604051905090565b600067ffffffffffffffff82111561377257613771613b9e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561379e5761379d613b9e565b5b6137a782613bcd565b9050602081019050919050565b600067ffffffffffffffff8211156137cf576137ce613b9e565b5b6137d882613bcd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b0826139d4565b91506138bb836139d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f0576138ef613b11565b5b828201905092915050565b6000613906826139d4565b9150613911836139d4565b92508261392157613920613b40565b5b828204905092915050565b6000613937826139d4565b9150613942836139d4565b92508282101561395557613954613b11565b5b828203905092915050565b600061396b826139b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b60006002820490506001821680613a3857607f821691505b60208210811415613a4c57613a4b613b6f565b5b50919050565b613a5b82613bcd565b810181811067ffffffffffffffff82111715613a7a57613a79613b9e565b5b80604052505050565b6000613a8e826139d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac157613ac0613b11565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000613aeb826139d4565b9150613af6836139d4565b925082613b0657613b05613b40565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d65726b6c654469737472696275746f723a2044726f7020616c72656164792060008201527f636c61696d65642e000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f6660008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420636c61696d206966206e6f74206f776e657200000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61418181613960565b811461418c57600080fd5b50565b61419881613972565b81146141a357600080fd5b50565b6141af8161397e565b81146141ba57600080fd5b50565b6141c681613988565b81146141d157600080fd5b50565b6141dd816139d4565b81146141e857600080fd5b5056fea264697066735822122065e663469fb0b37b711eabead1eacf9366b2656e117af2b907a0d74d44ccd05364736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c1a1a48634c52b9840d76752b30451e3d3e958dcf16ffd72a781e684723421a22000000000000000000000000000000000000000000000000000000000000000c4e656b6f626f782075777573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e454b4f55575500000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063c66c93fe11610064578063c66c93fe146105b7578063c87b56dd146105f4578063e985e9c514610631578063f2fde38b1461066e5761019c565b8063a22cb46514610528578063b4c592e414610551578063b88d4fde1461058e5761019c565b8063715018a6116100c6578063715018a61461047e5780638da5cb5b1461049557806395d89b41146104c05780639e34070f146104eb5761019c565b80636352211e146103d95780636c0360eb1461041657806370a08231146104415761019c565b8063150b7a02116101595780632f52ebb7116101335780632f52ebb7146103545780633aaa74b21461037057806342842e0e1461038757806355f804b3146103b05761019c565b8063150b7a02146102c557806321b97f201461030257806323b872dd1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780630e207e0f1461026f57806314ea35e71461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c4b565b610697565b6040516101d59190613404565b60405180910390f35b3480156101ea57600080fd5b506101f3610779565b6040516102009190613455565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cde565b61080b565b60405161023d9190613330565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ba5565b610890565b005b34801561027b57600080fd5b506102846109a8565b6040516102919190613330565b60405180910390f35b3480156102a657600080fd5b506102af6109cc565b6040516102bc919061341f565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612aee565b6109d2565b6040516102f9919061343a565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612c22565b6109e6565b005b34801561033757600080fd5b50610352600480360381019061034d9190612a9f565b610a6c565b005b61036e60048036038101906103699190612d30565b610acc565b005b34801561037c57600080fd5b50610385610cf3565b005b34801561039357600080fd5b506103ae60048036038101906103a99190612a9f565b610d8f565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190612c9d565b610daf565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190612cde565b610e45565b60405161040d9190613330565b60405180910390f35b34801561042257600080fd5b5061042b610ef7565b6040516104389190613455565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612a11565b610f85565b6040516104759190613717565b60405180910390f35b34801561048a57600080fd5b5061049361103d565b005b3480156104a157600080fd5b506104aa611177565b6040516104b79190613330565b60405180910390f35b3480156104cc57600080fd5b506104d56111a0565b6040516104e29190613455565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612cde565b611232565b60405161051f9190613404565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612b69565b611244565b005b34801561055d57600080fd5b5061057860048036038101906105739190612be1565b6113c5565b60405161058591906133c0565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190612aee565b6114f6565b005b3480156105c357600080fd5b506105de60048036038101906105d99190612a11565b611558565b6040516105eb91906133e2565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190612cde565b611779565b6040516106289190613455565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190612a63565b611820565b6040516106659190613404565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612a11565b6118b4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610772575061077182611a5d565b5b9050919050565b60606001805461078890613a20565b80601f01602080910402602001604051908101604052809291908181526020018280546107b490613a20565b80156108015780601f106107d657610100808354040283529160200191610801565b820191906000526020600020905b8154815290600101906020018083116107e457829003601f168201915b5050505050905090565b600061081682611ac7565b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90613657565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089b82610e45565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610903906136d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092b611b33565b73ffffffffffffffffffffffffffffffffffffffff16148061095a575061095981610954611b33565b611820565b5b610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906135b7565b60405180910390fd5b6109a38383611b3b565b505050565b7f000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c81565b60075481565b600063150b7a0260e01b9050949350505050565b6109ee611b33565b73ffffffffffffffffffffffffffffffffffffffff16610a0c611177565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613677565b60405180910390fd5b8060078190555050565b610a7d610a77611b33565b82611bf4565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab3906136f7565b60405180910390fd5b610ac7838383611cd2565b505050565b7f000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c73ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610b259190613717565b60206040518083038186803b158015610b3d57600080fd5b505afa158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190612a3a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613617565b60405180910390fd5b610beb83611ac7565b15610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c22906134d7565b60405180910390fd5b600083604051602001610c3e9190613315565b604051602081830303815290604052805190602001209050610ca4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060075483611f2e565b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613597565b60405180910390fd5b610ced338561200a565b50505050565b610cfb611b33565b73ffffffffffffffffffffffffffffffffffffffff16610d19611177565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690613677565b60405180910390fd5b610d8d73354a70969f0b4a4c994403051a81c2ca45db3615476121d8565b565b610daa838383604051806020016040528060008152506114f6565b505050565b610db7611b33565b73ffffffffffffffffffffffffffffffffffffffff16610dd5611177565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613677565b60405180910390fd5b8060089080519060200190610e41929190612716565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee5906135f7565b60405180910390fd5b80915050919050565b60088054610f0490613a20565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613a20565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906135d7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611045611b33565b73ffffffffffffffffffffffffffffffffffffffff16611063611177565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090613677565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111af90613a20565b80601f01602080910402602001604051908101604052809291908181526020018280546111db90613a20565b80156112285780601f106111fd57610100808354040283529160200191611228565b820191906000526020600020905b81548152906001019060200180831161120b57829003601f168201915b5050505050905090565b600061123d82611ac7565b9050919050565b61124c611b33565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613517565b60405180910390fd5b80600660006112c7611b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611374611b33565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113b99190613404565b60405180910390a35050565b60606000825167ffffffffffffffff81111561140a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114385781602001602082028036833780820191505090505b50905060005b83518110156114ec57611490848281518110611483577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611ac7565b8282815181106114c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050806114e590613a83565b905061143e565b5080915050919050565b611507611501611b33565b83611bf4565b611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d906136f7565b60405180910390fd5b611552848484846122cc565b50505050565b606060007f000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016115ba9190613330565b60206040518083038186803b1580156115d257600080fd5b505afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a9190612d07565b905060008167ffffffffffffffff81111561164e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561167c5781602001602082028036833780820191505090505b50905060005b8281101561176d578373ffffffffffffffffffffffffffffffffffffffff16632f745c5987836040518363ffffffff1660e01b81526004016116c5929190613397565b60206040518083038186803b1580156116dd57600080fd5b505afa1580156116f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117159190612d07565b82828151811061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061176590613a83565b915050611682565b50809350505050919050565b606061178482611ac7565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906136b7565b60405180910390fd5b60006117cd612328565b905060008151116117ed5760405180602001604052806000815250611818565b806117f7846123ba565b6040516020016118089291906132dc565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118bc611b33565b73ffffffffffffffffffffffffffffffffffffffff166118da611177565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613677565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613497565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bae83610e45565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bff82611ac7565b611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613577565b60405180910390fd5b6000611c4983610e45565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cb857508373ffffffffffffffffffffffffffffffffffffffff16611ca08461080b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc95750611cc88185611820565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cf282610e45565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613697565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf906134f7565b60405180910390fd5b611dc3838383612567565b611dce600082611b3b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e1e919061392c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7591906138a5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008082905060005b8551811015611ffc576000868281518110611f7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311611fbc578281604051602001611f9f9291906132b0565b604051602081830303815290604052805190602001209250611fe8565b8083604051602001611fcf9291906132b0565b6040516020818303038152906040528051906020012092505b508080611ff490613a83565b915050611f37565b508381149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207190613637565b60405180910390fd5b61208381611ac7565b156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906134b7565b60405180910390fd5b6120cf60008383612567565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211f91906138a5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8047101561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613557565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161224190613300565b60006040518083038185875af1925050503d806000811461227e576040519150601f19603f3d011682016040523d82523d6000602084013e612283565b606091505b50509050806122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90613537565b60405180910390fd5b505050565b6122d7848484611cd2565b6122e38484848461256c565b612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990613477565b60405180910390fd5b50505050565b60606008805461233790613a20565b80601f016020809104026020016040519081016040528092919081815260200182805461236390613a20565b80156123b05780601f10612385576101008083540402835291602001916123b0565b820191906000526020600020905b81548152906001019060200180831161239357829003601f168201915b5050505050905090565b60606000821415612402576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612562565b600082905060005b6000821461243457808061241d90613a83565b915050600a8261242d91906138fb565b915061240a565b60008167ffffffffffffffff811115612476577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124a85781602001600182028036833780820191505090505b5090505b6000851461255b576001826124c1919061392c565b9150600a856124d09190613ae0565b60306124dc91906138a5565b60f81b818381518110612518577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561255491906138fb565b94506124ac565b8093505050505b919050565b505050565b600061258d8473ffffffffffffffffffffffffffffffffffffffff16612703565b156126f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125b6611b33565b8786866040518563ffffffff1660e01b81526004016125d8949392919061334b565b602060405180830381600087803b1580156125f257600080fd5b505af192505050801561262357506040513d601f19601f820116820180604052508101906126209190612c74565b60015b6126a6573d8060008114612653576040519150601f19603f3d011682016040523d82523d6000602084013e612658565b606091505b5060008151141561269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590613477565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126fb565b600190505b949350505050565b600080823b905060008111915050919050565b82805461272290613a20565b90600052602060002090601f016020900481019282612744576000855561278b565b82601f1061275d57805160ff191683800117855561278b565b8280016001018555821561278b579182015b8281111561278a57825182559160200191906001019061276f565b5b509050612798919061279c565b5090565b5b808211156127b557600081600090555060010161279d565b5090565b60006127cc6127c784613757565b613732565b905080838252602082019050828560208602820111156127eb57600080fd5b60005b8581101561281b578161280188826129e7565b8452602084019350602083019250506001810190506127ee565b5050509392505050565b600061283861283384613783565b613732565b90508281526020810184848401111561285057600080fd5b61285b8482856139de565b509392505050565b6000612876612871846137b4565b613732565b90508281526020810184848401111561288e57600080fd5b6128998482856139de565b509392505050565b6000813590506128b081614178565b92915050565b6000815190506128c581614178565b92915050565b60008083601f8401126128dd57600080fd5b8235905067ffffffffffffffff8111156128f657600080fd5b60208301915083602082028301111561290e57600080fd5b9250929050565b600082601f83011261292657600080fd5b81356129368482602086016127b9565b91505092915050565b60008135905061294e8161418f565b92915050565b600081359050612963816141a6565b92915050565b600081359050612978816141bd565b92915050565b60008151905061298d816141bd565b92915050565b600082601f8301126129a457600080fd5b81356129b4848260208601612825565b91505092915050565b600082601f8301126129ce57600080fd5b81356129de848260208601612863565b91505092915050565b6000813590506129f6816141d4565b92915050565b600081519050612a0b816141d4565b92915050565b600060208284031215612a2357600080fd5b6000612a31848285016128a1565b91505092915050565b600060208284031215612a4c57600080fd5b6000612a5a848285016128b6565b91505092915050565b60008060408385031215612a7657600080fd5b6000612a84858286016128a1565b9250506020612a95858286016128a1565b9150509250929050565b600080600060608486031215612ab457600080fd5b6000612ac2868287016128a1565b9350506020612ad3868287016128a1565b9250506040612ae4868287016129e7565b9150509250925092565b60008060008060808587031215612b0457600080fd5b6000612b12878288016128a1565b9450506020612b23878288016128a1565b9350506040612b34878288016129e7565b925050606085013567ffffffffffffffff811115612b5157600080fd5b612b5d87828801612993565b91505092959194509250565b60008060408385031215612b7c57600080fd5b6000612b8a858286016128a1565b9250506020612b9b8582860161293f565b9150509250929050565b60008060408385031215612bb857600080fd5b6000612bc6858286016128a1565b9250506020612bd7858286016129e7565b9150509250929050565b600060208284031215612bf357600080fd5b600082013567ffffffffffffffff811115612c0d57600080fd5b612c1984828501612915565b91505092915050565b600060208284031215612c3457600080fd5b6000612c4284828501612954565b91505092915050565b600060208284031215612c5d57600080fd5b6000612c6b84828501612969565b91505092915050565b600060208284031215612c8657600080fd5b6000612c948482850161297e565b91505092915050565b600060208284031215612caf57600080fd5b600082013567ffffffffffffffff811115612cc957600080fd5b612cd5848285016129bd565b91505092915050565b600060208284031215612cf057600080fd5b6000612cfe848285016129e7565b91505092915050565b600060208284031215612d1957600080fd5b6000612d27848285016129fc565b91505092915050565b600080600060408486031215612d4557600080fd5b6000612d53868287016129e7565b935050602084013567ffffffffffffffff811115612d7057600080fd5b612d7c868287016128cb565b92509250509250925092565b6000612d948383612e83565b60208301905092915050565b6000612dac838361327b565b60208301905092915050565b612dc181613960565b82525050565b6000612dd282613805565b612ddc818561384b565b9350612de7836137e5565b8060005b83811015612e18578151612dff8882612d88565b9750612e0a83613831565b925050600181019050612deb565b5085935050505092915050565b6000612e3082613810565b612e3a818561385c565b9350612e45836137f5565b8060005b83811015612e76578151612e5d8882612da0565b9750612e688361383e565b925050600181019050612e49565b5085935050505092915050565b612e8c81613972565b82525050565b612e9b81613972565b82525050565b612eaa8161397e565b82525050565b612ec1612ebc8261397e565b613acc565b82525050565b612ed081613988565b82525050565b6000612ee18261381b565b612eeb818561386d565b9350612efb8185602086016139ed565b612f0481613bcd565b840191505092915050565b6000612f1a82613826565b612f248185613889565b9350612f348185602086016139ed565b612f3d81613bcd565b840191505092915050565b6000612f5382613826565b612f5d818561389a565b9350612f6d8185602086016139ed565b80840191505092915050565b6000612f86603283613889565b9150612f9182613bde565b604082019050919050565b6000612fa9602683613889565b9150612fb482613c2d565b604082019050919050565b6000612fcc601c83613889565b9150612fd782613c7c565b602082019050919050565b6000612fef602883613889565b9150612ffa82613ca5565b604082019050919050565b6000613012602483613889565b915061301d82613cf4565b604082019050919050565b6000613035601983613889565b915061304082613d43565b602082019050919050565b6000613058603a83613889565b915061306382613d6c565b604082019050919050565b600061307b601d83613889565b915061308682613dbb565b602082019050919050565b600061309e602c83613889565b91506130a982613de4565b604082019050919050565b60006130c1602183613889565b91506130cc82613e33565b604082019050919050565b60006130e4603883613889565b91506130ef82613e82565b604082019050919050565b6000613107602a83613889565b915061311282613ed1565b604082019050919050565b600061312a602983613889565b915061313582613f20565b604082019050919050565b600061314d601983613889565b915061315882613f6f565b602082019050919050565b6000613170602083613889565b915061317b82613f98565b602082019050919050565b6000613193602c83613889565b915061319e82613fc1565b604082019050919050565b60006131b6602083613889565b91506131c182614010565b602082019050919050565b60006131d9602983613889565b91506131e482614039565b604082019050919050565b60006131fc602f83613889565b915061320782614088565b604082019050919050565b600061321f602183613889565b915061322a826140d7565b604082019050919050565b600061324260008361387e565b915061324d82614126565b600082019050919050565b6000613265603183613889565b915061327082614129565b604082019050919050565b613284816139d4565b82525050565b613293816139d4565b82525050565b6132aa6132a5826139d4565b613ad6565b82525050565b60006132bc8285612eb0565b6020820191506132cc8284612eb0565b6020820191508190509392505050565b60006132e88285612f48565b91506132f48284612f48565b91508190509392505050565b600061330b82613235565b9150819050919050565b60006133218284613299565b60208201915081905092915050565b60006020820190506133456000830184612db8565b92915050565b60006080820190506133606000830187612db8565b61336d6020830186612db8565b61337a604083018561328a565b818103606083015261338c8184612ed6565b905095945050505050565b60006040820190506133ac6000830185612db8565b6133b9602083018461328a565b9392505050565b600060208201905081810360008301526133da8184612dc7565b905092915050565b600060208201905081810360008301526133fc8184612e25565b905092915050565b60006020820190506134196000830184612e92565b92915050565b60006020820190506134346000830184612ea1565b92915050565b600060208201905061344f6000830184612ec7565b92915050565b6000602082019050818103600083015261346f8184612f0f565b905092915050565b6000602082019050818103600083015261349081612f79565b9050919050565b600060208201905081810360008301526134b081612f9c565b9050919050565b600060208201905081810360008301526134d081612fbf565b9050919050565b600060208201905081810360008301526134f081612fe2565b9050919050565b6000602082019050818103600083015261351081613005565b9050919050565b6000602082019050818103600083015261353081613028565b9050919050565b600060208201905081810360008301526135508161304b565b9050919050565b600060208201905081810360008301526135708161306e565b9050919050565b6000602082019050818103600083015261359081613091565b9050919050565b600060208201905081810360008301526135b0816130b4565b9050919050565b600060208201905081810360008301526135d0816130d7565b9050919050565b600060208201905081810360008301526135f0816130fa565b9050919050565b600060208201905081810360008301526136108161311d565b9050919050565b6000602082019050818103600083015261363081613140565b9050919050565b6000602082019050818103600083015261365081613163565b9050919050565b6000602082019050818103600083015261367081613186565b9050919050565b60006020820190508181036000830152613690816131a9565b9050919050565b600060208201905081810360008301526136b0816131cc565b9050919050565b600060208201905081810360008301526136d0816131ef565b9050919050565b600060208201905081810360008301526136f081613212565b9050919050565b6000602082019050818103600083015261371081613258565b9050919050565b600060208201905061372c600083018461328a565b92915050565b600061373c61374d565b90506137488282613a52565b919050565b6000604051905090565b600067ffffffffffffffff82111561377257613771613b9e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561379e5761379d613b9e565b5b6137a782613bcd565b9050602081019050919050565b600067ffffffffffffffff8211156137cf576137ce613b9e565b5b6137d882613bcd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b0826139d4565b91506138bb836139d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f0576138ef613b11565b5b828201905092915050565b6000613906826139d4565b9150613911836139d4565b92508261392157613920613b40565b5b828204905092915050565b6000613937826139d4565b9150613942836139d4565b92508282101561395557613954613b11565b5b828203905092915050565b600061396b826139b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b60006002820490506001821680613a3857607f821691505b60208210811415613a4c57613a4b613b6f565b5b50919050565b613a5b82613bcd565b810181811067ffffffffffffffff82111715613a7a57613a79613b9e565b5b80604052505050565b6000613a8e826139d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac157613ac0613b11565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000613aeb826139d4565b9150613af6836139d4565b925082613b0657613b05613b40565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d65726b6c654469737472696275746f723a2044726f7020616c72656164792060008201527f636c61696d65642e000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f6660008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420636c61696d206966206e6f74206f776e657200000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61418181613960565b811461418c57600080fd5b50565b61419881613972565b81146141a357600080fd5b50565b6141af8161397e565b81146141ba57600080fd5b50565b6141c681613988565b81146141d157600080fd5b50565b6141dd816139d4565b81146141e857600080fd5b5056fea264697066735822122065e663469fb0b37b711eabead1eacf9366b2656e117af2b907a0d74d44ccd05364736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c1a1a48634c52b9840d76752b30451e3d3e958dcf16ffd72a781e684723421a22000000000000000000000000000000000000000000000000000000000000000c4e656b6f626f782075777573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e454b4f55575500000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Nekobox uwus
Arg [1] : _symbol (string): NEKOUWU
Arg [2] : _sourceNFT (address): 0xF75140376D246D8B1E5B8a48E3f00772468b3c0c
Arg [3] : _claimRoot (bytes32): 0x1a1a48634c52b9840d76752b30451e3d3e958dcf16ffd72a781e684723421a22

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000f75140376d246d8b1e5b8a48e3f00772468b3c0c
Arg [3] : 1a1a48634c52b9840d76752b30451e3d3e958dcf16ffd72a781e684723421a22
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 4e656b6f626f7820757775730000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 4e454b4f55575500000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38488:2428:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20732:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21677:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23236:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22759:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38530:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38569:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19277:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40711:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24126:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38827:490;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39323:141;;;;;;;;;;;;;:::i;:::-;;24536:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40617:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21371:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38600:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21101:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35391:148;;;;;;;;;;;;;:::i;:::-;;34740:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21846:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40129:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23529:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39859:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24792:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39470:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22021:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23895:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35694:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20732:305;20834:4;20886:25;20871:40;;;:11;:40;;;;:105;;;;20943:33;20928:48;;;:11;:48;;;;20871:105;:158;;;;20993:36;21017:11;20993:23;:36::i;:::-;20871:158;20851:178;;20732:305;;;:::o;21677:100::-;21731:13;21764:5;21757:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21677:100;:::o;23236:221::-;23312:7;23340:16;23348:7;23340;:16::i;:::-;23332:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23425:15;:24;23441:7;23425:24;;;;;;;;;;;;;;;;;;;;;23418:31;;23236:221;;;:::o;22759:411::-;22840:13;22856:23;22871:7;22856:14;:23::i;:::-;22840:39;;22904:5;22898:11;;:2;:11;;;;22890:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22998:5;22982:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23007:37;23024:5;23031:12;:10;:12::i;:::-;23007:16;:37::i;:::-;22982:62;22960:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23141:21;23150:2;23154:7;23141:8;:21::i;:::-;22759:411;;;:::o;38530:34::-;;;:::o;38569:24::-;;;;:::o;19277:207::-;19420:6;19446:30;;;19439:37;;19277:207;;;;;;:::o;40711:94::-;34971:12;:10;:12::i;:::-;34960:23;;:7;:5;:7::i;:::-;:23;;;34952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40789:10:::1;40777:9;:22;;;;40711:94:::0;:::o;24126:339::-;24321:41;24340:12;:10;:12::i;:::-;24354:7;24321:18;:41::i;:::-;24313:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24429:28;24439:4;24445:2;24449:7;24429:9;:28::i;:::-;24126:339;;;:::o;38827:490::-;38944:9;38937:25;;;38963:7;38937:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38923:48;;:10;:48;;;38915:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39017:16;39025:7;39017;:16::i;:::-;39016:17;39008:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39120:12;39162:7;39145:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;39135:36;;;;;;39120:51;;39186:48;39205:11;;39186:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39218:9;;39229:4;39186:18;:48::i;:::-;39178:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;39285:26;39291:10;39303:7;39285:5;:26::i;:::-;38827:490;;;;:::o;39323:141::-;34971:12;:10;:12::i;:::-;34960:23;;:7;:5;:7::i;:::-;:23;;;34952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39373:85:::1;39391:42;39436:21;39373:9;:85::i;:::-;39323:141::o:0;24536:185::-;24674:39;24691:4;24697:2;24701:7;24674:39;;;;;;;;;;;;:16;:39::i;:::-;24536:185;;;:::o;40617:88::-;34971:12;:10;:12::i;:::-;34960:23;;:7;:5;:7::i;:::-;:23;;;34952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40693:6:::1;40683:7;:16;;;;;;;;;;;;:::i;:::-;;40617:88:::0;:::o;21371:239::-;21443:7;21463:13;21479:7;:16;21487:7;21479:16;;;;;;;;;;;;;;;;;;;;;21463:32;;21531:1;21514:19;;:5;:19;;;;21506:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:5;21590:12;;;21371:239;;;:::o;38600:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21101:208::-;21173:7;21218:1;21201:19;;:5;:19;;;;21193:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21285:9;:16;21295:5;21285:16;;;;;;;;;;;;;;;;21278:23;;21101:208;;;:::o;35391:148::-;34971:12;:10;:12::i;:::-;34960:23;;:7;:5;:7::i;:::-;:23;;;34952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35498:1:::1;35461:40;;35482:6;::::0;::::1;;;;;;;;35461:40;;;;;;;;;;;;35529:1;35512:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;35391:148::o:0;34740:87::-;34786:7;34813:6;;;;;;;;;;;34806:13;;34740:87;:::o;21846:104::-;21902:13;21935:7;21928:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21846:104;:::o;40129:97::-;40186:4;40206:14;40214:5;40206:7;:14::i;:::-;40199:21;;40129:97;;;:::o;23529:295::-;23644:12;:10;:12::i;:::-;23632:24;;:8;:24;;;;23624:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:8;23699:18;:32;23718:12;:10;:12::i;:::-;23699:32;;;;;;;;;;;;;;;:42;23732:8;23699:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23797:8;23768:48;;23783:12;:10;:12::i;:::-;23768:48;;;23807:8;23768:48;;;;;;:::i;:::-;;;;;;;;23529:295;;:::o;39859:264::-;39925:13;39947:22;39983:7;:14;39972:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39947:51;;40010:9;40005:91;40025:7;:14;40021:1;:18;40005:91;;;40069:19;40077:7;40085:1;40077:10;;;;;;;;;;;;;;;;;;;;;;40069:7;:19::i;:::-;40055:8;40064:1;40055:11;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;40041:3;;;;:::i;:::-;;;40005:91;;;;40109:8;40102:15;;;39859:264;;;:::o;24792:328::-;24967:41;24986:12;:10;:12::i;:::-;25000:7;24967:18;:41::i;:::-;24959:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25073:39;25087:4;25093:2;25097:7;25106:5;25073:13;:39::i;:::-;24792:328;;;;:::o;39470:383::-;39533:16;39558:22;39601:9;39558:53;;39618:15;39636:4;:14;;;39651:3;39636:19;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39618:37;;39662:27;39706:7;39692:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39662:52;;39726:9;39721:103;39745:7;39741:1;:11;39721:103;;;39784:4;:24;;;39809:3;39814:1;39784:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39768:10;39779:1;39768:13;;;;;;;;;;;;;;;;;;;;;:48;;;;;39754:3;;;;;:::i;:::-;;;;39721:103;;;;39837:10;39830:17;;;;;39470:383;;;:::o;22021:334::-;22094:13;22128:16;22136:7;22128;:16::i;:::-;22120:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22209:21;22233:10;:8;:10::i;:::-;22209:34;;22285:1;22267:7;22261:21;:25;:86;;;;;;;;;;;;;;;;;22313:7;22322:18;:7;:16;:18::i;:::-;22296:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22261:86;22254:93;;;22021:334;;;:::o;23895:164::-;23992:4;24016:18;:25;24035:5;24016:25;;;;;;;;;;;;;;;:35;24042:8;24016:35;;;;;;;;;;;;;;;;;;;;;;;;;24009:42;;23895:164;;;;:::o;35694:244::-;34971:12;:10;:12::i;:::-;34960:23;;:7;:5;:7::i;:::-;:23;;;34952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35803:1:::1;35783:22;;:8;:22;;;;35775:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35893:8;35864:38;;35885:6;::::0;::::1;;;;;;;;35864:38;;;;;;;;;;;;35922:8;35913:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;35694:244:::0;:::o;18676:157::-;18761:4;18800:25;18785:40;;;:11;:40;;;;18778:47;;18676:157;;;:::o;26630:127::-;26695:4;26747:1;26719:30;;:7;:16;26727:7;26719:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26712:37;;26630:127;;;:::o;8717:98::-;8770:7;8797:10;8790:17;;8717:98;:::o;30612:174::-;30714:2;30687:15;:24;30703:7;30687:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30770:7;30766:2;30732:46;;30741:23;30756:7;30741:14;:23::i;:::-;30732:46;;;;;;;;;;;;30612:174;;:::o;26924:348::-;27017:4;27042:16;27050:7;27042;:16::i;:::-;27034:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27118:13;27134:23;27149:7;27134:14;:23::i;:::-;27118:39;;27187:5;27176:16;;:7;:16;;;:51;;;;27220:7;27196:31;;:20;27208:7;27196:11;:20::i;:::-;:31;;;27176:51;:87;;;;27231:32;27248:5;27255:7;27231:16;:32::i;:::-;27176:87;27168:96;;;26924:348;;;;:::o;29916:578::-;30075:4;30048:31;;:23;30063:7;30048:14;:23::i;:::-;:31;;;30040:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30158:1;30144:16;;:2;:16;;;;30136:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30214:39;30235:4;30241:2;30245:7;30214:20;:39::i;:::-;30318:29;30335:1;30339:7;30318:8;:29::i;:::-;30379:1;30360:9;:15;30370:4;30360:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30408:1;30391:9;:13;30401:2;30391:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30439:2;30420:7;:16;30428:7;30420:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30478:7;30474:2;30459:27;;30468:4;30459:27;;;;;;;;;;;;29916:578;;;:::o;36752:830::-;36877:4;36894:20;36917:4;36894:27;;36939:9;36934:525;36958:5;:12;36954:1;:16;36934:525;;;36992:20;37015:5;37021:1;37015:8;;;;;;;;;;;;;;;;;;;;;;36992:31;;37060:12;37044;:28;37040:408;;37214:12;37228;37197:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37187:55;;;;;;37172:70;;37040:408;;;37404:12;37418;37387:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37377:55;;;;;;37362:70;;37040:408;36934:525;36972:3;;;;;:::i;:::-;;;;36934:525;;;;37570:4;37554:12;:20;37547:27;;;36752:830;;;;;:::o;28608:382::-;28702:1;28688:16;;:2;:16;;;;28680:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28761:16;28769:7;28761;:16::i;:::-;28760:17;28752:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28823:45;28852:1;28856:2;28860:7;28823:20;:45::i;:::-;28898:1;28881:9;:13;28891:2;28881:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28929:2;28910:7;:16;28918:7;28910:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28974:7;28970:2;28949:33;;28966:1;28949:33;;;;;;;;;;;;28608:382;;:::o;40232:379::-;40343:6;40318:21;:31;;40310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40467:12;40485:9;:14;;40508:6;40485:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40466:54;;;40535:7;40527:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40232:379;;;:::o;26002:315::-;26159:28;26169:4;26175:2;26179:7;26159:9;:28::i;:::-;26206:48;26229:4;26235:2;26239:7;26248:5;26206:22;:48::i;:::-;26198:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26002:315;;;;:::o;40811:102::-;40871:13;40900:7;40893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40811:102;:::o;9291:723::-;9347:13;9577:1;9568:5;:10;9564:53;;;9595:10;;;;;;;;;;;;;;;;;;;;;9564:53;9627:12;9642:5;9627:20;;9658:14;9683:78;9698:1;9690:4;:9;9683:78;;9716:8;;;;;:::i;:::-;;;;9747:2;9739:10;;;;;:::i;:::-;;;9683:78;;;9771:19;9803:6;9793:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9771:39;;9821:154;9837:1;9828:5;:10;9821:154;;9865:1;9855:11;;;;;:::i;:::-;;;9932:2;9924:5;:10;;;;:::i;:::-;9911:2;:24;;;;:::i;:::-;9898:39;;9881:6;9888;9881:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;9961:2;9952:11;;;;;:::i;:::-;;;9821:154;;;9999:6;9985:21;;;;;9291:723;;;;:::o;32722:126::-;;;;:::o;31351:799::-;31506:4;31527:15;:2;:13;;;:15::i;:::-;31523:620;;;31579:2;31563:36;;;31600:12;:10;:12::i;:::-;31614:4;31620:7;31629:5;31563:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31559:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31822:1;31805:6;:13;:18;31801:272;;;31848:60;;;;;;;;;;:::i;:::-;;;;;;;;31801:272;32023:6;32017:13;32008:6;32004:2;32000:15;31993:38;31559:529;31696:41;;;31686:51;;;:6;:51;;;;31679:58;;;;;31523:620;32127:4;32120:11;;31351:799;;;;;;;:::o;917:422::-;977:4;1185:12;1296:7;1284:20;1276:28;;1330:1;1323:4;:8;1316:15;;;917:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1530:143::-;1587:5;1618:6;1612:13;1603:22;;1634:33;1661:5;1634:33;:::i;:::-;1593:80;;;;:::o;1696:367::-;1769:8;1779:6;1829:3;1822:4;1814:6;1810:17;1806:27;1796:2;;1847:1;1844;1837:12;1796:2;1883:6;1870:20;1860:30;;1913:18;1905:6;1902:30;1899:2;;;1945:1;1942;1935:12;1899:2;1982:4;1974:6;1970:17;1958:29;;2036:3;2028:4;2020:6;2016:17;2006:8;2002:32;1999:41;1996:2;;;2053:1;2050;2043:12;1996:2;1786:277;;;;;:::o;2086:303::-;2157:5;2206:3;2199:4;2191:6;2187:17;2183:27;2173:2;;2224:1;2221;2214:12;2173:2;2264:6;2251:20;2289:94;2379:3;2371:6;2364:4;2356:6;2352:17;2289:94;:::i;:::-;2280:103;;2163:226;;;;;:::o;2395:133::-;2438:5;2476:6;2463:20;2454:29;;2492:30;2516:5;2492:30;:::i;:::-;2444:84;;;;:::o;2534:139::-;2580:5;2618:6;2605:20;2596:29;;2634:33;2661:5;2634:33;:::i;:::-;2586:87;;;;:::o;2679:137::-;2724:5;2762:6;2749:20;2740:29;;2778:32;2804:5;2778:32;:::i;:::-;2730:86;;;;:::o;2822:141::-;2878:5;2909:6;2903:13;2894:22;;2925:32;2951:5;2925:32;:::i;:::-;2884:79;;;;:::o;2982:271::-;3037:5;3086:3;3079:4;3071:6;3067:17;3063:27;3053:2;;3104:1;3101;3094:12;3053:2;3144:6;3131:20;3169:78;3243:3;3235:6;3228:4;3220:6;3216:17;3169:78;:::i;:::-;3160:87;;3043:210;;;;;:::o;3273:273::-;3329:5;3378:3;3371:4;3363:6;3359:17;3355:27;3345:2;;3396:1;3393;3386:12;3345:2;3436:6;3423:20;3461:79;3536:3;3528:6;3521:4;3513:6;3509:17;3461:79;:::i;:::-;3452:88;;3335:211;;;;;:::o;3552:139::-;3598:5;3636:6;3623:20;3614:29;;3652:33;3679:5;3652:33;:::i;:::-;3604:87;;;;:::o;3697:143::-;3754:5;3785:6;3779:13;3770:22;;3801:33;3828:5;3801:33;:::i;:::-;3760:80;;;;:::o;3846:262::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:2;;;3970:1;3967;3960:12;3922:2;4013:1;4038:53;4083:7;4074:6;4063:9;4059:22;4038:53;:::i;:::-;4028:63;;3984:117;3912:196;;;;:::o;4114:284::-;4184:6;4233:2;4221:9;4212:7;4208:23;4204:32;4201:2;;;4249:1;4246;4239:12;4201:2;4292:1;4317:64;4373:7;4364:6;4353:9;4349:22;4317:64;:::i;:::-;4307:74;;4263:128;4191:207;;;;:::o;4404:407::-;4472:6;4480;4529:2;4517:9;4508:7;4504:23;4500:32;4497:2;;;4545:1;4542;4535:12;4497:2;4588:1;4613:53;4658:7;4649:6;4638:9;4634:22;4613:53;:::i;:::-;4603:63;;4559:117;4715:2;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4686:118;4487:324;;;;;:::o;4817:552::-;4894:6;4902;4910;4959:2;4947:9;4938:7;4934:23;4930:32;4927:2;;;4975:1;4972;4965:12;4927:2;5018:1;5043:53;5088:7;5079:6;5068:9;5064:22;5043:53;:::i;:::-;5033:63;;4989:117;5145:2;5171:53;5216:7;5207:6;5196:9;5192:22;5171:53;:::i;:::-;5161:63;;5116:118;5273:2;5299:53;5344:7;5335:6;5324:9;5320:22;5299:53;:::i;:::-;5289:63;;5244:118;4917:452;;;;;:::o;5375:809::-;5470:6;5478;5486;5494;5543:3;5531:9;5522:7;5518:23;5514:33;5511:2;;;5560:1;5557;5550:12;5511:2;5603:1;5628:53;5673:7;5664:6;5653:9;5649:22;5628:53;:::i;:::-;5618:63;;5574:117;5730:2;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5701:118;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;6014:2;6003:9;5999:18;5986:32;6045:18;6037:6;6034:30;6031:2;;;6077:1;6074;6067:12;6031:2;6105:62;6159:7;6150:6;6139:9;6135:22;6105:62;:::i;:::-;6095:72;;5957:220;5501:683;;;;;;;:::o;6190:401::-;6255:6;6263;6312:2;6300:9;6291:7;6287:23;6283:32;6280:2;;;6328:1;6325;6318:12;6280:2;6371:1;6396:53;6441:7;6432:6;6421:9;6417:22;6396:53;:::i;:::-;6386:63;;6342:117;6498:2;6524:50;6566:7;6557:6;6546:9;6542:22;6524:50;:::i;:::-;6514:60;;6469:115;6270:321;;;;;:::o;6597:407::-;6665:6;6673;6722:2;6710:9;6701:7;6697:23;6693:32;6690:2;;;6738:1;6735;6728:12;6690:2;6781:1;6806:53;6851:7;6842:6;6831:9;6827:22;6806:53;:::i;:::-;6796:63;;6752:117;6908:2;6934:53;6979:7;6970:6;6959:9;6955:22;6934:53;:::i;:::-;6924:63;;6879:118;6680:324;;;;;:::o;7010:405::-;7094:6;7143:2;7131:9;7122:7;7118:23;7114:32;7111:2;;;7159:1;7156;7149:12;7111:2;7230:1;7219:9;7215:17;7202:31;7260:18;7252:6;7249:30;7246:2;;;7292:1;7289;7282:12;7246:2;7320:78;7390:7;7381:6;7370:9;7366:22;7320:78;:::i;:::-;7310:88;;7173:235;7101:314;;;;:::o;7421:262::-;7480:6;7529:2;7517:9;7508:7;7504:23;7500:32;7497:2;;;7545:1;7542;7535:12;7497:2;7588:1;7613:53;7658:7;7649:6;7638:9;7634:22;7613:53;:::i;:::-;7603:63;;7559:117;7487:196;;;;:::o;7689:260::-;7747:6;7796:2;7784:9;7775:7;7771:23;7767:32;7764:2;;;7812:1;7809;7802:12;7764:2;7855:1;7880:52;7924:7;7915:6;7904:9;7900:22;7880:52;:::i;:::-;7870:62;;7826:116;7754:195;;;;:::o;7955:282::-;8024:6;8073:2;8061:9;8052:7;8048:23;8044:32;8041:2;;;8089:1;8086;8079:12;8041:2;8132:1;8157:63;8212:7;8203:6;8192:9;8188:22;8157:63;:::i;:::-;8147:73;;8103:127;8031:206;;;;:::o;8243:375::-;8312:6;8361:2;8349:9;8340:7;8336:23;8332:32;8329:2;;;8377:1;8374;8367:12;8329:2;8448:1;8437:9;8433:17;8420:31;8478:18;8470:6;8467:30;8464:2;;;8510:1;8507;8500:12;8464:2;8538:63;8593:7;8584:6;8573:9;8569:22;8538:63;:::i;:::-;8528:73;;8391:220;8319:299;;;;:::o;8624:262::-;8683:6;8732:2;8720:9;8711:7;8707:23;8703:32;8700:2;;;8748:1;8745;8738:12;8700:2;8791:1;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8762:117;8690:196;;;;:::o;8892:284::-;8962:6;9011:2;8999:9;8990:7;8986:23;8982:32;8979:2;;;9027:1;9024;9017:12;8979:2;9070:1;9095:64;9151:7;9142:6;9131:9;9127:22;9095:64;:::i;:::-;9085:74;;9041:128;8969:207;;;;:::o;9182:570::-;9277:6;9285;9293;9342:2;9330:9;9321:7;9317:23;9313:32;9310:2;;;9358:1;9355;9348:12;9310:2;9401:1;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9372:117;9556:2;9545:9;9541:18;9528:32;9587:18;9579:6;9576:30;9573:2;;;9619:1;9616;9609:12;9573:2;9655:80;9727:7;9718:6;9707:9;9703:22;9655:80;:::i;:::-;9637:98;;;;9499:246;9300:452;;;;;:::o;9758:167::-;9821:10;9842:40;9878:3;9870:6;9842:40;:::i;:::-;9914:4;9909:3;9905:14;9891:28;;9832:93;;;;:::o;9931:179::-;10000:10;10021:46;10063:3;10055:6;10021:46;:::i;:::-;10099:4;10094:3;10090:14;10076:28;;10011:99;;;;:::o;10116:118::-;10203:24;10221:5;10203:24;:::i;:::-;10198:3;10191:37;10181:53;;:::o;10264:708::-;10377:3;10406:51;10451:5;10406:51;:::i;:::-;10473:83;10549:6;10544:3;10473:83;:::i;:::-;10466:90;;10580:53;10627:5;10580:53;:::i;:::-;10656:7;10687:1;10672:275;10697:6;10694:1;10691:13;10672:275;;;10773:6;10767:13;10800:57;10853:3;10838:13;10800:57;:::i;:::-;10793:64;;10880:57;10930:6;10880:57;:::i;:::-;10870:67;;10732:215;10719:1;10716;10712:9;10707:14;;10672:275;;;10676:14;10963:3;10956:10;;10382:590;;;;;;;:::o;11008:732::-;11127:3;11156:54;11204:5;11156:54;:::i;:::-;11226:86;11305:6;11300:3;11226:86;:::i;:::-;11219:93;;11336:56;11386:5;11336:56;:::i;:::-;11415:7;11446:1;11431:284;11456:6;11453:1;11450:13;11431:284;;;11532:6;11526:13;11559:63;11618:3;11603:13;11559:63;:::i;:::-;11552:70;;11645:60;11698:6;11645:60;:::i;:::-;11635:70;;11491:224;11478:1;11475;11471:9;11466:14;;11431:284;;;11435:14;11731:3;11724:10;;11132:608;;;;;;;:::o;11746:99::-;11817:21;11832:5;11817:21;:::i;:::-;11812:3;11805:34;11795:50;;:::o;11851:109::-;11932:21;11947:5;11932:21;:::i;:::-;11927:3;11920:34;11910:50;;:::o;11966:118::-;12053:24;12071:5;12053:24;:::i;:::-;12048:3;12041:37;12031:53;;:::o;12090:157::-;12195:45;12215:24;12233:5;12215:24;:::i;:::-;12195:45;:::i;:::-;12190:3;12183:58;12173:74;;:::o;12253:115::-;12338:23;12355:5;12338:23;:::i;:::-;12333:3;12326:36;12316:52;;:::o;12374:360::-;12460:3;12488:38;12520:5;12488:38;:::i;:::-;12542:70;12605:6;12600:3;12542:70;:::i;:::-;12535:77;;12621:52;12666:6;12661:3;12654:4;12647:5;12643:16;12621:52;:::i;:::-;12698:29;12720:6;12698:29;:::i;:::-;12693:3;12689:39;12682:46;;12464:270;;;;;:::o;12740:364::-;12828:3;12856:39;12889:5;12856:39;:::i;:::-;12911:71;12975:6;12970:3;12911:71;:::i;:::-;12904:78;;12991:52;13036:6;13031:3;13024:4;13017:5;13013:16;12991:52;:::i;:::-;13068:29;13090:6;13068:29;:::i;:::-;13063:3;13059:39;13052:46;;12832:272;;;;;:::o;13110:377::-;13216:3;13244:39;13277:5;13244:39;:::i;:::-;13299:89;13381:6;13376:3;13299:89;:::i;:::-;13292:96;;13397:52;13442:6;13437:3;13430:4;13423:5;13419:16;13397:52;:::i;:::-;13474:6;13469:3;13465:16;13458:23;;13220:267;;;;;:::o;13493:366::-;13635:3;13656:67;13720:2;13715:3;13656:67;:::i;:::-;13649:74;;13732:93;13821:3;13732:93;:::i;:::-;13850:2;13845:3;13841:12;13834:19;;13639:220;;;:::o;13865:366::-;14007:3;14028:67;14092:2;14087:3;14028:67;:::i;:::-;14021:74;;14104:93;14193:3;14104:93;:::i;:::-;14222:2;14217:3;14213:12;14206:19;;14011:220;;;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14383:220;;;:::o;14609:366::-;14751:3;14772:67;14836:2;14831:3;14772:67;:::i;:::-;14765:74;;14848:93;14937:3;14848:93;:::i;:::-;14966:2;14961:3;14957:12;14950:19;;14755:220;;;:::o;14981:366::-;15123:3;15144:67;15208:2;15203:3;15144:67;:::i;:::-;15137:74;;15220:93;15309:3;15220:93;:::i;:::-;15338:2;15333:3;15329:12;15322:19;;15127:220;;;:::o;15353:366::-;15495:3;15516:67;15580:2;15575:3;15516:67;:::i;:::-;15509:74;;15592:93;15681:3;15592:93;:::i;:::-;15710:2;15705:3;15701:12;15694:19;;15499:220;;;:::o;15725:366::-;15867:3;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15871:220;;;:::o;16097:366::-;16239:3;16260:67;16324:2;16319:3;16260:67;:::i;:::-;16253:74;;16336:93;16425:3;16336:93;:::i;:::-;16454:2;16449:3;16445:12;16438:19;;16243:220;;;:::o;16469:366::-;16611:3;16632:67;16696:2;16691:3;16632:67;:::i;:::-;16625:74;;16708:93;16797:3;16708:93;:::i;:::-;16826:2;16821:3;16817:12;16810:19;;16615:220;;;:::o;16841:366::-;16983:3;17004:67;17068:2;17063:3;17004:67;:::i;:::-;16997:74;;17080:93;17169:3;17080:93;:::i;:::-;17198:2;17193:3;17189:12;17182:19;;16987:220;;;:::o;17213:366::-;17355:3;17376:67;17440:2;17435:3;17376:67;:::i;:::-;17369:74;;17452:93;17541:3;17452:93;:::i;:::-;17570:2;17565:3;17561:12;17554:19;;17359:220;;;:::o;17585:366::-;17727:3;17748:67;17812:2;17807:3;17748:67;:::i;:::-;17741:74;;17824:93;17913:3;17824:93;:::i;:::-;17942:2;17937:3;17933:12;17926:19;;17731:220;;;:::o;17957:366::-;18099:3;18120:67;18184:2;18179:3;18120:67;:::i;:::-;18113:74;;18196:93;18285:3;18196:93;:::i;:::-;18314:2;18309:3;18305:12;18298:19;;18103:220;;;:::o;18329:366::-;18471:3;18492:67;18556:2;18551:3;18492:67;:::i;:::-;18485:74;;18568:93;18657:3;18568:93;:::i;:::-;18686:2;18681:3;18677:12;18670:19;;18475:220;;;:::o;18701:366::-;18843:3;18864:67;18928:2;18923:3;18864:67;:::i;:::-;18857:74;;18940:93;19029:3;18940:93;:::i;:::-;19058:2;19053:3;19049:12;19042:19;;18847:220;;;:::o;19073:366::-;19215:3;19236:67;19300:2;19295:3;19236:67;:::i;:::-;19229:74;;19312:93;19401:3;19312:93;:::i;:::-;19430:2;19425:3;19421:12;19414:19;;19219:220;;;:::o;19445:366::-;19587:3;19608:67;19672:2;19667:3;19608:67;:::i;:::-;19601:74;;19684:93;19773:3;19684:93;:::i;:::-;19802:2;19797:3;19793:12;19786:19;;19591:220;;;:::o;19817:366::-;19959:3;19980:67;20044:2;20039:3;19980:67;:::i;:::-;19973:74;;20056:93;20145:3;20056:93;:::i;:::-;20174:2;20169:3;20165:12;20158:19;;19963:220;;;:::o;20189:366::-;20331:3;20352:67;20416:2;20411:3;20352:67;:::i;:::-;20345:74;;20428:93;20517:3;20428:93;:::i;:::-;20546:2;20541:3;20537:12;20530:19;;20335:220;;;:::o;20561:366::-;20703:3;20724:67;20788:2;20783:3;20724:67;:::i;:::-;20717:74;;20800:93;20889:3;20800:93;:::i;:::-;20918:2;20913:3;20909:12;20902:19;;20707:220;;;:::o;20933:398::-;21092:3;21113:83;21194:1;21189:3;21113:83;:::i;:::-;21106:90;;21205:93;21294:3;21205:93;:::i;:::-;21323:1;21318:3;21314:11;21307:18;;21096:235;;;:::o;21337:366::-;21479:3;21500:67;21564:2;21559:3;21500:67;:::i;:::-;21493:74;;21576:93;21665:3;21576:93;:::i;:::-;21694:2;21689:3;21685:12;21678:19;;21483:220;;;:::o;21709:108::-;21786:24;21804:5;21786:24;:::i;:::-;21781:3;21774:37;21764:53;;:::o;21823:118::-;21910:24;21928:5;21910:24;:::i;:::-;21905:3;21898:37;21888:53;;:::o;21947:157::-;22052:45;22072:24;22090:5;22072:24;:::i;:::-;22052:45;:::i;:::-;22047:3;22040:58;22030:74;;:::o;22110:397::-;22250:3;22265:75;22336:3;22327:6;22265:75;:::i;:::-;22365:2;22360:3;22356:12;22349:19;;22378:75;22449:3;22440:6;22378:75;:::i;:::-;22478:2;22473:3;22469:12;22462:19;;22498:3;22491:10;;22254:253;;;;;:::o;22513:435::-;22693:3;22715:95;22806:3;22797:6;22715:95;:::i;:::-;22708:102;;22827:95;22918:3;22909:6;22827:95;:::i;:::-;22820:102;;22939:3;22932:10;;22697:251;;;;;:::o;22954:379::-;23138:3;23160:147;23303:3;23160:147;:::i;:::-;23153:154;;23324:3;23317:10;;23142:191;;;:::o;23339:256::-;23451:3;23466:75;23537:3;23528:6;23466:75;:::i;:::-;23566:2;23561:3;23557:12;23550:19;;23586:3;23579:10;;23455:140;;;;:::o;23601:222::-;23694:4;23732:2;23721:9;23717:18;23709:26;;23745:71;23813:1;23802:9;23798:17;23789:6;23745:71;:::i;:::-;23699:124;;;;:::o;23829:640::-;24024:4;24062:3;24051:9;24047:19;24039:27;;24076:71;24144:1;24133:9;24129:17;24120:6;24076:71;:::i;:::-;24157:72;24225:2;24214:9;24210:18;24201:6;24157:72;:::i;:::-;24239;24307:2;24296:9;24292:18;24283:6;24239:72;:::i;:::-;24358:9;24352:4;24348:20;24343:2;24332:9;24328:18;24321:48;24386:76;24457:4;24448:6;24386:76;:::i;:::-;24378:84;;24029:440;;;;;;;:::o;24475:332::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24647:71;24715:1;24704:9;24700:17;24691:6;24647:71;:::i;:::-;24728:72;24796:2;24785:9;24781:18;24772:6;24728:72;:::i;:::-;24601:206;;;;;:::o;24813:361::-;24950:4;24988:2;24977:9;24973:18;24965:26;;25037:9;25031:4;25027:20;25023:1;25012:9;25008:17;25001:47;25065:102;25162:4;25153:6;25065:102;:::i;:::-;25057:110;;24955:219;;;;:::o;25180:373::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25410:9;25404:4;25400:20;25396:1;25385:9;25381:17;25374:47;25438:108;25541:4;25532:6;25438:108;:::i;:::-;25430:116;;25328:225;;;;:::o;25559:210::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25697:65;25759:1;25748:9;25744:17;25735:6;25697:65;:::i;:::-;25651:118;;;;:::o;25775:222::-;25868:4;25906:2;25895:9;25891:18;25883:26;;25919:71;25987:1;25976:9;25972:17;25963:6;25919:71;:::i;:::-;25873:124;;;;:::o;26003:218::-;26094:4;26132:2;26121:9;26117:18;26109:26;;26145:69;26211:1;26200:9;26196:17;26187:6;26145:69;:::i;:::-;26099:122;;;;:::o;26227:313::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:78;26528:4;26519:6;26455:78;:::i;:::-;26447:86;;26345:195;;;;:::o;26546:419::-;26712:4;26750:2;26739:9;26735:18;26727:26;;26799:9;26793:4;26789:20;26785:1;26774:9;26770:17;26763:47;26827:131;26953:4;26827:131;:::i;:::-;26819:139;;26717:248;;;:::o;26971:419::-;27137:4;27175:2;27164:9;27160:18;27152:26;;27224:9;27218:4;27214:20;27210:1;27199:9;27195:17;27188:47;27252:131;27378:4;27252:131;:::i;:::-;27244:139;;27142:248;;;:::o;27396:419::-;27562:4;27600:2;27589:9;27585:18;27577:26;;27649:9;27643:4;27639:20;27635:1;27624:9;27620:17;27613:47;27677:131;27803:4;27677:131;:::i;:::-;27669:139;;27567:248;;;:::o;27821:419::-;27987:4;28025:2;28014:9;28010:18;28002:26;;28074:9;28068:4;28064:20;28060:1;28049:9;28045:17;28038:47;28102:131;28228:4;28102:131;:::i;:::-;28094:139;;27992:248;;;:::o;28246:419::-;28412:4;28450:2;28439:9;28435:18;28427:26;;28499:9;28493:4;28489:20;28485:1;28474:9;28470:17;28463:47;28527:131;28653:4;28527:131;:::i;:::-;28519:139;;28417:248;;;:::o;28671:419::-;28837:4;28875:2;28864:9;28860:18;28852:26;;28924:9;28918:4;28914:20;28910:1;28899:9;28895:17;28888:47;28952:131;29078:4;28952:131;:::i;:::-;28944:139;;28842:248;;;:::o;29096:419::-;29262:4;29300:2;29289:9;29285:18;29277:26;;29349:9;29343:4;29339:20;29335:1;29324:9;29320:17;29313:47;29377:131;29503:4;29377:131;:::i;:::-;29369:139;;29267:248;;;:::o;29521:419::-;29687:4;29725:2;29714:9;29710:18;29702:26;;29774:9;29768:4;29764:20;29760:1;29749:9;29745:17;29738:47;29802:131;29928:4;29802:131;:::i;:::-;29794:139;;29692:248;;;:::o;29946:419::-;30112:4;30150:2;30139:9;30135:18;30127:26;;30199:9;30193:4;30189:20;30185:1;30174:9;30170:17;30163:47;30227:131;30353:4;30227:131;:::i;:::-;30219:139;;30117:248;;;:::o;30371:419::-;30537:4;30575:2;30564:9;30560:18;30552:26;;30624:9;30618:4;30614:20;30610:1;30599:9;30595:17;30588:47;30652:131;30778:4;30652:131;:::i;:::-;30644:139;;30542:248;;;:::o;30796:419::-;30962:4;31000:2;30989:9;30985:18;30977:26;;31049:9;31043:4;31039:20;31035:1;31024:9;31020:17;31013:47;31077:131;31203:4;31077:131;:::i;:::-;31069:139;;30967:248;;;:::o;31221:419::-;31387:4;31425:2;31414:9;31410:18;31402:26;;31474:9;31468:4;31464:20;31460:1;31449:9;31445:17;31438:47;31502:131;31628:4;31502:131;:::i;:::-;31494:139;;31392:248;;;:::o;31646:419::-;31812:4;31850:2;31839:9;31835:18;31827:26;;31899:9;31893:4;31889:20;31885:1;31874:9;31870:17;31863:47;31927:131;32053:4;31927:131;:::i;:::-;31919:139;;31817:248;;;:::o;32071:419::-;32237:4;32275:2;32264:9;32260:18;32252:26;;32324:9;32318:4;32314:20;32310:1;32299:9;32295:17;32288:47;32352:131;32478:4;32352:131;:::i;:::-;32344:139;;32242:248;;;:::o;32496:419::-;32662:4;32700:2;32689:9;32685:18;32677:26;;32749:9;32743:4;32739:20;32735:1;32724:9;32720:17;32713:47;32777:131;32903:4;32777:131;:::i;:::-;32769:139;;32667:248;;;:::o;32921:419::-;33087:4;33125:2;33114:9;33110:18;33102:26;;33174:9;33168:4;33164:20;33160:1;33149:9;33145:17;33138:47;33202:131;33328:4;33202:131;:::i;:::-;33194:139;;33092:248;;;:::o;33346:419::-;33512:4;33550:2;33539:9;33535:18;33527:26;;33599:9;33593:4;33589:20;33585:1;33574:9;33570:17;33563:47;33627:131;33753:4;33627:131;:::i;:::-;33619:139;;33517:248;;;:::o;33771:419::-;33937:4;33975:2;33964:9;33960:18;33952:26;;34024:9;34018:4;34014:20;34010:1;33999:9;33995:17;33988:47;34052:131;34178:4;34052:131;:::i;:::-;34044:139;;33942:248;;;:::o;34196:419::-;34362:4;34400:2;34389:9;34385:18;34377:26;;34449:9;34443:4;34439:20;34435:1;34424:9;34420:17;34413:47;34477:131;34603:4;34477:131;:::i;:::-;34469:139;;34367:248;;;:::o;34621:419::-;34787:4;34825:2;34814:9;34810:18;34802:26;;34874:9;34868:4;34864:20;34860:1;34849:9;34845:17;34838:47;34902:131;35028:4;34902:131;:::i;:::-;34894:139;;34792:248;;;:::o;35046:419::-;35212:4;35250:2;35239:9;35235:18;35227:26;;35299:9;35293:4;35289:20;35285:1;35274:9;35270:17;35263:47;35327:131;35453:4;35327:131;:::i;:::-;35319:139;;35217:248;;;:::o;35471:222::-;35564:4;35602:2;35591:9;35587:18;35579:26;;35615:71;35683:1;35672:9;35668:17;35659:6;35615:71;:::i;:::-;35569:124;;;;:::o;35699:129::-;35733:6;35760:20;;:::i;:::-;35750:30;;35789:33;35817:4;35809:6;35789:33;:::i;:::-;35740:88;;;:::o;35834:75::-;35867:6;35900:2;35894:9;35884:19;;35874:35;:::o;35915:311::-;35992:4;36082:18;36074:6;36071:30;36068:2;;;36104:18;;:::i;:::-;36068:2;36154:4;36146:6;36142:17;36134:25;;36214:4;36208;36204:15;36196:23;;35997:229;;;:::o;36232:307::-;36293:4;36383:18;36375:6;36372:30;36369:2;;;36405:18;;:::i;:::-;36369:2;36443:29;36465:6;36443:29;:::i;:::-;36435:37;;36527:4;36521;36517:15;36509:23;;36298:241;;;:::o;36545:308::-;36607:4;36697:18;36689:6;36686:30;36683:2;;;36719:18;;:::i;:::-;36683:2;36757:29;36779:6;36757:29;:::i;:::-;36749:37;;36841:4;36835;36831:15;36823:23;;36612:241;;;:::o;36859:129::-;36923:4;36946:3;36938:11;;36976:4;36971:3;36967:14;36959:22;;36928:60;;;:::o;36994:132::-;37061:4;37084:3;37076:11;;37114:4;37109:3;37105:14;37097:22;;37066:60;;;:::o;37132:111::-;37196:6;37230:5;37224:12;37214:22;;37203:40;;;:::o;37249:114::-;37316:6;37350:5;37344:12;37334:22;;37323:40;;;:::o;37369:98::-;37420:6;37454:5;37448:12;37438:22;;37427:40;;;:::o;37473:99::-;37525:6;37559:5;37553:12;37543:22;;37532:40;;;:::o;37578:110::-;37645:4;37677;37672:3;37668:14;37660:22;;37650:38;;;:::o;37694:113::-;37764:4;37796;37791:3;37787:14;37779:22;;37769:38;;;:::o;37813:181::-;37909:11;37943:6;37938:3;37931:19;37983:4;37978:3;37974:14;37959:29;;37921:73;;;;:::o;38000:184::-;38099:11;38133:6;38128:3;38121:19;38173:4;38168:3;38164:14;38149:29;;38111:73;;;;:::o;38190:168::-;38273:11;38307:6;38302:3;38295:19;38347:4;38342:3;38338:14;38323:29;;38285:73;;;;:::o;38364:147::-;38465:11;38502:3;38487:18;;38477:34;;;;:::o;38517:169::-;38601:11;38635:6;38630:3;38623:19;38675:4;38670:3;38666:14;38651:29;;38613:73;;;;:::o;38692:148::-;38794:11;38831:3;38816:18;;38806:34;;;;:::o;38846:305::-;38886:3;38905:20;38923:1;38905:20;:::i;:::-;38900:25;;38939:20;38957:1;38939:20;:::i;:::-;38934:25;;39093:1;39025:66;39021:74;39018:1;39015:81;39012:2;;;39099:18;;:::i;:::-;39012:2;39143:1;39140;39136:9;39129:16;;38890:261;;;;:::o;39157:185::-;39197:1;39214:20;39232:1;39214:20;:::i;:::-;39209:25;;39248:20;39266:1;39248:20;:::i;:::-;39243:25;;39287:1;39277:2;;39292:18;;:::i;:::-;39277:2;39334:1;39331;39327:9;39322:14;;39199:143;;;;:::o;39348:191::-;39388:4;39408:20;39426:1;39408:20;:::i;:::-;39403:25;;39442:20;39460:1;39442:20;:::i;:::-;39437:25;;39481:1;39478;39475:8;39472:2;;;39486:18;;:::i;:::-;39472:2;39531:1;39528;39524:9;39516:17;;39393:146;;;;:::o;39545:96::-;39582:7;39611:24;39629:5;39611:24;:::i;:::-;39600:35;;39590:51;;;:::o;39647:90::-;39681:7;39724:5;39717:13;39710:21;39699:32;;39689:48;;;:::o;39743:77::-;39780:7;39809:5;39798:16;;39788:32;;;:::o;39826:149::-;39862:7;39902:66;39895:5;39891:78;39880:89;;39870:105;;;:::o;39981:126::-;40018:7;40058:42;40051:5;40047:54;40036:65;;40026:81;;;:::o;40113:77::-;40150:7;40179:5;40168:16;;40158:32;;;:::o;40196:154::-;40280:6;40275:3;40270;40257:30;40342:1;40333:6;40328:3;40324:16;40317:27;40247:103;;;:::o;40356:307::-;40424:1;40434:113;40448:6;40445:1;40442:13;40434:113;;;40533:1;40528:3;40524:11;40518:18;40514:1;40509:3;40505:11;40498:39;40470:2;40467:1;40463:10;40458:15;;40434:113;;;40565:6;40562:1;40559:13;40556:2;;;40645:1;40636:6;40631:3;40627:16;40620:27;40556:2;40405:258;;;;:::o;40669:320::-;40713:6;40750:1;40744:4;40740:12;40730:22;;40797:1;40791:4;40787:12;40818:18;40808:2;;40874:4;40866:6;40862:17;40852:27;;40808:2;40936;40928:6;40925:14;40905:18;40902:38;40899:2;;;40955:18;;:::i;:::-;40899:2;40720:269;;;;:::o;40995:281::-;41078:27;41100:4;41078:27;:::i;:::-;41070:6;41066:40;41208:6;41196:10;41193:22;41172:18;41160:10;41157:34;41154:62;41151:2;;;41219:18;;:::i;:::-;41151:2;41259:10;41255:2;41248:22;41038:238;;;:::o;41282:233::-;41321:3;41344:24;41362:5;41344:24;:::i;:::-;41335:33;;41390:66;41383:5;41380:77;41377:2;;;41460:18;;:::i;:::-;41377:2;41507:1;41500:5;41496:13;41489:20;;41325:190;;;:::o;41521:79::-;41560:7;41589:5;41578:16;;41568:32;;;:::o;41606:79::-;41645:7;41674:5;41663:16;;41653:32;;;:::o;41691:176::-;41723:1;41740:20;41758:1;41740:20;:::i;:::-;41735:25;;41774:20;41792:1;41774:20;:::i;:::-;41769:25;;41813:1;41803:2;;41818:18;;:::i;:::-;41803:2;41859:1;41856;41852:9;41847:14;;41725:142;;;;:::o;41873:180::-;41921:77;41918:1;41911:88;42018:4;42015:1;42008:15;42042:4;42039:1;42032:15;42059:180;42107:77;42104:1;42097:88;42204:4;42201:1;42194:15;42228:4;42225:1;42218:15;42245:180;42293:77;42290:1;42283:88;42390:4;42387:1;42380:15;42414:4;42411:1;42404:15;42431:180;42479:77;42476:1;42469:88;42576:4;42573:1;42566:15;42600:4;42597:1;42590:15;42617:102;42658:6;42709:2;42705:7;42700:2;42693:5;42689:14;42685:28;42675:38;;42665:54;;;:::o;42725:237::-;42865:34;42861:1;42853:6;42849:14;42842:58;42934:20;42929:2;42921:6;42917:15;42910:45;42831:131;:::o;42968:225::-;43108:34;43104:1;43096:6;43092:14;43085:58;43177:8;43172:2;43164:6;43160:15;43153:33;43074:119;:::o;43199:178::-;43339:30;43335:1;43327:6;43323:14;43316:54;43305:72;:::o;43383:227::-;43523:34;43519:1;43511:6;43507:14;43500:58;43592:10;43587:2;43579:6;43575:15;43568:35;43489:121;:::o;43616:223::-;43756:34;43752:1;43744:6;43740:14;43733:58;43825:6;43820:2;43812:6;43808:15;43801:31;43722:117;:::o;43845:175::-;43985:27;43981:1;43973:6;43969:14;43962:51;43951:69;:::o;44026:245::-;44166:34;44162:1;44154:6;44150:14;44143:58;44235:28;44230:2;44222:6;44218:15;44211:53;44132:139;:::o;44277:179::-;44417:31;44413:1;44405:6;44401:14;44394:55;44383:73;:::o;44462:231::-;44602:34;44598:1;44590:6;44586:14;44579:58;44671:14;44666:2;44658:6;44654:15;44647:39;44568:125;:::o;44699:220::-;44839:34;44835:1;44827:6;44823:14;44816:58;44908:3;44903:2;44895:6;44891:15;44884:28;44805:114;:::o;44925:243::-;45065:34;45061:1;45053:6;45049:14;45042:58;45134:26;45129:2;45121:6;45117:15;45110:51;45031:137;:::o;45174:229::-;45314:34;45310:1;45302:6;45298:14;45291:58;45383:12;45378:2;45370:6;45366:15;45359:37;45280:123;:::o;45409:228::-;45549:34;45545:1;45537:6;45533:14;45526:58;45618:11;45613:2;45605:6;45601:15;45594:36;45515:122;:::o;45643:175::-;45783:27;45779:1;45771:6;45767:14;45760:51;45749:69;:::o;45824:182::-;45964:34;45960:1;45952:6;45948:14;45941:58;45930:76;:::o;46012:231::-;46152:34;46148:1;46140:6;46136:14;46129:58;46221:14;46216:2;46208:6;46204:15;46197:39;46118:125;:::o;46249:182::-;46389:34;46385:1;46377:6;46373:14;46366:58;46355:76;:::o;46437:228::-;46577:34;46573:1;46565:6;46561:14;46554:58;46646:11;46641:2;46633:6;46629:15;46622:36;46543:122;:::o;46671:234::-;46811:34;46807:1;46799:6;46795:14;46788:58;46880:17;46875:2;46867:6;46863:15;46856:42;46777:128;:::o;46911:220::-;47051:34;47047:1;47039:6;47035:14;47028:58;47120:3;47115:2;47107:6;47103:15;47096:28;47017:114;:::o;47137:::-;47243:8;:::o;47257:236::-;47397:34;47393:1;47385:6;47381:14;47374:58;47466:19;47461:2;47453:6;47449:15;47442:44;47363:130;:::o;47499:122::-;47572:24;47590:5;47572:24;:::i;:::-;47565:5;47562:35;47552:2;;47611:1;47608;47601:12;47552:2;47542:79;:::o;47627:116::-;47697:21;47712:5;47697:21;:::i;:::-;47690:5;47687:32;47677:2;;47733:1;47730;47723:12;47677:2;47667:76;:::o;47749:122::-;47822:24;47840:5;47822:24;:::i;:::-;47815:5;47812:35;47802:2;;47861:1;47858;47851:12;47802:2;47792:79;:::o;47877:120::-;47949:23;47966:5;47949:23;:::i;:::-;47942:5;47939:34;47929:2;;47987:1;47984;47977:12;47929:2;47919:78;:::o;48003:122::-;48076:24;48094:5;48076:24;:::i;:::-;48069:5;48066:35;48056:2;;48115:1;48112;48105:12;48056:2;48046:79;:::o

Swarm Source

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