ETH Price: $3,459.25 (-0.69%)
Gas: 2 Gwei

Token

Sleeper Hits Volume 1 (SHV)
 

Overview

Max Total Supply

5,555 SHV

Holders

1,914

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 SHV
0x9f432a2964351a7830bd9ea10f65107677d73e04
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Sleeper Hits Volume I: NFT Cribs is the initial drop for Season 1 from Nightkidsnft.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
sleeperHitsVolume1

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-28
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.6;

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

}


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

    string internal _tokenURI;


    // 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;
    }
    
    /// @notice It all points to base reality being a higher order of consciousness, take a deep dive into the work of Jacobo Grinberg.

    function _baseURI() internal view  returns (string memory) {
        return _tokenURI;
    }

    /**
     * @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 uri = _baseURI();
        return
            bytes(uri).length > 0
                ? string(abi.encodePacked(uri, _tokenId.toString(),".json"))
                : "";
    }

   
    /**
     * @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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` 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 { }
}


contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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



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

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

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

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


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract sleeperHitsVolume1 is ERC721Enumerable {
    
    IERC721 MembershipToken;
    
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint256 public basePrice;
    uint256 public maxSupply;
    uint256 public lockedTime;
    
    address artist1 = 0x49E74E31787734C3543E99BfACD457cb8286b239;
    address artist2 = 0xF4A12bC4596E1c3e19D512F76325B52D72D375CF;
    address artist3 = 0x1b21A4287CBfA8F81753de2A17028Bf2fA231034;
    address artist4 = 0x856e9E72b99486f16C1aD41e94C1A460B97173D4;
    address artist5 = 0x627137FC6cFa3fbfa0ed936fB4B5d66fB383DBE8;
    address artist6 = 0xAc06d32f100D50CA67f290307eC590443d639c8e;
    address artist7 = 0x9A477a3A08BD1fd00Fc4eC362c4445d4701aab6d;
    address dev = 0x7cF196415CDD1eF08ca2358a8282D33Ba089B9f3;
    address owner = 0xdC463F26272D2FE8758D8072BA498B16A30AaaC2;
    address owner2 = 0x58F32C2ed82556aa3aA17fF1B31E833BE77AfDfe;
    
    
    mapping(uint256 => uint256) public usedMembershipToken;
    
    event NftBought(address indexed, uint256 tokenId, uint256 memberShipTokenId);
    
    constructor(address _tokenAddress) ERC721("Sleeper Hits Volume 1", "SHV"){
        MembershipToken = IERC721(_tokenAddress);
        basePrice = 0.06 ether;
        maxSupply = 5555;
        _tokenURI = 'https://ipfs.io/ipfs/QmP1QqAECtismVg6K6xQSdETBkavbqkQFaanWuj5esvUDv/';
        lockedTime = 1630722120; // 3rd SEP 22:22 Eastern  
        
    } 
    
    function buyNft(uint256 _count,uint256[] memory tokenId) public payable {
        require(totalSupply() + _count <= maxSupply,"ERROR: max limit reached");
        require(_count <= 10 && tokenId.length <= 10,"ERROR: max 10 mint per transaction");
        require(_count <= MembershipToken.balanceOf(msg.sender),"ERROR: not enough MembershipToken");
        require(_count == tokenId.length,"ERROR: wrong token ID or count");
        require(msg.value >= _count*basePrice,"ERROR: wrong price");
       
        for(uint256 i=0; i<tokenId.length; i++){
            require(msg.sender == MembershipToken.ownerOf(tokenId[i]),"ERROR: u don't have this token ID");
            if(usedMembershipToken[tokenId[i]] != 0) require(usedMembershipToken[tokenId[i]] <= block.timestamp ,"ERROR: this Membership Token is already used");
        }
        
        for(uint256 j=0; j< _count; j++){
            _tokenIds.increment();
            uint256 newItemId = _tokenIds.current();
            
            mintNft(newItemId);
            
            usedMembershipToken[tokenId[j]] = lockedTime;
            
            emit NftBought(msg.sender,newItemId,tokenId[j]);
        }
        
        distributeAmount(msg.value);
    }
    
    function mintNft(uint256 _id) internal {
       
        _safeMint(msg.sender,_id);
    }
    
    function distributeAmount(uint256 _eth) internal {
        uint256 artShare = _eth*10/100;
        uint256 ownerShare = _eth*15/100;
        uint256 owner2Share = _eth*5/100;
        
        payable(artist1).transfer(artShare);
        payable(artist2).transfer(artShare);
        payable(artist3).transfer(artShare);
        payable(artist4).transfer(artShare);
        payable(artist5).transfer(artShare);
        payable(artist6).transfer(artShare);
        payable(artist7).transfer(artShare);
        payable(dev).transfer(artShare);
        payable(owner).transfer(ownerShare);
        payable(owner2).transfer(owner2Share);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"memberShipTokenId","type":"uint256"}],"name":"NftBought","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":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"buyNft","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"uint256","name":"","type":"uint256"}],"name":"usedMembershipToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040527349e74e31787734c3543e99bfacd457cb8286b239601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f4a12bc4596e1c3e19d512f76325b52d72d375cf601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731b21a4287cbfa8f81753de2a17028bf2fa231034601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073856e9e72b99486f16c1ad41e94c1a460b97173d4601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073627137fc6cfa3fbfa0ed936fb4b5d66fb383dbe8601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ac06d32f100d50ca67f290307ec590443d639c8e601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739a477a3a08bd1fd00fc4ec362c4445d4701aab6d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737cf196415cdd1ef08ca2358a8282d33ba089b9f3601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dc463f26272d2fe8758d8072ba498b16a30aaac2601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507358f32c2ed82556aa3aa17ff1b31e833be77afdfe601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200036357600080fd5b50604051620047b1380380620047b183398181016040528101906200038991906200058c565b6040518060400160405280601581526020017f536c6565706572204869747320566f6c756d65203100000000000000000000008152506040518060400160405280600381526020017f534856000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200040d929190620004c5565b50806001908051906020019062000426929190620004c5565b50505080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066d529ae9e860000600d819055506115b3600e819055506040518060800160405280604481526020016200476d6044913960029080519060200190620004b2929190620004c5565b50636132d848600f819055505062000676565b828054620004d390620005f2565b90600052602060002090601f016020900481019282620004f7576000855562000543565b82601f106200051257805160ff191683800117855562000543565b8280016001018555821562000543579182015b828111156200054257825182559160200191906001019062000525565b5b50905062000552919062000556565b5090565b5b808211156200057157600081600090555060010162000557565b5090565b60008151905062000586816200065c565b92915050565b600060208284031215620005a557620005a462000657565b5b6000620005b58482850162000575565b91505092915050565b6000620005cb82620005d2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200060b57607f821691505b6020821081141562000622576200062162000628565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200066781620005be565b81146200067357600080fd5b50565b6140e780620006866000396000f3fe60806040526004361061012a5760003560e01c8063635a25c2116100ab578063b88d4fde1161006f578063b88d4fde1461042a578063c7876ea414610453578063c87b56dd1461047e578063d5abeb01146104bb578063e985e9c5146104e6578063f82c0865146105235761012a565b8063635a25c21461033157806370a082311461036e57806395d89b41146103ab578063a22cb465146103d6578063a8b38205146103ff5761012a565b806323b872dd116100f257806323b872dd146102285780632f745c591461025157806342842e0e1461028e5780634f6ccce7146102b75780636352211e146102f45761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d457806318160ddd146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612c27565b61053f565b60405161016391906131e5565b60405180910390f35b34801561017857600080fd5b506101816105b9565b60405161018e9190613200565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612c81565b61064b565b6040516101cb919061317e565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f69190612be7565b6106d0565b005b34801561020957600080fd5b506102126107e8565b60405161021f9190613502565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612ad1565b6107f5565b005b34801561025d57600080fd5b5061027860048036038101906102739190612be7565b610855565b6040516102859190613502565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612ad1565b6108fa565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612c81565b61091a565b6040516102eb9190613502565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612c81565b61098b565b604051610328919061317e565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612c81565b610a3d565b6040516103659190613502565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612a37565b610a55565b6040516103a29190613502565b60405180910390f35b3480156103b757600080fd5b506103c0610b0d565b6040516103cd9190613200565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612ba7565b610b9f565b005b34801561040b57600080fd5b50610414610d20565b6040516104219190613502565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612b24565b610d26565b005b34801561045f57600080fd5b50610468610d88565b6040516104759190613502565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612c81565b610d8e565b6040516104b29190613200565b60405180910390f35b3480156104c757600080fd5b506104d0610e35565b6040516104dd9190613502565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190612a91565b610e3b565b60405161051a91906131e5565b60405180910390f35b61053d60048036038101906105389190612cdb565b610ecf565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105b257506105b1826113dc565b5b9050919050565b6060600080546105c8906137d6565b80601f01602080910402602001604051908101604052809291908181526020018280546105f4906137d6565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000610656826114be565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90613402565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106db8261098b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390613482565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076b61152a565b73ffffffffffffffffffffffffffffffffffffffff16148061079a57506107998161079461152a565b610e3b565b5b6107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d090613362565b60405180910390fd5b6107e38383611532565b505050565b6000600980549050905090565b61080661080061152a565b826115eb565b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c906134c2565b60405180910390fd5b6108508383836116c9565b505050565b600061086083610a55565b82106108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890613222565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61091583838360405180602001604052806000815250610d26565b505050565b60006109246107e8565b8210610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c906134e2565b60405180910390fd5b600982815481106109795761097861396f565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b906133c2565b60405180910390fd5b80915050919050565b601a6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906133a2565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060018054610b1c906137d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b48906137d6565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b5050505050905090565b610ba761152a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613302565b60405180910390fd5b8060066000610c2261152a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ccf61152a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d1491906131e5565b60405180910390a35050565b600f5481565b610d37610d3161152a565b836115eb565b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d906134c2565b60405180910390fd5b610d8284848484611925565b50505050565b600d5481565b6060610d99826114be565b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613442565b60405180910390fd5b6000610de2611981565b90506000815111610e025760405180602001604052806000815250610e2d565b80610e0c84611a13565b604051602001610e1d92919061314f565b6040516020818303038152906040525b915050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5482610edb6107e8565b610ee5919061360b565b1115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906132a2565b60405180910390fd5b600a8211158015610f395750600a815111155b610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90613342565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fd3919061317e565b60206040518083038186803b158015610feb57600080fd5b505afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612cae565b821115611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613282565b60405180910390fd5b805182146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906132c2565b60405180910390fd5b600d54826110b69190613692565b3410156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906134a2565b60405180910390fd5b60005b81518110156112ef57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8383815181106111555761115461396f565b5b60200260200101516040518263ffffffff1660e01b81526004016111799190613502565b60206040518083038186803b15801561119157600080fd5b505afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190612a64565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90613462565b60405180910390fd5b6000601a600084848151811061124f5761124e61396f565b5b6020026020010151815260200190815260200160002054146112dc5742601a60008484815181106112835761128261396f565b5b602002602001015181526020019081526020016000205411156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613382565b60405180910390fd5b5b80806112e790613839565b9150506110fb565b5060005b828110156113ce57611305600c611b74565b6000611311600c611b8a565b905061131c81611b98565b600f54601a60008585815181106113365761133561396f565b5b60200260200101518152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f6cde4ed53ecc43e1126a8b2b9e8ad2f4ec18d9f7834636ed981cfa61960be3708285858151811061139c5761139b61396f565b5b60200260200101516040516113b292919061351d565b60405180910390a25080806113c690613839565b9150506112f3565b506113d834611ba5565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114a757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806114b757506114b68261201c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115a58361098b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115f6826114be565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613322565b60405180910390fd5b60006116408361098b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116af57508373ffffffffffffffffffffffffffffffffffffffff166116978461064b565b73ffffffffffffffffffffffffffffffffffffffff16145b806116c057506116bf8185610e3b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116e98261098b565b73ffffffffffffffffffffffffffffffffffffffff161461173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613422565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906132e2565b60405180910390fd5b6117ba838383612086565b6117c5600082611532565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461181591906136ec565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461186c919061360b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6119308484846116c9565b61193c8484848461219a565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290613242565b60405180910390fd5b50505050565b606060028054611990906137d6565b80601f01602080910402602001604051908101604052809291908181526020018280546119bc906137d6565b8015611a095780601f106119de57610100808354040283529160200191611a09565b820191906000526020600020905b8154815290600101906020018083116119ec57829003601f168201915b5050505050905090565b60606000821415611a5b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b6f565b600082905060005b60008214611a8d578080611a7690613839565b915050600a82611a869190613661565b9150611a63565b60008167ffffffffffffffff811115611aa957611aa861399e565b5b6040519080825280601f01601f191660200182016040528015611adb5781602001600182028036833780820191505090505b5090505b60008514611b6857600182611af491906136ec565b9150600a85611b039190613882565b6030611b0f919061360b565b60f81b818381518110611b2557611b2461396f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b619190613661565b9450611adf565b8093505050505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611ba23382612331565b50565b60006064600a83611bb69190613692565b611bc09190613661565b905060006064600f84611bd39190613692565b611bdd9190613661565b905060006064600585611bf09190613692565b611bfa9190613661565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611c64573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611ccd573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611d36573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611d9f573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e08573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e71573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611eda573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611f43573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611fac573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612015573d6000803e3d6000fd5b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61209183838361234f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d4576120cf81612354565b612113565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461211257612111838261239d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612156576121518161250a565b612195565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121945761219382826125db565b5b5b505050565b60006121bb8473ffffffffffffffffffffffffffffffffffffffff1661265a565b15612324578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121e461152a565b8786866040518563ffffffff1660e01b81526004016122069493929190613199565b602060405180830381600087803b15801561222057600080fd5b505af192505050801561225157506040513d601f19601f8201168201806040525081019061224e9190612c54565b60015b6122d4573d8060008114612281576040519150601f19603f3d011682016040523d82523d6000602084013e612286565b606091505b506000815114156122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c390613242565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612329565b600190505b949350505050565b61234b82826040518060200160405280600081525061266d565b5050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123aa84610a55565b6123b491906136ec565b9050600060086000848152602001908152602001600020549050818114612499576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061251e91906136ec565b90506000600a600084815260200190815260200160002054905060006009838154811061254e5761254d61396f565b5b9060005260206000200154905080600983815481106125705761256f61396f565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806125bf576125be613940565b5b6001900381819060005260206000200160009055905550505050565b60006125e683610a55565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b61267783836126c8565b612684600084848461219a565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90613242565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f906133e2565b60405180910390fd5b612741816114be565b15612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890613262565b60405180910390fd5b61278d60008383612086565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127dd919061360b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006128a96128a48461356b565b613546565b905080838252602082019050828560208602820111156128cc576128cb6139d2565b5b60005b858110156128fc57816128e28882612a0d565b8452602084019350602083019250506001810190506128cf565b5050509392505050565b600061291961291484613597565b613546565b905082815260208101848484011115612935576129346139d7565b5b612940848285613794565b509392505050565b60008135905061295781614055565b92915050565b60008151905061296c81614055565b92915050565b600082601f830112612987576129866139cd565b5b8135612997848260208601612896565b91505092915050565b6000813590506129af8161406c565b92915050565b6000813590506129c481614083565b92915050565b6000815190506129d981614083565b92915050565b600082601f8301126129f4576129f36139cd565b5b8135612a04848260208601612906565b91505092915050565b600081359050612a1c8161409a565b92915050565b600081519050612a318161409a565b92915050565b600060208284031215612a4d57612a4c6139e1565b5b6000612a5b84828501612948565b91505092915050565b600060208284031215612a7a57612a796139e1565b5b6000612a888482850161295d565b91505092915050565b60008060408385031215612aa857612aa76139e1565b5b6000612ab685828601612948565b9250506020612ac785828601612948565b9150509250929050565b600080600060608486031215612aea57612ae96139e1565b5b6000612af886828701612948565b9350506020612b0986828701612948565b9250506040612b1a86828701612a0d565b9150509250925092565b60008060008060808587031215612b3e57612b3d6139e1565b5b6000612b4c87828801612948565b9450506020612b5d87828801612948565b9350506040612b6e87828801612a0d565b925050606085013567ffffffffffffffff811115612b8f57612b8e6139dc565b5b612b9b878288016129df565b91505092959194509250565b60008060408385031215612bbe57612bbd6139e1565b5b6000612bcc85828601612948565b9250506020612bdd858286016129a0565b9150509250929050565b60008060408385031215612bfe57612bfd6139e1565b5b6000612c0c85828601612948565b9250506020612c1d85828601612a0d565b9150509250929050565b600060208284031215612c3d57612c3c6139e1565b5b6000612c4b848285016129b5565b91505092915050565b600060208284031215612c6a57612c696139e1565b5b6000612c78848285016129ca565b91505092915050565b600060208284031215612c9757612c966139e1565b5b6000612ca584828501612a0d565b91505092915050565b600060208284031215612cc457612cc36139e1565b5b6000612cd284828501612a22565b91505092915050565b60008060408385031215612cf257612cf16139e1565b5b6000612d0085828601612a0d565b925050602083013567ffffffffffffffff811115612d2157612d206139dc565b5b612d2d85828601612972565b9150509250929050565b612d4081613720565b82525050565b612d4f81613732565b82525050565b6000612d60826135c8565b612d6a81856135de565b9350612d7a8185602086016137a3565b612d83816139e6565b840191505092915050565b6000612d99826135d3565b612da381856135ef565b9350612db38185602086016137a3565b612dbc816139e6565b840191505092915050565b6000612dd2826135d3565b612ddc8185613600565b9350612dec8185602086016137a3565b80840191505092915050565b6000612e05602b836135ef565b9150612e10826139f7565b604082019050919050565b6000612e286032836135ef565b9150612e3382613a46565b604082019050919050565b6000612e4b601c836135ef565b9150612e5682613a95565b602082019050919050565b6000612e6e6021836135ef565b9150612e7982613abe565b604082019050919050565b6000612e916018836135ef565b9150612e9c82613b0d565b602082019050919050565b6000612eb4601e836135ef565b9150612ebf82613b36565b602082019050919050565b6000612ed76024836135ef565b9150612ee282613b5f565b604082019050919050565b6000612efa6019836135ef565b9150612f0582613bae565b602082019050919050565b6000612f1d602c836135ef565b9150612f2882613bd7565b604082019050919050565b6000612f406022836135ef565b9150612f4b82613c26565b604082019050919050565b6000612f636038836135ef565b9150612f6e82613c75565b604082019050919050565b6000612f86602c836135ef565b9150612f9182613cc4565b604082019050919050565b6000612fa9602a836135ef565b9150612fb482613d13565b604082019050919050565b6000612fcc6029836135ef565b9150612fd782613d62565b604082019050919050565b6000612fef6020836135ef565b9150612ffa82613db1565b602082019050919050565b6000613012602c836135ef565b915061301d82613dda565b604082019050919050565b6000613035600583613600565b915061304082613e29565b600582019050919050565b60006130586029836135ef565b915061306382613e52565b604082019050919050565b600061307b602f836135ef565b915061308682613ea1565b604082019050919050565b600061309e6021836135ef565b91506130a982613ef0565b604082019050919050565b60006130c16021836135ef565b91506130cc82613f3f565b604082019050919050565b60006130e46012836135ef565b91506130ef82613f8e565b602082019050919050565b60006131076031836135ef565b915061311282613fb7565b604082019050919050565b600061312a602c836135ef565b915061313582614006565b604082019050919050565b6131498161378a565b82525050565b600061315b8285612dc7565b91506131678284612dc7565b915061317282613028565b91508190509392505050565b60006020820190506131936000830184612d37565b92915050565b60006080820190506131ae6000830187612d37565b6131bb6020830186612d37565b6131c86040830185613140565b81810360608301526131da8184612d55565b905095945050505050565b60006020820190506131fa6000830184612d46565b92915050565b6000602082019050818103600083015261321a8184612d8e565b905092915050565b6000602082019050818103600083015261323b81612df8565b9050919050565b6000602082019050818103600083015261325b81612e1b565b9050919050565b6000602082019050818103600083015261327b81612e3e565b9050919050565b6000602082019050818103600083015261329b81612e61565b9050919050565b600060208201905081810360008301526132bb81612e84565b9050919050565b600060208201905081810360008301526132db81612ea7565b9050919050565b600060208201905081810360008301526132fb81612eca565b9050919050565b6000602082019050818103600083015261331b81612eed565b9050919050565b6000602082019050818103600083015261333b81612f10565b9050919050565b6000602082019050818103600083015261335b81612f33565b9050919050565b6000602082019050818103600083015261337b81612f56565b9050919050565b6000602082019050818103600083015261339b81612f79565b9050919050565b600060208201905081810360008301526133bb81612f9c565b9050919050565b600060208201905081810360008301526133db81612fbf565b9050919050565b600060208201905081810360008301526133fb81612fe2565b9050919050565b6000602082019050818103600083015261341b81613005565b9050919050565b6000602082019050818103600083015261343b8161304b565b9050919050565b6000602082019050818103600083015261345b8161306e565b9050919050565b6000602082019050818103600083015261347b81613091565b9050919050565b6000602082019050818103600083015261349b816130b4565b9050919050565b600060208201905081810360008301526134bb816130d7565b9050919050565b600060208201905081810360008301526134db816130fa565b9050919050565b600060208201905081810360008301526134fb8161311d565b9050919050565b60006020820190506135176000830184613140565b92915050565b60006040820190506135326000830185613140565b61353f6020830184613140565b9392505050565b6000613550613561565b905061355c8282613808565b919050565b6000604051905090565b600067ffffffffffffffff8211156135865761358561399e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135b2576135b161399e565b5b6135bb826139e6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136168261378a565b91506136218361378a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613656576136556138b3565b5b828201905092915050565b600061366c8261378a565b91506136778361378a565b925082613687576136866138e2565b5b828204905092915050565b600061369d8261378a565b91506136a88361378a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e1576136e06138b3565b5b828202905092915050565b60006136f78261378a565b91506137028361378a565b925082821015613715576137146138b3565b5b828203905092915050565b600061372b8261376a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137c15780820151818401526020810190506137a6565b838111156137d0576000848401525b50505050565b600060028204905060018216806137ee57607f821691505b6020821081141561380257613801613911565b5b50919050565b613811826139e6565b810181811067ffffffffffffffff821117156138305761382f61399e565b5b80604052505050565b60006138448261378a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613877576138766138b3565b5b600182019050919050565b600061388d8261378a565b91506138988361378a565b9250826138a8576138a76138e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552524f523a206e6f7420656e6f756768204d656d62657273686970546f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552524f523a206d6178206c696d697420726561636865640000000000000000600082015250565b7f4552524f523a2077726f6e6720746f6b656e204944206f7220636f756e740000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a206d6178203130206d696e7420706572207472616e736163746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552524f523a2074686973204d656d6265727368697020546f6b656e2069732060008201527f616c726561647920757365640000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552524f523a207520646f6e27742068617665207468697320746f6b656e204960008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552524f523a2077726f6e672070726963650000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61405e81613720565b811461406957600080fd5b50565b61407581613732565b811461408057600080fd5b50565b61408c8161373e565b811461409757600080fd5b50565b6140a38161378a565b81146140ae57600080fd5b5056fea2646970667358221220008aa449519d49d94d95932f8c50a917e665b24c29e8472624a620e4926d9afd64736f6c6343000806003368747470733a2f2f697066732e696f2f697066732f516d503151714145437469736d5667364b36785153644554426b617662716b514661616e57756a356573765544762f00000000000000000000000083b7261db8c795701c6fc86d1fcd073ece940e10

Deployed Bytecode

0x60806040526004361061012a5760003560e01c8063635a25c2116100ab578063b88d4fde1161006f578063b88d4fde1461042a578063c7876ea414610453578063c87b56dd1461047e578063d5abeb01146104bb578063e985e9c5146104e6578063f82c0865146105235761012a565b8063635a25c21461033157806370a082311461036e57806395d89b41146103ab578063a22cb465146103d6578063a8b38205146103ff5761012a565b806323b872dd116100f257806323b872dd146102285780632f745c591461025157806342842e0e1461028e5780634f6ccce7146102b75780636352211e146102f45761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d457806318160ddd146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612c27565b61053f565b60405161016391906131e5565b60405180910390f35b34801561017857600080fd5b506101816105b9565b60405161018e9190613200565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612c81565b61064b565b6040516101cb919061317e565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f69190612be7565b6106d0565b005b34801561020957600080fd5b506102126107e8565b60405161021f9190613502565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612ad1565b6107f5565b005b34801561025d57600080fd5b5061027860048036038101906102739190612be7565b610855565b6040516102859190613502565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612ad1565b6108fa565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612c81565b61091a565b6040516102eb9190613502565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612c81565b61098b565b604051610328919061317e565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612c81565b610a3d565b6040516103659190613502565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612a37565b610a55565b6040516103a29190613502565b60405180910390f35b3480156103b757600080fd5b506103c0610b0d565b6040516103cd9190613200565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612ba7565b610b9f565b005b34801561040b57600080fd5b50610414610d20565b6040516104219190613502565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190612b24565b610d26565b005b34801561045f57600080fd5b50610468610d88565b6040516104759190613502565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612c81565b610d8e565b6040516104b29190613200565b60405180910390f35b3480156104c757600080fd5b506104d0610e35565b6040516104dd9190613502565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190612a91565b610e3b565b60405161051a91906131e5565b60405180910390f35b61053d60048036038101906105389190612cdb565b610ecf565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105b257506105b1826113dc565b5b9050919050565b6060600080546105c8906137d6565b80601f01602080910402602001604051908101604052809291908181526020018280546105f4906137d6565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000610656826114be565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90613402565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106db8261098b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390613482565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076b61152a565b73ffffffffffffffffffffffffffffffffffffffff16148061079a57506107998161079461152a565b610e3b565b5b6107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d090613362565b60405180910390fd5b6107e38383611532565b505050565b6000600980549050905090565b61080661080061152a565b826115eb565b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c906134c2565b60405180910390fd5b6108508383836116c9565b505050565b600061086083610a55565b82106108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890613222565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61091583838360405180602001604052806000815250610d26565b505050565b60006109246107e8565b8210610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c906134e2565b60405180910390fd5b600982815481106109795761097861396f565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b906133c2565b60405180910390fd5b80915050919050565b601a6020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906133a2565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060018054610b1c906137d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b48906137d6565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b5050505050905090565b610ba761152a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613302565b60405180910390fd5b8060066000610c2261152a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ccf61152a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d1491906131e5565b60405180910390a35050565b600f5481565b610d37610d3161152a565b836115eb565b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d906134c2565b60405180910390fd5b610d8284848484611925565b50505050565b600d5481565b6060610d99826114be565b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613442565b60405180910390fd5b6000610de2611981565b90506000815111610e025760405180602001604052806000815250610e2d565b80610e0c84611a13565b604051602001610e1d92919061314f565b6040516020818303038152906040525b915050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5482610edb6107e8565b610ee5919061360b565b1115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906132a2565b60405180910390fd5b600a8211158015610f395750600a815111155b610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90613342565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fd3919061317e565b60206040518083038186803b158015610feb57600080fd5b505afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612cae565b821115611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613282565b60405180910390fd5b805182146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906132c2565b60405180910390fd5b600d54826110b69190613692565b3410156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906134a2565b60405180910390fd5b60005b81518110156112ef57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8383815181106111555761115461396f565b5b60200260200101516040518263ffffffff1660e01b81526004016111799190613502565b60206040518083038186803b15801561119157600080fd5b505afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190612a64565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90613462565b60405180910390fd5b6000601a600084848151811061124f5761124e61396f565b5b6020026020010151815260200190815260200160002054146112dc5742601a60008484815181106112835761128261396f565b5b602002602001015181526020019081526020016000205411156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613382565b60405180910390fd5b5b80806112e790613839565b9150506110fb565b5060005b828110156113ce57611305600c611b74565b6000611311600c611b8a565b905061131c81611b98565b600f54601a60008585815181106113365761133561396f565b5b60200260200101518152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f6cde4ed53ecc43e1126a8b2b9e8ad2f4ec18d9f7834636ed981cfa61960be3708285858151811061139c5761139b61396f565b5b60200260200101516040516113b292919061351d565b60405180910390a25080806113c690613839565b9150506112f3565b506113d834611ba5565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114a757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806114b757506114b68261201c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115a58361098b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115f6826114be565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613322565b60405180910390fd5b60006116408361098b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116af57508373ffffffffffffffffffffffffffffffffffffffff166116978461064b565b73ffffffffffffffffffffffffffffffffffffffff16145b806116c057506116bf8185610e3b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116e98261098b565b73ffffffffffffffffffffffffffffffffffffffff161461173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613422565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906132e2565b60405180910390fd5b6117ba838383612086565b6117c5600082611532565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461181591906136ec565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461186c919061360b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6119308484846116c9565b61193c8484848461219a565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290613242565b60405180910390fd5b50505050565b606060028054611990906137d6565b80601f01602080910402602001604051908101604052809291908181526020018280546119bc906137d6565b8015611a095780601f106119de57610100808354040283529160200191611a09565b820191906000526020600020905b8154815290600101906020018083116119ec57829003601f168201915b5050505050905090565b60606000821415611a5b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b6f565b600082905060005b60008214611a8d578080611a7690613839565b915050600a82611a869190613661565b9150611a63565b60008167ffffffffffffffff811115611aa957611aa861399e565b5b6040519080825280601f01601f191660200182016040528015611adb5781602001600182028036833780820191505090505b5090505b60008514611b6857600182611af491906136ec565b9150600a85611b039190613882565b6030611b0f919061360b565b60f81b818381518110611b2557611b2461396f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b619190613661565b9450611adf565b8093505050505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611ba23382612331565b50565b60006064600a83611bb69190613692565b611bc09190613661565b905060006064600f84611bd39190613692565b611bdd9190613661565b905060006064600585611bf09190613692565b611bfa9190613661565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611c64573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611ccd573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611d36573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611d9f573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e08573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e71573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611eda573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611f43573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611fac573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612015573d6000803e3d6000fd5b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61209183838361234f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d4576120cf81612354565b612113565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461211257612111838261239d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612156576121518161250a565b612195565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121945761219382826125db565b5b5b505050565b60006121bb8473ffffffffffffffffffffffffffffffffffffffff1661265a565b15612324578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121e461152a565b8786866040518563ffffffff1660e01b81526004016122069493929190613199565b602060405180830381600087803b15801561222057600080fd5b505af192505050801561225157506040513d601f19601f8201168201806040525081019061224e9190612c54565b60015b6122d4573d8060008114612281576040519150601f19603f3d011682016040523d82523d6000602084013e612286565b606091505b506000815114156122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c390613242565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612329565b600190505b949350505050565b61234b82826040518060200160405280600081525061266d565b5050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123aa84610a55565b6123b491906136ec565b9050600060086000848152602001908152602001600020549050818114612499576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061251e91906136ec565b90506000600a600084815260200190815260200160002054905060006009838154811061254e5761254d61396f565b5b9060005260206000200154905080600983815481106125705761256f61396f565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806125bf576125be613940565b5b6001900381819060005260206000200160009055905550505050565b60006125e683610a55565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b61267783836126c8565b612684600084848461219a565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90613242565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f906133e2565b60405180910390fd5b612741816114be565b15612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890613262565b60405180910390fd5b61278d60008383612086565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127dd919061360b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006128a96128a48461356b565b613546565b905080838252602082019050828560208602820111156128cc576128cb6139d2565b5b60005b858110156128fc57816128e28882612a0d565b8452602084019350602083019250506001810190506128cf565b5050509392505050565b600061291961291484613597565b613546565b905082815260208101848484011115612935576129346139d7565b5b612940848285613794565b509392505050565b60008135905061295781614055565b92915050565b60008151905061296c81614055565b92915050565b600082601f830112612987576129866139cd565b5b8135612997848260208601612896565b91505092915050565b6000813590506129af8161406c565b92915050565b6000813590506129c481614083565b92915050565b6000815190506129d981614083565b92915050565b600082601f8301126129f4576129f36139cd565b5b8135612a04848260208601612906565b91505092915050565b600081359050612a1c8161409a565b92915050565b600081519050612a318161409a565b92915050565b600060208284031215612a4d57612a4c6139e1565b5b6000612a5b84828501612948565b91505092915050565b600060208284031215612a7a57612a796139e1565b5b6000612a888482850161295d565b91505092915050565b60008060408385031215612aa857612aa76139e1565b5b6000612ab685828601612948565b9250506020612ac785828601612948565b9150509250929050565b600080600060608486031215612aea57612ae96139e1565b5b6000612af886828701612948565b9350506020612b0986828701612948565b9250506040612b1a86828701612a0d565b9150509250925092565b60008060008060808587031215612b3e57612b3d6139e1565b5b6000612b4c87828801612948565b9450506020612b5d87828801612948565b9350506040612b6e87828801612a0d565b925050606085013567ffffffffffffffff811115612b8f57612b8e6139dc565b5b612b9b878288016129df565b91505092959194509250565b60008060408385031215612bbe57612bbd6139e1565b5b6000612bcc85828601612948565b9250506020612bdd858286016129a0565b9150509250929050565b60008060408385031215612bfe57612bfd6139e1565b5b6000612c0c85828601612948565b9250506020612c1d85828601612a0d565b9150509250929050565b600060208284031215612c3d57612c3c6139e1565b5b6000612c4b848285016129b5565b91505092915050565b600060208284031215612c6a57612c696139e1565b5b6000612c78848285016129ca565b91505092915050565b600060208284031215612c9757612c966139e1565b5b6000612ca584828501612a0d565b91505092915050565b600060208284031215612cc457612cc36139e1565b5b6000612cd284828501612a22565b91505092915050565b60008060408385031215612cf257612cf16139e1565b5b6000612d0085828601612a0d565b925050602083013567ffffffffffffffff811115612d2157612d206139dc565b5b612d2d85828601612972565b9150509250929050565b612d4081613720565b82525050565b612d4f81613732565b82525050565b6000612d60826135c8565b612d6a81856135de565b9350612d7a8185602086016137a3565b612d83816139e6565b840191505092915050565b6000612d99826135d3565b612da381856135ef565b9350612db38185602086016137a3565b612dbc816139e6565b840191505092915050565b6000612dd2826135d3565b612ddc8185613600565b9350612dec8185602086016137a3565b80840191505092915050565b6000612e05602b836135ef565b9150612e10826139f7565b604082019050919050565b6000612e286032836135ef565b9150612e3382613a46565b604082019050919050565b6000612e4b601c836135ef565b9150612e5682613a95565b602082019050919050565b6000612e6e6021836135ef565b9150612e7982613abe565b604082019050919050565b6000612e916018836135ef565b9150612e9c82613b0d565b602082019050919050565b6000612eb4601e836135ef565b9150612ebf82613b36565b602082019050919050565b6000612ed76024836135ef565b9150612ee282613b5f565b604082019050919050565b6000612efa6019836135ef565b9150612f0582613bae565b602082019050919050565b6000612f1d602c836135ef565b9150612f2882613bd7565b604082019050919050565b6000612f406022836135ef565b9150612f4b82613c26565b604082019050919050565b6000612f636038836135ef565b9150612f6e82613c75565b604082019050919050565b6000612f86602c836135ef565b9150612f9182613cc4565b604082019050919050565b6000612fa9602a836135ef565b9150612fb482613d13565b604082019050919050565b6000612fcc6029836135ef565b9150612fd782613d62565b604082019050919050565b6000612fef6020836135ef565b9150612ffa82613db1565b602082019050919050565b6000613012602c836135ef565b915061301d82613dda565b604082019050919050565b6000613035600583613600565b915061304082613e29565b600582019050919050565b60006130586029836135ef565b915061306382613e52565b604082019050919050565b600061307b602f836135ef565b915061308682613ea1565b604082019050919050565b600061309e6021836135ef565b91506130a982613ef0565b604082019050919050565b60006130c16021836135ef565b91506130cc82613f3f565b604082019050919050565b60006130e46012836135ef565b91506130ef82613f8e565b602082019050919050565b60006131076031836135ef565b915061311282613fb7565b604082019050919050565b600061312a602c836135ef565b915061313582614006565b604082019050919050565b6131498161378a565b82525050565b600061315b8285612dc7565b91506131678284612dc7565b915061317282613028565b91508190509392505050565b60006020820190506131936000830184612d37565b92915050565b60006080820190506131ae6000830187612d37565b6131bb6020830186612d37565b6131c86040830185613140565b81810360608301526131da8184612d55565b905095945050505050565b60006020820190506131fa6000830184612d46565b92915050565b6000602082019050818103600083015261321a8184612d8e565b905092915050565b6000602082019050818103600083015261323b81612df8565b9050919050565b6000602082019050818103600083015261325b81612e1b565b9050919050565b6000602082019050818103600083015261327b81612e3e565b9050919050565b6000602082019050818103600083015261329b81612e61565b9050919050565b600060208201905081810360008301526132bb81612e84565b9050919050565b600060208201905081810360008301526132db81612ea7565b9050919050565b600060208201905081810360008301526132fb81612eca565b9050919050565b6000602082019050818103600083015261331b81612eed565b9050919050565b6000602082019050818103600083015261333b81612f10565b9050919050565b6000602082019050818103600083015261335b81612f33565b9050919050565b6000602082019050818103600083015261337b81612f56565b9050919050565b6000602082019050818103600083015261339b81612f79565b9050919050565b600060208201905081810360008301526133bb81612f9c565b9050919050565b600060208201905081810360008301526133db81612fbf565b9050919050565b600060208201905081810360008301526133fb81612fe2565b9050919050565b6000602082019050818103600083015261341b81613005565b9050919050565b6000602082019050818103600083015261343b8161304b565b9050919050565b6000602082019050818103600083015261345b8161306e565b9050919050565b6000602082019050818103600083015261347b81613091565b9050919050565b6000602082019050818103600083015261349b816130b4565b9050919050565b600060208201905081810360008301526134bb816130d7565b9050919050565b600060208201905081810360008301526134db816130fa565b9050919050565b600060208201905081810360008301526134fb8161311d565b9050919050565b60006020820190506135176000830184613140565b92915050565b60006040820190506135326000830185613140565b61353f6020830184613140565b9392505050565b6000613550613561565b905061355c8282613808565b919050565b6000604051905090565b600067ffffffffffffffff8211156135865761358561399e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135b2576135b161399e565b5b6135bb826139e6565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136168261378a565b91506136218361378a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613656576136556138b3565b5b828201905092915050565b600061366c8261378a565b91506136778361378a565b925082613687576136866138e2565b5b828204905092915050565b600061369d8261378a565b91506136a88361378a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e1576136e06138b3565b5b828202905092915050565b60006136f78261378a565b91506137028361378a565b925082821015613715576137146138b3565b5b828203905092915050565b600061372b8261376a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137c15780820151818401526020810190506137a6565b838111156137d0576000848401525b50505050565b600060028204905060018216806137ee57607f821691505b6020821081141561380257613801613911565b5b50919050565b613811826139e6565b810181811067ffffffffffffffff821117156138305761382f61399e565b5b80604052505050565b60006138448261378a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613877576138766138b3565b5b600182019050919050565b600061388d8261378a565b91506138988361378a565b9250826138a8576138a76138e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552524f523a206e6f7420656e6f756768204d656d62657273686970546f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552524f523a206d6178206c696d697420726561636865640000000000000000600082015250565b7f4552524f523a2077726f6e6720746f6b656e204944206f7220636f756e740000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a206d6178203130206d696e7420706572207472616e736163746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552524f523a2074686973204d656d6265727368697020546f6b656e2069732060008201527f616c726561647920757365640000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552524f523a207520646f6e27742068617665207468697320746f6b656e204960008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552524f523a2077726f6e672070726963650000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61405e81613720565b811461406957600080fd5b50565b61407581613732565b811461408057600080fd5b50565b61408c8161373e565b811461409757600080fd5b50565b6140a38161378a565b81146140ae57600080fd5b5056fea2646970667358221220008aa449519d49d94d95932f8c50a917e665b24c29e8472624a620e4926d9afd64736f6c63430008060033

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

00000000000000000000000083b7261db8c795701c6fc86d1fcd073ece940e10

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x83b7261DB8c795701C6fc86D1fcd073ece940E10

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000083b7261db8c795701c6fc86d1fcd073ece940e10


Deployed Bytecode Sourcemap

42517:3502:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35043:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20747:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22246:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21783:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35683:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23136:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35351:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23512:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35873:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20441:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43478:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20171:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20916:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22539:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42765:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23734:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42703:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21336:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42734:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22905:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44003:1245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35043:224;35145:4;35184:35;35169:50;;;:11;:50;;;;:90;;;;35223:36;35247:11;35223:23;:36::i;:::-;35169:90;35162:97;;35043:224;;;:::o;20747:100::-;20801:13;20834:5;20827:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20747:100;:::o;22246:221::-;22322:7;22350:16;22358:7;22350;:16::i;:::-;22342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:15;:24;22451:7;22435:24;;;;;;;;;;;;;;;;;;;;;22428:31;;22246:221;;;:::o;21783:397::-;21864:13;21880:23;21895:7;21880:14;:23::i;:::-;21864:39;;21928:5;21922:11;;:2;:11;;;;21914:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22008:5;21992:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22017:37;22034:5;22041:12;:10;:12::i;:::-;22017:16;:37::i;:::-;21992:62;21984:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22151:21;22160:2;22164:7;22151:8;:21::i;:::-;21853:327;21783:397;;:::o;35683:113::-;35744:7;35771:10;:17;;;;35764:24;;35683:113;:::o;23136:305::-;23297:41;23316:12;:10;:12::i;:::-;23330:7;23297:18;:41::i;:::-;23289:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23405:28;23415:4;23421:2;23425:7;23405:9;:28::i;:::-;23136:305;;;:::o;35351:256::-;35448:7;35484:23;35501:5;35484:16;:23::i;:::-;35476:5;:31;35468:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35573:12;:19;35586:5;35573:19;;;;;;;;;;;;;;;:26;35593:5;35573:26;;;;;;;;;;;;35566:33;;35351:256;;;;:::o;23512:151::-;23616:39;23633:4;23639:2;23643:7;23616:39;;;;;;;;;;;;:16;:39::i;:::-;23512:151;;;:::o;35873:233::-;35948:7;35984:30;:28;:30::i;:::-;35976:5;:38;35968:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36081:10;36092:5;36081:17;;;;;;;;:::i;:::-;;;;;;;;;;36074:24;;35873:233;;;:::o;20441:239::-;20513:7;20533:13;20549:7;:16;20557:7;20549:16;;;;;;;;;;;;;;;;;;;;;20533:32;;20601:1;20584:19;;:5;:19;;;;20576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20667:5;20660:12;;;20441:239;;;:::o;43478:54::-;;;;;;;;;;;;;;;;;:::o;20171:208::-;20243:7;20288:1;20271:19;;:5;:19;;;;20263:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20355:9;:16;20365:5;20355:16;;;;;;;;;;;;;;;;20348:23;;20171:208;;;:::o;20916:104::-;20972:13;21005:7;20998:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20916:104;:::o;22539:295::-;22654:12;:10;:12::i;:::-;22642:24;;:8;:24;;;;22634:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22754:8;22709:18;:32;22728:12;:10;:12::i;:::-;22709:32;;;;;;;;;;;;;;;:42;22742:8;22709:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22807:8;22778:48;;22793:12;:10;:12::i;:::-;22778:48;;;22817:8;22778:48;;;;;;:::i;:::-;;;;;;;;22539:295;;:::o;42765:25::-;;;;:::o;23734:285::-;23866:41;23885:12;:10;:12::i;:::-;23899:7;23866:18;:41::i;:::-;23858:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23972:39;23986:4;23992:2;23996:7;24005:5;23972:13;:39::i;:::-;23734:285;;;;:::o;42703:24::-;;;;:::o;21336:380::-;21410:13;21444:17;21452:8;21444:7;:17::i;:::-;21436:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21526:17;21546:10;:8;:10::i;:::-;21526:30;;21607:1;21593:3;21587:17;:21;:121;;;;;;;;;;;;;;;;;21652:3;21657:19;:8;:17;:19::i;:::-;21635:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21587:121;21567:141;;;21336:380;;;:::o;42734:24::-;;;;:::o;22905:164::-;23002:4;23026:18;:25;23045:5;23026:25;;;;;;;;;;;;;;;:35;23052:8;23026:35;;;;;;;;;;;;;;;;;;;;;;;;;23019:42;;22905:164;;;;:::o;44003:1245::-;44120:9;;44110:6;44094:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;44086:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44186:2;44176:6;:12;;:36;;;;;44210:2;44192:7;:14;:20;;44176:36;44168:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44279:15;;;;;;;;;;;:25;;;44305:10;44279:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44269:6;:47;;44261:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44382:7;:14;44372:6;:24;44364:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44469:9;;44462:6;:16;;;;:::i;:::-;44449:9;:29;;44441:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44524:9;44520:323;44539:7;:14;44537:1;:16;44520:323;;;44596:15;;;;;;;;;;;:23;;;44620:7;44628:1;44620:10;;;;;;;;:::i;:::-;;;;;;;;44596:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44582:49;;:10;:49;;;44574:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;44721:1;44686:19;:31;44706:7;44714:1;44706:10;;;;;;;;:::i;:::-;;;;;;;;44686:31;;;;;;;;;;;;:36;44683:148;;44767:15;44732:19;:31;44752:7;44760:1;44752:10;;;;;;;;:::i;:::-;;;;;;;;44732:31;;;;;;;;;;;;:50;;44724:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;44683:148;44555:3;;;;;:::i;:::-;;;;44520:323;;;;44867:9;44863:330;44883:6;44880:1;:9;44863:330;;;44910:21;:9;:19;:21::i;:::-;44946:17;44966:19;:9;:17;:19::i;:::-;44946:39;;45014:18;45022:9;45014:7;:18::i;:::-;45095:10;;45061:19;:31;45081:7;45089:1;45081:10;;;;;;;;:::i;:::-;;;;;;;;45061:31;;;;;;;;;;;:44;;;;45149:10;45139:42;;;45160:9;45170:7;45178:1;45170:10;;;;;;;;:::i;:::-;;;;;;;;45139:42;;;;;;;:::i;:::-;;;;;;;;44895:298;44891:3;;;;;:::i;:::-;;;;44863:330;;;;45213:27;45230:9;45213:16;:27::i;:::-;44003:1245;;:::o;19815:292::-;19917:4;19956:25;19941:40;;;:11;:40;;;;:105;;;;20013:33;19998:48;;;:11;:48;;;;19941:105;:158;;;;20063:36;20087:11;20063:23;:36::i;:::-;19941:158;19934:165;;19815:292;;;:::o;25486:127::-;25551:4;25603:1;25575:30;;:7;:16;25583:7;25575:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25568:37;;25486:127;;;:::o;16209:98::-;16262:7;16289:10;16282:17;;16209:98;:::o;29363:174::-;29465:2;29438:15;:24;29454:7;29438:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29521:7;29517:2;29483:46;;29492:23;29507:7;29492:14;:23::i;:::-;29483:46;;;;;;;;;;;;29363:174;;:::o;25780:348::-;25873:4;25898:16;25906:7;25898;:16::i;:::-;25890:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25974:13;25990:23;26005:7;25990:14;:23::i;:::-;25974:39;;26043:5;26032:16;;:7;:16;;;:51;;;;26076:7;26052:31;;:20;26064:7;26052:11;:20::i;:::-;:31;;;26032:51;:87;;;;26087:32;26104:5;26111:7;26087:16;:32::i;:::-;26032:87;26024:96;;;25780:348;;;;:::o;28701:544::-;28826:4;28799:31;;:23;28814:7;28799:14;:23::i;:::-;:31;;;28791:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28909:1;28895:16;;:2;:16;;;;28887:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28965:39;28986:4;28992:2;28996:7;28965:20;:39::i;:::-;29069:29;29086:1;29090:7;29069:8;:29::i;:::-;29130:1;29111:9;:15;29121:4;29111:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29159:1;29142:9;:13;29152:2;29142:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29190:2;29171:7;:16;29179:7;29171:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29229:7;29225:2;29210:27;;29219:4;29210:27;;;;;;;;;;;;28701:544;;;:::o;24901:272::-;25015:28;25025:4;25031:2;25035:7;25015:9;:28::i;:::-;25062:48;25085:4;25091:2;25095:7;25104:5;25062:22;:48::i;:::-;25054:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24901:272;;;;:::o;21171:94::-;21215:13;21248:9;21241:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21171:94;:::o;16781:723::-;16837:13;17067:1;17058:5;:10;17054:53;;;17085:10;;;;;;;;;;;;;;;;;;;;;17054:53;17117:12;17132:5;17117:20;;17148:14;17173:78;17188:1;17180:4;:9;17173:78;;17206:8;;;;;:::i;:::-;;;;17237:2;17229:10;;;;;:::i;:::-;;;17173:78;;;17261:19;17293:6;17283:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17261:39;;17311:154;17327:1;17318:5;:10;17311:154;;17355:1;17345:11;;;;;:::i;:::-;;;17422:2;17414:5;:10;;;;:::i;:::-;17401:2;:24;;;;:::i;:::-;17388:39;;17371:6;17378;17371:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17451:2;17442:11;;;;;:::i;:::-;;;17311:154;;;17489:6;17475:21;;;;;16781:723;;;;:::o;42046:127::-;42153:1;42135:7;:14;;;:19;;;;;;;;;;;42046:127;:::o;41924:114::-;41989:7;42016;:14;;;42009:21;;41924:114;;;:::o;45260:92::-;45319:25;45329:10;45340:3;45319:9;:25::i;:::-;45260:92;:::o;45364:652::-;45424:16;45451:3;45448:2;45443:4;:7;;;;:::i;:::-;:11;;;;:::i;:::-;45424:30;;45465:18;45494:3;45491:2;45486:4;:7;;;;:::i;:::-;:11;;;;:::i;:::-;45465:32;;45508:19;45537:3;45535:1;45530:4;:6;;;;:::i;:::-;:10;;;;:::i;:::-;45508:32;;45569:7;;;;;;;;;;;45561:25;;:35;45587:8;45561:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45615:7;;;;;;;;;;;45607:25;;:35;45633:8;45607:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45661:7;;;;;;;;;;;45653:25;;:35;45679:8;45653:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45707:7;;;;;;;;;;;45699:25;;:35;45725:8;45699:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45753:7;;;;;;;;;;;45745:25;;:35;45771:8;45745:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45799:7;;;;;;;;;;;45791:25;;:35;45817:8;45791:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45845:7;;;;;;;;;;;45837:25;;:35;45863:8;45837:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45891:3;;;;;;;;;;;45883:21;;:31;45905:8;45883:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45933:5;;;;;;;;;;;45925:23;;:35;45949:10;45925:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45979:6;;;;;;;;;;;45971:24;;:37;45996:11;45971:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45413:603;;;45364:652;:::o;1509:157::-;1594:4;1633:25;1618:40;;;:11;:40;;;;1611:47;;1509:157;;;:::o;36719:589::-;36863:45;36890:4;36896:2;36900:7;36863:26;:45::i;:::-;36941:1;36925:18;;:4;:18;;;36921:187;;;36960:40;36992:7;36960:31;:40::i;:::-;36921:187;;;37030:2;37022:10;;:4;:10;;;37018:90;;37049:47;37082:4;37088:7;37049:32;:47::i;:::-;37018:90;36921:187;37136:1;37122:16;;:2;:16;;;37118:183;;;37155:45;37192:7;37155:36;:45::i;:::-;37118:183;;;37228:4;37222:10;;:2;:10;;;37218:83;;37249:40;37277:2;37281:7;37249:27;:40::i;:::-;37218:83;37118:183;36719:589;;;:::o;30102:843::-;30223:4;30249:15;:2;:13;;;:15::i;:::-;30245:693;;;30301:2;30285:36;;;30322:12;:10;:12::i;:::-;30336:4;30342:7;30351:5;30285:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30281:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30548:1;30531:6;:13;:18;30527:341;;;30574:60;;;;;;;;;;:::i;:::-;;;;;;;;30527:341;30818:6;30812:13;30803:6;30799:2;30795:15;30788:38;30281:602;30418:45;;;30408:55;;;:6;:55;;;;30401:62;;;;;30245:693;30922:4;30915:11;;30102:843;;;;;;;:::o;26470:110::-;26546:26;26556:2;26560:7;26546:26;;;;;;;;;;;;:9;:26::i;:::-;26470:110;;:::o;31558:93::-;;;;:::o;38031:164::-;38135:10;:17;;;;38108:15;:24;38124:7;38108:24;;;;;;;;;;;:44;;;;38163:10;38179:7;38163:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38031:164;:::o;38822:988::-;39088:22;39138:1;39113:22;39130:4;39113:16;:22::i;:::-;:26;;;;:::i;:::-;39088:51;;39150:18;39171:17;:26;39189:7;39171:26;;;;;;;;;;;;39150:47;;39318:14;39304:10;:28;39300:328;;39349:19;39371:12;:18;39384:4;39371:18;;;;;;;;;;;;;;;:34;39390:14;39371:34;;;;;;;;;;;;39349:56;;39455:11;39422:12;:18;39435:4;39422:18;;;;;;;;;;;;;;;:30;39441:10;39422:30;;;;;;;;;;;:44;;;;39572:10;39539:17;:30;39557:11;39539:30;;;;;;;;;;;:43;;;;39334:294;39300:328;39724:17;:26;39742:7;39724:26;;;;;;;;;;;39717:33;;;39768:12;:18;39781:4;39768:18;;;;;;;;;;;;;;;:34;39787:14;39768:34;;;;;;;;;;;39761:41;;;38903:907;;38822:988;;:::o;40105:1079::-;40358:22;40403:1;40383:10;:17;;;;:21;;;;:::i;:::-;40358:46;;40415:18;40436:15;:24;40452:7;40436:24;;;;;;;;;;;;40415:45;;40787:19;40809:10;40820:14;40809:26;;;;;;;;:::i;:::-;;;;;;;;;;40787:48;;40873:11;40848:10;40859;40848:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40984:10;40953:15;:28;40969:11;40953:28;;;;;;;;;;;:41;;;;41125:15;:24;41141:7;41125:24;;;;;;;;;;;41118:31;;;41160:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40176:1008;;;40105:1079;:::o;37609:221::-;37694:14;37711:20;37728:2;37711:16;:20::i;:::-;37694:37;;37769:7;37742:12;:16;37755:2;37742:16;;;;;;;;;;;;;;;:24;37759:6;37742:24;;;;;;;;;;;:34;;;;37816:6;37787:17;:26;37805:7;37787:26;;;;;;;;;;;:35;;;;37683:147;37609:221;;:::o;8409:422::-;8469:4;8677:12;8788:7;8776:20;8768:28;;8822:1;8815:4;:8;8808:15;;;8409:422;;;:::o;26807:250::-;26903:18;26909:2;26913:7;26903:5;:18::i;:::-;26940:54;26971:1;26975:2;26979:7;26988:5;26940:22;:54::i;:::-;26932:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26807:250;;;:::o;27393:382::-;27487:1;27473:16;;:2;:16;;;;27465:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27546:16;27554:7;27546;:16::i;:::-;27545:17;27537:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27608:45;27637:1;27641:2;27645:7;27608:20;:45::i;:::-;27683:1;27666:9;:13;27676:2;27666:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27714:2;27695:7;:16;27703:7;27695:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27759:7;27755:2;27734:33;;27751:1;27734:33;;;;;;;;;;;;27393:382;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;404:79;;:::i;:::-;350:2;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:2;;;1025:79;;:::i;:::-;994:2;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1220:87;;;;:::o;1313:143::-;1370:5;1401:6;1395:13;1386:22;;1417:33;1444:5;1417:33;:::i;:::-;1376:80;;;;:::o;1479:370::-;1550:5;1599:3;1592:4;1584:6;1580:17;1576:27;1566:2;;1607:79;;:::i;:::-;1566:2;1724:6;1711:20;1749:94;1839:3;1831:6;1824:4;1816:6;1812:17;1749:94;:::i;:::-;1740:103;;1556:293;;;;;:::o;1855:133::-;1898:5;1936:6;1923:20;1914:29;;1952:30;1976:5;1952:30;:::i;:::-;1904:84;;;;:::o;1994:137::-;2039:5;2077:6;2064:20;2055:29;;2093:32;2119:5;2093:32;:::i;:::-;2045:86;;;;:::o;2137:141::-;2193:5;2224:6;2218:13;2209:22;;2240:32;2266:5;2240:32;:::i;:::-;2199:79;;;;:::o;2297:338::-;2352:5;2401:3;2394:4;2386:6;2382:17;2378:27;2368:2;;2409:79;;:::i;:::-;2368:2;2526:6;2513:20;2551:78;2625:3;2617:6;2610:4;2602:6;2598:17;2551:78;:::i;:::-;2542:87;;2358:277;;;;;:::o;2641:139::-;2687:5;2725:6;2712:20;2703:29;;2741:33;2768:5;2741:33;:::i;:::-;2693:87;;;;:::o;2786:143::-;2843:5;2874:6;2868:13;2859:22;;2890:33;2917:5;2890:33;:::i;:::-;2849:80;;;;:::o;2935:329::-;2994:6;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;3049:79;;:::i;:::-;3011:2;3169:1;3194:53;3239:7;3230:6;3219:9;3215:22;3194:53;:::i;:::-;3184:63;;3140:117;3001:263;;;;:::o;3270:351::-;3340:6;3389:2;3377:9;3368:7;3364:23;3360:32;3357:2;;;3395:79;;:::i;:::-;3357:2;3515:1;3540:64;3596:7;3587:6;3576:9;3572:22;3540:64;:::i;:::-;3530:74;;3486:128;3347:274;;;;:::o;3627:474::-;3695:6;3703;3752:2;3740:9;3731:7;3727:23;3723:32;3720:2;;;3758:79;;:::i;:::-;3720:2;3878:1;3903:53;3948:7;3939:6;3928:9;3924:22;3903:53;:::i;:::-;3893:63;;3849:117;4005:2;4031:53;4076:7;4067:6;4056:9;4052:22;4031:53;:::i;:::-;4021:63;;3976:118;3710:391;;;;;:::o;4107:619::-;4184:6;4192;4200;4249:2;4237:9;4228:7;4224:23;4220:32;4217:2;;;4255:79;;:::i;:::-;4217:2;4375:1;4400:53;4445:7;4436:6;4425:9;4421:22;4400:53;:::i;:::-;4390:63;;4346:117;4502:2;4528:53;4573:7;4564:6;4553:9;4549:22;4528:53;:::i;:::-;4518:63;;4473:118;4630:2;4656:53;4701:7;4692:6;4681:9;4677:22;4656:53;:::i;:::-;4646:63;;4601:118;4207:519;;;;;:::o;4732:943::-;4827:6;4835;4843;4851;4900:3;4888:9;4879:7;4875:23;4871:33;4868:2;;;4907:79;;:::i;:::-;4868:2;5027:1;5052:53;5097:7;5088:6;5077:9;5073:22;5052:53;:::i;:::-;5042:63;;4998:117;5154:2;5180:53;5225:7;5216:6;5205:9;5201:22;5180:53;:::i;:::-;5170:63;;5125:118;5282:2;5308:53;5353:7;5344:6;5333:9;5329:22;5308:53;:::i;:::-;5298:63;;5253:118;5438:2;5427:9;5423:18;5410:32;5469:18;5461:6;5458:30;5455:2;;;5491:79;;:::i;:::-;5455:2;5596:62;5650:7;5641:6;5630:9;5626:22;5596:62;:::i;:::-;5586:72;;5381:287;4858:817;;;;;;;:::o;5681:468::-;5746:6;5754;5803:2;5791:9;5782:7;5778:23;5774:32;5771:2;;;5809:79;;:::i;:::-;5771:2;5929:1;5954:53;5999:7;5990:6;5979:9;5975:22;5954:53;:::i;:::-;5944:63;;5900:117;6056:2;6082:50;6124:7;6115:6;6104:9;6100:22;6082:50;:::i;:::-;6072:60;;6027:115;5761:388;;;;;:::o;6155:474::-;6223:6;6231;6280:2;6268:9;6259:7;6255:23;6251:32;6248:2;;;6286:79;;:::i;:::-;6248:2;6406:1;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6377:117;6533:2;6559:53;6604:7;6595:6;6584:9;6580:22;6559:53;:::i;:::-;6549:63;;6504:118;6238:391;;;;;:::o;6635:327::-;6693:6;6742:2;6730:9;6721:7;6717:23;6713:32;6710:2;;;6748:79;;:::i;:::-;6710:2;6868:1;6893:52;6937:7;6928:6;6917:9;6913:22;6893:52;:::i;:::-;6883:62;;6839:116;6700:262;;;;:::o;6968:349::-;7037:6;7086:2;7074:9;7065:7;7061:23;7057:32;7054:2;;;7092:79;;:::i;:::-;7054:2;7212:1;7237:63;7292:7;7283:6;7272:9;7268:22;7237:63;:::i;:::-;7227:73;;7183:127;7044:273;;;;:::o;7323:329::-;7382:6;7431:2;7419:9;7410:7;7406:23;7402:32;7399:2;;;7437:79;;:::i;:::-;7399:2;7557:1;7582:53;7627:7;7618:6;7607:9;7603:22;7582:53;:::i;:::-;7572:63;;7528:117;7389:263;;;;:::o;7658:351::-;7728:6;7777:2;7765:9;7756:7;7752:23;7748:32;7745:2;;;7783:79;;:::i;:::-;7745:2;7903:1;7928:64;7984:7;7975:6;7964:9;7960:22;7928:64;:::i;:::-;7918:74;;7874:128;7735:274;;;;:::o;8015:684::-;8108:6;8116;8165:2;8153:9;8144:7;8140:23;8136:32;8133:2;;;8171:79;;:::i;:::-;8133:2;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8446:2;8435:9;8431:18;8418:32;8477:18;8469:6;8466:30;8463:2;;;8499:79;;:::i;:::-;8463:2;8604:78;8674:7;8665:6;8654:9;8650:22;8604:78;:::i;:::-;8594:88;;8389:303;8123:576;;;;;:::o;8705:118::-;8792:24;8810:5;8792:24;:::i;:::-;8787:3;8780:37;8770:53;;:::o;8829:109::-;8910:21;8925:5;8910:21;:::i;:::-;8905:3;8898:34;8888:50;;:::o;8944:360::-;9030:3;9058:38;9090:5;9058:38;:::i;:::-;9112:70;9175:6;9170:3;9112:70;:::i;:::-;9105:77;;9191:52;9236:6;9231:3;9224:4;9217:5;9213:16;9191:52;:::i;:::-;9268:29;9290:6;9268:29;:::i;:::-;9263:3;9259:39;9252:46;;9034:270;;;;;:::o;9310:364::-;9398:3;9426:39;9459:5;9426:39;:::i;:::-;9481:71;9545:6;9540:3;9481:71;:::i;:::-;9474:78;;9561:52;9606:6;9601:3;9594:4;9587:5;9583:16;9561:52;:::i;:::-;9638:29;9660:6;9638:29;:::i;:::-;9633:3;9629:39;9622:46;;9402:272;;;;;:::o;9680:377::-;9786:3;9814:39;9847:5;9814:39;:::i;:::-;9869:89;9951:6;9946:3;9869:89;:::i;:::-;9862:96;;9967:52;10012:6;10007:3;10000:4;9993:5;9989:16;9967:52;:::i;:::-;10044:6;10039:3;10035:16;10028:23;;9790:267;;;;;:::o;10063:366::-;10205:3;10226:67;10290:2;10285:3;10226:67;:::i;:::-;10219:74;;10302:93;10391:3;10302:93;:::i;:::-;10420:2;10415:3;10411:12;10404:19;;10209:220;;;:::o;10435:366::-;10577:3;10598:67;10662:2;10657:3;10598:67;:::i;:::-;10591:74;;10674:93;10763:3;10674:93;:::i;:::-;10792:2;10787:3;10783:12;10776:19;;10581:220;;;:::o;10807:366::-;10949:3;10970:67;11034:2;11029:3;10970:67;:::i;:::-;10963:74;;11046:93;11135:3;11046:93;:::i;:::-;11164:2;11159:3;11155:12;11148:19;;10953:220;;;:::o;11179:366::-;11321:3;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11418:93;11507:3;11418:93;:::i;:::-;11536:2;11531:3;11527:12;11520:19;;11325:220;;;:::o;11551:366::-;11693:3;11714:67;11778:2;11773:3;11714:67;:::i;:::-;11707:74;;11790:93;11879:3;11790:93;:::i;:::-;11908:2;11903:3;11899:12;11892:19;;11697:220;;;:::o;11923:366::-;12065:3;12086:67;12150:2;12145:3;12086:67;:::i;:::-;12079:74;;12162:93;12251:3;12162:93;:::i;:::-;12280:2;12275:3;12271:12;12264:19;;12069:220;;;:::o;12295:366::-;12437:3;12458:67;12522:2;12517:3;12458:67;:::i;:::-;12451:74;;12534:93;12623:3;12534:93;:::i;:::-;12652:2;12647:3;12643:12;12636:19;;12441:220;;;:::o;12667:366::-;12809:3;12830:67;12894:2;12889:3;12830:67;:::i;:::-;12823:74;;12906:93;12995:3;12906:93;:::i;:::-;13024:2;13019:3;13015:12;13008:19;;12813:220;;;:::o;13039:366::-;13181:3;13202:67;13266:2;13261:3;13202:67;:::i;:::-;13195:74;;13278:93;13367:3;13278:93;:::i;:::-;13396:2;13391:3;13387:12;13380:19;;13185:220;;;:::o;13411:366::-;13553:3;13574:67;13638:2;13633:3;13574:67;:::i;:::-;13567:74;;13650:93;13739:3;13650:93;:::i;:::-;13768:2;13763:3;13759:12;13752:19;;13557:220;;;:::o;13783:366::-;13925:3;13946:67;14010:2;14005:3;13946:67;:::i;:::-;13939:74;;14022:93;14111:3;14022:93;:::i;:::-;14140:2;14135:3;14131:12;14124:19;;13929:220;;;:::o;14155:366::-;14297:3;14318:67;14382:2;14377:3;14318:67;:::i;:::-;14311:74;;14394:93;14483:3;14394:93;:::i;:::-;14512:2;14507:3;14503:12;14496:19;;14301:220;;;:::o;14527:366::-;14669:3;14690:67;14754:2;14749:3;14690:67;:::i;:::-;14683:74;;14766:93;14855:3;14766:93;:::i;:::-;14884:2;14879:3;14875:12;14868:19;;14673:220;;;:::o;14899:366::-;15041:3;15062:67;15126:2;15121:3;15062:67;:::i;:::-;15055:74;;15138:93;15227:3;15138:93;:::i;:::-;15256:2;15251:3;15247:12;15240:19;;15045:220;;;:::o;15271:366::-;15413:3;15434:67;15498:2;15493:3;15434:67;:::i;:::-;15427:74;;15510:93;15599:3;15510:93;:::i;:::-;15628:2;15623:3;15619:12;15612:19;;15417:220;;;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15789:220;;;:::o;16015:400::-;16175:3;16196:84;16278:1;16273:3;16196:84;:::i;:::-;16189:91;;16289:93;16378:3;16289:93;:::i;:::-;16407:1;16402:3;16398:11;16391:18;;16179:236;;;:::o;16421:366::-;16563:3;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16660:93;16749:3;16660:93;:::i;:::-;16778:2;16773:3;16769:12;16762:19;;16567:220;;;:::o;16793:366::-;16935:3;16956:67;17020:2;17015:3;16956:67;:::i;:::-;16949:74;;17032:93;17121:3;17032:93;:::i;:::-;17150:2;17145:3;17141:12;17134:19;;16939:220;;;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17311:220;;;:::o;17537:366::-;17679:3;17700:67;17764:2;17759:3;17700:67;:::i;:::-;17693:74;;17776:93;17865:3;17776:93;:::i;:::-;17894:2;17889:3;17885:12;17878:19;;17683:220;;;:::o;17909:366::-;18051:3;18072:67;18136:2;18131:3;18072:67;:::i;:::-;18065:74;;18148:93;18237:3;18148:93;:::i;:::-;18266:2;18261:3;18257:12;18250:19;;18055:220;;;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18427:220;;;:::o;18653:366::-;18795:3;18816:67;18880:2;18875:3;18816:67;:::i;:::-;18809:74;;18892:93;18981:3;18892:93;:::i;:::-;19010:2;19005:3;19001:12;18994:19;;18799:220;;;:::o;19025:118::-;19112:24;19130:5;19112:24;:::i;:::-;19107:3;19100:37;19090:53;;:::o;19149:701::-;19430:3;19452:95;19543:3;19534:6;19452:95;:::i;:::-;19445:102;;19564:95;19655:3;19646:6;19564:95;:::i;:::-;19557:102;;19676:148;19820:3;19676:148;:::i;:::-;19669:155;;19841:3;19834:10;;19434:416;;;;;:::o;19856:222::-;19949:4;19987:2;19976:9;19972:18;19964:26;;20000:71;20068:1;20057:9;20053:17;20044:6;20000:71;:::i;:::-;19954:124;;;;:::o;20084:640::-;20279:4;20317:3;20306:9;20302:19;20294:27;;20331:71;20399:1;20388:9;20384:17;20375:6;20331:71;:::i;:::-;20412:72;20480:2;20469:9;20465:18;20456:6;20412:72;:::i;:::-;20494;20562:2;20551:9;20547:18;20538:6;20494:72;:::i;:::-;20613:9;20607:4;20603:20;20598:2;20587:9;20583:18;20576:48;20641:76;20712:4;20703:6;20641:76;:::i;:::-;20633:84;;20284:440;;;;;;;:::o;20730:210::-;20817:4;20855:2;20844:9;20840:18;20832:26;;20868:65;20930:1;20919:9;20915:17;20906:6;20868:65;:::i;:::-;20822:118;;;;:::o;20946:313::-;21059:4;21097:2;21086:9;21082:18;21074:26;;21146:9;21140:4;21136:20;21132:1;21121:9;21117:17;21110:47;21174:78;21247:4;21238:6;21174:78;:::i;:::-;21166:86;;21064:195;;;;:::o;21265:419::-;21431:4;21469:2;21458:9;21454:18;21446:26;;21518:9;21512:4;21508:20;21504:1;21493:9;21489:17;21482:47;21546:131;21672:4;21546:131;:::i;:::-;21538:139;;21436:248;;;:::o;21690:419::-;21856:4;21894:2;21883:9;21879:18;21871:26;;21943:9;21937:4;21933:20;21929:1;21918:9;21914:17;21907:47;21971:131;22097:4;21971:131;:::i;:::-;21963:139;;21861:248;;;:::o;22115:419::-;22281:4;22319:2;22308:9;22304:18;22296:26;;22368:9;22362:4;22358:20;22354:1;22343:9;22339:17;22332:47;22396:131;22522:4;22396:131;:::i;:::-;22388:139;;22286:248;;;:::o;22540:419::-;22706:4;22744:2;22733:9;22729:18;22721:26;;22793:9;22787:4;22783:20;22779:1;22768:9;22764:17;22757:47;22821:131;22947:4;22821:131;:::i;:::-;22813:139;;22711:248;;;:::o;22965:419::-;23131:4;23169:2;23158:9;23154:18;23146:26;;23218:9;23212:4;23208:20;23204:1;23193:9;23189:17;23182:47;23246:131;23372:4;23246:131;:::i;:::-;23238:139;;23136:248;;;:::o;23390:419::-;23556:4;23594:2;23583:9;23579:18;23571:26;;23643:9;23637:4;23633:20;23629:1;23618:9;23614:17;23607:47;23671:131;23797:4;23671:131;:::i;:::-;23663:139;;23561:248;;;:::o;23815:419::-;23981:4;24019:2;24008:9;24004:18;23996:26;;24068:9;24062:4;24058:20;24054:1;24043:9;24039:17;24032:47;24096:131;24222:4;24096:131;:::i;:::-;24088:139;;23986:248;;;:::o;24240:419::-;24406:4;24444:2;24433:9;24429:18;24421:26;;24493:9;24487:4;24483:20;24479:1;24468:9;24464:17;24457:47;24521:131;24647:4;24521:131;:::i;:::-;24513:139;;24411:248;;;:::o;24665:419::-;24831:4;24869:2;24858:9;24854:18;24846:26;;24918:9;24912:4;24908:20;24904:1;24893:9;24889:17;24882:47;24946:131;25072:4;24946:131;:::i;:::-;24938:139;;24836:248;;;:::o;25090:419::-;25256:4;25294:2;25283:9;25279:18;25271:26;;25343:9;25337:4;25333:20;25329:1;25318:9;25314:17;25307:47;25371:131;25497:4;25371:131;:::i;:::-;25363:139;;25261:248;;;:::o;25515:419::-;25681:4;25719:2;25708:9;25704:18;25696:26;;25768:9;25762:4;25758:20;25754:1;25743:9;25739:17;25732:47;25796:131;25922:4;25796:131;:::i;:::-;25788:139;;25686:248;;;:::o;25940:419::-;26106:4;26144:2;26133:9;26129:18;26121:26;;26193:9;26187:4;26183:20;26179:1;26168:9;26164:17;26157:47;26221:131;26347:4;26221:131;:::i;:::-;26213:139;;26111:248;;;:::o;26365:419::-;26531:4;26569:2;26558:9;26554:18;26546:26;;26618:9;26612:4;26608:20;26604:1;26593:9;26589:17;26582:47;26646:131;26772:4;26646:131;:::i;:::-;26638:139;;26536:248;;;:::o;26790:419::-;26956:4;26994:2;26983:9;26979:18;26971:26;;27043:9;27037:4;27033:20;27029:1;27018:9;27014:17;27007:47;27071:131;27197:4;27071:131;:::i;:::-;27063:139;;26961:248;;;:::o;27215:419::-;27381:4;27419:2;27408:9;27404:18;27396:26;;27468:9;27462:4;27458:20;27454:1;27443:9;27439:17;27432:47;27496:131;27622:4;27496:131;:::i;:::-;27488:139;;27386:248;;;:::o;27640:419::-;27806:4;27844:2;27833:9;27829:18;27821:26;;27893:9;27887:4;27883:20;27879:1;27868:9;27864:17;27857:47;27921:131;28047:4;27921:131;:::i;:::-;27913:139;;27811:248;;;:::o;28065:419::-;28231:4;28269:2;28258:9;28254:18;28246:26;;28318:9;28312:4;28308:20;28304:1;28293:9;28289:17;28282:47;28346:131;28472:4;28346:131;:::i;:::-;28338:139;;28236:248;;;:::o;28490:419::-;28656:4;28694:2;28683:9;28679:18;28671:26;;28743:9;28737:4;28733:20;28729:1;28718:9;28714:17;28707:47;28771:131;28897:4;28771:131;:::i;:::-;28763:139;;28661:248;;;:::o;28915:419::-;29081:4;29119:2;29108:9;29104:18;29096:26;;29168:9;29162:4;29158:20;29154:1;29143:9;29139:17;29132:47;29196:131;29322:4;29196:131;:::i;:::-;29188:139;;29086:248;;;:::o;29340:419::-;29506:4;29544:2;29533:9;29529:18;29521:26;;29593:9;29587:4;29583:20;29579:1;29568:9;29564:17;29557:47;29621:131;29747:4;29621:131;:::i;:::-;29613:139;;29511:248;;;:::o;29765:419::-;29931:4;29969:2;29958:9;29954:18;29946:26;;30018:9;30012:4;30008:20;30004:1;29993:9;29989:17;29982:47;30046:131;30172:4;30046:131;:::i;:::-;30038:139;;29936:248;;;:::o;30190:419::-;30356:4;30394:2;30383:9;30379:18;30371:26;;30443:9;30437:4;30433:20;30429:1;30418:9;30414:17;30407:47;30471:131;30597:4;30471:131;:::i;:::-;30463:139;;30361:248;;;:::o;30615:419::-;30781:4;30819:2;30808:9;30804:18;30796:26;;30868:9;30862:4;30858:20;30854:1;30843:9;30839:17;30832:47;30896:131;31022:4;30896:131;:::i;:::-;30888:139;;30786:248;;;:::o;31040:222::-;31133:4;31171:2;31160:9;31156:18;31148:26;;31184:71;31252:1;31241:9;31237:17;31228:6;31184:71;:::i;:::-;31138:124;;;;:::o;31268:332::-;31389:4;31427:2;31416:9;31412:18;31404:26;;31440:71;31508:1;31497:9;31493:17;31484:6;31440:71;:::i;:::-;31521:72;31589:2;31578:9;31574:18;31565:6;31521:72;:::i;:::-;31394:206;;;;;:::o;31606:129::-;31640:6;31667:20;;:::i;:::-;31657:30;;31696:33;31724:4;31716:6;31696:33;:::i;:::-;31647:88;;;:::o;31741:75::-;31774:6;31807:2;31801:9;31791:19;;31781:35;:::o;31822:311::-;31899:4;31989:18;31981:6;31978:30;31975:2;;;32011:18;;:::i;:::-;31975:2;32061:4;32053:6;32049:17;32041:25;;32121:4;32115;32111:15;32103:23;;31904:229;;;:::o;32139:307::-;32200:4;32290:18;32282:6;32279:30;32276:2;;;32312:18;;:::i;:::-;32276:2;32350:29;32372:6;32350:29;:::i;:::-;32342:37;;32434:4;32428;32424:15;32416:23;;32205:241;;;:::o;32452:98::-;32503:6;32537:5;32531:12;32521:22;;32510:40;;;:::o;32556:99::-;32608:6;32642:5;32636:12;32626:22;;32615:40;;;:::o;32661:168::-;32744:11;32778:6;32773:3;32766:19;32818:4;32813:3;32809:14;32794:29;;32756:73;;;;:::o;32835:169::-;32919:11;32953:6;32948:3;32941:19;32993:4;32988:3;32984:14;32969:29;;32931:73;;;;:::o;33010:148::-;33112:11;33149:3;33134:18;;33124:34;;;;:::o;33164:305::-;33204:3;33223:20;33241:1;33223:20;:::i;:::-;33218:25;;33257:20;33275:1;33257:20;:::i;:::-;33252:25;;33411:1;33343:66;33339:74;33336:1;33333:81;33330:2;;;33417:18;;:::i;:::-;33330:2;33461:1;33458;33454:9;33447:16;;33208:261;;;;:::o;33475:185::-;33515:1;33532:20;33550:1;33532:20;:::i;:::-;33527:25;;33566:20;33584:1;33566:20;:::i;:::-;33561:25;;33605:1;33595:2;;33610:18;;:::i;:::-;33595:2;33652:1;33649;33645:9;33640:14;;33517:143;;;;:::o;33666:348::-;33706:7;33729:20;33747:1;33729:20;:::i;:::-;33724:25;;33763:20;33781:1;33763:20;:::i;:::-;33758:25;;33951:1;33883:66;33879:74;33876:1;33873:81;33868:1;33861:9;33854:17;33850:105;33847:2;;;33958:18;;:::i;:::-;33847:2;34006:1;34003;33999:9;33988:20;;33714:300;;;;:::o;34020:191::-;34060:4;34080:20;34098:1;34080:20;:::i;:::-;34075:25;;34114:20;34132:1;34114:20;:::i;:::-;34109:25;;34153:1;34150;34147:8;34144:2;;;34158:18;;:::i;:::-;34144:2;34203:1;34200;34196:9;34188:17;;34065:146;;;;:::o;34217:96::-;34254:7;34283:24;34301:5;34283:24;:::i;:::-;34272:35;;34262:51;;;:::o;34319:90::-;34353:7;34396:5;34389:13;34382:21;34371:32;;34361:48;;;:::o;34415:149::-;34451:7;34491:66;34484:5;34480:78;34469:89;;34459:105;;;:::o;34570:126::-;34607:7;34647:42;34640:5;34636:54;34625:65;;34615:81;;;:::o;34702:77::-;34739:7;34768:5;34757:16;;34747:32;;;:::o;34785:154::-;34869:6;34864:3;34859;34846:30;34931:1;34922:6;34917:3;34913:16;34906:27;34836:103;;;:::o;34945:307::-;35013:1;35023:113;35037:6;35034:1;35031:13;35023:113;;;35122:1;35117:3;35113:11;35107:18;35103:1;35098:3;35094:11;35087:39;35059:2;35056:1;35052:10;35047:15;;35023:113;;;35154:6;35151:1;35148:13;35145:2;;;35234:1;35225:6;35220:3;35216:16;35209:27;35145:2;34994:258;;;;:::o;35258:320::-;35302:6;35339:1;35333:4;35329:12;35319:22;;35386:1;35380:4;35376:12;35407:18;35397:2;;35463:4;35455:6;35451:17;35441:27;;35397:2;35525;35517:6;35514:14;35494:18;35491:38;35488:2;;;35544:18;;:::i;:::-;35488:2;35309:269;;;;:::o;35584:281::-;35667:27;35689:4;35667:27;:::i;:::-;35659:6;35655:40;35797:6;35785:10;35782:22;35761:18;35749:10;35746:34;35743:62;35740:2;;;35808:18;;:::i;:::-;35740:2;35848:10;35844:2;35837:22;35627:238;;;:::o;35871:233::-;35910:3;35933:24;35951:5;35933:24;:::i;:::-;35924:33;;35979:66;35972:5;35969:77;35966:2;;;36049:18;;:::i;:::-;35966:2;36096:1;36089:5;36085:13;36078:20;;35914:190;;;:::o;36110:176::-;36142:1;36159:20;36177:1;36159:20;:::i;:::-;36154:25;;36193:20;36211:1;36193:20;:::i;:::-;36188:25;;36232:1;36222:2;;36237:18;;:::i;:::-;36222:2;36278:1;36275;36271:9;36266:14;;36144:142;;;;:::o;36292:180::-;36340:77;36337:1;36330:88;36437:4;36434:1;36427:15;36461:4;36458:1;36451:15;36478:180;36526:77;36523:1;36516:88;36623:4;36620:1;36613:15;36647:4;36644:1;36637:15;36664:180;36712:77;36709:1;36702:88;36809:4;36806:1;36799:15;36833:4;36830:1;36823:15;36850:180;36898:77;36895:1;36888:88;36995:4;36992:1;36985:15;37019:4;37016:1;37009:15;37036:180;37084:77;37081:1;37074:88;37181:4;37178:1;37171:15;37205:4;37202:1;37195:15;37222:180;37270:77;37267:1;37260:88;37367:4;37364:1;37357:15;37391:4;37388:1;37381:15;37408:117;37517:1;37514;37507:12;37531:117;37640:1;37637;37630:12;37654:117;37763:1;37760;37753:12;37777:117;37886:1;37883;37876:12;37900:117;38009:1;38006;37999:12;38023:102;38064:6;38115:2;38111:7;38106:2;38099:5;38095:14;38091:28;38081:38;;38071:54;;;:::o;38131:230::-;38271:34;38267:1;38259:6;38255:14;38248:58;38340:13;38335:2;38327:6;38323:15;38316:38;38237:124;:::o;38367:237::-;38507:34;38503:1;38495:6;38491:14;38484:58;38576:20;38571:2;38563:6;38559:15;38552:45;38473:131;:::o;38610:178::-;38750:30;38746:1;38738:6;38734:14;38727:54;38716:72;:::o;38794:220::-;38934:34;38930:1;38922:6;38918:14;38911:58;39003:3;38998:2;38990:6;38986:15;38979:28;38900:114;:::o;39020:174::-;39160:26;39156:1;39148:6;39144:14;39137:50;39126:68;:::o;39200:180::-;39340:32;39336:1;39328:6;39324:14;39317:56;39306:74;:::o;39386:223::-;39526:34;39522:1;39514:6;39510:14;39503:58;39595:6;39590:2;39582:6;39578:15;39571:31;39492:117;:::o;39615:175::-;39755:27;39751:1;39743:6;39739:14;39732:51;39721:69;:::o;39796:231::-;39936:34;39932:1;39924:6;39920:14;39913:58;40005:14;40000:2;39992:6;39988:15;39981:39;39902:125;:::o;40033:221::-;40173:34;40169:1;40161:6;40157:14;40150:58;40242:4;40237:2;40229:6;40225:15;40218:29;40139:115;:::o;40260:243::-;40400:34;40396:1;40388:6;40384:14;40377:58;40469:26;40464:2;40456:6;40452:15;40445:51;40366:137;:::o;40509:231::-;40649:34;40645:1;40637:6;40633:14;40626:58;40718:14;40713:2;40705:6;40701:15;40694:39;40615:125;:::o;40746:229::-;40886:34;40882:1;40874:6;40870:14;40863:58;40955:12;40950:2;40942:6;40938:15;40931:37;40852:123;:::o;40981:228::-;41121:34;41117:1;41109:6;41105:14;41098:58;41190:11;41185:2;41177:6;41173:15;41166:36;41087:122;:::o;41215:182::-;41355:34;41351:1;41343:6;41339:14;41332:58;41321:76;:::o;41403:231::-;41543:34;41539:1;41531:6;41527:14;41520:58;41612:14;41607:2;41599:6;41595:15;41588:39;41509:125;:::o;41640:155::-;41780:7;41776:1;41768:6;41764:14;41757:31;41746:49;:::o;41801:228::-;41941:34;41937:1;41929:6;41925:14;41918:58;42010:11;42005:2;41997:6;41993:15;41986:36;41907:122;:::o;42035:234::-;42175:34;42171:1;42163:6;42159:14;42152:58;42244:17;42239:2;42231:6;42227:15;42220:42;42141:128;:::o;42275:220::-;42415:34;42411:1;42403:6;42399:14;42392:58;42484:3;42479:2;42471:6;42467:15;42460:28;42381:114;:::o;42501:220::-;42641:34;42637:1;42629:6;42625:14;42618:58;42710:3;42705:2;42697:6;42693:15;42686:28;42607:114;:::o;42727:168::-;42867:20;42863:1;42855:6;42851:14;42844:44;42833:62;:::o;42901:236::-;43041:34;43037:1;43029:6;43025:14;43018:58;43110:19;43105:2;43097:6;43093:15;43086:44;43007:130;:::o;43143:231::-;43283:34;43279:1;43271:6;43267:14;43260:58;43352:14;43347:2;43339:6;43335:15;43328:39;43249:125;:::o;43380:122::-;43453:24;43471:5;43453:24;:::i;:::-;43446:5;43443:35;43433:2;;43492:1;43489;43482:12;43433:2;43423:79;:::o;43508:116::-;43578:21;43593:5;43578:21;:::i;:::-;43571:5;43568:32;43558:2;;43614:1;43611;43604:12;43558:2;43548:76;:::o;43630:120::-;43702:23;43719:5;43702:23;:::i;:::-;43695:5;43692:34;43682:2;;43740:1;43737;43730:12;43682:2;43672:78;:::o;43756:122::-;43829:24;43847:5;43829:24;:::i;:::-;43822:5;43819:35;43809:2;;43868:1;43865;43858:12;43809:2;43799:79;:::o

Swarm Source

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