ETH Price: $3,387.96 (+0.92%)

Token

Blockchain Miners Club (BMC)
 

Overview

Max Total Supply

2,221 BMC

Holders

1,073

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
collinscrypto.eth
Balance
1 BMC
0x6DE8DD307f540180A3EEfaEaDBbfF9D5B0904BF0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Blockchain Miners NFTs are hand-drawn, rare, and unique artworks that come with a real utility. Our unique artworks are inspired by BTC miners (Antminer S19j ASIC Pro) and will be limited to 11,111 items that are generated from 280+ traits and attributes.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Blockchain_Miners_Club

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

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

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

pragma solidity ^0.8.0;

/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}



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.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

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

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}


pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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


/**
::::::ccclccccclloooollooodxxxxxxxxdddxxkkkkkkkkO00000000OOkkkkkkxxdddxxxxxxxdoolllooolccccccc::::::
ccccllcccccllloooollooddxxxxxxxddxxxkkkkkkkOO000000000000000OOOkkkkkkxxxxxxxxxxxddoollloollccccccc::
llcccclllooooollooddxxxxxxxxxxxxkkkkkkkOO000OOO0KKK0000KK000OOOOOOkkkkkOkkkxxxxxxxxxddoolllolllccccc
cclllooooollloodxxxxxxxxxxxkkOkkkOOO00000OkkOkOOK00kxkkkkxxkkkkkkOO0OOkkkkOOkkkxxxxxxxxxddoooloollcc
looooolllooddxxxxxxxxxkkkOOkOOO000000OkkOkkO0Oxoc,.. .';coddddxxdxkkkkOOOOkkkkOOkkxxxdxxxxxxddoollll
oooolooddxxxxxxxxxkkkkOOOOO000000OOOOOkk0Oxoc,.          .';coddddxxxxkkkkkOOOkkkkOOkkxxxddxxxxxdool
oooloxxxxxxxxxkkkkOOOO0000O000O00OkkOOxoc,.                  .';coxxdxxxxxkkkxkkOOkkkOOOkkxxddxxxxxx
oolldxxdxxkkkkkOOO000OO000O000OOOOxo:,.                          .';coxxdxkkkxkkxxkkkOkkkOOOkxddxxxx
oolldxxdxOkkkOO00OO00OOO0OOkOOxo:,.                                  .';coxxdk0K0OkxkOOOOkkkkOxdxxxx
oolldxddkOxk00O00OOOOOxxkkxl:,.                                          .';:oxkO0K0000OO00xxOxdxxxx
oolldxddkOkkO0OOOkxxkkdl:,.                                                  ..,ckKKK0KKOO0kxOxdxxxx
oocldxddkOxxkkxxxkdc:,.                                                          lkkK0KKOO0kxOxdxxxx
oollxxdxkkxxddxxkc.                                                              :dd00KKOO0kxOxdxxxx
ooloxxdxOkxxdddxk,                                                               :ddOOKKOO0kxOxdxxxx
ooloxxxxOkxxxxxxk,                                                               :ddOO00OO0kxOxdxxxx
ooldxxxxOkxkOOxxk,            ..'''.                           .',;;,.           :ddOkk0OO0kkOxdxxxx
ooldxxxxOkxkO0xxk,           'kOdodkxc.     'c.              cOOkkkko.           :ddOkk0OO0kkOkxxxxx
ooodxxdxOxkk00dxk,           :Kl   .c0d.    cXo       ::    .dWx.                :ddOkk0OO0kkOkxxxxx
olodxxdxOxkO00dxk,           :Kc    .dO.    lW0,     .OO'    lNx.                :doOkk0OO0kkOkdxxxx
olodxxdxOxkO00kkk,           ;Kk::::o0o     oWWd.    :XNl    :Xk.                :doOkk0OO0kkOkdxxxx
olldxxdxOxkO0K0KO,           ;KOcccldkkc.  .dX0O;   .xKKO'   ,KO.                :dokkk0OO0kkOxdxxxx
olldxxdxOkkOOK00k,           ;0l      ;Ok. .k0:xx.  ;0lc0l   .O0'                :dokkk0OO0kkOxdxxxx
ollxxxdxOkkOOK0Od,           ,0l       ,Oc .Ok.,k: .dO'.xO.  .xK,                :dokkx0OO0kxOxdxxxx
oclxxxdkOkkkOK0kd,           ,0o       .kl '0x. lxclOo  :Kl   dX:                :dokkxOOO0xxOxddxxx
ocoxxxdkkkOk000kd,           ,0o       :O; ,0d  .xXX0,  .kO.  lXc                :dokxxOOO0xkOxodxxx
oloxxddkkkOO00Okd,           '0x.  ..,lkc  ;0l   :OXx.   cKc  ;Kd.               :dokkOKOO0kkOxodxxx
oloxxddkkkOO0kkkd,           .lxlclool:.   ;O:   .'c;    'Ok. .d0kxdxxo.         :dokO0KOO0xkOxodxxx
lldxxdokkkOO0kxkd,                         ...            ,:.   ';cloo:.         :dokk0XOOOxxOkddxxx
lldxxddkkkO0Kxxkd,                                                               :dokO0X00OxxOkddxxx
lldxxddkxkO0Kxxxd,                                                               :dokO0X0OOxkOkddxxx
lldxxddkxkOO0kxxo,                                                               :od000XOOOxkOkddxxx
lldxxdxkxkOO0kxdo,                                                               :od0O0X0OOxkOkddxxx
loxxxdxkxkOOKkxdo,                                                              .lod00KXOOOxkOkddxxx
loxxxdxkxkO0Kkxdo,                                                          .':cdkxkK0KKOOOxkOkddxxx
loxxxdxkxOO0K00xol,..                                                   .':ldkkxxkO00000O0OxkOkddxxx
loxxxdxkkOOO000Oxxxdl:,.                                            .,:ldkkxxkOOO00000000OkkOOkddxxx
loxxxxkkkO00O0000Okkxxxxdoloc'.                                 .':ldkkxxkOOO000000000OOkkOOOkxddxxx
loxxxdxOkkkkO0000000OOkkk000Okdc;'.                         .,:ldkkxxxkOO00000000OOOOOOOOkkxxddxxxxd
llodxddxxkOkkkkkO00000000Okkkkxxxxoc;'.                 .,:ldkkxxkkkO00000000OkkkkOOOkkxxxdxxxxxdool
oollodxxxxxxkOkkxkkO0000000KKK0Okkddddoc:,.         .,:ldkkxdkOOO00000000OkkkkkOOkkxxddxxxxxddoolloo
lloooloodxxxxxxkkkkxkkO000000000000Okxddxxol:,..,:cldkkxdxkOO00000000OkkkkkOOkkxxddxxxxxdddoollooooo
ccllloooooddxxxxxxkkOkkkkO0000000000000OOOOO0KOOOOkxdxkkO0000O000OkkkkkOOkkxxxdxxxxxxddoooloooooollc
lccccllooolooddxxxxxxxkOkkkkkkkkOO00O000KKKKKKK00OOOO000000000OkkkkOOOkxxddxxxxxxddoooloooooollccccc
ccclccccloooolloodxxxxdxxkOOOOOOkkkkO00OO0000KKKKKK0000000OkkkkkOOkxxxddxxxxxddoolloooooollcccccccll
:::clllccclloooolloodxxxxxxxkkkkkOOkkkkOO00O0000000000OOkkkkOOkxxxxxxxxxxxdoollloooooollccccclclllll
:::::ccllccccllooollloddxxxxxxxxxxkkOOkkkkOO00000OOOkkkkOOkxxxddxxxxxxdooolloooooollccccccllcllllcc:
;:::;::cccllcccllooooolloddxxxxxxxxxxxkkOOkkkOOOkkkkOOkxxxddxxxxxxddoolllooooolllcccclllcclllccc::::
',;;::::::ccllcccclloooooloooddxxxxxxxxxxkkOOOOOOkkkxxddxxxxxxxdoolllooooolllccccclccllllccc::::::::
''',;;::::::cclccccccllllooollloodxxxxxxxxxxxkxxxdddxxxxxxxdoollloooooollcccccllcllcclcc::::::::::;;
''''',;:::::::cccllcccccccooooolllodxxxxxxxxxdddxxxxxxxxxdolllooooooolccccccclllllllcc:;::::::::;,,'

   Blockchain Miners NFTs are hand drawn rare and unique artworks that come with
   a real utility. Our unique artworks are inspired by Bitcoin miners (AntminerS19j ASIC Pro)
   and will be limited to 11111 items that are generated from 250+ traits and attributes.
*/


pragma solidity >=0.7.0 <0.9.0;

contract Blockchain_Miners_Club is ERC721Enumerable, ERC721URIStorage, Ownable {
  using Strings for uint256;

  string public baseURI;
  uint256 public price = 0.07 ether;
  uint256 public maxSupply = 11111;
  uint256 public burnCount;
  uint256 public reservedRemaining = 241;
  uint256 public maxMintAmount = 8;
  uint256 public nftPerAddressLimit = 3;
  bool public saleStatus = false;
  bool public preSaleStatus = false;
  
  mapping (address => uint256) public presaleWhitelist;

  constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {
    setBaseURI("ipfs://QmazLZ6FKkTyVcLDhW4ieiAQWrD5Ri4r1FF95n51CLAyFQ/");
  }

  function mint(uint256 _mintAmount) public payable {
    require(saleStatus, "Sale not active");
    uint256 supply = totalSupply() + burnCount;
    require(_mintAmount > 0, "Need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded");
    require(supply + _mintAmount <= maxSupply - reservedRemaining, "Max NFT limit exceeded");
    require(msg.value >= price * _mintAmount, "insufficient payment value");

    
    if(preSaleStatus == true) {
        uint256 reserved = presaleWhitelist[msg.sender];
        require(reserved > 0, "No tokens reserved for this address");
        require(_mintAmount <= reserved, "Can't mint more than reserved");
        presaleWhitelist[msg.sender] = reserved - _mintAmount;
    }
       
    for (uint256 i = 1; i <= _mintAmount; i++) {
        _safeMint(msg.sender, supply + i);
    }
  }

  function walletMiners(address _owner) external view returns (uint256[] memory) {
      uint256 tokenCount = balanceOf(_owner);
      uint256[] memory tokensId = new uint256[](tokenCount);
      for (uint256 i = 0; i < tokenCount; i++) {
        tokensId[i] = tokenOfOwnerByIndex(_owner, i);
      }
        return tokensId;
    }

  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }
  
  function setCost(uint256 _newPrice) public onlyOwner {
    price = _newPrice;
  }

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

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }
  
   /*
    * Mint 241 reserved NFTs for giveaways, devs, etc.
   */
  function reserveMint(uint256 reservedAmount) public onlyOwner {
       require(reservedAmount <= reservedRemaining, "Remaining reserve too small");
       require(reservedAmount > 0, "Need to mint at least 1 NFT");
       uint256 supply = totalSupply() + burnCount;
       reservedRemaining -= reservedAmount;
        for (uint256 i = 1; i <= reservedAmount; i++) {
         _safeMint(msg.sender, supply + i); 
         
        }
  }

  function saleState(bool _state) public onlyOwner {
        saleStatus = _state;
  }
  
  function presaleState(bool _prestate) public onlyOwner {
        preSaleStatus = _prestate;
  }
  
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  function tokenURI(uint256 _tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory){
        return super.tokenURI(_tokenId);
  }
  
  function getReserveRemaining() public view returns (uint256){
        return reservedRemaining;
  }
  
  function getSaleStatus() public view returns (bool){
        return saleStatus;
  }
  
  function getPresaleStatus() public view returns (bool){
        return preSaleStatus;
  }
  
  function whitelistUsers(address[] calldata presaleAddresses) external onlyOwner {
        for(uint256 i; i < presaleAddresses.length; i++){
            presaleWhitelist[presaleAddresses[i]] = nftPerAddressLimit;
        }
   }
 
  function isApprovedForAll(address _owner, address _operator) public override view returns (bool isOperator) {
        if (_operator == address(0xa5409ec958C83C3f309868babACA7c86DCB077c1)) {     // OpenSea approval
            return true;
        }
        
        return ERC721.isApprovedForAll(_owner, _operator);
    }
 
  function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable){
        super._beforeTokenTransfer(from, to, tokenId);
    }
 
  function burn(uint256 tokenId) public {
        require(_isApprovedOrOwner(_msgSender(), tokenId));
        burnCount++;
        _burn(tokenId);
    }
    
  function _burn(uint256 _tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(_tokenId);
  }
 
  function withdraw() public payable onlyOwner {
        uint256 currentBalance = address(this).balance;
        (bool sent, ) = address(msg.sender).call{value: currentBalance}('');
        require(sent,"Error while transferring balance");    
  }
  
  function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool){
        return super.supportsInterface(interfaceId);
    }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnCount","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":[],"name":"getPresaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_prestate","type":"bool"}],"name":"presaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reservedAmount","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedRemaining","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":"bool","name":"_state","type":"bool"}],"name":"saleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletMiners","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"presaleAddresses","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266f8b0a10e470000600d55612b67600e5560f1601055600860115560036012556000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055503480156200006757600080fd5b50604051620058573803806200585783398181016040528101906200008d9190620003e6565b81818160009080519060200190620000a7929190620002b8565b508060019080519060200190620000c0929190620002b8565b505050620000e3620000d76200011560201b60201c565b6200011d60201b60201c565b6200010d6040518060600160405280603681526020016200582160369139620001e360201b60201c565b505062000672565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001f36200011560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002196200028e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002699062000492565b60405180910390fd5b80600c90805190602001906200028a929190620002b8565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002c6906200055a565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b60006200037f6200037984620004dd565b620004b4565b9050828152602081018484840111156200039e576200039d62000629565b5b620003ab84828562000524565b509392505050565b600082601f830112620003cb57620003ca62000624565b5b8151620003dd84826020860162000368565b91505092915050565b600080604083850312156200040057620003ff62000633565b5b600083015167ffffffffffffffff8111156200042157620004206200062e565b5b6200042f85828601620003b3565b925050602083015167ffffffffffffffff8111156200045357620004526200062e565b5b6200046185828601620003b3565b9150509250929050565b60006200047a60208362000513565b9150620004878262000649565b602082019050919050565b60006020820190508181036000830152620004ad816200046b565b9050919050565b6000620004c0620004d3565b9050620004ce828262000590565b919050565b6000604051905090565b600067ffffffffffffffff821115620004fb57620004fa620005f5565b5b620005068262000638565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200054457808201518184015260208101905062000527565b8381111562000554576000848401525b50505050565b600060028204905060018216806200057357607f821691505b602082108114156200058a5762000589620005c6565b5b50919050565b6200059b8262000638565b810181811067ffffffffffffffff82111715620005bd57620005bc620005f5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61519f80620006826000396000f3fe6080604052600436106102675760003560e01c80637d89bcea11610144578063ba7d2c76116100b6578063e985e9c51161007a578063e985e9c514610902578063eb8835ab1461093f578063edec5f271461097c578063f1a16883146109a5578063f2fde38b146109ce578063f9020e33146109f757610267565b8063ba7d2c761461081b578063c87b56dd14610846578063d0eb26b014610883578063d5abeb01146108ac578063d7517caa146108d757610267565b806395d89b411161010857806395d89b411461072e5780639e438e0614610759578063a035b1fe14610782578063a0712d68146107ad578063a22cb465146107c9578063b88d4fde146107f257610267565b80637d89bcea146106475780637f00c7a614610684578063869680f9146106ad5780638c3c4b34146106d85780638da5cb5b1461070357610267565b806342842e0e116101dd578063524773ce116101a1578063524773ce1461053757806355f804b3146105625780636352211e1461058b5780636c0360eb146105c857806370a08231146105f3578063715018a61461063057610267565b806342842e0e1461045457806342966c681461047d57806344a0d68a146104a6578063464bd640146104cf5780634f6ccce7146104fa57610267565b80631342ff4c1161022f5780631342ff4c1461036557806318160ddd1461038e578063239c70ae146103b957806323b872dd146103e45780632f745c591461040d5780633ccfd60b1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b314610311578063113b8c4f1461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a53565b610a22565b6040516102a09190614131565b60405180910390f35b3480156102b557600080fd5b506102be610a34565b6040516102cb919061414c565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613af6565b610ac6565b60405161030891906140a8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613999565b610b4b565b005b34801561034657600080fd5b5061034f610c63565b60405161035c91906144ee565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613af6565b610c6d565b005b34801561039a57600080fd5b506103a3610dde565b6040516103b091906144ee565b60405180910390f35b3480156103c557600080fd5b506103ce610deb565b6040516103db91906144ee565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613883565b610df1565b005b34801561041957600080fd5b50610434600480360381019061042f9190613999565b610e51565b60405161044191906144ee565b60405180910390f35b610452610ef6565b005b34801561046057600080fd5b5061047b60048036038101906104769190613883565b611027565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613af6565b611047565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613af6565b611085565b005b3480156104db57600080fd5b506104e461110b565b6040516104f19190614131565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613af6565b61111e565b60405161052e91906144ee565b60405180910390f35b34801561054357600080fd5b5061054c61118f565b60405161055991906144ee565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613aad565b611195565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613af6565b61122b565b6040516105bf91906140a8565b60405180910390f35b3480156105d457600080fd5b506105dd6112dd565b6040516105ea919061414c565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613816565b61136b565b60405161062791906144ee565b60405180910390f35b34801561063c57600080fd5b50610645611423565b005b34801561065357600080fd5b5061066e60048036038101906106699190613816565b6114ab565b60405161067b919061410f565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190613af6565b611559565b005b3480156106b957600080fd5b506106c26115df565b6040516106cf91906144ee565b60405180910390f35b3480156106e457600080fd5b506106ed6115e5565b6040516106fa9190614131565b60405180910390f35b34801561070f57600080fd5b506107186115fc565b60405161072591906140a8565b60405180910390f35b34801561073a57600080fd5b50610743611626565b604051610750919061414c565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190613a26565b6116b8565b005b34801561078e57600080fd5b50610797611751565b6040516107a491906144ee565b60405180910390f35b6107c760048036038101906107c29190613af6565b611757565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613959565b611a66565b005b3480156107fe57600080fd5b50610819600480360381019061081491906138d6565b611be7565b005b34801561082757600080fd5b50610830611c49565b60405161083d91906144ee565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190613af6565b611c4f565b60405161087a919061414c565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a59190613af6565b611c61565b005b3480156108b857600080fd5b506108c1611ce7565b6040516108ce91906144ee565b60405180910390f35b3480156108e357600080fd5b506108ec611ced565b6040516108f99190614131565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190613843565b611d04565b6040516109369190614131565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613816565b611d6a565b60405161097391906144ee565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e91906139d9565b611d82565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613a26565b611e91565b005b3480156109da57600080fd5b506109f560048036038101906109f09190613816565b611f2a565b005b348015610a0357600080fd5b50610a0c612022565b604051610a199190614131565b60405180910390f35b6000610a2d82612035565b9050919050565b606060008054610a43906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f906147e2565b8015610abc5780601f10610a9157610100808354040283529160200191610abc565b820191906000526020600020905b815481529060010190602001808311610a9f57829003601f168201915b5050505050905090565b6000610ad1826120af565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b07906143ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b568261122b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061446e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610be661211b565b73ffffffffffffffffffffffffffffffffffffffff161480610c155750610c1481610c0f61211b565b611d04565b5b610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906142ee565b60405180910390fd5b610c5e8383612123565b505050565b6000601054905090565b610c7561211b565b73ffffffffffffffffffffffffffffffffffffffff16610c936115fc565b73ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce0906143ee565b60405180910390fd5b601054811115610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d259061440e565b60405180910390fd5b60008111610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d68906144ce565b60405180910390fd5b6000600f54610d7e610dde565b610d889190614617565b90508160106000828254610d9c91906146f8565b925050819055506000600190505b828111610dd957610dc6338284610dc19190614617565b6121dc565b8080610dd190614845565b915050610daa565b505050565b6000600880549050905090565b60115481565b610e02610dfc61211b565b826121fa565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e389061448e565b60405180910390fd5b610e4c8383836122d8565b505050565b6000610e5c8361136b565b8210610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e949061418e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610efe61211b565b73ffffffffffffffffffffffffffffffffffffffff16610f1c6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143ee565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610f9d90614093565b60006040518083038185875af1925050503d8060008114610fda576040519150601f19603f3d011682016040523d82523d6000602084013e610fdf565b606091505b5050905080611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061436e565b60405180910390fd5b5050565b61104283838360405180602001604052806000815250611be7565b505050565b61105861105261211b565b826121fa565b61106157600080fd5b600f600081548092919061107490614845565b919050555061108281612534565b50565b61108d61211b565b73ffffffffffffffffffffffffffffffffffffffff166110ab6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906143ee565b60405180910390fd5b80600d8190555050565b601360019054906101000a900460ff1681565b6000611128610dde565b8210611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906144ae565b60405180910390fd5b6008828154811061117d5761117c61497b565b5b90600052602060002001549050919050565b600f5481565b61119d61211b565b73ffffffffffffffffffffffffffffffffffffffff166111bb6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611208906143ee565b60405180910390fd5b80600c9080519060200190611227929190613594565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061432e565b60405180910390fd5b80915050919050565b600c80546112ea906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611316906147e2565b80156113635780601f1061133857610100808354040283529160200191611363565b820191906000526020600020905b81548152906001019060200180831161134657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d39061430e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142b61211b565b73ffffffffffffffffffffffffffffffffffffffff166114496115fc565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611496906143ee565b60405180910390fd5b6114a96000612540565b565b606060006114b88361136b565b905060008167ffffffffffffffff8111156114d6576114d56149aa565b5b6040519080825280602002602001820160405280156115045781602001602082028036833780820191505090505b50905060005b8281101561154e5761151c8582610e51565b82828151811061152f5761152e61497b565b5b602002602001018181525050808061154690614845565b91505061150a565b508092505050919050565b61156161211b565b73ffffffffffffffffffffffffffffffffffffffff1661157f6115fc565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc906143ee565b60405180910390fd5b8060118190555050565b60105481565b6000601360009054906101000a900460ff16905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611635906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611661906147e2565b80156116ae5780601f10611683576101008083540402835291602001916116ae565b820191906000526020600020905b81548152906001019060200180831161169157829003601f168201915b5050505050905090565b6116c061211b565b73ffffffffffffffffffffffffffffffffffffffff166116de6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b906143ee565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b600d5481565b601360009054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d906142ce565b60405180910390fd5b6000600f546117b3610dde565b6117bd9190614617565b905060008211611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906144ce565b60405180910390fd5b601154821115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906142ae565b60405180910390fd5b601054600e5461185791906146f8565b82826118639190614617565b11156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b9061434e565b60405180910390fd5b81600d546118b2919061469e565b3410156118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb906141ee565b60405180910390fd5b60011515601360019054906101000a900460ff1615151415611a2b576000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e9061428e565b60405180910390fd5b808311156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d19061416e565b60405180910390fd5b82816119e691906146f8565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b6000600190505b828111611a6157611a4e338284611a499190614617565b6121dc565b8080611a5990614845565b915050611a32565b505050565b611a6e61211b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061424e565b60405180910390fd5b8060056000611ae961211b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b9661211b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bdb9190614131565b60405180910390a35050565b611bf8611bf261211b565b836121fa565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061448e565b60405180910390fd5b611c4384848484612606565b50505050565b60125481565b6060611c5a82612662565b9050919050565b611c6961211b565b73ffffffffffffffffffffffffffffffffffffffff16611c876115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906143ee565b60405180910390fd5b8060128190555050565b600e5481565b6000601360019054906101000a900460ff16905090565b600073a5409ec958c83c3f309868babaca7c86dcb077c173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d575760019050611d64565b611d6183836127b4565b90505b92915050565b60146020528060005260406000206000915090505481565b611d8a61211b565b73ffffffffffffffffffffffffffffffffffffffff16611da86115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906143ee565b60405180910390fd5b60005b82829050811015611e8c5760125460146000858585818110611e2657611e2561497b565b5b9050602002016020810190611e3b9190613816565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611e8490614845565b915050611e01565b505050565b611e9961211b565b73ffffffffffffffffffffffffffffffffffffffff16611eb76115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906143ee565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b611f3261211b565b73ffffffffffffffffffffffffffffffffffffffff16611f506115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d906143ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906141ce565b60405180910390fd5b61201f81612540565b50565b601360009054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a857506120a782612848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121968361122b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121f682826040518060200160405280600081525061292a565b5050565b6000612205826120af565b612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061426e565b60405180910390fd5b600061224f8361122b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122be57508373ffffffffffffffffffffffffffffffffffffffff166122a684610ac6565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cf57506122ce8185611d04565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122f88261122b565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123459061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b59061422e565b60405180910390fd5b6123c9838383612985565b6123d4600082612123565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242491906146f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247b9190614617565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61253d81612995565b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126118484846122d8565b61261d848484846129e8565b61265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906141ae565b60405180910390fd5b50505050565b606061266d826120af565b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906143ae565b60405180910390fd5b6000600a600084815260200190815260200160002080546126cc906147e2565b80601f01602080910402602001604051908101604052809291908181526020018280546126f8906147e2565b80156127455780601f1061271a57610100808354040283529160200191612745565b820191906000526020600020905b81548152906001019060200180831161272857829003601f168201915b505050505090506000612756612b7f565b905060008151141561276c5781925050506127af565b6000825111156127a157808260405160200161278992919061406f565b604051602081830303815290604052925050506127af565b6127aa84612c11565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061291357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612923575061292282612cb8565b5b9050919050565b6129348383612d22565b61294160008484846129e8565b612980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612977906141ae565b60405180910390fd5b505050565b612990838383612ef0565b505050565b61299e81613004565b6000600a600083815260200190815260200160002080546129be906147e2565b9050146129e557600a600082815260200190815260200160002060006129e4919061361a565b5b50565b6000612a098473ffffffffffffffffffffffffffffffffffffffff16613115565b15612b72578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a3261211b565b8786866040518563ffffffff1660e01b8152600401612a5494939291906140c3565b602060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a9f57506040513d601f19601f82011682018060405250810190612a9c9190613a80565b60015b612b22573d8060008114612acf576040519150601f19603f3d011682016040523d82523d6000602084013e612ad4565b606091505b50600081511415612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b11906141ae565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b77565b600190505b949350505050565b6060600c8054612b8e906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612bba906147e2565b8015612c075780601f10612bdc57610100808354040283529160200191612c07565b820191906000526020600020905b815481529060010190602001808311612bea57829003601f168201915b5050505050905090565b6060612c1c826120af565b612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c529061444e565b60405180910390fd5b6000612c65612b7f565b90506000815111612c855760405180602001604052806000815250612cb0565b80612c8f84613128565b604051602001612ca092919061406f565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d899061438e565b60405180910390fd5b612d9b816120af565b15612ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd29061420e565b60405180910390fd5b612de760008383612985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e379190614617565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612efb838383613289565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f3e57612f398161328e565b612f7d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7c57612f7b83826132d7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fc057612fbb81613444565b612fff565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ffe57612ffd8282613515565b5b5b505050565b600061300f8261122b565b905061301d81600084612985565b613028600083612123565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307891906146f8565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415613170576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613284565b600082905060005b600082146131a257808061318b90614845565b915050600a8261319b919061466d565b9150613178565b60008167ffffffffffffffff8111156131be576131bd6149aa565b5b6040519080825280601f01601f1916602001820160405280156131f05781602001600182028036833780820191505090505b5090505b6000851461327d5760018261320991906146f8565b9150600a85613218919061488e565b60306132249190614617565b60f81b81838151811061323a5761323961497b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613276919061466d565b94506131f4565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132e48461136b565b6132ee91906146f8565b90506000600760008481526020019081526020016000205490508181146133d3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061345891906146f8565b90506000600960008481526020019081526020016000205490506000600883815481106134885761348761497b565b5b9060005260206000200154905080600883815481106134aa576134a961497b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134f9576134f861494c565b5b6001900381819060005260206000200160009055905550505050565b60006135208361136b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546135a0906147e2565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b509050613616919061365a565b5090565b508054613626906147e2565b6000825580601f106136385750613657565b601f016020900490600052602060002090810190613656919061365a565b5b50565b5b8082111561367357600081600090555060010161365b565b5090565b600061368a6136858461452e565b614509565b9050828152602081018484840111156136a6576136a56149e8565b5b6136b18482856147a0565b509392505050565b60006136cc6136c78461455f565b614509565b9050828152602081018484840111156136e8576136e76149e8565b5b6136f38482856147a0565b509392505050565b60008135905061370a8161510d565b92915050565b60008083601f840112613726576137256149de565b5b8235905067ffffffffffffffff811115613743576137426149d9565b5b60208301915083602082028301111561375f5761375e6149e3565b5b9250929050565b60008135905061377581615124565b92915050565b60008135905061378a8161513b565b92915050565b60008151905061379f8161513b565b92915050565b600082601f8301126137ba576137b96149de565b5b81356137ca848260208601613677565b91505092915050565b600082601f8301126137e8576137e76149de565b5b81356137f88482602086016136b9565b91505092915050565b60008135905061381081615152565b92915050565b60006020828403121561382c5761382b6149f2565b5b600061383a848285016136fb565b91505092915050565b6000806040838503121561385a576138596149f2565b5b6000613868858286016136fb565b9250506020613879858286016136fb565b9150509250929050565b60008060006060848603121561389c5761389b6149f2565b5b60006138aa868287016136fb565b93505060206138bb868287016136fb565b92505060406138cc86828701613801565b9150509250925092565b600080600080608085870312156138f0576138ef6149f2565b5b60006138fe878288016136fb565b945050602061390f878288016136fb565b935050604061392087828801613801565b925050606085013567ffffffffffffffff811115613941576139406149ed565b5b61394d878288016137a5565b91505092959194509250565b600080604083850312156139705761396f6149f2565b5b600061397e858286016136fb565b925050602061398f85828601613766565b9150509250929050565b600080604083850312156139b0576139af6149f2565b5b60006139be858286016136fb565b92505060206139cf85828601613801565b9150509250929050565b600080602083850312156139f0576139ef6149f2565b5b600083013567ffffffffffffffff811115613a0e57613a0d6149ed565b5b613a1a85828601613710565b92509250509250929050565b600060208284031215613a3c57613a3b6149f2565b5b6000613a4a84828501613766565b91505092915050565b600060208284031215613a6957613a686149f2565b5b6000613a778482850161377b565b91505092915050565b600060208284031215613a9657613a956149f2565b5b6000613aa484828501613790565b91505092915050565b600060208284031215613ac357613ac26149f2565b5b600082013567ffffffffffffffff811115613ae157613ae06149ed565b5b613aed848285016137d3565b91505092915050565b600060208284031215613b0c57613b0b6149f2565b5b6000613b1a84828501613801565b91505092915050565b6000613b2f8383614051565b60208301905092915050565b613b448161472c565b82525050565b6000613b55826145a0565b613b5f81856145ce565b9350613b6a83614590565b8060005b83811015613b9b578151613b828882613b23565b9750613b8d836145c1565b925050600181019050613b6e565b5085935050505092915050565b613bb18161473e565b82525050565b6000613bc2826145ab565b613bcc81856145df565b9350613bdc8185602086016147af565b613be5816149f7565b840191505092915050565b6000613bfb826145b6565b613c0581856145fb565b9350613c158185602086016147af565b613c1e816149f7565b840191505092915050565b6000613c34826145b6565b613c3e818561460c565b9350613c4e8185602086016147af565b80840191505092915050565b6000613c67601d836145fb565b9150613c7282614a08565b602082019050919050565b6000613c8a602b836145fb565b9150613c9582614a31565b604082019050919050565b6000613cad6032836145fb565b9150613cb882614a80565b604082019050919050565b6000613cd06026836145fb565b9150613cdb82614acf565b604082019050919050565b6000613cf3601a836145fb565b9150613cfe82614b1e565b602082019050919050565b6000613d16601c836145fb565b9150613d2182614b47565b602082019050919050565b6000613d396024836145fb565b9150613d4482614b70565b604082019050919050565b6000613d5c6019836145fb565b9150613d6782614bbf565b602082019050919050565b6000613d7f602c836145fb565b9150613d8a82614be8565b604082019050919050565b6000613da26023836145fb565b9150613dad82614c37565b604082019050919050565b6000613dc56024836145fb565b9150613dd082614c86565b604082019050919050565b6000613de8600f836145fb565b9150613df382614cd5565b602082019050919050565b6000613e0b6038836145fb565b9150613e1682614cfe565b604082019050919050565b6000613e2e602a836145fb565b9150613e3982614d4d565b604082019050919050565b6000613e516029836145fb565b9150613e5c82614d9c565b604082019050919050565b6000613e746016836145fb565b9150613e7f82614deb565b602082019050919050565b6000613e976020836145fb565b9150613ea282614e14565b602082019050919050565b6000613eba6020836145fb565b9150613ec582614e3d565b602082019050919050565b6000613edd6031836145fb565b9150613ee882614e66565b604082019050919050565b6000613f00602c836145fb565b9150613f0b82614eb5565b604082019050919050565b6000613f236020836145fb565b9150613f2e82614f04565b602082019050919050565b6000613f46601b836145fb565b9150613f5182614f2d565b602082019050919050565b6000613f696029836145fb565b9150613f7482614f56565b604082019050919050565b6000613f8c602f836145fb565b9150613f9782614fa5565b604082019050919050565b6000613faf6021836145fb565b9150613fba82614ff4565b604082019050919050565b6000613fd26000836145f0565b9150613fdd82615043565b600082019050919050565b6000613ff56031836145fb565b915061400082615046565b604082019050919050565b6000614018602c836145fb565b915061402382615095565b604082019050919050565b600061403b601b836145fb565b9150614046826150e4565b602082019050919050565b61405a81614796565b82525050565b61406981614796565b82525050565b600061407b8285613c29565b91506140878284613c29565b91508190509392505050565b600061409e82613fc5565b9150819050919050565b60006020820190506140bd6000830184613b3b565b92915050565b60006080820190506140d86000830187613b3b565b6140e56020830186613b3b565b6140f26040830185614060565b81810360608301526141048184613bb7565b905095945050505050565b600060208201905081810360008301526141298184613b4a565b905092915050565b60006020820190506141466000830184613ba8565b92915050565b600060208201905081810360008301526141668184613bf0565b905092915050565b6000602082019050818103600083015261418781613c5a565b9050919050565b600060208201905081810360008301526141a781613c7d565b9050919050565b600060208201905081810360008301526141c781613ca0565b9050919050565b600060208201905081810360008301526141e781613cc3565b9050919050565b6000602082019050818103600083015261420781613ce6565b9050919050565b6000602082019050818103600083015261422781613d09565b9050919050565b6000602082019050818103600083015261424781613d2c565b9050919050565b6000602082019050818103600083015261426781613d4f565b9050919050565b6000602082019050818103600083015261428781613d72565b9050919050565b600060208201905081810360008301526142a781613d95565b9050919050565b600060208201905081810360008301526142c781613db8565b9050919050565b600060208201905081810360008301526142e781613ddb565b9050919050565b6000602082019050818103600083015261430781613dfe565b9050919050565b6000602082019050818103600083015261432781613e21565b9050919050565b6000602082019050818103600083015261434781613e44565b9050919050565b6000602082019050818103600083015261436781613e67565b9050919050565b6000602082019050818103600083015261438781613e8a565b9050919050565b600060208201905081810360008301526143a781613ead565b9050919050565b600060208201905081810360008301526143c781613ed0565b9050919050565b600060208201905081810360008301526143e781613ef3565b9050919050565b6000602082019050818103600083015261440781613f16565b9050919050565b6000602082019050818103600083015261442781613f39565b9050919050565b6000602082019050818103600083015261444781613f5c565b9050919050565b6000602082019050818103600083015261446781613f7f565b9050919050565b6000602082019050818103600083015261448781613fa2565b9050919050565b600060208201905081810360008301526144a781613fe8565b9050919050565b600060208201905081810360008301526144c78161400b565b9050919050565b600060208201905081810360008301526144e78161402e565b9050919050565b60006020820190506145036000830184614060565b92915050565b6000614513614524565b905061451f8282614814565b919050565b6000604051905090565b600067ffffffffffffffff821115614549576145486149aa565b5b614552826149f7565b9050602081019050919050565b600067ffffffffffffffff82111561457a576145796149aa565b5b614583826149f7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061462282614796565b915061462d83614796565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614662576146616148bf565b5b828201905092915050565b600061467882614796565b915061468383614796565b925082614693576146926148ee565b5b828204905092915050565b60006146a982614796565b91506146b483614796565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ed576146ec6148bf565b5b828202905092915050565b600061470382614796565b915061470e83614796565b925082821015614721576147206148bf565b5b828203905092915050565b600061473782614776565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147cd5780820151818401526020810190506147b2565b838111156147dc576000848401525b50505050565b600060028204905060018216806147fa57607f821691505b6020821081141561480e5761480d61491d565b5b50919050565b61481d826149f7565b810181811067ffffffffffffffff8211171561483c5761483b6149aa565b5b80604052505050565b600061485082614796565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614883576148826148bf565b5b600182019050919050565b600061489982614796565b91506148a483614796565b9250826148b4576148b36148ee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e74207061796d656e742076616c7565000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4572726f72207768696c65207472616e7366657272696e672062616c616e6365600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f52656d61696e696e67207265736572766520746f6f20736d616c6c0000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6151168161472c565b811461512157600080fd5b50565b61512d8161473e565b811461513857600080fd5b50565b6151448161474a565b811461514f57600080fd5b50565b61515b81614796565b811461516657600080fd5b5056fea2646970667358221220d4e9ccb508586d0526e19e42abdede261ca79205312220bcece4f2d7c9e2725f64736f6c63430008070033697066733a2f2f516d617a4c5a36464b6b547956634c446857346965694151577244355269347231464639356e3531434c417946512f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016426c6f636b636861696e204d696e65727320436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000003424d430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c80637d89bcea11610144578063ba7d2c76116100b6578063e985e9c51161007a578063e985e9c514610902578063eb8835ab1461093f578063edec5f271461097c578063f1a16883146109a5578063f2fde38b146109ce578063f9020e33146109f757610267565b8063ba7d2c761461081b578063c87b56dd14610846578063d0eb26b014610883578063d5abeb01146108ac578063d7517caa146108d757610267565b806395d89b411161010857806395d89b411461072e5780639e438e0614610759578063a035b1fe14610782578063a0712d68146107ad578063a22cb465146107c9578063b88d4fde146107f257610267565b80637d89bcea146106475780637f00c7a614610684578063869680f9146106ad5780638c3c4b34146106d85780638da5cb5b1461070357610267565b806342842e0e116101dd578063524773ce116101a1578063524773ce1461053757806355f804b3146105625780636352211e1461058b5780636c0360eb146105c857806370a08231146105f3578063715018a61461063057610267565b806342842e0e1461045457806342966c681461047d57806344a0d68a146104a6578063464bd640146104cf5780634f6ccce7146104fa57610267565b80631342ff4c1161022f5780631342ff4c1461036557806318160ddd1461038e578063239c70ae146103b957806323b872dd146103e45780632f745c591461040d5780633ccfd60b1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b314610311578063113b8c4f1461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a53565b610a22565b6040516102a09190614131565b60405180910390f35b3480156102b557600080fd5b506102be610a34565b6040516102cb919061414c565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613af6565b610ac6565b60405161030891906140a8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613999565b610b4b565b005b34801561034657600080fd5b5061034f610c63565b60405161035c91906144ee565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613af6565b610c6d565b005b34801561039a57600080fd5b506103a3610dde565b6040516103b091906144ee565b60405180910390f35b3480156103c557600080fd5b506103ce610deb565b6040516103db91906144ee565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613883565b610df1565b005b34801561041957600080fd5b50610434600480360381019061042f9190613999565b610e51565b60405161044191906144ee565b60405180910390f35b610452610ef6565b005b34801561046057600080fd5b5061047b60048036038101906104769190613883565b611027565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613af6565b611047565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613af6565b611085565b005b3480156104db57600080fd5b506104e461110b565b6040516104f19190614131565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613af6565b61111e565b60405161052e91906144ee565b60405180910390f35b34801561054357600080fd5b5061054c61118f565b60405161055991906144ee565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613aad565b611195565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613af6565b61122b565b6040516105bf91906140a8565b60405180910390f35b3480156105d457600080fd5b506105dd6112dd565b6040516105ea919061414c565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613816565b61136b565b60405161062791906144ee565b60405180910390f35b34801561063c57600080fd5b50610645611423565b005b34801561065357600080fd5b5061066e60048036038101906106699190613816565b6114ab565b60405161067b919061410f565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190613af6565b611559565b005b3480156106b957600080fd5b506106c26115df565b6040516106cf91906144ee565b60405180910390f35b3480156106e457600080fd5b506106ed6115e5565b6040516106fa9190614131565b60405180910390f35b34801561070f57600080fd5b506107186115fc565b60405161072591906140a8565b60405180910390f35b34801561073a57600080fd5b50610743611626565b604051610750919061414c565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190613a26565b6116b8565b005b34801561078e57600080fd5b50610797611751565b6040516107a491906144ee565b60405180910390f35b6107c760048036038101906107c29190613af6565b611757565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613959565b611a66565b005b3480156107fe57600080fd5b50610819600480360381019061081491906138d6565b611be7565b005b34801561082757600080fd5b50610830611c49565b60405161083d91906144ee565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190613af6565b611c4f565b60405161087a919061414c565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a59190613af6565b611c61565b005b3480156108b857600080fd5b506108c1611ce7565b6040516108ce91906144ee565b60405180910390f35b3480156108e357600080fd5b506108ec611ced565b6040516108f99190614131565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190613843565b611d04565b6040516109369190614131565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613816565b611d6a565b60405161097391906144ee565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e91906139d9565b611d82565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613a26565b611e91565b005b3480156109da57600080fd5b506109f560048036038101906109f09190613816565b611f2a565b005b348015610a0357600080fd5b50610a0c612022565b604051610a199190614131565b60405180910390f35b6000610a2d82612035565b9050919050565b606060008054610a43906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f906147e2565b8015610abc5780601f10610a9157610100808354040283529160200191610abc565b820191906000526020600020905b815481529060010190602001808311610a9f57829003601f168201915b5050505050905090565b6000610ad1826120af565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b07906143ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b568261122b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061446e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610be661211b565b73ffffffffffffffffffffffffffffffffffffffff161480610c155750610c1481610c0f61211b565b611d04565b5b610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b906142ee565b60405180910390fd5b610c5e8383612123565b505050565b6000601054905090565b610c7561211b565b73ffffffffffffffffffffffffffffffffffffffff16610c936115fc565b73ffffffffffffffffffffffffffffffffffffffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce0906143ee565b60405180910390fd5b601054811115610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d259061440e565b60405180910390fd5b60008111610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d68906144ce565b60405180910390fd5b6000600f54610d7e610dde565b610d889190614617565b90508160106000828254610d9c91906146f8565b925050819055506000600190505b828111610dd957610dc6338284610dc19190614617565b6121dc565b8080610dd190614845565b915050610daa565b505050565b6000600880549050905090565b60115481565b610e02610dfc61211b565b826121fa565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e389061448e565b60405180910390fd5b610e4c8383836122d8565b505050565b6000610e5c8361136b565b8210610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e949061418e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610efe61211b565b73ffffffffffffffffffffffffffffffffffffffff16610f1c6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143ee565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610f9d90614093565b60006040518083038185875af1925050503d8060008114610fda576040519150601f19603f3d011682016040523d82523d6000602084013e610fdf565b606091505b5050905080611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061436e565b60405180910390fd5b5050565b61104283838360405180602001604052806000815250611be7565b505050565b61105861105261211b565b826121fa565b61106157600080fd5b600f600081548092919061107490614845565b919050555061108281612534565b50565b61108d61211b565b73ffffffffffffffffffffffffffffffffffffffff166110ab6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906143ee565b60405180910390fd5b80600d8190555050565b601360019054906101000a900460ff1681565b6000611128610dde565b8210611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906144ae565b60405180910390fd5b6008828154811061117d5761117c61497b565b5b90600052602060002001549050919050565b600f5481565b61119d61211b565b73ffffffffffffffffffffffffffffffffffffffff166111bb6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611208906143ee565b60405180910390fd5b80600c9080519060200190611227929190613594565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061432e565b60405180910390fd5b80915050919050565b600c80546112ea906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611316906147e2565b80156113635780601f1061133857610100808354040283529160200191611363565b820191906000526020600020905b81548152906001019060200180831161134657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d39061430e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142b61211b565b73ffffffffffffffffffffffffffffffffffffffff166114496115fc565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611496906143ee565b60405180910390fd5b6114a96000612540565b565b606060006114b88361136b565b905060008167ffffffffffffffff8111156114d6576114d56149aa565b5b6040519080825280602002602001820160405280156115045781602001602082028036833780820191505090505b50905060005b8281101561154e5761151c8582610e51565b82828151811061152f5761152e61497b565b5b602002602001018181525050808061154690614845565b91505061150a565b508092505050919050565b61156161211b565b73ffffffffffffffffffffffffffffffffffffffff1661157f6115fc565b73ffffffffffffffffffffffffffffffffffffffff16146115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc906143ee565b60405180910390fd5b8060118190555050565b60105481565b6000601360009054906101000a900460ff16905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611635906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611661906147e2565b80156116ae5780601f10611683576101008083540402835291602001916116ae565b820191906000526020600020905b81548152906001019060200180831161169157829003601f168201915b5050505050905090565b6116c061211b565b73ffffffffffffffffffffffffffffffffffffffff166116de6115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b906143ee565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b600d5481565b601360009054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d906142ce565b60405180910390fd5b6000600f546117b3610dde565b6117bd9190614617565b905060008211611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906144ce565b60405180910390fd5b601154821115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906142ae565b60405180910390fd5b601054600e5461185791906146f8565b82826118639190614617565b11156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b9061434e565b60405180910390fd5b81600d546118b2919061469e565b3410156118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb906141ee565b60405180910390fd5b60011515601360019054906101000a900460ff1615151415611a2b576000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e9061428e565b60405180910390fd5b808311156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d19061416e565b60405180910390fd5b82816119e691906146f8565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b6000600190505b828111611a6157611a4e338284611a499190614617565b6121dc565b8080611a5990614845565b915050611a32565b505050565b611a6e61211b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061424e565b60405180910390fd5b8060056000611ae961211b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b9661211b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bdb9190614131565b60405180910390a35050565b611bf8611bf261211b565b836121fa565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061448e565b60405180910390fd5b611c4384848484612606565b50505050565b60125481565b6060611c5a82612662565b9050919050565b611c6961211b565b73ffffffffffffffffffffffffffffffffffffffff16611c876115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd4906143ee565b60405180910390fd5b8060128190555050565b600e5481565b6000601360019054906101000a900460ff16905090565b600073a5409ec958c83c3f309868babaca7c86dcb077c173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d575760019050611d64565b611d6183836127b4565b90505b92915050565b60146020528060005260406000206000915090505481565b611d8a61211b565b73ffffffffffffffffffffffffffffffffffffffff16611da86115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df5906143ee565b60405180910390fd5b60005b82829050811015611e8c5760125460146000858585818110611e2657611e2561497b565b5b9050602002016020810190611e3b9190613816565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611e8490614845565b915050611e01565b505050565b611e9961211b565b73ffffffffffffffffffffffffffffffffffffffff16611eb76115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906143ee565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b611f3261211b565b73ffffffffffffffffffffffffffffffffffffffff16611f506115fc565b73ffffffffffffffffffffffffffffffffffffffff1614611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d906143ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906141ce565b60405180910390fd5b61201f81612540565b50565b601360009054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a857506120a782612848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121968361122b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121f682826040518060200160405280600081525061292a565b5050565b6000612205826120af565b612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061426e565b60405180910390fd5b600061224f8361122b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122be57508373ffffffffffffffffffffffffffffffffffffffff166122a684610ac6565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cf57506122ce8185611d04565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122f88261122b565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123459061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b59061422e565b60405180910390fd5b6123c9838383612985565b6123d4600082612123565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242491906146f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247b9190614617565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61253d81612995565b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126118484846122d8565b61261d848484846129e8565b61265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906141ae565b60405180910390fd5b50505050565b606061266d826120af565b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906143ae565b60405180910390fd5b6000600a600084815260200190815260200160002080546126cc906147e2565b80601f01602080910402602001604051908101604052809291908181526020018280546126f8906147e2565b80156127455780601f1061271a57610100808354040283529160200191612745565b820191906000526020600020905b81548152906001019060200180831161272857829003601f168201915b505050505090506000612756612b7f565b905060008151141561276c5781925050506127af565b6000825111156127a157808260405160200161278992919061406f565b604051602081830303815290604052925050506127af565b6127aa84612c11565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061291357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612923575061292282612cb8565b5b9050919050565b6129348383612d22565b61294160008484846129e8565b612980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612977906141ae565b60405180910390fd5b505050565b612990838383612ef0565b505050565b61299e81613004565b6000600a600083815260200190815260200160002080546129be906147e2565b9050146129e557600a600082815260200190815260200160002060006129e4919061361a565b5b50565b6000612a098473ffffffffffffffffffffffffffffffffffffffff16613115565b15612b72578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a3261211b565b8786866040518563ffffffff1660e01b8152600401612a5494939291906140c3565b602060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a9f57506040513d601f19601f82011682018060405250810190612a9c9190613a80565b60015b612b22573d8060008114612acf576040519150601f19603f3d011682016040523d82523d6000602084013e612ad4565b606091505b50600081511415612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b11906141ae565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b77565b600190505b949350505050565b6060600c8054612b8e906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612bba906147e2565b8015612c075780601f10612bdc57610100808354040283529160200191612c07565b820191906000526020600020905b815481529060010190602001808311612bea57829003601f168201915b5050505050905090565b6060612c1c826120af565b612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c529061444e565b60405180910390fd5b6000612c65612b7f565b90506000815111612c855760405180602001604052806000815250612cb0565b80612c8f84613128565b604051602001612ca092919061406f565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d899061438e565b60405180910390fd5b612d9b816120af565b15612ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd29061420e565b60405180910390fd5b612de760008383612985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e379190614617565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612efb838383613289565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f3e57612f398161328e565b612f7d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f7c57612f7b83826132d7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fc057612fbb81613444565b612fff565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ffe57612ffd8282613515565b5b5b505050565b600061300f8261122b565b905061301d81600084612985565b613028600083612123565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307891906146f8565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415613170576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613284565b600082905060005b600082146131a257808061318b90614845565b915050600a8261319b919061466d565b9150613178565b60008167ffffffffffffffff8111156131be576131bd6149aa565b5b6040519080825280601f01601f1916602001820160405280156131f05781602001600182028036833780820191505090505b5090505b6000851461327d5760018261320991906146f8565b9150600a85613218919061488e565b60306132249190614617565b60f81b81838151811061323a5761323961497b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613276919061466d565b94506131f4565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132e48461136b565b6132ee91906146f8565b90506000600760008481526020019081526020016000205490508181146133d3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061345891906146f8565b90506000600960008481526020019081526020016000205490506000600883815481106134885761348761497b565b5b9060005260206000200154905080600883815481106134aa576134a961497b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134f9576134f861494c565b5b6001900381819060005260206000200160009055905550505050565b60006135208361136b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546135a0906147e2565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b509050613616919061365a565b5090565b508054613626906147e2565b6000825580601f106136385750613657565b601f016020900490600052602060002090810190613656919061365a565b5b50565b5b8082111561367357600081600090555060010161365b565b5090565b600061368a6136858461452e565b614509565b9050828152602081018484840111156136a6576136a56149e8565b5b6136b18482856147a0565b509392505050565b60006136cc6136c78461455f565b614509565b9050828152602081018484840111156136e8576136e76149e8565b5b6136f38482856147a0565b509392505050565b60008135905061370a8161510d565b92915050565b60008083601f840112613726576137256149de565b5b8235905067ffffffffffffffff811115613743576137426149d9565b5b60208301915083602082028301111561375f5761375e6149e3565b5b9250929050565b60008135905061377581615124565b92915050565b60008135905061378a8161513b565b92915050565b60008151905061379f8161513b565b92915050565b600082601f8301126137ba576137b96149de565b5b81356137ca848260208601613677565b91505092915050565b600082601f8301126137e8576137e76149de565b5b81356137f88482602086016136b9565b91505092915050565b60008135905061381081615152565b92915050565b60006020828403121561382c5761382b6149f2565b5b600061383a848285016136fb565b91505092915050565b6000806040838503121561385a576138596149f2565b5b6000613868858286016136fb565b9250506020613879858286016136fb565b9150509250929050565b60008060006060848603121561389c5761389b6149f2565b5b60006138aa868287016136fb565b93505060206138bb868287016136fb565b92505060406138cc86828701613801565b9150509250925092565b600080600080608085870312156138f0576138ef6149f2565b5b60006138fe878288016136fb565b945050602061390f878288016136fb565b935050604061392087828801613801565b925050606085013567ffffffffffffffff811115613941576139406149ed565b5b61394d878288016137a5565b91505092959194509250565b600080604083850312156139705761396f6149f2565b5b600061397e858286016136fb565b925050602061398f85828601613766565b9150509250929050565b600080604083850312156139b0576139af6149f2565b5b60006139be858286016136fb565b92505060206139cf85828601613801565b9150509250929050565b600080602083850312156139f0576139ef6149f2565b5b600083013567ffffffffffffffff811115613a0e57613a0d6149ed565b5b613a1a85828601613710565b92509250509250929050565b600060208284031215613a3c57613a3b6149f2565b5b6000613a4a84828501613766565b91505092915050565b600060208284031215613a6957613a686149f2565b5b6000613a778482850161377b565b91505092915050565b600060208284031215613a9657613a956149f2565b5b6000613aa484828501613790565b91505092915050565b600060208284031215613ac357613ac26149f2565b5b600082013567ffffffffffffffff811115613ae157613ae06149ed565b5b613aed848285016137d3565b91505092915050565b600060208284031215613b0c57613b0b6149f2565b5b6000613b1a84828501613801565b91505092915050565b6000613b2f8383614051565b60208301905092915050565b613b448161472c565b82525050565b6000613b55826145a0565b613b5f81856145ce565b9350613b6a83614590565b8060005b83811015613b9b578151613b828882613b23565b9750613b8d836145c1565b925050600181019050613b6e565b5085935050505092915050565b613bb18161473e565b82525050565b6000613bc2826145ab565b613bcc81856145df565b9350613bdc8185602086016147af565b613be5816149f7565b840191505092915050565b6000613bfb826145b6565b613c0581856145fb565b9350613c158185602086016147af565b613c1e816149f7565b840191505092915050565b6000613c34826145b6565b613c3e818561460c565b9350613c4e8185602086016147af565b80840191505092915050565b6000613c67601d836145fb565b9150613c7282614a08565b602082019050919050565b6000613c8a602b836145fb565b9150613c9582614a31565b604082019050919050565b6000613cad6032836145fb565b9150613cb882614a80565b604082019050919050565b6000613cd06026836145fb565b9150613cdb82614acf565b604082019050919050565b6000613cf3601a836145fb565b9150613cfe82614b1e565b602082019050919050565b6000613d16601c836145fb565b9150613d2182614b47565b602082019050919050565b6000613d396024836145fb565b9150613d4482614b70565b604082019050919050565b6000613d5c6019836145fb565b9150613d6782614bbf565b602082019050919050565b6000613d7f602c836145fb565b9150613d8a82614be8565b604082019050919050565b6000613da26023836145fb565b9150613dad82614c37565b604082019050919050565b6000613dc56024836145fb565b9150613dd082614c86565b604082019050919050565b6000613de8600f836145fb565b9150613df382614cd5565b602082019050919050565b6000613e0b6038836145fb565b9150613e1682614cfe565b604082019050919050565b6000613e2e602a836145fb565b9150613e3982614d4d565b604082019050919050565b6000613e516029836145fb565b9150613e5c82614d9c565b604082019050919050565b6000613e746016836145fb565b9150613e7f82614deb565b602082019050919050565b6000613e976020836145fb565b9150613ea282614e14565b602082019050919050565b6000613eba6020836145fb565b9150613ec582614e3d565b602082019050919050565b6000613edd6031836145fb565b9150613ee882614e66565b604082019050919050565b6000613f00602c836145fb565b9150613f0b82614eb5565b604082019050919050565b6000613f236020836145fb565b9150613f2e82614f04565b602082019050919050565b6000613f46601b836145fb565b9150613f5182614f2d565b602082019050919050565b6000613f696029836145fb565b9150613f7482614f56565b604082019050919050565b6000613f8c602f836145fb565b9150613f9782614fa5565b604082019050919050565b6000613faf6021836145fb565b9150613fba82614ff4565b604082019050919050565b6000613fd26000836145f0565b9150613fdd82615043565b600082019050919050565b6000613ff56031836145fb565b915061400082615046565b604082019050919050565b6000614018602c836145fb565b915061402382615095565b604082019050919050565b600061403b601b836145fb565b9150614046826150e4565b602082019050919050565b61405a81614796565b82525050565b61406981614796565b82525050565b600061407b8285613c29565b91506140878284613c29565b91508190509392505050565b600061409e82613fc5565b9150819050919050565b60006020820190506140bd6000830184613b3b565b92915050565b60006080820190506140d86000830187613b3b565b6140e56020830186613b3b565b6140f26040830185614060565b81810360608301526141048184613bb7565b905095945050505050565b600060208201905081810360008301526141298184613b4a565b905092915050565b60006020820190506141466000830184613ba8565b92915050565b600060208201905081810360008301526141668184613bf0565b905092915050565b6000602082019050818103600083015261418781613c5a565b9050919050565b600060208201905081810360008301526141a781613c7d565b9050919050565b600060208201905081810360008301526141c781613ca0565b9050919050565b600060208201905081810360008301526141e781613cc3565b9050919050565b6000602082019050818103600083015261420781613ce6565b9050919050565b6000602082019050818103600083015261422781613d09565b9050919050565b6000602082019050818103600083015261424781613d2c565b9050919050565b6000602082019050818103600083015261426781613d4f565b9050919050565b6000602082019050818103600083015261428781613d72565b9050919050565b600060208201905081810360008301526142a781613d95565b9050919050565b600060208201905081810360008301526142c781613db8565b9050919050565b600060208201905081810360008301526142e781613ddb565b9050919050565b6000602082019050818103600083015261430781613dfe565b9050919050565b6000602082019050818103600083015261432781613e21565b9050919050565b6000602082019050818103600083015261434781613e44565b9050919050565b6000602082019050818103600083015261436781613e67565b9050919050565b6000602082019050818103600083015261438781613e8a565b9050919050565b600060208201905081810360008301526143a781613ead565b9050919050565b600060208201905081810360008301526143c781613ed0565b9050919050565b600060208201905081810360008301526143e781613ef3565b9050919050565b6000602082019050818103600083015261440781613f16565b9050919050565b6000602082019050818103600083015261442781613f39565b9050919050565b6000602082019050818103600083015261444781613f5c565b9050919050565b6000602082019050818103600083015261446781613f7f565b9050919050565b6000602082019050818103600083015261448781613fa2565b9050919050565b600060208201905081810360008301526144a781613fe8565b9050919050565b600060208201905081810360008301526144c78161400b565b9050919050565b600060208201905081810360008301526144e78161402e565b9050919050565b60006020820190506145036000830184614060565b92915050565b6000614513614524565b905061451f8282614814565b919050565b6000604051905090565b600067ffffffffffffffff821115614549576145486149aa565b5b614552826149f7565b9050602081019050919050565b600067ffffffffffffffff82111561457a576145796149aa565b5b614583826149f7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061462282614796565b915061462d83614796565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614662576146616148bf565b5b828201905092915050565b600061467882614796565b915061468383614796565b925082614693576146926148ee565b5b828204905092915050565b60006146a982614796565b91506146b483614796565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ed576146ec6148bf565b5b828202905092915050565b600061470382614796565b915061470e83614796565b925082821015614721576147206148bf565b5b828203905092915050565b600061473782614776565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147cd5780820151818401526020810190506147b2565b838111156147dc576000848401525b50505050565b600060028204905060018216806147fa57607f821691505b6020821081141561480e5761480d61491d565b5b50919050565b61481d826149f7565b810181811067ffffffffffffffff8211171561483c5761483b6149aa565b5b80604052505050565b600061485082614796565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614883576148826148bf565b5b600182019050919050565b600061489982614796565b91506148a483614796565b9250826148b4576148b36148ee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e74207061796d656e742076616c7565000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4572726f72207768696c65207472616e7366657272696e672062616c616e6365600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f52656d61696e696e67207265736572766520746f6f20736d616c6c0000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6151168161472c565b811461512157600080fd5b50565b61512d8161473e565b811461513857600080fd5b50565b6151448161474a565b811461514f57600080fd5b50565b61515b81614796565b811461516657600080fd5b5056fea2646970667358221220d4e9ccb508586d0526e19e42abdede261ca79205312220bcece4f2d7c9e2725f64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016426c6f636b636861696e204d696e65727320436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000003424d430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Blockchain Miners Club
Arg [1] : _symbol (string): BMC

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [3] : 426c6f636b636861696e204d696e65727320436c756200000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 424d430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

50188:5110:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55121:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18111:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19670:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19193:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53518:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52601:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32303:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50477:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20560:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31971:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54864:249;;;:::i;:::-;;20970:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54578:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52214:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50591:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32493:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50405:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52425:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17805:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50304:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17535:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42127:94;;;;;;;;;;;;;:::i;:::-;;51760:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52303:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50434:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53627:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41476:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18280:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53143:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50330:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50858:896;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19963:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21226:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50514:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53356:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52102:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50368:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53720:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54056:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50633:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53819:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53050:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42376:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50556:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55121:170;55224:4;55247:36;55271:11;55247:23;:36::i;:::-;55240:43;;55121:170;;;:::o;18111:100::-;18165:13;18198:5;18191:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18111:100;:::o;19670:221::-;19746:7;19774:16;19782:7;19774;:16::i;:::-;19766:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19859:15;:24;19875:7;19859:24;;;;;;;;;;;;;;;;;;;;;19852:31;;19670:221;;;:::o;19193:411::-;19274:13;19290:23;19305:7;19290:14;:23::i;:::-;19274:39;;19338:5;19332:11;;:2;:11;;;;19324:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19432:5;19416:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19441:37;19458:5;19465:12;:10;:12::i;:::-;19441:16;:37::i;:::-;19416:62;19394:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19575:21;19584:2;19588:7;19575:8;:21::i;:::-;19263:341;19193:411;;:::o;53518:101::-;53570:7;53596:17;;53589:24;;53518:101;:::o;52601:443::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52699:17:::1;;52681:14;:35;;52673:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52783:1;52766:14;:18;52758:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;52826:14;52859:9;;52843:13;:11;:13::i;:::-;:25;;;;:::i;:::-;52826:42;;52899:14;52878:17;;:35;;;;;;;:::i;:::-;;;;;;;;52929:9;52941:1;52929:13;;52924:115;52949:14;52944:1;:19;52924:115;;52982:33;52992:10;53013:1;53004:6;:10;;;;:::i;:::-;52982:9;:33::i;:::-;52965:3;;;;;:::i;:::-;;;;52924:115;;;;52663:381;52601:443:::0;:::o;32303:113::-;32364:7;32391:10;:17;;;;32384:24;;32303:113;:::o;50477:32::-;;;;:::o;20560:339::-;20755:41;20774:12;:10;:12::i;:::-;20788:7;20755:18;:41::i;:::-;20747:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20863:28;20873:4;20879:2;20883:7;20863:9;:28::i;:::-;20560:339;;;:::o;31971:256::-;32068:7;32104:23;32121:5;32104:16;:23::i;:::-;32096:5;:31;32088:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32193:12;:19;32206:5;32193:19;;;;;;;;;;;;;;;:26;32213:5;32193:26;;;;;;;;;;;;32186:33;;31971:256;;;;:::o;54864:249::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54920:22:::1;54945:21;54920:46;;54978:9;55001:10;54993:24;;55025:14;54993:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54977:67;;;55063:4;55055:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;54909:204;;54864:249::o:0;20970:185::-;21108:39;21125:4;21131:2;21135:7;21108:39;;;;;;;;;;;;:16;:39::i;:::-;20970:185;;;:::o;54578:154::-;54635:41;54654:12;:10;:12::i;:::-;54668:7;54635:18;:41::i;:::-;54627:50;;;;;;54688:9;;:11;;;;;;;;;:::i;:::-;;;;;;54710:14;54716:7;54710:5;:14::i;:::-;54578:154;:::o;52214:83::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52282:9:::1;52274:5;:17;;;;52214:83:::0;:::o;50591:33::-;;;;;;;;;;;;;:::o;32493:233::-;32568:7;32604:30;:28;:30::i;:::-;32596:5;:38;32588:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;32701:10;32712:5;32701:17;;;;;;;;:::i;:::-;;;;;;;;;;32694:24;;32493:233;;;:::o;50405:24::-;;;;:::o;52425:98::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52506:11:::1;52496:7;:21;;;;;;;;;;;;:::i;:::-;;52425:98:::0;:::o;17805:239::-;17877:7;17897:13;17913:7;:16;17921:7;17913:16;;;;;;;;;;;;;;;;;;;;;17897:32;;17965:1;17948:19;;:5;:19;;;;17940:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18031:5;18024:12;;;17805:239;;;:::o;50304:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17535:208::-;17607:7;17652:1;17635:19;;:5;:19;;;;17627:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17719:9;:16;17729:5;17719:16;;;;;;;;;;;;;;;;17712:23;;17535:208;;;:::o;42127:94::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42192:21:::1;42210:1;42192:9;:21::i;:::-;42127:94::o:0;51760:336::-;51821:16;51848:18;51869:17;51879:6;51869:9;:17::i;:::-;51848:38;;51895:25;51937:10;51923:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51895:53;;51962:9;51957:106;51981:10;51977:1;:14;51957:106;;;52023:30;52043:6;52051:1;52023:19;:30::i;:::-;52009:8;52018:1;52009:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;51993:3;;;;;:::i;:::-;;;;51957:106;;;;52080:8;52073:15;;;;51760:336;;;:::o;52303:116::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52396:17:::1;52380:13;:33;;;;52303:116:::0;:::o;50434:38::-;;;;:::o;53627:85::-;53673:4;53696:10;;;;;;;;;;;53689:17;;53627:85;:::o;41476:87::-;41522:7;41549:6;;;;;;;;;;;41542:13;;41476:87;:::o;18280:104::-;18336:13;18369:7;18362:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18280:104;:::o;53143:97::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53225:9:::1;53209:13;;:25;;;;;;;;;;;;;;;;;;53143:97:::0;:::o;50330:33::-;;;;:::o;50858:896::-;50923:10;;;;;;;;;;;50915:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50960:14;50993:9;;50977:13;:11;:13::i;:::-;:25;;;;:::i;:::-;50960:42;;51031:1;51017:11;:15;51009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51094:13;;51079:11;:28;;51071:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51199:17;;51187:9;;:29;;;;:::i;:::-;51172:11;51163:6;:20;;;;:::i;:::-;:53;;51155:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;51279:11;51271:5;;:19;;;;:::i;:::-;51258:9;:32;;51250:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51356:4;51339:21;;:13;;;;;;;;;;;:21;;;51336:303;;;51373:16;51392;:28;51409:10;51392:28;;;;;;;;;;;;;;;;51373:47;;51450:1;51439:8;:12;51431:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51525:8;51510:11;:23;;51502:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51620:11;51609:8;:22;;;;:::i;:::-;51578:16;:28;51595:10;51578:28;;;;;;;;;;;;;;;:53;;;;51362:277;51336:303;51659:9;51671:1;51659:13;;51654:95;51679:11;51674:1;:16;51654:95;;51708:33;51718:10;51739:1;51730:6;:10;;;;:::i;:::-;51708:9;:33::i;:::-;51692:3;;;;;:::i;:::-;;;;51654:95;;;;50908:846;50858:896;:::o;19963:295::-;20078:12;:10;:12::i;:::-;20066:24;;:8;:24;;;;20058:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20178:8;20133:18;:32;20152:12;:10;:12::i;:::-;20133:32;;;;;;;;;;;;;;;:42;20166:8;20133:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20231:8;20202:48;;20217:12;:10;:12::i;:::-;20202:48;;;20241:8;20202:48;;;;;;:::i;:::-;;;;;;;;19963:295;;:::o;21226:328::-;21401:41;21420:12;:10;:12::i;:::-;21434:7;21401:18;:41::i;:::-;21393:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21507:39;21521:4;21527:2;21531:7;21540:5;21507:13;:39::i;:::-;21226:328;;;;:::o;50514:37::-;;;;:::o;53356:154::-;53448:13;53480:24;53495:8;53480:14;:24::i;:::-;53473:31;;53356:154;;;:::o;52102:104::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52194:6:::1;52173:18;:27;;;;52102:104:::0;:::o;50368:32::-;;;;:::o;53720:91::-;53769:4;53792:13;;;;;;;;;;;53785:20;;53720:91;:::o;54056:328::-;54147:15;54200:42;54179:64;;:9;:64;;;54175:132;;;54291:4;54284:11;;;;54175:132;54334:42;54358:6;54366:9;54334:23;:42::i;:::-;54327:49;;54056:328;;;;;:::o;50633:52::-;;;;;;;;;;;;;;;;;:::o;53819:230::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53914:9:::1;53910:133;53929:16;;:23;;53925:1;:27;53910:133;;;54013:18;;53973:16;:37;53990:16;;54007:1;53990:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53973:37;;;;;;;;;;;;;;;:58;;;;53954:3;;;;;:::i;:::-;;;;53910:133;;;;53819:230:::0;;:::o;53050:85::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53123:6:::1;53110:10;;:19;;;;;;;;;;;;;;;;;;53050:85:::0;:::o;42376:192::-;41707:12;:10;:12::i;:::-;41696:23;;:7;:5;:7::i;:::-;:23;;;41688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42485:1:::1;42465:22;;:8;:22;;;;42457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42541:19;42551:8;42541:9;:19::i;:::-;42376:192:::0;:::o;50556:30::-;;;;;;;;;;;;;:::o;31663:224::-;31765:4;31804:35;31789:50;;;:11;:50;;;;:90;;;;31843:36;31867:11;31843:23;:36::i;:::-;31789:90;31782:97;;31663:224;;;:::o;23064:127::-;23129:4;23181:1;23153:30;;:7;:16;23161:7;23153:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23146:37;;23064:127;;;:::o;8645:98::-;8698:7;8725:10;8718:17;;8645:98;:::o;27046:174::-;27148:2;27121:15;:24;27137:7;27121:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27204:7;27200:2;27166:46;;27175:23;27190:7;27175:14;:23::i;:::-;27166:46;;;;;;;;;;;;27046:174;;:::o;24048:110::-;24124:26;24134:2;24138:7;24124:26;;;;;;;;;;;;:9;:26::i;:::-;24048:110;;:::o;23358:348::-;23451:4;23476:16;23484:7;23476;:16::i;:::-;23468:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23552:13;23568:23;23583:7;23568:14;:23::i;:::-;23552:39;;23621:5;23610:16;;:7;:16;;;:51;;;;23654:7;23630:31;;:20;23642:7;23630:11;:20::i;:::-;:31;;;23610:51;:87;;;;23665:32;23682:5;23689:7;23665:16;:32::i;:::-;23610:87;23602:96;;;23358:348;;;;:::o;26350:578::-;26509:4;26482:31;;:23;26497:7;26482:14;:23::i;:::-;:31;;;26474:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26592:1;26578:16;;:2;:16;;;;26570:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26648:39;26669:4;26675:2;26679:7;26648:20;:39::i;:::-;26752:29;26769:1;26773:7;26752:8;:29::i;:::-;26813:1;26794:9;:15;26804:4;26794:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26842:1;26825:9;:13;26835:2;26825:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26873:2;26854:7;:16;26862:7;26854:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26912:7;26908:2;26893:27;;26902:4;26893:27;;;;;;;;;;;;26350:578;;;:::o;54742:115::-;54830:21;54842:8;54830:11;:21::i;:::-;54742:115;:::o;42576:173::-;42632:16;42651:6;;;;;;;;;;;42632:25;;42677:8;42668:6;;:17;;;;;;;;;;;;;;;;;;42732:8;42701:40;;42722:8;42701:40;;;;;;;;;;;;42621:128;42576:173;:::o;22436:315::-;22593:28;22603:4;22609:2;22613:7;22593:9;:28::i;:::-;22640:48;22663:4;22669:2;22673:7;22682:5;22640:22;:48::i;:::-;22632:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22436:315;;;;:::o;38154:679::-;38227:13;38261:16;38269:7;38261;:16::i;:::-;38253:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38344:23;38370:10;:19;38381:7;38370:19;;;;;;;;;;;38344:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38400:18;38421:10;:8;:10::i;:::-;38400:31;;38529:1;38513:4;38507:18;:23;38503:72;;;38554:9;38547:16;;;;;;38503:72;38705:1;38685:9;38679:23;:27;38675:108;;;38754:4;38760:9;38737:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38723:48;;;;;;38675:108;38802:23;38817:7;38802:14;:23::i;:::-;38795:30;;;;38154:679;;;;:::o;20329:164::-;20426:4;20450:18;:25;20469:5;20450:25;;;;;;;;;;;;;;;:35;20476:8;20450:35;;;;;;;;;;;;;;;;;;;;;;;;;20443:42;;20329:164;;;;:::o;17166:305::-;17268:4;17320:25;17305:40;;;:11;:40;;;;:105;;;;17377:33;17362:48;;;:11;:48;;;;17305:105;:158;;;;17427:36;17451:11;17427:23;:36::i;:::-;17305:158;17285:178;;17166:305;;;:::o;24385:321::-;24515:18;24521:2;24525:7;24515:5;:18::i;:::-;24566:54;24597:1;24601:2;24605:7;24614:5;24566:22;:54::i;:::-;24544:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24385:321;;;:::o;54391:180::-;54518:45;54545:4;54551:2;54555:7;54518:26;:45::i;:::-;54391:180;;;:::o;39435:206::-;39504:20;39516:7;39504:11;:20::i;:::-;39578:1;39547:10;:19;39558:7;39547:19;;;;;;;;;;;39541:33;;;;;:::i;:::-;;;:38;39537:97;;39603:10;:19;39614:7;39603:19;;;;;;;;;;;;39596:26;;;;:::i;:::-;39537:97;39435:206;:::o;27785:799::-;27940:4;27961:15;:2;:13;;;:15::i;:::-;27957:620;;;28013:2;27997:36;;;28034:12;:10;:12::i;:::-;28048:4;28054:7;28063:5;27997:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27993:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28256:1;28239:6;:13;:18;28235:272;;;28282:60;;;;;;;;;;:::i;:::-;;;;;;;;28235:272;28457:6;28451:13;28442:6;28438:2;28434:15;28427:38;27993:529;28130:41;;;28120:51;;;:6;:51;;;;28113:58;;;;;27957:620;28561:4;28554:11;;27785:799;;;;;;;:::o;53248:102::-;53308:13;53337:7;53330:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53248:102;:::o;18455:334::-;18528:13;18562:16;18570:7;18562;:16::i;:::-;18554:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18643:21;18667:10;:8;:10::i;:::-;18643:34;;18719:1;18701:7;18695:21;:25;:86;;;;;;;;;;;;;;;;;18747:7;18756:18;:7;:16;:18::i;:::-;18730:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18695:86;18688:93;;;18455:334;;;:::o;10365:157::-;10450:4;10489:25;10474:40;;;:11;:40;;;;10467:47;;10365:157;;;:::o;25042:382::-;25136:1;25122:16;;:2;:16;;;;25114:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25195:16;25203:7;25195;:16::i;:::-;25194:17;25186:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25257:45;25286:1;25290:2;25294:7;25257:20;:45::i;:::-;25332:1;25315:9;:13;25325:2;25315:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25363:2;25344:7;:16;25352:7;25344:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25408:7;25404:2;25383:33;;25400:1;25383:33;;;;;;;;;;;;25042:382;;:::o;33339:589::-;33483:45;33510:4;33516:2;33520:7;33483:26;:45::i;:::-;33561:1;33545:18;;:4;:18;;;33541:187;;;33580:40;33612:7;33580:31;:40::i;:::-;33541:187;;;33650:2;33642:10;;:4;:10;;;33638:90;;33669:47;33702:4;33708:7;33669:32;:47::i;:::-;33638:90;33541:187;33756:1;33742:16;;:2;:16;;;33738:183;;;33775:45;33812:7;33775:36;:45::i;:::-;33738:183;;;33848:4;33842:10;;:2;:10;;;33838:83;;33869:40;33897:2;33901:7;33869:27;:40::i;:::-;33838:83;33738:183;33339:589;;;:::o;25653:360::-;25713:13;25729:23;25744:7;25729:14;:23::i;:::-;25713:39;;25765:48;25786:5;25801:1;25805:7;25765:20;:48::i;:::-;25854:29;25871:1;25875:7;25854:8;:29::i;:::-;25916:1;25896:9;:16;25906:5;25896:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;25935:7;:16;25943:7;25935:16;;;;;;;;;;;;25928:23;;;;;;;;;;;25997:7;25993:1;25969:36;;25978:5;25969:36;;;;;;;;;;;;25702:311;25653:360;:::o;747:387::-;807:4;1015:12;1082:7;1070:20;1062:28;;1125:1;1118:4;:8;1111:15;;;747:387;;;:::o;43009:723::-;43065:13;43295:1;43286:5;:10;43282:53;;;43313:10;;;;;;;;;;;;;;;;;;;;;43282:53;43345:12;43360:5;43345:20;;43376:14;43401:78;43416:1;43408:4;:9;43401:78;;43434:8;;;;;:::i;:::-;;;;43465:2;43457:10;;;;;:::i;:::-;;;43401:78;;;43489:19;43521:6;43511:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43489:39;;43539:154;43555:1;43546:5;:10;43539:154;;43583:1;43573:11;;;;;:::i;:::-;;;43650:2;43642:5;:10;;;;:::i;:::-;43629:2;:24;;;;:::i;:::-;43616:39;;43599:6;43606;43599:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;43679:2;43670:11;;;;;:::i;:::-;;;43539:154;;;43717:6;43703:21;;;;;43009:723;;;;:::o;29156:126::-;;;;:::o;34651:164::-;34755:10;:17;;;;34728:15;:24;34744:7;34728:24;;;;;;;;;;;:44;;;;34783:10;34799:7;34783:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34651:164;:::o;35442:988::-;35708:22;35758:1;35733:22;35750:4;35733:16;:22::i;:::-;:26;;;;:::i;:::-;35708:51;;35770:18;35791:17;:26;35809:7;35791:26;;;;;;;;;;;;35770:47;;35938:14;35924:10;:28;35920:328;;35969:19;35991:12;:18;36004:4;35991:18;;;;;;;;;;;;;;;:34;36010:14;35991:34;;;;;;;;;;;;35969:56;;36075:11;36042:12;:18;36055:4;36042:18;;;;;;;;;;;;;;;:30;36061:10;36042:30;;;;;;;;;;;:44;;;;36192:10;36159:17;:30;36177:11;36159:30;;;;;;;;;;;:43;;;;35954:294;35920:328;36344:17;:26;36362:7;36344:26;;;;;;;;;;;36337:33;;;36388:12;:18;36401:4;36388:18;;;;;;;;;;;;;;;:34;36407:14;36388:34;;;;;;;;;;;36381:41;;;35523:907;;35442:988;;:::o;36725:1079::-;36978:22;37023:1;37003:10;:17;;;;:21;;;;:::i;:::-;36978:46;;37035:18;37056:15;:24;37072:7;37056:24;;;;;;;;;;;;37035:45;;37407:19;37429:10;37440:14;37429:26;;;;;;;;:::i;:::-;;;;;;;;;;37407:48;;37493:11;37468:10;37479;37468:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;37604:10;37573:15;:28;37589:11;37573:28;;;;;;;;;;;:41;;;;37745:15;:24;37761:7;37745:24;;;;;;;;;;;37738:31;;;37780:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36796:1008;;;36725:1079;:::o;34229:221::-;34314:14;34331:20;34348:2;34331:16;:20::i;:::-;34314:37;;34389:7;34362:12;:16;34375:2;34362:16;;;;;;;;;;;;;;;:24;34379:6;34362:24;;;;;;;;;;;:34;;;;34436:6;34407:17;:26;34425:7;34407:26;;;;;;;;;;;:35;;;;34303:147;34229:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10954:366::-;11096:3;11117:67;11181:2;11176:3;11117:67;:::i;:::-;11110:74;;11193:93;11282:3;11193:93;:::i;:::-;11311:2;11306:3;11302:12;11295:19;;10954:366;;;:::o;11326:::-;11468:3;11489:67;11553:2;11548:3;11489:67;:::i;:::-;11482:74;;11565:93;11654:3;11565:93;:::i;:::-;11683:2;11678:3;11674:12;11667:19;;11326:366;;;:::o;11698:::-;11840:3;11861:67;11925:2;11920:3;11861:67;:::i;:::-;11854:74;;11937:93;12026:3;11937:93;:::i;:::-;12055:2;12050:3;12046:12;12039:19;;11698:366;;;:::o;12070:::-;12212:3;12233:67;12297:2;12292:3;12233:67;:::i;:::-;12226:74;;12309:93;12398:3;12309:93;:::i;:::-;12427:2;12422:3;12418:12;12411:19;;12070:366;;;:::o;12442:::-;12584:3;12605:67;12669:2;12664:3;12605:67;:::i;:::-;12598:74;;12681:93;12770:3;12681:93;:::i;:::-;12799:2;12794:3;12790:12;12783:19;;12442:366;;;:::o;12814:::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12814:366;;;:::o;13186:::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:::-;13700:3;13721:67;13785:2;13780:3;13721:67;:::i;:::-;13714:74;;13797:93;13886:3;13797:93;:::i;:::-;13915:2;13910:3;13906:12;13899:19;;13558:366;;;:::o;13930:::-;14072:3;14093:67;14157:2;14152:3;14093:67;:::i;:::-;14086:74;;14169:93;14258:3;14169:93;:::i;:::-;14287:2;14282:3;14278:12;14271:19;;13930:366;;;:::o;14302:::-;14444:3;14465:67;14529:2;14524:3;14465:67;:::i;:::-;14458:74;;14541:93;14630:3;14541:93;:::i;:::-;14659:2;14654:3;14650:12;14643:19;;14302:366;;;:::o;14674:::-;14816:3;14837:67;14901:2;14896:3;14837:67;:::i;:::-;14830:74;;14913:93;15002:3;14913:93;:::i;:::-;15031:2;15026:3;15022:12;15015:19;;14674:366;;;:::o;15046:::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:::-;15560:3;15581:67;15645:2;15640:3;15581:67;:::i;:::-;15574:74;;15657:93;15746:3;15657:93;:::i;:::-;15775:2;15770:3;15766:12;15759:19;;15418:366;;;:::o;15790:::-;15932:3;15953:67;16017:2;16012:3;15953:67;:::i;:::-;15946:74;;16029:93;16118:3;16029:93;:::i;:::-;16147:2;16142:3;16138:12;16131:19;;15790:366;;;:::o;16162:::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:::-;16676:3;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16534:366;;;:::o;16906:::-;17048:3;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;16906:366;;;:::o;17278:::-;17420:3;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17278:366;;;:::o;17650:::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:::-;18164:3;18185:67;18249:2;18244:3;18185:67;:::i;:::-;18178:74;;18261:93;18350:3;18261:93;:::i;:::-;18379:2;18374:3;18370:12;18363:19;;18022:366;;;:::o;18394:::-;18536:3;18557:67;18621:2;18616:3;18557:67;:::i;:::-;18550:74;;18633:93;18722:3;18633:93;:::i;:::-;18751:2;18746:3;18742:12;18735:19;;18394:366;;;:::o;18766:::-;18908:3;18929:67;18993:2;18988:3;18929:67;:::i;:::-;18922:74;;19005:93;19094:3;19005:93;:::i;:::-;19123:2;19118:3;19114:12;19107:19;;18766:366;;;:::o;19138:::-;19280:3;19301:67;19365:2;19360:3;19301:67;:::i;:::-;19294:74;;19377:93;19466:3;19377:93;:::i;:::-;19495:2;19490:3;19486:12;19479:19;;19138:366;;;:::o;19510:::-;19652:3;19673:67;19737:2;19732:3;19673:67;:::i;:::-;19666:74;;19749:93;19838:3;19749:93;:::i;:::-;19867:2;19862:3;19858:12;19851:19;;19510:366;;;:::o;19882:::-;20024:3;20045:67;20109:2;20104:3;20045:67;:::i;:::-;20038:74;;20121:93;20210:3;20121:93;:::i;:::-;20239:2;20234:3;20230:12;20223:19;;19882:366;;;:::o;20254:398::-;20413:3;20434:83;20515:1;20510:3;20434:83;:::i;:::-;20427:90;;20526:93;20615:3;20526:93;:::i;:::-;20644:1;20639:3;20635:11;20628:18;;20254:398;;;:::o;20658:366::-;20800:3;20821:67;20885:2;20880:3;20821:67;:::i;:::-;20814:74;;20897:93;20986:3;20897:93;:::i;:::-;21015:2;21010:3;21006:12;20999:19;;20658:366;;;:::o;21030:::-;21172:3;21193:67;21257:2;21252:3;21193:67;:::i;:::-;21186:74;;21269:93;21358:3;21269:93;:::i;:::-;21387:2;21382:3;21378:12;21371:19;;21030:366;;;:::o;21402:::-;21544:3;21565:67;21629:2;21624:3;21565:67;:::i;:::-;21558:74;;21641:93;21730:3;21641:93;:::i;:::-;21759:2;21754:3;21750:12;21743:19;;21402:366;;;:::o;21774:108::-;21851:24;21869:5;21851:24;:::i;:::-;21846:3;21839:37;21774:108;;:::o;21888:118::-;21975:24;21993:5;21975:24;:::i;:::-;21970:3;21963:37;21888:118;;:::o;22012:435::-;22192:3;22214:95;22305:3;22296:6;22214:95;:::i;:::-;22207:102;;22326:95;22417:3;22408:6;22326:95;:::i;:::-;22319:102;;22438:3;22431:10;;22012:435;;;;;:::o;22453:379::-;22637:3;22659:147;22802:3;22659:147;:::i;:::-;22652:154;;22823:3;22816:10;;22453:379;;;:::o;22838:222::-;22931:4;22969:2;22958:9;22954:18;22946:26;;22982:71;23050:1;23039:9;23035:17;23026:6;22982:71;:::i;:::-;22838:222;;;;:::o;23066:640::-;23261:4;23299:3;23288:9;23284:19;23276:27;;23313:71;23381:1;23370:9;23366:17;23357:6;23313:71;:::i;:::-;23394:72;23462:2;23451:9;23447:18;23438:6;23394:72;:::i;:::-;23476;23544:2;23533:9;23529:18;23520:6;23476:72;:::i;:::-;23595:9;23589:4;23585:20;23580:2;23569:9;23565:18;23558:48;23623:76;23694:4;23685:6;23623:76;:::i;:::-;23615:84;;23066:640;;;;;;;:::o;23712:373::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:108;24073:4;24064:6;23970:108;:::i;:::-;23962:116;;23712:373;;;;:::o;24091:210::-;24178:4;24216:2;24205:9;24201:18;24193:26;;24229:65;24291:1;24280:9;24276:17;24267:6;24229:65;:::i;:::-;24091:210;;;;:::o;24307:313::-;24420:4;24458:2;24447:9;24443:18;24435:26;;24507:9;24501:4;24497:20;24493:1;24482:9;24478:17;24471:47;24535:78;24608:4;24599:6;24535:78;:::i;:::-;24527:86;;24307:313;;;;:::o;24626:419::-;24792:4;24830:2;24819:9;24815:18;24807:26;;24879:9;24873:4;24869:20;24865:1;24854:9;24850:17;24843:47;24907:131;25033:4;24907:131;:::i;:::-;24899:139;;24626:419;;;:::o;25051:::-;25217:4;25255:2;25244:9;25240:18;25232:26;;25304:9;25298:4;25294:20;25290:1;25279:9;25275:17;25268:47;25332:131;25458:4;25332:131;:::i;:::-;25324:139;;25051:419;;;:::o;25476:::-;25642:4;25680:2;25669:9;25665:18;25657:26;;25729:9;25723:4;25719:20;25715:1;25704:9;25700:17;25693:47;25757:131;25883:4;25757:131;:::i;:::-;25749:139;;25476:419;;;:::o;25901:::-;26067:4;26105:2;26094:9;26090:18;26082:26;;26154:9;26148:4;26144:20;26140:1;26129:9;26125:17;26118:47;26182:131;26308:4;26182:131;:::i;:::-;26174:139;;25901:419;;;:::o;26326:::-;26492:4;26530:2;26519:9;26515:18;26507:26;;26579:9;26573:4;26569:20;26565:1;26554:9;26550:17;26543:47;26607:131;26733:4;26607:131;:::i;:::-;26599:139;;26326:419;;;:::o;26751:::-;26917:4;26955:2;26944:9;26940:18;26932:26;;27004:9;26998:4;26994:20;26990:1;26979:9;26975:17;26968:47;27032:131;27158:4;27032:131;:::i;:::-;27024:139;;26751:419;;;:::o;27176:::-;27342:4;27380:2;27369:9;27365:18;27357:26;;27429:9;27423:4;27419:20;27415:1;27404:9;27400:17;27393:47;27457:131;27583:4;27457:131;:::i;:::-;27449:139;;27176:419;;;:::o;27601:::-;27767:4;27805:2;27794:9;27790:18;27782:26;;27854:9;27848:4;27844:20;27840:1;27829:9;27825:17;27818:47;27882:131;28008:4;27882:131;:::i;:::-;27874:139;;27601:419;;;:::o;28026:::-;28192:4;28230:2;28219:9;28215:18;28207:26;;28279:9;28273:4;28269:20;28265:1;28254:9;28250:17;28243:47;28307:131;28433:4;28307:131;:::i;:::-;28299:139;;28026:419;;;:::o;28451:::-;28617:4;28655:2;28644:9;28640:18;28632:26;;28704:9;28698:4;28694:20;28690:1;28679:9;28675:17;28668:47;28732:131;28858:4;28732:131;:::i;:::-;28724:139;;28451:419;;;:::o;28876:::-;29042:4;29080:2;29069:9;29065:18;29057:26;;29129:9;29123:4;29119:20;29115:1;29104:9;29100:17;29093:47;29157:131;29283:4;29157:131;:::i;:::-;29149:139;;28876:419;;;:::o;29301:::-;29467:4;29505:2;29494:9;29490:18;29482:26;;29554:9;29548:4;29544:20;29540:1;29529:9;29525:17;29518:47;29582:131;29708:4;29582:131;:::i;:::-;29574:139;;29301:419;;;:::o;29726:::-;29892:4;29930:2;29919:9;29915:18;29907:26;;29979:9;29973:4;29969:20;29965:1;29954:9;29950:17;29943:47;30007:131;30133:4;30007:131;:::i;:::-;29999:139;;29726:419;;;:::o;30151:::-;30317:4;30355:2;30344:9;30340:18;30332:26;;30404:9;30398:4;30394:20;30390:1;30379:9;30375:17;30368:47;30432:131;30558:4;30432:131;:::i;:::-;30424:139;;30151:419;;;:::o;30576:::-;30742:4;30780:2;30769:9;30765:18;30757:26;;30829:9;30823:4;30819:20;30815:1;30804:9;30800:17;30793:47;30857:131;30983:4;30857:131;:::i;:::-;30849:139;;30576:419;;;:::o;31001:::-;31167:4;31205:2;31194:9;31190:18;31182:26;;31254:9;31248:4;31244:20;31240:1;31229:9;31225:17;31218:47;31282:131;31408:4;31282:131;:::i;:::-;31274:139;;31001:419;;;:::o;31426:::-;31592:4;31630:2;31619:9;31615:18;31607:26;;31679:9;31673:4;31669:20;31665:1;31654:9;31650:17;31643:47;31707:131;31833:4;31707:131;:::i;:::-;31699:139;;31426:419;;;:::o;31851:::-;32017:4;32055:2;32044:9;32040:18;32032:26;;32104:9;32098:4;32094:20;32090:1;32079:9;32075:17;32068:47;32132:131;32258:4;32132:131;:::i;:::-;32124:139;;31851:419;;;:::o;32276:::-;32442:4;32480:2;32469:9;32465:18;32457:26;;32529:9;32523:4;32519:20;32515:1;32504:9;32500:17;32493:47;32557:131;32683:4;32557:131;:::i;:::-;32549:139;;32276:419;;;:::o;32701:::-;32867:4;32905:2;32894:9;32890:18;32882:26;;32954:9;32948:4;32944:20;32940:1;32929:9;32925:17;32918:47;32982:131;33108:4;32982:131;:::i;:::-;32974:139;;32701:419;;;:::o;33126:::-;33292:4;33330:2;33319:9;33315:18;33307:26;;33379:9;33373:4;33369:20;33365:1;33354:9;33350:17;33343:47;33407:131;33533:4;33407:131;:::i;:::-;33399:139;;33126:419;;;:::o;33551:::-;33717:4;33755:2;33744:9;33740:18;33732:26;;33804:9;33798:4;33794:20;33790:1;33779:9;33775:17;33768:47;33832:131;33958:4;33832:131;:::i;:::-;33824:139;;33551:419;;;:::o;33976:::-;34142:4;34180:2;34169:9;34165:18;34157:26;;34229:9;34223:4;34219:20;34215:1;34204:9;34200:17;34193:47;34257:131;34383:4;34257:131;:::i;:::-;34249:139;;33976:419;;;:::o;34401:::-;34567:4;34605:2;34594:9;34590:18;34582:26;;34654:9;34648:4;34644:20;34640:1;34629:9;34625:17;34618:47;34682:131;34808:4;34682:131;:::i;:::-;34674:139;;34401:419;;;:::o;34826:::-;34992:4;35030:2;35019:9;35015:18;35007:26;;35079:9;35073:4;35069:20;35065:1;35054:9;35050:17;35043:47;35107:131;35233:4;35107:131;:::i;:::-;35099:139;;34826:419;;;:::o;35251:::-;35417:4;35455:2;35444:9;35440:18;35432:26;;35504:9;35498:4;35494:20;35490:1;35479:9;35475:17;35468:47;35532:131;35658:4;35532:131;:::i;:::-;35524:139;;35251:419;;;:::o;35676:::-;35842:4;35880:2;35869:9;35865:18;35857:26;;35929:9;35923:4;35919:20;35915:1;35904:9;35900:17;35893:47;35957:131;36083:4;35957:131;:::i;:::-;35949:139;;35676:419;;;:::o;36101:::-;36267:4;36305:2;36294:9;36290:18;36282:26;;36354:9;36348:4;36344:20;36340:1;36329:9;36325:17;36318:47;36382:131;36508:4;36382:131;:::i;:::-;36374:139;;36101:419;;;:::o;36526:222::-;36619:4;36657:2;36646:9;36642:18;36634:26;;36670:71;36738:1;36727:9;36723:17;36714:6;36670:71;:::i;:::-;36526:222;;;;:::o;36754:129::-;36788:6;36815:20;;:::i;:::-;36805:30;;36844:33;36872:4;36864:6;36844:33;:::i;:::-;36754:129;;;:::o;36889:75::-;36922:6;36955:2;36949:9;36939:19;;36889:75;:::o;36970:307::-;37031:4;37121:18;37113:6;37110:30;37107:56;;;37143:18;;:::i;:::-;37107:56;37181:29;37203:6;37181:29;:::i;:::-;37173:37;;37265:4;37259;37255:15;37247:23;;36970:307;;;:::o;37283:308::-;37345:4;37435:18;37427:6;37424:30;37421:56;;;37457:18;;:::i;:::-;37421:56;37495:29;37517:6;37495:29;:::i;:::-;37487:37;;37579:4;37573;37569:15;37561:23;;37283:308;;;:::o;37597:132::-;37664:4;37687:3;37679:11;;37717:4;37712:3;37708:14;37700:22;;37597:132;;;:::o;37735:114::-;37802:6;37836:5;37830:12;37820:22;;37735:114;;;:::o;37855:98::-;37906:6;37940:5;37934:12;37924:22;;37855:98;;;:::o;37959:99::-;38011:6;38045:5;38039:12;38029:22;;37959:99;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38183:184::-;38282:11;38316:6;38311:3;38304:19;38356:4;38351:3;38347:14;38332:29;;38183:184;;;;:::o;38373:168::-;38456:11;38490:6;38485:3;38478:19;38530:4;38525:3;38521:14;38506:29;;38373:168;;;;:::o;38547:147::-;38648:11;38685:3;38670:18;;38547:147;;;;:::o;38700:169::-;38784:11;38818:6;38813:3;38806:19;38858:4;38853:3;38849:14;38834:29;;38700:169;;;;:::o;38875:148::-;38977:11;39014:3;38999:18;;38875:148;;;;:::o;39029:305::-;39069:3;39088:20;39106:1;39088:20;:::i;:::-;39083:25;;39122:20;39140:1;39122:20;:::i;:::-;39117:25;;39276:1;39208:66;39204:74;39201:1;39198:81;39195:107;;;39282:18;;:::i;:::-;39195:107;39326:1;39323;39319:9;39312:16;;39029:305;;;;:::o;39340:185::-;39380:1;39397:20;39415:1;39397:20;:::i;:::-;39392:25;;39431:20;39449:1;39431:20;:::i;:::-;39426:25;;39470:1;39460:35;;39475:18;;:::i;:::-;39460:35;39517:1;39514;39510:9;39505:14;;39340:185;;;;:::o;39531:348::-;39571:7;39594:20;39612:1;39594:20;:::i;:::-;39589:25;;39628:20;39646:1;39628:20;:::i;:::-;39623:25;;39816:1;39748:66;39744:74;39741:1;39738:81;39733:1;39726:9;39719:17;39715:105;39712:131;;;39823:18;;:::i;:::-;39712:131;39871:1;39868;39864:9;39853:20;;39531:348;;;;:::o;39885:191::-;39925:4;39945:20;39963:1;39945:20;:::i;:::-;39940:25;;39979:20;39997:1;39979:20;:::i;:::-;39974:25;;40018:1;40015;40012:8;40009:34;;;40023:18;;:::i;:::-;40009:34;40068:1;40065;40061:9;40053:17;;39885:191;;;;:::o;40082:96::-;40119:7;40148:24;40166:5;40148:24;:::i;:::-;40137:35;;40082:96;;;:::o;40184:90::-;40218:7;40261:5;40254:13;40247:21;40236:32;;40184:90;;;:::o;40280:149::-;40316:7;40356:66;40349:5;40345:78;40334:89;;40280:149;;;:::o;40435:126::-;40472:7;40512:42;40505:5;40501:54;40490:65;;40435:126;;;:::o;40567:77::-;40604:7;40633:5;40622:16;;40567:77;;;:::o;40650:154::-;40734:6;40729:3;40724;40711:30;40796:1;40787:6;40782:3;40778:16;40771:27;40650:154;;;:::o;40810:307::-;40878:1;40888:113;40902:6;40899:1;40896:13;40888:113;;;40987:1;40982:3;40978:11;40972:18;40968:1;40963:3;40959:11;40952:39;40924:2;40921:1;40917:10;40912:15;;40888:113;;;41019:6;41016:1;41013:13;41010:101;;;41099:1;41090:6;41085:3;41081:16;41074:27;41010:101;40859:258;40810:307;;;:::o;41123:320::-;41167:6;41204:1;41198:4;41194:12;41184:22;;41251:1;41245:4;41241:12;41272:18;41262:81;;41328:4;41320:6;41316:17;41306:27;;41262:81;41390:2;41382:6;41379:14;41359:18;41356:38;41353:84;;;41409:18;;:::i;:::-;41353:84;41174:269;41123:320;;;:::o;41449:281::-;41532:27;41554:4;41532:27;:::i;:::-;41524:6;41520:40;41662:6;41650:10;41647:22;41626:18;41614:10;41611:34;41608:62;41605:88;;;41673:18;;:::i;:::-;41605:88;41713:10;41709:2;41702:22;41492:238;41449:281;;:::o;41736:233::-;41775:3;41798:24;41816:5;41798:24;:::i;:::-;41789:33;;41844:66;41837:5;41834:77;41831:103;;;41914:18;;:::i;:::-;41831:103;41961:1;41954:5;41950:13;41943:20;;41736:233;;;:::o;41975:176::-;42007:1;42024:20;42042:1;42024:20;:::i;:::-;42019:25;;42058:20;42076:1;42058:20;:::i;:::-;42053:25;;42097:1;42087:35;;42102:18;;:::i;:::-;42087:35;42143:1;42140;42136:9;42131:14;;41975:176;;;;:::o;42157:180::-;42205:77;42202:1;42195:88;42302:4;42299:1;42292:15;42326:4;42323:1;42316:15;42343:180;42391:77;42388:1;42381:88;42488:4;42485:1;42478:15;42512:4;42509:1;42502:15;42529:180;42577:77;42574:1;42567:88;42674:4;42671:1;42664:15;42698:4;42695:1;42688:15;42715:180;42763:77;42760:1;42753:88;42860:4;42857:1;42850:15;42884:4;42881:1;42874:15;42901:180;42949:77;42946:1;42939:88;43046:4;43043:1;43036:15;43070:4;43067:1;43060:15;43087:180;43135:77;43132:1;43125:88;43232:4;43229:1;43222:15;43256:4;43253:1;43246:15;43273:117;43382:1;43379;43372:12;43396:117;43505:1;43502;43495:12;43519:117;43628:1;43625;43618:12;43642:117;43751:1;43748;43741:12;43765:117;43874:1;43871;43864:12;43888:117;43997:1;43994;43987:12;44011:102;44052:6;44103:2;44099:7;44094:2;44087:5;44083:14;44079:28;44069:38;;44011:102;;;:::o;44119:179::-;44259:31;44255:1;44247:6;44243:14;44236:55;44119:179;:::o;44304:230::-;44444:34;44440:1;44432:6;44428:14;44421:58;44513:13;44508:2;44500:6;44496:15;44489:38;44304:230;:::o;44540:237::-;44680:34;44676:1;44668:6;44664:14;44657:58;44749:20;44744:2;44736:6;44732:15;44725:45;44540:237;:::o;44783:225::-;44923:34;44919:1;44911:6;44907:14;44900:58;44992:8;44987:2;44979:6;44975:15;44968:33;44783:225;:::o;45014:176::-;45154:28;45150:1;45142:6;45138:14;45131:52;45014:176;:::o;45196:178::-;45336:30;45332:1;45324:6;45320:14;45313:54;45196:178;:::o;45380:223::-;45520:34;45516:1;45508:6;45504:14;45497:58;45589:6;45584:2;45576:6;45572:15;45565:31;45380:223;:::o;45609:175::-;45749:27;45745:1;45737:6;45733:14;45726:51;45609:175;:::o;45790:231::-;45930:34;45926:1;45918:6;45914:14;45907:58;45999:14;45994:2;45986:6;45982:15;45975:39;45790:231;:::o;46027:222::-;46167:34;46163:1;46155:6;46151:14;46144:58;46236:5;46231:2;46223:6;46219:15;46212:30;46027:222;:::o;46255:223::-;46395:34;46391:1;46383:6;46379:14;46372:58;46464:6;46459:2;46451:6;46447:15;46440:31;46255:223;:::o;46484:165::-;46624:17;46620:1;46612:6;46608:14;46601:41;46484:165;:::o;46655:243::-;46795:34;46791:1;46783:6;46779:14;46772:58;46864:26;46859:2;46851:6;46847:15;46840:51;46655:243;:::o;46904:229::-;47044:34;47040:1;47032:6;47028:14;47021:58;47113:12;47108:2;47100:6;47096:15;47089:37;46904:229;:::o;47139:228::-;47279:34;47275:1;47267:6;47263:14;47256:58;47348:11;47343:2;47335:6;47331:15;47324:36;47139:228;:::o;47373:172::-;47513:24;47509:1;47501:6;47497:14;47490:48;47373:172;:::o;47551:182::-;47691:34;47687:1;47679:6;47675:14;47668:58;47551:182;:::o;47739:::-;47879:34;47875:1;47867:6;47863:14;47856:58;47739:182;:::o;47927:236::-;48067:34;48063:1;48055:6;48051:14;48044:58;48136:19;48131:2;48123:6;48119:15;48112:44;47927:236;:::o;48169:231::-;48309:34;48305:1;48297:6;48293:14;48286:58;48378:14;48373:2;48365:6;48361:15;48354:39;48169:231;:::o;48406:182::-;48546:34;48542:1;48534:6;48530:14;48523:58;48406:182;:::o;48594:177::-;48734:29;48730:1;48722:6;48718:14;48711:53;48594:177;:::o;48777:228::-;48917:34;48913:1;48905:6;48901:14;48894:58;48986:11;48981:2;48973:6;48969:15;48962:36;48777:228;:::o;49011:234::-;49151:34;49147:1;49139:6;49135:14;49128:58;49220:17;49215:2;49207:6;49203:15;49196:42;49011:234;:::o;49251:220::-;49391:34;49387:1;49379:6;49375:14;49368:58;49460:3;49455:2;49447:6;49443:15;49436:28;49251:220;:::o;49477:114::-;;:::o;49597:236::-;49737:34;49733:1;49725:6;49721:14;49714:58;49806:19;49801:2;49793:6;49789:15;49782:44;49597:236;:::o;49839:231::-;49979:34;49975:1;49967:6;49963:14;49956:58;50048:14;50043:2;50035:6;50031:15;50024:39;49839:231;:::o;50076:177::-;50216:29;50212:1;50204:6;50200:14;50193:53;50076:177;:::o;50259:122::-;50332:24;50350:5;50332:24;:::i;:::-;50325:5;50322:35;50312:63;;50371:1;50368;50361:12;50312:63;50259:122;:::o;50387:116::-;50457:21;50472:5;50457:21;:::i;:::-;50450:5;50447:32;50437:60;;50493:1;50490;50483:12;50437:60;50387:116;:::o;50509:120::-;50581:23;50598:5;50581:23;:::i;:::-;50574:5;50571:34;50561:62;;50619:1;50616;50609:12;50561:62;50509:120;:::o;50635:122::-;50708:24;50726:5;50708:24;:::i;:::-;50701:5;50698:35;50688:63;;50747:1;50744;50737:12;50688:63;50635:122;:::o

Swarm Source

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