ETH Price: $2,483.26 (-0.64%)

Token

NUDEMENCLOCK (NUDEC)
 

Overview

Max Total Supply

999 NUDEC

Holders

653

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
juandoleal.eth
Balance
3 NUDEC
0x09356AED1457D6EbB6cF6ad864Ea318Dcb815683
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:
NUDEMENCLOCK

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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




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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


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



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;
}

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

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




interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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





library Base64 {
    string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    bytes  internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000"
                                            hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
                                            hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
                                            hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return '';

        // load the table into memory
        string memory table = TABLE_ENCODE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {} lt(dataPtr, endPtr) {}
            {
                // read 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // write 4 characters
                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(        input,  0x3F))))
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }

        return result;
    }

    function decode(string memory _data) internal pure returns (bytes memory) {
        bytes memory data = bytes(_data);

        if (data.length == 0) return new bytes(0);
        require(data.length % 4 == 0, "invalid base64 decoder input");

        // load the table into memory
        bytes memory table = TABLE_DECODE;

        // every 4 characters represent 3 bytes
        uint256 decodedLen = (data.length / 4) * 3;

        // add some extra buffer at the end required for the writing
        bytes memory result = new bytes(decodedLen + 32);

        assembly {
            // padding with '='
            let lastBytes := mload(add(data, mload(data)))
            if eq(and(lastBytes, 0xFF), 0x3d) {
                decodedLen := sub(decodedLen, 1)
                if eq(and(lastBytes, 0xFFFF), 0x3d3d) {
                    decodedLen := sub(decodedLen, 1)
                }
            }

            // set the actual output length
            mstore(result, decodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 4 characters at a time
            for {} lt(dataPtr, endPtr) {}
            {
               // read 4 characters
               dataPtr := add(dataPtr, 4)
               let input := mload(dataPtr)

               // write 3 bytes
               let output := add(
                   add(
                       shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),
                       shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),
                   add(
                       shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),
                               and(mload(add(tablePtr, and(        input , 0xFF))), 0xFF)
                    )
                )
                mstore(resultPtr, shl(232, output))
                resultPtr := add(resultPtr, 3)
            }
        }

        return result;
    }
}

contract NUDEMENFT {
     function seeds(uint256) public pure returns (uint256) {}
     function walletOfOwner(address _owner) public view returns (uint256[] memory) {}
}

contract NUDEMENCLOCK is ERC721Enumerable, Ownable {
  using Strings for uint256;
  string public baseURI="https://nudemenft.com/clock";
  string public baseAniURI = "ipfs://QmRZdvzxow4BHEJGkXnCWYttStsMK6AWzDJ4cLB2Ggg7Uh";  //update
  uint256 public cost = 100.00 ether;
  uint256 public maxSupply = 999;
  uint256 public maxMintAmount = 10;
  bool public paused = false;
  mapping(uint256 => uint256) public seeds;
  NUDEMENFT nmnft;
  
  constructor() ERC721("NUDEMENCLOCK", "NUDEC") {
    mintClock(10);
    nmnft = NUDEMENFT(0x32A5C961ed3b41F512952C5Bb824B292B4444dD6); //update
  }
  
  function claimClock(uint256 nudemeNFT_id) public {
      require(!paused,"Minting Paused");
      require(totalSupply() + 1 <= maxSupply,"Max NFT supply exceeded");
      require(!_exists(nudemeNFT_id),"Token already claimed");
      uint256[] memory tids=nmnft.walletOfOwner(msg.sender);
      bool hasToken = false;
    
      for (uint i=0; i < tids.length; i++) {
         if (nudemeNFT_id == tids[i]) {
            hasToken = true;
         }
      }
      require(hasToken, "Token not found in your wallet");
      _safeMint(msg.sender, nudemeNFT_id);
      seeds[nudemeNFT_id] = nmnft.seeds(nudemeNFT_id);
  }
  
  
  function mintClock(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused,"Minting Paused");
    require(_mintAmount > 0, "At least 1 NFT to be minted");
    require(_mintAmount <= maxMintAmount,"Max mint per TX exceeded");
    require(supply + _mintAmount <= maxSupply,"Max NFT supply exceeded");

    if (msg.sender != owner()) {
          require(msg.value >= cost * _mintAmount,"Insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      uint256 tid = 10000+supply + i;
      _safeMint(msg.sender, tid);
      seeds[tid] = uint256(keccak256(abi.encodePacked(uint256(bytes32(blockhash(block.number - 1))), tid)));
    }
  }
  

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }
  
  function walletDetailsOfOwner(address _owner)
    public
    view
    returns (uint256[] memory, uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    uint256[] memory s = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
      s[i] = seeds[tokenIds[i]];
    }
    return (tokenIds, s);
  }
  
  function contractURI() public view returns (string memory) {
        return string(abi.encodePacked(baseURI, "/metadata.json"));
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "URI query for nonexistent token"
    );

    return(formatTokenURI(tokenId,seeds[tokenId]));

  }
  
  function tokenAniURI(uint256 tokenId)
    public
    view
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "URI query for nonexistent token"
    );

    return string(abi.encodePacked(baseAniURI,'/?s=',seeds[tokenId].toString()));
  }

 
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }

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

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

  function setBaseAniURI(string memory _newBaseAniURI) public onlyOwner {
    baseAniURI = _newBaseAniURI;
  }

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

  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
  
  function substring(string memory str, uint startIndex, uint endIndex) private pure returns (string memory) {
    bytes memory strBytes = bytes(str);
    bytes memory result = new bytes(endIndex-startIndex);
    for(uint i = startIndex; i < endIndex; i++) {
        result[i-startIndex] = strBytes[i];
    }
    return string(result);
  }
    
  function strToUint(string memory _str) private pure returns(uint256 res) {
    for (uint256 i = 0; i < bytes(_str).length; i++) {
        res += (uint8(bytes(_str)[i]) - 48) * 10**(bytes(_str).length - i - 1);
    }
    return (res);
  }

  function formatTokenURI(uint256 tid, uint256 seed) private view returns (string memory) {
        string memory seedStr = seed.toString();
        string memory attrA = substring(seedStr,1,11);
        string memory attrD = substring(seedStr,11,21);
        string memory attrU = substring(seedStr,21,31);
        string memory attrL = substring(seedStr,31,41);
        string memory attrT = substring(seedStr,41,51);
        string memory attrS = substring(seedStr,51,61);
        string memory attrP = substring(seedStr,61,71);
        string memory extURL = string(abi.encodePacked('"external_url":"',baseURI,'/?s=',seed.toString(),'",'));
        string memory aniURL = string(abi.encodePacked('"animation_url":"',baseURI,'/?s=',seed.toString(),'",'));
        string memory imgURL = string(abi.encodePacked('"image":"',baseURI,'/img/',tid.toString(),'.png"'));
        string memory name =string(abi.encodePacked('"name":"Nudemen #',tid.toString()));

        uint256 num;

        num = strToUint(attrD);
        if (num>1000000000) attrD="0";
        else attrD="1";
        
        num = strToUint(attrU);
        attrU= (num%101).toString();
        
        num = strToUint(attrL);
        if (num>7000000000) attrL= "100";
        else attrL= (num%100).toString();
         
        num = strToUint(attrT);
        attrT= (num%10001).toString();

        num = strToUint(attrS);
        if (num>7000000000) attrS= "100";
        else attrS= (num%100).toString();
        
        num = strToUint(attrP);
        if (num>7000000000) attrP= "4";
        else attrP= (5+num%5).toString();
        

        return string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    Base64.encode(
                        bytes(
                            abi.encodePacked(
                            '{',name,'","description":"The Nudemen Clock is an NFT collection of up to 999 unique interactive clocks living on the Ethereum blockchain.","attributes":[{"trait_type":"A","value":"',
                            attrA,'"},{"trait_type":"D","value":"',
                            attrD,'"},{"trait_type":"U","value":"',
                            attrU,'"},{"trait_type":"L","value":"',
                            attrL,'"},{"trait_type":"T","value":"',
                            attrT,'"},{"trait_type":"S","value":"',
                            attrS,'"},{"trait_type":"P","value":"',
                            attrP,'"}],',extURL,aniURL,imgURL,'}'
                            )
                        )
                    )
                )
            );
  }
}
//end

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":[{"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":"baseAniURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nudemeNFT_id","type":"uint256"}],"name":"claimClock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintClock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"","type":"uint256"}],"name":"seeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseAniURI","type":"string"}],"name":"setBaseAniURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenAniURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletDetailsOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280601b81526020017f68747470733a2f2f6e7564656d656e66742e636f6d2f636c6f636b0000000000815250600b90805190602001906200005192919062000fe3565b506040518060600160405280603581526020016200772760359139600c90805190602001906200008392919062000fe3565b5068056bc75e2d63100000600d556103e7600e55600a600f556000601060006101000a81548160ff021916908315150217905550348015620000c457600080fd5b506040518060400160405280600c81526020017f4e5544454d454e434c4f434b00000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e5544454300000000000000000000000000000000000000000000000000000081525081600090805190602001906200014992919062000fe3565b5080600190805190602001906200016292919062000fe3565b5050506200018562000179620001f260201b60201c565b620001fa60201b60201c565b62000197600a620002c060201b60201c565b7332a5c961ed3b41f512952c5bb824b292b4444dd6601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062001885565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000620002d26200055860201b60201c565b9050601060009054906101000a900460ff161562000327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031e9062001586565b60405180910390fd5b600082116200036d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036490620014dc565b60405180910390fd5b600f54821115620003b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ac9062001520565b60405180910390fd5b600e548282620003c69190620015d5565b11156200040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004019062001476565b60405180910390fd5b6200041a6200056560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004a35781600d546200045d919062001632565b341015620004a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049990620014fe565b60405180910390fd5b5b6000600190505b828111620005535760008183612710620004c59190620015d5565b620004d19190620015d5565b9050620004e533826200058f60201b60201c565b600143620004f4919062001693565b4060001c816040516020016200050c929190620013f2565b6040516020818303038152906040528051906020012060001c60116000838152602001908152602001600020819055505080806200054a90620017a4565b915050620004aa565b505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005b1828260405180602001604052806000815250620005b560201b60201c565b5050565b620005c783836200062360201b60201c565b620005dc60008484846200080960201b60201c565b6200061e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006159062001498565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000696576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068d9062001564565b60405180910390fd5b620006a781620009c360201b60201c565b15620006ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e190620014ba565b60405180910390fd5b620006fe6000838362000a2f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007509190620015d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620008378473ffffffffffffffffffffffffffffffffffffffff1662000b7660201b620022651760201c565b15620009b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000869620001f260201b60201c565b8786866040518563ffffffff1660e01b81526004016200088d949392919062001422565b602060405180830381600087803b158015620008a857600080fd5b505af1925050508015620008dc57506040513d601f19601f82011682018060405250810190620008d99190620010aa565b60015b62000965573d80600081146200090f576040519150601f19603f3d011682016040523d82523d6000602084013e62000914565b606091505b506000815114156200095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009549062001498565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009bb565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000a4783838362000b8960201b620022781760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a945762000a8e8162000b8e60201b60201c565b62000adc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000adb5762000ada838262000bd760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b295762000b238162000d5460201b60201c565b62000b71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000b705762000b6f828262000e9c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000bf18462000f2860201b620018931760201c565b62000bfd919062001693565b905060006007600084815260200190815260200160002054905081811462000ce3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000d6a919062001693565b905060006009600084815260200190815260200160002054905060006008838154811062000dc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000e0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000eb48362000f2860201b620018931760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f939062001542565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000ff1906200176e565b90600052602060002090601f01602090048101928262001015576000855562001061565b82601f106200103057805160ff191683800117855562001061565b8280016001018555821562001061579182015b828111156200106057825182559160200191906001019062001043565b5b50905062001070919062001074565b5090565b5b808211156200108f57600081600090555060010162001075565b5090565b600081519050620010a4816200186b565b92915050565b600060208284031215620010bd57600080fd5b6000620010cd8482850162001093565b91505092915050565b620010e181620016ce565b82525050565b6000620010f482620015a8565b620011008185620015b3565b93506200111281856020860162001738565b6200111d816200185a565b840191505092915050565b600062001137601783620015c4565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b600062001179603283620015c4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000620011e1601c83620015c4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062001223601b83620015c4565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b600062001265601283620015c4565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000620012a7601883620015c4565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b6000620012e9602a83620015c4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600062001351602083620015c4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600062001393600e83620015c4565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b620013d1816200172e565b82525050565b620013ec620013e6826200172e565b620017f2565b82525050565b6000620014008285620013d7565b602082019150620014128284620013d7565b6020820191508190509392505050565b6000608082019050620014396000830187620010d6565b620014486020830186620010d6565b620014576040830185620013c6565b81810360608301526200146b8184620010e7565b905095945050505050565b60006020820190508181036000830152620014918162001128565b9050919050565b60006020820190508181036000830152620014b3816200116a565b9050919050565b60006020820190508181036000830152620014d581620011d2565b9050919050565b60006020820190508181036000830152620014f78162001214565b9050919050565b60006020820190508181036000830152620015198162001256565b9050919050565b600060208201905081810360008301526200153b8162001298565b9050919050565b600060208201905081810360008301526200155d81620012da565b9050919050565b600060208201905081810360008301526200157f8162001342565b9050919050565b60006020820190508181036000830152620015a18162001384565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620015e2826200172e565b9150620015ef836200172e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620016275762001626620017fc565b5b828201905092915050565b60006200163f826200172e565b91506200164c836200172e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620016885762001687620017fc565b5b828202905092915050565b6000620016a0826200172e565b9150620016ad836200172e565b925082821015620016c357620016c2620017fc565b5b828203905092915050565b6000620016db826200170e565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620017585780820151818401526020810190506200173b565b8381111562001768576000848401525b50505050565b600060028204905060018216806200178757607f821691505b602082108114156200179e576200179d6200182b565b5b50919050565b6000620017b1826200172e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620017e757620017e6620017fc565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6200187681620016e2565b81146200188257600080fd5b50565b615e9280620018956000396000f3fe6080604052600436106102255760003560e01c806357b9aee411610123578063a22cb465116100ab578063e8a3d4851161006f578063e8a3d485146107fe578063e985e9c514610829578063f0503e8014610866578063f2fde38b146108a3578063f3f2032a146108cc57610225565b8063a22cb4651461071b578063b88d4fde14610744578063c87b56dd1461076d578063d5abeb01146107aa578063d7823bbf146107d557610225565b80636c0360eb116100f25780636c0360eb1461064657806370a0823114610671578063715018a6146106ae5780638da5cb5b146106c557806395d89b41146106f057610225565b806357b9aee41461058a5780635c975abb146105b55780636352211e146105e057806364eed1c21461061d57610225565b8063239c70ae116101b157806342842e0e1161017557806342842e0e14610495578063438b6300146104be57806344a0d68a146104fb5780634f6ccce71461052457806355f804b31461056157610225565b8063239c70ae146103de57806323b872dd146104095780632d5535f6146104325780632f745c591461044e5780633ccfd60b1461048b57610225565b8063088a4ed0116101f8578063088a4ed0146102f8578063095ea7b31461032157806313faede61461034a57806318160ddd146103755780632236c495146103a057610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613fa0565b610909565b60405161025e91906153e2565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613f77565b610983565b005b34801561029c57600080fd5b506102a5610a1c565b6040516102b291906153fd565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190614033565b610aae565b6040516102ef9190615322565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190614033565b610b33565b005b34801561032d57600080fd5b5061034860048036038101906103439190613efa565b610bb9565b005b34801561035657600080fd5b5061035f610cd1565b60405161036c919061573f565b60405180910390f35b34801561038157600080fd5b5061038a610cd7565b604051610397919061573f565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613d8f565b610ce4565b6040516103d59291906153ab565b60405180910390f35b3480156103ea57600080fd5b506103f3610eef565b604051610400919061573f565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613df4565b610ef5565b005b61044c60048036038101906104479190614033565b610f55565b005b34801561045a57600080fd5b5061047560048036038101906104709190613efa565b6111b5565b604051610482919061573f565b60405180910390f35b61049361125a565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613df4565b61134f565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613d8f565b61136f565b6040516104f29190615389565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190614033565b611469565b005b34801561053057600080fd5b5061054b60048036038101906105469190614033565b6114ef565b604051610558919061573f565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190613ff2565b611586565b005b34801561059657600080fd5b5061059f61161c565b6040516105ac91906153fd565b60405180910390f35b3480156105c157600080fd5b506105ca6116aa565b6040516105d791906153e2565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190614033565b6116bd565b6040516106149190615322565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613ff2565b61176f565b005b34801561065257600080fd5b5061065b611805565b60405161066891906153fd565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190613d8f565b611893565b6040516106a5919061573f565b60405180910390f35b3480156106ba57600080fd5b506106c361194b565b005b3480156106d157600080fd5b506106da6119d3565b6040516106e79190615322565b60405180910390f35b3480156106fc57600080fd5b506107056119fd565b60405161071291906153fd565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190613ebe565b611a8f565b005b34801561075057600080fd5b5061076b60048036038101906107669190613e43565b611c10565b005b34801561077957600080fd5b50610794600480360381019061078f9190614033565b611c72565b6040516107a191906153fd565b60405180910390f35b3480156107b657600080fd5b506107bf611ce0565b6040516107cc919061573f565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190614033565b611ce6565b005b34801561080a57600080fd5b5061081361200a565b60405161082091906153fd565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613db8565b612032565b60405161085d91906153e2565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190614033565b6120c6565b60405161089a919061573f565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613d8f565b6120de565b005b3480156108d857600080fd5b506108f360048036038101906108ee9190614033565b6121d6565b60405161090091906153fd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097c575061097b8261227d565b5b9050919050565b61098b61235f565b73ffffffffffffffffffffffffffffffffffffffff166109a96119d3565b73ffffffffffffffffffffffffffffffffffffffff16146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061565f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a2b90615c30565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790615c30565b8015610aa45780601f10610a7957610100808354040283529160200191610aa4565b820191906000526020600020905b815481529060010190602001808311610a8757829003601f168201915b5050505050905090565b6000610ab982612367565b610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef9061563f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b3b61235f565b73ffffffffffffffffffffffffffffffffffffffff16610b596119d3565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061565f565b60405180910390fd5b80600f8190555050565b6000610bc4826116bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c906156bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5461235f565b73ffffffffffffffffffffffffffffffffffffffff161480610c835750610c8281610c7d61235f565b612032565b5b610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061559f565b60405180910390fd5b610ccc83836123d3565b505050565b600d5481565b6000600880549050905090565b6060806000610cf284611893565b905060008167ffffffffffffffff811115610d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d645781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610da9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610dd75781602001602082028036833780820191505090505b50905060005b83811015610ee057610def87826111b5565b838281518110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060116000848381518110610e71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054828281518110610ec1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ed890615c62565b915050610ddd565b50818194509450505050915091565b600f5481565b610f06610f0061235f565b8261248c565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906156df565b60405180910390fd5b610f5083838361256a565b505050565b6000610f5f610cd7565b9050601060009054906101000a900460ff1615610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061569f565b60405180910390fd5b60008211610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb9061551f565b60405180910390fd5b600f54821115611039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611030906155bf565b60405180910390fd5b600e54828261104891906158b3565b1115611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061541f565b60405180910390fd5b6110916119d3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111145781600d546110d19190615aab565b341015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a9061557f565b60405180910390fd5b5b6000600190505b8281116111b0576000818361271061113391906158b3565b61113d91906158b3565b905061114933826127c6565b6001436111569190615b05565b4060001c8160405160200161116c9291906152f6565b6040516020818303038152906040528051906020012060001c60116000838152602001908152602001600020819055505080806111a890615c62565b91505061111b565b505050565b60006111c083611893565b8210611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061545f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61126261235f565b73ffffffffffffffffffffffffffffffffffffffff166112806119d3565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061565f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112fc906152e1565b60006040518083038185875af1925050503d8060008114611339576040519150601f19603f3d011682016040523d82523d6000602084013e61133e565b606091505b505090508061134c57600080fd5b50565b61136a83838360405180602001604052806000815250611c10565b505050565b6060600061137c83611893565b905060008167ffffffffffffffff8111156113c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113ee5781602001602082028036833780820191505090505b50905060005b8281101561145e5761140685826111b5565b82828151811061143f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061145690615c62565b9150506113f4565b508092505050919050565b61147161235f565b73ffffffffffffffffffffffffffffffffffffffff1661148f6119d3565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061565f565b60405180910390fd5b80600d8190555050565b60006114f9610cd7565b821061153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611531906156ff565b60405180910390fd5b60088281548110611574577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61158e61235f565b73ffffffffffffffffffffffffffffffffffffffff166115ac6119d3565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f99061565f565b60405180910390fd5b80600b9080519060200190611618929190613b08565b5050565b600c805461162990615c30565b80601f016020809104026020016040519081016040528092919081815260200182805461165590615c30565b80156116a25780601f10611677576101008083540402835291602001916116a2565b820191906000526020600020905b81548152906001019060200180831161168557829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906155ff565b60405180910390fd5b80915050919050565b61177761235f565b73ffffffffffffffffffffffffffffffffffffffff166117956119d3565b73ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e29061565f565b60405180910390fd5b80600c9080519060200190611801929190613b08565b5050565b600b805461181290615c30565b80601f016020809104026020016040519081016040528092919081815260200182805461183e90615c30565b801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906155df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61195361235f565b73ffffffffffffffffffffffffffffffffffffffff166119716119d3565b73ffffffffffffffffffffffffffffffffffffffff16146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be9061565f565b60405180910390fd5b6119d160006127e4565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a0c90615c30565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3890615c30565b8015611a855780601f10611a5a57610100808354040283529160200191611a85565b820191906000526020600020905b815481529060010190602001808311611a6857829003601f168201915b5050505050905090565b611a9761235f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc906154ff565b60405180910390fd5b8060056000611b1261235f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bbf61235f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c0491906153e2565b60405180910390a35050565b611c21611c1b61235f565b8361248c565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c57906156df565b60405180910390fd5b611c6c848484846128aa565b50505050565b6060611c7d82612367565b611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb39061543f565b60405180910390fd5b611cd9826011600085815260200190815260200160002054612906565b9050919050565b600e5481565b601060009054906101000a900460ff1615611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d9061569f565b60405180910390fd5b600e546001611d43610cd7565b611d4d91906158b3565b1115611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061541f565b60405180910390fd5b611d9781612367565b15611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce9061553f565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300336040518263ffffffff1660e01b8152600401611e349190615322565b60006040518083038186803b158015611e4c57600080fd5b505afa158015611e60573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611e899190613f36565b90506000805b8251811015611ef857828181518110611ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151841415611ee557600191505b8080611ef090615c62565b915050611e8f565b5080611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061571f565b60405180910390fd5b611f4333846127c6565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0503e80846040518263ffffffff1660e01b8152600401611f9e919061573f565b60206040518083038186803b158015611fb657600080fd5b505afa158015611fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fee919061405c565b6011600085815260200190815260200160002081905550505050565b6060600b60405160200161201e91906150a5565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6120e661235f565b73ffffffffffffffffffffffffffffffffffffffff166121046119d3565b73ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061565f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c19061549f565b60405180910390fd5b6121d3816127e4565b50565b60606121e182612367565b612220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122179061543f565b60405180910390fd5b600c61223e6011600085815260200190815260200160002054612cdc565b60405160200161224f929190615076565b6040516020818303038152906040529050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061234857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612358575061235782612e89565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612446836116bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061249782612367565b6124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cd9061555f565b60405180910390fd5b60006124e1836116bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255057508373ffffffffffffffffffffffffffffffffffffffff1661253884610aae565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256157506125608185612032565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661258a826116bd565b73ffffffffffffffffffffffffffffffffffffffff16146125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061567f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906154df565b60405180910390fd5b61265b838383612ef3565b6126666000826123d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b69190615b05565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461270d91906158b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6127e0828260405180602001604052806000815250613007565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128b584848461256a565b6128c184848484613062565b612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f79061547f565b60405180910390fd5b50505050565b6060600061291383612cdc565b90506000612924826001600b6131f9565b9050600061293583600b60156131f9565b90506000612946846015601f6131f9565b9050600061295785601f60296131f9565b9050600061296886602960336131f9565b90506000612979876033603d6131f9565b9050600061298a88603d60476131f9565b90506000600b6129998c612cdc565b6040516020016129aa9291906150c7565b60405160208183030381529060405290506000600b6129c88d612cdc565b6040516020016129d992919061512e565b60405160208183030381529060405290506000600b6129f78f612cdc565b604051602001612a08929190615173565b60405160208183030381529060405290506000612a248f612cdc565b604051602001612a34919061510c565b60405160208183030381529060405290506000612a508b613367565b9050633b9aca00811115612a9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509a50612ad4565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509a505b612add8a613367565b9050612af4606582612aef9190615cb5565b612cdc565b9950612aff89613367565b90506401a13b8600811115612b4b576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509850612b63565b612b60606482612b5b9190615cb5565b612cdc565b98505b612b6c88613367565b9050612b8461271182612b7f9190615cb5565b612cdc565b9750612b8f87613367565b90506401a13b8600811115612bdb576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509650612bf3565b612bf0606482612beb9190615cb5565b612cdc565b96505b612bfc86613367565b90506401a13b8600811115612c48576040518060400160405280600181526020017f34000000000000000000000000000000000000000000000000000000000000008152509550612c6c565b612c69600582612c589190615cb5565b6005612c6491906158b3565b612cdc565b95505b612ca8828d8d8d8d8d8d8d8d8d8d604051602001612c949b9a999897969594939291906151b8565b604051602081830303815290604052613423565b604051602001612cb891906152bf565b6040516020818303038152906040529d505050505050505050505050505092915050565b60606000821415612d24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e84565b600082905060005b60008214612d56578080612d3f90615c62565b915050600a82612d4f9190615909565b9150612d2c565b60008167ffffffffffffffff811115612d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612dca5781602001600182028036833780820191505090505b5090505b60008514612e7d57600182612de39190615b05565b9150600a85612df29190615cb5565b6030612dfe91906158b3565b60f81b818381518110612e3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e769190615909565b9450612dce565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612efe838383612278565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f4157612f3c816135c2565b612f80565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7f57612f7e838261360b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fc357612fbe81613778565b613002565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130015761300082826138bb565b5b5b505050565b613011838361393a565b61301e6000848484613062565b61305d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130549061547f565b60405180910390fd5b505050565b60006130838473ffffffffffffffffffffffffffffffffffffffff16612265565b156131ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ac61235f565b8786866040518563ffffffff1660e01b81526004016130ce949392919061533d565b602060405180830381600087803b1580156130e857600080fd5b505af192505050801561311957506040513d601f19601f820116820180604052508101906131169190613fc9565b60015b61319c573d8060008114613149576040519150601f19603f3d011682016040523d82523d6000602084013e61314e565b606091505b50600081511415613194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318b9061547f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131f1565b600190505b949350505050565b606060008490506000848461320e9190615b05565b67ffffffffffffffff81111561324d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561327f5781602001600182028036833780820191505090505b50905060008590505b8481101561335a578281815181106132c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8287836132e19190615b05565b81518110613318577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061335290615c62565b915050613288565b5080925050509392505050565b600080600090505b825181101561341d5760018184516133879190615b05565b6133919190615b05565b600a61339d919061598d565b60308483815181106133d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c6133f09190615b39565b60ff166133fd9190615aab565b8261340891906158b3565b9150808061341590615c62565b91505061336f565b50919050565b6060600082511415613446576040518060200160405280600081525090506135bd565b6000604051806060016040528060408152602001615e1d604091399050600060036002855161347591906158b3565b61347f9190615909565b600461348b9190615aab565b9050600060208261349c91906158b3565b67ffffffffffffffff8111156134db577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561350d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561357c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613521565b60038951066001811461359657600281146135a6576135b1565b613d3d60f01b60028303526135b1565b603d60f81b60018303525b50505050508093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161361884611893565b6136229190615b05565b9050600060076000848152602001908152602001600020549050818114613707576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061378c9190615b05565b90506000600960008481526020019081526020016000205490506000600883815481106137e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061382a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061389f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138c683611893565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a19061561f565b60405180910390fd5b6139b381612367565b156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea906154bf565b60405180910390fd5b6139ff60008383612ef3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a4f91906158b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613b1490615c30565b90600052602060002090601f016020900481019282613b365760008555613b7d565b82601f10613b4f57805160ff1916838001178555613b7d565b82800160010185558215613b7d579182015b82811115613b7c578251825591602001919060010190613b61565b5b509050613b8a9190613b8e565b5090565b5b80821115613ba7576000816000905550600101613b8f565b5090565b6000613bbe613bb98461578b565b61575a565b90508083825260208201905082856020860282011115613bdd57600080fd5b60005b85811015613c0d5781613bf38882613d7a565b845260208401935060208301925050600181019050613be0565b5050509392505050565b6000613c2a613c25846157b7565b61575a565b905082815260208101848484011115613c4257600080fd5b613c4d848285615bee565b509392505050565b6000613c68613c63846157e7565b61575a565b905082815260208101848484011115613c8057600080fd5b613c8b848285615bee565b509392505050565b600081359050613ca281615dc0565b92915050565b600082601f830112613cb957600080fd5b8151613cc9848260208601613bab565b91505092915050565b600081359050613ce181615dd7565b92915050565b600081359050613cf681615dee565b92915050565b600081519050613d0b81615dee565b92915050565b600082601f830112613d2257600080fd5b8135613d32848260208601613c17565b91505092915050565b600082601f830112613d4c57600080fd5b8135613d5c848260208601613c55565b91505092915050565b600081359050613d7481615e05565b92915050565b600081519050613d8981615e05565b92915050565b600060208284031215613da157600080fd5b6000613daf84828501613c93565b91505092915050565b60008060408385031215613dcb57600080fd5b6000613dd985828601613c93565b9250506020613dea85828601613c93565b9150509250929050565b600080600060608486031215613e0957600080fd5b6000613e1786828701613c93565b9350506020613e2886828701613c93565b9250506040613e3986828701613d65565b9150509250925092565b60008060008060808587031215613e5957600080fd5b6000613e6787828801613c93565b9450506020613e7887828801613c93565b9350506040613e8987828801613d65565b925050606085013567ffffffffffffffff811115613ea657600080fd5b613eb287828801613d11565b91505092959194509250565b60008060408385031215613ed157600080fd5b6000613edf85828601613c93565b9250506020613ef085828601613cd2565b9150509250929050565b60008060408385031215613f0d57600080fd5b6000613f1b85828601613c93565b9250506020613f2c85828601613d65565b9150509250929050565b600060208284031215613f4857600080fd5b600082015167ffffffffffffffff811115613f6257600080fd5b613f6e84828501613ca8565b91505092915050565b600060208284031215613f8957600080fd5b6000613f9784828501613cd2565b91505092915050565b600060208284031215613fb257600080fd5b6000613fc084828501613ce7565b91505092915050565b600060208284031215613fdb57600080fd5b6000613fe984828501613cfc565b91505092915050565b60006020828403121561400457600080fd5b600082013567ffffffffffffffff81111561401e57600080fd5b61402a84828501613d3b565b91505092915050565b60006020828403121561404557600080fd5b600061405384828501613d65565b91505092915050565b60006020828403121561406e57600080fd5b600061407c84828501613d7a565b91505092915050565b60006140918383615041565b60208301905092915050565b6140a681615b6d565b82525050565b60006140b78261583c565b6140c1818561586a565b93506140cc83615817565b8060005b838110156140fd5781516140e48882614085565b97506140ef8361585d565b9250506001810190506140d0565b5085935050505092915050565b61411381615b7f565b82525050565b600061412482615847565b61412e818561587b565b935061413e818560208601615bfd565b61414781615da2565b840191505092915050565b600061415d82615852565b6141678185615897565b9350614177818560208601615bfd565b61418081615da2565b840191505092915050565b600061419682615852565b6141a081856158a8565b93506141b0818560208601615bfd565b80840191505092915050565b600081546141c981615c30565b6141d381866158a8565b945060018216600081146141ee57600181146141ff57614232565b60ff19831686528186019350614232565b61420885615827565b60005b8381101561422a5781548189015260018201915060208101905061420b565b838801955050505b50505092915050565b60006142486010836158a8565b91507f2265787465726e616c5f75726c223a22000000000000000000000000000000006000830152601082019050919050565b6000614288601783615897565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b60006142c8601f83615897565b91507f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006000830152602082019050919050565b6000614308602b83615897565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061436e603283615897565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006143d4602683615897565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061443a6002836158a8565b91507f222c0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061447a6004836158a8565b91507f2f3f733d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006144ba601c83615897565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006144fa6011836158a8565b91507f226e616d65223a224e7564656d656e20230000000000000000000000000000006000830152601182019050919050565b600061453a6005836158a8565b91507f2f696d672f0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b600061457a600e836158a8565b91507f2f6d657461646174612e6a736f6e0000000000000000000000000000000000006000830152600e82019050919050565b60006145ba602483615897565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614620601983615897565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006146606011836158a8565b91507f22616e696d6174696f6e5f75726c223a220000000000000000000000000000006000830152601182019050919050565b60006146a0601b83615897565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b60006146e0601583615897565b91507f546f6b656e20616c726561647920636c61696d656400000000000000000000006000830152602082019050919050565b6000614720602c83615897565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614786601e836158a8565b91507f227d2c7b2274726169745f74797065223a224c222c2276616c7565223a2200006000830152601e82019050919050565b60006147c6601e836158a8565b91507f227d2c7b2274726169745f74797065223a2253222c2276616c7565223a2200006000830152601e82019050919050565b6000614806601283615897565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000614846603883615897565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006148ac601883615897565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b60006148ec601e836158a8565b91507f227d2c7b2274726169745f74797065223a2255222c2276616c7565223a2200006000830152601e82019050919050565b600061492c602a83615897565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614992602983615897565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006149f86004836158a8565b91507f227d5d2c000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614a38601e836158a8565b91507f227d2c7b2274726169745f74797065223a2244222c2276616c7565223a2200006000830152601e82019050919050565b6000614a786009836158a8565b91507f22696d616765223a2200000000000000000000000000000000000000000000006000830152600982019050919050565b6000614ab8601e836158a8565b91507f227d2c7b2274726169745f74797065223a2254222c2276616c7565223a2200006000830152601e82019050919050565b6000614af8602083615897565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614b386001836158a8565b91507f7d000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614b78602c83615897565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614bde602083615897565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614c1e60ac836158a8565b91507f222c226465736372697074696f6e223a22546865204e7564656d656e20436c6f60008301527f636b20697320616e204e465420636f6c6c656374696f6e206f6620757020746f60208301527f2039393920756e6971756520696e74657261637469766520636c6f636b73206c60408301527f6976696e67206f6e2074686520457468657265756d20626c6f636b636861696e60608301527f2e222c2261747472696275746573223a5b7b2274726169745f74797065223a2260808301527f41222c2276616c7565223a22000000000000000000000000000000000000000060a083015260ac82019050919050565b6000614d1c601e836158a8565b91507f227d2c7b2274726169745f74797065223a2250222c2276616c7565223a2200006000830152601e82019050919050565b6000614d5c602983615897565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dc26005836158a8565b91507f2e706e67220000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614e026001836158a8565b91507f7b000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614e42600e83615897565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b6000614e82602183615897565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ee8601d836158a8565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b6000614f2860008361588c565b9150600082019050919050565b6000614f42603183615897565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614fa8602c83615897565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061500e601e83615897565b91507f546f6b656e206e6f7420666f756e6420696e20796f75722077616c6c657400006000830152602082019050919050565b61504a81615bd7565b82525050565b61505981615bd7565b82525050565b61507061506b82615bd7565b615cab565b82525050565b600061508282856141bc565b915061508d8261446d565b9150615099828461418b565b91508190509392505050565b60006150b182846141bc565b91506150bc8261456d565b915081905092915050565b60006150d28261423b565b91506150de82856141bc565b91506150e98261446d565b91506150f5828461418b565b91506151008261442d565b91508190509392505050565b6000615117826144ed565b9150615123828461418b565b915081905092915050565b600061513982614653565b915061514582856141bc565b91506151508261446d565b915061515c828461418b565b91506151678261442d565b91508190509392505050565b600061517e82614a6b565b915061518a82856141bc565b91506151958261452d565b91506151a1828461418b565b91506151ac82614db5565b91508190509392505050565b60006151c382614df5565b91506151cf828e61418b565b91506151da82614c11565b91506151e6828d61418b565b91506151f182614a2b565b91506151fd828c61418b565b9150615208826148df565b9150615214828b61418b565b915061521f82614779565b915061522b828a61418b565b915061523682614aab565b9150615242828961418b565b915061524d826147b9565b9150615259828861418b565b915061526482614d0f565b9150615270828761418b565b915061527b826149eb565b9150615287828661418b565b9150615293828561418b565b915061529f828461418b565b91506152aa82614b2b565b91508190509c9b505050505050505050505050565b60006152ca82614edb565b91506152d6828461418b565b915081905092915050565b60006152ec82614f1b565b9150819050919050565b6000615302828561505f565b602082019150615312828461505f565b6020820191508190509392505050565b6000602082019050615337600083018461409d565b92915050565b6000608082019050615352600083018761409d565b61535f602083018661409d565b61536c6040830185615050565b818103606083015261537e8184614119565b905095945050505050565b600060208201905081810360008301526153a381846140ac565b905092915050565b600060408201905081810360008301526153c581856140ac565b905081810360208301526153d981846140ac565b90509392505050565b60006020820190506153f7600083018461410a565b92915050565b600060208201905081810360008301526154178184614152565b905092915050565b600060208201905081810360008301526154388161427b565b9050919050565b60006020820190508181036000830152615458816142bb565b9050919050565b60006020820190508181036000830152615478816142fb565b9050919050565b6000602082019050818103600083015261549881614361565b9050919050565b600060208201905081810360008301526154b8816143c7565b9050919050565b600060208201905081810360008301526154d8816144ad565b9050919050565b600060208201905081810360008301526154f8816145ad565b9050919050565b6000602082019050818103600083015261551881614613565b9050919050565b6000602082019050818103600083015261553881614693565b9050919050565b60006020820190508181036000830152615558816146d3565b9050919050565b6000602082019050818103600083015261557881614713565b9050919050565b60006020820190508181036000830152615598816147f9565b9050919050565b600060208201905081810360008301526155b881614839565b9050919050565b600060208201905081810360008301526155d88161489f565b9050919050565b600060208201905081810360008301526155f88161491f565b9050919050565b6000602082019050818103600083015261561881614985565b9050919050565b6000602082019050818103600083015261563881614aeb565b9050919050565b6000602082019050818103600083015261565881614b6b565b9050919050565b6000602082019050818103600083015261567881614bd1565b9050919050565b6000602082019050818103600083015261569881614d4f565b9050919050565b600060208201905081810360008301526156b881614e35565b9050919050565b600060208201905081810360008301526156d881614e75565b9050919050565b600060208201905081810360008301526156f881614f35565b9050919050565b6000602082019050818103600083015261571881614f9b565b9050919050565b6000602082019050818103600083015261573881615001565b9050919050565b60006020820190506157546000830184615050565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561578157615780615d73565b5b8060405250919050565b600067ffffffffffffffff8211156157a6576157a5615d73565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156157d2576157d1615d73565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561580257615801615d73565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006158be82615bd7565b91506158c983615bd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158fe576158fd615ce6565b5b828201905092915050565b600061591482615bd7565b915061591f83615bd7565b92508261592f5761592e615d15565b5b828204905092915050565b6000808291508390505b6001851115615984578086048111156159605761595f615ce6565b5b600185161561596f5780820291505b808102905061597d85615db3565b9450615944565b94509492505050565b600061599882615bd7565b91506159a383615bd7565b92506159d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846159d8565b905092915050565b6000826159e85760019050615aa4565b816159f65760009050615aa4565b8160018114615a0c5760028114615a1657615a45565b6001915050615aa4565b60ff841115615a2857615a27615ce6565b5b8360020a915084821115615a3f57615a3e615ce6565b5b50615aa4565b5060208310610133831016604e8410600b8410161715615a7a5782820a905083811115615a7557615a74615ce6565b5b615aa4565b615a87848484600161593a565b92509050818404811115615a9e57615a9d615ce6565b5b81810290505b9392505050565b6000615ab682615bd7565b9150615ac183615bd7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615afa57615af9615ce6565b5b828202905092915050565b6000615b1082615bd7565b9150615b1b83615bd7565b925082821015615b2e57615b2d615ce6565b5b828203905092915050565b6000615b4482615be1565b9150615b4f83615be1565b925082821015615b6257615b61615ce6565b5b828203905092915050565b6000615b7882615bb7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615c1b578082015181840152602081019050615c00565b83811115615c2a576000848401525b50505050565b60006002820490506001821680615c4857607f821691505b60208210811415615c5c57615c5b615d44565b5b50919050565b6000615c6d82615bd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615ca057615c9f615ce6565b5b600182019050919050565b6000819050919050565b6000615cc082615bd7565b9150615ccb83615bd7565b925082615cdb57615cda615d15565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b615dc981615b6d565b8114615dd457600080fd5b50565b615de081615b7f565b8114615deb57600080fd5b50565b615df781615b8b565b8114615e0257600080fd5b50565b615e0e81615bd7565b8114615e1957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c1021f42fbab8c05515a6d22cab83fbae090e70f7895e445efaa3dad71062fd564736f6c63430008000033697066733a2f2f516d525a64767a786f77344248454a476b586e43575974745374734d4b3641577a444a34634c4232476767375568

Deployed Bytecode

0x6080604052600436106102255760003560e01c806357b9aee411610123578063a22cb465116100ab578063e8a3d4851161006f578063e8a3d485146107fe578063e985e9c514610829578063f0503e8014610866578063f2fde38b146108a3578063f3f2032a146108cc57610225565b8063a22cb4651461071b578063b88d4fde14610744578063c87b56dd1461076d578063d5abeb01146107aa578063d7823bbf146107d557610225565b80636c0360eb116100f25780636c0360eb1461064657806370a0823114610671578063715018a6146106ae5780638da5cb5b146106c557806395d89b41146106f057610225565b806357b9aee41461058a5780635c975abb146105b55780636352211e146105e057806364eed1c21461061d57610225565b8063239c70ae116101b157806342842e0e1161017557806342842e0e14610495578063438b6300146104be57806344a0d68a146104fb5780634f6ccce71461052457806355f804b31461056157610225565b8063239c70ae146103de57806323b872dd146104095780632d5535f6146104325780632f745c591461044e5780633ccfd60b1461048b57610225565b8063088a4ed0116101f8578063088a4ed0146102f8578063095ea7b31461032157806313faede61461034a57806318160ddd146103755780632236c495146103a057610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613fa0565b610909565b60405161025e91906153e2565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613f77565b610983565b005b34801561029c57600080fd5b506102a5610a1c565b6040516102b291906153fd565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190614033565b610aae565b6040516102ef9190615322565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190614033565b610b33565b005b34801561032d57600080fd5b5061034860048036038101906103439190613efa565b610bb9565b005b34801561035657600080fd5b5061035f610cd1565b60405161036c919061573f565b60405180910390f35b34801561038157600080fd5b5061038a610cd7565b604051610397919061573f565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613d8f565b610ce4565b6040516103d59291906153ab565b60405180910390f35b3480156103ea57600080fd5b506103f3610eef565b604051610400919061573f565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613df4565b610ef5565b005b61044c60048036038101906104479190614033565b610f55565b005b34801561045a57600080fd5b5061047560048036038101906104709190613efa565b6111b5565b604051610482919061573f565b60405180910390f35b61049361125a565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613df4565b61134f565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613d8f565b61136f565b6040516104f29190615389565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190614033565b611469565b005b34801561053057600080fd5b5061054b60048036038101906105469190614033565b6114ef565b604051610558919061573f565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190613ff2565b611586565b005b34801561059657600080fd5b5061059f61161c565b6040516105ac91906153fd565b60405180910390f35b3480156105c157600080fd5b506105ca6116aa565b6040516105d791906153e2565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190614033565b6116bd565b6040516106149190615322565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613ff2565b61176f565b005b34801561065257600080fd5b5061065b611805565b60405161066891906153fd565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190613d8f565b611893565b6040516106a5919061573f565b60405180910390f35b3480156106ba57600080fd5b506106c361194b565b005b3480156106d157600080fd5b506106da6119d3565b6040516106e79190615322565b60405180910390f35b3480156106fc57600080fd5b506107056119fd565b60405161071291906153fd565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190613ebe565b611a8f565b005b34801561075057600080fd5b5061076b60048036038101906107669190613e43565b611c10565b005b34801561077957600080fd5b50610794600480360381019061078f9190614033565b611c72565b6040516107a191906153fd565b60405180910390f35b3480156107b657600080fd5b506107bf611ce0565b6040516107cc919061573f565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190614033565b611ce6565b005b34801561080a57600080fd5b5061081361200a565b60405161082091906153fd565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613db8565b612032565b60405161085d91906153e2565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190614033565b6120c6565b60405161089a919061573f565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613d8f565b6120de565b005b3480156108d857600080fd5b506108f360048036038101906108ee9190614033565b6121d6565b60405161090091906153fd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097c575061097b8261227d565b5b9050919050565b61098b61235f565b73ffffffffffffffffffffffffffffffffffffffff166109a96119d3565b73ffffffffffffffffffffffffffffffffffffffff16146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061565f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a2b90615c30565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790615c30565b8015610aa45780601f10610a7957610100808354040283529160200191610aa4565b820191906000526020600020905b815481529060010190602001808311610a8757829003601f168201915b5050505050905090565b6000610ab982612367565b610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef9061563f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b3b61235f565b73ffffffffffffffffffffffffffffffffffffffff16610b596119d3565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061565f565b60405180910390fd5b80600f8190555050565b6000610bc4826116bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c906156bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5461235f565b73ffffffffffffffffffffffffffffffffffffffff161480610c835750610c8281610c7d61235f565b612032565b5b610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061559f565b60405180910390fd5b610ccc83836123d3565b505050565b600d5481565b6000600880549050905090565b6060806000610cf284611893565b905060008167ffffffffffffffff811115610d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d645781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610da9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610dd75781602001602082028036833780820191505090505b50905060005b83811015610ee057610def87826111b5565b838281518110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505060116000848381518110610e71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002054828281518110610ec1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ed890615c62565b915050610ddd565b50818194509450505050915091565b600f5481565b610f06610f0061235f565b8261248c565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906156df565b60405180910390fd5b610f5083838361256a565b505050565b6000610f5f610cd7565b9050601060009054906101000a900460ff1615610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061569f565b60405180910390fd5b60008211610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb9061551f565b60405180910390fd5b600f54821115611039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611030906155bf565b60405180910390fd5b600e54828261104891906158b3565b1115611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061541f565b60405180910390fd5b6110916119d3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111145781600d546110d19190615aab565b341015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a9061557f565b60405180910390fd5b5b6000600190505b8281116111b0576000818361271061113391906158b3565b61113d91906158b3565b905061114933826127c6565b6001436111569190615b05565b4060001c8160405160200161116c9291906152f6565b6040516020818303038152906040528051906020012060001c60116000838152602001908152602001600020819055505080806111a890615c62565b91505061111b565b505050565b60006111c083611893565b8210611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061545f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61126261235f565b73ffffffffffffffffffffffffffffffffffffffff166112806119d3565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061565f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112fc906152e1565b60006040518083038185875af1925050503d8060008114611339576040519150601f19603f3d011682016040523d82523d6000602084013e61133e565b606091505b505090508061134c57600080fd5b50565b61136a83838360405180602001604052806000815250611c10565b505050565b6060600061137c83611893565b905060008167ffffffffffffffff8111156113c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113ee5781602001602082028036833780820191505090505b50905060005b8281101561145e5761140685826111b5565b82828151811061143f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061145690615c62565b9150506113f4565b508092505050919050565b61147161235f565b73ffffffffffffffffffffffffffffffffffffffff1661148f6119d3565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061565f565b60405180910390fd5b80600d8190555050565b60006114f9610cd7565b821061153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611531906156ff565b60405180910390fd5b60088281548110611574577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61158e61235f565b73ffffffffffffffffffffffffffffffffffffffff166115ac6119d3565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f99061565f565b60405180910390fd5b80600b9080519060200190611618929190613b08565b5050565b600c805461162990615c30565b80601f016020809104026020016040519081016040528092919081815260200182805461165590615c30565b80156116a25780601f10611677576101008083540402835291602001916116a2565b820191906000526020600020905b81548152906001019060200180831161168557829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906155ff565b60405180910390fd5b80915050919050565b61177761235f565b73ffffffffffffffffffffffffffffffffffffffff166117956119d3565b73ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e29061565f565b60405180910390fd5b80600c9080519060200190611801929190613b08565b5050565b600b805461181290615c30565b80601f016020809104026020016040519081016040528092919081815260200182805461183e90615c30565b801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906155df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61195361235f565b73ffffffffffffffffffffffffffffffffffffffff166119716119d3565b73ffffffffffffffffffffffffffffffffffffffff16146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be9061565f565b60405180910390fd5b6119d160006127e4565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a0c90615c30565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3890615c30565b8015611a855780601f10611a5a57610100808354040283529160200191611a85565b820191906000526020600020905b815481529060010190602001808311611a6857829003601f168201915b5050505050905090565b611a9761235f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc906154ff565b60405180910390fd5b8060056000611b1261235f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bbf61235f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c0491906153e2565b60405180910390a35050565b611c21611c1b61235f565b8361248c565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c57906156df565b60405180910390fd5b611c6c848484846128aa565b50505050565b6060611c7d82612367565b611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb39061543f565b60405180910390fd5b611cd9826011600085815260200190815260200160002054612906565b9050919050565b600e5481565b601060009054906101000a900460ff1615611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d9061569f565b60405180910390fd5b600e546001611d43610cd7565b611d4d91906158b3565b1115611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061541f565b60405180910390fd5b611d9781612367565b15611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce9061553f565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300336040518263ffffffff1660e01b8152600401611e349190615322565b60006040518083038186803b158015611e4c57600080fd5b505afa158015611e60573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611e899190613f36565b90506000805b8251811015611ef857828181518110611ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151841415611ee557600191505b8080611ef090615c62565b915050611e8f565b5080611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061571f565b60405180910390fd5b611f4333846127c6565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0503e80846040518263ffffffff1660e01b8152600401611f9e919061573f565b60206040518083038186803b158015611fb657600080fd5b505afa158015611fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fee919061405c565b6011600085815260200190815260200160002081905550505050565b6060600b60405160200161201e91906150a5565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6120e661235f565b73ffffffffffffffffffffffffffffffffffffffff166121046119d3565b73ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061565f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c19061549f565b60405180910390fd5b6121d3816127e4565b50565b60606121e182612367565b612220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122179061543f565b60405180910390fd5b600c61223e6011600085815260200190815260200160002054612cdc565b60405160200161224f929190615076565b6040516020818303038152906040529050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061234857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612358575061235782612e89565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612446836116bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061249782612367565b6124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cd9061555f565b60405180910390fd5b60006124e1836116bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061255057508373ffffffffffffffffffffffffffffffffffffffff1661253884610aae565b73ffffffffffffffffffffffffffffffffffffffff16145b8061256157506125608185612032565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661258a826116bd565b73ffffffffffffffffffffffffffffffffffffffff16146125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061567f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906154df565b60405180910390fd5b61265b838383612ef3565b6126666000826123d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b69190615b05565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461270d91906158b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6127e0828260405180602001604052806000815250613007565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128b584848461256a565b6128c184848484613062565b612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f79061547f565b60405180910390fd5b50505050565b6060600061291383612cdc565b90506000612924826001600b6131f9565b9050600061293583600b60156131f9565b90506000612946846015601f6131f9565b9050600061295785601f60296131f9565b9050600061296886602960336131f9565b90506000612979876033603d6131f9565b9050600061298a88603d60476131f9565b90506000600b6129998c612cdc565b6040516020016129aa9291906150c7565b60405160208183030381529060405290506000600b6129c88d612cdc565b6040516020016129d992919061512e565b60405160208183030381529060405290506000600b6129f78f612cdc565b604051602001612a08929190615173565b60405160208183030381529060405290506000612a248f612cdc565b604051602001612a34919061510c565b60405160208183030381529060405290506000612a508b613367565b9050633b9aca00811115612a9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509a50612ad4565b6040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152509a505b612add8a613367565b9050612af4606582612aef9190615cb5565b612cdc565b9950612aff89613367565b90506401a13b8600811115612b4b576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509850612b63565b612b60606482612b5b9190615cb5565b612cdc565b98505b612b6c88613367565b9050612b8461271182612b7f9190615cb5565b612cdc565b9750612b8f87613367565b90506401a13b8600811115612bdb576040518060400160405280600381526020017f31303000000000000000000000000000000000000000000000000000000000008152509650612bf3565b612bf0606482612beb9190615cb5565b612cdc565b96505b612bfc86613367565b90506401a13b8600811115612c48576040518060400160405280600181526020017f34000000000000000000000000000000000000000000000000000000000000008152509550612c6c565b612c69600582612c589190615cb5565b6005612c6491906158b3565b612cdc565b95505b612ca8828d8d8d8d8d8d8d8d8d8d604051602001612c949b9a999897969594939291906151b8565b604051602081830303815290604052613423565b604051602001612cb891906152bf565b6040516020818303038152906040529d505050505050505050505050505092915050565b60606000821415612d24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e84565b600082905060005b60008214612d56578080612d3f90615c62565b915050600a82612d4f9190615909565b9150612d2c565b60008167ffffffffffffffff811115612d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612dca5781602001600182028036833780820191505090505b5090505b60008514612e7d57600182612de39190615b05565b9150600a85612df29190615cb5565b6030612dfe91906158b3565b60f81b818381518110612e3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e769190615909565b9450612dce565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612efe838383612278565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f4157612f3c816135c2565b612f80565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7f57612f7e838261360b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fc357612fbe81613778565b613002565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130015761300082826138bb565b5b5b505050565b613011838361393a565b61301e6000848484613062565b61305d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130549061547f565b60405180910390fd5b505050565b60006130838473ffffffffffffffffffffffffffffffffffffffff16612265565b156131ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ac61235f565b8786866040518563ffffffff1660e01b81526004016130ce949392919061533d565b602060405180830381600087803b1580156130e857600080fd5b505af192505050801561311957506040513d601f19601f820116820180604052508101906131169190613fc9565b60015b61319c573d8060008114613149576040519150601f19603f3d011682016040523d82523d6000602084013e61314e565b606091505b50600081511415613194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318b9061547f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131f1565b600190505b949350505050565b606060008490506000848461320e9190615b05565b67ffffffffffffffff81111561324d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561327f5781602001600182028036833780820191505090505b50905060008590505b8481101561335a578281815181106132c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8287836132e19190615b05565b81518110613318577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061335290615c62565b915050613288565b5080925050509392505050565b600080600090505b825181101561341d5760018184516133879190615b05565b6133919190615b05565b600a61339d919061598d565b60308483815181106133d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c6133f09190615b39565b60ff166133fd9190615aab565b8261340891906158b3565b9150808061341590615c62565b91505061336f565b50919050565b6060600082511415613446576040518060200160405280600081525090506135bd565b6000604051806060016040528060408152602001615e1d604091399050600060036002855161347591906158b3565b61347f9190615909565b600461348b9190615aab565b9050600060208261349c91906158b3565b67ffffffffffffffff8111156134db577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561350d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b8183101561357c576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613521565b60038951066001811461359657600281146135a6576135b1565b613d3d60f01b60028303526135b1565b603d60f81b60018303525b50505050508093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161361884611893565b6136229190615b05565b9050600060076000848152602001908152602001600020549050818114613707576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061378c9190615b05565b90506000600960008481526020019081526020016000205490506000600883815481106137e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061382a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061389f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138c683611893565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a19061561f565b60405180910390fd5b6139b381612367565b156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea906154bf565b60405180910390fd5b6139ff60008383612ef3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a4f91906158b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613b1490615c30565b90600052602060002090601f016020900481019282613b365760008555613b7d565b82601f10613b4f57805160ff1916838001178555613b7d565b82800160010185558215613b7d579182015b82811115613b7c578251825591602001919060010190613b61565b5b509050613b8a9190613b8e565b5090565b5b80821115613ba7576000816000905550600101613b8f565b5090565b6000613bbe613bb98461578b565b61575a565b90508083825260208201905082856020860282011115613bdd57600080fd5b60005b85811015613c0d5781613bf38882613d7a565b845260208401935060208301925050600181019050613be0565b5050509392505050565b6000613c2a613c25846157b7565b61575a565b905082815260208101848484011115613c4257600080fd5b613c4d848285615bee565b509392505050565b6000613c68613c63846157e7565b61575a565b905082815260208101848484011115613c8057600080fd5b613c8b848285615bee565b509392505050565b600081359050613ca281615dc0565b92915050565b600082601f830112613cb957600080fd5b8151613cc9848260208601613bab565b91505092915050565b600081359050613ce181615dd7565b92915050565b600081359050613cf681615dee565b92915050565b600081519050613d0b81615dee565b92915050565b600082601f830112613d2257600080fd5b8135613d32848260208601613c17565b91505092915050565b600082601f830112613d4c57600080fd5b8135613d5c848260208601613c55565b91505092915050565b600081359050613d7481615e05565b92915050565b600081519050613d8981615e05565b92915050565b600060208284031215613da157600080fd5b6000613daf84828501613c93565b91505092915050565b60008060408385031215613dcb57600080fd5b6000613dd985828601613c93565b9250506020613dea85828601613c93565b9150509250929050565b600080600060608486031215613e0957600080fd5b6000613e1786828701613c93565b9350506020613e2886828701613c93565b9250506040613e3986828701613d65565b9150509250925092565b60008060008060808587031215613e5957600080fd5b6000613e6787828801613c93565b9450506020613e7887828801613c93565b9350506040613e8987828801613d65565b925050606085013567ffffffffffffffff811115613ea657600080fd5b613eb287828801613d11565b91505092959194509250565b60008060408385031215613ed157600080fd5b6000613edf85828601613c93565b9250506020613ef085828601613cd2565b9150509250929050565b60008060408385031215613f0d57600080fd5b6000613f1b85828601613c93565b9250506020613f2c85828601613d65565b9150509250929050565b600060208284031215613f4857600080fd5b600082015167ffffffffffffffff811115613f6257600080fd5b613f6e84828501613ca8565b91505092915050565b600060208284031215613f8957600080fd5b6000613f9784828501613cd2565b91505092915050565b600060208284031215613fb257600080fd5b6000613fc084828501613ce7565b91505092915050565b600060208284031215613fdb57600080fd5b6000613fe984828501613cfc565b91505092915050565b60006020828403121561400457600080fd5b600082013567ffffffffffffffff81111561401e57600080fd5b61402a84828501613d3b565b91505092915050565b60006020828403121561404557600080fd5b600061405384828501613d65565b91505092915050565b60006020828403121561406e57600080fd5b600061407c84828501613d7a565b91505092915050565b60006140918383615041565b60208301905092915050565b6140a681615b6d565b82525050565b60006140b78261583c565b6140c1818561586a565b93506140cc83615817565b8060005b838110156140fd5781516140e48882614085565b97506140ef8361585d565b9250506001810190506140d0565b5085935050505092915050565b61411381615b7f565b82525050565b600061412482615847565b61412e818561587b565b935061413e818560208601615bfd565b61414781615da2565b840191505092915050565b600061415d82615852565b6141678185615897565b9350614177818560208601615bfd565b61418081615da2565b840191505092915050565b600061419682615852565b6141a081856158a8565b93506141b0818560208601615bfd565b80840191505092915050565b600081546141c981615c30565b6141d381866158a8565b945060018216600081146141ee57600181146141ff57614232565b60ff19831686528186019350614232565b61420885615827565b60005b8381101561422a5781548189015260018201915060208101905061420b565b838801955050505b50505092915050565b60006142486010836158a8565b91507f2265787465726e616c5f75726c223a22000000000000000000000000000000006000830152601082019050919050565b6000614288601783615897565b91507f4d6178204e465420737570706c792065786365656465640000000000000000006000830152602082019050919050565b60006142c8601f83615897565b91507f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006000830152602082019050919050565b6000614308602b83615897565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061436e603283615897565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006143d4602683615897565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061443a6002836158a8565b91507f222c0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061447a6004836158a8565b91507f2f3f733d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006144ba601c83615897565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006144fa6011836158a8565b91507f226e616d65223a224e7564656d656e20230000000000000000000000000000006000830152601182019050919050565b600061453a6005836158a8565b91507f2f696d672f0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b600061457a600e836158a8565b91507f2f6d657461646174612e6a736f6e0000000000000000000000000000000000006000830152600e82019050919050565b60006145ba602483615897565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614620601983615897565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006146606011836158a8565b91507f22616e696d6174696f6e5f75726c223a220000000000000000000000000000006000830152601182019050919050565b60006146a0601b83615897565b91507f4174206c656173742031204e465420746f206265206d696e74656400000000006000830152602082019050919050565b60006146e0601583615897565b91507f546f6b656e20616c726561647920636c61696d656400000000000000000000006000830152602082019050919050565b6000614720602c83615897565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614786601e836158a8565b91507f227d2c7b2274726169745f74797065223a224c222c2276616c7565223a2200006000830152601e82019050919050565b60006147c6601e836158a8565b91507f227d2c7b2274726169745f74797065223a2253222c2276616c7565223a2200006000830152601e82019050919050565b6000614806601283615897565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000614846603883615897565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006148ac601883615897565b91507f4d6178206d696e742070657220545820657863656564656400000000000000006000830152602082019050919050565b60006148ec601e836158a8565b91507f227d2c7b2274726169745f74797065223a2255222c2276616c7565223a2200006000830152601e82019050919050565b600061492c602a83615897565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614992602983615897565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006149f86004836158a8565b91507f227d5d2c000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b6000614a38601e836158a8565b91507f227d2c7b2274726169745f74797065223a2244222c2276616c7565223a2200006000830152601e82019050919050565b6000614a786009836158a8565b91507f22696d616765223a2200000000000000000000000000000000000000000000006000830152600982019050919050565b6000614ab8601e836158a8565b91507f227d2c7b2274726169745f74797065223a2254222c2276616c7565223a2200006000830152601e82019050919050565b6000614af8602083615897565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614b386001836158a8565b91507f7d000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614b78602c83615897565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614bde602083615897565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614c1e60ac836158a8565b91507f222c226465736372697074696f6e223a22546865204e7564656d656e20436c6f60008301527f636b20697320616e204e465420636f6c6c656374696f6e206f6620757020746f60208301527f2039393920756e6971756520696e74657261637469766520636c6f636b73206c60408301527f6976696e67206f6e2074686520457468657265756d20626c6f636b636861696e60608301527f2e222c2261747472696275746573223a5b7b2274726169745f74797065223a2260808301527f41222c2276616c7565223a22000000000000000000000000000000000000000060a083015260ac82019050919050565b6000614d1c601e836158a8565b91507f227d2c7b2274726169745f74797065223a2250222c2276616c7565223a2200006000830152601e82019050919050565b6000614d5c602983615897565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dc26005836158a8565b91507f2e706e67220000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614e026001836158a8565b91507f7b000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614e42600e83615897565b91507f4d696e74696e67205061757365640000000000000000000000000000000000006000830152602082019050919050565b6000614e82602183615897565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ee8601d836158a8565b91507f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006000830152601d82019050919050565b6000614f2860008361588c565b9150600082019050919050565b6000614f42603183615897565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614fa8602c83615897565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061500e601e83615897565b91507f546f6b656e206e6f7420666f756e6420696e20796f75722077616c6c657400006000830152602082019050919050565b61504a81615bd7565b82525050565b61505981615bd7565b82525050565b61507061506b82615bd7565b615cab565b82525050565b600061508282856141bc565b915061508d8261446d565b9150615099828461418b565b91508190509392505050565b60006150b182846141bc565b91506150bc8261456d565b915081905092915050565b60006150d28261423b565b91506150de82856141bc565b91506150e98261446d565b91506150f5828461418b565b91506151008261442d565b91508190509392505050565b6000615117826144ed565b9150615123828461418b565b915081905092915050565b600061513982614653565b915061514582856141bc565b91506151508261446d565b915061515c828461418b565b91506151678261442d565b91508190509392505050565b600061517e82614a6b565b915061518a82856141bc565b91506151958261452d565b91506151a1828461418b565b91506151ac82614db5565b91508190509392505050565b60006151c382614df5565b91506151cf828e61418b565b91506151da82614c11565b91506151e6828d61418b565b91506151f182614a2b565b91506151fd828c61418b565b9150615208826148df565b9150615214828b61418b565b915061521f82614779565b915061522b828a61418b565b915061523682614aab565b9150615242828961418b565b915061524d826147b9565b9150615259828861418b565b915061526482614d0f565b9150615270828761418b565b915061527b826149eb565b9150615287828661418b565b9150615293828561418b565b915061529f828461418b565b91506152aa82614b2b565b91508190509c9b505050505050505050505050565b60006152ca82614edb565b91506152d6828461418b565b915081905092915050565b60006152ec82614f1b565b9150819050919050565b6000615302828561505f565b602082019150615312828461505f565b6020820191508190509392505050565b6000602082019050615337600083018461409d565b92915050565b6000608082019050615352600083018761409d565b61535f602083018661409d565b61536c6040830185615050565b818103606083015261537e8184614119565b905095945050505050565b600060208201905081810360008301526153a381846140ac565b905092915050565b600060408201905081810360008301526153c581856140ac565b905081810360208301526153d981846140ac565b90509392505050565b60006020820190506153f7600083018461410a565b92915050565b600060208201905081810360008301526154178184614152565b905092915050565b600060208201905081810360008301526154388161427b565b9050919050565b60006020820190508181036000830152615458816142bb565b9050919050565b60006020820190508181036000830152615478816142fb565b9050919050565b6000602082019050818103600083015261549881614361565b9050919050565b600060208201905081810360008301526154b8816143c7565b9050919050565b600060208201905081810360008301526154d8816144ad565b9050919050565b600060208201905081810360008301526154f8816145ad565b9050919050565b6000602082019050818103600083015261551881614613565b9050919050565b6000602082019050818103600083015261553881614693565b9050919050565b60006020820190508181036000830152615558816146d3565b9050919050565b6000602082019050818103600083015261557881614713565b9050919050565b60006020820190508181036000830152615598816147f9565b9050919050565b600060208201905081810360008301526155b881614839565b9050919050565b600060208201905081810360008301526155d88161489f565b9050919050565b600060208201905081810360008301526155f88161491f565b9050919050565b6000602082019050818103600083015261561881614985565b9050919050565b6000602082019050818103600083015261563881614aeb565b9050919050565b6000602082019050818103600083015261565881614b6b565b9050919050565b6000602082019050818103600083015261567881614bd1565b9050919050565b6000602082019050818103600083015261569881614d4f565b9050919050565b600060208201905081810360008301526156b881614e35565b9050919050565b600060208201905081810360008301526156d881614e75565b9050919050565b600060208201905081810360008301526156f881614f35565b9050919050565b6000602082019050818103600083015261571881614f9b565b9050919050565b6000602082019050818103600083015261573881615001565b9050919050565b60006020820190506157546000830184615050565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561578157615780615d73565b5b8060405250919050565b600067ffffffffffffffff8211156157a6576157a5615d73565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156157d2576157d1615d73565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561580257615801615d73565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006158be82615bd7565b91506158c983615bd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158fe576158fd615ce6565b5b828201905092915050565b600061591482615bd7565b915061591f83615bd7565b92508261592f5761592e615d15565b5b828204905092915050565b6000808291508390505b6001851115615984578086048111156159605761595f615ce6565b5b600185161561596f5780820291505b808102905061597d85615db3565b9450615944565b94509492505050565b600061599882615bd7565b91506159a383615bd7565b92506159d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846159d8565b905092915050565b6000826159e85760019050615aa4565b816159f65760009050615aa4565b8160018114615a0c5760028114615a1657615a45565b6001915050615aa4565b60ff841115615a2857615a27615ce6565b5b8360020a915084821115615a3f57615a3e615ce6565b5b50615aa4565b5060208310610133831016604e8410600b8410161715615a7a5782820a905083811115615a7557615a74615ce6565b5b615aa4565b615a87848484600161593a565b92509050818404811115615a9e57615a9d615ce6565b5b81810290505b9392505050565b6000615ab682615bd7565b9150615ac183615bd7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615afa57615af9615ce6565b5b828202905092915050565b6000615b1082615bd7565b9150615b1b83615bd7565b925082821015615b2e57615b2d615ce6565b5b828203905092915050565b6000615b4482615be1565b9150615b4f83615be1565b925082821015615b6257615b61615ce6565b5b828203905092915050565b6000615b7882615bb7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615c1b578082015181840152602081019050615c00565b83811115615c2a576000848401525b50505050565b60006002820490506001821680615c4857607f821691505b60208210811415615c5c57615c5b615d44565b5b50919050565b6000615c6d82615bd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615ca057615c9f615ce6565b5b600182019050919050565b6000819050919050565b6000615cc082615bd7565b9150615ccb83615bd7565b925082615cdb57615cda615d15565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b615dc981615b6d565b8114615dd457600080fd5b50565b615de081615b7f565b8114615deb57600080fd5b50565b615df781615b8b565b8114615e0257600080fd5b50565b615e0e81615bd7565b8114615e1957600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c1021f42fbab8c05515a6d22cab83fbae090e70f7895e445efaa3dad71062fd564736f6c63430008000033

Deployed Bytecode Sourcemap

43989:7467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32892:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47917:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20364:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21923:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47573:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21446:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44228:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33532:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46312:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44302:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22813:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45240:706;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33200:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47996:158;;;:::i;:::-;;23223:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45956:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47485:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33722:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47697:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44131:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44340:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20058:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47801:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44075:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19788:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11249:94;;;;;;;;;;;;;:::i;:::-;;10598:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20533:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22216:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23479:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46930:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44267:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44597:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46790:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22582:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44371:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11498:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47205:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32892:224;32994:4;33033:35;33018:50;;;:11;:50;;;;:90;;;;33072:36;33096:11;33072:23;:36::i;:::-;33018:90;33011:97;;32892:224;;;:::o;47917:73::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47978:6:::1;47969;;:15;;;;;;;;;;;;;;;;;;47917:73:::0;:::o;20364:100::-;20418:13;20451:5;20444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20364:100;:::o;21923:221::-;21999:7;22027:16;22035:7;22027;:16::i;:::-;22019:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22112:15;:24;22128:7;22112:24;;;;;;;;;;;;;;;;;;;;;22105:31;;21923:221;;;:::o;47573:118::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47668:17:::1;47652:13;:33;;;;47573:118:::0;:::o;21446:411::-;21527:13;21543:23;21558:7;21543:14;:23::i;:::-;21527:39;;21591:5;21585:11;;:2;:11;;;;21577:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21685:5;21669:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21694:37;21711:5;21718:12;:10;:12::i;:::-;21694:16;:37::i;:::-;21669:62;21647:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;21828:21;21837:2;21841:7;21828:8;:21::i;:::-;21446:411;;;:::o;44228:34::-;;;;:::o;33532:113::-;33593:7;33620:10;:17;;;;33613:24;;33532:113;:::o;46312:470::-;46394:16;46412;46440:23;46466:17;46476:6;46466:9;:17::i;:::-;46440:43;;46490:25;46532:15;46518:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46490:58;;46555:18;46590:15;46576:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46555:51;;46618:9;46613:137;46633:15;46629:1;:19;46613:137;;;46678:30;46698:6;46706:1;46678:19;:30::i;:::-;46664:8;46673:1;46664:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;46724:5;:18;46730:8;46739:1;46730:11;;;;;;;;;;;;;;;;;;;;;;46724:18;;;;;;;;;;;;46717:1;46719;46717:4;;;;;;;;;;;;;;;;;;;;;:25;;;;;46650:3;;;;;:::i;:::-;;;;46613:137;;;;46764:8;46774:1;46756:20;;;;;;;46312:470;;;:::o;44302:33::-;;;;:::o;22813:339::-;23008:41;23027:12;:10;:12::i;:::-;23041:7;23008:18;:41::i;:::-;23000:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23116:28;23126:4;23132:2;23136:7;23116:9;:28::i;:::-;22813:339;;;:::o;45240:706::-;45302:14;45319:13;:11;:13::i;:::-;45302:30;;45348:6;;;;;;;;;;;45347:7;45339:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;45401:1;45387:11;:15;45379:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45464:13;;45449:11;:28;;45441:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45544:9;;45529:11;45520:6;:20;;;;:::i;:::-;:33;;45512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45607:7;:5;:7::i;:::-;45593:21;;:10;:21;;;45589:109;;45657:11;45650:4;;:18;;;;:::i;:::-;45637:9;:31;;45629:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45589:109;45711:9;45723:1;45711:13;;45706:235;45731:11;45726:1;:16;45706:235;;45758:11;45787:1;45778:6;45772:5;:12;;;;:::i;:::-;:16;;;;:::i;:::-;45758:30;;45797:26;45807:10;45819:3;45797:9;:26::i;:::-;45921:1;45906:12;:16;;;;:::i;:::-;45896:27;45880:45;;45927:3;45863:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45853:79;;;;;;45845:88;;45832:5;:10;45838:3;45832:10;;;;;;;;;;;:101;;;;45706:235;45744:3;;;;;:::i;:::-;;;;45706:235;;;;45240:706;;:::o;33200:256::-;33297:7;33333:23;33350:5;33333:16;:23::i;:::-;33325:5;:31;33317:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33422:12;:19;33435:5;33422:19;;;;;;;;;;;;;;;:26;33442:5;33422:26;;;;;;;;;;;;33415:33;;33200:256;;;;:::o;47996:158::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48049:12:::1;48075:10;48067:24;;48099:21;48067:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48048:77;;;48140:7;48132:16;;;::::0;::::1;;10889:1;47996:158::o:0;23223:185::-;23361:39;23378:4;23384:2;23388:7;23361:39;;;;;;;;;;;;:16;:39::i;:::-;23223:185;;;:::o;45956:348::-;46031:16;46059:23;46085:17;46095:6;46085:9;:17::i;:::-;46059:43;;46109:25;46151:15;46137:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46109:58;;46179:9;46174:103;46194:15;46190:1;:19;46174:103;;;46239:30;46259:6;46267:1;46239:19;:30::i;:::-;46225:8;46234:1;46225:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;46211:3;;;;;:::i;:::-;;;;46174:103;;;;46290:8;46283:15;;;;45956:348;;;:::o;47485:82::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47553:8:::1;47546:4;:15;;;;47485:82:::0;:::o;33722:233::-;33797:7;33833:30;:28;:30::i;:::-;33825:5;:38;33817:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33930:10;33941:5;33930:17;;;;;;;;;;;;;;;;;;;;;;;;33923:24;;33722:233;;;:::o;47697:98::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47778:11:::1;47768:7;:21;;;;;;;;;;;;:::i;:::-;;47697:98:::0;:::o;44131:82::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44340:26::-;;;;;;;;;;;;;:::o;20058:239::-;20130:7;20150:13;20166:7;:16;20174:7;20166:16;;;;;;;;;;;;;;;;;;;;;20150:32;;20218:1;20201:19;;:5;:19;;;;20193:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20284:5;20277:12;;;20058:239;;;:::o;47801:110::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47891:14:::1;47878:10;:27;;;;;;;;;;;;:::i;:::-;;47801:110:::0;:::o;44075:51::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19788:208::-;19860:7;19905:1;19888:19;;:5;:19;;;;19880:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19972:9;:16;19982:5;19972:16;;;;;;;;;;;;;;;;19965:23;;19788:208;;;:::o;11249:94::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11314:21:::1;11332:1;11314:9;:21::i;:::-;11249:94::o:0;10598:87::-;10644:7;10671:6;;;;;;;;;;;10664:13;;10598:87;:::o;20533:104::-;20589:13;20622:7;20615:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20533:104;:::o;22216:295::-;22331:12;:10;:12::i;:::-;22319:24;;:8;:24;;;;22311:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22431:8;22386:18;:32;22405:12;:10;:12::i;:::-;22386:32;;;;;;;;;;;;;;;:42;22419:8;22386:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22484:8;22455:48;;22470:12;:10;:12::i;:::-;22455:48;;;22494:8;22455:48;;;;;;:::i;:::-;;;;;;;;22216:295;;:::o;23479:328::-;23654:41;23673:12;:10;:12::i;:::-;23687:7;23654:18;:41::i;:::-;23646:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23760:39;23774:4;23780:2;23784:7;23793:5;23760:13;:39::i;:::-;23479:328;;;;:::o;46930:267::-;47028:13;47069:16;47077:7;47069;:16::i;:::-;47053:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47150:38;47165:7;47173:5;:14;47179:7;47173:14;;;;;;;;;;;;47150;:38::i;:::-;47143:46;;46930:267;;;:::o;44267:30::-;;;;:::o;44597:631::-;44664:6;;;;;;;;;;;44663:7;44655:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;44726:9;;44721:1;44705:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:30;;44697:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44780:21;44788:12;44780:7;:21::i;:::-;44779:22;44771:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44835:21;44857:5;;;;;;;;;;;:19;;;44877:10;44857:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44835:53;;44897:13;44938:6;44933:130;44952:4;:11;44948:1;:15;44933:130;;;45002:4;45007:1;45002:7;;;;;;;;;;;;;;;;;;;;;;44986:12;:23;44982:72;;;45037:4;45026:15;;44982:72;44965:3;;;;;:::i;:::-;;;;44933:130;;;;45079:8;45071:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45131:35;45141:10;45153:12;45131:9;:35::i;:::-;45197:5;;;;;;;;;;;:11;;;45209:12;45197:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45175:5;:19;45181:12;45175:19;;;;;;;;;;;:47;;;;44597:631;;;:::o;46790:134::-;46834:13;46891:7;46874:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;46860:58;;46790:134;:::o;22582:164::-;22679:4;22703:18;:25;22722:5;22703:25;;;;;;;;;;;;;;;:35;22729:8;22703:35;;;;;;;;;;;;;;;;;;;;;;;;;22696:42;;22582:164;;;;:::o;44371:40::-;;;;;;;;;;;;;;;;;:::o;11498:192::-;10829:12;:10;:12::i;:::-;10818:23;;:7;:5;:7::i;:::-;:23;;;10810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11607:1:::1;11587:22;;:8;:22;;;;11579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11663:19;11673:8;11663:9;:19::i;:::-;11498:192:::0;:::o;47205:271::-;47279:13;47320:16;47328:7;47320;:16::i;:::-;47304:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47425:10;47443:25;:5;:14;47449:7;47443:14;;;;;;;;;;;;:23;:25::i;:::-;47408:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47394:76;;47205:271;;;:::o;2864:387::-;2924:4;3132:12;3199:7;3187:20;3179:28;;3242:1;3235:4;:8;3228:15;;;2864:387;;;:::o;31409:126::-;;;;:::o;19419:305::-;19521:4;19573:25;19558:40;;;:11;:40;;;;:105;;;;19630:33;19615:48;;;:11;:48;;;;19558:105;:158;;;;19680:36;19704:11;19680:23;:36::i;:::-;19558:158;19538:178;;19419:305;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;25317:127::-;25382:4;25434:1;25406:30;;:7;:16;25414:7;25406:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25399:37;;25317:127;;;:::o;29299:174::-;29401:2;29374:15;:24;29390:7;29374:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29457:7;29453:2;29419:46;;29428:23;29443:7;29428:14;:23::i;:::-;29419:46;;;;;;;;;;;;29299:174;;:::o;25611:348::-;25704:4;25729:16;25737:7;25729;:16::i;:::-;25721:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25805:13;25821:23;25836:7;25821:14;:23::i;:::-;25805:39;;25874:5;25863:16;;:7;:16;;;:51;;;;25907:7;25883:31;;:20;25895:7;25883:11;:20::i;:::-;:31;;;25863:51;:87;;;;25918:32;25935:5;25942:7;25918:16;:32::i;:::-;25863:87;25855:96;;;25611:348;;;;:::o;28603:578::-;28762:4;28735:31;;:23;28750:7;28735:14;:23::i;:::-;:31;;;28727:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28845:1;28831:16;;:2;:16;;;;28823:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28901:39;28922:4;28928:2;28932:7;28901:20;:39::i;:::-;29005:29;29022:1;29026:7;29005:8;:29::i;:::-;29066:1;29047:9;:15;29057:4;29047:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29095:1;29078:9;:13;29088:2;29078:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29126:2;29107:7;:16;29115:7;29107:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29165:7;29161:2;29146:27;;29155:4;29146:27;;;;;;;;;;;;28603:578;;;:::o;26301:110::-;26377:26;26387:2;26391:7;26377:26;;;;;;;;;;;;:9;:26::i;:::-;26301:110;;:::o;11698:173::-;11754:16;11773:6;;;;;;;;;;;11754:25;;11799:8;11790:6;;:17;;;;;;;;;;;;;;;;;;11854:8;11823:40;;11844:8;11823:40;;;;;;;;;;;;11698:173;;:::o;24689:315::-;24846:28;24856:4;24862:2;24866:7;24846:9;:28::i;:::-;24893:48;24916:4;24922:2;24926:7;24935:5;24893:22;:48::i;:::-;24885:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24689:315;;;;:::o;48764:2689::-;48837:13;48863:21;48887:15;:4;:13;:15::i;:::-;48863:39;;48913:19;48935:23;48945:7;48953:1;48955:2;48935:9;:23::i;:::-;48913:45;;48969:19;48991:24;49001:7;49009:2;49012;48991:9;:24::i;:::-;48969:46;;49026:19;49048:24;49058:7;49066:2;49069;49048:9;:24::i;:::-;49026:46;;49083:19;49105:24;49115:7;49123:2;49126;49105:9;:24::i;:::-;49083:46;;49140:19;49162:24;49172:7;49180:2;49183;49162:9;:24::i;:::-;49140:46;;49197:19;49219:24;49229:7;49237:2;49240;49219:9;:24::i;:::-;49197:46;;49254:19;49276:24;49286:7;49294:2;49297;49276:9;:24::i;:::-;49254:46;;49311:20;49377:7;49392:15;:4;:13;:15::i;:::-;49341:72;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49311:103;;49425:20;49492:7;49507:15;:4;:13;:15::i;:::-;49455:73;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49425:104;;49540:20;49599:7;49615:14;:3;:12;:14::i;:::-;49570:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49540:99;;49650:18;49714:14;:3;:12;:14::i;:::-;49677:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;49650:80;;49743:11;49773:16;49783:5;49773:9;:16::i;:::-;49767:22;;49808:10;49804:3;:14;49800:54;;;49820:9;;;;;;;;;;;;;;;;;;;49800:54;;;49845:9;;;;;;;;;;;;;;;;;;;49800:54;49881:16;49891:5;49881:9;:16::i;:::-;49875:22;;49915:20;49920:3;49916;:7;;;;:::i;:::-;49915:18;:20::i;:::-;49908:27;;49962:16;49972:5;49962:9;:16::i;:::-;49956:22;;49997:10;49993:3;:14;49989:75;;;50009:12;;;;;;;;;;;;;;;;;;;49989:75;;;50044:20;50049:3;50045;:7;;;;:::i;:::-;50044:18;:20::i;:::-;50037:27;;49989:75;50092:16;50102:5;50092:9;:16::i;:::-;50086:22;;50126;50131:5;50127:3;:9;;;;:::i;:::-;50126:20;:22::i;:::-;50119:29;;50167:16;50177:5;50167:9;:16::i;:::-;50161:22;;50202:10;50198:3;:14;50194:75;;;50214:12;;;;;;;;;;;;;;;;;;;50194:75;;;50249:20;50254:3;50250;:7;;;;:::i;:::-;50249:18;:20::i;:::-;50242:27;;50194:75;50296:16;50306:5;50296:9;:16::i;:::-;50290:22;;50331:10;50327:3;:14;50323:73;;;50343:10;;;;;;;;;;;;;;;;;;;50323:73;;;50376:20;50383:1;50379:3;:5;;;;:::i;:::-;50377:1;:7;;;;:::i;:::-;50376:18;:20::i;:::-;50369:27;;50323:73;50544:869;50671:4;50881:5;50950;51019;51088;51157;51226;51295;51308:6;51315;51322;50620:743;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50544:13;:869::i;:::-;50451:981;;;;;;;;:::i;:::-;;;;;;;;;;;;;50419:1028;;;;;;;;;;;;;;;48764:2689;;;;:::o;495:723::-;551:13;781:1;772:5;:10;768:53;;;799:10;;;;;;;;;;;;;;;;;;;;;768:53;831:12;846:5;831:20;;862:14;887:78;902:1;894:4;:9;887:78;;920:8;;;;;:::i;:::-;;;;951:2;943:10;;;;;:::i;:::-;;;887:78;;;975:19;1007:6;997:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:39;;1025:154;1041:1;1032:5;:10;1025:154;;1069:1;1059:11;;;;;:::i;:::-;;;1136:2;1128:5;:10;;;;:::i;:::-;1115:2;:24;;;;:::i;:::-;1102:39;;1085:6;1092;1085:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1165:2;1156:11;;;;;:::i;:::-;;;1025:154;;;1203:6;1189:21;;;;;495:723;;;;:::o;12452:157::-;12537:4;12576:25;12561:40;;;:11;:40;;;;12554:47;;12452:157;;;:::o;34568:589::-;34712:45;34739:4;34745:2;34749:7;34712:26;:45::i;:::-;34790:1;34774:18;;:4;:18;;;34770:187;;;34809:40;34841:7;34809:31;:40::i;:::-;34770:187;;;34879:2;34871:10;;:4;:10;;;34867:90;;34898:47;34931:4;34937:7;34898:32;:47::i;:::-;34867:90;34770:187;34985:1;34971:16;;:2;:16;;;34967:183;;;35004:45;35041:7;35004:36;:45::i;:::-;34967:183;;;35077:4;35071:10;;:2;:10;;;35067:83;;35098:40;35126:2;35130:7;35098:27;:40::i;:::-;35067:83;34967:183;34568:589;;;:::o;26638:321::-;26768:18;26774:2;26778:7;26768:5;:18::i;:::-;26819:54;26850:1;26854:2;26858:7;26867:5;26819:22;:54::i;:::-;26797:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:321;;;:::o;30038:799::-;30193:4;30214:15;:2;:13;;;:15::i;:::-;30210:620;;;30266:2;30250:36;;;30287:12;:10;:12::i;:::-;30301:4;30307:7;30316:5;30250:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30246:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30509:1;30492:6;:13;:18;30488:272;;;30535:60;;;;;;;;;;:::i;:::-;;;;;;;;30488:272;30710:6;30704:13;30695:6;30691:2;30687:15;30680:38;30246:529;30383:41;;;30373:51;;;:6;:51;;;;30366:58;;;;;30210:620;30814:4;30807:11;;30038:799;;;;;;;:::o;48162:344::-;48254:13;48276:21;48306:3;48276:34;;48317:19;48358:10;48349:8;:19;;;;:::i;:::-;48339:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48317:52;;48380:6;48389:10;48380:19;;48376:97;48405:8;48401:1;:12;48376:97;;;48454:8;48463:1;48454:11;;;;;;;;;;;;;;;;;;;;;;;;48431:6;48440:10;48438:1;:12;;;;:::i;:::-;48431:20;;;;;;;;;;;;;;;;;;;:34;;;;;;;;;;;48415:3;;;;;:::i;:::-;;;;48376:97;;;;48493:6;48479:21;;;;48162:344;;;;;:::o;48516:242::-;48576:11;48601:9;48613:1;48601:13;;48596:138;48626:4;48620:18;48616:1;:22;48596:138;;;48724:1;48720;48705:4;48699:18;:22;;;;:::i;:::-;:26;;;;:::i;:::-;48694:2;:32;;;;:::i;:::-;48688:2;48676:4;48682:1;48670:14;;;;;;;;;;;;;;;;;;;;;;;;48664:21;;:26;;;;:::i;:::-;48663:63;;;;;;:::i;:::-;48656:70;;;;;:::i;:::-;;;48640:3;;;;;:::i;:::-;;;;48596:138;;;;48516:242;;;:::o;39646:1912::-;39704:13;39749:1;39734:4;:11;:16;39730:31;;;39752:9;;;;;;;;;;;;;;;;39730:31;39813:19;39835:12;;;;;;;;;;;;;;;;;39813:34;;39899:18;39945:1;39940;39926:4;:11;:15;;;;:::i;:::-;39925:21;;;;:::i;:::-;39920:1;:27;;;;:::i;:::-;39899:48;;40030:20;40077:2;40064:10;:15;;;;:::i;:::-;40053:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40030:50;;40177:10;40169:6;40162:26;40272:1;40265:5;40261:13;40331:4;40382;40376:11;40367:7;40363:25;40478:2;40470:6;40466:15;40551:754;40570:6;40561:7;40558:19;40551:754;;;40670:1;40661:7;40657:15;40646:26;;40709:7;40703:14;40835:4;40827:5;40823:2;40819:14;40815:25;40805:8;40801:40;40795:47;40784:9;40776:67;40889:1;40878:9;40874:17;40861:30;;40968:4;40960:5;40956:2;40952:14;40948:25;40938:8;40934:40;40928:47;40917:9;40909:67;41022:1;41011:9;41007:17;40994:30;;41101:4;41093:5;41090:1;41085:14;41081:25;41071:8;41067:40;41061:47;41050:9;41042:67;41155:1;41144:9;41140:17;41127:30;;41234:4;41226:5;41214:25;41204:8;41200:40;41194:47;41183:9;41175:67;41288:1;41277:9;41273:17;41260:30;;40594:711;40551:754;;;41378:1;41371:4;41365:11;41361:19;41399:1;41394:54;;;;41467:1;41462:52;;;;41354:160;;41394:54;41438:6;41433:3;41429:16;41425:1;41414:9;41410:17;41403:43;41394:54;;41462:52;41506:4;41501:3;41497:14;41493:1;41482:9;41478:17;41471:41;41354:160;;40102:1423;;;;41544:6;41537:13;;;;;39646:1912;;;;:::o;35880:164::-;35984:10;:17;;;;35957:15;:24;35973:7;35957:24;;;;;;;;;;;:44;;;;36012:10;36028:7;36012:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35880:164;:::o;36671:988::-;36937:22;36987:1;36962:22;36979:4;36962:16;:22::i;:::-;:26;;;;:::i;:::-;36937:51;;36999:18;37020:17;:26;37038:7;37020:26;;;;;;;;;;;;36999:47;;37167:14;37153:10;:28;37149:328;;37198:19;37220:12;:18;37233:4;37220:18;;;;;;;;;;;;;;;:34;37239:14;37220:34;;;;;;;;;;;;37198:56;;37304:11;37271:12;:18;37284:4;37271:18;;;;;;;;;;;;;;;:30;37290:10;37271:30;;;;;;;;;;;:44;;;;37421:10;37388:17;:30;37406:11;37388:30;;;;;;;;;;;:43;;;;37149:328;;37573:17;:26;37591:7;37573:26;;;;;;;;;;;37566:33;;;37617:12;:18;37630:4;37617:18;;;;;;;;;;;;;;;:34;37636:14;37617:34;;;;;;;;;;;37610:41;;;36671:988;;;;:::o;37954:1079::-;38207:22;38252:1;38232:10;:17;;;;:21;;;;:::i;:::-;38207:46;;38264:18;38285:15;:24;38301:7;38285:24;;;;;;;;;;;;38264:45;;38636:19;38658:10;38669:14;38658:26;;;;;;;;;;;;;;;;;;;;;;;;38636:48;;38722:11;38697:10;38708;38697:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38833:10;38802:15;:28;38818:11;38802:28;;;;;;;;;;;:41;;;;38974:15;:24;38990:7;38974:24;;;;;;;;;;;38967:31;;;39009:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37954:1079;;;;:::o;35458:221::-;35543:14;35560:20;35577:2;35560:16;:20::i;:::-;35543:37;;35618:7;35591:12;:16;35604:2;35591:16;;;;;;;;;;;;;;;:24;35608:6;35591:24;;;;;;;;;;;:34;;;;35665:6;35636:17;:26;35654:7;35636:26;;;;;;;;;;;:35;;;;35458:221;;;:::o;27295:382::-;27389:1;27375:16;;:2;:16;;;;27367:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27448:16;27456:7;27448;:16::i;:::-;27447:17;27439:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:45;27539:1;27543:2;27547:7;27510:20;:45::i;:::-;27585:1;27568:9;:13;27578:2;27568:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27616:2;27597:7;:16;27605:7;27597:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27661:7;27657:2;27636:33;;27653:1;27636:33;;;;;;;;;;;;27295:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:644:1:-;;156:80;171:64;228:6;171:64;:::i;:::-;156:80;:::i;:::-;147:89;;256:5;284:6;277:5;270:21;310:4;303:5;299:16;292:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;402:1;399;392:12;350:2;430:1;415:247;440:6;437:1;434:13;415:247;;;507:3;535:48;579:3;567:10;535:48;:::i;:::-;530:3;523:61;613:4;608:3;604:14;597:21;;647:4;642:3;638:14;631:21;;475:187;462:1;459;455:9;450:14;;415:247;;;419:14;137:531;;;;;;;:::o;674:342::-;;776:64;791:48;832:6;791:48;:::i;:::-;776:64;:::i;:::-;767:73;;863:6;856:5;849:21;901:4;894:5;890:16;939:3;930:6;925:3;921:16;918:25;915:2;;;956:1;953;946:12;915:2;969:41;1003:6;998:3;993;969:41;:::i;:::-;757:259;;;;;;:::o;1022:344::-;;1125:65;1140:49;1182:6;1140:49;:::i;:::-;1125:65;:::i;:::-;1116:74;;1213:6;1206:5;1199:21;1251:4;1244:5;1240:16;1289:3;1280:6;1275:3;1271:16;1268:25;1265:2;;;1306:1;1303;1296:12;1265:2;1319:41;1353:6;1348:3;1343;1319:41;:::i;:::-;1106:260;;;;;;:::o;1372:139::-;;1456:6;1443:20;1434:29;;1472:33;1499:5;1472:33;:::i;:::-;1424:87;;;;:::o;1534:318::-;;1665:3;1658:4;1650:6;1646:17;1642:27;1632:2;;1683:1;1680;1673:12;1632:2;1716:6;1710:13;1741:105;1842:3;1834:6;1827:4;1819:6;1815:17;1741:105;:::i;:::-;1732:114;;1622:230;;;;;:::o;1858:133::-;;1939:6;1926:20;1917:29;;1955:30;1979:5;1955:30;:::i;:::-;1907:84;;;;:::o;1997:137::-;;2080:6;2067:20;2058:29;;2096:32;2122:5;2096:32;:::i;:::-;2048:86;;;;:::o;2140:141::-;;2227:6;2221:13;2212:22;;2243:32;2269:5;2243:32;:::i;:::-;2202:79;;;;:::o;2300:271::-;;2404:3;2397:4;2389:6;2385:17;2381:27;2371:2;;2422:1;2419;2412:12;2371:2;2462:6;2449:20;2487:78;2561:3;2553:6;2546:4;2538:6;2534:17;2487:78;:::i;:::-;2478:87;;2361:210;;;;;:::o;2591:273::-;;2696:3;2689:4;2681:6;2677:17;2673:27;2663:2;;2714:1;2711;2704:12;2663:2;2754:6;2741:20;2779:79;2854:3;2846:6;2839:4;2831:6;2827:17;2779:79;:::i;:::-;2770:88;;2653:211;;;;;:::o;2870:139::-;;2954:6;2941:20;2932:29;;2970:33;2997:5;2970:33;:::i;:::-;2922:87;;;;:::o;3015:143::-;;3103:6;3097:13;3088:22;;3119:33;3146:5;3119:33;:::i;:::-;3078:80;;;;:::o;3164:262::-;;3272:2;3260:9;3251:7;3247:23;3243:32;3240:2;;;3288:1;3285;3278:12;3240:2;3331:1;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3302:117;3230:196;;;;:::o;3432:407::-;;;3557:2;3545:9;3536:7;3532:23;3528:32;3525:2;;;3573:1;3570;3563:12;3525:2;3616:1;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3587:117;3743:2;3769:53;3814:7;3805:6;3794:9;3790:22;3769:53;:::i;:::-;3759:63;;3714:118;3515:324;;;;;:::o;3845:552::-;;;;3987:2;3975:9;3966:7;3962:23;3958:32;3955:2;;;4003:1;4000;3993:12;3955:2;4046:1;4071:53;4116:7;4107:6;4096:9;4092:22;4071:53;:::i;:::-;4061:63;;4017:117;4173:2;4199:53;4244:7;4235:6;4224:9;4220:22;4199:53;:::i;:::-;4189:63;;4144:118;4301:2;4327:53;4372:7;4363:6;4352:9;4348:22;4327:53;:::i;:::-;4317:63;;4272:118;3945:452;;;;;:::o;4403:809::-;;;;;4571:3;4559:9;4550:7;4546:23;4542:33;4539:2;;;4588:1;4585;4578:12;4539:2;4631:1;4656:53;4701:7;4692:6;4681:9;4677:22;4656:53;:::i;:::-;4646:63;;4602:117;4758:2;4784:53;4829:7;4820:6;4809:9;4805:22;4784:53;:::i;:::-;4774:63;;4729:118;4886:2;4912:53;4957:7;4948:6;4937:9;4933:22;4912:53;:::i;:::-;4902:63;;4857:118;5042:2;5031:9;5027:18;5014:32;5073:18;5065:6;5062:30;5059:2;;;5105:1;5102;5095:12;5059:2;5133:62;5187:7;5178:6;5167:9;5163:22;5133:62;:::i;:::-;5123:72;;4985:220;4529:683;;;;;;;:::o;5218:401::-;;;5340:2;5328:9;5319:7;5315:23;5311:32;5308:2;;;5356:1;5353;5346:12;5308:2;5399:1;5424:53;5469:7;5460:6;5449:9;5445:22;5424:53;:::i;:::-;5414:63;;5370:117;5526:2;5552:50;5594:7;5585:6;5574:9;5570:22;5552:50;:::i;:::-;5542:60;;5497:115;5298:321;;;;;:::o;5625:407::-;;;5750:2;5738:9;5729:7;5725:23;5721:32;5718:2;;;5766:1;5763;5756:12;5718:2;5809:1;5834:53;5879:7;5870:6;5859:9;5855:22;5834:53;:::i;:::-;5824:63;;5780:117;5936:2;5962:53;6007:7;5998:6;5987:9;5983:22;5962:53;:::i;:::-;5952:63;;5907:118;5708:324;;;;;:::o;6038:420::-;;6182:2;6170:9;6161:7;6157:23;6153:32;6150:2;;;6198:1;6195;6188:12;6150:2;6262:1;6251:9;6247:17;6241:24;6292:18;6284:6;6281:30;6278:2;;;6324:1;6321;6314:12;6278:2;6352:89;6433:7;6424:6;6413:9;6409:22;6352:89;:::i;:::-;6342:99;;6212:239;6140:318;;;;:::o;6464:256::-;;6569:2;6557:9;6548:7;6544:23;6540:32;6537:2;;;6585:1;6582;6575:12;6537:2;6628:1;6653:50;6695:7;6686:6;6675:9;6671:22;6653:50;:::i;:::-;6643:60;;6599:114;6527:193;;;;:::o;6726:260::-;;6833:2;6821:9;6812:7;6808:23;6804:32;6801:2;;;6849:1;6846;6839:12;6801:2;6892:1;6917:52;6961:7;6952:6;6941:9;6937:22;6917:52;:::i;:::-;6907:62;;6863:116;6791:195;;;;:::o;6992:282::-;;7110:2;7098:9;7089:7;7085:23;7081:32;7078:2;;;7126:1;7123;7116:12;7078:2;7169:1;7194:63;7249:7;7240:6;7229:9;7225:22;7194:63;:::i;:::-;7184:73;;7140:127;7068:206;;;;:::o;7280:375::-;;7398:2;7386:9;7377:7;7373:23;7369:32;7366:2;;;7414:1;7411;7404:12;7366:2;7485:1;7474:9;7470:17;7457:31;7515:18;7507:6;7504:30;7501:2;;;7547:1;7544;7537:12;7501:2;7575:63;7630:7;7621:6;7610:9;7606:22;7575:63;:::i;:::-;7565:73;;7428:220;7356:299;;;;:::o;7661:262::-;;7769:2;7757:9;7748:7;7744:23;7740:32;7737:2;;;7785:1;7782;7775:12;7737:2;7828:1;7853:53;7898:7;7889:6;7878:9;7874:22;7853:53;:::i;:::-;7843:63;;7799:117;7727:196;;;;:::o;7929:284::-;;8048:2;8036:9;8027:7;8023:23;8019:32;8016:2;;;8064:1;8061;8054:12;8016:2;8107:1;8132:64;8188:7;8179:6;8168:9;8164:22;8132:64;:::i;:::-;8122:74;;8078:128;8006:207;;;;:::o;8219:179::-;;8309:46;8351:3;8343:6;8309:46;:::i;:::-;8387:4;8382:3;8378:14;8364:28;;8299:99;;;;:::o;8404:118::-;8491:24;8509:5;8491:24;:::i;:::-;8486:3;8479:37;8469:53;;:::o;8558:732::-;;8706:54;8754:5;8706:54;:::i;:::-;8776:86;8855:6;8850:3;8776:86;:::i;:::-;8769:93;;8886:56;8936:5;8886:56;:::i;:::-;8965:7;8996:1;8981:284;9006:6;9003:1;9000:13;8981:284;;;9082:6;9076:13;9109:63;9168:3;9153:13;9109:63;:::i;:::-;9102:70;;9195:60;9248:6;9195:60;:::i;:::-;9185:70;;9041:224;9028:1;9025;9021:9;9016:14;;8981:284;;;8985:14;9281:3;9274:10;;8682:608;;;;;;;:::o;9296:109::-;9377:21;9392:5;9377:21;:::i;:::-;9372:3;9365:34;9355:50;;:::o;9411:360::-;;9525:38;9557:5;9525:38;:::i;:::-;9579:70;9642:6;9637:3;9579:70;:::i;:::-;9572:77;;9658:52;9703:6;9698:3;9691:4;9684:5;9680:16;9658:52;:::i;:::-;9735:29;9757:6;9735:29;:::i;:::-;9730:3;9726:39;9719:46;;9501:270;;;;;:::o;9777:364::-;;9893:39;9926:5;9893:39;:::i;:::-;9948:71;10012:6;10007:3;9948:71;:::i;:::-;9941:78;;10028:52;10073:6;10068:3;10061:4;10054:5;10050:16;10028:52;:::i;:::-;10105:29;10127:6;10105:29;:::i;:::-;10100:3;10096:39;10089:46;;9869:272;;;;;:::o;10147:377::-;;10281:39;10314:5;10281:39;:::i;:::-;10336:89;10418:6;10413:3;10336:89;:::i;:::-;10329:96;;10434:52;10479:6;10474:3;10467:4;10460:5;10456:16;10434:52;:::i;:::-;10511:6;10506:3;10502:16;10495:23;;10257:267;;;;;:::o;10554:845::-;;10694:5;10688:12;10723:36;10749:9;10723:36;:::i;:::-;10775:89;10857:6;10852:3;10775:89;:::i;:::-;10768:96;;10895:1;10884:9;10880:17;10911:1;10906:137;;;;11057:1;11052:341;;;;10873:520;;10906:137;10990:4;10986:9;10975;10971:25;10966:3;10959:38;11026:6;11021:3;11017:16;11010:23;;10906:137;;11052:341;11119:38;11151:5;11119:38;:::i;:::-;11179:1;11193:154;11207:6;11204:1;11201:13;11193:154;;;11281:7;11275:14;11271:1;11266:3;11262:11;11255:35;11331:1;11322:7;11318:15;11307:26;;11229:4;11226:1;11222:12;11217:17;;11193:154;;;11376:6;11371:3;11367:16;11360:23;;11059:334;;10873:520;;10661:738;;;;;;:::o;11405:398::-;;11586:85;11668:2;11663:3;11586:85;:::i;:::-;11579:92;;11701:66;11697:1;11692:3;11688:11;11681:87;11794:2;11789:3;11785:12;11778:19;;11569:234;;;:::o;11809:321::-;;11972:67;12036:2;12031:3;11972:67;:::i;:::-;11965:74;;12069:25;12065:1;12060:3;12056:11;12049:46;12121:2;12116:3;12112:12;12105:19;;11955:175;;;:::o;12136:329::-;;12299:67;12363:2;12358:3;12299:67;:::i;:::-;12292:74;;12396:33;12392:1;12387:3;12383:11;12376:54;12456:2;12451:3;12447:12;12440:19;;12282:183;;;:::o;12471:375::-;;12634:67;12698:2;12693:3;12634:67;:::i;:::-;12627:74;;12731:34;12727:1;12722:3;12718:11;12711:55;12797:13;12792:2;12787:3;12783:12;12776:35;12837:2;12832:3;12828:12;12821:19;;12617:229;;;:::o;12852:382::-;;13015:67;13079:2;13074:3;13015:67;:::i;:::-;13008:74;;13112:34;13108:1;13103:3;13099:11;13092:55;13178:20;13173:2;13168:3;13164:12;13157:42;13225:2;13220:3;13216:12;13209:19;;12998:236;;;:::o;13240:370::-;;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13500:34;13496:1;13491:3;13487:11;13480:55;13566:8;13561:2;13556:3;13552:12;13545:30;13601:2;13596:3;13592:12;13585:19;;13386:224;;;:::o;13616:396::-;;13797:84;13879:1;13874:3;13797:84;:::i;:::-;13790:91;;13911:66;13907:1;13902:3;13898:11;13891:87;14004:1;13999:3;13995:11;13988:18;;13780:232;;;:::o;14018:336::-;;14199:84;14281:1;14276:3;14199:84;:::i;:::-;14192:91;;14313:6;14309:1;14304:3;14300:11;14293:27;14346:1;14341:3;14337:11;14330:18;;14182:172;;;:::o;14360:326::-;;14523:67;14587:2;14582:3;14523:67;:::i;:::-;14516:74;;14620:30;14616:1;14611:3;14607:11;14600:51;14677:2;14672:3;14668:12;14661:19;;14506:180;;;:::o;14692:398::-;;14873:85;14955:2;14950:3;14873:85;:::i;:::-;14866:92;;14988:66;14984:1;14979:3;14975:11;14968:87;15081:2;15076:3;15072:12;15065:19;;14856:234;;;:::o;15096:337::-;;15277:84;15359:1;15354:3;15277:84;:::i;:::-;15270:91;;15391:7;15387:1;15382:3;15378:11;15371:28;15425:1;15420:3;15416:11;15409:18;;15260:173;;;:::o;15439:348::-;;15620:85;15702:2;15697:3;15620:85;:::i;:::-;15613:92;;15735:16;15731:1;15726:3;15722:11;15715:37;15778:2;15773:3;15769:12;15762:19;;15603:184;;;:::o;15793:368::-;;15956:67;16020:2;16015:3;15956:67;:::i;:::-;15949:74;;16053:34;16049:1;16044:3;16040:11;16033:55;16119:6;16114:2;16109:3;16105:12;16098:28;16152:2;16147:3;16143:12;16136:19;;15939:222;;;:::o;16167:323::-;;16330:67;16394:2;16389:3;16330:67;:::i;:::-;16323:74;;16427:27;16423:1;16418:3;16414:11;16407:48;16481:2;16476:3;16472:12;16465:19;;16313:177;;;:::o;16496:398::-;;16677:85;16759:2;16754:3;16677:85;:::i;:::-;16670:92;;16792:66;16788:1;16783:3;16779:11;16772:87;16885:2;16880:3;16876:12;16869:19;;16660:234;;;:::o;16900:325::-;;17063:67;17127:2;17122:3;17063:67;:::i;:::-;17056:74;;17160:29;17156:1;17151:3;17147:11;17140:50;17216:2;17211:3;17207:12;17200:19;;17046:179;;;:::o;17231:319::-;;17394:67;17458:2;17453:3;17394:67;:::i;:::-;17387:74;;17491:23;17487:1;17482:3;17478:11;17471:44;17541:2;17536:3;17532:12;17525:19;;17377:173;;;:::o;17556:376::-;;17719:67;17783:2;17778:3;17719:67;:::i;:::-;17712:74;;17816:34;17812:1;17807:3;17803:11;17796:55;17882:14;17877:2;17872:3;17868:12;17861:36;17923:2;17918:3;17914:12;17907:19;;17702:230;;;:::o;17938:398::-;;18119:85;18201:2;18196:3;18119:85;:::i;:::-;18112:92;;18234:66;18230:1;18225:3;18221:11;18214:87;18327:2;18322:3;18318:12;18311:19;;18102:234;;;:::o;18342:398::-;;18523:85;18605:2;18600:3;18523:85;:::i;:::-;18516:92;;18638:66;18634:1;18629:3;18625:11;18618:87;18731:2;18726:3;18722:12;18715:19;;18506:234;;;:::o;18746:316::-;;18909:67;18973:2;18968:3;18909:67;:::i;:::-;18902:74;;19006:20;19002:1;18997:3;18993:11;18986:41;19053:2;19048:3;19044:12;19037:19;;18892:170;;;:::o;19068:388::-;;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19328:34;19324:1;19319:3;19315:11;19308:55;19394:26;19389:2;19384:3;19380:12;19373:48;19447:2;19442:3;19438:12;19431:19;;19214:242;;;:::o;19462:322::-;;19625:67;19689:2;19684:3;19625:67;:::i;:::-;19618:74;;19722:26;19718:1;19713:3;19709:11;19702:47;19775:2;19770:3;19766:12;19759:19;;19608:176;;;:::o;19790:398::-;;19971:85;20053:2;20048:3;19971:85;:::i;:::-;19964:92;;20086:66;20082:1;20077:3;20073:11;20066:87;20179:2;20174:3;20170:12;20163:19;;19954:234;;;:::o;20194:374::-;;20357:67;20421:2;20416:3;20357:67;:::i;:::-;20350:74;;20454:34;20450:1;20445:3;20441:11;20434:55;20520:12;20515:2;20510:3;20506:12;20499:34;20559:2;20554:3;20550:12;20543:19;;20340:228;;;:::o;20574:373::-;;20737:67;20801:2;20796:3;20737:67;:::i;:::-;20730:74;;20834:34;20830:1;20825:3;20821:11;20814:55;20900:11;20895:2;20890:3;20886:12;20879:33;20938:2;20933:3;20929:12;20922:19;;20720:227;;;:::o;20953:396::-;;21134:84;21216:1;21211:3;21134:84;:::i;:::-;21127:91;;21248:66;21244:1;21239:3;21235:11;21228:87;21341:1;21336:3;21332:11;21325:18;;21117:232;;;:::o;21355:398::-;;21536:85;21618:2;21613:3;21536:85;:::i;:::-;21529:92;;21651:66;21647:1;21642:3;21638:11;21631:87;21744:2;21739:3;21735:12;21728:19;;21519:234;;;:::o;21759:396::-;;21940:84;22022:1;22017:3;21940:84;:::i;:::-;21933:91;;22054:66;22050:1;22045:3;22041:11;22034:87;22147:1;22142:3;22138:11;22131:18;;21923:232;;;:::o;22161:398::-;;22342:85;22424:2;22419:3;22342:85;:::i;:::-;22335:92;;22457:66;22453:1;22448:3;22444:11;22437:87;22550:2;22545:3;22541:12;22534:19;;22325:234;;;:::o;22565:330::-;;22728:67;22792:2;22787:3;22728:67;:::i;:::-;22721:74;;22825:34;22821:1;22816:3;22812:11;22805:55;22886:2;22881:3;22877:12;22870:19;;22711:184;;;:::o;22901:321::-;;23082:84;23164:1;23159:3;23082:84;:::i;:::-;23075:91;;23192:3;23188:1;23183:3;23179:11;23172:24;23218:1;23213:3;23209:11;23202:18;;23065:157;;;:::o;23224:356::-;;23383:67;23447:2;23442:3;23383:67;:::i;:::-;23376:74;;23476:34;23472:1;23467:3;23463:11;23456:55;23538:14;23533:2;23528:3;23524:12;23517:36;23575:2;23570:3;23566:12;23559:19;;23370:210;;;:::o;23582:314::-;;23741:67;23805:2;23800:3;23741:67;:::i;:::-;23734:74;;23834:34;23830:1;23825:3;23821:11;23814:55;23891:2;23886:3;23882:12;23875:19;;23728:168;;;:::o;23898:760::-;;24075:86;24157:3;24152;24075:86;:::i;:::-;24068:93;;24187:66;24183:1;24178:3;24174:11;24167:87;24281:34;24276:2;24271:3;24267:12;24260:56;24343:34;24338:2;24333:3;24329:12;24322:56;24405:34;24400:2;24395:3;24391:12;24384:56;24468:66;24462:3;24457;24453:13;24446:89;24563:66;24557:3;24552;24548:13;24541:89;24652:3;24647;24643:13;24636:20;;24062:596;;;:::o;24660:382::-;;24837:85;24919:2;24914:3;24837:85;:::i;:::-;24830:92;;24948:66;24944:1;24939:3;24935:11;24928:87;25037:2;25032:3;25028:12;25021:19;;24824:218;;;:::o;25044:353::-;;25203:67;25267:2;25262:3;25203:67;:::i;:::-;25196:74;;25296:34;25292:1;25287:3;25283:11;25276:55;25358:11;25353:2;25348:3;25344:12;25337:33;25392:2;25387:3;25383:12;25376:19;;25190:207;;;:::o;25399:380::-;;25576:84;25658:1;25653:3;25576:84;:::i;:::-;25569:91;;25686:66;25682:1;25677:3;25673:11;25666:87;25775:1;25770:3;25766:11;25759:18;;25563:216;;;:::o;25781:325::-;;25958:84;26040:1;26035:3;25958:84;:::i;:::-;25951:91;;26068:3;26064:1;26059:3;26055:11;26048:24;26098:1;26093:3;26089:11;26082:18;;25945:161;;;:::o;26112:312::-;;26275:67;26339:2;26334:3;26275:67;:::i;:::-;26268:74;;26372:16;26368:1;26363:3;26359:11;26352:37;26415:2;26410:3;26406:12;26399:19;;26258:166;;;:::o;26430:365::-;;26593:67;26657:2;26652:3;26593:67;:::i;:::-;26586:74;;26690:34;26686:1;26681:3;26677:11;26670:55;26756:3;26751:2;26746:3;26742:12;26735:25;26786:2;26781:3;26777:12;26770:19;;26576:219;;;:::o;26801:363::-;;26982:85;27064:2;27059:3;26982:85;:::i;:::-;26975:92;;27097:31;27093:1;27088:3;27084:11;27077:52;27155:2;27150:3;27146:12;27139:19;;26965:199;;;:::o;27170:297::-;;27350:83;27431:1;27426:3;27350:83;:::i;:::-;27343:90;;27459:1;27454:3;27450:11;27443:18;;27333:134;;;:::o;27473:381::-;;27636:67;27700:2;27695:3;27636:67;:::i;:::-;27629:74;;27733:34;27729:1;27724:3;27720:11;27713:55;27799:19;27794:2;27789:3;27785:12;27778:41;27845:2;27840:3;27836:12;27829:19;;27619:235;;;:::o;27860:376::-;;28023:67;28087:2;28082:3;28023:67;:::i;:::-;28016:74;;28120:34;28116:1;28111:3;28107:11;28100:55;28186:14;28181:2;28176:3;28172:12;28165:36;28227:2;28222:3;28218:12;28211:19;;28006:230;;;:::o;28242:328::-;;28405:67;28469:2;28464:3;28405:67;:::i;:::-;28398:74;;28502:32;28498:1;28493:3;28489:11;28482:53;28561:2;28556:3;28552:12;28545:19;;28388:182;;;:::o;28576:108::-;28653:24;28671:5;28653:24;:::i;:::-;28648:3;28641:37;28631:53;;:::o;28690:118::-;28777:24;28795:5;28777:24;:::i;:::-;28772:3;28765:37;28755:53;;:::o;28814:157::-;28919:45;28939:24;28957:5;28939:24;:::i;:::-;28919:45;:::i;:::-;28914:3;28907:58;28897:74;;:::o;28977:695::-;;29277:92;29365:3;29356:6;29277:92;:::i;:::-;29270:99;;29386:148;29530:3;29386:148;:::i;:::-;29379:155;;29551:95;29642:3;29633:6;29551:95;:::i;:::-;29544:102;;29663:3;29656:10;;29259:413;;;;;:::o;29678:535::-;;29930:92;30018:3;30009:6;29930:92;:::i;:::-;29923:99;;30039:148;30183:3;30039:148;:::i;:::-;30032:155;;30204:3;30197:10;;29912:301;;;;:::o;30219:1227::-;;30721:148;30865:3;30721:148;:::i;:::-;30714:155;;30886:92;30974:3;30965:6;30886:92;:::i;:::-;30879:99;;30995:148;31139:3;30995:148;:::i;:::-;30988:155;;31160:95;31251:3;31242:6;31160:95;:::i;:::-;31153:102;;31272:148;31416:3;31272:148;:::i;:::-;31265:155;;31437:3;31430:10;;30703:743;;;;;:::o;31452:541::-;;31707:148;31851:3;31707:148;:::i;:::-;31700:155;;31872:95;31963:3;31954:6;31872:95;:::i;:::-;31865:102;;31984:3;31977:10;;31689:304;;;;:::o;31999:1227::-;;32501:148;32645:3;32501:148;:::i;:::-;32494:155;;32666:92;32754:3;32745:6;32666:92;:::i;:::-;32659:99;;32775:148;32919:3;32775:148;:::i;:::-;32768:155;;32940:95;33031:3;33022:6;32940:95;:::i;:::-;32933:102;;33052:148;33196:3;33052:148;:::i;:::-;33045:155;;33217:3;33210:10;;32483:743;;;;;:::o;33232:1227::-;;33734:148;33878:3;33734:148;:::i;:::-;33727:155;;33899:92;33987:3;33978:6;33899:92;:::i;:::-;33892:99;;34008:148;34152:3;34008:148;:::i;:::-;34001:155;;34173:95;34264:3;34255:6;34173:95;:::i;:::-;34166:102;;34285:148;34429:3;34285:148;:::i;:::-;34278:155;;34450:3;34443:10;;33716:743;;;;;:::o;34465:4537::-;;36110:148;36254:3;36110:148;:::i;:::-;36103:155;;36275:95;36366:3;36357:6;36275:95;:::i;:::-;36268:102;;36387:148;36531:3;36387:148;:::i;:::-;36380:155;;36552:95;36643:3;36634:6;36552:95;:::i;:::-;36545:102;;36664:148;36808:3;36664:148;:::i;:::-;36657:155;;36829:95;36920:3;36911:6;36829:95;:::i;:::-;36822:102;;36941:148;37085:3;36941:148;:::i;:::-;36934:155;;37106:95;37197:3;37188:6;37106:95;:::i;:::-;37099:102;;37218:148;37362:3;37218:148;:::i;:::-;37211:155;;37383:95;37474:3;37465:6;37383:95;:::i;:::-;37376:102;;37495:148;37639:3;37495:148;:::i;:::-;37488:155;;37660:95;37751:3;37742:6;37660:95;:::i;:::-;37653:102;;37772:148;37916:3;37772:148;:::i;:::-;37765:155;;37937:95;38028:3;38019:6;37937:95;:::i;:::-;37930:102;;38049:148;38193:3;38049:148;:::i;:::-;38042:155;;38214:95;38305:3;38296:6;38214:95;:::i;:::-;38207:102;;38326:148;38470:3;38326:148;:::i;:::-;38319:155;;38491:95;38582:3;38573:6;38491:95;:::i;:::-;38484:102;;38603:95;38694:3;38685:6;38603:95;:::i;:::-;38596:102;;38715:96;38807:3;38797:7;38715:96;:::i;:::-;38708:103;;38828:148;38972:3;38828:148;:::i;:::-;38821:155;;38993:3;38986:10;;36092:2910;;;;;;;;;;;;;;:::o;39008:541::-;;39263:148;39407:3;39263:148;:::i;:::-;39256:155;;39428:95;39519:3;39510:6;39428:95;:::i;:::-;39421:102;;39540:3;39533:10;;39245:304;;;;:::o;39555:379::-;;39761:147;39904:3;39761:147;:::i;:::-;39754:154;;39925:3;39918:10;;39743:191;;;:::o;39940:397::-;;40095:75;40166:3;40157:6;40095:75;:::i;:::-;40195:2;40190:3;40186:12;40179:19;;40208:75;40279:3;40270:6;40208:75;:::i;:::-;40308:2;40303:3;40299:12;40292:19;;40328:3;40321:10;;40084:253;;;;;:::o;40343:222::-;;40474:2;40463:9;40459:18;40451:26;;40487:71;40555:1;40544:9;40540:17;40531:6;40487:71;:::i;:::-;40441:124;;;;:::o;40571:640::-;;40804:3;40793:9;40789:19;40781:27;;40818:71;40886:1;40875:9;40871:17;40862:6;40818:71;:::i;:::-;40899:72;40967:2;40956:9;40952:18;40943:6;40899:72;:::i;:::-;40981;41049:2;41038:9;41034:18;41025:6;40981:72;:::i;:::-;41100:9;41094:4;41090:20;41085:2;41074:9;41070:18;41063:48;41128:76;41199:4;41190:6;41128:76;:::i;:::-;41120:84;;40771:440;;;;;;;:::o;41217:373::-;;41398:2;41387:9;41383:18;41375:26;;41447:9;41441:4;41437:20;41433:1;41422:9;41418:17;41411:47;41475:108;41578:4;41569:6;41475:108;:::i;:::-;41467:116;;41365:225;;;;:::o;41596:634::-;;41855:2;41844:9;41840:18;41832:26;;41904:9;41898:4;41894:20;41890:1;41879:9;41875:17;41868:47;41932:108;42035:4;42026:6;41932:108;:::i;:::-;41924:116;;42087:9;42081:4;42077:20;42072:2;42061:9;42057:18;42050:48;42115:108;42218:4;42209:6;42115:108;:::i;:::-;42107:116;;41822:408;;;;;:::o;42236:210::-;;42361:2;42350:9;42346:18;42338:26;;42374:65;42436:1;42425:9;42421:17;42412:6;42374:65;:::i;:::-;42328:118;;;;:::o;42452:313::-;;42603:2;42592:9;42588:18;42580:26;;42652:9;42646:4;42642:20;42638:1;42627:9;42623:17;42616:47;42680:78;42753:4;42744:6;42680:78;:::i;:::-;42672:86;;42570:195;;;;:::o;42771:419::-;;42975:2;42964:9;42960:18;42952:26;;43024:9;43018:4;43014:20;43010:1;42999:9;42995:17;42988:47;43052:131;43178:4;43052:131;:::i;:::-;43044:139;;42942:248;;;:::o;43196:419::-;;43400:2;43389:9;43385:18;43377:26;;43449:9;43443:4;43439:20;43435:1;43424:9;43420:17;43413:47;43477:131;43603:4;43477:131;:::i;:::-;43469:139;;43367:248;;;:::o;43621:419::-;;43825:2;43814:9;43810:18;43802:26;;43874:9;43868:4;43864:20;43860:1;43849:9;43845:17;43838:47;43902:131;44028:4;43902:131;:::i;:::-;43894:139;;43792:248;;;:::o;44046:419::-;;44250:2;44239:9;44235:18;44227:26;;44299:9;44293:4;44289:20;44285:1;44274:9;44270:17;44263:47;44327:131;44453:4;44327:131;:::i;:::-;44319:139;;44217:248;;;:::o;44471:419::-;;44675:2;44664:9;44660:18;44652:26;;44724:9;44718:4;44714:20;44710:1;44699:9;44695:17;44688:47;44752:131;44878:4;44752:131;:::i;:::-;44744:139;;44642:248;;;:::o;44896:419::-;;45100:2;45089:9;45085:18;45077:26;;45149:9;45143:4;45139:20;45135:1;45124:9;45120:17;45113:47;45177:131;45303:4;45177:131;:::i;:::-;45169:139;;45067:248;;;:::o;45321:419::-;;45525:2;45514:9;45510:18;45502:26;;45574:9;45568:4;45564:20;45560:1;45549:9;45545:17;45538:47;45602:131;45728:4;45602:131;:::i;:::-;45594:139;;45492:248;;;:::o;45746:419::-;;45950:2;45939:9;45935:18;45927:26;;45999:9;45993:4;45989:20;45985:1;45974:9;45970:17;45963:47;46027:131;46153:4;46027:131;:::i;:::-;46019:139;;45917:248;;;:::o;46171:419::-;;46375:2;46364:9;46360:18;46352:26;;46424:9;46418:4;46414:20;46410:1;46399:9;46395:17;46388:47;46452:131;46578:4;46452:131;:::i;:::-;46444:139;;46342:248;;;:::o;46596:419::-;;46800:2;46789:9;46785:18;46777:26;;46849:9;46843:4;46839:20;46835:1;46824:9;46820:17;46813:47;46877:131;47003:4;46877:131;:::i;:::-;46869:139;;46767:248;;;:::o;47021:419::-;;47225:2;47214:9;47210:18;47202:26;;47274:9;47268:4;47264:20;47260:1;47249:9;47245:17;47238:47;47302:131;47428:4;47302:131;:::i;:::-;47294:139;;47192:248;;;:::o;47446:419::-;;47650:2;47639:9;47635:18;47627:26;;47699:9;47693:4;47689:20;47685:1;47674:9;47670:17;47663:47;47727:131;47853:4;47727:131;:::i;:::-;47719:139;;47617:248;;;:::o;47871:419::-;;48075:2;48064:9;48060:18;48052:26;;48124:9;48118:4;48114:20;48110:1;48099:9;48095:17;48088:47;48152:131;48278:4;48152:131;:::i;:::-;48144:139;;48042:248;;;:::o;48296:419::-;;48500:2;48489:9;48485:18;48477:26;;48549:9;48543:4;48539:20;48535:1;48524:9;48520:17;48513:47;48577:131;48703:4;48577:131;:::i;:::-;48569:139;;48467:248;;;:::o;48721:419::-;;48925:2;48914:9;48910:18;48902:26;;48974:9;48968:4;48964:20;48960:1;48949:9;48945:17;48938:47;49002:131;49128:4;49002:131;:::i;:::-;48994:139;;48892:248;;;:::o;49146:419::-;;49350:2;49339:9;49335:18;49327:26;;49399:9;49393:4;49389:20;49385:1;49374:9;49370:17;49363:47;49427:131;49553:4;49427:131;:::i;:::-;49419:139;;49317:248;;;:::o;49571:419::-;;49775:2;49764:9;49760:18;49752:26;;49824:9;49818:4;49814:20;49810:1;49799:9;49795:17;49788:47;49852:131;49978:4;49852:131;:::i;:::-;49844:139;;49742:248;;;:::o;49996:419::-;;50200:2;50189:9;50185:18;50177:26;;50249:9;50243:4;50239:20;50235:1;50224:9;50220:17;50213:47;50277:131;50403:4;50277:131;:::i;:::-;50269:139;;50167:248;;;:::o;50421:419::-;;50625:2;50614:9;50610:18;50602:26;;50674:9;50668:4;50664:20;50660:1;50649:9;50645:17;50638:47;50702:131;50828:4;50702:131;:::i;:::-;50694:139;;50592:248;;;:::o;50846:419::-;;51050:2;51039:9;51035:18;51027:26;;51099:9;51093:4;51089:20;51085:1;51074:9;51070:17;51063:47;51127:131;51253:4;51127:131;:::i;:::-;51119:139;;51017:248;;;:::o;51271:419::-;;51475:2;51464:9;51460:18;51452:26;;51524:9;51518:4;51514:20;51510:1;51499:9;51495:17;51488:47;51552:131;51678:4;51552:131;:::i;:::-;51544:139;;51442:248;;;:::o;51696:419::-;;51900:2;51889:9;51885:18;51877:26;;51949:9;51943:4;51939:20;51935:1;51924:9;51920:17;51913:47;51977:131;52103:4;51977:131;:::i;:::-;51969:139;;51867:248;;;:::o;52121:419::-;;52325:2;52314:9;52310:18;52302:26;;52374:9;52368:4;52364:20;52360:1;52349:9;52345:17;52338:47;52402:131;52528:4;52402:131;:::i;:::-;52394:139;;52292:248;;;:::o;52546:419::-;;52750:2;52739:9;52735:18;52727:26;;52799:9;52793:4;52789:20;52785:1;52774:9;52770:17;52763:47;52827:131;52953:4;52827:131;:::i;:::-;52819:139;;52717:248;;;:::o;52971:419::-;;53175:2;53164:9;53160:18;53152:26;;53224:9;53218:4;53214:20;53210:1;53199:9;53195:17;53188:47;53252:131;53378:4;53252:131;:::i;:::-;53244:139;;53142:248;;;:::o;53396:222::-;;53527:2;53516:9;53512:18;53504:26;;53540:71;53608:1;53597:9;53593:17;53584:6;53540:71;:::i;:::-;53494:124;;;;:::o;53624:283::-;;53690:2;53684:9;53674:19;;53732:4;53724:6;53720:17;53839:6;53827:10;53824:22;53803:18;53791:10;53788:34;53785:62;53782:2;;;53850:18;;:::i;:::-;53782:2;53890:10;53886:2;53879:22;53664:243;;;;:::o;53913:311::-;;54080:18;54072:6;54069:30;54066:2;;;54102:18;;:::i;:::-;54066:2;54152:4;54144:6;54140:17;54132:25;;54212:4;54206;54202:15;54194:23;;53995:229;;;:::o;54230:331::-;;54381:18;54373:6;54370:30;54367:2;;;54403:18;;:::i;:::-;54367:2;54488:4;54484:9;54477:4;54469:6;54465:17;54461:33;54453:41;;54549:4;54543;54539:15;54531:23;;54296:265;;;:::o;54567:332::-;;54719:18;54711:6;54708:30;54705:2;;;54741:18;;:::i;:::-;54705:2;54826:4;54822:9;54815:4;54807:6;54803:17;54799:33;54791:41;;54887:4;54881;54877:15;54869:23;;54634:265;;;:::o;54905:132::-;;54995:3;54987:11;;55025:4;55020:3;55016:14;55008:22;;54977:60;;;:::o;55043:141::-;;55115:3;55107:11;;55138:3;55135:1;55128:14;55172:4;55169:1;55159:18;55151:26;;55097:87;;;:::o;55190:114::-;;55291:5;55285:12;55275:22;;55264:40;;;:::o;55310:98::-;;55395:5;55389:12;55379:22;;55368:40;;;:::o;55414:99::-;;55500:5;55494:12;55484:22;;55473:40;;;:::o;55519:113::-;;55621:4;55616:3;55612:14;55604:22;;55594:38;;;:::o;55638:184::-;;55771:6;55766:3;55759:19;55811:4;55806:3;55802:14;55787:29;;55749:73;;;;:::o;55828:168::-;;55945:6;55940:3;55933:19;55985:4;55980:3;55976:14;55961:29;;55923:73;;;;:::o;56002:147::-;;56140:3;56125:18;;56115:34;;;;:::o;56155:169::-;;56273:6;56268:3;56261:19;56313:4;56308:3;56304:14;56289:29;;56251:73;;;;:::o;56330:148::-;;56469:3;56454:18;;56444:34;;;;:::o;56484:305::-;;56543:20;56561:1;56543:20;:::i;:::-;56538:25;;56577:20;56595:1;56577:20;:::i;:::-;56572:25;;56731:1;56663:66;56659:74;56656:1;56653:81;56650:2;;;56737:18;;:::i;:::-;56650:2;56781:1;56778;56774:9;56767:16;;56528:261;;;;:::o;56795:185::-;;56852:20;56870:1;56852:20;:::i;:::-;56847:25;;56886:20;56904:1;56886:20;:::i;:::-;56881:25;;56925:1;56915:2;;56930:18;;:::i;:::-;56915:2;56972:1;56969;56965:9;56960:14;;56837:143;;;;:::o;56986:848::-;;;57078:6;57069:15;;57102:5;57093:14;;57116:712;57137:1;57127:8;57124:15;57116:712;;;57232:4;57227:3;57223:14;57217:4;57214:24;57211:2;;;57241:18;;:::i;:::-;57211:2;57291:1;57281:8;57277:16;57274:2;;;57706:4;57699:5;57695:16;57686:25;;57274:2;57756:4;57750;57746:15;57738:23;;57786:32;57809:8;57786:32;:::i;:::-;57774:44;;57116:712;;;57059:775;;;;;;;:::o;57840:285::-;;57924:23;57942:4;57924:23;:::i;:::-;57916:31;;57968:27;57986:8;57968:27;:::i;:::-;57956:39;;58014:104;58051:66;58041:8;58035:4;58014:104;:::i;:::-;58005:113;;57906:219;;;;:::o;58131:1073::-;;58376:8;58366:2;;58397:1;58388:10;;58399:5;;58366:2;58425:4;58415:2;;58442:1;58433:10;;58444:5;;58415:2;58511:4;58559:1;58554:27;;;;58595:1;58590:191;;;;58504:277;;58554:27;58572:1;58563:10;;58574:5;;;58590:191;58635:3;58625:8;58622:17;58619:2;;;58642:18;;:::i;:::-;58619:2;58691:8;58688:1;58684:16;58675:25;;58726:3;58719:5;58716:14;58713:2;;;58733:18;;:::i;:::-;58713:2;58766:5;;;58504:277;;58890:2;58880:8;58877:16;58871:3;58865:4;58862:13;58858:36;58840:2;58830:8;58827:16;58822:2;58816:4;58813:12;58809:35;58793:111;58790:2;;;58946:8;58940:4;58936:19;58927:28;;58981:3;58974:5;58971:14;58968:2;;;58988:18;;:::i;:::-;58968:2;59021:5;;58790:2;59061:42;59099:3;59089:8;59083:4;59080:1;59061:42;:::i;:::-;59046:57;;;;59135:4;59130:3;59126:14;59119:5;59116:25;59113:2;;;59144:18;;:::i;:::-;59113:2;59193:4;59186:5;59182:16;59173:25;;58191:1013;;;;;;:::o;59210:348::-;;59273:20;59291:1;59273:20;:::i;:::-;59268:25;;59307:20;59325:1;59307:20;:::i;:::-;59302:25;;59495:1;59427:66;59423:74;59420:1;59417:81;59412:1;59405:9;59398:17;59394:105;59391:2;;;59502:18;;:::i;:::-;59391:2;59550:1;59547;59543:9;59532:20;;59258:300;;;;:::o;59564:191::-;;59624:20;59642:1;59624:20;:::i;:::-;59619:25;;59658:20;59676:1;59658:20;:::i;:::-;59653:25;;59697:1;59694;59691:8;59688:2;;;59702:18;;:::i;:::-;59688:2;59747:1;59744;59740:9;59732:17;;59609:146;;;;:::o;59761:185::-;;59819:18;59835:1;59819:18;:::i;:::-;59814:23;;59851:18;59867:1;59851:18;:::i;:::-;59846:23;;59888:1;59885;59882:8;59879:2;;;59893:18;;:::i;:::-;59879:2;59938:1;59935;59931:9;59923:17;;59804:142;;;;:::o;59952:96::-;;60018:24;60036:5;60018:24;:::i;:::-;60007:35;;59997:51;;;:::o;60054:90::-;;60131:5;60124:13;60117:21;60106:32;;60096:48;;;:::o;60150:149::-;;60226:66;60219:5;60215:78;60204:89;;60194:105;;;:::o;60305:126::-;;60382:42;60375:5;60371:54;60360:65;;60350:81;;;:::o;60437:77::-;;60503:5;60492:16;;60482:32;;;:::o;60520:86::-;;60595:4;60588:5;60584:16;60573:27;;60563:43;;;:::o;60612:154::-;60696:6;60691:3;60686;60673:30;60758:1;60749:6;60744:3;60740:16;60733:27;60663:103;;;:::o;60772:307::-;60840:1;60850:113;60864:6;60861:1;60858:13;60850:113;;;60949:1;60944:3;60940:11;60934:18;60930:1;60925:3;60921:11;60914:39;60886:2;60883:1;60879:10;60874:15;;60850:113;;;60981:6;60978:1;60975:13;60972:2;;;61061:1;61052:6;61047:3;61043:16;61036:27;60972:2;60821:258;;;;:::o;61085:320::-;;61166:1;61160:4;61156:12;61146:22;;61213:1;61207:4;61203:12;61234:18;61224:2;;61290:4;61282:6;61278:17;61268:27;;61224:2;61352;61344:6;61341:14;61321:18;61318:38;61315:2;;;61371:18;;:::i;:::-;61315:2;61136:269;;;;:::o;61411:233::-;;61473:24;61491:5;61473:24;:::i;:::-;61464:33;;61519:66;61512:5;61509:77;61506:2;;;61589:18;;:::i;:::-;61506:2;61636:1;61629:5;61625:13;61618:20;;61454:190;;;:::o;61650:79::-;;61718:5;61707:16;;61697:32;;;:::o;61735:176::-;;61784:20;61802:1;61784:20;:::i;:::-;61779:25;;61818:20;61836:1;61818:20;:::i;:::-;61813:25;;61857:1;61847:2;;61862:18;;:::i;:::-;61847:2;61903:1;61900;61896:9;61891:14;;61769:142;;;;:::o;61917:180::-;61965:77;61962:1;61955:88;62062:4;62059:1;62052:15;62086:4;62083:1;62076:15;62103:180;62151:77;62148:1;62141:88;62248:4;62245:1;62238:15;62272:4;62269:1;62262:15;62289:180;62337:77;62334:1;62327:88;62434:4;62431:1;62424:15;62458:4;62455:1;62448:15;62475:180;62523:77;62520:1;62513:88;62620:4;62617:1;62610:15;62644:4;62641:1;62634:15;62661:102;;62753:2;62749:7;62744:2;62737:5;62733:14;62729:28;62719:38;;62709:54;;;:::o;62769:102::-;;62858:5;62855:1;62851:13;62830:34;;62820:51;;;:::o;62877:122::-;62950:24;62968:5;62950:24;:::i;:::-;62943:5;62940:35;62930:2;;62989:1;62986;62979:12;62930:2;62920:79;:::o;63005:116::-;63075:21;63090:5;63075:21;:::i;:::-;63068:5;63065:32;63055:2;;63111:1;63108;63101:12;63055:2;63045:76;:::o;63127:120::-;63199:23;63216:5;63199:23;:::i;:::-;63192:5;63189:34;63179:2;;63237:1;63234;63227:12;63179:2;63169:78;:::o;63253:122::-;63326:24;63344:5;63326:24;:::i;:::-;63319:5;63316:35;63306:2;;63365:1;63362;63355:12;63306:2;63296:79;:::o

Swarm Source

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