ETH Price: $2,450.72 (+1.09%)

Token

MetaHouse Pixel Collection (PMH)
 

Overview

Max Total Supply

1,861 PMH

Holders

342

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 PMH
0xd0765b4588dc4331b1be9446623b98ed7d70c8d4
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:
pixelmetahouse

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-03
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
}

pragma solidity ^0.8.0;


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

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

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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


pragma solidity ^0.8.0;


contract pixelmetahouse is Ownable, ERC721 {
    
    uint public tokenPrice = 0.001 ether;
    uint constant maxSupply = 5040;
    uint public presale_price = 0.001 ether;
    uint public totalSupply = 0;

 bool public Presale_status = false;
    bool public public_sale_status = false;
    
    mapping(address => bool) private presaleList;
    string public baseURI;
    uint public maxPerTransaction = 20;  //Max Limit for Sale
    uint public maxPerWallet = checknftholder(msg.sender)*2; //Max Limit perwallet
         
    constructor() ERC721("MetaHouse Pixel Collection", "PMH"){}

   function buy(uint _count) public payable {
         require(public_sale_status == true, "Sale is Paused.");
        require(_count > 0, "mint at least one token");
         require(checknftholder(msg.sender) >= _count, "You do not have enough metahouse nfts");
        require(_count*2 <= maxPerTransaction, "max per transaction 20");
        require(balanceOf(msg.sender) < checknftholder(msg.sender)*2, "you already minted");
        require(balanceOf(msg.sender) + _count*2 <= checknftholder(msg.sender)*2, "Either you dont have enough Metahouse Nfts or you already minted");
        require(totalSupply + _count*2 <= maxSupply, "Not enough tokens left");
       
      
        for(uint i = 0; i < _count*2; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count*2;
    }


       function buy_presale(uint _count) public payable{ 
        require(Presale_status == true, "Sale is Paused.");
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _count<= maxSupply, "Not enough tokens left");
        require(msg.value >= presale_price, "incorrect ether amount");
       
         for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }


    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(_wallets.length > 0, "mint at least one token");
        require(_wallets.length <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }
    
     function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }
    
    function is_presale_active() public view returns(uint){
        require(Presale_status == true,"Sale not Started Yet.");
        return 1;
     }
    

      function is_sale_active() public view returns(uint){
      require(public_sale_status == true,"Sale not Started Yet.");
        return 1;
     }
     function checkPresale() public view returns(bool){
        return presaleList[msg.sender];
    }
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }

        function pre_Sale_status(bool temp) external onlyOwner {
        Presale_status = temp;
    }
 
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }

       function update_preSale_price(uint price) external onlyOwner {
        presale_price = price;
    }
     function update_public_price(uint price) external onlyOwner {
        tokenPrice = price;
    }
  
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
   function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }


 function checknftholder(address recnft) public view returns(uint) {
    address othercontractadd=0x90cA08a327BE1B6D5e1C86E073C46F9A4C723A41;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Presale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_presale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_sale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"pre_Sale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presale_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_wallets","type":"address[]"}],"name":"sendGifts","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":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_public_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266038d7ea4c6800060075566038d7ea4c6800060085560006009556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506014600d5560026200006d336200015060201b60201c565b620000799190620003fa565b600e553480156200008957600080fd5b506040518060400160405280601a81526020017f4d657461486f75736520506978656c20436f6c6c656374696f6e0000000000008152506040518060400160405280600381526020017f504d480000000000000000000000000000000000000000000000000000000000815250620001166200010a6200020760201b60201c565b6200020f60201b60201c565b81600190805190602001906200012e929190620002d3565b50806002908051906020019062000147929190620002d3565b5050506200054c565b6000807390ca08a327be1b6d5e1c86e073c46f9a4c723a41905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401620001aa9190620003dd565b60206040518083038186803b158015620001c357600080fd5b505afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe91906200039a565b92505050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002e19062000499565b90600052602060002090601f01602090048101928262000305576000855562000351565b82601f106200032057805160ff191683800117855562000351565b8280016001018555821562000351579182015b828111156200035057825182559160200191906001019062000333565b5b50905062000360919062000364565b5090565b5b808211156200037f57600081600090555060010162000365565b5090565b600081519050620003948162000532565b92915050565b600060208284031215620003b357620003b26200052d565b5b6000620003c38482850162000383565b91505092915050565b620003d7816200045b565b82525050565b6000602082019050620003f46000830184620003cc565b92915050565b600062000407826200048f565b915062000414836200048f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000450576200044f620004cf565b5b828202905092915050565b600062000468826200046f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620004b257607f821691505b60208210811415620004c957620004c8620004fe565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200053d816200048f565b81146200054957600080fd5b50565b61467a806200055c6000396000f3fe6080604052600436106102255760003560e01c806389b52e6511610123578063ba6dd6f0116100ab578063e2a70eaf1161006f578063e2a70eaf146107c9578063e985e9c5146107f2578063ebb315101461082f578063ef5f198514610858578063f2fde38b1461088157610225565b8063ba6dd6f0146106fe578063bb2841c514610729578063c87b56dd14610745578063cd7de45814610782578063d96a094a146107ad57610225565b8063969745e8116100f2578063969745e81461062d578063996953fc14610658578063a0bcfc7f14610683578063a22cb465146106ac578063b88d4fde146106d557610225565b806389b52e651461056f5780638da5cb5b146105ac57806395d89b41146105d757806395ea5e671461060257610225565b806342842e0e116101b15780636c0360eb116101755780636c0360eb1461049c57806370a08231146104c7578063715018a6146105045780637c8255db1461051b5780637ff9b5961461054457610225565b806342842e0e146103b7578063453c2310146103e05780634b980d671461040b5780636352211e1461043657806363adc5a51461047357610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806318160ddd146103235780631cef37e41461034e57806323b872dd146103775780633ccfd60b146103a057610225565b806301ffc9a71461022a578063026896631461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613179565b6108aa565b60405161025e919061375f565b60405180910390f35b34801561027357600080fd5b5061027c61098c565b604051610289919061375f565b60405180910390f35b34801561029e57600080fd5b506102a76109e0565b6040516102b4919061377a565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df919061321c565b610a72565b6040516102f191906136f8565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906130c3565b610af7565b005b34801561032f57600080fd5b50610338610c0f565b6040516103459190613adc565b60405180910390f35b34801561035a57600080fd5b506103756004803603810190610370919061314c565b610c15565b005b34801561038357600080fd5b5061039e60048036038101906103999190612fad565b610cae565b005b3480156103ac57600080fd5b506103b5610d0e565b005b3480156103c357600080fd5b506103de60048036038101906103d99190612fad565b610dda565b005b3480156103ec57600080fd5b506103f5610dfa565b6040516104029190613adc565b60405180910390f35b34801561041757600080fd5b50610420610e00565b60405161042d9190613adc565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061321c565b610e06565b60405161046a91906136f8565b60405180910390f35b34801561047f57600080fd5b5061049a6004803603810190610495919061321c565b610eb8565b005b3480156104a857600080fd5b506104b1610f3e565b6040516104be919061377a565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612f40565b610fcc565b6040516104fb9190613adc565b60405180910390f35b34801561051057600080fd5b50610519611084565b005b34801561052757600080fd5b50610542600480360381019061053d9190613103565b61110c565b005b34801561055057600080fd5b506105596112df565b6040516105669190613adc565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190612f40565b6112e5565b6040516105a39190613adc565b60405180910390f35b3480156105b857600080fd5b506105c1611396565b6040516105ce91906136f8565b60405180910390f35b3480156105e357600080fd5b506105ec6113bf565b6040516105f9919061377a565b60405180910390f35b34801561060e57600080fd5b50610617611451565b604051610624919061375f565b60405180910390f35b34801561063957600080fd5b50610642611464565b60405161064f9190613adc565b60405180910390f35b34801561066457600080fd5b5061066d61146a565b60405161067a9190613adc565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906131d3565b6114c9565b005b3480156106b857600080fd5b506106d360048036038101906106ce9190613083565b61155f565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613000565b6116e0565b005b34801561070a57600080fd5b50610713611742565b604051610720919061375f565b60405180910390f35b610743600480360381019061073e919061321c565b611755565b005b34801561075157600080fd5b5061076c6004803603810190610767919061321c565b611928565b604051610779919061377a565b60405180910390f35b34801561078e57600080fd5b506107976119cf565b6040516107a49190613adc565b60405180910390f35b6107c760048036038101906107c2919061321c565b611a2e565b005b3480156107d557600080fd5b506107f060048036038101906107eb919061321c565b611d0b565b005b3480156107fe57600080fd5b5061081960048036038101906108149190612f6d565b611d91565b604051610826919061375f565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613103565b611e25565b005b34801561086457600080fd5b5061087f600480360381019061087a919061314c565b611f36565b005b34801561088d57600080fd5b506108a860048036038101906108a39190612f40565b611fcf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109855750610984826120c7565b5b9050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b6060600180546109ef90613db8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b90613db8565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82612131565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39061397c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610e06565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9261219d565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb61219d565b611d91565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906138dc565b60405180910390fd5b610c0a83836121a5565b505050565b60095481565b610c1d61219d565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611396565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061399c565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b610cbf610cb961219d565b8261225e565b610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613a3c565b60405180910390fd5b610d0983838361233c565b505050565b610d1661219d565b73ffffffffffffffffffffffffffffffffffffffff16610d34611396565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d819061399c565b60405180910390fd5b610d92611396565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dd7573d6000803e3d6000fd5b50565b610df5838383604051806020016040528060008152506116e0565b505050565b600e5481565b600d5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea69061391c565b60405180910390fd5b80915050919050565b610ec061219d565b73ffffffffffffffffffffffffffffffffffffffff16610ede611396565b73ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061399c565b60405180910390fd5b8060088190555050565b600c8054610f4b90613db8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7790613db8565b8015610fc45780601f10610f9957610100808354040283529160200191610fc4565b820191906000526020600020905b815481529060010190602001808311610fa757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906138fc565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108c61219d565b73ffffffffffffffffffffffffffffffffffffffff166110aa611396565b73ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f79061399c565b60405180910390fd5b61110a6000612598565b565b61111461219d565b73ffffffffffffffffffffffffffffffffffffffff16611132611396565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f9061399c565b60405180910390fd5b60008151116111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390613a5c565b60405180910390fd5b600d5481511115611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990613a7c565b60405180910390fd5b6113b081516009546112249190613bed565b1115611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90613a9c565b60405180910390fd5b60005b81518110156112c1576112ae82828151811061128757611286613f22565b5b602002602001015182600160095461129f9190613bed565b6112a99190613bed565b61265c565b80806112b990613e1b565b915050611268565b508051600960008282546112d59190613bed565b9250508190555050565b60075481565b6000807390ca08a327be1b6d5e1c86e073c46f9a4c723a41905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161133d91906136f8565b60206040518083038186803b15801561135557600080fd5b505afa158015611369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d9190613249565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113ce90613db8565b80601f01602080910402602001604051908101604052809291908181526020018280546113fa90613db8565b80156114475780601f1061141c57610100808354040283529160200191611447565b820191906000526020600020905b81548152906001019060200180831161142a57829003601f168201915b5050505050905090565b600a60019054906101000a900460ff1681565b60085481565b600060011515600a60009054906101000a900460ff161515146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b9906139bc565b60405180910390fd5b6001905090565b6114d161219d565b73ffffffffffffffffffffffffffffffffffffffff166114ef611396565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061399c565b60405180910390fd5b80600c908051906020019061155b929190612ca1565b5050565b61156761219d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc9061381c565b60405180910390fd5b80600660006115e261219d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661168f61219d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116d4919061375f565b60405180910390a35050565b6116f16116eb61219d565b8361225e565b611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613a3c565b60405180910390fd5b61173c8484848461267a565b50505050565b600a60009054906101000a900460ff1681565b60011515600a60009054906101000a900460ff161515146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613abc565b60405180910390fd5b600081116117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613a5c565b60405180910390fd5b600d54811115611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613a7c565b60405180910390fd5b6113b0816009546118449190613bed565b1115611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061393c565b60405180910390fd5b6008543410156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c19061387c565b60405180910390fd5b60005b8181101561190b576118f8338260016009546118e99190613bed565b6118f39190613bed565b61265c565b808061190390613e1b565b9150506118cd565b50806009600082825461191e9190613bed565b9250508190555050565b606061193382612131565b611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906139fc565b60405180910390fd5b600061197c6126d6565b9050600081511161199c57604051806020016040528060008152506119c7565b806119a684612768565b6040516020016119b79291906136d4565b6040516020818303038152906040525b915050919050565b600060011515600a60019054906101000a900460ff16151514611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906139bc565b60405180910390fd5b6001905090565b60011515600a60019054906101000a900460ff16151514611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b90613abc565b60405180910390fd5b60008111611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613a5c565b60405180910390fd5b80611ad1336112e5565b1015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906138bc565b60405180910390fd5b600d54600282611b229190613c74565b1115611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613a7c565b60405180910390fd5b6002611b6e336112e5565b611b789190613c74565b611b8133610fcc565b10611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb89061385c565b60405180910390fd5b6002611bcc336112e5565b611bd69190613c74565b600282611be39190613c74565b611bec33610fcc565b611bf69190613bed565b1115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061389c565b60405180910390fd5b6113b0600282611c479190613c74565b600954611c549190613bed565b1115611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c9061393c565b60405180910390fd5b60005b600282611ca59190613c74565b811015611ce257611ccf33826001600954611cc09190613bed565b611cca9190613bed565b61265c565b8080611cda90613e1b565b915050611c98565b50600281611cf09190613c74565b60096000828254611d019190613bed565b9250508190555050565b611d1361219d565b73ffffffffffffffffffffffffffffffffffffffff16611d31611396565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061399c565b60405180910390fd5b8060078190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e2d61219d565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611396565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061399c565b60405180910390fd5b60005b8151811015611f32576001600b6000848481518110611ec657611ec5613f22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2a90613e1b565b915050611ea4565b5050565b611f3e61219d565b73ffffffffffffffffffffffffffffffffffffffff16611f5c611396565b73ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa99061399c565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611fd761219d565b73ffffffffffffffffffffffffffffffffffffffff16611ff5611396565b73ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061399c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b2906137bc565b60405180910390fd5b6120c481612598565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661221883610e06565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226982612131565b6122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f9061383c565b60405180910390fd5b60006122b383610e06565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232257508373ffffffffffffffffffffffffffffffffffffffff1661230a84610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233357506123328185611d91565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235c82610e06565b73ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a9906139dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612419906137fc565b60405180910390fd5b61242d8383836128c9565b6124386000826121a5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124889190613cce565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124df9190613bed565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126768282604051806020016040528060008152506128ce565b5050565b61268584848461233c565b61269184848484612929565b6126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c79061379c565b60405180910390fd5b50505050565b6060600c80546126e590613db8565b80601f016020809104026020016040519081016040528092919081815260200182805461271190613db8565b801561275e5780601f106127335761010080835404028352916020019161275e565b820191906000526020600020905b81548152906001019060200180831161274157829003601f168201915b5050505050905090565b606060008214156127b0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c4565b600082905060005b600082146127e25780806127cb90613e1b565b915050600a826127db9190613c43565b91506127b8565b60008167ffffffffffffffff8111156127fe576127fd613f51565b5b6040519080825280601f01601f1916602001820160405280156128305781602001600182028036833780820191505090505b5090505b600085146128bd576001826128499190613cce565b9150600a856128589190613e64565b60306128649190613bed565b60f81b81838151811061287a57612879613f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b69190613c43565b9450612834565b8093505050505b919050565b505050565b6128d88383612ac0565b6128e56000848484612929565b612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b9061379c565b60405180910390fd5b505050565b600061294a8473ffffffffffffffffffffffffffffffffffffffff16612c8e565b15612ab3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297361219d565b8786866040518563ffffffff1660e01b81526004016129959493929190613713565b602060405180830381600087803b1580156129af57600080fd5b505af19250505080156129e057506040513d601f19601f820116820180604052508101906129dd91906131a6565b60015b612a63573d8060008114612a10576040519150601f19603f3d011682016040523d82523d6000602084013e612a15565b606091505b50600081511415612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a529061379c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ab8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061395c565b60405180910390fd5b612b3981612131565b15612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b70906137dc565b60405180910390fd5b612b85600083836128c9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd59190613bed565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cad90613db8565b90600052602060002090601f016020900481019282612ccf5760008555612d16565b82601f10612ce857805160ff1916838001178555612d16565b82800160010185558215612d16579182015b82811115612d15578251825591602001919060010190612cfa565b5b509050612d239190612d27565b5090565b5b80821115612d40576000816000905550600101612d28565b5090565b6000612d57612d5284613b1c565b613af7565b90508083825260208201905082856020860282011115612d7a57612d79613f85565b5b60005b85811015612daa5781612d908882612e38565b845260208401935060208301925050600181019050612d7d565b5050509392505050565b6000612dc7612dc284613b48565b613af7565b905082815260208101848484011115612de357612de2613f8a565b5b612dee848285613d76565b509392505050565b6000612e09612e0484613b79565b613af7565b905082815260208101848484011115612e2557612e24613f8a565b5b612e30848285613d76565b509392505050565b600081359050612e47816145e8565b92915050565b600082601f830112612e6257612e61613f80565b5b8135612e72848260208601612d44565b91505092915050565b600081359050612e8a816145ff565b92915050565b600081359050612e9f81614616565b92915050565b600081519050612eb481614616565b92915050565b600082601f830112612ecf57612ece613f80565b5b8135612edf848260208601612db4565b91505092915050565b600082601f830112612efd57612efc613f80565b5b8135612f0d848260208601612df6565b91505092915050565b600081359050612f258161462d565b92915050565b600081519050612f3a8161462d565b92915050565b600060208284031215612f5657612f55613f94565b5b6000612f6484828501612e38565b91505092915050565b60008060408385031215612f8457612f83613f94565b5b6000612f9285828601612e38565b9250506020612fa385828601612e38565b9150509250929050565b600080600060608486031215612fc657612fc5613f94565b5b6000612fd486828701612e38565b9350506020612fe586828701612e38565b9250506040612ff686828701612f16565b9150509250925092565b6000806000806080858703121561301a57613019613f94565b5b600061302887828801612e38565b945050602061303987828801612e38565b935050604061304a87828801612f16565b925050606085013567ffffffffffffffff81111561306b5761306a613f8f565b5b61307787828801612eba565b91505092959194509250565b6000806040838503121561309a57613099613f94565b5b60006130a885828601612e38565b92505060206130b985828601612e7b565b9150509250929050565b600080604083850312156130da576130d9613f94565b5b60006130e885828601612e38565b92505060206130f985828601612f16565b9150509250929050565b60006020828403121561311957613118613f94565b5b600082013567ffffffffffffffff81111561313757613136613f8f565b5b61314384828501612e4d565b91505092915050565b60006020828403121561316257613161613f94565b5b600061317084828501612e7b565b91505092915050565b60006020828403121561318f5761318e613f94565b5b600061319d84828501612e90565b91505092915050565b6000602082840312156131bc576131bb613f94565b5b60006131ca84828501612ea5565b91505092915050565b6000602082840312156131e9576131e8613f94565b5b600082013567ffffffffffffffff81111561320757613206613f8f565b5b61321384828501612ee8565b91505092915050565b60006020828403121561323257613231613f94565b5b600061324084828501612f16565b91505092915050565b60006020828403121561325f5761325e613f94565b5b600061326d84828501612f2b565b91505092915050565b61327f81613d02565b82525050565b61328e81613d14565b82525050565b600061329f82613baa565b6132a98185613bc0565b93506132b9818560208601613d85565b6132c281613f99565b840191505092915050565b60006132d882613bb5565b6132e28185613bd1565b93506132f2818560208601613d85565b6132fb81613f99565b840191505092915050565b600061331182613bb5565b61331b8185613be2565b935061332b818560208601613d85565b80840191505092915050565b6000613344603283613bd1565b915061334f82613faa565b604082019050919050565b6000613367602683613bd1565b915061337282613ff9565b604082019050919050565b600061338a601c83613bd1565b915061339582614048565b602082019050919050565b60006133ad602483613bd1565b91506133b882614071565b604082019050919050565b60006133d0601983613bd1565b91506133db826140c0565b602082019050919050565b60006133f3602c83613bd1565b91506133fe826140e9565b604082019050919050565b6000613416601283613bd1565b915061342182614138565b602082019050919050565b6000613439601683613bd1565b915061344482614161565b602082019050919050565b600061345c604083613bd1565b91506134678261418a565b604082019050919050565b600061347f602583613bd1565b915061348a826141d9565b604082019050919050565b60006134a2603883613bd1565b91506134ad82614228565b604082019050919050565b60006134c5602a83613bd1565b91506134d082614277565b604082019050919050565b60006134e8602983613bd1565b91506134f3826142c6565b604082019050919050565b600061350b601683613bd1565b915061351682614315565b602082019050919050565b600061352e602083613bd1565b91506135398261433e565b602082019050919050565b6000613551602c83613bd1565b915061355c82614367565b604082019050919050565b6000613574602083613bd1565b915061357f826143b6565b602082019050919050565b6000613597601583613bd1565b91506135a2826143df565b602082019050919050565b60006135ba602983613bd1565b91506135c582614408565b604082019050919050565b60006135dd602f83613bd1565b91506135e882614457565b604082019050919050565b6000613600602183613bd1565b915061360b826144a6565b604082019050919050565b6000613623603183613bd1565b915061362e826144f5565b604082019050919050565b6000613646601783613bd1565b915061365182614544565b602082019050919050565b6000613669601683613bd1565b91506136748261456d565b602082019050919050565b600061368c601683613bd1565b915061369782614596565b602082019050919050565b60006136af600f83613bd1565b91506136ba826145bf565b602082019050919050565b6136ce81613d6c565b82525050565b60006136e08285613306565b91506136ec8284613306565b91508190509392505050565b600060208201905061370d6000830184613276565b92915050565b60006080820190506137286000830187613276565b6137356020830186613276565b61374260408301856136c5565b81810360608301526137548184613294565b905095945050505050565b60006020820190506137746000830184613285565b92915050565b6000602082019050818103600083015261379481846132cd565b905092915050565b600060208201905081810360008301526137b581613337565b9050919050565b600060208201905081810360008301526137d58161335a565b9050919050565b600060208201905081810360008301526137f58161337d565b9050919050565b60006020820190508181036000830152613815816133a0565b9050919050565b60006020820190508181036000830152613835816133c3565b9050919050565b60006020820190508181036000830152613855816133e6565b9050919050565b6000602082019050818103600083015261387581613409565b9050919050565b600060208201905081810360008301526138958161342c565b9050919050565b600060208201905081810360008301526138b58161344f565b9050919050565b600060208201905081810360008301526138d581613472565b9050919050565b600060208201905081810360008301526138f581613495565b9050919050565b60006020820190508181036000830152613915816134b8565b9050919050565b60006020820190508181036000830152613935816134db565b9050919050565b60006020820190508181036000830152613955816134fe565b9050919050565b6000602082019050818103600083015261397581613521565b9050919050565b6000602082019050818103600083015261399581613544565b9050919050565b600060208201905081810360008301526139b581613567565b9050919050565b600060208201905081810360008301526139d58161358a565b9050919050565b600060208201905081810360008301526139f5816135ad565b9050919050565b60006020820190508181036000830152613a15816135d0565b9050919050565b60006020820190508181036000830152613a35816135f3565b9050919050565b60006020820190508181036000830152613a5581613616565b9050919050565b60006020820190508181036000830152613a7581613639565b9050919050565b60006020820190508181036000830152613a958161365c565b9050919050565b60006020820190508181036000830152613ab58161367f565b9050919050565b60006020820190508181036000830152613ad5816136a2565b9050919050565b6000602082019050613af160008301846136c5565b92915050565b6000613b01613b12565b9050613b0d8282613dea565b919050565b6000604051905090565b600067ffffffffffffffff821115613b3757613b36613f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b6357613b62613f51565b5b613b6c82613f99565b9050602081019050919050565b600067ffffffffffffffff821115613b9457613b93613f51565b5b613b9d82613f99565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bf882613d6c565b9150613c0383613d6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3857613c37613e95565b5b828201905092915050565b6000613c4e82613d6c565b9150613c5983613d6c565b925082613c6957613c68613ec4565b5b828204905092915050565b6000613c7f82613d6c565b9150613c8a83613d6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cc357613cc2613e95565b5b828202905092915050565b6000613cd982613d6c565b9150613ce483613d6c565b925082821015613cf757613cf6613e95565b5b828203905092915050565b6000613d0d82613d4c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613da3578082015181840152602081019050613d88565b83811115613db2576000848401525b50505050565b60006002820490506001821680613dd057607f821691505b60208210811415613de457613de3613ef3565b5b50919050565b613df382613f99565b810181811067ffffffffffffffff82111715613e1257613e11613f51565b5b80604052505050565b6000613e2682613d6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e5957613e58613e95565b5b600182019050919050565b6000613e6f82613d6c565b9150613e7a83613d6c565b925082613e8a57613e89613ec4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f7520616c7265616479206d696e7465640000000000000000000000000000600082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f45697468657220796f7520646f6e74206861766520656e6f756768204d65746160008201527f686f757365204e667473206f7220796f7520616c7265616479206d696e746564602082015250565b7f596f7520646f206e6f74206861766520656e6f756768206d657461686f75736560008201527f206e667473000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b6145f181613d02565b81146145fc57600080fd5b50565b61460881613d14565b811461461357600080fd5b50565b61461f81613d20565b811461462a57600080fd5b50565b61463681613d6c565b811461464157600080fd5b5056fea264697066735822122001aad63f9f9c81ff04a8b466b4c009977b5da6bace0b3870a841611b3e1d669464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102255760003560e01c806389b52e6511610123578063ba6dd6f0116100ab578063e2a70eaf1161006f578063e2a70eaf146107c9578063e985e9c5146107f2578063ebb315101461082f578063ef5f198514610858578063f2fde38b1461088157610225565b8063ba6dd6f0146106fe578063bb2841c514610729578063c87b56dd14610745578063cd7de45814610782578063d96a094a146107ad57610225565b8063969745e8116100f2578063969745e81461062d578063996953fc14610658578063a0bcfc7f14610683578063a22cb465146106ac578063b88d4fde146106d557610225565b806389b52e651461056f5780638da5cb5b146105ac57806395d89b41146105d757806395ea5e671461060257610225565b806342842e0e116101b15780636c0360eb116101755780636c0360eb1461049c57806370a08231146104c7578063715018a6146105045780637c8255db1461051b5780637ff9b5961461054457610225565b806342842e0e146103b7578063453c2310146103e05780634b980d671461040b5780636352211e1461043657806363adc5a51461047357610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806318160ddd146103235780631cef37e41461034e57806323b872dd146103775780633ccfd60b146103a057610225565b806301ffc9a71461022a578063026896631461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613179565b6108aa565b60405161025e919061375f565b60405180910390f35b34801561027357600080fd5b5061027c61098c565b604051610289919061375f565b60405180910390f35b34801561029e57600080fd5b506102a76109e0565b6040516102b4919061377a565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df919061321c565b610a72565b6040516102f191906136f8565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906130c3565b610af7565b005b34801561032f57600080fd5b50610338610c0f565b6040516103459190613adc565b60405180910390f35b34801561035a57600080fd5b506103756004803603810190610370919061314c565b610c15565b005b34801561038357600080fd5b5061039e60048036038101906103999190612fad565b610cae565b005b3480156103ac57600080fd5b506103b5610d0e565b005b3480156103c357600080fd5b506103de60048036038101906103d99190612fad565b610dda565b005b3480156103ec57600080fd5b506103f5610dfa565b6040516104029190613adc565b60405180910390f35b34801561041757600080fd5b50610420610e00565b60405161042d9190613adc565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061321c565b610e06565b60405161046a91906136f8565b60405180910390f35b34801561047f57600080fd5b5061049a6004803603810190610495919061321c565b610eb8565b005b3480156104a857600080fd5b506104b1610f3e565b6040516104be919061377a565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612f40565b610fcc565b6040516104fb9190613adc565b60405180910390f35b34801561051057600080fd5b50610519611084565b005b34801561052757600080fd5b50610542600480360381019061053d9190613103565b61110c565b005b34801561055057600080fd5b506105596112df565b6040516105669190613adc565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190612f40565b6112e5565b6040516105a39190613adc565b60405180910390f35b3480156105b857600080fd5b506105c1611396565b6040516105ce91906136f8565b60405180910390f35b3480156105e357600080fd5b506105ec6113bf565b6040516105f9919061377a565b60405180910390f35b34801561060e57600080fd5b50610617611451565b604051610624919061375f565b60405180910390f35b34801561063957600080fd5b50610642611464565b60405161064f9190613adc565b60405180910390f35b34801561066457600080fd5b5061066d61146a565b60405161067a9190613adc565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906131d3565b6114c9565b005b3480156106b857600080fd5b506106d360048036038101906106ce9190613083565b61155f565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613000565b6116e0565b005b34801561070a57600080fd5b50610713611742565b604051610720919061375f565b60405180910390f35b610743600480360381019061073e919061321c565b611755565b005b34801561075157600080fd5b5061076c6004803603810190610767919061321c565b611928565b604051610779919061377a565b60405180910390f35b34801561078e57600080fd5b506107976119cf565b6040516107a49190613adc565b60405180910390f35b6107c760048036038101906107c2919061321c565b611a2e565b005b3480156107d557600080fd5b506107f060048036038101906107eb919061321c565b611d0b565b005b3480156107fe57600080fd5b5061081960048036038101906108149190612f6d565b611d91565b604051610826919061375f565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613103565b611e25565b005b34801561086457600080fd5b5061087f600480360381019061087a919061314c565b611f36565b005b34801561088d57600080fd5b506108a860048036038101906108a39190612f40565b611fcf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109855750610984826120c7565b5b9050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b6060600180546109ef90613db8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b90613db8565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82612131565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39061397c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610e06565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9261219d565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb61219d565b611d91565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906138dc565b60405180910390fd5b610c0a83836121a5565b505050565b60095481565b610c1d61219d565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611396565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c889061399c565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b610cbf610cb961219d565b8261225e565b610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613a3c565b60405180910390fd5b610d0983838361233c565b505050565b610d1661219d565b73ffffffffffffffffffffffffffffffffffffffff16610d34611396565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d819061399c565b60405180910390fd5b610d92611396565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dd7573d6000803e3d6000fd5b50565b610df5838383604051806020016040528060008152506116e0565b505050565b600e5481565b600d5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea69061391c565b60405180910390fd5b80915050919050565b610ec061219d565b73ffffffffffffffffffffffffffffffffffffffff16610ede611396565b73ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061399c565b60405180910390fd5b8060088190555050565b600c8054610f4b90613db8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7790613db8565b8015610fc45780601f10610f9957610100808354040283529160200191610fc4565b820191906000526020600020905b815481529060010190602001808311610fa757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906138fc565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108c61219d565b73ffffffffffffffffffffffffffffffffffffffff166110aa611396565b73ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f79061399c565b60405180910390fd5b61110a6000612598565b565b61111461219d565b73ffffffffffffffffffffffffffffffffffffffff16611132611396565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f9061399c565b60405180910390fd5b60008151116111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390613a5c565b60405180910390fd5b600d5481511115611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990613a7c565b60405180910390fd5b6113b081516009546112249190613bed565b1115611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90613a9c565b60405180910390fd5b60005b81518110156112c1576112ae82828151811061128757611286613f22565b5b602002602001015182600160095461129f9190613bed565b6112a99190613bed565b61265c565b80806112b990613e1b565b915050611268565b508051600960008282546112d59190613bed565b9250508190555050565b60075481565b6000807390ca08a327be1b6d5e1c86e073c46f9a4c723a41905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161133d91906136f8565b60206040518083038186803b15801561135557600080fd5b505afa158015611369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d9190613249565b92505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113ce90613db8565b80601f01602080910402602001604051908101604052809291908181526020018280546113fa90613db8565b80156114475780601f1061141c57610100808354040283529160200191611447565b820191906000526020600020905b81548152906001019060200180831161142a57829003601f168201915b5050505050905090565b600a60019054906101000a900460ff1681565b60085481565b600060011515600a60009054906101000a900460ff161515146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b9906139bc565b60405180910390fd5b6001905090565b6114d161219d565b73ffffffffffffffffffffffffffffffffffffffff166114ef611396565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061399c565b60405180910390fd5b80600c908051906020019061155b929190612ca1565b5050565b61156761219d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc9061381c565b60405180910390fd5b80600660006115e261219d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661168f61219d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116d4919061375f565b60405180910390a35050565b6116f16116eb61219d565b8361225e565b611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613a3c565b60405180910390fd5b61173c8484848461267a565b50505050565b600a60009054906101000a900460ff1681565b60011515600a60009054906101000a900460ff161515146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613abc565b60405180910390fd5b600081116117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613a5c565b60405180910390fd5b600d54811115611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613a7c565b60405180910390fd5b6113b0816009546118449190613bed565b1115611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c9061393c565b60405180910390fd5b6008543410156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c19061387c565b60405180910390fd5b60005b8181101561190b576118f8338260016009546118e99190613bed565b6118f39190613bed565b61265c565b808061190390613e1b565b9150506118cd565b50806009600082825461191e9190613bed565b9250508190555050565b606061193382612131565b611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906139fc565b60405180910390fd5b600061197c6126d6565b9050600081511161199c57604051806020016040528060008152506119c7565b806119a684612768565b6040516020016119b79291906136d4565b6040516020818303038152906040525b915050919050565b600060011515600a60019054906101000a900460ff16151514611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906139bc565b60405180910390fd5b6001905090565b60011515600a60019054906101000a900460ff16151514611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b90613abc565b60405180910390fd5b60008111611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613a5c565b60405180910390fd5b80611ad1336112e5565b1015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906138bc565b60405180910390fd5b600d54600282611b229190613c74565b1115611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613a7c565b60405180910390fd5b6002611b6e336112e5565b611b789190613c74565b611b8133610fcc565b10611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb89061385c565b60405180910390fd5b6002611bcc336112e5565b611bd69190613c74565b600282611be39190613c74565b611bec33610fcc565b611bf69190613bed565b1115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061389c565b60405180910390fd5b6113b0600282611c479190613c74565b600954611c549190613bed565b1115611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c9061393c565b60405180910390fd5b60005b600282611ca59190613c74565b811015611ce257611ccf33826001600954611cc09190613bed565b611cca9190613bed565b61265c565b8080611cda90613e1b565b915050611c98565b50600281611cf09190613c74565b60096000828254611d019190613bed565b9250508190555050565b611d1361219d565b73ffffffffffffffffffffffffffffffffffffffff16611d31611396565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061399c565b60405180910390fd5b8060078190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e2d61219d565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611396565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061399c565b60405180910390fd5b60005b8151811015611f32576001600b6000848481518110611ec657611ec5613f22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2a90613e1b565b915050611ea4565b5050565b611f3e61219d565b73ffffffffffffffffffffffffffffffffffffffff16611f5c611396565b73ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa99061399c565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611fd761219d565b73ffffffffffffffffffffffffffffffffffffffff16611ff5611396565b73ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061399c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b2906137bc565b60405180910390fd5b6120c481612598565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661221883610e06565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226982612131565b6122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f9061383c565b60405180910390fd5b60006122b383610e06565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232257508373ffffffffffffffffffffffffffffffffffffffff1661230a84610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233357506123328185611d91565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235c82610e06565b73ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a9906139dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612419906137fc565b60405180910390fd5b61242d8383836128c9565b6124386000826121a5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124889190613cce565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124df9190613bed565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126768282604051806020016040528060008152506128ce565b5050565b61268584848461233c565b61269184848484612929565b6126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c79061379c565b60405180910390fd5b50505050565b6060600c80546126e590613db8565b80601f016020809104026020016040519081016040528092919081815260200182805461271190613db8565b801561275e5780601f106127335761010080835404028352916020019161275e565b820191906000526020600020905b81548152906001019060200180831161274157829003601f168201915b5050505050905090565b606060008214156127b0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c4565b600082905060005b600082146127e25780806127cb90613e1b565b915050600a826127db9190613c43565b91506127b8565b60008167ffffffffffffffff8111156127fe576127fd613f51565b5b6040519080825280601f01601f1916602001820160405280156128305781602001600182028036833780820191505090505b5090505b600085146128bd576001826128499190613cce565b9150600a856128589190613e64565b60306128649190613bed565b60f81b81838151811061287a57612879613f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b69190613c43565b9450612834565b8093505050505b919050565b505050565b6128d88383612ac0565b6128e56000848484612929565b612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b9061379c565b60405180910390fd5b505050565b600061294a8473ffffffffffffffffffffffffffffffffffffffff16612c8e565b15612ab3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297361219d565b8786866040518563ffffffff1660e01b81526004016129959493929190613713565b602060405180830381600087803b1580156129af57600080fd5b505af19250505080156129e057506040513d601f19601f820116820180604052508101906129dd91906131a6565b60015b612a63573d8060008114612a10576040519150601f19603f3d011682016040523d82523d6000602084013e612a15565b606091505b50600081511415612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a529061379c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ab8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061395c565b60405180910390fd5b612b3981612131565b15612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b70906137dc565b60405180910390fd5b612b85600083836128c9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd59190613bed565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cad90613db8565b90600052602060002090601f016020900481019282612ccf5760008555612d16565b82601f10612ce857805160ff1916838001178555612d16565b82800160010185558215612d16579182015b82811115612d15578251825591602001919060010190612cfa565b5b509050612d239190612d27565b5090565b5b80821115612d40576000816000905550600101612d28565b5090565b6000612d57612d5284613b1c565b613af7565b90508083825260208201905082856020860282011115612d7a57612d79613f85565b5b60005b85811015612daa5781612d908882612e38565b845260208401935060208301925050600181019050612d7d565b5050509392505050565b6000612dc7612dc284613b48565b613af7565b905082815260208101848484011115612de357612de2613f8a565b5b612dee848285613d76565b509392505050565b6000612e09612e0484613b79565b613af7565b905082815260208101848484011115612e2557612e24613f8a565b5b612e30848285613d76565b509392505050565b600081359050612e47816145e8565b92915050565b600082601f830112612e6257612e61613f80565b5b8135612e72848260208601612d44565b91505092915050565b600081359050612e8a816145ff565b92915050565b600081359050612e9f81614616565b92915050565b600081519050612eb481614616565b92915050565b600082601f830112612ecf57612ece613f80565b5b8135612edf848260208601612db4565b91505092915050565b600082601f830112612efd57612efc613f80565b5b8135612f0d848260208601612df6565b91505092915050565b600081359050612f258161462d565b92915050565b600081519050612f3a8161462d565b92915050565b600060208284031215612f5657612f55613f94565b5b6000612f6484828501612e38565b91505092915050565b60008060408385031215612f8457612f83613f94565b5b6000612f9285828601612e38565b9250506020612fa385828601612e38565b9150509250929050565b600080600060608486031215612fc657612fc5613f94565b5b6000612fd486828701612e38565b9350506020612fe586828701612e38565b9250506040612ff686828701612f16565b9150509250925092565b6000806000806080858703121561301a57613019613f94565b5b600061302887828801612e38565b945050602061303987828801612e38565b935050604061304a87828801612f16565b925050606085013567ffffffffffffffff81111561306b5761306a613f8f565b5b61307787828801612eba565b91505092959194509250565b6000806040838503121561309a57613099613f94565b5b60006130a885828601612e38565b92505060206130b985828601612e7b565b9150509250929050565b600080604083850312156130da576130d9613f94565b5b60006130e885828601612e38565b92505060206130f985828601612f16565b9150509250929050565b60006020828403121561311957613118613f94565b5b600082013567ffffffffffffffff81111561313757613136613f8f565b5b61314384828501612e4d565b91505092915050565b60006020828403121561316257613161613f94565b5b600061317084828501612e7b565b91505092915050565b60006020828403121561318f5761318e613f94565b5b600061319d84828501612e90565b91505092915050565b6000602082840312156131bc576131bb613f94565b5b60006131ca84828501612ea5565b91505092915050565b6000602082840312156131e9576131e8613f94565b5b600082013567ffffffffffffffff81111561320757613206613f8f565b5b61321384828501612ee8565b91505092915050565b60006020828403121561323257613231613f94565b5b600061324084828501612f16565b91505092915050565b60006020828403121561325f5761325e613f94565b5b600061326d84828501612f2b565b91505092915050565b61327f81613d02565b82525050565b61328e81613d14565b82525050565b600061329f82613baa565b6132a98185613bc0565b93506132b9818560208601613d85565b6132c281613f99565b840191505092915050565b60006132d882613bb5565b6132e28185613bd1565b93506132f2818560208601613d85565b6132fb81613f99565b840191505092915050565b600061331182613bb5565b61331b8185613be2565b935061332b818560208601613d85565b80840191505092915050565b6000613344603283613bd1565b915061334f82613faa565b604082019050919050565b6000613367602683613bd1565b915061337282613ff9565b604082019050919050565b600061338a601c83613bd1565b915061339582614048565b602082019050919050565b60006133ad602483613bd1565b91506133b882614071565b604082019050919050565b60006133d0601983613bd1565b91506133db826140c0565b602082019050919050565b60006133f3602c83613bd1565b91506133fe826140e9565b604082019050919050565b6000613416601283613bd1565b915061342182614138565b602082019050919050565b6000613439601683613bd1565b915061344482614161565b602082019050919050565b600061345c604083613bd1565b91506134678261418a565b604082019050919050565b600061347f602583613bd1565b915061348a826141d9565b604082019050919050565b60006134a2603883613bd1565b91506134ad82614228565b604082019050919050565b60006134c5602a83613bd1565b91506134d082614277565b604082019050919050565b60006134e8602983613bd1565b91506134f3826142c6565b604082019050919050565b600061350b601683613bd1565b915061351682614315565b602082019050919050565b600061352e602083613bd1565b91506135398261433e565b602082019050919050565b6000613551602c83613bd1565b915061355c82614367565b604082019050919050565b6000613574602083613bd1565b915061357f826143b6565b602082019050919050565b6000613597601583613bd1565b91506135a2826143df565b602082019050919050565b60006135ba602983613bd1565b91506135c582614408565b604082019050919050565b60006135dd602f83613bd1565b91506135e882614457565b604082019050919050565b6000613600602183613bd1565b915061360b826144a6565b604082019050919050565b6000613623603183613bd1565b915061362e826144f5565b604082019050919050565b6000613646601783613bd1565b915061365182614544565b602082019050919050565b6000613669601683613bd1565b91506136748261456d565b602082019050919050565b600061368c601683613bd1565b915061369782614596565b602082019050919050565b60006136af600f83613bd1565b91506136ba826145bf565b602082019050919050565b6136ce81613d6c565b82525050565b60006136e08285613306565b91506136ec8284613306565b91508190509392505050565b600060208201905061370d6000830184613276565b92915050565b60006080820190506137286000830187613276565b6137356020830186613276565b61374260408301856136c5565b81810360608301526137548184613294565b905095945050505050565b60006020820190506137746000830184613285565b92915050565b6000602082019050818103600083015261379481846132cd565b905092915050565b600060208201905081810360008301526137b581613337565b9050919050565b600060208201905081810360008301526137d58161335a565b9050919050565b600060208201905081810360008301526137f58161337d565b9050919050565b60006020820190508181036000830152613815816133a0565b9050919050565b60006020820190508181036000830152613835816133c3565b9050919050565b60006020820190508181036000830152613855816133e6565b9050919050565b6000602082019050818103600083015261387581613409565b9050919050565b600060208201905081810360008301526138958161342c565b9050919050565b600060208201905081810360008301526138b58161344f565b9050919050565b600060208201905081810360008301526138d581613472565b9050919050565b600060208201905081810360008301526138f581613495565b9050919050565b60006020820190508181036000830152613915816134b8565b9050919050565b60006020820190508181036000830152613935816134db565b9050919050565b60006020820190508181036000830152613955816134fe565b9050919050565b6000602082019050818103600083015261397581613521565b9050919050565b6000602082019050818103600083015261399581613544565b9050919050565b600060208201905081810360008301526139b581613567565b9050919050565b600060208201905081810360008301526139d58161358a565b9050919050565b600060208201905081810360008301526139f5816135ad565b9050919050565b60006020820190508181036000830152613a15816135d0565b9050919050565b60006020820190508181036000830152613a35816135f3565b9050919050565b60006020820190508181036000830152613a5581613616565b9050919050565b60006020820190508181036000830152613a7581613639565b9050919050565b60006020820190508181036000830152613a958161365c565b9050919050565b60006020820190508181036000830152613ab58161367f565b9050919050565b60006020820190508181036000830152613ad5816136a2565b9050919050565b6000602082019050613af160008301846136c5565b92915050565b6000613b01613b12565b9050613b0d8282613dea565b919050565b6000604051905090565b600067ffffffffffffffff821115613b3757613b36613f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b6357613b62613f51565b5b613b6c82613f99565b9050602081019050919050565b600067ffffffffffffffff821115613b9457613b93613f51565b5b613b9d82613f99565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bf882613d6c565b9150613c0383613d6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3857613c37613e95565b5b828201905092915050565b6000613c4e82613d6c565b9150613c5983613d6c565b925082613c6957613c68613ec4565b5b828204905092915050565b6000613c7f82613d6c565b9150613c8a83613d6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cc357613cc2613e95565b5b828202905092915050565b6000613cd982613d6c565b9150613ce483613d6c565b925082821015613cf757613cf6613e95565b5b828203905092915050565b6000613d0d82613d4c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613da3578082015181840152602081019050613d88565b83811115613db2576000848401525b50505050565b60006002820490506001821680613dd057607f821691505b60208210811415613de457613de3613ef3565b5b50919050565b613df382613f99565b810181811067ffffffffffffffff82111715613e1257613e11613f51565b5b80604052505050565b6000613e2682613d6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e5957613e58613e95565b5b600182019050919050565b6000613e6f82613d6c565b9150613e7a83613d6c565b925082613e8a57613e89613ec4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f7520616c7265616479206d696e7465640000000000000000000000000000600082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f45697468657220796f7520646f6e74206861766520656e6f756768204d65746160008201527f686f757365204e667473206f7220796f7520616c7265616479206d696e746564602082015250565b7f596f7520646f206e6f74206861766520656e6f756768206d657461686f75736560008201527f206e667473000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b6145f181613d02565b81146145fc57600080fd5b50565b61460881613d14565b811461461357600080fd5b50565b61461f81613d20565b811461462a57600080fd5b50565b61463681613d6c565b811461464157600080fd5b5056fea264697066735822122001aad63f9f9c81ff04a8b466b4c009977b5da6bace0b3870a841611b3e1d669464736f6c63430008070033

Deployed Bytecode Sourcemap

34767:4066:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22613:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37730:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34949:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38042:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26007:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38482:106;;;;;;;;;;;;;:::i;:::-;;26417:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35216:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35153:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23252:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38154:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35125:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22982:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14113:94;;;;;;;;;;;;;:::i;:::-;;36763:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34823:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38595:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13462:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35023:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34903:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37412:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37834:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26673:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34982:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36214:539;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23902:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37576:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35377:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38262:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25776:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37232:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37938:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14362:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22613:305;22715:4;22767:25;22752:40;;;:11;:40;;;;:105;;;;22824:33;22809:48;;;:11;:48;;;;22752:105;:158;;;;22874:36;22898:11;22874:23;:36::i;:::-;22752:158;22732:178;;22613:305;;;:::o;37730:98::-;37774:4;37797:11;:23;37809:10;37797:23;;;;;;;;;;;;;;;;;;;;;;;;;37790:30;;37730:98;:::o;23558:100::-;23612:13;23645:5;23638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23558:100;:::o;25117:221::-;25193:7;25221:16;25229:7;25221;:16::i;:::-;25213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25306:15;:24;25322:7;25306:24;;;;;;;;;;;;;;;;;;;;;25299:31;;25117:221;;;:::o;24640:411::-;24721:13;24737:23;24752:7;24737:14;:23::i;:::-;24721:39;;24785:5;24779:11;;:2;:11;;;;24771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:5;24863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24888:37;24905:5;24912:12;:10;:12::i;:::-;24888:16;:37::i;:::-;24863:62;24841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25022:21;25031:2;25035:7;25022:8;:21::i;:::-;24710:341;24640:411;;:::o;34949:27::-;;;;:::o;38042:101::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38131:4:::1;38110:18;;:25;;;;;;;;;;;;;;;;;;38042:101:::0;:::o;26007:339::-;26202:41;26221:12;:10;:12::i;:::-;26235:7;26202:18;:41::i;:::-;26194:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26310:28;26320:4;26326:2;26330:7;26310:9;:28::i;:::-;26007:339;;;:::o;38482:106::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38540:7:::1;:5;:7::i;:::-;38532:25;;:48;38558:21;38532:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38482:106::o:0;26417:185::-;26555:39;26572:4;26578:2;26582:7;26555:39;;;;;;;;;;;;:16;:39::i;:::-;26417:185;;;:::o;35216:55::-;;;;:::o;35153:34::-;;;;:::o;23252:239::-;23324:7;23344:13;23360:7;:16;23368:7;23360:16;;;;;;;;;;;;;;;;;;;;;23344:32;;23412:1;23395:19;;:5;:19;;;;23387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23478:5;23471:12;;;23252:239;;;:::o;38154:101::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38242:5:::1;38226:13;:21;;;;38154:101:::0;:::o;35125:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22982:208::-;23054:7;23099:1;23082:19;;:5;:19;;;;23074:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23166:9;:16;23176:5;23166:16;;;;;;;;;;;;;;;;23159:23;;22982:208;;;:::o;14113:94::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14178:21:::1;14196:1;14178:9;:21::i;:::-;14113:94::o:0;36763:456::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36862:1:::1;36844:8;:15;:19;36836:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36929:17;;36910:8;:15;:36;;36902:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34892:4;37006:8;:15;36992:11;;:29;;;;:::i;:::-;:42;;36984:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37076:6;37072:98;37092:8;:15;37088:1;:19;37072:98;;;37127:43;37137:8;37146:1;37137:11;;;;;;;;:::i;:::-;;;;;;;;37168:1;37164;37150:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;37127:9;:43::i;:::-;37109:3;;;;;:::i;:::-;;;;37072:98;;;;37196:8;:15;37181:11;;:30;;;;;;;:::i;:::-;;;;;;;;36763:456:::0;:::o;34823:36::-;;;;:::o;38595:233::-;38655:4;38668:24;38693:42;38668:67;;38742:14;38766:16;38742:41;;38797:7;:17;;;38815:6;38797:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38790:32;;;;38595:233;;;:::o;13462:87::-;13508:7;13535:6;;;;;;;;;;;13528:13;;13462:87;:::o;23727:104::-;23783:13;23816:7;23809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23727:104;:::o;35023:38::-;;;;;;;;;;;;;:::o;34903:39::-;;;;:::o;37412:148::-;37461:4;37503;37485:22;;:14;;;;;;;;;;;:22;;;37477:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37550:1;37543:8;;37412:148;:::o;37834:92::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37914:4:::1;37904:7;:14;;;;;;;;;;;;:::i;:::-;;37834:92:::0;:::o;25410:295::-;25525:12;:10;:12::i;:::-;25513:24;;:8;:24;;;;25505:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25625:8;25580:18;:32;25599:12;:10;:12::i;:::-;25580:32;;;;;;;;;;;;;;;:42;25613:8;25580:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25678:8;25649:48;;25664:12;:10;:12::i;:::-;25649:48;;;25688:8;25649:48;;;;;;:::i;:::-;;;;;;;;25410:295;;:::o;26673:328::-;26848:41;26867:12;:10;:12::i;:::-;26881:7;26848:18;:41::i;:::-;26840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26954:39;26968:4;26974:2;26978:7;26987:5;26954:13;:39::i;:::-;26673:328;;;;:::o;34982:34::-;;;;;;;;;;;;;:::o;36214:539::-;36300:4;36282:22;;:14;;;;;;;;;;;:22;;;36274:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36352:1;36343:6;:10;36335:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36410:17;;36400:6;:27;;36392:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34892:4;36487:6;36473:11;;:20;;;;:::i;:::-;:32;;36465:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36564:13;;36551:9;:26;;36543:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36629:6;36625:88;36645:6;36641:1;:10;36625:88;;;36671:42;36681:10;36711:1;36707;36693:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36671:9;:42::i;:::-;36653:3;;;;;:::i;:::-;;;;36625:88;;;;36739:6;36724:11;;:21;;;;;;;:::i;:::-;;;;;;;;36214:539;:::o;23902:334::-;23975:13;24009:16;24017:7;24009;:16::i;:::-;24001:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24090:21;24114:10;:8;:10::i;:::-;24090:34;;24166:1;24148:7;24142:21;:25;:86;;;;;;;;;;;;;;;;;24194:7;24203:18;:7;:16;:18::i;:::-;24177:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24142:86;24135:93;;;23902:334;;;:::o;37576:147::-;37622:4;37666;37644:26;;:18;;;;;;;;;;;:26;;;37636:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37713:1;37706:8;;37576:147;:::o;35377:824::-;35460:4;35438:26;;:18;;;;;;;;;;;:26;;;35430:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35512:1;35503:6;:10;35495:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35591:6;35561:26;35576:10;35561:14;:26::i;:::-;:36;;35553:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;35670:17;;35665:1;35658:6;:8;;;;:::i;:::-;:29;;35650:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35784:1;35757:26;35772:10;35757:14;:26::i;:::-;:28;;;;:::i;:::-;35733:21;35743:10;35733:9;:21::i;:::-;:52;35725:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35890:1;35863:26;35878:10;35863:14;:26::i;:::-;:28;;;;:::i;:::-;35858:1;35851:6;:8;;;;:::i;:::-;35827:21;35837:10;35827:9;:21::i;:::-;:32;;;;:::i;:::-;:64;;35819:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;34892:4;36000:1;35993:6;:8;;;;:::i;:::-;35979:11;;:22;;;;:::i;:::-;:35;;35971:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36073:6;36069:90;36096:1;36089:6;:8;;;;:::i;:::-;36085:1;:12;36069:90;;;36117:42;36127:10;36157:1;36153;36139:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36117:9;:42::i;:::-;36099:3;;;;;:::i;:::-;;;;36069:90;;;;36192:1;36185:6;:8;;;;:::i;:::-;36170:11;;:23;;;;;;;:::i;:::-;;;;;;;;35377:824;:::o;38262:97::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38346:5:::1;38333:10;:18;;;;38262:97:::0;:::o;25776:164::-;25873:4;25897:18;:25;25916:5;25897:25;;;;;;;;;;;;;;;:35;25923:8;25897:35;;;;;;;;;;;;;;;;;;;;;;;;;25890:42;;25776:164;;;;:::o;37232:168::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37314:6:::1;37310:82;37326:8;:15;37322:1;:19;37310:82;;;37388:4;37361:11;:24;37373:8;37382:1;37373:11;;;;;;;;:::i;:::-;;;;;;;;37361:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37343:3;;;;;:::i;:::-;;;;37310:82;;;;37232:168:::0;:::o;37938:95::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38021:4:::1;38004:14;;:21;;;;;;;;;;;;;;;;;;37938:95:::0;:::o;14362:192::-;13693:12;:10;:12::i;:::-;13682:23;;:7;:5;:7::i;:::-;:23;;;13674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14471:1:::1;14451:22;;:8;:22;;;;14443:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14527:19;14537:8;14527:9;:19::i;:::-;14362:192:::0;:::o;15467:157::-;15552:4;15591:25;15576:40;;;:11;:40;;;;15569:47;;15467:157;;;:::o;28511:127::-;28576:4;28628:1;28600:30;;:7;:16;28608:7;28600:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28593:37;;28511:127;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;32493:174::-;32595:2;32568:15;:24;32584:7;32568:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32651:7;32647:2;32613:46;;32622:23;32637:7;32622:14;:23::i;:::-;32613:46;;;;;;;;;;;;32493:174;;:::o;28805:348::-;28898:4;28923:16;28931:7;28923;:16::i;:::-;28915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28999:13;29015:23;29030:7;29015:14;:23::i;:::-;28999:39;;29068:5;29057:16;;:7;:16;;;:51;;;;29101:7;29077:31;;:20;29089:7;29077:11;:20::i;:::-;:31;;;29057:51;:87;;;;29112:32;29129:5;29136:7;29112:16;:32::i;:::-;29057:87;29049:96;;;28805:348;;;;:::o;31797:578::-;31956:4;31929:31;;:23;31944:7;31929:14;:23::i;:::-;:31;;;31921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32039:1;32025:16;;:2;:16;;;;32017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32095:39;32116:4;32122:2;32126:7;32095:20;:39::i;:::-;32199:29;32216:1;32220:7;32199:8;:29::i;:::-;32260:1;32241:9;:15;32251:4;32241:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32289:1;32272:9;:13;32282:2;32272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32320:2;32301:7;:16;32309:7;32301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32359:7;32355:2;32340:27;;32349:4;32340:27;;;;;;;;;;;;31797:578;;;:::o;14562:173::-;14618:16;14637:6;;;;;;;;;;;14618:25;;14663:8;14654:6;;:17;;;;;;;;;;;;;;;;;;14718:8;14687:40;;14708:8;14687:40;;;;;;;;;;;;14607:128;14562:173;:::o;29495:110::-;29571:26;29581:2;29585:7;29571:26;;;;;;;;;;;;:9;:26::i;:::-;29495:110;;:::o;27883:315::-;28040:28;28050:4;28056:2;28060:7;28040:9;:28::i;:::-;28087:48;28110:4;28116:2;28120:7;28129:5;28087:22;:48::i;:::-;28079:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27883:315;;;;:::o;38369:108::-;38429:13;38462:7;38455:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38369:108;:::o;1067:723::-;1123:13;1353:1;1344:5;:10;1340:53;;;1371:10;;;;;;;;;;;;;;;;;;;;;1340:53;1403:12;1418:5;1403:20;;1434:14;1459:78;1474:1;1466:4;:9;1459:78;;1492:8;;;;;:::i;:::-;;;;1523:2;1515:10;;;;;:::i;:::-;;;1459:78;;;1547:19;1579:6;1569:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1547:39;;1597:154;1613:1;1604:5;:10;1597:154;;1641:1;1631:11;;;;;:::i;:::-;;;1708:2;1700:5;:10;;;;:::i;:::-;1687:2;:24;;;;:::i;:::-;1674:39;;1657:6;1664;1657:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1737:2;1728:11;;;;;:::i;:::-;;;1597:154;;;1775:6;1761:21;;;;;1067:723;;;;:::o;34603:126::-;;;;:::o;29832:321::-;29962:18;29968:2;29972:7;29962:5;:18::i;:::-;30013:54;30044:1;30048:2;30052:7;30061:5;30013:22;:54::i;:::-;29991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29832:321;;;:::o;33232:799::-;33387:4;33408:15;:2;:13;;;:15::i;:::-;33404:620;;;33460:2;33444:36;;;33481:12;:10;:12::i;:::-;33495:4;33501:7;33510:5;33444:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33703:1;33686:6;:13;:18;33682:272;;;33729:60;;;;;;;;;;:::i;:::-;;;;;;;;33682:272;33904:6;33898:13;33889:6;33885:2;33881:15;33874:38;33440:529;33577:41;;;33567:51;;;:6;:51;;;;33560:58;;;;;33404:620;34008:4;34001:11;;33232:799;;;;;;;:::o;30489:382::-;30583:1;30569:16;;:2;:16;;;;30561:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:16;30650:7;30642;:16::i;:::-;30641:17;30633:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:45;30733:1;30737:2;30741:7;30704:20;:45::i;:::-;30779:1;30762:9;:13;30772:2;30762:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30810:2;30791:7;:16;30799:7;30791:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30855:7;30851:2;30830:33;;30847:1;30830:33;;;;;;;;;;;;30489:382;;:::o;3532:387::-;3592:4;3800:12;3867:7;3855:20;3847:28;;3910:1;3903:4;:8;3896:15;;;3532:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:143::-;3472:5;3503:6;3497:13;3488:22;;3519:33;3546:5;3519:33;:::i;:::-;3415:143;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:619::-;4456:6;4464;4472;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:53;4717:7;4708:6;4697:9;4693:22;4672:53;:::i;:::-;4662:63;;4618:117;4774:2;4800:53;4845:7;4836:6;4825:9;4821:22;4800:53;:::i;:::-;4790:63;;4745:118;4902:2;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4873:118;4379:619;;;;;:::o;5004:943::-;5099:6;5107;5115;5123;5172:3;5160:9;5151:7;5147:23;5143:33;5140:120;;;5179:79;;:::i;:::-;5140:120;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:117;;;5763:79;;:::i;:::-;5727:117;5868:62;5922:7;5913:6;5902:9;5898:22;5868:62;:::i;:::-;5858:72;;5653:287;5004:943;;;;;;;:::o;5953:468::-;6018:6;6026;6075:2;6063:9;6054:7;6050:23;6046:32;6043:119;;;6081:79;;:::i;:::-;6043:119;6201:1;6226:53;6271:7;6262:6;6251:9;6247:22;6226:53;:::i;:::-;6216:63;;6172:117;6328:2;6354:50;6396:7;6387:6;6376:9;6372:22;6354:50;:::i;:::-;6344:60;;6299:115;5953:468;;;;;:::o;6427:474::-;6495:6;6503;6552:2;6540:9;6531:7;6527:23;6523:32;6520:119;;;6558:79;;:::i;:::-;6520:119;6678:1;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6649:117;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6427:474;;;;;:::o;6907:539::-;6991:6;7040:2;7028:9;7019:7;7015:23;7011:32;7008:119;;;7046:79;;:::i;:::-;7008:119;7194:1;7183:9;7179:17;7166:31;7224:18;7216:6;7213:30;7210:117;;;7246:79;;:::i;:::-;7210:117;7351:78;7421:7;7412:6;7401:9;7397:22;7351:78;:::i;:::-;7341:88;;7137:302;6907:539;;;;:::o;7452:323::-;7508:6;7557:2;7545:9;7536:7;7532:23;7528:32;7525:119;;;7563:79;;:::i;:::-;7525:119;7683:1;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7654:114;7452:323;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:349::-;8183:6;8232:2;8220:9;8211:7;8207:23;8203:32;8200:119;;;8238:79;;:::i;:::-;8200:119;8358:1;8383:63;8438:7;8429:6;8418:9;8414:22;8383:63;:::i;:::-;8373:73;;8329:127;8114:349;;;;:::o;8469:509::-;8538:6;8587:2;8575:9;8566:7;8562:23;8558:32;8555:119;;;8593:79;;:::i;:::-;8555:119;8741:1;8730:9;8726:17;8713:31;8771:18;8763:6;8760:30;8757:117;;;8793:79;;:::i;:::-;8757:117;8898:63;8953:7;8944:6;8933:9;8929:22;8898:63;:::i;:::-;8888:73;;8684:287;8469:509;;;;:::o;8984:329::-;9043:6;9092:2;9080:9;9071:7;9067:23;9063:32;9060:119;;;9098:79;;:::i;:::-;9060:119;9218:1;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9189:117;8984:329;;;;:::o;9319:351::-;9389:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:119;;;9444:79;;:::i;:::-;9406:119;9564:1;9589:64;9645:7;9636:6;9625:9;9621:22;9589:64;:::i;:::-;9579:74;;9535:128;9319:351;;;;:::o;9676:118::-;9763:24;9781:5;9763:24;:::i;:::-;9758:3;9751:37;9676:118;;:::o;9800:109::-;9881:21;9896:5;9881:21;:::i;:::-;9876:3;9869:34;9800:109;;:::o;9915:360::-;10001:3;10029:38;10061:5;10029:38;:::i;:::-;10083:70;10146:6;10141:3;10083:70;:::i;:::-;10076:77;;10162:52;10207:6;10202:3;10195:4;10188:5;10184:16;10162:52;:::i;:::-;10239:29;10261:6;10239:29;:::i;:::-;10234:3;10230:39;10223:46;;10005:270;9915:360;;;;:::o;10281:364::-;10369:3;10397:39;10430:5;10397:39;:::i;:::-;10452:71;10516:6;10511:3;10452:71;:::i;:::-;10445:78;;10532:52;10577:6;10572:3;10565:4;10558:5;10554:16;10532:52;:::i;:::-;10609:29;10631:6;10609:29;:::i;:::-;10604:3;10600:39;10593:46;;10373:272;10281:364;;;;:::o;10651:377::-;10757:3;10785:39;10818:5;10785:39;:::i;:::-;10840:89;10922:6;10917:3;10840:89;:::i;:::-;10833:96;;10938:52;10983:6;10978:3;10971:4;10964:5;10960:16;10938:52;:::i;:::-;11015:6;11010:3;11006:16;10999:23;;10761:267;10651:377;;;;:::o;11034:366::-;11176:3;11197:67;11261:2;11256:3;11197:67;:::i;:::-;11190:74;;11273:93;11362:3;11273:93;:::i;:::-;11391:2;11386:3;11382:12;11375:19;;11034:366;;;:::o;11406:::-;11548:3;11569:67;11633:2;11628:3;11569:67;:::i;:::-;11562:74;;11645:93;11734:3;11645:93;:::i;:::-;11763:2;11758:3;11754:12;11747:19;;11406:366;;;:::o;11778:::-;11920:3;11941:67;12005:2;12000:3;11941:67;:::i;:::-;11934:74;;12017:93;12106:3;12017:93;:::i;:::-;12135:2;12130:3;12126:12;12119:19;;11778:366;;;:::o;12150:::-;12292:3;12313:67;12377:2;12372:3;12313:67;:::i;:::-;12306:74;;12389:93;12478:3;12389:93;:::i;:::-;12507:2;12502:3;12498:12;12491:19;;12150:366;;;:::o;12522:::-;12664:3;12685:67;12749:2;12744:3;12685:67;:::i;:::-;12678:74;;12761:93;12850:3;12761:93;:::i;:::-;12879:2;12874:3;12870:12;12863:19;;12522:366;;;:::o;12894:::-;13036:3;13057:67;13121:2;13116:3;13057:67;:::i;:::-;13050:74;;13133:93;13222:3;13133:93;:::i;:::-;13251:2;13246:3;13242:12;13235:19;;12894:366;;;:::o;13266:::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13638:366;;;:::o;14010:::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:::-;20104:3;20125:67;20189:2;20184:3;20125:67;:::i;:::-;20118:74;;20201:93;20290:3;20201:93;:::i;:::-;20319:2;20314:3;20310:12;20303:19;;19962:366;;;:::o;20334:::-;20476:3;20497:67;20561:2;20556:3;20497:67;:::i;:::-;20490:74;;20573:93;20662:3;20573:93;:::i;:::-;20691:2;20686:3;20682:12;20675:19;;20334:366;;;:::o;20706:118::-;20793:24;20811:5;20793:24;:::i;:::-;20788:3;20781:37;20706:118;;:::o;20830:435::-;21010:3;21032:95;21123:3;21114:6;21032:95;:::i;:::-;21025:102;;21144:95;21235:3;21226:6;21144:95;:::i;:::-;21137:102;;21256:3;21249:10;;20830:435;;;;;:::o;21271:222::-;21364:4;21402:2;21391:9;21387:18;21379:26;;21415:71;21483:1;21472:9;21468:17;21459:6;21415:71;:::i;:::-;21271:222;;;;:::o;21499:640::-;21694:4;21732:3;21721:9;21717:19;21709:27;;21746:71;21814:1;21803:9;21799:17;21790:6;21746:71;:::i;:::-;21827:72;21895:2;21884:9;21880:18;21871:6;21827:72;:::i;:::-;21909;21977:2;21966:9;21962:18;21953:6;21909:72;:::i;:::-;22028:9;22022:4;22018:20;22013:2;22002:9;21998:18;21991:48;22056:76;22127:4;22118:6;22056:76;:::i;:::-;22048:84;;21499:640;;;;;;;:::o;22145:210::-;22232:4;22270:2;22259:9;22255:18;22247:26;;22283:65;22345:1;22334:9;22330:17;22321:6;22283:65;:::i;:::-;22145:210;;;;:::o;22361:313::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22561:9;22555:4;22551:20;22547:1;22536:9;22532:17;22525:47;22589:78;22662:4;22653:6;22589:78;:::i;:::-;22581:86;;22361:313;;;;:::o;22680:419::-;22846:4;22884:2;22873:9;22869:18;22861:26;;22933:9;22927:4;22923:20;22919:1;22908:9;22904:17;22897:47;22961:131;23087:4;22961:131;:::i;:::-;22953:139;;22680:419;;;:::o;23105:::-;23271:4;23309:2;23298:9;23294:18;23286:26;;23358:9;23352:4;23348:20;23344:1;23333:9;23329:17;23322:47;23386:131;23512:4;23386:131;:::i;:::-;23378:139;;23105:419;;;:::o;23530:::-;23696:4;23734:2;23723:9;23719:18;23711:26;;23783:9;23777:4;23773:20;23769:1;23758:9;23754:17;23747:47;23811:131;23937:4;23811:131;:::i;:::-;23803:139;;23530:419;;;:::o;23955:::-;24121:4;24159:2;24148:9;24144:18;24136:26;;24208:9;24202:4;24198:20;24194:1;24183:9;24179:17;24172:47;24236:131;24362:4;24236:131;:::i;:::-;24228:139;;23955:419;;;:::o;24380:::-;24546:4;24584:2;24573:9;24569:18;24561:26;;24633:9;24627:4;24623:20;24619:1;24608:9;24604:17;24597:47;24661:131;24787:4;24661:131;:::i;:::-;24653:139;;24380:419;;;:::o;24805:::-;24971:4;25009:2;24998:9;24994:18;24986:26;;25058:9;25052:4;25048:20;25044:1;25033:9;25029:17;25022:47;25086:131;25212:4;25086:131;:::i;:::-;25078:139;;24805:419;;;:::o;25230:::-;25396:4;25434:2;25423:9;25419:18;25411:26;;25483:9;25477:4;25473:20;25469:1;25458:9;25454:17;25447:47;25511:131;25637:4;25511:131;:::i;:::-;25503:139;;25230:419;;;:::o;25655:::-;25821:4;25859:2;25848:9;25844:18;25836:26;;25908:9;25902:4;25898:20;25894:1;25883:9;25879:17;25872:47;25936:131;26062:4;25936:131;:::i;:::-;25928:139;;25655:419;;;:::o;26080:::-;26246:4;26284:2;26273:9;26269:18;26261:26;;26333:9;26327:4;26323:20;26319:1;26308:9;26304:17;26297:47;26361:131;26487:4;26361:131;:::i;:::-;26353:139;;26080:419;;;:::o;26505:::-;26671:4;26709:2;26698:9;26694:18;26686:26;;26758:9;26752:4;26748:20;26744:1;26733:9;26729:17;26722:47;26786:131;26912:4;26786:131;:::i;:::-;26778:139;;26505:419;;;:::o;26930:::-;27096:4;27134:2;27123:9;27119:18;27111:26;;27183:9;27177:4;27173:20;27169:1;27158:9;27154:17;27147:47;27211:131;27337:4;27211:131;:::i;:::-;27203:139;;26930:419;;;:::o;27355:::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27608:9;27602:4;27598:20;27594:1;27583:9;27579:17;27572:47;27636:131;27762:4;27636:131;:::i;:::-;27628:139;;27355:419;;;:::o;27780:::-;27946:4;27984:2;27973:9;27969:18;27961:26;;28033:9;28027:4;28023:20;28019:1;28008:9;28004:17;27997:47;28061:131;28187:4;28061:131;:::i;:::-;28053:139;;27780:419;;;:::o;28205:::-;28371:4;28409:2;28398:9;28394:18;28386:26;;28458:9;28452:4;28448:20;28444:1;28433:9;28429:17;28422:47;28486:131;28612:4;28486:131;:::i;:::-;28478:139;;28205:419;;;:::o;28630:::-;28796:4;28834:2;28823:9;28819:18;28811:26;;28883:9;28877:4;28873:20;28869:1;28858:9;28854:17;28847:47;28911:131;29037:4;28911:131;:::i;:::-;28903:139;;28630:419;;;:::o;29055:::-;29221:4;29259:2;29248:9;29244:18;29236:26;;29308:9;29302:4;29298:20;29294:1;29283:9;29279:17;29272:47;29336:131;29462:4;29336:131;:::i;:::-;29328:139;;29055:419;;;:::o;29480:::-;29646:4;29684:2;29673:9;29669:18;29661:26;;29733:9;29727:4;29723:20;29719:1;29708:9;29704:17;29697:47;29761:131;29887:4;29761:131;:::i;:::-;29753:139;;29480:419;;;:::o;29905:::-;30071:4;30109:2;30098:9;30094:18;30086:26;;30158:9;30152:4;30148:20;30144:1;30133:9;30129:17;30122:47;30186:131;30312:4;30186:131;:::i;:::-;30178:139;;29905:419;;;:::o;30330:::-;30496:4;30534:2;30523:9;30519:18;30511:26;;30583:9;30577:4;30573:20;30569:1;30558:9;30554:17;30547:47;30611:131;30737:4;30611:131;:::i;:::-;30603:139;;30330:419;;;:::o;30755:::-;30921:4;30959:2;30948:9;30944:18;30936:26;;31008:9;31002:4;30998:20;30994:1;30983:9;30979:17;30972:47;31036:131;31162:4;31036:131;:::i;:::-;31028:139;;30755:419;;;:::o;31180:::-;31346:4;31384:2;31373:9;31369:18;31361:26;;31433:9;31427:4;31423:20;31419:1;31408:9;31404:17;31397:47;31461:131;31587:4;31461:131;:::i;:::-;31453:139;;31180:419;;;:::o;31605:::-;31771:4;31809:2;31798:9;31794:18;31786:26;;31858:9;31852:4;31848:20;31844:1;31833:9;31829:17;31822:47;31886:131;32012:4;31886:131;:::i;:::-;31878:139;;31605:419;;;:::o;32030:::-;32196:4;32234:2;32223:9;32219:18;32211:26;;32283:9;32277:4;32273:20;32269:1;32258:9;32254:17;32247:47;32311:131;32437:4;32311:131;:::i;:::-;32303:139;;32030:419;;;:::o;32455:::-;32621:4;32659:2;32648:9;32644:18;32636:26;;32708:9;32702:4;32698:20;32694:1;32683:9;32679:17;32672:47;32736:131;32862:4;32736:131;:::i;:::-;32728:139;;32455:419;;;:::o;32880:::-;33046:4;33084:2;33073:9;33069:18;33061:26;;33133:9;33127:4;33123:20;33119:1;33108:9;33104:17;33097:47;33161:131;33287:4;33161:131;:::i;:::-;33153:139;;32880:419;;;:::o;33305:::-;33471:4;33509:2;33498:9;33494:18;33486:26;;33558:9;33552:4;33548:20;33544:1;33533:9;33529:17;33522:47;33586:131;33712:4;33586:131;:::i;:::-;33578:139;;33305:419;;;:::o;33730:222::-;33823:4;33861:2;33850:9;33846:18;33838:26;;33874:71;33942:1;33931:9;33927:17;33918:6;33874:71;:::i;:::-;33730:222;;;;:::o;33958:129::-;33992:6;34019:20;;:::i;:::-;34009:30;;34048:33;34076:4;34068:6;34048:33;:::i;:::-;33958:129;;;:::o;34093:75::-;34126:6;34159:2;34153:9;34143:19;;34093:75;:::o;34174:311::-;34251:4;34341:18;34333:6;34330:30;34327:56;;;34363:18;;:::i;:::-;34327:56;34413:4;34405:6;34401:17;34393:25;;34473:4;34467;34463:15;34455:23;;34174:311;;;:::o;34491:307::-;34552:4;34642:18;34634:6;34631:30;34628:56;;;34664:18;;:::i;:::-;34628:56;34702:29;34724:6;34702:29;:::i;:::-;34694:37;;34786:4;34780;34776:15;34768:23;;34491:307;;;:::o;34804:308::-;34866:4;34956:18;34948:6;34945:30;34942:56;;;34978:18;;:::i;:::-;34942:56;35016:29;35038:6;35016:29;:::i;:::-;35008:37;;35100:4;35094;35090:15;35082:23;;34804:308;;;:::o;35118:98::-;35169:6;35203:5;35197:12;35187:22;;35118:98;;;:::o;35222:99::-;35274:6;35308:5;35302:12;35292:22;;35222:99;;;:::o;35327:168::-;35410:11;35444:6;35439:3;35432:19;35484:4;35479:3;35475:14;35460:29;;35327:168;;;;:::o;35501:169::-;35585:11;35619:6;35614:3;35607:19;35659:4;35654:3;35650:14;35635:29;;35501:169;;;;:::o;35676:148::-;35778:11;35815:3;35800:18;;35676:148;;;;:::o;35830:305::-;35870:3;35889:20;35907:1;35889:20;:::i;:::-;35884:25;;35923:20;35941:1;35923:20;:::i;:::-;35918:25;;36077:1;36009:66;36005:74;36002:1;35999:81;35996:107;;;36083:18;;:::i;:::-;35996:107;36127:1;36124;36120:9;36113:16;;35830:305;;;;:::o;36141:185::-;36181:1;36198:20;36216:1;36198:20;:::i;:::-;36193:25;;36232:20;36250:1;36232:20;:::i;:::-;36227:25;;36271:1;36261:35;;36276:18;;:::i;:::-;36261:35;36318:1;36315;36311:9;36306:14;;36141:185;;;;:::o;36332:348::-;36372:7;36395:20;36413:1;36395:20;:::i;:::-;36390:25;;36429:20;36447:1;36429:20;:::i;:::-;36424:25;;36617:1;36549:66;36545:74;36542:1;36539:81;36534:1;36527:9;36520:17;36516:105;36513:131;;;36624:18;;:::i;:::-;36513:131;36672:1;36669;36665:9;36654:20;;36332:348;;;;:::o;36686:191::-;36726:4;36746:20;36764:1;36746:20;:::i;:::-;36741:25;;36780:20;36798:1;36780:20;:::i;:::-;36775:25;;36819:1;36816;36813:8;36810:34;;;36824:18;;:::i;:::-;36810:34;36869:1;36866;36862:9;36854:17;;36686:191;;;;:::o;36883:96::-;36920:7;36949:24;36967:5;36949:24;:::i;:::-;36938:35;;36883:96;;;:::o;36985:90::-;37019:7;37062:5;37055:13;37048:21;37037:32;;36985:90;;;:::o;37081:149::-;37117:7;37157:66;37150:5;37146:78;37135:89;;37081:149;;;:::o;37236:126::-;37273:7;37313:42;37306:5;37302:54;37291:65;;37236:126;;;:::o;37368:77::-;37405:7;37434:5;37423:16;;37368:77;;;:::o;37451:154::-;37535:6;37530:3;37525;37512:30;37597:1;37588:6;37583:3;37579:16;37572:27;37451:154;;;:::o;37611:307::-;37679:1;37689:113;37703:6;37700:1;37697:13;37689:113;;;37788:1;37783:3;37779:11;37773:18;37769:1;37764:3;37760:11;37753:39;37725:2;37722:1;37718:10;37713:15;;37689:113;;;37820:6;37817:1;37814:13;37811:101;;;37900:1;37891:6;37886:3;37882:16;37875:27;37811:101;37660:258;37611:307;;;:::o;37924:320::-;37968:6;38005:1;37999:4;37995:12;37985:22;;38052:1;38046:4;38042:12;38073:18;38063:81;;38129:4;38121:6;38117:17;38107:27;;38063:81;38191:2;38183:6;38180:14;38160:18;38157:38;38154:84;;;38210:18;;:::i;:::-;38154:84;37975:269;37924:320;;;:::o;38250:281::-;38333:27;38355:4;38333:27;:::i;:::-;38325:6;38321:40;38463:6;38451:10;38448:22;38427:18;38415:10;38412:34;38409:62;38406:88;;;38474:18;;:::i;:::-;38406:88;38514:10;38510:2;38503:22;38293:238;38250:281;;:::o;38537:233::-;38576:3;38599:24;38617:5;38599:24;:::i;:::-;38590:33;;38645:66;38638:5;38635:77;38632:103;;;38715:18;;:::i;:::-;38632:103;38762:1;38755:5;38751:13;38744:20;;38537:233;;;:::o;38776:176::-;38808:1;38825:20;38843:1;38825:20;:::i;:::-;38820:25;;38859:20;38877:1;38859:20;:::i;:::-;38854:25;;38898:1;38888:35;;38903:18;;:::i;:::-;38888:35;38944:1;38941;38937:9;38932:14;;38776:176;;;;:::o;38958:180::-;39006:77;39003:1;38996:88;39103:4;39100:1;39093:15;39127:4;39124:1;39117:15;39144:180;39192:77;39189:1;39182:88;39289:4;39286:1;39279:15;39313:4;39310:1;39303:15;39330:180;39378:77;39375:1;39368:88;39475:4;39472:1;39465:15;39499:4;39496:1;39489:15;39516:180;39564:77;39561:1;39554:88;39661:4;39658:1;39651:15;39685:4;39682:1;39675:15;39702:180;39750:77;39747:1;39740:88;39847:4;39844:1;39837:15;39871:4;39868:1;39861:15;39888:117;39997:1;39994;39987:12;40011:117;40120:1;40117;40110:12;40134:117;40243:1;40240;40233:12;40257:117;40366:1;40363;40356:12;40380:117;40489:1;40486;40479:12;40503:102;40544:6;40595:2;40591:7;40586:2;40579:5;40575:14;40571:28;40561:38;;40503:102;;;:::o;40611:237::-;40751:34;40747:1;40739:6;40735:14;40728:58;40820:20;40815:2;40807:6;40803:15;40796:45;40611:237;:::o;40854:225::-;40994:34;40990:1;40982:6;40978:14;40971:58;41063:8;41058:2;41050:6;41046:15;41039:33;40854:225;:::o;41085:178::-;41225:30;41221:1;41213:6;41209:14;41202:54;41085:178;:::o;41269:223::-;41409:34;41405:1;41397:6;41393:14;41386:58;41478:6;41473:2;41465:6;41461:15;41454:31;41269:223;:::o;41498:175::-;41638:27;41634:1;41626:6;41622:14;41615:51;41498:175;:::o;41679:231::-;41819:34;41815:1;41807:6;41803:14;41796:58;41888:14;41883:2;41875:6;41871:15;41864:39;41679:231;:::o;41916:168::-;42056:20;42052:1;42044:6;42040:14;42033:44;41916:168;:::o;42090:172::-;42230:24;42226:1;42218:6;42214:14;42207:48;42090:172;:::o;42268:251::-;42408:34;42404:1;42396:6;42392:14;42385:58;42477:34;42472:2;42464:6;42460:15;42453:59;42268:251;:::o;42525:224::-;42665:34;42661:1;42653:6;42649:14;42642:58;42734:7;42729:2;42721:6;42717:15;42710:32;42525:224;:::o;42755:243::-;42895:34;42891:1;42883:6;42879:14;42872:58;42964:26;42959:2;42951:6;42947:15;42940:51;42755:243;:::o;43004:229::-;43144:34;43140:1;43132:6;43128:14;43121:58;43213:12;43208:2;43200:6;43196:15;43189:37;43004:229;:::o;43239:228::-;43379:34;43375:1;43367:6;43363:14;43356:58;43448:11;43443:2;43435:6;43431:15;43424:36;43239:228;:::o;43473:172::-;43613:24;43609:1;43601:6;43597:14;43590:48;43473:172;:::o;43651:182::-;43791:34;43787:1;43779:6;43775:14;43768:58;43651:182;:::o;43839:231::-;43979:34;43975:1;43967:6;43963:14;43956:58;44048:14;44043:2;44035:6;44031:15;44024:39;43839:231;:::o;44076:182::-;44216:34;44212:1;44204:6;44200:14;44193:58;44076:182;:::o;44264:171::-;44404:23;44400:1;44392:6;44388:14;44381:47;44264:171;:::o;44441:228::-;44581:34;44577:1;44569:6;44565:14;44558:58;44650:11;44645:2;44637:6;44633:15;44626:36;44441:228;:::o;44675:234::-;44815:34;44811:1;44803:6;44799:14;44792:58;44884:17;44879:2;44871:6;44867:15;44860:42;44675:234;:::o;44915:220::-;45055:34;45051:1;45043:6;45039:14;45032:58;45124:3;45119:2;45111:6;45107:15;45100:28;44915:220;:::o;45141:236::-;45281:34;45277:1;45269:6;45265:14;45258:58;45350:19;45345:2;45337:6;45333:15;45326:44;45141:236;:::o;45383:173::-;45523:25;45519:1;45511:6;45507:14;45500:49;45383:173;:::o;45562:172::-;45702:24;45698:1;45690:6;45686:14;45679:48;45562:172;:::o;45740:::-;45880:24;45876:1;45868:6;45864:14;45857:48;45740:172;:::o;45918:165::-;46058:17;46054:1;46046:6;46042:14;46035:41;45918:165;:::o;46089:122::-;46162:24;46180:5;46162:24;:::i;:::-;46155:5;46152:35;46142:63;;46201:1;46198;46191:12;46142:63;46089:122;:::o;46217:116::-;46287:21;46302:5;46287:21;:::i;:::-;46280:5;46277:32;46267:60;;46323:1;46320;46313:12;46267:60;46217:116;:::o;46339:120::-;46411:23;46428:5;46411:23;:::i;:::-;46404:5;46401:34;46391:62;;46449:1;46446;46439:12;46391:62;46339:120;:::o;46465:122::-;46538:24;46556:5;46538:24;:::i;:::-;46531:5;46528:35;46518:63;;46577:1;46574;46567:12;46518:63;46465:122;:::o

Swarm Source

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