ETH Price: $3,337.80 (-3.27%)

Token

CrazyMummiez (MMYZ)
 

Overview

Max Total Supply

2,804 MMYZ

Holders

1,150

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 MMYZ
0xb221b68c54c0798aaaf5d8fd3a7d070d32bb57e0
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:
CrazyMummiez

Compiler Version
v0.8.10+commit.fc410830

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-27
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.10;

abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
            if( owner == _owners[i] ){
                ++count;
            }
        }
        delete length;
        return count;
    }
    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;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721P.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);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    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);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    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);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    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);
    }
    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");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721P.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    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"
        );
    }
    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);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721P.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721P.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);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721P.ownerOf(tokenId), to, tokenId);
    }
    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;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.10;

abstract contract ERC721Enum is ERC721P, IERC721Enumerable {
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }
        require(false, "ERC721Enum: owner ioob");
    }
    function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob");
        return index;
    }
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b <= a, errorMessage);
        return a - b;
    }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b > 0, errorMessage);
        return a / b;
    }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b > 0, errorMessage);
        return a % b;
    }
    }
}


pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.10;

contract CrazyMummiez is ERC721Enum, Ownable, ReentrancyGuard {
    using Strings for uint256;
    string public baseURI;
    //sale settings
    uint256 public cost = 0.1 ether;
    uint256 public maxSupply = 3333;
    uint256 public maxClaim = 3333;
    uint256 public maxMint = 3;
    uint256 public requiredParentTokensForClaim = 3;
    bool public status = false;
    ParentContractInterface parentContractInterface;

    mapping(uint256 => bool) _claimedParents;

    //presale settings
    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        address _parentContractAddress
    ) ERC721P(_name, _symbol) {
        parentContractInterface = ParentContractInterface(_parentContractAddress);
        setBaseURI(_initBaseURI);
    }
    // internal
    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }
    // public minting
    function mint(uint256 _mintAmount) public payable nonReentrant{
        uint256 s = totalSupply();
        require(status, "Off" );
        require(_mintAmount > 0, "Duh" );
        require(_mintAmount <= maxMint, "Too many" );
        require(s + _mintAmount < maxSupply, "Sorry" );
        require(msg.value >= cost * _mintAmount);
        for (uint256 i = 0; i < _mintAmount; ++i) {
            _safeMint(msg.sender, s + i, "");
        }
        delete s;
    }

    // admin minting
    function gift(uint[] calldata quantity, address[] calldata recipient) external onlyOwner{
        require(quantity.length == recipient.length, "Provide quantities and recipients" );
        uint totalQuantity = 0;
        uint256 s = totalSupply();
        for(uint i = 0; i < quantity.length; ++i){
            totalQuantity += quantity[i];
        }
        require( s + totalQuantity <= maxSupply, "Too many" );
        delete totalQuantity;
        for(uint i = 0; i < recipient.length; ++i){
            for(uint j = 0; j < quantity[i]; ++j){
                _safeMint( recipient[i], s++, "" );
            }
        }
        delete s;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, tokenId.toString(), '.json')) : "";
    }
    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }
    function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner {
        maxMint = _newMaxMintAmount;
    }
    function setMaxSupply(uint256 _newMaxSupply) public onlyOwner {
        maxSupply = _newMaxSupply;
    }
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
    function setSaleStatus(bool _status) public onlyOwner {
        status = _status;
    }
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function isClaimed (uint256 id) public view returns (bool) {
        return _claimedParents[id];
    }

    function claimByIds(uint256[] memory ids) public {
        require(status, "Claiming is not active at the moment");
        require(ids.length % requiredParentTokensForClaim == 0, "You require 3 tokens in order to claim a Mummy");
        for (uint256  i = 0; i < ids.length; i++) {
            address owner = parentContractInterface.ownerOf(ids[i]);
            require(owner == msg.sender, "You do not own the token with the provided id");
            require(!isClaimed(ids[i]), "The token has been already claimed");
        }

        for (uint256  i = 0; i < ids.length; i = i + requiredParentTokensForClaim) {
            _safeMint(msg.sender, totalSupply());
            _claimedParents[ids[i]] = true;
            _claimedParents[ids[i + 1]] = true;
            _claimedParents[ids[i + 2]] = true;
        }
    }

}

contract ParentContractInterface {
    function balanceOf(address owner) public returns (uint256) {}
    function ownerOf(uint256 tokenId) public returns (address) {}
    function tokenOfOwnerByIndex(address owner, uint256 index) public returns(uint256) {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_parentContractAddress","type":"address"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claimByIds","outputs":[],"stateMutability":"nonpayable","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":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredParentTokensForClaim","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_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":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"tokenId","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600855610d05600955610d05600a556003600b556003600c556000600d60006101000a81548160ff0219169083151502179055503480156200004e57600080fd5b506040516200525c3803806200525c833981810160405281019062000074919062000583565b838381600090805190602001906200008e929190620002d1565b508060019080519060200190620000a7929190620002d1565b505050620000ca620000be6200012e60201b60201c565b6200013660201b60201c565b600160068190555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012482620001fc60201b60201c565b505050506200073a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200020c6200012e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000232620002a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200028b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028290620006b3565b60405180910390fd5b8060079080519060200190620002a3929190620002d1565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002df9062000704565b90600052602060002090601f0160209004810192826200030357600085556200034f565b82601f106200031e57805160ff19168380011785556200034f565b828001600101855582156200034f579182015b828111156200034e57825182559160200191906001019062000331565b5b5090506200035e919062000362565b5090565b5b808211156200037d57600081600090555060010162000363565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003ea826200039f565b810181811067ffffffffffffffff821117156200040c576200040b620003b0565b5b80604052505050565b60006200042162000381565b90506200042f8282620003df565b919050565b600067ffffffffffffffff821115620004525762000451620003b0565b5b6200045d826200039f565b9050602081019050919050565b60005b838110156200048a5780820151818401526020810190506200046d565b838111156200049a576000848401525b50505050565b6000620004b7620004b18462000434565b62000415565b905082815260208101848484011115620004d657620004d56200039a565b5b620004e38482856200046a565b509392505050565b600082601f83011262000503576200050262000395565b5b815162000515848260208601620004a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200054b826200051e565b9050919050565b6200055d816200053e565b81146200056957600080fd5b50565b6000815190506200057d8162000552565b92915050565b60008060008060808587031215620005a0576200059f6200038b565b5b600085015167ffffffffffffffff811115620005c157620005c062000390565b5b620005cf87828801620004eb565b945050602085015167ffffffffffffffff811115620005f357620005f262000390565b5b6200060187828801620004eb565b935050604085015167ffffffffffffffff81111562000625576200062462000390565b5b6200063387828801620004eb565b925050606062000646878288016200056c565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200069b60208362000652565b9150620006a88262000663565b602082019050919050565b60006020820190508181036000830152620006ce816200068c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071d57607f821691505b60208210811415620007345762000733620006d5565b5b50919050565b614b12806200074a6000396000f3fe60806040526004361061021a5760003560e01c80636f8b44b0116101235780639e34070f116100ab578063d4938db31161006f578063d4938db3146107d4578063d5abeb01146107ff578063d897833e1461082a578063e985e9c514610853578063f2fde38b146108905761021a565b80639e34070f146106ec578063a0712d6814610729578063a22cb46514610745578063b88d4fde1461076e578063c87b56dd146107975761021a565b80637c3d3e01116100f25780637c3d3e01146106055780638462151c146106305780638da5cb5b1461066d57806395d89b411461069857806396ea3a47146106c35761021a565b80636f8b44b01461055d57806370a0823114610586578063715018a6146105c35780637501f741146105da5761021a565b80632f745c59116101a657806344a0d68a1161017557806344a0d68a146104665780634f6ccce71461048f57806355f804b3146104cc5780636352211e146104f55780636c0360eb146105325761021a565b80632f745c59146103c05780633b67cf1a146103fd5780633ccfd60b1461042657806342842e0e1461043d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806313faede61461031657806318160ddd14610341578063200d2ed21461036c57806323b872dd146103975761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063088a4ed0146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612e9c565b6108b9565b6040516102539190612ee4565b60405180910390f35b34801561026857600080fd5b50610271610933565b60405161027e9190612f98565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612ff0565b6109c5565b6040516102bb919061305e565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ff0565b610a4a565b005b3480156102f957600080fd5b50610314600480360381019061030f91906130a5565b610ad0565b005b34801561032257600080fd5b5061032b610be8565b60405161033891906130f4565b60405180910390f35b34801561034d57600080fd5b50610356610bee565b60405161036391906130f4565b60405180910390f35b34801561037857600080fd5b50610381610bfb565b60405161038e9190612ee4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061310f565b610c0e565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906130a5565b610c6e565b6040516103f491906130f4565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906132aa565b610db7565b005b34801561043257600080fd5b5061043b611125565b005b34801561044957600080fd5b50610464600480360381019061045f919061310f565b6111f0565b005b34801561047257600080fd5b5061048d60048036038101906104889190612ff0565b611210565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612ff0565b611296565b6040516104c391906130f4565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee91906133a8565b6112e9565b005b34801561050157600080fd5b5061051c60048036038101906105179190612ff0565b61137f565b604051610529919061305e565b60405180910390f35b34801561053e57600080fd5b5061054761143c565b6040516105549190612f98565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612ff0565b6114ca565b005b34801561059257600080fd5b506105ad60048036038101906105a891906133f1565b611550565b6040516105ba91906130f4565b60405180910390f35b3480156105cf57600080fd5b506105d8611676565b005b3480156105e657600080fd5b506105ef6116fe565b6040516105fc91906130f4565b60405180910390f35b34801561061157600080fd5b5061061a611704565b60405161062791906130f4565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906133f1565b61170a565b60405161066491906134dc565b60405180910390f35b34801561067957600080fd5b50610682611803565b60405161068f919061305e565b60405180910390f35b3480156106a457600080fd5b506106ad61182d565b6040516106ba9190612f98565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e591906135af565b6118bf565b005b3480156106f857600080fd5b50610713600480360381019061070e9190612ff0565b611ada565b6040516107209190612ee4565b60405180910390f35b610743600480360381019061073e9190612ff0565b611b04565b005b34801561075157600080fd5b5061076c6004803603810190610767919061365c565b611cf0565b005b34801561077a57600080fd5b506107956004803603810190610790919061373d565b611e71565b005b3480156107a357600080fd5b506107be60048036038101906107b99190612ff0565b611ed3565b6040516107cb9190612f98565b60405180910390f35b3480156107e057600080fd5b506107e9611f7a565b6040516107f691906130f4565b60405180910390f35b34801561080b57600080fd5b50610814611f80565b60405161082191906130f4565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906137c0565b611f86565b005b34801561085f57600080fd5b5061087a600480360381019061087591906137ed565b61201f565b6040516108879190612ee4565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b291906133f1565b6120b3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092c575061092b826121ab565b5b9050919050565b6060600080546109429061385c565b80601f016020809104026020016040519081016040528092919081815260200182805461096e9061385c565b80156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b5050505050905090565b60006109d08261228d565b610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613900565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a52612315565b73ffffffffffffffffffffffffffffffffffffffff16610a70611803565b73ffffffffffffffffffffffffffffffffffffffff1614610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd9061396c565b60405180910390fd5b80600b8190555050565b6000610adb8261137f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b43906139fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6b612315565b73ffffffffffffffffffffffffffffffffffffffff161480610b9a5750610b9981610b94612315565b61201f565b5b610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090613a90565b60405180910390fd5b610be3838361231d565b505050565b60085481565b6000600280549050905090565b600d60009054906101000a900460ff1681565b610c1f610c19612315565b826123d6565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613b22565b60405180910390fd5b610c698383836124b4565b505050565b6000610c7983611550565b8210610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b8e565b60405180910390fd5b6000805b600280549050811015610d6d5760028181548110610cdf57610cde613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d5c5783821415610d4f578092505050610db1565b81610d5990613c0c565b91505b80610d6690613c0c565b9050610cbe565b506000610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613b8e565b60405180910390fd5b505b92915050565b600d60009054906101000a900460ff16610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613cc7565b60405180910390fd5b6000600c548251610e179190613d16565b14610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613db9565b60405180910390fd5b60005b8151811015611004576000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e848481518110610eb657610eb5613bae565b5b60200260200101516040518263ffffffff1660e01b8152600401610eda91906130f4565b6020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190613dee565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490613e8d565b60405180910390fd5b610fb0838381518110610fa357610fa2613bae565b5b6020026020010151611ada565b15610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790613f1f565b60405180910390fd5b508080610ffc90613c0c565b915050610e5a565b5060005b8151811015611121576110223361101d610bee565b61266d565b6001600e600084848151811061103b5761103a613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60008460018561107c9190613f3f565b8151811061108d5761108c613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000846002856110ce9190613f3f565b815181106110df576110de613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600c548161111a9190613f3f565b9050611008565b5050565b61112d612315565b73ffffffffffffffffffffffffffffffffffffffff1661114b611803565b73ffffffffffffffffffffffffffffffffffffffff16146111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111989061396c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111ec573d6000803e3d6000fd5b5050565b61120b83838360405180602001604052806000815250611e71565b505050565b611218612315565b73ffffffffffffffffffffffffffffffffffffffff16611236611803565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112839061396c565b60405180910390fd5b8060088190555050565b60006112a0610bee565b82106112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613fe1565b60405180910390fd5b819050919050565b6112f1612315565b73ffffffffffffffffffffffffffffffffffffffff1661130f611803565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061396c565b60405180910390fd5b806007908051906020019061137b929190612d8d565b5050565b6000806002838154811061139657611395613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90614073565b60405180910390fd5b80915050919050565b600780546114499061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546114759061385c565b80156114c25780601f10611497576101008083540402835291602001916114c2565b820191906000526020600020905b8154815290600101906020018083116114a557829003601f168201915b505050505081565b6114d2612315565b73ffffffffffffffffffffffffffffffffffffffff166114f0611803565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d9061396c565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614105565b60405180910390fd5b600080600280549050905060005b8181101561166757600281815481106115eb576115ea613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611656578261165390613c0c565b92505b8061166090613c0c565b90506115cf565b50600090508192505050919050565b61167e612315565b73ffffffffffffffffffffffffffffffffffffffff1661169c611803565b73ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061396c565b60405180910390fd5b6116fc600061268b565b565b600b5481565b600c5481565b606061171582611550565b600010611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613b8e565b60405180910390fd5b600061176283611550565b905060008167ffffffffffffffff8111156117805761177f613167565b5b6040519080825280602002602001820160405280156117ae5781602001602082028036833780820191505090505b50905060005b828110156117f8576117c68582610c6e565b8282815181106117d9576117d8613bae565b5b60200260200101818152505080806117f090613c0c565b9150506117b4565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461183c9061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546118689061385c565b80156118b55780601f1061188a576101008083540402835291602001916118b5565b820191906000526020600020905b81548152906001019060200180831161189857829003601f168201915b5050505050905090565b6118c7612315565b73ffffffffffffffffffffffffffffffffffffffff166118e5611803565b73ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061396c565b60405180910390fd5b818190508484905014611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614197565b60405180910390fd5b60008061198e610bee565b905060005b868690508110156119d6578686828181106119b1576119b0613bae565b5b90506020020135836119c39190613f3f565b9250806119cf90613c0c565b9050611993565b5060095482826119e69190613f3f565b1115611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614203565b60405180910390fd5b6000915060005b84849050811015611acd5760005b878783818110611a4f57611a4e613bae565b5b90506020020135811015611abb57611aaa868684818110611a7357611a72613bae565b5b9050602002016020810190611a8891906133f1565b8480611a9390613c0c565b955060405180602001604052806000815250612751565b80611ab490613c0c565b9050611a3c565b5080611ac690613c0c565b9050611a2e565b5060009050505050505050565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b60026006541415611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b419061426f565b60405180910390fd5b60026006819055506000611b5c610bee565b9050600d60009054906101000a900460ff16611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906142db565b60405180910390fd5b60008211611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614347565b60405180910390fd5b600b54821115611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614203565b60405180910390fd5b6009548282611c449190613f3f565b10611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906143b3565b60405180910390fd5b81600854611c9291906143d3565b341015611c9e57600080fd5b60005b82811015611cdf57611cce338284611cb99190613f3f565b60405180602001604052806000815250612751565b80611cd890613c0c565b9050611ca1565b506000905050600160068190555050565b611cf8612315565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614479565b60405180910390fd5b8060046000611d73612315565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e20612315565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e659190612ee4565b60405180910390a35050565b611e82611e7c612315565b836123d6565b611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613b22565b60405180910390fd5b611ecd848484846127ac565b50505050565b6060611ede8261228d565b611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f149061450b565b60405180910390fd5b6000611f27612808565b90506000815111611f475760405180602001604052806000815250611f72565b80611f518461289a565b604051602001611f629291906145b3565b6040516020818303038152906040525b915050919050565b600a5481565b60095481565b611f8e612315565b73ffffffffffffffffffffffffffffffffffffffff16611fac611803565b73ffffffffffffffffffffffffffffffffffffffff1614612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff99061396c565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120bb612315565b73ffffffffffffffffffffffffffffffffffffffff166120d9611803565b73ffffffffffffffffffffffffffffffffffffffff161461212f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121269061396c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614654565b60405180910390fd5b6121a88161268b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061227657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122865750612285826129fb565b5b9050919050565b60006002805490508210801561230e5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106122ca576122c9613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123908361137f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123e18261228d565b612420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612417906146e6565b60405180910390fd5b600061242b8361137f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249a57508373ffffffffffffffffffffffffffffffffffffffff16612482846109c5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ab57506124aa818561201f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d48261137f565b73ffffffffffffffffffffffffffffffffffffffff161461252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190614778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125919061480a565b60405180910390fd5b6125a5838383612a65565b6125b060008261231d565b81600282815481106125c5576125c4613bae565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612687828260405180602001604052806000815250612751565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61275b8383612a6a565b6127686000848484612bf2565b6127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e9061489c565b60405180910390fd5b505050565b6127b78484846124b4565b6127c384848484612bf2565b612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f99061489c565b60405180910390fd5b50505050565b6060600780546128179061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546128439061385c565b80156128905780601f1061286557610100808354040283529160200191612890565b820191906000526020600020905b81548152906001019060200180831161287357829003601f168201915b5050505050905090565b606060008214156128e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129f6565b600082905060005b600082146129145780806128fd90613c0c565b915050600a8261290d91906148bc565b91506128ea565b60008167ffffffffffffffff8111156129305761292f613167565b5b6040519080825280601f01601f1916602001820160405280156129625781602001600182028036833780820191505090505b5090505b600085146129ef5760018261297b91906148ed565b9150600a8561298a9190613d16565b60306129969190613f3f565b60f81b8183815181106129ac576129ab613bae565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129e891906148bc565b9450612966565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad19061496d565b60405180910390fd5b612ae38161228d565b15612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a906149d9565b60405180910390fd5b612b2f60008383612a65565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c138473ffffffffffffffffffffffffffffffffffffffff16612d7a565b15612d6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3c612315565b8786866040518563ffffffff1660e01b8152600401612c5e9493929190614a4e565b6020604051808303816000875af1925050508015612c9a57506040513d601f19601f82011682018060405250810190612c979190614aaf565b60015b612d1d573d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b50600081511415612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061489c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d72565b600190505b949350505050565b600080823b905060008111915050919050565b828054612d999061385c565b90600052602060002090601f016020900481019282612dbb5760008555612e02565b82601f10612dd457805160ff1916838001178555612e02565b82800160010185558215612e02579182015b82811115612e01578251825591602001919060010190612de6565b5b509050612e0f9190612e13565b5090565b5b80821115612e2c576000816000905550600101612e14565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e7981612e44565b8114612e8457600080fd5b50565b600081359050612e9681612e70565b92915050565b600060208284031215612eb257612eb1612e3a565b5b6000612ec084828501612e87565b91505092915050565b60008115159050919050565b612ede81612ec9565b82525050565b6000602082019050612ef96000830184612ed5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f39578082015181840152602081019050612f1e565b83811115612f48576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6a82612eff565b612f748185612f0a565b9350612f84818560208601612f1b565b612f8d81612f4e565b840191505092915050565b60006020820190508181036000830152612fb28184612f5f565b905092915050565b6000819050919050565b612fcd81612fba565b8114612fd857600080fd5b50565b600081359050612fea81612fc4565b92915050565b60006020828403121561300657613005612e3a565b5b600061301484828501612fdb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130488261301d565b9050919050565b6130588161303d565b82525050565b6000602082019050613073600083018461304f565b92915050565b6130828161303d565b811461308d57600080fd5b50565b60008135905061309f81613079565b92915050565b600080604083850312156130bc576130bb612e3a565b5b60006130ca85828601613090565b92505060206130db85828601612fdb565b9150509250929050565b6130ee81612fba565b82525050565b600060208201905061310960008301846130e5565b92915050565b60008060006060848603121561312857613127612e3a565b5b600061313686828701613090565b935050602061314786828701613090565b925050604061315886828701612fdb565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61319f82612f4e565b810181811067ffffffffffffffff821117156131be576131bd613167565b5b80604052505050565b60006131d1612e30565b90506131dd8282613196565b919050565b600067ffffffffffffffff8211156131fd576131fc613167565b5b602082029050602081019050919050565b600080fd5b6000613226613221846131e2565b6131c7565b905080838252602082019050602084028301858111156132495761324861320e565b5b835b81811015613272578061325e8882612fdb565b84526020840193505060208101905061324b565b5050509392505050565b600082601f83011261329157613290613162565b5b81356132a1848260208601613213565b91505092915050565b6000602082840312156132c0576132bf612e3a565b5b600082013567ffffffffffffffff8111156132de576132dd612e3f565b5b6132ea8482850161327c565b91505092915050565b600080fd5b600067ffffffffffffffff82111561331357613312613167565b5b61331c82612f4e565b9050602081019050919050565b82818337600083830152505050565b600061334b613346846132f8565b6131c7565b905082815260208101848484011115613367576133666132f3565b5b613372848285613329565b509392505050565b600082601f83011261338f5761338e613162565b5b813561339f848260208601613338565b91505092915050565b6000602082840312156133be576133bd612e3a565b5b600082013567ffffffffffffffff8111156133dc576133db612e3f565b5b6133e88482850161337a565b91505092915050565b60006020828403121561340757613406612e3a565b5b600061341584828501613090565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61345381612fba565b82525050565b6000613465838361344a565b60208301905092915050565b6000602082019050919050565b60006134898261341e565b6134938185613429565b935061349e8361343a565b8060005b838110156134cf5781516134b68882613459565b97506134c183613471565b9250506001810190506134a2565b5085935050505092915050565b600060208201905081810360008301526134f6818461347e565b905092915050565b600080fd5b60008083601f84011261351957613518613162565b5b8235905067ffffffffffffffff811115613536576135356134fe565b5b6020830191508360208202830111156135525761355161320e565b5b9250929050565b60008083601f84011261356f5761356e613162565b5b8235905067ffffffffffffffff81111561358c5761358b6134fe565b5b6020830191508360208202830111156135a8576135a761320e565b5b9250929050565b600080600080604085870312156135c9576135c8612e3a565b5b600085013567ffffffffffffffff8111156135e7576135e6612e3f565b5b6135f387828801613503565b9450945050602085013567ffffffffffffffff81111561361657613615612e3f565b5b61362287828801613559565b925092505092959194509250565b61363981612ec9565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000806040838503121561367357613672612e3a565b5b600061368185828601613090565b925050602061369285828601613647565b9150509250929050565b600067ffffffffffffffff8211156136b7576136b6613167565b5b6136c082612f4e565b9050602081019050919050565b60006136e06136db8461369c565b6131c7565b9050828152602081018484840111156136fc576136fb6132f3565b5b613707848285613329565b509392505050565b600082601f83011261372457613723613162565b5b81356137348482602086016136cd565b91505092915050565b6000806000806080858703121561375757613756612e3a565b5b600061376587828801613090565b945050602061377687828801613090565b935050604061378787828801612fdb565b925050606085013567ffffffffffffffff8111156137a8576137a7612e3f565b5b6137b48782880161370f565b91505092959194509250565b6000602082840312156137d6576137d5612e3a565b5b60006137e484828501613647565b91505092915050565b6000806040838503121561380457613803612e3a565b5b600061381285828601613090565b925050602061382385828601613090565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387457607f821691505b602082108114156138885761388761382d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006138ea602c83612f0a565b91506138f58261388e565b604082019050919050565b60006020820190508181036000830152613919816138dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613956602083612f0a565b915061396182613920565b602082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e8602183612f0a565b91506139f38261398c565b604082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a7a603883612f0a565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b0c603183612f0a565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613b78601683612f0a565b9150613b8382613b42565b602082019050919050565b60006020820190508181036000830152613ba781613b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c1782612fba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4a57613c49613bdd565b5b600182019050919050565b7f436c61696d696e67206973206e6f742061637469766520617420746865206d6f60008201527f6d656e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613cb1602483612f0a565b9150613cbc82613c55565b604082019050919050565b60006020820190508181036000830152613ce081613ca4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2182612fba565b9150613d2c83612fba565b925082613d3c57613d3b613ce7565b5b828206905092915050565b7f596f752072657175697265203320746f6b656e7320696e206f7264657220746f60008201527f20636c61696d2061204d756d6d79000000000000000000000000000000000000602082015250565b6000613da3602e83612f0a565b9150613dae82613d47565b604082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b600081519050613de881613079565b92915050565b600060208284031215613e0457613e03612e3a565b5b6000613e1284828501613dd9565b91505092915050565b7f596f7520646f206e6f74206f776e2074686520746f6b656e207769746820746860008201527f652070726f766964656420696400000000000000000000000000000000000000602082015250565b6000613e77602d83612f0a565b9150613e8282613e1b565b604082019050919050565b60006020820190508181036000830152613ea681613e6a565b9050919050565b7f54686520746f6b656e20686173206265656e20616c726561647920636c61696d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f09602283612f0a565b9150613f1482613ead565b604082019050919050565b60006020820190508181036000830152613f3881613efc565b9050919050565b6000613f4a82612fba565b9150613f5583612fba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f8a57613f89613bdd565b5b828201905092915050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613fcb601783612f0a565b9150613fd682613f95565b602082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061405d602983612f0a565b915061406882614001565b604082019050919050565b6000602082019050818103600083015261408c81614050565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006140ef602a83612f0a565b91506140fa82614093565b604082019050919050565b6000602082019050818103600083015261411e816140e2565b9050919050565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614181602183612f0a565b915061418c82614125565b604082019050919050565b600060208201905081810360008301526141b081614174565b9050919050565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b60006141ed600883612f0a565b91506141f8826141b7565b602082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614259601f83612f0a565b915061426482614223565b602082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b7f4f66660000000000000000000000000000000000000000000000000000000000600082015250565b60006142c5600383612f0a565b91506142d08261428f565b602082019050919050565b600060208201905081810360008301526142f4816142b8565b9050919050565b7f4475680000000000000000000000000000000000000000000000000000000000600082015250565b6000614331600383612f0a565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f536f727279000000000000000000000000000000000000000000000000000000600082015250565b600061439d600583612f0a565b91506143a882614367565b602082019050919050565b600060208201905081810360008301526143cc81614390565b9050919050565b60006143de82612fba565b91506143e983612fba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561442257614421613bdd565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614463601983612f0a565b915061446e8261442d565b602082019050919050565b6000602082019050818103600083015261449281614456565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f5602183612f0a565b915061450082614499565b604082019050919050565b60006020820190508181036000830152614524816144e8565b9050919050565b600081905092915050565b600061454182612eff565b61454b818561452b565b935061455b818560208601612f1b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061459d60058361452b565b91506145a882614567565b600582019050919050565b60006145bf8285614536565b91506145cb8284614536565b91506145d682614590565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061463e602683612f0a565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146d0602c83612f0a565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614762602983612f0a565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483612f0a565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614886603283612f0a565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b60006148c782612fba565b91506148d283612fba565b9250826148e2576148e1613ce7565b5b828204905092915050565b60006148f882612fba565b915061490383612fba565b92508282101561491657614915613bdd565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614957602083612f0a565b915061496282614921565b602082019050919050565b600060208201905081810360008301526149868161494a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006149c3601c83612f0a565b91506149ce8261498d565b602082019050919050565b600060208201905081810360008301526149f2816149b6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614a20826149f9565b614a2a8185614a04565b9350614a3a818560208601612f1b565b614a4381612f4e565b840191505092915050565b6000608082019050614a63600083018761304f565b614a70602083018661304f565b614a7d60408301856130e5565b8181036060830152614a8f8184614a15565b905095945050505050565b600081519050614aa981612e70565b92915050565b600060208284031215614ac557614ac4612e3a565b5b6000614ad384828501614a9a565b9150509291505056fea2646970667358221220d4e587733735a713859dc87876282ecfe261becbf9a8d8b4539980909ca414dc64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003a4ca1c1bb243d299032753fdd75e8fec1f0d585000000000000000000000000000000000000000000000000000000000000000c4372617a794d756d6d69657a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4d595a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d59416b7a4a6364465a47516d4641485139697453784c4b3133445074427963556271357a72566858765a51622f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636f8b44b0116101235780639e34070f116100ab578063d4938db31161006f578063d4938db3146107d4578063d5abeb01146107ff578063d897833e1461082a578063e985e9c514610853578063f2fde38b146108905761021a565b80639e34070f146106ec578063a0712d6814610729578063a22cb46514610745578063b88d4fde1461076e578063c87b56dd146107975761021a565b80637c3d3e01116100f25780637c3d3e01146106055780638462151c146106305780638da5cb5b1461066d57806395d89b411461069857806396ea3a47146106c35761021a565b80636f8b44b01461055d57806370a0823114610586578063715018a6146105c35780637501f741146105da5761021a565b80632f745c59116101a657806344a0d68a1161017557806344a0d68a146104665780634f6ccce71461048f57806355f804b3146104cc5780636352211e146104f55780636c0360eb146105325761021a565b80632f745c59146103c05780633b67cf1a146103fd5780633ccfd60b1461042657806342842e0e1461043d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806313faede61461031657806318160ddd14610341578063200d2ed21461036c57806323b872dd146103975761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063088a4ed0146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612e9c565b6108b9565b6040516102539190612ee4565b60405180910390f35b34801561026857600080fd5b50610271610933565b60405161027e9190612f98565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612ff0565b6109c5565b6040516102bb919061305e565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ff0565b610a4a565b005b3480156102f957600080fd5b50610314600480360381019061030f91906130a5565b610ad0565b005b34801561032257600080fd5b5061032b610be8565b60405161033891906130f4565b60405180910390f35b34801561034d57600080fd5b50610356610bee565b60405161036391906130f4565b60405180910390f35b34801561037857600080fd5b50610381610bfb565b60405161038e9190612ee4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061310f565b610c0e565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906130a5565b610c6e565b6040516103f491906130f4565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906132aa565b610db7565b005b34801561043257600080fd5b5061043b611125565b005b34801561044957600080fd5b50610464600480360381019061045f919061310f565b6111f0565b005b34801561047257600080fd5b5061048d60048036038101906104889190612ff0565b611210565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612ff0565b611296565b6040516104c391906130f4565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee91906133a8565b6112e9565b005b34801561050157600080fd5b5061051c60048036038101906105179190612ff0565b61137f565b604051610529919061305e565b60405180910390f35b34801561053e57600080fd5b5061054761143c565b6040516105549190612f98565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612ff0565b6114ca565b005b34801561059257600080fd5b506105ad60048036038101906105a891906133f1565b611550565b6040516105ba91906130f4565b60405180910390f35b3480156105cf57600080fd5b506105d8611676565b005b3480156105e657600080fd5b506105ef6116fe565b6040516105fc91906130f4565b60405180910390f35b34801561061157600080fd5b5061061a611704565b60405161062791906130f4565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906133f1565b61170a565b60405161066491906134dc565b60405180910390f35b34801561067957600080fd5b50610682611803565b60405161068f919061305e565b60405180910390f35b3480156106a457600080fd5b506106ad61182d565b6040516106ba9190612f98565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e591906135af565b6118bf565b005b3480156106f857600080fd5b50610713600480360381019061070e9190612ff0565b611ada565b6040516107209190612ee4565b60405180910390f35b610743600480360381019061073e9190612ff0565b611b04565b005b34801561075157600080fd5b5061076c6004803603810190610767919061365c565b611cf0565b005b34801561077a57600080fd5b506107956004803603810190610790919061373d565b611e71565b005b3480156107a357600080fd5b506107be60048036038101906107b99190612ff0565b611ed3565b6040516107cb9190612f98565b60405180910390f35b3480156107e057600080fd5b506107e9611f7a565b6040516107f691906130f4565b60405180910390f35b34801561080b57600080fd5b50610814611f80565b60405161082191906130f4565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906137c0565b611f86565b005b34801561085f57600080fd5b5061087a600480360381019061087591906137ed565b61201f565b6040516108879190612ee4565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b291906133f1565b6120b3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092c575061092b826121ab565b5b9050919050565b6060600080546109429061385c565b80601f016020809104026020016040519081016040528092919081815260200182805461096e9061385c565b80156109bb5780601f10610990576101008083540402835291602001916109bb565b820191906000526020600020905b81548152906001019060200180831161099e57829003601f168201915b5050505050905090565b60006109d08261228d565b610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613900565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a52612315565b73ffffffffffffffffffffffffffffffffffffffff16610a70611803565b73ffffffffffffffffffffffffffffffffffffffff1614610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd9061396c565b60405180910390fd5b80600b8190555050565b6000610adb8261137f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b43906139fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6b612315565b73ffffffffffffffffffffffffffffffffffffffff161480610b9a5750610b9981610b94612315565b61201f565b5b610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090613a90565b60405180910390fd5b610be3838361231d565b505050565b60085481565b6000600280549050905090565b600d60009054906101000a900460ff1681565b610c1f610c19612315565b826123d6565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613b22565b60405180910390fd5b610c698383836124b4565b505050565b6000610c7983611550565b8210610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b8e565b60405180910390fd5b6000805b600280549050811015610d6d5760028181548110610cdf57610cde613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d5c5783821415610d4f578092505050610db1565b81610d5990613c0c565b91505b80610d6690613c0c565b9050610cbe565b506000610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613b8e565b60405180910390fd5b505b92915050565b600d60009054906101000a900460ff16610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613cc7565b60405180910390fd5b6000600c548251610e179190613d16565b14610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613db9565b60405180910390fd5b60005b8151811015611004576000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e848481518110610eb657610eb5613bae565b5b60200260200101516040518263ffffffff1660e01b8152600401610eda91906130f4565b6020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190613dee565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490613e8d565b60405180910390fd5b610fb0838381518110610fa357610fa2613bae565b5b6020026020010151611ada565b15610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790613f1f565b60405180910390fd5b508080610ffc90613c0c565b915050610e5a565b5060005b8151811015611121576110223361101d610bee565b61266d565b6001600e600084848151811061103b5761103a613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60008460018561107c9190613f3f565b8151811061108d5761108c613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000846002856110ce9190613f3f565b815181106110df576110de613bae565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600c548161111a9190613f3f565b9050611008565b5050565b61112d612315565b73ffffffffffffffffffffffffffffffffffffffff1661114b611803565b73ffffffffffffffffffffffffffffffffffffffff16146111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111989061396c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111ec573d6000803e3d6000fd5b5050565b61120b83838360405180602001604052806000815250611e71565b505050565b611218612315565b73ffffffffffffffffffffffffffffffffffffffff16611236611803565b73ffffffffffffffffffffffffffffffffffffffff161461128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112839061396c565b60405180910390fd5b8060088190555050565b60006112a0610bee565b82106112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890613fe1565b60405180910390fd5b819050919050565b6112f1612315565b73ffffffffffffffffffffffffffffffffffffffff1661130f611803565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061396c565b60405180910390fd5b806007908051906020019061137b929190612d8d565b5050565b6000806002838154811061139657611395613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90614073565b60405180910390fd5b80915050919050565b600780546114499061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546114759061385c565b80156114c25780601f10611497576101008083540402835291602001916114c2565b820191906000526020600020905b8154815290600101906020018083116114a557829003601f168201915b505050505081565b6114d2612315565b73ffffffffffffffffffffffffffffffffffffffff166114f0611803565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d9061396c565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614105565b60405180910390fd5b600080600280549050905060005b8181101561166757600281815481106115eb576115ea613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611656578261165390613c0c565b92505b8061166090613c0c565b90506115cf565b50600090508192505050919050565b61167e612315565b73ffffffffffffffffffffffffffffffffffffffff1661169c611803565b73ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061396c565b60405180910390fd5b6116fc600061268b565b565b600b5481565b600c5481565b606061171582611550565b600010611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613b8e565b60405180910390fd5b600061176283611550565b905060008167ffffffffffffffff8111156117805761177f613167565b5b6040519080825280602002602001820160405280156117ae5781602001602082028036833780820191505090505b50905060005b828110156117f8576117c68582610c6e565b8282815181106117d9576117d8613bae565b5b60200260200101818152505080806117f090613c0c565b9150506117b4565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461183c9061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546118689061385c565b80156118b55780601f1061188a576101008083540402835291602001916118b5565b820191906000526020600020905b81548152906001019060200180831161189857829003601f168201915b5050505050905090565b6118c7612315565b73ffffffffffffffffffffffffffffffffffffffff166118e5611803565b73ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061396c565b60405180910390fd5b818190508484905014611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614197565b60405180910390fd5b60008061198e610bee565b905060005b868690508110156119d6578686828181106119b1576119b0613bae565b5b90506020020135836119c39190613f3f565b9250806119cf90613c0c565b9050611993565b5060095482826119e69190613f3f565b1115611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614203565b60405180910390fd5b6000915060005b84849050811015611acd5760005b878783818110611a4f57611a4e613bae565b5b90506020020135811015611abb57611aaa868684818110611a7357611a72613bae565b5b9050602002016020810190611a8891906133f1565b8480611a9390613c0c565b955060405180602001604052806000815250612751565b80611ab490613c0c565b9050611a3c565b5080611ac690613c0c565b9050611a2e565b5060009050505050505050565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b60026006541415611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b419061426f565b60405180910390fd5b60026006819055506000611b5c610bee565b9050600d60009054906101000a900460ff16611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906142db565b60405180910390fd5b60008211611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614347565b60405180910390fd5b600b54821115611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614203565b60405180910390fd5b6009548282611c449190613f3f565b10611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906143b3565b60405180910390fd5b81600854611c9291906143d3565b341015611c9e57600080fd5b60005b82811015611cdf57611cce338284611cb99190613f3f565b60405180602001604052806000815250612751565b80611cd890613c0c565b9050611ca1565b506000905050600160068190555050565b611cf8612315565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614479565b60405180910390fd5b8060046000611d73612315565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e20612315565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e659190612ee4565b60405180910390a35050565b611e82611e7c612315565b836123d6565b611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613b22565b60405180910390fd5b611ecd848484846127ac565b50505050565b6060611ede8261228d565b611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f149061450b565b60405180910390fd5b6000611f27612808565b90506000815111611f475760405180602001604052806000815250611f72565b80611f518461289a565b604051602001611f629291906145b3565b6040516020818303038152906040525b915050919050565b600a5481565b60095481565b611f8e612315565b73ffffffffffffffffffffffffffffffffffffffff16611fac611803565b73ffffffffffffffffffffffffffffffffffffffff1614612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff99061396c565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120bb612315565b73ffffffffffffffffffffffffffffffffffffffff166120d9611803565b73ffffffffffffffffffffffffffffffffffffffff161461212f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121269061396c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614654565b60405180910390fd5b6121a88161268b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061227657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122865750612285826129fb565b5b9050919050565b60006002805490508210801561230e5750600073ffffffffffffffffffffffffffffffffffffffff16600283815481106122ca576122c9613bae565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123908361137f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123e18261228d565b612420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612417906146e6565b60405180910390fd5b600061242b8361137f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249a57508373ffffffffffffffffffffffffffffffffffffffff16612482846109c5565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ab57506124aa818561201f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d48261137f565b73ffffffffffffffffffffffffffffffffffffffff161461252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190614778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125919061480a565b60405180910390fd5b6125a5838383612a65565b6125b060008261231d565b81600282815481106125c5576125c4613bae565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612687828260405180602001604052806000815250612751565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61275b8383612a6a565b6127686000848484612bf2565b6127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e9061489c565b60405180910390fd5b505050565b6127b78484846124b4565b6127c384848484612bf2565b612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f99061489c565b60405180910390fd5b50505050565b6060600780546128179061385c565b80601f01602080910402602001604051908101604052809291908181526020018280546128439061385c565b80156128905780601f1061286557610100808354040283529160200191612890565b820191906000526020600020905b81548152906001019060200180831161287357829003601f168201915b5050505050905090565b606060008214156128e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129f6565b600082905060005b600082146129145780806128fd90613c0c565b915050600a8261290d91906148bc565b91506128ea565b60008167ffffffffffffffff8111156129305761292f613167565b5b6040519080825280601f01601f1916602001820160405280156129625781602001600182028036833780820191505090505b5090505b600085146129ef5760018261297b91906148ed565b9150600a8561298a9190613d16565b60306129969190613f3f565b60f81b8183815181106129ac576129ab613bae565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129e891906148bc565b9450612966565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad19061496d565b60405180910390fd5b612ae38161228d565b15612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a906149d9565b60405180910390fd5b612b2f60008383612a65565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c138473ffffffffffffffffffffffffffffffffffffffff16612d7a565b15612d6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3c612315565b8786866040518563ffffffff1660e01b8152600401612c5e9493929190614a4e565b6020604051808303816000875af1925050508015612c9a57506040513d601f19601f82011682018060405250810190612c979190614aaf565b60015b612d1d573d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b50600081511415612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061489c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d72565b600190505b949350505050565b600080823b905060008111915050919050565b828054612d999061385c565b90600052602060002090601f016020900481019282612dbb5760008555612e02565b82601f10612dd457805160ff1916838001178555612e02565b82800160010185558215612e02579182015b82811115612e01578251825591602001919060010190612de6565b5b509050612e0f9190612e13565b5090565b5b80821115612e2c576000816000905550600101612e14565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e7981612e44565b8114612e8457600080fd5b50565b600081359050612e9681612e70565b92915050565b600060208284031215612eb257612eb1612e3a565b5b6000612ec084828501612e87565b91505092915050565b60008115159050919050565b612ede81612ec9565b82525050565b6000602082019050612ef96000830184612ed5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f39578082015181840152602081019050612f1e565b83811115612f48576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6a82612eff565b612f748185612f0a565b9350612f84818560208601612f1b565b612f8d81612f4e565b840191505092915050565b60006020820190508181036000830152612fb28184612f5f565b905092915050565b6000819050919050565b612fcd81612fba565b8114612fd857600080fd5b50565b600081359050612fea81612fc4565b92915050565b60006020828403121561300657613005612e3a565b5b600061301484828501612fdb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130488261301d565b9050919050565b6130588161303d565b82525050565b6000602082019050613073600083018461304f565b92915050565b6130828161303d565b811461308d57600080fd5b50565b60008135905061309f81613079565b92915050565b600080604083850312156130bc576130bb612e3a565b5b60006130ca85828601613090565b92505060206130db85828601612fdb565b9150509250929050565b6130ee81612fba565b82525050565b600060208201905061310960008301846130e5565b92915050565b60008060006060848603121561312857613127612e3a565b5b600061313686828701613090565b935050602061314786828701613090565b925050604061315886828701612fdb565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61319f82612f4e565b810181811067ffffffffffffffff821117156131be576131bd613167565b5b80604052505050565b60006131d1612e30565b90506131dd8282613196565b919050565b600067ffffffffffffffff8211156131fd576131fc613167565b5b602082029050602081019050919050565b600080fd5b6000613226613221846131e2565b6131c7565b905080838252602082019050602084028301858111156132495761324861320e565b5b835b81811015613272578061325e8882612fdb565b84526020840193505060208101905061324b565b5050509392505050565b600082601f83011261329157613290613162565b5b81356132a1848260208601613213565b91505092915050565b6000602082840312156132c0576132bf612e3a565b5b600082013567ffffffffffffffff8111156132de576132dd612e3f565b5b6132ea8482850161327c565b91505092915050565b600080fd5b600067ffffffffffffffff82111561331357613312613167565b5b61331c82612f4e565b9050602081019050919050565b82818337600083830152505050565b600061334b613346846132f8565b6131c7565b905082815260208101848484011115613367576133666132f3565b5b613372848285613329565b509392505050565b600082601f83011261338f5761338e613162565b5b813561339f848260208601613338565b91505092915050565b6000602082840312156133be576133bd612e3a565b5b600082013567ffffffffffffffff8111156133dc576133db612e3f565b5b6133e88482850161337a565b91505092915050565b60006020828403121561340757613406612e3a565b5b600061341584828501613090565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61345381612fba565b82525050565b6000613465838361344a565b60208301905092915050565b6000602082019050919050565b60006134898261341e565b6134938185613429565b935061349e8361343a565b8060005b838110156134cf5781516134b68882613459565b97506134c183613471565b9250506001810190506134a2565b5085935050505092915050565b600060208201905081810360008301526134f6818461347e565b905092915050565b600080fd5b60008083601f84011261351957613518613162565b5b8235905067ffffffffffffffff811115613536576135356134fe565b5b6020830191508360208202830111156135525761355161320e565b5b9250929050565b60008083601f84011261356f5761356e613162565b5b8235905067ffffffffffffffff81111561358c5761358b6134fe565b5b6020830191508360208202830111156135a8576135a761320e565b5b9250929050565b600080600080604085870312156135c9576135c8612e3a565b5b600085013567ffffffffffffffff8111156135e7576135e6612e3f565b5b6135f387828801613503565b9450945050602085013567ffffffffffffffff81111561361657613615612e3f565b5b61362287828801613559565b925092505092959194509250565b61363981612ec9565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000806040838503121561367357613672612e3a565b5b600061368185828601613090565b925050602061369285828601613647565b9150509250929050565b600067ffffffffffffffff8211156136b7576136b6613167565b5b6136c082612f4e565b9050602081019050919050565b60006136e06136db8461369c565b6131c7565b9050828152602081018484840111156136fc576136fb6132f3565b5b613707848285613329565b509392505050565b600082601f83011261372457613723613162565b5b81356137348482602086016136cd565b91505092915050565b6000806000806080858703121561375757613756612e3a565b5b600061376587828801613090565b945050602061377687828801613090565b935050604061378787828801612fdb565b925050606085013567ffffffffffffffff8111156137a8576137a7612e3f565b5b6137b48782880161370f565b91505092959194509250565b6000602082840312156137d6576137d5612e3a565b5b60006137e484828501613647565b91505092915050565b6000806040838503121561380457613803612e3a565b5b600061381285828601613090565b925050602061382385828601613090565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387457607f821691505b602082108114156138885761388761382d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006138ea602c83612f0a565b91506138f58261388e565b604082019050919050565b60006020820190508181036000830152613919816138dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613956602083612f0a565b915061396182613920565b602082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e8602183612f0a565b91506139f38261398c565b604082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a7a603883612f0a565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b0c603183612f0a565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613b78601683612f0a565b9150613b8382613b42565b602082019050919050565b60006020820190508181036000830152613ba781613b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c1782612fba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4a57613c49613bdd565b5b600182019050919050565b7f436c61696d696e67206973206e6f742061637469766520617420746865206d6f60008201527f6d656e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613cb1602483612f0a565b9150613cbc82613c55565b604082019050919050565b60006020820190508181036000830152613ce081613ca4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2182612fba565b9150613d2c83612fba565b925082613d3c57613d3b613ce7565b5b828206905092915050565b7f596f752072657175697265203320746f6b656e7320696e206f7264657220746f60008201527f20636c61696d2061204d756d6d79000000000000000000000000000000000000602082015250565b6000613da3602e83612f0a565b9150613dae82613d47565b604082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b600081519050613de881613079565b92915050565b600060208284031215613e0457613e03612e3a565b5b6000613e1284828501613dd9565b91505092915050565b7f596f7520646f206e6f74206f776e2074686520746f6b656e207769746820746860008201527f652070726f766964656420696400000000000000000000000000000000000000602082015250565b6000613e77602d83612f0a565b9150613e8282613e1b565b604082019050919050565b60006020820190508181036000830152613ea681613e6a565b9050919050565b7f54686520746f6b656e20686173206265656e20616c726561647920636c61696d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f09602283612f0a565b9150613f1482613ead565b604082019050919050565b60006020820190508181036000830152613f3881613efc565b9050919050565b6000613f4a82612fba565b9150613f5583612fba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f8a57613f89613bdd565b5b828201905092915050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613fcb601783612f0a565b9150613fd682613f95565b602082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061405d602983612f0a565b915061406882614001565b604082019050919050565b6000602082019050818103600083015261408c81614050565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006140ef602a83612f0a565b91506140fa82614093565b604082019050919050565b6000602082019050818103600083015261411e816140e2565b9050919050565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614181602183612f0a565b915061418c82614125565b604082019050919050565b600060208201905081810360008301526141b081614174565b9050919050565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b60006141ed600883612f0a565b91506141f8826141b7565b602082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614259601f83612f0a565b915061426482614223565b602082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b7f4f66660000000000000000000000000000000000000000000000000000000000600082015250565b60006142c5600383612f0a565b91506142d08261428f565b602082019050919050565b600060208201905081810360008301526142f4816142b8565b9050919050565b7f4475680000000000000000000000000000000000000000000000000000000000600082015250565b6000614331600383612f0a565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f536f727279000000000000000000000000000000000000000000000000000000600082015250565b600061439d600583612f0a565b91506143a882614367565b602082019050919050565b600060208201905081810360008301526143cc81614390565b9050919050565b60006143de82612fba565b91506143e983612fba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561442257614421613bdd565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614463601983612f0a565b915061446e8261442d565b602082019050919050565b6000602082019050818103600083015261449281614456565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f5602183612f0a565b915061450082614499565b604082019050919050565b60006020820190508181036000830152614524816144e8565b9050919050565b600081905092915050565b600061454182612eff565b61454b818561452b565b935061455b818560208601612f1b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061459d60058361452b565b91506145a882614567565b600582019050919050565b60006145bf8285614536565b91506145cb8284614536565b91506145d682614590565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061463e602683612f0a565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146d0602c83612f0a565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614762602983612f0a565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483612f0a565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614886603283612f0a565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b60006148c782612fba565b91506148d283612fba565b9250826148e2576148e1613ce7565b5b828204905092915050565b60006148f882612fba565b915061490383612fba565b92508282101561491657614915613bdd565b5b828203905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614957602083612f0a565b915061496282614921565b602082019050919050565b600060208201905081810360008301526149868161494a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006149c3601c83612f0a565b91506149ce8261498d565b602082019050919050565b600060208201905081810360008301526149f2816149b6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614a20826149f9565b614a2a8185614a04565b9350614a3a818560208601612f1b565b614a4381612f4e565b840191505092915050565b6000608082019050614a63600083018761304f565b614a70602083018661304f565b614a7d60408301856130e5565b8181036060830152614a8f8184614a15565b905095945050505050565b600081519050614aa981612e70565b92915050565b600060208284031215614ac557614ac4612e3a565b5b6000614ad384828501614a9a565b9150509291505056fea2646970667358221220d4e587733735a713859dc87876282ecfe261becbf9a8d8b4539980909ca414dc64736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003a4ca1c1bb243d299032753fdd75e8fec1f0d585000000000000000000000000000000000000000000000000000000000000000c4372617a794d756d6d69657a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4d595a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d59416b7a4a6364465a47516d4641485139697453784c4b3133445074427963556271357a72566858765a51622f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): CrazyMummiez
Arg [1] : _symbol (string): MMYZ
Arg [2] : _initBaseURI (string): https://ipfs.io/ipfs/QmYAkzJcdFZGQmFAHQ9itSxLK13DPtBycUbq5zrVhXvZQb/
Arg [3] : _parentContractAddress (address): 0x3a4cA1c1bB243D299032753fdd75e8FEc1F0d585

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000003a4ca1c1bb243d299032753fdd75e8fec1f0d585
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 4372617a794d756d6d69657a0000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4d4d595a00000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [9] : 68747470733a2f2f697066732e696f2f697066732f516d59416b7a4a6364465a
Arg [10] : 47516d4641485139697453784c4b3133445074427963556271357a7256685876
Arg [11] : 5a51622f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40165:4137:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25064:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19155:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19789:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42760:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19371:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40315:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26225:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40515:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20487:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25295:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43459:838;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43199:140;;;;;;;;;;;;;:::i;:::-;;20832:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42668:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26341:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42994:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18910:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40266:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42882:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18482:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28130:94;;;;;;;;;;;;;:::i;:::-;;40428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40461:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25801:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27479:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19261:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41644:662;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43347:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41138:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20016:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21023:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42314:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40391:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40353:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43104:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20317:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28379:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25064:225;25167:4;25206:35;25191:50;;;:11;:50;;;;:90;;;;25245:36;25269:11;25245:23;:36::i;:::-;25191:90;25184:97;;25064:225;;;:::o;19155:100::-;19209:13;19242:5;19235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19155:100;:::o;19789:221::-;19865:7;19893:16;19901:7;19893;:16::i;:::-;19885:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19978:15;:24;19994:7;19978:24;;;;;;;;;;;;;;;;;;;;;19971:31;;19789:221;;;:::o;42760:116::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42851:17:::1;42841:7;:27;;;;42760:116:::0;:::o;19371:412::-;19452:13;19468:24;19484:7;19468:15;:24::i;:::-;19452:40;;19517:5;19511:11;;:2;:11;;;;19503:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19611:5;19595:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19620:37;19637:5;19644:12;:10;:12::i;:::-;19620:16;:37::i;:::-;19595:62;19573:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19754:21;19763:2;19767:7;19754:8;:21::i;:::-;19441:342;19371:412;;:::o;40315:31::-;;;;:::o;26225:110::-;26286:7;26313;:14;;;;26306:21;;26225:110;:::o;40515:26::-;;;;;;;;;;;;;:::o;20487:339::-;20682:41;20701:12;:10;:12::i;:::-;20715:7;20682:18;:41::i;:::-;20674:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20790:28;20800:4;20806:2;20810:7;20790:9;:28::i;:::-;20487:339;;;:::o;25295:500::-;25384:15;25428:24;25446:5;25428:17;:24::i;:::-;25420:5;:32;25412:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:10;25516:6;25511:226;25528:7;:14;;;;25524:1;:18;25511:226;;;25577:7;25585:1;25577:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25568:19;;:5;:19;;;25564:162;;;25621:5;25612;:14;25608:102;;;25657:1;25650:8;;;;;;25608:102;25703:7;;;;:::i;:::-;;;25564:162;25544:3;;;;:::i;:::-;;;25511:226;;;;25755:5;25747:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25401:394;25295:500;;;;;:::o;43459:838::-;43527:6;;;;;;;;;;;43519:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43638:1;43606:28;;43593:3;:10;:41;;;;:::i;:::-;:46;43585:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;43706:10;43701:296;43726:3;:10;43722:1;:14;43701:296;;;43758:13;43774:23;;;;;;;;;;;:31;;;43806:3;43810:1;43806:6;;;;;;;;:::i;:::-;;;;;;;;43774:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43758:55;;43845:10;43836:19;;:5;:19;;;43828:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43929:17;43939:3;43943:1;43939:6;;;;;;;;:::i;:::-;;;;;;;;43929:9;:17::i;:::-;43928:18;43920:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43743:254;43738:3;;;;;:::i;:::-;;;;43701:296;;;;44014:10;44009:281;44034:3;:10;44030:1;:14;44009:281;;;44099:36;44109:10;44121:13;:11;:13::i;:::-;44099:9;:36::i;:::-;44176:4;44150:15;:23;44166:3;44170:1;44166:6;;;;;;;;:::i;:::-;;;;;;;;44150:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;44225:4;44195:15;:27;44211:3;44219:1;44215;:5;;;;:::i;:::-;44211:10;;;;;;;;:::i;:::-;;;;;;;;44195:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44274:4;44244:15;:27;44260:3;44268:1;44264;:5;;;;:::i;:::-;44260:10;;;;;;;;:::i;:::-;;;;;;;;44244:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44054:28;;44050:1;:32;;;;:::i;:::-;44046:36;;44009:281;;;;43459:838;:::o;43199:140::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43247:12:::1;43262:21;43247:36;;43302:10;43294:28;;:37;43323:7;43294:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43236:103;43199:140::o:0;20832:185::-;20970:39;20987:4;20993:2;20997:7;20970:39;;;;;;;;;;;;:16;:39::i;:::-;20832:185;;;:::o;42668:86::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42738:8:::1;42731:4;:15;;;;42668:86:::0;:::o;26341:194::-;26416:7;26452:24;:22;:24::i;:::-;26444:5;:32;26436:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26522:5;26515:12;;26341:194;;;:::o;42994:104::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43079:11:::1;43069:7;:21;;;;;;;;;;;;:::i;:::-;;42994:104:::0;:::o;18910:239::-;18982:7;19002:13;19018:7;19026;19018:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19002:32;;19070:1;19053:19;;:5;:19;;;;19045:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19136:5;19129:12;;;18910:239;;;:::o;40266:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42882:106::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42967:13:::1;42955:9;:25;;;;42882:106:::0;:::o;18482:422::-;18554:7;18599:1;18582:19;;:5;:19;;;;18574:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18659:10;18684:11;18698:7;:14;;;;18684:28;;18728:6;18723:127;18744:6;18740:1;:10;18723:127;;;18785:7;18793:1;18785:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18776:19;;:5;:19;;;18772:67;;;18816:7;;;;:::i;:::-;;;18772:67;18752:3;;;;:::i;:::-;;;18723:127;;;;18860:13;;;18891:5;18884:12;;;;18482:422;;;:::o;28130:94::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28195:21:::1;28213:1;28195:9;:21::i;:::-;28130:94::o:0;40428:26::-;;;;:::o;40461:47::-;;;;:::o;25801:418::-;25860:16;25901:24;25919:5;25901:17;:24::i;:::-;25897:1;:28;25889:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25963:18;25984:16;25994:5;25984:9;:16::i;:::-;25963:37;;26011:25;26053:10;26039:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26011:53;;26080:9;26075:111;26099:10;26095:1;:14;26075:111;;;26145:29;26165:5;26172:1;26145:19;:29::i;:::-;26131:8;26140:1;26131:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;26111:3;;;;;:::i;:::-;;;;26075:111;;;;26203:8;26196:15;;;;25801:418;;;:::o;27479:87::-;27525:7;27552:6;;;;;;;;;;;27545:13;;27479:87;:::o;19261:104::-;19317:13;19350:7;19343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19261:104;:::o;41644:662::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41770:9:::1;;:16;;41751:8;;:15;;:35;41743:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41836:18;41869:9:::0;41881:13:::1;:11;:13::i;:::-;41869:25;;41909:6;41905:96;41925:8;;:15;;41921:1;:19;41905:96;;;41978:8;;41987:1;41978:11;;;;;;;:::i;:::-;;;;;;;;41961:28;;;;;:::i;:::-;;;41942:3;;;;:::i;:::-;;;41905:96;;;;42041:9;;42024:13;42020:1;:17;;;;:::i;:::-;:30;;42011:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42075:20;;;42110:6;42106:174;42126:9;;:16;;42122:1;:20;42106:174;;;42167:6;42163:106;42183:8;;42192:1;42183:11;;;;;;;:::i;:::-;;;;;;;;42179:1;:15;42163:106;;;42219:34;42230:9;;42240:1;42230:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42244:3;;;;;:::i;:::-;;;42219:34;;;;;;;;;;;::::0;:9:::1;:34::i;:::-;42196:3;;;;:::i;:::-;;;42163:106;;;;42144:3;;;;:::i;:::-;;;42106:174;;;;42290:8;;;41732:574;;41644:662:::0;;;;:::o;43347:104::-;43400:4;43424:15;:19;43440:2;43424:19;;;;;;;;;;;;;;;;;;;;;43417:26;;43347:104;;;:::o;41138:476::-;39192:1;39788:7;;:19;;39780:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39192:1;39921:7;:18;;;;41211:9:::1;41223:13;:11;:13::i;:::-;41211:25;;41255:6;;;;;;;;;;;41247:23;;;;;;;;;;;;:::i;:::-;;;;;;;;;41303:1;41289:11;:15;41281:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;41347:7;;41332:11;:22;;41324:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;41405:9;;41391:11;41387:1;:15;;;;:::i;:::-;:27;41379:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;41464:11;41457:4;;:18;;;;:::i;:::-;41444:9;:31;;41436:40;;;::::0;::::1;;41492:9;41487:101;41511:11;41507:1;:15;41487:101;;;41544:32;41554:10;41570:1;41566;:5;;;;:::i;:::-;41544:32;;;;;;;;;;;::::0;:9:::1;:32::i;:::-;41524:3;;;;:::i;:::-;;;41487:101;;;;41598:8;;;41200:414;39148:1:::0;40100:7;:22;;;;41138:476;:::o;20016:295::-;20131:12;:10;:12::i;:::-;20119:24;;:8;:24;;;;20111:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20231:8;20186:18;:32;20205:12;:10;:12::i;:::-;20186:32;;;;;;;;;;;;;;;:42;20219:8;20186:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20284:8;20255:48;;20270:12;:10;:12::i;:::-;20255:48;;;20294:8;20255:48;;;;;;:::i;:::-;;;;;;;;20016:295;;:::o;21023:328::-;21198:41;21217:12;:10;:12::i;:::-;21231:7;21198:18;:41::i;:::-;21190:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21304:39;21318:4;21324:2;21328:7;21337:5;21304:13;:39::i;:::-;21023:328;;;;:::o;42314:348::-;42387:13;42421:16;42429:7;42421;:16::i;:::-;42413:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42486:28;42517:10;:8;:10::i;:::-;42486:41;;42576:1;42551:14;42545:28;:32;:109;;;;;;;;;;;;;;;;;42604:14;42620:18;:7;:16;:18::i;:::-;42587:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42545:109;42538:116;;;42314:348;;;:::o;40391:30::-;;;;:::o;40353:31::-;;;;:::o;43104:89::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43178:7:::1;43169:6;;:16;;;;;;;;;;;;;;;;;;43104:89:::0;:::o;20317:164::-;20414:4;20438:18;:25;20457:5;20438:25;;;;;;;;;;;;;;;:35;20464:8;20438:35;;;;;;;;;;;;;;;;;;;;;;;;;20431:42;;20317:164;;;;:::o;28379:192::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28488:1:::1;28468:22;;:8;:22;;;;28460:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28544:19;28554:8;28544:9;:19::i;:::-;28379:192:::0;:::o;18183:293::-;18285:4;18333:25;18318:40;;;:11;:40;;;;:101;;;;18386:33;18371:48;;;:11;:48;;;;18318:101;:150;;;;18432:36;18456:11;18432:23;:36::i;:::-;18318:150;18302:166;;18183:293;;;:::o;21678:155::-;21743:4;21777:7;:14;;;;21767:7;:24;:58;;;;;21823:1;21795:30;;:7;21803;21795:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;21767:58;21760:65;;21678:155;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;23851:175::-;23953:2;23926:15;:24;23942:7;23926:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24010:7;24006:2;23971:47;;23980:24;23996:7;23980:15;:24::i;:::-;23971:47;;;;;;;;;;;;23851:175;;:::o;21839:349::-;21932:4;21957:16;21965:7;21957;:16::i;:::-;21949:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22033:13;22049:24;22065:7;22049:15;:24::i;:::-;22033:40;;22103:5;22092:16;;:7;:16;;;:51;;;;22136:7;22112:31;;:20;22124:7;22112:11;:20::i;:::-;:31;;;22092:51;:87;;;;22147:32;22164:5;22171:7;22147:16;:32::i;:::-;22092:87;22084:96;;;21839:349;;;;:::o;23328:517::-;23488:4;23460:32;;:24;23476:7;23460:15;:24::i;:::-;:32;;;23452:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23571:1;23557:16;;:2;:16;;;;23549:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23627:39;23648:4;23654:2;23658:7;23627:20;:39::i;:::-;23731:29;23748:1;23752:7;23731:8;:29::i;:::-;23790:2;23771:7;23779;23771:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23829:7;23825:2;23810:27;;23819:4;23810:27;;;;;;;;;;;;23328:517;;;:::o;22194:110::-;22270:26;22280:2;22284:7;22270:26;;;;;;;;;;;;:9;:26::i;:::-;22194:110;;:::o;28579:173::-;28635:16;28654:6;;;;;;;;;;;28635:25;;28680:8;28671:6;;:17;;;;;;;;;;;;;;;;;;28735:8;28704:40;;28725:8;28704:40;;;;;;;;;;;;28624:128;28579:173;:::o;22310:321::-;22440:18;22446:2;22450:7;22440:5;:18::i;:::-;22491:54;22522:1;22526:2;22530:7;22539:5;22491:22;:54::i;:::-;22469:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22310:321;;;:::o;21357:315::-;21514:28;21524:4;21530:2;21534:7;21514:9;:28::i;:::-;21561:48;21584:4;21590:2;21594:7;21603:5;21561:22;:48::i;:::-;21553:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;21357:315;;;;:::o;41010:99::-;41061:13;41094:7;41087:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41010:99;:::o;29012:723::-;29068:13;29298:1;29289:5;:10;29285:53;;;29316:10;;;;;;;;;;;;;;;;;;;;;29285:53;29348:12;29363:5;29348:20;;29379:14;29404:78;29419:1;29411:4;:9;29404:78;;29437:8;;;;;:::i;:::-;;;;29468:2;29460:10;;;;;:::i;:::-;;;29404:78;;;29492:19;29524:6;29514:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29492:39;;29542:154;29558:1;29549:5;:10;29542:154;;29586:1;29576:11;;;;;:::i;:::-;;;29653:2;29645:5;:10;;;;:::i;:::-;29632:2;:24;;;;:::i;:::-;29619:39;;29602:6;29609;29602:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;29682:2;29673:11;;;;;:::i;:::-;;;29542:154;;;29720:6;29706:21;;;;;29012:723;;;;:::o;10361:157::-;10446:4;10485:25;10470:40;;;:11;:40;;;;10463:47;;10361:157;;;:::o;24837:126::-;;;;:::o;22637:346::-;22731:1;22717:16;;:2;:16;;;;22709:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:16;22798:7;22790;:16::i;:::-;22789:17;22781:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22852:45;22881:1;22885:2;22889:7;22852:20;:45::i;:::-;22908:7;22921:2;22908:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22967:7;22963:2;22942:33;;22959:1;22942:33;;;;;;;;;;;;22637:346;;:::o;24032:799::-;24187:4;24208:15;:2;:13;;;:15::i;:::-;24204:620;;;24260:2;24244:36;;;24281:12;:10;:12::i;:::-;24295:4;24301:7;24310:5;24244:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;24240:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24503:1;24486:6;:13;:18;24482:272;;;24529:60;;;;;;;;;;:::i;:::-;;;;;;;;24482:272;24704:6;24698:13;24689:6;24685:2;24681:15;24674:38;24240:529;24377:41;;;24367:51;;;:6;:51;;;;24360:58;;;;;24204:620;24808:4;24801:11;;24032:799;;;;;;;:::o;1524:387::-;1584:4;1792:12;1859:7;1847:20;1839:28;;1902:1;1895:4;:8;1888:15;;;1524:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:180;6086:77;6083:1;6076:88;6183:4;6180:1;6173:15;6207:4;6204:1;6197:15;6224:281;6307:27;6329:4;6307:27;:::i;:::-;6299:6;6295:40;6437:6;6425:10;6422:22;6401:18;6389:10;6386:34;6383:62;6380:88;;;6448:18;;:::i;:::-;6380:88;6488:10;6484:2;6477:22;6267:238;6224:281;;:::o;6511:129::-;6545:6;6572:20;;:::i;:::-;6562:30;;6601:33;6629:4;6621:6;6601:33;:::i;:::-;6511:129;;;:::o;6646:311::-;6723:4;6813:18;6805:6;6802:30;6799:56;;;6835:18;;:::i;:::-;6799:56;6885:4;6877:6;6873:17;6865:25;;6945:4;6939;6935:15;6927:23;;6646:311;;;:::o;6963:117::-;7072:1;7069;7062:12;7103:710;7199:5;7224:81;7240:64;7297:6;7240:64;:::i;:::-;7224:81;:::i;:::-;7215:90;;7325:5;7354:6;7347:5;7340:21;7388:4;7381:5;7377:16;7370:23;;7441:4;7433:6;7429:17;7421:6;7417:30;7470:3;7462:6;7459:15;7456:122;;;7489:79;;:::i;:::-;7456:122;7604:6;7587:220;7621:6;7616:3;7613:15;7587:220;;;7696:3;7725:37;7758:3;7746:10;7725:37;:::i;:::-;7720:3;7713:50;7792:4;7787:3;7783:14;7776:21;;7663:144;7647:4;7642:3;7638:14;7631:21;;7587:220;;;7591:21;7205:608;;7103:710;;;;;:::o;7836:370::-;7907:5;7956:3;7949:4;7941:6;7937:17;7933:27;7923:122;;7964:79;;:::i;:::-;7923:122;8081:6;8068:20;8106:94;8196:3;8188:6;8181:4;8173:6;8169:17;8106:94;:::i;:::-;8097:103;;7913:293;7836:370;;;;:::o;8212:539::-;8296:6;8345:2;8333:9;8324:7;8320:23;8316:32;8313:119;;;8351:79;;:::i;:::-;8313:119;8499:1;8488:9;8484:17;8471:31;8529:18;8521:6;8518:30;8515:117;;;8551:79;;:::i;:::-;8515:117;8656:78;8726:7;8717:6;8706:9;8702:22;8656:78;:::i;:::-;8646:88;;8442:302;8212:539;;;;:::o;8757:117::-;8866:1;8863;8856:12;8880:308;8942:4;9032:18;9024:6;9021:30;9018:56;;;9054:18;;:::i;:::-;9018:56;9092:29;9114:6;9092:29;:::i;:::-;9084:37;;9176:4;9170;9166:15;9158:23;;8880:308;;;:::o;9194:154::-;9278:6;9273:3;9268;9255:30;9340:1;9331:6;9326:3;9322:16;9315:27;9194:154;;;:::o;9354:412::-;9432:5;9457:66;9473:49;9515:6;9473:49;:::i;:::-;9457:66;:::i;:::-;9448:75;;9546:6;9539:5;9532:21;9584:4;9577:5;9573:16;9622:3;9613:6;9608:3;9604:16;9601:25;9598:112;;;9629:79;;:::i;:::-;9598:112;9719:41;9753:6;9748:3;9743;9719:41;:::i;:::-;9438:328;9354:412;;;;;:::o;9786:340::-;9842:5;9891:3;9884:4;9876:6;9872:17;9868:27;9858:122;;9899:79;;:::i;:::-;9858:122;10016:6;10003:20;10041:79;10116:3;10108:6;10101:4;10093:6;10089:17;10041:79;:::i;:::-;10032:88;;9848:278;9786:340;;;;:::o;10132:509::-;10201:6;10250:2;10238:9;10229:7;10225:23;10221:32;10218:119;;;10256:79;;:::i;:::-;10218:119;10404:1;10393:9;10389:17;10376:31;10434:18;10426:6;10423:30;10420:117;;;10456:79;;:::i;:::-;10420:117;10561:63;10616:7;10607:6;10596:9;10592:22;10561:63;:::i;:::-;10551:73;;10347:287;10132:509;;;;:::o;10647:329::-;10706:6;10755:2;10743:9;10734:7;10730:23;10726:32;10723:119;;;10761:79;;:::i;:::-;10723:119;10881:1;10906:53;10951:7;10942:6;10931:9;10927:22;10906:53;:::i;:::-;10896:63;;10852:117;10647:329;;;;:::o;10982:114::-;11049:6;11083:5;11077:12;11067:22;;10982:114;;;:::o;11102:184::-;11201:11;11235:6;11230:3;11223:19;11275:4;11270:3;11266:14;11251:29;;11102:184;;;;:::o;11292:132::-;11359:4;11382:3;11374:11;;11412:4;11407:3;11403:14;11395:22;;11292:132;;;:::o;11430:108::-;11507:24;11525:5;11507:24;:::i;:::-;11502:3;11495:37;11430:108;;:::o;11544:179::-;11613:10;11634:46;11676:3;11668:6;11634:46;:::i;:::-;11712:4;11707:3;11703:14;11689:28;;11544:179;;;;:::o;11729:113::-;11799:4;11831;11826:3;11822:14;11814:22;;11729:113;;;:::o;11878:732::-;11997:3;12026:54;12074:5;12026:54;:::i;:::-;12096:86;12175:6;12170:3;12096:86;:::i;:::-;12089:93;;12206:56;12256:5;12206:56;:::i;:::-;12285:7;12316:1;12301:284;12326:6;12323:1;12320:13;12301:284;;;12402:6;12396:13;12429:63;12488:3;12473:13;12429:63;:::i;:::-;12422:70;;12515:60;12568:6;12515:60;:::i;:::-;12505:70;;12361:224;12348:1;12345;12341:9;12336:14;;12301:284;;;12305:14;12601:3;12594:10;;12002:608;;;11878:732;;;;:::o;12616:373::-;12759:4;12797:2;12786:9;12782:18;12774:26;;12846:9;12840:4;12836:20;12832:1;12821:9;12817:17;12810:47;12874:108;12977:4;12968:6;12874:108;:::i;:::-;12866:116;;12616:373;;;;:::o;12995:117::-;13104:1;13101;13094:12;13135:568;13208:8;13218:6;13268:3;13261:4;13253:6;13249:17;13245:27;13235:122;;13276:79;;:::i;:::-;13235:122;13389:6;13376:20;13366:30;;13419:18;13411:6;13408:30;13405:117;;;13441:79;;:::i;:::-;13405:117;13555:4;13547:6;13543:17;13531:29;;13609:3;13601:4;13593:6;13589:17;13579:8;13575:32;13572:41;13569:128;;;13616:79;;:::i;:::-;13569:128;13135:568;;;;;:::o;13726:::-;13799:8;13809:6;13859:3;13852:4;13844:6;13840:17;13836:27;13826:122;;13867:79;;:::i;:::-;13826:122;13980:6;13967:20;13957:30;;14010:18;14002:6;13999:30;13996:117;;;14032:79;;:::i;:::-;13996:117;14146:4;14138:6;14134:17;14122:29;;14200:3;14192:4;14184:6;14180:17;14170:8;14166:32;14163:41;14160:128;;;14207:79;;:::i;:::-;14160:128;13726:568;;;;;:::o;14300:934::-;14422:6;14430;14438;14446;14495:2;14483:9;14474:7;14470:23;14466:32;14463:119;;;14501:79;;:::i;:::-;14463:119;14649:1;14638:9;14634:17;14621:31;14679:18;14671:6;14668:30;14665:117;;;14701:79;;:::i;:::-;14665:117;14814:80;14886:7;14877:6;14866:9;14862:22;14814:80;:::i;:::-;14796:98;;;;14592:312;14971:2;14960:9;14956:18;14943:32;15002:18;14994:6;14991:30;14988:117;;;15024:79;;:::i;:::-;14988:117;15137:80;15209:7;15200:6;15189:9;15185:22;15137:80;:::i;:::-;15119:98;;;;14914:313;14300:934;;;;;;;:::o;15240:116::-;15310:21;15325:5;15310:21;:::i;:::-;15303:5;15300:32;15290:60;;15346:1;15343;15336:12;15290:60;15240:116;:::o;15362:133::-;15405:5;15443:6;15430:20;15421:29;;15459:30;15483:5;15459:30;:::i;:::-;15362:133;;;;:::o;15501:468::-;15566:6;15574;15623:2;15611:9;15602:7;15598:23;15594:32;15591:119;;;15629:79;;:::i;:::-;15591:119;15749:1;15774:53;15819:7;15810:6;15799:9;15795:22;15774:53;:::i;:::-;15764:63;;15720:117;15876:2;15902:50;15944:7;15935:6;15924:9;15920:22;15902:50;:::i;:::-;15892:60;;15847:115;15501:468;;;;;:::o;15975:307::-;16036:4;16126:18;16118:6;16115:30;16112:56;;;16148:18;;:::i;:::-;16112:56;16186:29;16208:6;16186:29;:::i;:::-;16178:37;;16270:4;16264;16260:15;16252:23;;15975:307;;;:::o;16288:410::-;16365:5;16390:65;16406:48;16447:6;16406:48;:::i;:::-;16390:65;:::i;:::-;16381:74;;16478:6;16471:5;16464:21;16516:4;16509:5;16505:16;16554:3;16545:6;16540:3;16536:16;16533:25;16530:112;;;16561:79;;:::i;:::-;16530:112;16651:41;16685:6;16680:3;16675;16651:41;:::i;:::-;16371:327;16288:410;;;;;:::o;16717:338::-;16772:5;16821:3;16814:4;16806:6;16802:17;16798:27;16788:122;;16829:79;;:::i;:::-;16788:122;16946:6;16933:20;16971:78;17045:3;17037:6;17030:4;17022:6;17018:17;16971:78;:::i;:::-;16962:87;;16778:277;16717:338;;;;:::o;17061:943::-;17156:6;17164;17172;17180;17229:3;17217:9;17208:7;17204:23;17200:33;17197:120;;;17236:79;;:::i;:::-;17197:120;17356:1;17381:53;17426:7;17417:6;17406:9;17402:22;17381:53;:::i;:::-;17371:63;;17327:117;17483:2;17509:53;17554:7;17545:6;17534:9;17530:22;17509:53;:::i;:::-;17499:63;;17454:118;17611:2;17637:53;17682:7;17673:6;17662:9;17658:22;17637:53;:::i;:::-;17627:63;;17582:118;17767:2;17756:9;17752:18;17739:32;17798:18;17790:6;17787:30;17784:117;;;17820:79;;:::i;:::-;17784:117;17925:62;17979:7;17970:6;17959:9;17955:22;17925:62;:::i;:::-;17915:72;;17710:287;17061:943;;;;;;;:::o;18010:323::-;18066:6;18115:2;18103:9;18094:7;18090:23;18086:32;18083:119;;;18121:79;;:::i;:::-;18083:119;18241:1;18266:50;18308:7;18299:6;18288:9;18284:22;18266:50;:::i;:::-;18256:60;;18212:114;18010:323;;;;:::o;18339:474::-;18407:6;18415;18464:2;18452:9;18443:7;18439:23;18435:32;18432:119;;;18470:79;;:::i;:::-;18432:119;18590:1;18615:53;18660:7;18651:6;18640:9;18636:22;18615:53;:::i;:::-;18605:63;;18561:117;18717:2;18743:53;18788:7;18779:6;18768:9;18764:22;18743:53;:::i;:::-;18733:63;;18688:118;18339:474;;;;;:::o;18819:180::-;18867:77;18864:1;18857:88;18964:4;18961:1;18954:15;18988:4;18985:1;18978:15;19005:320;19049:6;19086:1;19080:4;19076:12;19066:22;;19133:1;19127:4;19123:12;19154:18;19144:81;;19210:4;19202:6;19198:17;19188:27;;19144:81;19272:2;19264:6;19261:14;19241:18;19238:38;19235:84;;;19291:18;;:::i;:::-;19235:84;19056:269;19005:320;;;:::o;19331:231::-;19471:34;19467:1;19459:6;19455:14;19448:58;19540:14;19535:2;19527:6;19523:15;19516:39;19331:231;:::o;19568:366::-;19710:3;19731:67;19795:2;19790:3;19731:67;:::i;:::-;19724:74;;19807:93;19896:3;19807:93;:::i;:::-;19925:2;19920:3;19916:12;19909:19;;19568:366;;;:::o;19940:419::-;20106:4;20144:2;20133:9;20129:18;20121:26;;20193:9;20187:4;20183:20;20179:1;20168:9;20164:17;20157:47;20221:131;20347:4;20221:131;:::i;:::-;20213:139;;19940:419;;;:::o;20365:182::-;20505:34;20501:1;20493:6;20489:14;20482:58;20365:182;:::o;20553:366::-;20695:3;20716:67;20780:2;20775:3;20716:67;:::i;:::-;20709:74;;20792:93;20881:3;20792:93;:::i;:::-;20910:2;20905:3;20901:12;20894:19;;20553:366;;;:::o;20925:419::-;21091:4;21129:2;21118:9;21114:18;21106:26;;21178:9;21172:4;21168:20;21164:1;21153:9;21149:17;21142:47;21206:131;21332:4;21206:131;:::i;:::-;21198:139;;20925:419;;;:::o;21350:220::-;21490:34;21486:1;21478:6;21474:14;21467:58;21559:3;21554:2;21546:6;21542:15;21535:28;21350:220;:::o;21576:366::-;21718:3;21739:67;21803:2;21798:3;21739:67;:::i;:::-;21732:74;;21815:93;21904:3;21815:93;:::i;:::-;21933:2;21928:3;21924:12;21917:19;;21576:366;;;:::o;21948:419::-;22114:4;22152:2;22141:9;22137:18;22129:26;;22201:9;22195:4;22191:20;22187:1;22176:9;22172:17;22165:47;22229:131;22355:4;22229:131;:::i;:::-;22221:139;;21948:419;;;:::o;22373:243::-;22513:34;22509:1;22501:6;22497:14;22490:58;22582:26;22577:2;22569:6;22565:15;22558:51;22373:243;:::o;22622:366::-;22764:3;22785:67;22849:2;22844:3;22785:67;:::i;:::-;22778:74;;22861:93;22950:3;22861:93;:::i;:::-;22979:2;22974:3;22970:12;22963:19;;22622:366;;;:::o;22994:419::-;23160:4;23198:2;23187:9;23183:18;23175:26;;23247:9;23241:4;23237:20;23233:1;23222:9;23218:17;23211:47;23275:131;23401:4;23275:131;:::i;:::-;23267:139;;22994:419;;;:::o;23419:236::-;23559:34;23555:1;23547:6;23543:14;23536:58;23628:19;23623:2;23615:6;23611:15;23604:44;23419:236;:::o;23661:366::-;23803:3;23824:67;23888:2;23883:3;23824:67;:::i;:::-;23817:74;;23900:93;23989:3;23900:93;:::i;:::-;24018:2;24013:3;24009:12;24002:19;;23661:366;;;:::o;24033:419::-;24199:4;24237:2;24226:9;24222:18;24214:26;;24286:9;24280:4;24276:20;24272:1;24261:9;24257:17;24250:47;24314:131;24440:4;24314:131;:::i;:::-;24306:139;;24033:419;;;:::o;24458:172::-;24598:24;24594:1;24586:6;24582:14;24575:48;24458:172;:::o;24636:366::-;24778:3;24799:67;24863:2;24858:3;24799:67;:::i;:::-;24792:74;;24875:93;24964:3;24875:93;:::i;:::-;24993:2;24988:3;24984:12;24977:19;;24636:366;;;:::o;25008:419::-;25174:4;25212:2;25201:9;25197:18;25189:26;;25261:9;25255:4;25251:20;25247:1;25236:9;25232:17;25225:47;25289:131;25415:4;25289:131;:::i;:::-;25281:139;;25008:419;;;:::o;25433:180::-;25481:77;25478:1;25471:88;25578:4;25575:1;25568:15;25602:4;25599:1;25592:15;25619:180;25667:77;25664:1;25657:88;25764:4;25761:1;25754:15;25788:4;25785:1;25778:15;25805:233;25844:3;25867:24;25885:5;25867:24;:::i;:::-;25858:33;;25913:66;25906:5;25903:77;25900:103;;;25983:18;;:::i;:::-;25900:103;26030:1;26023:5;26019:13;26012:20;;25805:233;;;:::o;26044:223::-;26184:34;26180:1;26172:6;26168:14;26161:58;26253:6;26248:2;26240:6;26236:15;26229:31;26044:223;:::o;26273:366::-;26415:3;26436:67;26500:2;26495:3;26436:67;:::i;:::-;26429:74;;26512:93;26601:3;26512:93;:::i;:::-;26630:2;26625:3;26621:12;26614:19;;26273:366;;;:::o;26645:419::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:180::-;27118:77;27115:1;27108:88;27215:4;27212:1;27205:15;27239:4;27236:1;27229:15;27256:176;27288:1;27305:20;27323:1;27305:20;:::i;:::-;27300:25;;27339:20;27357:1;27339:20;:::i;:::-;27334:25;;27378:1;27368:35;;27383:18;;:::i;:::-;27368:35;27424:1;27421;27417:9;27412:14;;27256:176;;;;:::o;27438:233::-;27578:34;27574:1;27566:6;27562:14;27555:58;27647:16;27642:2;27634:6;27630:15;27623:41;27438:233;:::o;27677:366::-;27819:3;27840:67;27904:2;27899:3;27840:67;:::i;:::-;27833:74;;27916:93;28005:3;27916:93;:::i;:::-;28034:2;28029:3;28025:12;28018:19;;27677:366;;;:::o;28049:419::-;28215:4;28253:2;28242:9;28238:18;28230:26;;28302:9;28296:4;28292:20;28288:1;28277:9;28273:17;28266:47;28330:131;28456:4;28330:131;:::i;:::-;28322:139;;28049:419;;;:::o;28474:143::-;28531:5;28562:6;28556:13;28547:22;;28578:33;28605:5;28578:33;:::i;:::-;28474:143;;;;:::o;28623:351::-;28693:6;28742:2;28730:9;28721:7;28717:23;28713:32;28710:119;;;28748:79;;:::i;:::-;28710:119;28868:1;28893:64;28949:7;28940:6;28929:9;28925:22;28893:64;:::i;:::-;28883:74;;28839:128;28623:351;;;;:::o;28980:232::-;29120:34;29116:1;29108:6;29104:14;29097:58;29189:15;29184:2;29176:6;29172:15;29165:40;28980:232;:::o;29218:366::-;29360:3;29381:67;29445:2;29440:3;29381:67;:::i;:::-;29374:74;;29457:93;29546:3;29457:93;:::i;:::-;29575:2;29570:3;29566:12;29559:19;;29218:366;;;:::o;29590:419::-;29756:4;29794:2;29783:9;29779:18;29771:26;;29843:9;29837:4;29833:20;29829:1;29818:9;29814:17;29807:47;29871:131;29997:4;29871:131;:::i;:::-;29863:139;;29590:419;;;:::o;30015:221::-;30155:34;30151:1;30143:6;30139:14;30132:58;30224:4;30219:2;30211:6;30207:15;30200:29;30015:221;:::o;30242:366::-;30384:3;30405:67;30469:2;30464:3;30405:67;:::i;:::-;30398:74;;30481:93;30570:3;30481:93;:::i;:::-;30599:2;30594:3;30590:12;30583:19;;30242:366;;;:::o;30614:419::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:305::-;31079:3;31098:20;31116:1;31098:20;:::i;:::-;31093:25;;31132:20;31150:1;31132:20;:::i;:::-;31127:25;;31286:1;31218:66;31214:74;31211:1;31208:81;31205:107;;;31292:18;;:::i;:::-;31205:107;31336:1;31333;31329:9;31322:16;;31039:305;;;;:::o;31350:173::-;31490:25;31486:1;31478:6;31474:14;31467:49;31350:173;:::o;31529:366::-;31671:3;31692:67;31756:2;31751:3;31692:67;:::i;:::-;31685:74;;31768:93;31857:3;31768:93;:::i;:::-;31886:2;31881:3;31877:12;31870:19;;31529:366;;;:::o;31901:419::-;32067:4;32105:2;32094:9;32090:18;32082:26;;32154:9;32148:4;32144:20;32140:1;32129:9;32125:17;32118:47;32182:131;32308:4;32182:131;:::i;:::-;32174:139;;31901:419;;;:::o;32326:228::-;32466:34;32462:1;32454:6;32450:14;32443:58;32535:11;32530:2;32522:6;32518:15;32511:36;32326:228;:::o;32560:366::-;32702:3;32723:67;32787:2;32782:3;32723:67;:::i;:::-;32716:74;;32799:93;32888:3;32799:93;:::i;:::-;32917:2;32912:3;32908:12;32901:19;;32560:366;;;:::o;32932:419::-;33098:4;33136:2;33125:9;33121:18;33113:26;;33185:9;33179:4;33175:20;33171:1;33160:9;33156:17;33149:47;33213:131;33339:4;33213:131;:::i;:::-;33205:139;;32932:419;;;:::o;33357:229::-;33497:34;33493:1;33485:6;33481:14;33474:58;33566:12;33561:2;33553:6;33549:15;33542:37;33357:229;:::o;33592:366::-;33734:3;33755:67;33819:2;33814:3;33755:67;:::i;:::-;33748:74;;33831:93;33920:3;33831:93;:::i;:::-;33949:2;33944:3;33940:12;33933:19;;33592:366;;;:::o;33964:419::-;34130:4;34168:2;34157:9;34153:18;34145:26;;34217:9;34211:4;34207:20;34203:1;34192:9;34188:17;34181:47;34245:131;34371:4;34245:131;:::i;:::-;34237:139;;33964:419;;;:::o;34389:220::-;34529:34;34525:1;34517:6;34513:14;34506:58;34598:3;34593:2;34585:6;34581:15;34574:28;34389:220;:::o;34615:366::-;34757:3;34778:67;34842:2;34837:3;34778:67;:::i;:::-;34771:74;;34854:93;34943:3;34854:93;:::i;:::-;34972:2;34967:3;34963:12;34956:19;;34615:366;;;:::o;34987:419::-;35153:4;35191:2;35180:9;35176:18;35168:26;;35240:9;35234:4;35230:20;35226:1;35215:9;35211:17;35204:47;35268:131;35394:4;35268:131;:::i;:::-;35260:139;;34987:419;;;:::o;35412:158::-;35552:10;35548:1;35540:6;35536:14;35529:34;35412:158;:::o;35576:365::-;35718:3;35739:66;35803:1;35798:3;35739:66;:::i;:::-;35732:73;;35814:93;35903:3;35814:93;:::i;:::-;35932:2;35927:3;35923:12;35916:19;;35576:365;;;:::o;35947:419::-;36113:4;36151:2;36140:9;36136:18;36128:26;;36200:9;36194:4;36190:20;36186:1;36175:9;36171:17;36164:47;36228:131;36354:4;36228:131;:::i;:::-;36220:139;;35947:419;;;:::o;36372:181::-;36512:33;36508:1;36500:6;36496:14;36489:57;36372:181;:::o;36559:366::-;36701:3;36722:67;36786:2;36781:3;36722:67;:::i;:::-;36715:74;;36798:93;36887:3;36798:93;:::i;:::-;36916:2;36911:3;36907:12;36900:19;;36559:366;;;:::o;36931:419::-;37097:4;37135:2;37124:9;37120:18;37112:26;;37184:9;37178:4;37174:20;37170:1;37159:9;37155:17;37148:47;37212:131;37338:4;37212:131;:::i;:::-;37204:139;;36931:419;;;:::o;37356:153::-;37496:5;37492:1;37484:6;37480:14;37473:29;37356:153;:::o;37515:365::-;37657:3;37678:66;37742:1;37737:3;37678:66;:::i;:::-;37671:73;;37753:93;37842:3;37753:93;:::i;:::-;37871:2;37866:3;37862:12;37855:19;;37515:365;;;:::o;37886:419::-;38052:4;38090:2;38079:9;38075:18;38067:26;;38139:9;38133:4;38129:20;38125:1;38114:9;38110:17;38103:47;38167:131;38293:4;38167:131;:::i;:::-;38159:139;;37886:419;;;:::o;38311:153::-;38451:5;38447:1;38439:6;38435:14;38428:29;38311:153;:::o;38470:365::-;38612:3;38633:66;38697:1;38692:3;38633:66;:::i;:::-;38626:73;;38708:93;38797:3;38708:93;:::i;:::-;38826:2;38821:3;38817:12;38810:19;;38470:365;;;:::o;38841:419::-;39007:4;39045:2;39034:9;39030:18;39022:26;;39094:9;39088:4;39084:20;39080:1;39069:9;39065:17;39058:47;39122:131;39248:4;39122:131;:::i;:::-;39114:139;;38841:419;;;:::o;39266:155::-;39406:7;39402:1;39394:6;39390:14;39383:31;39266:155;:::o;39427:365::-;39569:3;39590:66;39654:1;39649:3;39590:66;:::i;:::-;39583:73;;39665:93;39754:3;39665:93;:::i;:::-;39783:2;39778:3;39774:12;39767:19;;39427:365;;;:::o;39798:419::-;39964:4;40002:2;39991:9;39987:18;39979:26;;40051:9;40045:4;40041:20;40037:1;40026:9;40022:17;40015:47;40079:131;40205:4;40079:131;:::i;:::-;40071:139;;39798:419;;;:::o;40223:348::-;40263:7;40286:20;40304:1;40286:20;:::i;:::-;40281:25;;40320:20;40338:1;40320:20;:::i;:::-;40315:25;;40508:1;40440:66;40436:74;40433:1;40430:81;40425:1;40418:9;40411:17;40407:105;40404:131;;;40515:18;;:::i;:::-;40404:131;40563:1;40560;40556:9;40545:20;;40223:348;;;;:::o;40577:175::-;40717:27;40713:1;40705:6;40701:14;40694:51;40577:175;:::o;40758:366::-;40900:3;40921:67;40985:2;40980:3;40921:67;:::i;:::-;40914:74;;40997:93;41086:3;40997:93;:::i;:::-;41115:2;41110:3;41106:12;41099:19;;40758:366;;;:::o;41130:419::-;41296:4;41334:2;41323:9;41319:18;41311:26;;41383:9;41377:4;41373:20;41369:1;41358:9;41354:17;41347:47;41411:131;41537:4;41411:131;:::i;:::-;41403:139;;41130:419;;;:::o;41555:220::-;41695:34;41691:1;41683:6;41679:14;41672:58;41764:3;41759:2;41751:6;41747:15;41740:28;41555:220;:::o;41781:366::-;41923:3;41944:67;42008:2;42003:3;41944:67;:::i;:::-;41937:74;;42020:93;42109:3;42020:93;:::i;:::-;42138:2;42133:3;42129:12;42122:19;;41781:366;;;:::o;42153:419::-;42319:4;42357:2;42346:9;42342:18;42334:26;;42406:9;42400:4;42396:20;42392:1;42381:9;42377:17;42370:47;42434:131;42560:4;42434:131;:::i;:::-;42426:139;;42153:419;;;:::o;42578:148::-;42680:11;42717:3;42702:18;;42578:148;;;;:::o;42732:377::-;42838:3;42866:39;42899:5;42866:39;:::i;:::-;42921:89;43003:6;42998:3;42921:89;:::i;:::-;42914:96;;43019:52;43064:6;43059:3;43052:4;43045:5;43041:16;43019:52;:::i;:::-;43096:6;43091:3;43087:16;43080:23;;42842:267;42732:377;;;;:::o;43115:155::-;43255:7;43251:1;43243:6;43239:14;43232:31;43115:155;:::o;43276:400::-;43436:3;43457:84;43539:1;43534:3;43457:84;:::i;:::-;43450:91;;43550:93;43639:3;43550:93;:::i;:::-;43668:1;43663:3;43659:11;43652:18;;43276:400;;;:::o;43682:701::-;43963:3;43985:95;44076:3;44067:6;43985:95;:::i;:::-;43978:102;;44097:95;44188:3;44179:6;44097:95;:::i;:::-;44090:102;;44209:148;44353:3;44209:148;:::i;:::-;44202:155;;44374:3;44367:10;;43682:701;;;;;:::o;44389:225::-;44529:34;44525:1;44517:6;44513:14;44506:58;44598:8;44593:2;44585:6;44581:15;44574:33;44389:225;:::o;44620:366::-;44762:3;44783:67;44847:2;44842:3;44783:67;:::i;:::-;44776:74;;44859:93;44948:3;44859:93;:::i;:::-;44977:2;44972:3;44968:12;44961:19;;44620:366;;;:::o;44992:419::-;45158:4;45196:2;45185:9;45181:18;45173:26;;45245:9;45239:4;45235:20;45231:1;45220:9;45216:17;45209:47;45273:131;45399:4;45273:131;:::i;:::-;45265:139;;44992:419;;;:::o;45417:231::-;45557:34;45553:1;45545:6;45541:14;45534:58;45626:14;45621:2;45613:6;45609:15;45602:39;45417:231;:::o;45654:366::-;45796:3;45817:67;45881:2;45876:3;45817:67;:::i;:::-;45810:74;;45893:93;45982:3;45893:93;:::i;:::-;46011:2;46006:3;46002:12;45995:19;;45654:366;;;:::o;46026:419::-;46192:4;46230:2;46219:9;46215:18;46207:26;;46279:9;46273:4;46269:20;46265:1;46254:9;46250:17;46243:47;46307:131;46433:4;46307:131;:::i;:::-;46299:139;;46026:419;;;:::o;46451:228::-;46591:34;46587:1;46579:6;46575:14;46568:58;46660:11;46655:2;46647:6;46643:15;46636:36;46451:228;:::o;46685:366::-;46827:3;46848:67;46912:2;46907:3;46848:67;:::i;:::-;46841:74;;46924:93;47013:3;46924:93;:::i;:::-;47042:2;47037:3;47033:12;47026:19;;46685:366;;;:::o;47057:419::-;47223:4;47261:2;47250:9;47246:18;47238:26;;47310:9;47304:4;47300:20;47296:1;47285:9;47281:17;47274:47;47338:131;47464:4;47338:131;:::i;:::-;47330:139;;47057:419;;;:::o;47482:223::-;47622:34;47618:1;47610:6;47606:14;47599:58;47691:6;47686:2;47678:6;47674:15;47667:31;47482:223;:::o;47711:366::-;47853:3;47874:67;47938:2;47933:3;47874:67;:::i;:::-;47867:74;;47950:93;48039:3;47950:93;:::i;:::-;48068:2;48063:3;48059:12;48052:19;;47711:366;;;:::o;48083:419::-;48249:4;48287:2;48276:9;48272:18;48264:26;;48336:9;48330:4;48326:20;48322:1;48311:9;48307:17;48300:47;48364:131;48490:4;48364:131;:::i;:::-;48356:139;;48083:419;;;:::o;48508:237::-;48648:34;48644:1;48636:6;48632:14;48625:58;48717:20;48712:2;48704:6;48700:15;48693:45;48508:237;:::o;48751:366::-;48893:3;48914:67;48978:2;48973:3;48914:67;:::i;:::-;48907:74;;48990:93;49079:3;48990:93;:::i;:::-;49108:2;49103:3;49099:12;49092:19;;48751:366;;;:::o;49123:419::-;49289:4;49327:2;49316:9;49312:18;49304:26;;49376:9;49370:4;49366:20;49362:1;49351:9;49347:17;49340:47;49404:131;49530:4;49404:131;:::i;:::-;49396:139;;49123:419;;;:::o;49548:185::-;49588:1;49605:20;49623:1;49605:20;:::i;:::-;49600:25;;49639:20;49657:1;49639:20;:::i;:::-;49634:25;;49678:1;49668:35;;49683:18;;:::i;:::-;49668:35;49725:1;49722;49718:9;49713:14;;49548:185;;;;:::o;49739:191::-;49779:4;49799:20;49817:1;49799:20;:::i;:::-;49794:25;;49833:20;49851:1;49833:20;:::i;:::-;49828:25;;49872:1;49869;49866:8;49863:34;;;49877:18;;:::i;:::-;49863:34;49922:1;49919;49915:9;49907:17;;49739:191;;;;:::o;49936:182::-;50076:34;50072:1;50064:6;50060:14;50053:58;49936:182;:::o;50124:366::-;50266:3;50287:67;50351:2;50346:3;50287:67;:::i;:::-;50280:74;;50363:93;50452:3;50363:93;:::i;:::-;50481:2;50476:3;50472:12;50465:19;;50124:366;;;:::o;50496:419::-;50662:4;50700:2;50689:9;50685:18;50677:26;;50749:9;50743:4;50739:20;50735:1;50724:9;50720:17;50713:47;50777:131;50903:4;50777:131;:::i;:::-;50769:139;;50496:419;;;:::o;50921:178::-;51061:30;51057:1;51049:6;51045:14;51038:54;50921:178;:::o;51105:366::-;51247:3;51268:67;51332:2;51327:3;51268:67;:::i;:::-;51261:74;;51344:93;51433:3;51344:93;:::i;:::-;51462:2;51457:3;51453:12;51446:19;;51105:366;;;:::o;51477:419::-;51643:4;51681:2;51670:9;51666:18;51658:26;;51730:9;51724:4;51720:20;51716:1;51705:9;51701:17;51694:47;51758:131;51884:4;51758:131;:::i;:::-;51750:139;;51477:419;;;:::o;51902:98::-;51953:6;51987:5;51981:12;51971:22;;51902:98;;;:::o;52006:168::-;52089:11;52123:6;52118:3;52111:19;52163:4;52158:3;52154:14;52139:29;;52006:168;;;;:::o;52180:360::-;52266:3;52294:38;52326:5;52294:38;:::i;:::-;52348:70;52411:6;52406:3;52348:70;:::i;:::-;52341:77;;52427:52;52472:6;52467:3;52460:4;52453:5;52449:16;52427:52;:::i;:::-;52504:29;52526:6;52504:29;:::i;:::-;52499:3;52495:39;52488:46;;52270:270;52180:360;;;;:::o;52546:640::-;52741:4;52779:3;52768:9;52764:19;52756:27;;52793:71;52861:1;52850:9;52846:17;52837:6;52793:71;:::i;:::-;52874:72;52942:2;52931:9;52927:18;52918:6;52874:72;:::i;:::-;52956;53024:2;53013:9;53009:18;53000:6;52956:72;:::i;:::-;53075:9;53069:4;53065:20;53060:2;53049:9;53045:18;53038:48;53103:76;53174:4;53165:6;53103:76;:::i;:::-;53095:84;;52546:640;;;;;;;:::o;53192:141::-;53248:5;53279:6;53273:13;53264:22;;53295:32;53321:5;53295:32;:::i;:::-;53192:141;;;;:::o;53339:349::-;53408:6;53457:2;53445:9;53436:7;53432:23;53428:32;53425:119;;;53463:79;;:::i;:::-;53425:119;53583:1;53608:63;53663:7;53654:6;53643:9;53639:22;53608:63;:::i;:::-;53598:73;;53554:127;53339:349;;;;:::o

Swarm Source

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