ETH Price: $3,061.99 (+1.25%)
Gas: 3 Gwei

Token

Lil Hustlaz (HUSL)
 

Overview

Max Total Supply

1,724 HUSL

Holders

300

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 HUSL
0xdcda62083d7996bc4587e1a5522395824803d6ed
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

LilHustlaz is a collection of unique avatars inspired by hip hop icons. By owning one you get access to exclusive utility (including IRL Jewelry) and benefits along with 100% creative and commercial rights. Designed so that you can flex both in and out of the metaverse.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LilHustlaz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;

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

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

pragma solidity >=0.7.0 <0.9.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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


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

pragma solidity >=0.7.0 <0.9.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;

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

pragma solidity >=0.7.0 <0.9.0;

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity >=0.7.0 <0.9.0;

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

pragma solidity >=0.7.0 <0.9.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;

interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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


pragma solidity >=0.7.0 <0.9.0;


contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

pragma solidity >=0.7.0 <0.9.0;

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

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

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

pragma solidity >=0.7.0 <0.9.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;

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

// File: LilHustlaz.sol

pragma solidity ^0.8.0;


contract LilHustlaz is ERC721Enumerable, Ownable {

    using Strings for uint256;


    // sets variables in the contract
    uint256 public maxPerMint = 10;
    uint256 public constant MAX_HUSL = 10000;
    uint256 public price = 70000000000000000; //0.07 Ether
    string baseTokenURI;
    string baseTokenExtentsion = ".json";
    bool public saleOpen = false;
    uint256 ownersCut = 0;
    uint256 _tokenId = 150;

    event LilHustlazMinted(uint256 totalMinted);
    event TokenUriSet(string _uri);
    event PriceChanged(address _who, uint256 _price);
    event SaleStateFlip(bool _open);
    event FundsWithdrawn(address _who, uint256 _amount);

    // sets token Uri, winds up _tokenId to 100
    constructor(string memory baseURI) ERC721("Lil Hustlaz", "HUSL") {
        setBaseURI(baseURI);

    }

    //Get token Ids of all tokens owned by _owner
    function walletOfOwner(address _owner) public view returns (uint256[] memory) {

        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    // changes the token uri
    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
        emit TokenUriSet(baseTokenURI);
    }


    // changes price of NFT
    function setPrice(uint256 _newPrice) external onlyOwner {
        price = _newPrice;
        emit PriceChanged(msg.sender, price);
    }

    //Close sale if open, open sale if closed
    function flipSaleState() external onlyOwner {
        saleOpen = !saleOpen;
        emit SaleStateFlip(saleOpen);
    }

    // withdraws funds from the contract
    function withdrawAll() external onlyOwner {
        uint256 amount = address(this).balance;
        payable(msg.sender).transfer(amount);
        emit FundsWithdrawn(msg.sender, amount);
    }

    //mint LilHustlaz
    function mintLilHustlaz(uint256 _count) external payable {
        require(totalSupply() + _count <= MAX_HUSL, "Exceeds maximum supply of Lil Hustlaz");
        address user = msg.sender;

        if (msg.sender != owner()) {
            require(saleOpen , "Sale is not open yet");
            require(msg.value >= price * _count, "Ether sent with this transaction is not correct");
            require(_count > 0 && _count <= maxPerMint, "Minimum 1 & Maximum 7 Lil Hustlaz can be minted per transaction");
            require(_count + walletOfOwner(msg.sender).length <= 100, "Can only have 100");

            for (uint256 i = 0; i < _count; i++) {
                _mint(user);
            }
        }
    }

    // function that handles the tokenId increment and mints the token (201-10000)
    function _mint(address _to) private {
        _tokenId++;
        _safeMint(_to, _tokenId);
        emit LilHustlazMinted(_tokenId);
    }

    // allows only owner to mint tokens, and sends to designated address (1-200)
    function _ownerMint(address _to) public onlyOwner {
        ownersCut++;
        require(ownersCut < 151);
        uint256 tokenId = ownersCut;
        _safeMint(_to, tokenId);
        emit LilHustlazMinted(tokenId);
    }

    // allows owner to mint many to an array of addresses (1-200)
    function _ownerMintMany(address[] memory people, uint256 howMany) public onlyOwner {
        require(people.length == howMany, "unequal data input");
        require(howMany <= 20, "20 is the max amount");
        for (uint256 i = 0; i < howMany; i++) {
            _ownerMint(people[i]);
        }
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory currentBaseURI = baseTokenURI;
    string memory extension = baseTokenExtentsion;
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), extension))
        : "";
  }

    // returns the token uri
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_who","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalMinted","type":"uint256"}],"name":"LilHustlazMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_who","type":"address"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"}],"name":"PriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_open","type":"bool"}],"name":"SaleStateFlip","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"}],"name":"TokenUriSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_HUSL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"_ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"people","type":"address[]"},{"internalType":"uint256","name":"howMany","type":"uint256"}],"name":"_ownerMintMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","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":"maxPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintLilHustlaz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a600b5566f8b0a10e470000600c556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000619291906200036f565b506000600f60006101000a81548160ff021916908315150217905550600060105560966011553480156200009457600080fd5b5060405162005000380380620050008339818101604052810190620000ba91906200049d565b6040518060400160405280600b81526020017f4c696c20487573746c617a0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4855534c0000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013e9291906200036f565b508060019080519060200190620001579291906200036f565b5050506200017a6200016e6200019260201b60201c565b6200019a60201b60201c565b6200018b816200026060201b60201c565b50620007ba565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002706200019260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002966200034560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e690620005c5565b60405180910390fd5b80600d9080519060200190620003079291906200036f565b507f0501e8d71f10c94b1d23fd9690e94473668030d1180c2660236212ff4a0cf2d0600d6040516200033a9190620005a1565b60405180910390a150565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037d90620006a2565b90600052602060002090601f016020900481019282620003a15760008555620003ed565b82601f10620003bc57805160ff1916838001178555620003ed565b82800160010185558215620003ed579182015b82811115620003ec578251825591602001919060010190620003cf565b5b509050620003fc919062000400565b5090565b5b808211156200041b57600081600090555060010162000401565b5090565b600062000436620004308462000610565b620005e7565b90508281526020810184848401111562000455576200045462000771565b5b620004628482856200066c565b509392505050565b600082601f8301126200048257620004816200076c565b5b8151620004948482602086016200041f565b91505092915050565b600060208284031215620004b657620004b56200077b565b5b600082015167ffffffffffffffff811115620004d757620004d662000776565b5b620004e5848285016200046a565b91505092915050565b60008154620004fd81620006a2565b6200050981866200065b565b945060018216600081146200052757600181146200053a5762000571565b60ff198316865260208601935062000571565b620005458562000646565b60005b83811015620005695781548189015260018201915060208101905062000548565b808801955050505b50505092915050565b6000620005896020836200065b565b9150620005968262000791565b602082019050919050565b60006020820190508181036000830152620005bd8184620004ee565b905092915050565b60006020820190508181036000830152620005e0816200057a565b9050919050565b6000620005f362000606565b9050620006018282620006d8565b919050565b6000604051905090565b600067ffffffffffffffff8211156200062e576200062d6200073d565b5b620006398262000780565b9050602081019050919050565b60008190508160005260206000209050919050565b600082825260208201905092915050565b60005b838110156200068c5780820151818401526020810190506200066f565b838111156200069c576000848401525b50505050565b60006002820490506001821680620006bb57607f821691505b60208210811415620006d257620006d16200070e565b5b50919050565b620006e38262000780565b810181811067ffffffffffffffff821117156200070557620007046200073d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61483680620007ca6000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063a035b1fe11610095578063be5a730c11610064578063be5a730c14610687578063c87b56dd146106b2578063e985e9c5146106ef578063f2fde38b1461072c576101d8565b8063a035b1fe146105e1578063a22cb4651461060c578063b5f3438814610635578063b88d4fde1461065e576101d8565b806391b7f5ed116100d157806391b7f5ed1461053957806395d89b411461056257806399288dbb1461058d5780639de62517146105b8576101d8565b806370a08231146104a3578063715018a6146104e0578063853828b6146104f75780638da5cb5b1461050e576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103d5578063507e094f1461041257806355f804b31461043d5780636352211e14610466576101d8565b80632f745c591461031b57806334918dfd1461035857806342842e0e1461036f578063438b630014610398576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806315670439146102ab57806318160ddd146102c757806323b872dd146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613160565b610755565b6040516102119190613853565b60405180910390f35b34801561022657600080fd5b5061022f6107cf565b60405161023c919061386e565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613203565b610861565b60405161027991906137a1565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906130c4565b6108e6565b005b6102c560048036038101906102c09190613203565b6109fe565b005b3480156102d357600080fd5b506102dc610c09565b6040516102e99190613bd2565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612fae565b610c16565b005b34801561032757600080fd5b50610342600480360381019061033d91906130c4565b610c76565b60405161034f9190613bd2565b60405180910390f35b34801561036457600080fd5b5061036d610d1b565b005b34801561037b57600080fd5b5061039660048036038101906103919190612fae565b610e09565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f41565b610e29565b6040516103cc9190613831565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190613203565b610ed7565b6040516104099190613bd2565b60405180910390f35b34801561041e57600080fd5b50610427610f48565b6040516104349190613bd2565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906131ba565b610f4e565b005b34801561047257600080fd5b5061048d60048036038101906104889190613203565b61101c565b60405161049a91906137a1565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190612f41565b6110ce565b6040516104d79190613bd2565b60405180910390f35b3480156104ec57600080fd5b506104f5611186565b005b34801561050357600080fd5b5061050c61120e565b005b34801561051a57600080fd5b50610523611312565b60405161053091906137a1565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613203565b61133c565b005b34801561056e57600080fd5b506105776113fd565b604051610584919061386e565b60405180910390f35b34801561059957600080fd5b506105a261148f565b6040516105af9190613853565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613104565b6114a2565b005b3480156105ed57600080fd5b506105f66115eb565b6040516106039190613bd2565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613084565b6115f1565b005b34801561064157600080fd5b5061065c60048036038101906106579190612f41565b611772565b005b34801561066a57600080fd5b5061068560048036038101906106809190613001565b611861565b005b34801561069357600080fd5b5061069c6118c3565b6040516106a99190613bd2565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613203565b6118c9565b6040516106e6919061386e565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190612f6e565b611a85565b6040516107239190613853565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190612f41565b611b19565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c857506107c782611c11565b5b9050919050565b6060600080546107de90613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461080a90613efc565b80156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b5050505050905090565b600061086c82611cf3565b6108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a290613a92565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f18261101c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613b32565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610981611d5f565b73ffffffffffffffffffffffffffffffffffffffff1614806109b057506109af816109aa611d5f565b611a85565b5b6109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139f2565b60405180910390fd5b6109f98383611d67565b505050565b61271081610a0a610c09565b610a149190613d31565b1115610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90613912565b60405180910390fd5b6000339050610a62611312565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0557600f60009054906101000a900460ff16610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90613992565b60405180910390fd5b81600c54610af19190613db8565b341015610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90613ab2565b60405180910390fd5b600082118015610b455750600b548211155b610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b906139b2565b60405180910390fd5b6064610b8f33610e29565b5183610b9b9190613d31565b1115610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613bb2565b60405180910390fd5b60005b82811015610c0357610bf082611e20565b8080610bfb90613f5f565b915050610bdf565b505b5050565b6000600880549050905090565b610c27610c21611d5f565b82611e80565b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613b72565b60405180910390fd5b610c71838383611f5e565b505050565b6000610c81836110ce565b8210610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb9906138b2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d23611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610d41611312565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613ad2565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff0219169083151502179055507fdfa09ed5c39231bdac608d057b65ad8642e68953b3fbef586791235847d78c4e600f60009054906101000a900460ff16604051610dff9190613853565b60405180910390a1565b610e2483838360405180602001604052806000815250611861565b505050565b60606000610e36836110ce565b905060008167ffffffffffffffff811115610e5457610e536140c4565b5b604051908082528060200260200182016040528015610e825781602001602082028036833780820191505090505b50905060005b82811015610ecc57610e9a8582610c76565b828281518110610ead57610eac614095565b5b6020026020010181815250508080610ec490613f5f565b915050610e88565b508092505050919050565b6000610ee1610c09565b8210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613b92565b60405180910390fd5b60088281548110610f3657610f35614095565b5b90600052602060002001549050919050565b600b5481565b610f56611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610f74611312565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613ad2565b60405180910390fd5b80600d9080519060200190610fe0929190612cb7565b507f0501e8d71f10c94b1d23fd9690e94473668030d1180c2660236212ff4a0cf2d0600d6040516110119190613890565b60405180910390a150565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613a32565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613a12565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118e611d5f565b73ffffffffffffffffffffffffffffffffffffffff166111ac611312565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613ad2565b60405180910390fd5b61120c60006121ba565b565b611216611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611234611312565b73ffffffffffffffffffffffffffffffffffffffff161461128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190613ad2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112d5573d6000803e3d6000fd5b507feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d3382604051611307929190613808565b60405180910390a150565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611344611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611362611312565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90613ad2565b60405180910390fd5b80600c819055507f8f012475d3b98d9007b927bfddd4f78c3e0465e69ec5d9795a19dbc3a04e0a6833600c546040516113f2929190613808565b60405180910390a150565b60606001805461140c90613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461143890613efc565b80156114855780601f1061145a57610100808354040283529160200191611485565b820191906000526020600020905b81548152906001019060200180831161146857829003601f168201915b5050505050905090565b600f60009054906101000a900460ff1681565b6114aa611d5f565b73ffffffffffffffffffffffffffffffffffffffff166114c8611312565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613ad2565b60405180910390fd5b80825114611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613b52565b60405180910390fd5b60148111156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613a52565b60405180910390fd5b60005b818110156115e6576115d38382815181106115c6576115c5614095565b5b6020026020010151611772565b80806115de90613f5f565b9150506115a8565b505050565b600c5481565b6115f9611d5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90613972565b60405180910390fd5b8060056000611674611d5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611d5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117669190613853565b60405180910390a35050565b61177a611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611798611312565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613ad2565b60405180910390fd5b6010600081548092919061180190613f5f565b919050555060976010541061181557600080fd5b600060105490506118268282612280565b7f619ccf704fbaffa5a85f256dc157230f08c0ed0499b9c4489ad37cbae84bb867816040516118559190613bd2565b60405180910390a15050565b61187261186c611d5f565b83611e80565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890613b72565b60405180910390fd5b6118bd8484848461229e565b50505050565b61271081565b60606118d482611cf3565b611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90613b12565b60405180910390fd5b6000600d805461192290613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461194e90613efc565b801561199b5780601f106119705761010080835404028352916020019161199b565b820191906000526020600020905b81548152906001019060200180831161197e57829003601f168201915b505050505090506000600e80546119b190613efc565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd90613efc565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b505050505090506000825111611a4f5760405180602001604052806000815250611a7c565b81611a59856122fa565b82604051602001611a6c93929190613770565b6040516020818303038152906040525b92505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b21611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611312565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613ad2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906138f2565b60405180910390fd5b611c0e816121ba565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cdc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cec5750611ceb8261245b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dda8361101c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60116000815480929190611e3390613f5f565b9190505550611e4481601154612280565b7f619ccf704fbaffa5a85f256dc157230f08c0ed0499b9c4489ad37cbae84bb867601154604051611e759190613bd2565b60405180910390a150565b6000611e8b82611cf3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906139d2565b60405180910390fd5b6000611ed58361101c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f4457508373ffffffffffffffffffffffffffffffffffffffff16611f2c84610861565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f555750611f548185611a85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f7e8261101c565b73ffffffffffffffffffffffffffffffffffffffff1614611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb90613af2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90613952565b60405180910390fd5b61204f8383836124c5565b61205a600082611d67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120aa9190613e12565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121019190613d31565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61229a8282604051806020016040528060008152506125d9565b5050565b6122a9848484611f5e565b6122b584848484612634565b6122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb906138d2565b60405180910390fd5b50505050565b60606000821415612342576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612456565b600082905060005b6000821461237457808061235d90613f5f565b915050600a8261236d9190613d87565b915061234a565b60008167ffffffffffffffff8111156123905761238f6140c4565b5b6040519080825280601f01601f1916602001820160405280156123c25781602001600182028036833780820191505090505b5090505b6000851461244f576001826123db9190613e12565b9150600a856123ea9190613fa8565b60306123f69190613d31565b60f81b81838151811061240c5761240b614095565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124489190613d87565b94506123c6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124d08383836127cb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125135761250e816127d0565b612552565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612551576125508382612819565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125955761259081612986565b6125d4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125d3576125d28282612a57565b5b5b505050565b6125e38383612ad6565b6125f06000848484612634565b61262f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612626906138d2565b60405180910390fd5b505050565b60006126558473ffffffffffffffffffffffffffffffffffffffff16612ca4565b156127be578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261267e611d5f565b8786866040518563ffffffff1660e01b81526004016126a094939291906137bc565b602060405180830381600087803b1580156126ba57600080fd5b505af19250505080156126eb57506040513d601f19601f820116820180604052508101906126e8919061318d565b60015b61276e573d806000811461271b576040519150601f19603f3d011682016040523d82523d6000602084013e612720565b606091505b50600081511415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d906138d2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127c3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612826846110ce565b6128309190613e12565b9050600060076000848152602001908152602001600020549050818114612915576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061299a9190613e12565b90506000600960008481526020019081526020016000205490506000600883815481106129ca576129c9614095565b5b9060005260206000200154905080600883815481106129ec576129eb614095565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a3b57612a3a614066565b5b6001900381819060005260206000200160009055905550505050565b6000612a62836110ce565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90613a72565b60405180910390fd5b612b4f81611cf3565b15612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690613932565b60405180910390fd5b612b9b600083836124c5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612beb9190613d31565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cc390613efc565b90600052602060002090601f016020900481019282612ce55760008555612d2c565b82601f10612cfe57805160ff1916838001178555612d2c565b82800160010185558215612d2c579182015b82811115612d2b578251825591602001919060010190612d10565b5b509050612d399190612d3d565b5090565b5b80821115612d56576000816000905550600101612d3e565b5090565b6000612d6d612d6884613c12565b613bed565b90508083825260208201905082856020860282011115612d9057612d8f6140f8565b5b60005b85811015612dc05781612da68882612e4e565b845260208401935060208301925050600181019050612d93565b5050509392505050565b6000612ddd612dd884613c3e565b613bed565b905082815260208101848484011115612df957612df86140fd565b5b612e04848285613eba565b509392505050565b6000612e1f612e1a84613c6f565b613bed565b905082815260208101848484011115612e3b57612e3a6140fd565b5b612e46848285613eba565b509392505050565b600081359050612e5d816147a4565b92915050565b600082601f830112612e7857612e776140f3565b5b8135612e88848260208601612d5a565b91505092915050565b600081359050612ea0816147bb565b92915050565b600081359050612eb5816147d2565b92915050565b600081519050612eca816147d2565b92915050565b600082601f830112612ee557612ee46140f3565b5b8135612ef5848260208601612dca565b91505092915050565b600082601f830112612f1357612f126140f3565b5b8135612f23848260208601612e0c565b91505092915050565b600081359050612f3b816147e9565b92915050565b600060208284031215612f5757612f56614107565b5b6000612f6584828501612e4e565b91505092915050565b60008060408385031215612f8557612f84614107565b5b6000612f9385828601612e4e565b9250506020612fa485828601612e4e565b9150509250929050565b600080600060608486031215612fc757612fc6614107565b5b6000612fd586828701612e4e565b9350506020612fe686828701612e4e565b9250506040612ff786828701612f2c565b9150509250925092565b6000806000806080858703121561301b5761301a614107565b5b600061302987828801612e4e565b945050602061303a87828801612e4e565b935050604061304b87828801612f2c565b925050606085013567ffffffffffffffff81111561306c5761306b614102565b5b61307887828801612ed0565b91505092959194509250565b6000806040838503121561309b5761309a614107565b5b60006130a985828601612e4e565b92505060206130ba85828601612e91565b9150509250929050565b600080604083850312156130db576130da614107565b5b60006130e985828601612e4e565b92505060206130fa85828601612f2c565b9150509250929050565b6000806040838503121561311b5761311a614107565b5b600083013567ffffffffffffffff81111561313957613138614102565b5b61314585828601612e63565b925050602061315685828601612f2c565b9150509250929050565b60006020828403121561317657613175614107565b5b600061318484828501612ea6565b91505092915050565b6000602082840312156131a3576131a2614107565b5b60006131b184828501612ebb565b91505092915050565b6000602082840312156131d0576131cf614107565b5b600082013567ffffffffffffffff8111156131ee576131ed614102565b5b6131fa84828501612efe565b91505092915050565b60006020828403121561321957613218614107565b5b600061322784828501612f2c565b91505092915050565b600061323c8383613752565b60208301905092915050565b61325181613e46565b82525050565b600061326282613cc5565b61326c8185613cf3565b935061327783613ca0565b8060005b838110156132a857815161328f8882613230565b975061329a83613ce6565b92505060018101905061327b565b5085935050505092915050565b6132be81613e58565b82525050565b60006132cf82613cd0565b6132d98185613d04565b93506132e9818560208601613ec9565b6132f28161410c565b840191505092915050565b600061330882613cdb565b6133128185613d15565b9350613322818560208601613ec9565b61332b8161410c565b840191505092915050565b600061334182613cdb565b61334b8185613d26565b935061335b818560208601613ec9565b80840191505092915050565b6000815461337481613efc565b61337e8186613d15565b9450600182166000811461339957600181146133ab576133de565b60ff19831686526020860193506133de565b6133b485613cb0565b60005b838110156133d6578154818901526001820191506020810190506133b7565b808801955050505b50505092915050565b60006133f4602b83613d15565b91506133ff8261411d565b604082019050919050565b6000613417603283613d15565b91506134228261416c565b604082019050919050565b600061343a602683613d15565b9150613445826141bb565b604082019050919050565b600061345d602583613d15565b91506134688261420a565b604082019050919050565b6000613480601c83613d15565b915061348b82614259565b602082019050919050565b60006134a3602483613d15565b91506134ae82614282565b604082019050919050565b60006134c6601983613d15565b91506134d1826142d1565b602082019050919050565b60006134e9601483613d15565b91506134f4826142fa565b602082019050919050565b600061350c603f83613d15565b915061351782614323565b604082019050919050565b600061352f602c83613d15565b915061353a82614372565b604082019050919050565b6000613552603883613d15565b915061355d826143c1565b604082019050919050565b6000613575602a83613d15565b915061358082614410565b604082019050919050565b6000613598602983613d15565b91506135a38261445f565b604082019050919050565b60006135bb601483613d15565b91506135c6826144ae565b602082019050919050565b60006135de602083613d15565b91506135e9826144d7565b602082019050919050565b6000613601602c83613d15565b915061360c82614500565b604082019050919050565b6000613624602f83613d15565b915061362f8261454f565b604082019050919050565b6000613647602083613d15565b91506136528261459e565b602082019050919050565b600061366a602983613d15565b9150613675826145c7565b604082019050919050565b600061368d602f83613d15565b915061369882614616565b604082019050919050565b60006136b0602183613d15565b91506136bb82614665565b604082019050919050565b60006136d3601283613d15565b91506136de826146b4565b602082019050919050565b60006136f6603183613d15565b9150613701826146dd565b604082019050919050565b6000613719602c83613d15565b91506137248261472c565b604082019050919050565b600061373c601183613d15565b91506137478261477b565b602082019050919050565b61375b81613eb0565b82525050565b61376a81613eb0565b82525050565b600061377c8286613336565b91506137888285613336565b91506137948284613336565b9150819050949350505050565b60006020820190506137b66000830184613248565b92915050565b60006080820190506137d16000830187613248565b6137de6020830186613248565b6137eb6040830185613761565b81810360608301526137fd81846132c4565b905095945050505050565b600060408201905061381d6000830185613248565b61382a6020830184613761565b9392505050565b6000602082019050818103600083015261384b8184613257565b905092915050565b600060208201905061386860008301846132b5565b92915050565b6000602082019050818103600083015261388881846132fd565b905092915050565b600060208201905081810360008301526138aa8184613367565b905092915050565b600060208201905081810360008301526138cb816133e7565b9050919050565b600060208201905081810360008301526138eb8161340a565b9050919050565b6000602082019050818103600083015261390b8161342d565b9050919050565b6000602082019050818103600083015261392b81613450565b9050919050565b6000602082019050818103600083015261394b81613473565b9050919050565b6000602082019050818103600083015261396b81613496565b9050919050565b6000602082019050818103600083015261398b816134b9565b9050919050565b600060208201905081810360008301526139ab816134dc565b9050919050565b600060208201905081810360008301526139cb816134ff565b9050919050565b600060208201905081810360008301526139eb81613522565b9050919050565b60006020820190508181036000830152613a0b81613545565b9050919050565b60006020820190508181036000830152613a2b81613568565b9050919050565b60006020820190508181036000830152613a4b8161358b565b9050919050565b60006020820190508181036000830152613a6b816135ae565b9050919050565b60006020820190508181036000830152613a8b816135d1565b9050919050565b60006020820190508181036000830152613aab816135f4565b9050919050565b60006020820190508181036000830152613acb81613617565b9050919050565b60006020820190508181036000830152613aeb8161363a565b9050919050565b60006020820190508181036000830152613b0b8161365d565b9050919050565b60006020820190508181036000830152613b2b81613680565b9050919050565b60006020820190508181036000830152613b4b816136a3565b9050919050565b60006020820190508181036000830152613b6b816136c6565b9050919050565b60006020820190508181036000830152613b8b816136e9565b9050919050565b60006020820190508181036000830152613bab8161370c565b9050919050565b60006020820190508181036000830152613bcb8161372f565b9050919050565b6000602082019050613be76000830184613761565b92915050565b6000613bf7613c08565b9050613c038282613f2e565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2d57613c2c6140c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c5957613c586140c4565b5b613c628261410c565b9050602081019050919050565b600067ffffffffffffffff821115613c8a57613c896140c4565b5b613c938261410c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d3c82613eb0565b9150613d4783613eb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7c57613d7b613fd9565b5b828201905092915050565b6000613d9282613eb0565b9150613d9d83613eb0565b925082613dad57613dac614008565b5b828204905092915050565b6000613dc382613eb0565b9150613dce83613eb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0757613e06613fd9565b5b828202905092915050565b6000613e1d82613eb0565b9150613e2883613eb0565b925082821015613e3b57613e3a613fd9565b5b828203905092915050565b6000613e5182613e90565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ee7578082015181840152602081019050613ecc565b83811115613ef6576000848401525b50505050565b60006002820490506001821680613f1457607f821691505b60208210811415613f2857613f27614037565b5b50919050565b613f378261410c565b810181811067ffffffffffffffff82111715613f5657613f556140c4565b5b80604052505050565b6000613f6a82613eb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f9d57613f9c613fd9565b5b600182019050919050565b6000613fb382613eb0565b9150613fbe83613eb0565b925082613fce57613fcd614008565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c79206f66204c696c20487560008201527f73746c617a000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f4d696e696d756d20312026204d6178696d756d2037204c696c20487573746c6160008201527f7a2063616e206265206d696e74656420706572207472616e73616374696f6e00602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f323020697320746865206d617820616d6f756e74000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e657175616c206461746120696e7075740000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206861766520313030000000000000000000000000000000600082015250565b6147ad81613e46565b81146147b857600080fd5b50565b6147c481613e58565b81146147cf57600080fd5b50565b6147db81613e64565b81146147e657600080fd5b50565b6147f281613eb0565b81146147fd57600080fd5b5056fea26469706673582212204fbcc31904b855b87260e8c3123508125888e75daca8f587817abc288bc82db564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6379757056444b6841464c75574569483766624742673852714d447076554a6d696b755157455473487275702f00000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063a035b1fe11610095578063be5a730c11610064578063be5a730c14610687578063c87b56dd146106b2578063e985e9c5146106ef578063f2fde38b1461072c576101d8565b8063a035b1fe146105e1578063a22cb4651461060c578063b5f3438814610635578063b88d4fde1461065e576101d8565b806391b7f5ed116100d157806391b7f5ed1461053957806395d89b411461056257806399288dbb1461058d5780639de62517146105b8576101d8565b806370a08231146104a3578063715018a6146104e0578063853828b6146104f75780638da5cb5b1461050e576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103d5578063507e094f1461041257806355f804b31461043d5780636352211e14610466576101d8565b80632f745c591461031b57806334918dfd1461035857806342842e0e1461036f578063438b630014610398576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806315670439146102ab57806318160ddd146102c757806323b872dd146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613160565b610755565b6040516102119190613853565b60405180910390f35b34801561022657600080fd5b5061022f6107cf565b60405161023c919061386e565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613203565b610861565b60405161027991906137a1565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906130c4565b6108e6565b005b6102c560048036038101906102c09190613203565b6109fe565b005b3480156102d357600080fd5b506102dc610c09565b6040516102e99190613bd2565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612fae565b610c16565b005b34801561032757600080fd5b50610342600480360381019061033d91906130c4565b610c76565b60405161034f9190613bd2565b60405180910390f35b34801561036457600080fd5b5061036d610d1b565b005b34801561037b57600080fd5b5061039660048036038101906103919190612fae565b610e09565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f41565b610e29565b6040516103cc9190613831565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190613203565b610ed7565b6040516104099190613bd2565b60405180910390f35b34801561041e57600080fd5b50610427610f48565b6040516104349190613bd2565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906131ba565b610f4e565b005b34801561047257600080fd5b5061048d60048036038101906104889190613203565b61101c565b60405161049a91906137a1565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190612f41565b6110ce565b6040516104d79190613bd2565b60405180910390f35b3480156104ec57600080fd5b506104f5611186565b005b34801561050357600080fd5b5061050c61120e565b005b34801561051a57600080fd5b50610523611312565b60405161053091906137a1565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613203565b61133c565b005b34801561056e57600080fd5b506105776113fd565b604051610584919061386e565b60405180910390f35b34801561059957600080fd5b506105a261148f565b6040516105af9190613853565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613104565b6114a2565b005b3480156105ed57600080fd5b506105f66115eb565b6040516106039190613bd2565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613084565b6115f1565b005b34801561064157600080fd5b5061065c60048036038101906106579190612f41565b611772565b005b34801561066a57600080fd5b5061068560048036038101906106809190613001565b611861565b005b34801561069357600080fd5b5061069c6118c3565b6040516106a99190613bd2565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613203565b6118c9565b6040516106e6919061386e565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190612f6e565b611a85565b6040516107239190613853565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190612f41565b611b19565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c857506107c782611c11565b5b9050919050565b6060600080546107de90613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461080a90613efc565b80156108575780601f1061082c57610100808354040283529160200191610857565b820191906000526020600020905b81548152906001019060200180831161083a57829003601f168201915b5050505050905090565b600061086c82611cf3565b6108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a290613a92565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f18261101c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613b32565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610981611d5f565b73ffffffffffffffffffffffffffffffffffffffff1614806109b057506109af816109aa611d5f565b611a85565b5b6109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139f2565b60405180910390fd5b6109f98383611d67565b505050565b61271081610a0a610c09565b610a149190613d31565b1115610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90613912565b60405180910390fd5b6000339050610a62611312565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0557600f60009054906101000a900460ff16610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90613992565b60405180910390fd5b81600c54610af19190613db8565b341015610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90613ab2565b60405180910390fd5b600082118015610b455750600b548211155b610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b906139b2565b60405180910390fd5b6064610b8f33610e29565b5183610b9b9190613d31565b1115610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613bb2565b60405180910390fd5b60005b82811015610c0357610bf082611e20565b8080610bfb90613f5f565b915050610bdf565b505b5050565b6000600880549050905090565b610c27610c21611d5f565b82611e80565b610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613b72565b60405180910390fd5b610c71838383611f5e565b505050565b6000610c81836110ce565b8210610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb9906138b2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d23611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610d41611312565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613ad2565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff0219169083151502179055507fdfa09ed5c39231bdac608d057b65ad8642e68953b3fbef586791235847d78c4e600f60009054906101000a900460ff16604051610dff9190613853565b60405180910390a1565b610e2483838360405180602001604052806000815250611861565b505050565b60606000610e36836110ce565b905060008167ffffffffffffffff811115610e5457610e536140c4565b5b604051908082528060200260200182016040528015610e825781602001602082028036833780820191505090505b50905060005b82811015610ecc57610e9a8582610c76565b828281518110610ead57610eac614095565b5b6020026020010181815250508080610ec490613f5f565b915050610e88565b508092505050919050565b6000610ee1610c09565b8210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613b92565b60405180910390fd5b60088281548110610f3657610f35614095565b5b90600052602060002001549050919050565b600b5481565b610f56611d5f565b73ffffffffffffffffffffffffffffffffffffffff16610f74611312565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613ad2565b60405180910390fd5b80600d9080519060200190610fe0929190612cb7565b507f0501e8d71f10c94b1d23fd9690e94473668030d1180c2660236212ff4a0cf2d0600d6040516110119190613890565b60405180910390a150565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613a32565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613a12565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118e611d5f565b73ffffffffffffffffffffffffffffffffffffffff166111ac611312565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613ad2565b60405180910390fd5b61120c60006121ba565b565b611216611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611234611312565b73ffffffffffffffffffffffffffffffffffffffff161461128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190613ad2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112d5573d6000803e3d6000fd5b507feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d3382604051611307929190613808565b60405180910390a150565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611344611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611362611312565b73ffffffffffffffffffffffffffffffffffffffff16146113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90613ad2565b60405180910390fd5b80600c819055507f8f012475d3b98d9007b927bfddd4f78c3e0465e69ec5d9795a19dbc3a04e0a6833600c546040516113f2929190613808565b60405180910390a150565b60606001805461140c90613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461143890613efc565b80156114855780601f1061145a57610100808354040283529160200191611485565b820191906000526020600020905b81548152906001019060200180831161146857829003601f168201915b5050505050905090565b600f60009054906101000a900460ff1681565b6114aa611d5f565b73ffffffffffffffffffffffffffffffffffffffff166114c8611312565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613ad2565b60405180910390fd5b80825114611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613b52565b60405180910390fd5b60148111156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613a52565b60405180910390fd5b60005b818110156115e6576115d38382815181106115c6576115c5614095565b5b6020026020010151611772565b80806115de90613f5f565b9150506115a8565b505050565b600c5481565b6115f9611d5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90613972565b60405180910390fd5b8060056000611674611d5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611721611d5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117669190613853565b60405180910390a35050565b61177a611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611798611312565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613ad2565b60405180910390fd5b6010600081548092919061180190613f5f565b919050555060976010541061181557600080fd5b600060105490506118268282612280565b7f619ccf704fbaffa5a85f256dc157230f08c0ed0499b9c4489ad37cbae84bb867816040516118559190613bd2565b60405180910390a15050565b61187261186c611d5f565b83611e80565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890613b72565b60405180910390fd5b6118bd8484848461229e565b50505050565b61271081565b60606118d482611cf3565b611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a90613b12565b60405180910390fd5b6000600d805461192290613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461194e90613efc565b801561199b5780601f106119705761010080835404028352916020019161199b565b820191906000526020600020905b81548152906001019060200180831161197e57829003601f168201915b505050505090506000600e80546119b190613efc565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd90613efc565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b505050505090506000825111611a4f5760405180602001604052806000815250611a7c565b81611a59856122fa565b82604051602001611a6c93929190613770565b6040516020818303038152906040525b92505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b21611d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611312565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613ad2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906138f2565b60405180910390fd5b611c0e816121ba565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cdc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cec5750611ceb8261245b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dda8361101c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60116000815480929190611e3390613f5f565b9190505550611e4481601154612280565b7f619ccf704fbaffa5a85f256dc157230f08c0ed0499b9c4489ad37cbae84bb867601154604051611e759190613bd2565b60405180910390a150565b6000611e8b82611cf3565b611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec1906139d2565b60405180910390fd5b6000611ed58361101c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f4457508373ffffffffffffffffffffffffffffffffffffffff16611f2c84610861565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f555750611f548185611a85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f7e8261101c565b73ffffffffffffffffffffffffffffffffffffffff1614611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb90613af2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90613952565b60405180910390fd5b61204f8383836124c5565b61205a600082611d67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120aa9190613e12565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121019190613d31565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61229a8282604051806020016040528060008152506125d9565b5050565b6122a9848484611f5e565b6122b584848484612634565b6122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb906138d2565b60405180910390fd5b50505050565b60606000821415612342576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612456565b600082905060005b6000821461237457808061235d90613f5f565b915050600a8261236d9190613d87565b915061234a565b60008167ffffffffffffffff8111156123905761238f6140c4565b5b6040519080825280601f01601f1916602001820160405280156123c25781602001600182028036833780820191505090505b5090505b6000851461244f576001826123db9190613e12565b9150600a856123ea9190613fa8565b60306123f69190613d31565b60f81b81838151811061240c5761240b614095565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124489190613d87565b94506123c6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124d08383836127cb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125135761250e816127d0565b612552565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612551576125508382612819565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125955761259081612986565b6125d4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125d3576125d28282612a57565b5b5b505050565b6125e38383612ad6565b6125f06000848484612634565b61262f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612626906138d2565b60405180910390fd5b505050565b60006126558473ffffffffffffffffffffffffffffffffffffffff16612ca4565b156127be578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261267e611d5f565b8786866040518563ffffffff1660e01b81526004016126a094939291906137bc565b602060405180830381600087803b1580156126ba57600080fd5b505af19250505080156126eb57506040513d601f19601f820116820180604052508101906126e8919061318d565b60015b61276e573d806000811461271b576040519150601f19603f3d011682016040523d82523d6000602084013e612720565b606091505b50600081511415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d906138d2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127c3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612826846110ce565b6128309190613e12565b9050600060076000848152602001908152602001600020549050818114612915576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061299a9190613e12565b90506000600960008481526020019081526020016000205490506000600883815481106129ca576129c9614095565b5b9060005260206000200154905080600883815481106129ec576129eb614095565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a3b57612a3a614066565b5b6001900381819060005260206000200160009055905550505050565b6000612a62836110ce565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d90613a72565b60405180910390fd5b612b4f81611cf3565b15612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690613932565b60405180910390fd5b612b9b600083836124c5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612beb9190613d31565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cc390613efc565b90600052602060002090601f016020900481019282612ce55760008555612d2c565b82601f10612cfe57805160ff1916838001178555612d2c565b82800160010185558215612d2c579182015b82811115612d2b578251825591602001919060010190612d10565b5b509050612d399190612d3d565b5090565b5b80821115612d56576000816000905550600101612d3e565b5090565b6000612d6d612d6884613c12565b613bed565b90508083825260208201905082856020860282011115612d9057612d8f6140f8565b5b60005b85811015612dc05781612da68882612e4e565b845260208401935060208301925050600181019050612d93565b5050509392505050565b6000612ddd612dd884613c3e565b613bed565b905082815260208101848484011115612df957612df86140fd565b5b612e04848285613eba565b509392505050565b6000612e1f612e1a84613c6f565b613bed565b905082815260208101848484011115612e3b57612e3a6140fd565b5b612e46848285613eba565b509392505050565b600081359050612e5d816147a4565b92915050565b600082601f830112612e7857612e776140f3565b5b8135612e88848260208601612d5a565b91505092915050565b600081359050612ea0816147bb565b92915050565b600081359050612eb5816147d2565b92915050565b600081519050612eca816147d2565b92915050565b600082601f830112612ee557612ee46140f3565b5b8135612ef5848260208601612dca565b91505092915050565b600082601f830112612f1357612f126140f3565b5b8135612f23848260208601612e0c565b91505092915050565b600081359050612f3b816147e9565b92915050565b600060208284031215612f5757612f56614107565b5b6000612f6584828501612e4e565b91505092915050565b60008060408385031215612f8557612f84614107565b5b6000612f9385828601612e4e565b9250506020612fa485828601612e4e565b9150509250929050565b600080600060608486031215612fc757612fc6614107565b5b6000612fd586828701612e4e565b9350506020612fe686828701612e4e565b9250506040612ff786828701612f2c565b9150509250925092565b6000806000806080858703121561301b5761301a614107565b5b600061302987828801612e4e565b945050602061303a87828801612e4e565b935050604061304b87828801612f2c565b925050606085013567ffffffffffffffff81111561306c5761306b614102565b5b61307887828801612ed0565b91505092959194509250565b6000806040838503121561309b5761309a614107565b5b60006130a985828601612e4e565b92505060206130ba85828601612e91565b9150509250929050565b600080604083850312156130db576130da614107565b5b60006130e985828601612e4e565b92505060206130fa85828601612f2c565b9150509250929050565b6000806040838503121561311b5761311a614107565b5b600083013567ffffffffffffffff81111561313957613138614102565b5b61314585828601612e63565b925050602061315685828601612f2c565b9150509250929050565b60006020828403121561317657613175614107565b5b600061318484828501612ea6565b91505092915050565b6000602082840312156131a3576131a2614107565b5b60006131b184828501612ebb565b91505092915050565b6000602082840312156131d0576131cf614107565b5b600082013567ffffffffffffffff8111156131ee576131ed614102565b5b6131fa84828501612efe565b91505092915050565b60006020828403121561321957613218614107565b5b600061322784828501612f2c565b91505092915050565b600061323c8383613752565b60208301905092915050565b61325181613e46565b82525050565b600061326282613cc5565b61326c8185613cf3565b935061327783613ca0565b8060005b838110156132a857815161328f8882613230565b975061329a83613ce6565b92505060018101905061327b565b5085935050505092915050565b6132be81613e58565b82525050565b60006132cf82613cd0565b6132d98185613d04565b93506132e9818560208601613ec9565b6132f28161410c565b840191505092915050565b600061330882613cdb565b6133128185613d15565b9350613322818560208601613ec9565b61332b8161410c565b840191505092915050565b600061334182613cdb565b61334b8185613d26565b935061335b818560208601613ec9565b80840191505092915050565b6000815461337481613efc565b61337e8186613d15565b9450600182166000811461339957600181146133ab576133de565b60ff19831686526020860193506133de565b6133b485613cb0565b60005b838110156133d6578154818901526001820191506020810190506133b7565b808801955050505b50505092915050565b60006133f4602b83613d15565b91506133ff8261411d565b604082019050919050565b6000613417603283613d15565b91506134228261416c565b604082019050919050565b600061343a602683613d15565b9150613445826141bb565b604082019050919050565b600061345d602583613d15565b91506134688261420a565b604082019050919050565b6000613480601c83613d15565b915061348b82614259565b602082019050919050565b60006134a3602483613d15565b91506134ae82614282565b604082019050919050565b60006134c6601983613d15565b91506134d1826142d1565b602082019050919050565b60006134e9601483613d15565b91506134f4826142fa565b602082019050919050565b600061350c603f83613d15565b915061351782614323565b604082019050919050565b600061352f602c83613d15565b915061353a82614372565b604082019050919050565b6000613552603883613d15565b915061355d826143c1565b604082019050919050565b6000613575602a83613d15565b915061358082614410565b604082019050919050565b6000613598602983613d15565b91506135a38261445f565b604082019050919050565b60006135bb601483613d15565b91506135c6826144ae565b602082019050919050565b60006135de602083613d15565b91506135e9826144d7565b602082019050919050565b6000613601602c83613d15565b915061360c82614500565b604082019050919050565b6000613624602f83613d15565b915061362f8261454f565b604082019050919050565b6000613647602083613d15565b91506136528261459e565b602082019050919050565b600061366a602983613d15565b9150613675826145c7565b604082019050919050565b600061368d602f83613d15565b915061369882614616565b604082019050919050565b60006136b0602183613d15565b91506136bb82614665565b604082019050919050565b60006136d3601283613d15565b91506136de826146b4565b602082019050919050565b60006136f6603183613d15565b9150613701826146dd565b604082019050919050565b6000613719602c83613d15565b91506137248261472c565b604082019050919050565b600061373c601183613d15565b91506137478261477b565b602082019050919050565b61375b81613eb0565b82525050565b61376a81613eb0565b82525050565b600061377c8286613336565b91506137888285613336565b91506137948284613336565b9150819050949350505050565b60006020820190506137b66000830184613248565b92915050565b60006080820190506137d16000830187613248565b6137de6020830186613248565b6137eb6040830185613761565b81810360608301526137fd81846132c4565b905095945050505050565b600060408201905061381d6000830185613248565b61382a6020830184613761565b9392505050565b6000602082019050818103600083015261384b8184613257565b905092915050565b600060208201905061386860008301846132b5565b92915050565b6000602082019050818103600083015261388881846132fd565b905092915050565b600060208201905081810360008301526138aa8184613367565b905092915050565b600060208201905081810360008301526138cb816133e7565b9050919050565b600060208201905081810360008301526138eb8161340a565b9050919050565b6000602082019050818103600083015261390b8161342d565b9050919050565b6000602082019050818103600083015261392b81613450565b9050919050565b6000602082019050818103600083015261394b81613473565b9050919050565b6000602082019050818103600083015261396b81613496565b9050919050565b6000602082019050818103600083015261398b816134b9565b9050919050565b600060208201905081810360008301526139ab816134dc565b9050919050565b600060208201905081810360008301526139cb816134ff565b9050919050565b600060208201905081810360008301526139eb81613522565b9050919050565b60006020820190508181036000830152613a0b81613545565b9050919050565b60006020820190508181036000830152613a2b81613568565b9050919050565b60006020820190508181036000830152613a4b8161358b565b9050919050565b60006020820190508181036000830152613a6b816135ae565b9050919050565b60006020820190508181036000830152613a8b816135d1565b9050919050565b60006020820190508181036000830152613aab816135f4565b9050919050565b60006020820190508181036000830152613acb81613617565b9050919050565b60006020820190508181036000830152613aeb8161363a565b9050919050565b60006020820190508181036000830152613b0b8161365d565b9050919050565b60006020820190508181036000830152613b2b81613680565b9050919050565b60006020820190508181036000830152613b4b816136a3565b9050919050565b60006020820190508181036000830152613b6b816136c6565b9050919050565b60006020820190508181036000830152613b8b816136e9565b9050919050565b60006020820190508181036000830152613bab8161370c565b9050919050565b60006020820190508181036000830152613bcb8161372f565b9050919050565b6000602082019050613be76000830184613761565b92915050565b6000613bf7613c08565b9050613c038282613f2e565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2d57613c2c6140c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c5957613c586140c4565b5b613c628261410c565b9050602081019050919050565b600067ffffffffffffffff821115613c8a57613c896140c4565b5b613c938261410c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d3c82613eb0565b9150613d4783613eb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7c57613d7b613fd9565b5b828201905092915050565b6000613d9282613eb0565b9150613d9d83613eb0565b925082613dad57613dac614008565b5b828204905092915050565b6000613dc382613eb0565b9150613dce83613eb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0757613e06613fd9565b5b828202905092915050565b6000613e1d82613eb0565b9150613e2883613eb0565b925082821015613e3b57613e3a613fd9565b5b828203905092915050565b6000613e5182613e90565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ee7578082015181840152602081019050613ecc565b83811115613ef6576000848401525b50505050565b60006002820490506001821680613f1457607f821691505b60208210811415613f2857613f27614037565b5b50919050565b613f378261410c565b810181811067ffffffffffffffff82111715613f5657613f556140c4565b5b80604052505050565b6000613f6a82613eb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f9d57613f9c613fd9565b5b600182019050919050565b6000613fb382613eb0565b9150613fbe83613eb0565b925082613fce57613fcd614008565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c79206f66204c696c20487560008201527f73746c617a000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f4d696e696d756d20312026204d6178696d756d2037204c696c20487573746c6160008201527f7a2063616e206265206d696e74656420706572207472616e73616374696f6e00602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f323020697320746865206d617820616d6f756e74000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e657175616c206461746120696e7075740000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206861766520313030000000000000000000000000000000600082015250565b6147ad81613e46565b81146147b857600080fd5b50565b6147c481613e58565b81146147cf57600080fd5b50565b6147db81613e64565b81146147e657600080fd5b50565b6147f281613eb0565b81146147fd57600080fd5b5056fea26469706673582212204fbcc31904b855b87260e8c3123508125888e75daca8f587817abc288bc82db564736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6379757056444b6841464c75574569483766624742673852714d447076554a6d696b755157455473487275702f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmcyupVDKhAFLuWEiH7fbGBg8RqMDpvUJmikuQWETsHrup/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d6379757056444b6841464c755745694837666247426738
Arg [3] : 52714d447076554a6d696b755157455473487275702f00000000000000000000


Deployed Bytecode Sourcemap

39477:4328:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33273:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12703:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14262:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13785:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41535:723;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33913:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15152:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33581:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41136:122;;;;;;;;;;;;;:::i;:::-;;15562:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40370:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34103:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39610:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40761:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12397:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12127:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3386:94;;;;;;;;;;;;;:::i;:::-;;41308:196;;;;;;;;;;;;;:::i;:::-;;2735:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40942:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12872:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39823:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42885:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39694:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14555:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42582:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15818:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39647:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43201:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14921:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3635:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33273:224;33375:4;33414:35;33399:50;;;:11;:50;;;;:90;;;;33453:36;33477:11;33453:23;:36::i;:::-;33399:90;33392:97;;33273:224;;;:::o;12703:100::-;12757:13;12790:5;12783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12703:100;:::o;14262:221::-;14338:7;14366:16;14374:7;14366;:16::i;:::-;14358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14451:15;:24;14467:7;14451:24;;;;;;;;;;;;;;;;;;;;;14444:31;;14262:221;;;:::o;13785:411::-;13866:13;13882:23;13897:7;13882:14;:23::i;:::-;13866:39;;13930:5;13924:11;;:2;:11;;;;13916:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14024:5;14008:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14033:37;14050:5;14057:12;:10;:12::i;:::-;14033:16;:37::i;:::-;14008:62;13986:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;14167:21;14176:2;14180:7;14167:8;:21::i;:::-;13855:341;13785:411;;:::o;41535:723::-;39682:5;41627:6;41611:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;;41603:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;41698:12;41713:10;41698:25;;41754:7;:5;:7::i;:::-;41740:21;;:10;:21;;;41736:515;;41786:8;;;;;;;;;;;41778:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41864:6;41856:5;;:14;;;;:::i;:::-;41843:9;:27;;41835:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41954:1;41945:6;:10;:34;;;;;41969:10;;41959:6;:20;;41945:34;41937:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42115:3;42079:25;42093:10;42079:13;:25::i;:::-;:32;42070:6;:41;;;;:::i;:::-;:48;;42062:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42162:9;42157:83;42181:6;42177:1;:10;42157:83;;;42213:11;42219:4;42213:5;:11::i;:::-;42189:3;;;;;:::i;:::-;;;;42157:83;;;;41736:515;41592:666;41535:723;:::o;33913:113::-;33974:7;34001:10;:17;;;;33994:24;;33913:113;:::o;15152:339::-;15347:41;15366:12;:10;:12::i;:::-;15380:7;15347:18;:41::i;:::-;15339:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;15455:28;15465:4;15471:2;15475:7;15455:9;:28::i;:::-;15152:339;;;:::o;33581:256::-;33678:7;33714:23;33731:5;33714:16;:23::i;:::-;33706:5;:31;33698:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33803:12;:19;33816:5;33803:19;;;;;;;;;;;;;;;:26;33823:5;33803:26;;;;;;;;;;;;33796:33;;33581:256;;;;:::o;41136:122::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41203:8:::1;;;;;;;;;;;41202:9;41191:8;;:20;;;;;;;;;;;;;;;;;;41227:23;41241:8;;;;;;;;;;;41227:23;;;;;;:::i;:::-;;;;;;;;41136:122::o:0;15562:185::-;15700:39;15717:4;15723:2;15727:7;15700:39;;;;;;;;;;;;:16;:39::i;:::-;15562:185;;;:::o;40370:353::-;40430:16;40461:18;40482:17;40492:6;40482:9;:17::i;:::-;40461:38;;40512:25;40554:10;40540:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40512:53;;40581:9;40576:112;40600:10;40596:1;:14;40576:112;;;40646:30;40666:6;40674:1;40646:19;:30::i;:::-;40632:8;40641:1;40632:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;40612:3;;;;;:::i;:::-;;;;40576:112;;;;40707:8;40700:15;;;;40370:353;;;:::o;34103:233::-;34178:7;34214:30;:28;:30::i;:::-;34206:5;:38;34198:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34311:10;34322:5;34311:17;;;;;;;;:::i;:::-;;;;;;;;;;34304:24;;34103:233;;;:::o;39610:30::-;;;;:::o;40761:142::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40847:7:::1;40832:12;:22;;;;;;;;;;;;:::i;:::-;;40870:25;40882:12;40870:25;;;;;;:::i;:::-;;;;;;;;40761:142:::0;:::o;12397:239::-;12469:7;12489:13;12505:7;:16;12513:7;12505:16;;;;;;;;;;;;;;;;;;;;;12489:32;;12557:1;12540:19;;:5;:19;;;;12532:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12623:5;12616:12;;;12397:239;;;:::o;12127:208::-;12199:7;12244:1;12227:19;;:5;:19;;;;12219:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12311:9;:16;12321:5;12311:16;;;;;;;;;;;;;;;;12304:23;;12127:208;;;:::o;3386:94::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3451:21:::1;3469:1;3451:9;:21::i;:::-;3386:94::o:0;41308:196::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41361:14:::1;41378:21;41361:38;;41418:10;41410:28;;:36;41439:6;41410:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41462:34;41477:10;41489:6;41462:34;;;;;;;:::i;:::-;;;;;;;;41350:154;41308:196::o:0;2735:87::-;2781:7;2808:6;;;;;;;;;;;2801:13;;2735:87;:::o;40942:139::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41017:9:::1;41009:5;:17;;;;41042:31;41055:10;41067:5;;41042:31;;;;;;;:::i;:::-;;;;;;;;40942:139:::0;:::o;12872:104::-;12928:13;12961:7;12954:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12872:104;:::o;39823:28::-;;;;;;;;;;;;;:::o;42885:310::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43004:7:::1;42987:6;:13;:24;42979:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43064:2;43053:7;:13;;43045:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;43107:9;43102:86;43126:7;43122:1;:11;43102:86;;;43155:21;43166:6;43173:1;43166:9;;;;;;;;:::i;:::-;;;;;;;;43155:10;:21::i;:::-;43135:3;;;;;:::i;:::-;;;;43102:86;;;;42885:310:::0;;:::o;39694:40::-;;;;:::o;14555:295::-;14670:12;:10;:12::i;:::-;14658:24;;:8;:24;;;;14650:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14770:8;14725:18;:32;14744:12;:10;:12::i;:::-;14725:32;;;;;;;;;;;;;;;:42;14758:8;14725:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;14823:8;14794:48;;14809:12;:10;:12::i;:::-;14794:48;;;14833:8;14794:48;;;;;;:::i;:::-;;;;;;;;14555:295;;:::o;42582:228::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42643:9:::1;;:11;;;;;;;;;:::i;:::-;;;;;;42685:3;42673:9;;:15;42665:24;;;::::0;::::1;;42700:15;42718:9;;42700:27;;42738:23;42748:3;42753:7;42738:9;:23::i;:::-;42777:25;42794:7;42777:25;;;;;;:::i;:::-;;;;;;;;42632:178;42582:228:::0;:::o;15818:328::-;15993:41;16012:12;:10;:12::i;:::-;16026:7;15993:18;:41::i;:::-;15985:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16099:39;16113:4;16119:2;16123:7;16132:5;16099:13;:39::i;:::-;15818:328;;;;:::o;39647:40::-;39682:5;39647:40;:::o;43201:448::-;43274:13;43315:16;43323:7;43315;:16::i;:::-;43299:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43405:28;43436:12;43405:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43455:23;43481:19;43455:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43545:1;43520:14;43514:28;:32;:129;;;;;;;;;;;;;;;;;43582:14;43598:18;:7;:16;:18::i;:::-;43618:9;43565:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43514:129;43507:136;;;;43201:448;;;:::o;14921:164::-;15018:4;15042:18;:25;15061:5;15042:25;;;;;;;;;;;;;;;:35;15068:8;15042:35;;;;;;;;;;;;;;;;;;;;;;;;;15035:42;;14921:164;;;;:::o;3635:192::-;2966:12;:10;:12::i;:::-;2955:23;;:7;:5;:7::i;:::-;:23;;;2947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3744:1:::1;3724:22;;:8;:22;;;;3716:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3800:19;3810:8;3800:9;:19::i;:::-;3635:192:::0;:::o;11758:305::-;11860:4;11912:25;11897:40;;;:11;:40;;;;:105;;;;11969:33;11954:48;;;:11;:48;;;;11897:105;:158;;;;12019:36;12043:11;12019:23;:36::i;:::-;11897:158;11877:178;;11758:305;;;:::o;17656:127::-;17721:4;17773:1;17745:30;;:7;:16;17753:7;17745:16;;;;;;;;;;;;;;;;;;;;;:30;;;;17738:37;;17656:127;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;21638:174::-;21740:2;21713:15;:24;21729:7;21713:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21796:7;21792:2;21758:46;;21767:23;21782:7;21767:14;:23::i;:::-;21758:46;;;;;;;;;;;;21638:174;;:::o;42350:142::-;42397:8;;:10;;;;;;;;;:::i;:::-;;;;;;42418:24;42428:3;42433:8;;42418:9;:24::i;:::-;42458:26;42475:8;;42458:26;;;;;;:::i;:::-;;;;;;;;42350:142;:::o;17950:348::-;18043:4;18068:16;18076:7;18068;:16::i;:::-;18060:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18144:13;18160:23;18175:7;18160:14;:23::i;:::-;18144:39;;18213:5;18202:16;;:7;:16;;;:51;;;;18246:7;18222:31;;:20;18234:7;18222:11;:20::i;:::-;:31;;;18202:51;:87;;;;18257:32;18274:5;18281:7;18257:16;:32::i;:::-;18202:87;18194:96;;;17950:348;;;;:::o;20942:578::-;21101:4;21074:31;;:23;21089:7;21074:14;:23::i;:::-;:31;;;21066:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21184:1;21170:16;;:2;:16;;;;21162:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21240:39;21261:4;21267:2;21271:7;21240:20;:39::i;:::-;21344:29;21361:1;21365:7;21344:8;:29::i;:::-;21405:1;21386:9;:15;21396:4;21386:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;21434:1;21417:9;:13;21427:2;21417:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;21465:2;21446:7;:16;21454:7;21446:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;21504:7;21500:2;21485:27;;21494:4;21485:27;;;;;;;;;;;;20942:578;;;:::o;3835:173::-;3891:16;3910:6;;;;;;;;;;;3891:25;;3936:8;3927:6;;:17;;;;;;;;;;;;;;;;;;3991:8;3960:40;;3981:8;3960:40;;;;;;;;;;;;3880:128;3835:173;:::o;18640:110::-;18716:26;18726:2;18730:7;18716:26;;;;;;;;;;;;:9;:26::i;:::-;18640:110;;:::o;17028:315::-;17185:28;17195:4;17201:2;17205:7;17185:9;:28::i;:::-;17232:48;17255:4;17261:2;17265:7;17274:5;17232:22;:48::i;:::-;17224:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17028:315;;;;:::o;540:723::-;596:13;826:1;817:5;:10;813:53;;;844:10;;;;;;;;;;;;;;;;;;;;;813:53;876:12;891:5;876:20;;907:14;932:78;947:1;939:4;:9;932:78;;965:8;;;;;:::i;:::-;;;;996:2;988:10;;;;;:::i;:::-;;;932:78;;;1020:19;1052:6;1042:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1020:39;;1070:154;1086:1;1077:5;:10;1070:154;;1114:1;1104:11;;;;;:::i;:::-;;;1181:2;1173:5;:10;;;;:::i;:::-;1160:2;:24;;;;:::i;:::-;1147:39;;1130:6;1137;1130:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1210:2;1201:11;;;;;:::i;:::-;;;1070:154;;;1248:6;1234:21;;;;;540:723;;;;:::o;5392:157::-;5477:4;5516:25;5501:40;;;:11;:40;;;;5494:47;;5392:157;;;:::o;34949:589::-;35093:45;35120:4;35126:2;35130:7;35093:26;:45::i;:::-;35171:1;35155:18;;:4;:18;;;35151:187;;;35190:40;35222:7;35190:31;:40::i;:::-;35151:187;;;35260:2;35252:10;;:4;:10;;;35248:90;;35279:47;35312:4;35318:7;35279:32;:47::i;:::-;35248:90;35151:187;35366:1;35352:16;;:2;:16;;;35348:183;;;35385:45;35422:7;35385:36;:45::i;:::-;35348:183;;;35458:4;35452:10;;:2;:10;;;35448:83;;35479:40;35507:2;35511:7;35479:27;:40::i;:::-;35448:83;35348:183;34949:589;;;:::o;18977:321::-;19107:18;19113:2;19117:7;19107:5;:18::i;:::-;19158:54;19189:1;19193:2;19197:7;19206:5;19158:22;:54::i;:::-;19136:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;18977:321;;;:::o;22377:799::-;22532:4;22553:15;:2;:13;;;:15::i;:::-;22549:620;;;22605:2;22589:36;;;22626:12;:10;:12::i;:::-;22640:4;22646:7;22655:5;22589:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22585:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22848:1;22831:6;:13;:18;22827:272;;;22874:60;;;;;;;;;;:::i;:::-;;;;;;;;22827:272;23049:6;23043:13;23034:6;23030:2;23026:15;23019:38;22585:529;22722:41;;;22712:51;;;:6;:51;;;;22705:58;;;;;22549:620;23153:4;23146:11;;22377:799;;;;;;;:::o;23748:126::-;;;;:::o;36261:164::-;36365:10;:17;;;;36338:15;:24;36354:7;36338:24;;;;;;;;;;;:44;;;;36393:10;36409:7;36393:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36261:164;:::o;37052:988::-;37318:22;37368:1;37343:22;37360:4;37343:16;:22::i;:::-;:26;;;;:::i;:::-;37318:51;;37380:18;37401:17;:26;37419:7;37401:26;;;;;;;;;;;;37380:47;;37548:14;37534:10;:28;37530:328;;37579:19;37601:12;:18;37614:4;37601:18;;;;;;;;;;;;;;;:34;37620:14;37601:34;;;;;;;;;;;;37579:56;;37685:11;37652:12;:18;37665:4;37652:18;;;;;;;;;;;;;;;:30;37671:10;37652:30;;;;;;;;;;;:44;;;;37802:10;37769:17;:30;37787:11;37769:30;;;;;;;;;;;:43;;;;37564:294;37530:328;37954:17;:26;37972:7;37954:26;;;;;;;;;;;37947:33;;;37998:12;:18;38011:4;37998:18;;;;;;;;;;;;;;;:34;38017:14;37998:34;;;;;;;;;;;37991:41;;;37133:907;;37052:988;;:::o;38335:1079::-;38588:22;38633:1;38613:10;:17;;;;:21;;;;:::i;:::-;38588:46;;38645:18;38666:15;:24;38682:7;38666:24;;;;;;;;;;;;38645:45;;39017:19;39039:10;39050:14;39039:26;;;;;;;;:::i;:::-;;;;;;;;;;39017:48;;39103:11;39078:10;39089;39078:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39214:10;39183:15;:28;39199:11;39183:28;;;;;;;;;;;:41;;;;39355:15;:24;39371:7;39355:24;;;;;;;;;;;39348:31;;;39390:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38406:1008;;;38335:1079;:::o;35839:221::-;35924:14;35941:20;35958:2;35941:16;:20::i;:::-;35924:37;;35999:7;35972:12;:16;35985:2;35972:16;;;;;;;;;;;;;;;:24;35989:6;35972:24;;;;;;;;;;;:34;;;;36046:6;36017:17;:26;36035:7;36017:26;;;;;;;;;;;:35;;;;35913:147;35839:221;;:::o;19634:382::-;19728:1;19714:16;;:2;:16;;;;19706:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19787:16;19795:7;19787;:16::i;:::-;19786:17;19778:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19849:45;19878:1;19882:2;19886:7;19849:20;:45::i;:::-;19924:1;19907:9;:13;19917:2;19907:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;19955:2;19936:7;:16;19944:7;19936:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20000:7;19996:2;19975:33;;19992:1;19975:33;;;;;;;;;;;;19634:382;;:::o;25298:387::-;25358:4;25566:12;25633:7;25621:20;25613:28;;25676:1;25669:4;:8;25662:15;;;25298:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:684::-;6851:6;6859;6908:2;6896:9;6887:7;6883:23;6879:32;6876:119;;;6914:79;;:::i;:::-;6876:119;7062:1;7051:9;7047:17;7034:31;7092:18;7084:6;7081:30;7078:117;;;7114:79;;:::i;:::-;7078:117;7219:78;7289:7;7280:6;7269:9;7265:22;7219:78;:::i;:::-;7209:88;;7005:302;7346:2;7372:53;7417:7;7408:6;7397:9;7393:22;7372:53;:::i;:::-;7362:63;;7317:118;6758:684;;;;;:::o;7448:327::-;7506:6;7555:2;7543:9;7534:7;7530:23;7526:32;7523:119;;;7561:79;;:::i;:::-;7523:119;7681:1;7706:52;7750:7;7741:6;7730:9;7726:22;7706:52;:::i;:::-;7696:62;;7652:116;7448:327;;;;:::o;7781:349::-;7850:6;7899:2;7887:9;7878:7;7874:23;7870:32;7867:119;;;7905:79;;:::i;:::-;7867:119;8025:1;8050:63;8105:7;8096:6;8085:9;8081:22;8050:63;:::i;:::-;8040:73;;7996:127;7781:349;;;;:::o;8136:509::-;8205:6;8254:2;8242:9;8233:7;8229:23;8225:32;8222:119;;;8260:79;;:::i;:::-;8222:119;8408:1;8397:9;8393:17;8380:31;8438:18;8430:6;8427:30;8424:117;;;8460:79;;:::i;:::-;8424:117;8565:63;8620:7;8611:6;8600:9;8596:22;8565:63;:::i;:::-;8555:73;;8351:287;8136:509;;;;:::o;8651:329::-;8710:6;8759:2;8747:9;8738:7;8734:23;8730:32;8727:119;;;8765:79;;:::i;:::-;8727:119;8885:1;8910:53;8955:7;8946:6;8935:9;8931:22;8910:53;:::i;:::-;8900:63;;8856:117;8651:329;;;;:::o;8986:179::-;9055:10;9076:46;9118:3;9110:6;9076:46;:::i;:::-;9154:4;9149:3;9145:14;9131:28;;8986:179;;;;:::o;9171:118::-;9258:24;9276:5;9258:24;:::i;:::-;9253:3;9246:37;9171:118;;:::o;9325:732::-;9444:3;9473:54;9521:5;9473:54;:::i;:::-;9543:86;9622:6;9617:3;9543:86;:::i;:::-;9536:93;;9653:56;9703:5;9653:56;:::i;:::-;9732:7;9763:1;9748:284;9773:6;9770:1;9767:13;9748:284;;;9849:6;9843:13;9876:63;9935:3;9920:13;9876:63;:::i;:::-;9869:70;;9962:60;10015:6;9962:60;:::i;:::-;9952:70;;9808:224;9795:1;9792;9788:9;9783:14;;9748:284;;;9752:14;10048:3;10041:10;;9449:608;;;9325:732;;;;:::o;10063:109::-;10144:21;10159:5;10144:21;:::i;:::-;10139:3;10132:34;10063:109;;:::o;10178:360::-;10264:3;10292:38;10324:5;10292:38;:::i;:::-;10346:70;10409:6;10404:3;10346:70;:::i;:::-;10339:77;;10425:52;10470:6;10465:3;10458:4;10451:5;10447:16;10425:52;:::i;:::-;10502:29;10524:6;10502:29;:::i;:::-;10497:3;10493:39;10486:46;;10268:270;10178:360;;;;:::o;10544:364::-;10632:3;10660:39;10693:5;10660:39;:::i;:::-;10715:71;10779:6;10774:3;10715:71;:::i;:::-;10708:78;;10795:52;10840:6;10835:3;10828:4;10821:5;10817:16;10795:52;:::i;:::-;10872:29;10894:6;10872:29;:::i;:::-;10867:3;10863:39;10856:46;;10636:272;10544:364;;;;:::o;10914:377::-;11020:3;11048:39;11081:5;11048:39;:::i;:::-;11103:89;11185:6;11180:3;11103:89;:::i;:::-;11096:96;;11201:52;11246:6;11241:3;11234:4;11227:5;11223:16;11201:52;:::i;:::-;11278:6;11273:3;11269:16;11262:23;;11024:267;10914:377;;;;:::o;11321:802::-;11406:3;11443:5;11437:12;11472:36;11498:9;11472:36;:::i;:::-;11524:71;11588:6;11583:3;11524:71;:::i;:::-;11517:78;;11626:1;11615:9;11611:17;11642:1;11637:135;;;;11786:1;11781:336;;;;11604:513;;11637:135;11721:4;11717:9;11706;11702:25;11697:3;11690:38;11757:4;11752:3;11748:14;11741:21;;11637:135;;11781:336;11848:38;11880:5;11848:38;:::i;:::-;11908:1;11922:154;11936:6;11933:1;11930:13;11922:154;;;12010:7;12004:14;12000:1;11995:3;11991:11;11984:35;12060:1;12051:7;12047:15;12036:26;;11958:4;11955:1;11951:12;11946:17;;11922:154;;;12105:1;12100:3;12096:11;12089:18;;11788:329;;11604:513;;11410:713;;11321:802;;;;:::o;12129:366::-;12271:3;12292:67;12356:2;12351:3;12292:67;:::i;:::-;12285:74;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12129:366;;;:::o;12501:::-;12643:3;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12740:93;12829:3;12740:93;:::i;:::-;12858:2;12853:3;12849:12;12842:19;;12501:366;;;:::o;12873:::-;13015:3;13036:67;13100:2;13095:3;13036:67;:::i;:::-;13029:74;;13112:93;13201:3;13112:93;:::i;:::-;13230:2;13225:3;13221:12;13214:19;;12873:366;;;:::o;13245:::-;13387:3;13408:67;13472:2;13467:3;13408:67;:::i;:::-;13401:74;;13484:93;13573:3;13484:93;:::i;:::-;13602:2;13597:3;13593:12;13586:19;;13245:366;;;:::o;13617:::-;13759:3;13780:67;13844:2;13839:3;13780:67;:::i;:::-;13773:74;;13856:93;13945:3;13856:93;:::i;:::-;13974:2;13969:3;13965:12;13958:19;;13617:366;;;:::o;13989:::-;14131:3;14152:67;14216:2;14211:3;14152:67;:::i;:::-;14145:74;;14228:93;14317:3;14228:93;:::i;:::-;14346:2;14341:3;14337:12;14330:19;;13989:366;;;:::o;14361:::-;14503:3;14524:67;14588:2;14583:3;14524:67;:::i;:::-;14517:74;;14600:93;14689:3;14600:93;:::i;:::-;14718:2;14713:3;14709:12;14702:19;;14361:366;;;:::o;14733:::-;14875:3;14896:67;14960:2;14955:3;14896:67;:::i;:::-;14889:74;;14972:93;15061:3;14972:93;:::i;:::-;15090:2;15085:3;15081:12;15074:19;;14733:366;;;:::o;15105:::-;15247:3;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15344:93;15433:3;15344:93;:::i;:::-;15462:2;15457:3;15453:12;15446:19;;15105:366;;;:::o;15477:::-;15619:3;15640:67;15704:2;15699:3;15640:67;:::i;:::-;15633:74;;15716:93;15805:3;15716:93;:::i;:::-;15834:2;15829:3;15825:12;15818:19;;15477:366;;;:::o;15849:::-;15991:3;16012:67;16076:2;16071:3;16012:67;:::i;:::-;16005:74;;16088:93;16177:3;16088:93;:::i;:::-;16206:2;16201:3;16197:12;16190:19;;15849:366;;;:::o;16221:::-;16363:3;16384:67;16448:2;16443:3;16384:67;:::i;:::-;16377:74;;16460:93;16549:3;16460:93;:::i;:::-;16578:2;16573:3;16569:12;16562:19;;16221:366;;;:::o;16593:::-;16735:3;16756:67;16820:2;16815:3;16756:67;:::i;:::-;16749:74;;16832:93;16921:3;16832:93;:::i;:::-;16950:2;16945:3;16941:12;16934:19;;16593:366;;;:::o;16965:::-;17107:3;17128:67;17192:2;17187:3;17128:67;:::i;:::-;17121:74;;17204:93;17293:3;17204:93;:::i;:::-;17322:2;17317:3;17313:12;17306:19;;16965:366;;;:::o;17337:::-;17479:3;17500:67;17564:2;17559:3;17500:67;:::i;:::-;17493:74;;17576:93;17665:3;17576:93;:::i;:::-;17694:2;17689:3;17685:12;17678:19;;17337:366;;;:::o;17709:::-;17851:3;17872:67;17936:2;17931:3;17872:67;:::i;:::-;17865:74;;17948:93;18037:3;17948:93;:::i;:::-;18066:2;18061:3;18057:12;18050:19;;17709:366;;;:::o;18081:::-;18223:3;18244:67;18308:2;18303:3;18244:67;:::i;:::-;18237:74;;18320:93;18409:3;18320:93;:::i;:::-;18438:2;18433:3;18429:12;18422:19;;18081:366;;;:::o;18453:::-;18595:3;18616:67;18680:2;18675:3;18616:67;:::i;:::-;18609:74;;18692:93;18781:3;18692:93;:::i;:::-;18810:2;18805:3;18801:12;18794:19;;18453:366;;;:::o;18825:::-;18967:3;18988:67;19052:2;19047:3;18988:67;:::i;:::-;18981:74;;19064:93;19153:3;19064:93;:::i;:::-;19182:2;19177:3;19173:12;19166:19;;18825:366;;;:::o;19197:::-;19339:3;19360:67;19424:2;19419:3;19360:67;:::i;:::-;19353:74;;19436:93;19525:3;19436:93;:::i;:::-;19554:2;19549:3;19545:12;19538:19;;19197:366;;;:::o;19569:::-;19711:3;19732:67;19796:2;19791:3;19732:67;:::i;:::-;19725:74;;19808:93;19897:3;19808:93;:::i;:::-;19926:2;19921:3;19917:12;19910:19;;19569:366;;;:::o;19941:::-;20083:3;20104:67;20168:2;20163:3;20104:67;:::i;:::-;20097:74;;20180:93;20269:3;20180:93;:::i;:::-;20298:2;20293:3;20289:12;20282:19;;19941:366;;;:::o;20313:::-;20455:3;20476:67;20540:2;20535:3;20476:67;:::i;:::-;20469:74;;20552:93;20641:3;20552:93;:::i;:::-;20670:2;20665:3;20661:12;20654:19;;20313:366;;;:::o;20685:::-;20827:3;20848:67;20912:2;20907:3;20848:67;:::i;:::-;20841:74;;20924:93;21013:3;20924:93;:::i;:::-;21042:2;21037:3;21033:12;21026:19;;20685:366;;;:::o;21057:::-;21199:3;21220:67;21284:2;21279:3;21220:67;:::i;:::-;21213:74;;21296:93;21385:3;21296:93;:::i;:::-;21414:2;21409:3;21405:12;21398:19;;21057:366;;;:::o;21429:108::-;21506:24;21524:5;21506:24;:::i;:::-;21501:3;21494:37;21429:108;;:::o;21543:118::-;21630:24;21648:5;21630:24;:::i;:::-;21625:3;21618:37;21543:118;;:::o;21667:595::-;21895:3;21917:95;22008:3;21999:6;21917:95;:::i;:::-;21910:102;;22029:95;22120:3;22111:6;22029:95;:::i;:::-;22022:102;;22141:95;22232:3;22223:6;22141:95;:::i;:::-;22134:102;;22253:3;22246:10;;21667:595;;;;;;:::o;22268:222::-;22361:4;22399:2;22388:9;22384:18;22376:26;;22412:71;22480:1;22469:9;22465:17;22456:6;22412:71;:::i;:::-;22268:222;;;;:::o;22496:640::-;22691:4;22729:3;22718:9;22714:19;22706:27;;22743:71;22811:1;22800:9;22796:17;22787:6;22743:71;:::i;:::-;22824:72;22892:2;22881:9;22877:18;22868:6;22824:72;:::i;:::-;22906;22974:2;22963:9;22959:18;22950:6;22906:72;:::i;:::-;23025:9;23019:4;23015:20;23010:2;22999:9;22995:18;22988:48;23053:76;23124:4;23115:6;23053:76;:::i;:::-;23045:84;;22496:640;;;;;;;:::o;23142:332::-;23263:4;23301:2;23290:9;23286:18;23278:26;;23314:71;23382:1;23371:9;23367:17;23358:6;23314:71;:::i;:::-;23395:72;23463:2;23452:9;23448:18;23439:6;23395:72;:::i;:::-;23142:332;;;;;:::o;23480:373::-;23623:4;23661:2;23650:9;23646:18;23638:26;;23710:9;23704:4;23700:20;23696:1;23685:9;23681:17;23674:47;23738:108;23841:4;23832:6;23738:108;:::i;:::-;23730:116;;23480:373;;;;:::o;23859:210::-;23946:4;23984:2;23973:9;23969:18;23961:26;;23997:65;24059:1;24048:9;24044:17;24035:6;23997:65;:::i;:::-;23859:210;;;;:::o;24075:313::-;24188:4;24226:2;24215:9;24211:18;24203:26;;24275:9;24269:4;24265:20;24261:1;24250:9;24246:17;24239:47;24303:78;24376:4;24367:6;24303:78;:::i;:::-;24295:86;;24075:313;;;;:::o;24394:307::-;24504:4;24542:2;24531:9;24527:18;24519:26;;24591:9;24585:4;24581:20;24577:1;24566:9;24562:17;24555:47;24619:75;24689:4;24680:6;24619:75;:::i;:::-;24611:83;;24394:307;;;;:::o;24707:419::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o;25132:::-;25298:4;25336:2;25325:9;25321:18;25313:26;;25385:9;25379:4;25375:20;25371:1;25360:9;25356:17;25349:47;25413:131;25539:4;25413:131;:::i;:::-;25405:139;;25132:419;;;:::o;25557:::-;25723:4;25761:2;25750:9;25746:18;25738:26;;25810:9;25804:4;25800:20;25796:1;25785:9;25781:17;25774:47;25838:131;25964:4;25838:131;:::i;:::-;25830:139;;25557:419;;;:::o;25982:::-;26148:4;26186:2;26175:9;26171:18;26163:26;;26235:9;26229:4;26225:20;26221:1;26210:9;26206:17;26199:47;26263:131;26389:4;26263:131;:::i;:::-;26255:139;;25982:419;;;:::o;26407:::-;26573:4;26611:2;26600:9;26596:18;26588:26;;26660:9;26654:4;26650:20;26646:1;26635:9;26631:17;26624:47;26688:131;26814:4;26688:131;:::i;:::-;26680:139;;26407:419;;;:::o;26832:::-;26998:4;27036:2;27025:9;27021:18;27013:26;;27085:9;27079:4;27075:20;27071:1;27060:9;27056:17;27049:47;27113:131;27239:4;27113:131;:::i;:::-;27105:139;;26832:419;;;:::o;27257:::-;27423:4;27461:2;27450:9;27446:18;27438:26;;27510:9;27504:4;27500:20;27496:1;27485:9;27481:17;27474:47;27538:131;27664:4;27538:131;:::i;:::-;27530:139;;27257:419;;;:::o;27682:::-;27848:4;27886:2;27875:9;27871:18;27863:26;;27935:9;27929:4;27925:20;27921:1;27910:9;27906:17;27899:47;27963:131;28089:4;27963:131;:::i;:::-;27955:139;;27682:419;;;:::o;28107:::-;28273:4;28311:2;28300:9;28296:18;28288:26;;28360:9;28354:4;28350:20;28346:1;28335:9;28331:17;28324:47;28388:131;28514:4;28388:131;:::i;:::-;28380:139;;28107:419;;;:::o;28532:::-;28698:4;28736:2;28725:9;28721:18;28713:26;;28785:9;28779:4;28775:20;28771:1;28760:9;28756:17;28749:47;28813:131;28939:4;28813:131;:::i;:::-;28805:139;;28532:419;;;:::o;28957:::-;29123:4;29161:2;29150:9;29146:18;29138:26;;29210:9;29204:4;29200:20;29196:1;29185:9;29181:17;29174:47;29238:131;29364:4;29238:131;:::i;:::-;29230:139;;28957:419;;;:::o;29382:::-;29548:4;29586:2;29575:9;29571:18;29563:26;;29635:9;29629:4;29625:20;29621:1;29610:9;29606:17;29599:47;29663:131;29789:4;29663:131;:::i;:::-;29655:139;;29382:419;;;:::o;29807:::-;29973:4;30011:2;30000:9;29996:18;29988:26;;30060:9;30054:4;30050:20;30046:1;30035:9;30031:17;30024:47;30088:131;30214:4;30088:131;:::i;:::-;30080:139;;29807:419;;;:::o;30232:::-;30398:4;30436:2;30425:9;30421:18;30413:26;;30485:9;30479:4;30475:20;30471:1;30460:9;30456:17;30449:47;30513:131;30639:4;30513:131;:::i;:::-;30505:139;;30232:419;;;:::o;30657:::-;30823:4;30861:2;30850:9;30846:18;30838:26;;30910:9;30904:4;30900:20;30896:1;30885:9;30881:17;30874:47;30938:131;31064:4;30938:131;:::i;:::-;30930:139;;30657:419;;;:::o;31082:::-;31248:4;31286:2;31275:9;31271:18;31263:26;;31335:9;31329:4;31325:20;31321:1;31310:9;31306:17;31299:47;31363:131;31489:4;31363:131;:::i;:::-;31355:139;;31082:419;;;:::o;31507:::-;31673:4;31711:2;31700:9;31696:18;31688:26;;31760:9;31754:4;31750:20;31746:1;31735:9;31731:17;31724:47;31788:131;31914:4;31788:131;:::i;:::-;31780:139;;31507:419;;;:::o;31932:::-;32098:4;32136:2;32125:9;32121:18;32113:26;;32185:9;32179:4;32175:20;32171:1;32160:9;32156:17;32149:47;32213:131;32339:4;32213:131;:::i;:::-;32205:139;;31932:419;;;:::o;32357:::-;32523:4;32561:2;32550:9;32546:18;32538:26;;32610:9;32604:4;32600:20;32596:1;32585:9;32581:17;32574:47;32638:131;32764:4;32638:131;:::i;:::-;32630:139;;32357:419;;;:::o;32782:::-;32948:4;32986:2;32975:9;32971:18;32963:26;;33035:9;33029:4;33025:20;33021:1;33010:9;33006:17;32999:47;33063:131;33189:4;33063:131;:::i;:::-;33055:139;;32782:419;;;:::o;33207:::-;33373:4;33411:2;33400:9;33396:18;33388:26;;33460:9;33454:4;33450:20;33446:1;33435:9;33431:17;33424:47;33488:131;33614:4;33488:131;:::i;:::-;33480:139;;33207:419;;;:::o;33632:::-;33798:4;33836:2;33825:9;33821:18;33813:26;;33885:9;33879:4;33875:20;33871:1;33860:9;33856:17;33849:47;33913:131;34039:4;33913:131;:::i;:::-;33905:139;;33632:419;;;:::o;34057:::-;34223:4;34261:2;34250:9;34246:18;34238:26;;34310:9;34304:4;34300:20;34296:1;34285:9;34281:17;34274:47;34338:131;34464:4;34338:131;:::i;:::-;34330:139;;34057:419;;;:::o;34482:::-;34648:4;34686:2;34675:9;34671:18;34663:26;;34735:9;34729:4;34725:20;34721:1;34710:9;34706:17;34699:47;34763:131;34889:4;34763:131;:::i;:::-;34755:139;;34482:419;;;:::o;34907:::-;35073:4;35111:2;35100:9;35096:18;35088:26;;35160:9;35154:4;35150:20;35146:1;35135:9;35131:17;35124:47;35188:131;35314:4;35188:131;:::i;:::-;35180:139;;34907:419;;;:::o;35332:222::-;35425:4;35463:2;35452:9;35448:18;35440:26;;35476:71;35544:1;35533:9;35529:17;35520:6;35476:71;:::i;:::-;35332:222;;;;:::o;35560:129::-;35594:6;35621:20;;:::i;:::-;35611:30;;35650:33;35678:4;35670:6;35650:33;:::i;:::-;35560:129;;;:::o;35695:75::-;35728:6;35761:2;35755:9;35745:19;;35695:75;:::o;35776:311::-;35853:4;35943:18;35935:6;35932:30;35929:56;;;35965:18;;:::i;:::-;35929:56;36015:4;36007:6;36003:17;35995:25;;36075:4;36069;36065:15;36057:23;;35776:311;;;:::o;36093:307::-;36154:4;36244:18;36236:6;36233:30;36230:56;;;36266:18;;:::i;:::-;36230:56;36304:29;36326:6;36304:29;:::i;:::-;36296:37;;36388:4;36382;36378:15;36370:23;;36093:307;;;:::o;36406:308::-;36468:4;36558:18;36550:6;36547:30;36544:56;;;36580:18;;:::i;:::-;36544:56;36618:29;36640:6;36618:29;:::i;:::-;36610:37;;36702:4;36696;36692:15;36684:23;;36406:308;;;:::o;36720:132::-;36787:4;36810:3;36802:11;;36840:4;36835:3;36831:14;36823:22;;36720:132;;;:::o;36858:141::-;36907:4;36930:3;36922:11;;36953:3;36950:1;36943:14;36987:4;36984:1;36974:18;36966:26;;36858:141;;;:::o;37005:114::-;37072:6;37106:5;37100:12;37090:22;;37005:114;;;:::o;37125:98::-;37176:6;37210:5;37204:12;37194:22;;37125:98;;;:::o;37229:99::-;37281:6;37315:5;37309:12;37299:22;;37229:99;;;:::o;37334:113::-;37404:4;37436;37431:3;37427:14;37419:22;;37334:113;;;:::o;37453:184::-;37552:11;37586:6;37581:3;37574:19;37626:4;37621:3;37617:14;37602:29;;37453:184;;;;:::o;37643:168::-;37726:11;37760:6;37755:3;37748:19;37800:4;37795:3;37791:14;37776:29;;37643:168;;;;:::o;37817:169::-;37901:11;37935:6;37930:3;37923:19;37975:4;37970:3;37966:14;37951:29;;37817:169;;;;:::o;37992:148::-;38094:11;38131:3;38116:18;;37992:148;;;;:::o;38146:305::-;38186:3;38205:20;38223:1;38205:20;:::i;:::-;38200:25;;38239:20;38257:1;38239:20;:::i;:::-;38234:25;;38393:1;38325:66;38321:74;38318:1;38315:81;38312:107;;;38399:18;;:::i;:::-;38312:107;38443:1;38440;38436:9;38429:16;;38146:305;;;;:::o;38457:185::-;38497:1;38514:20;38532:1;38514:20;:::i;:::-;38509:25;;38548:20;38566:1;38548:20;:::i;:::-;38543:25;;38587:1;38577:35;;38592:18;;:::i;:::-;38577:35;38634:1;38631;38627:9;38622:14;;38457:185;;;;:::o;38648:348::-;38688:7;38711:20;38729:1;38711:20;:::i;:::-;38706:25;;38745:20;38763:1;38745:20;:::i;:::-;38740:25;;38933:1;38865:66;38861:74;38858:1;38855:81;38850:1;38843:9;38836:17;38832:105;38829:131;;;38940:18;;:::i;:::-;38829:131;38988:1;38985;38981:9;38970:20;;38648:348;;;;:::o;39002:191::-;39042:4;39062:20;39080:1;39062:20;:::i;:::-;39057:25;;39096:20;39114:1;39096:20;:::i;:::-;39091:25;;39135:1;39132;39129:8;39126:34;;;39140:18;;:::i;:::-;39126:34;39185:1;39182;39178:9;39170:17;;39002:191;;;;:::o;39199:96::-;39236:7;39265:24;39283:5;39265:24;:::i;:::-;39254:35;;39199:96;;;:::o;39301:90::-;39335:7;39378:5;39371:13;39364:21;39353:32;;39301:90;;;:::o;39397:149::-;39433:7;39473:66;39466:5;39462:78;39451:89;;39397:149;;;:::o;39552:126::-;39589:7;39629:42;39622:5;39618:54;39607:65;;39552:126;;;:::o;39684:77::-;39721:7;39750:5;39739:16;;39684:77;;;:::o;39767:154::-;39851:6;39846:3;39841;39828:30;39913:1;39904:6;39899:3;39895:16;39888:27;39767:154;;;:::o;39927:307::-;39995:1;40005:113;40019:6;40016:1;40013:13;40005:113;;;40104:1;40099:3;40095:11;40089:18;40085:1;40080:3;40076:11;40069:39;40041:2;40038:1;40034:10;40029:15;;40005:113;;;40136:6;40133:1;40130:13;40127:101;;;40216:1;40207:6;40202:3;40198:16;40191:27;40127:101;39976:258;39927:307;;;:::o;40240:320::-;40284:6;40321:1;40315:4;40311:12;40301:22;;40368:1;40362:4;40358:12;40389:18;40379:81;;40445:4;40437:6;40433:17;40423:27;;40379:81;40507:2;40499:6;40496:14;40476:18;40473:38;40470:84;;;40526:18;;:::i;:::-;40470:84;40291:269;40240:320;;;:::o;40566:281::-;40649:27;40671:4;40649:27;:::i;:::-;40641:6;40637:40;40779:6;40767:10;40764:22;40743:18;40731:10;40728:34;40725:62;40722:88;;;40790:18;;:::i;:::-;40722:88;40830:10;40826:2;40819:22;40609:238;40566:281;;:::o;40853:233::-;40892:3;40915:24;40933:5;40915:24;:::i;:::-;40906:33;;40961:66;40954:5;40951:77;40948:103;;;41031:18;;:::i;:::-;40948:103;41078:1;41071:5;41067:13;41060:20;;40853:233;;;:::o;41092:176::-;41124:1;41141:20;41159:1;41141:20;:::i;:::-;41136:25;;41175:20;41193:1;41175:20;:::i;:::-;41170:25;;41214:1;41204:35;;41219:18;;:::i;:::-;41204:35;41260:1;41257;41253:9;41248:14;;41092:176;;;;:::o;41274:180::-;41322:77;41319:1;41312:88;41419:4;41416:1;41409:15;41443:4;41440:1;41433:15;41460:180;41508:77;41505:1;41498:88;41605:4;41602:1;41595:15;41629:4;41626:1;41619:15;41646:180;41694:77;41691:1;41684:88;41791:4;41788:1;41781:15;41815:4;41812:1;41805:15;41832:180;41880:77;41877:1;41870:88;41977:4;41974:1;41967:15;42001:4;41998:1;41991:15;42018:180;42066:77;42063:1;42056:88;42163:4;42160:1;42153:15;42187:4;42184:1;42177:15;42204:180;42252:77;42249:1;42242:88;42349:4;42346:1;42339:15;42373:4;42370:1;42363:15;42390:117;42499:1;42496;42489:12;42513:117;42622:1;42619;42612:12;42636:117;42745:1;42742;42735:12;42759:117;42868:1;42865;42858:12;42882:117;42991:1;42988;42981:12;43005:102;43046:6;43097:2;43093:7;43088:2;43081:5;43077:14;43073:28;43063:38;;43005:102;;;:::o;43113:230::-;43253:34;43249:1;43241:6;43237:14;43230:58;43322:13;43317:2;43309:6;43305:15;43298:38;43113:230;:::o;43349:237::-;43489:34;43485:1;43477:6;43473:14;43466:58;43558:20;43553:2;43545:6;43541:15;43534:45;43349:237;:::o;43592:225::-;43732:34;43728:1;43720:6;43716:14;43709:58;43801:8;43796:2;43788:6;43784:15;43777:33;43592:225;:::o;43823:224::-;43963:34;43959:1;43951:6;43947:14;43940:58;44032:7;44027:2;44019:6;44015:15;44008:32;43823:224;:::o;44053:178::-;44193:30;44189:1;44181:6;44177:14;44170:54;44053:178;:::o;44237:223::-;44377:34;44373:1;44365:6;44361:14;44354:58;44446:6;44441:2;44433:6;44429:15;44422:31;44237:223;:::o;44466:175::-;44606:27;44602:1;44594:6;44590:14;44583:51;44466:175;:::o;44647:170::-;44787:22;44783:1;44775:6;44771:14;44764:46;44647:170;:::o;44823:250::-;44963:34;44959:1;44951:6;44947:14;44940:58;45032:33;45027:2;45019:6;45015:15;45008:58;44823:250;:::o;45079:231::-;45219:34;45215:1;45207:6;45203:14;45196:58;45288:14;45283:2;45275:6;45271:15;45264:39;45079:231;:::o;45316:243::-;45456:34;45452:1;45444:6;45440:14;45433:58;45525:26;45520:2;45512:6;45508:15;45501:51;45316:243;:::o;45565:229::-;45705:34;45701:1;45693:6;45689:14;45682:58;45774:12;45769:2;45761:6;45757:15;45750:37;45565:229;:::o;45800:228::-;45940:34;45936:1;45928:6;45924:14;45917:58;46009:11;46004:2;45996:6;45992:15;45985:36;45800:228;:::o;46034:170::-;46174:22;46170:1;46162:6;46158:14;46151:46;46034:170;:::o;46210:182::-;46350:34;46346:1;46338:6;46334:14;46327:58;46210:182;:::o;46398:231::-;46538:34;46534:1;46526:6;46522:14;46515:58;46607:14;46602:2;46594:6;46590:15;46583:39;46398:231;:::o;46635:234::-;46775:34;46771:1;46763:6;46759:14;46752:58;46844:17;46839:2;46831:6;46827:15;46820:42;46635:234;:::o;46875:182::-;47015:34;47011:1;47003:6;46999:14;46992:58;46875:182;:::o;47063:228::-;47203:34;47199:1;47191:6;47187:14;47180:58;47272:11;47267:2;47259:6;47255:15;47248:36;47063:228;:::o;47297:234::-;47437:34;47433:1;47425:6;47421:14;47414:58;47506:17;47501:2;47493:6;47489:15;47482:42;47297:234;:::o;47537:220::-;47677:34;47673:1;47665:6;47661:14;47654:58;47746:3;47741:2;47733:6;47729:15;47722:28;47537:220;:::o;47763:168::-;47903:20;47899:1;47891:6;47887:14;47880:44;47763:168;:::o;47937:236::-;48077:34;48073:1;48065:6;48061:14;48054:58;48146:19;48141:2;48133:6;48129:15;48122:44;47937:236;:::o;48179:231::-;48319:34;48315:1;48307:6;48303:14;48296:58;48388:14;48383:2;48375:6;48371:15;48364:39;48179:231;:::o;48416:167::-;48556:19;48552:1;48544:6;48540:14;48533:43;48416:167;:::o;48589:122::-;48662:24;48680:5;48662:24;:::i;:::-;48655:5;48652:35;48642:63;;48701:1;48698;48691:12;48642:63;48589:122;:::o;48717:116::-;48787:21;48802:5;48787:21;:::i;:::-;48780:5;48777:32;48767:60;;48823:1;48820;48813:12;48767:60;48717:116;:::o;48839:120::-;48911:23;48928:5;48911:23;:::i;:::-;48904:5;48901:34;48891:62;;48949:1;48946;48939:12;48891:62;48839:120;:::o;48965:122::-;49038:24;49056:5;49038:24;:::i;:::-;49031:5;49028:35;49018:63;;49077:1;49074;49067:12;49018:63;48965:122;:::o

Swarm Source

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