ETH Price: $3,796.24 (+6.83%)

Token

ERC-20: TimoolCocktailClub (TCC)
 

Overview

Max Total Supply

0 TCC

Holders

3

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TimoolCocktailClub

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 12 of 12: TimoolCocktailClub.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ERC721URIStorage.sol";

contract TimoolCocktailClub is ERC721URIStorage, Ownable {
    uint256 public id;
    uint256 private _maxSupply = 5000;

    constructor() ERC721("TimoolCocktailClub", "TCC"){
        id = 0;
    }

    function createArtNFT (string memory _tokenURI) external onlyOwner returns (uint256){
        require(id < _maxSupply, "maxSupply exceeded");

        uint256 tokenId = id;
        _safeMint(msg.sender, tokenId);
        _setTokenURI(tokenId, _tokenURI);

        id ++;

        return tokenId;
    }

    //get Owners by id and limit
    function getOwnersbyLimit(uint256 _id, uint256 _limit) external view returns(address[] memory ownerData){
        uint256 length = _id > _limit ? _limit : (_id + 1);
        ownerData = new address[](length);

        for(uint256 i = 0; i < length; i ++){
            ownerData[i] = ownerOf(_id + i + 1 - length);
        }
        return ownerData;
    }

    //get tokenURIs by id and limit
    function getURIbyLimit(uint256 _id, uint256 _limit) external view returns (string[] memory uRIData){
        uint256 length = _id > _limit ? _limit : (_id + 1);
        uRIData = new string[](length);

         for(uint256 i = 0; i < length; i ++){
            uRIData[i] = tokenURI(_id  + i + 1 - length);
        }
        return uRIData;
    }

    function getAllOwner() external view returns(address[] memory allOwner){
        allOwner = new address[](id);
        
        for(uint256 i = 0; i < id; i ++){
            allOwner[i] = ownerOf(i);
        }
        return allOwner;
    }

    function getAllURI() external view returns(string[] memory allURI){
        allURI = new string[](id);
        
        for(uint256 i = 0; i < id; i ++){
            allURI[i] = tokenURI(i);
        }
        return allURI;
    }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 12: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 4 of 12: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 5 of 12: ERC721URIStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";

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

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

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

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

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

        return super.tokenURI(tokenId);
    }

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

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

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

File 6 of 12: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 7 of 12: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 9 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 10 of 12: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 12: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"createArtNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllOwner","outputs":[{"internalType":"address[]","name":"allOwner","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllURI","outputs":[{"internalType":"string[]","name":"allURI","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"getOwnersbyLimit","outputs":[{"internalType":"address[]","name":"ownerData","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"getURIbyLimit","outputs":[{"internalType":"string[]","name":"uRIData","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]

60806040526113886009553480156200001757600080fd5b506040518060400160405280601281526020017f54696d6f6f6c436f636b7461696c436c756200000000000000000000000000008152506040518060400160405280600381526020017f5443430000000000000000000000000000000000000000000000000000000000815250816000908162000095919062000420565b508060019081620000a7919062000420565b505050620000ca620000be620000d860201b60201c565b620000e060201b60201c565b600060088190555062000507565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200022857607f821691505b6020821081036200023e576200023d620001e0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000269565b620002b4868362000269565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000301620002fb620002f584620002cc565b620002d6565b620002cc565b9050919050565b6000819050919050565b6200031d83620002e0565b620003356200032c8262000308565b84845462000276565b825550505050565b600090565b6200034c6200033d565b6200035981848462000312565b505050565b5b8181101562000381576200037560008262000342565b6001810190506200035f565b5050565b601f821115620003d0576200039a8162000244565b620003a58462000259565b81016020851015620003b5578190505b620003cd620003c48562000259565b8301826200035e565b50505b505050565b600082821c905092915050565b6000620003f560001984600802620003d5565b1980831691505092915050565b6000620004108383620003e2565b9150826002028217905092915050565b6200042b82620001a6565b67ffffffffffffffff811115620004475762000446620001b1565b5b6200045382546200020f565b6200046082828562000385565b600060209050601f83116001811462000498576000841562000483578287015190505b6200048f858262000402565b865550620004ff565b601f198416620004a88662000244565b60005b82811015620004d257848901518255600182019150602085019450602081019050620004ab565b86831015620004f25784890151620004ee601f891682620003e2565b8355505b6001600288020188555050505b505050505050565b61391180620005176000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063af640d0f1161007c578063af640d0f14610389578063b5a99345146103a7578063b88d4fde146103c5578063c87b56dd146103e1578063e985e9c514610411578063f2fde38b1461044157610142565b80638da5cb5b146102d157806393c0572b146102ef57806395d89b411461031f578063a22cb4651461033d578063a9c684891461035957610142565b80633c80272d1161010a5780633c80272d146101fd57806342842e0e1461022d5780636352211e1461024957806370a0823114610279578063715018a6146102a95780638d05a638146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806323b872dd146101e1575b600080fd5b610161600480360381019061015c919061207d565b61045d565b60405161016e91906120c5565b60405180910390f35b61017f61053f565b60405161018c9190612170565b60405180910390f35b6101af60048036038101906101aa91906121c8565b6105d1565b6040516101bc9190612236565b60405180910390f35b6101df60048036038101906101da919061227d565b610656565b005b6101fb60048036038101906101f691906122bd565b61076d565b005b61021760048036038101906102129190612310565b6107cd565b604051610224919061240e565b60405180910390f35b610247600480360381019061024291906122bd565b6108d7565b005b610263600480360381019061025e91906121c8565b6108f7565b6040516102709190612236565b60405180910390f35b610293600480360381019061028e9190612430565b6109a8565b6040516102a0919061246c565b60405180910390f35b6102b1610a5f565b005b6102bb610ae7565b6040516102c8919061240e565b60405180910390f35b6102d9610bb0565b6040516102e69190612236565b60405180910390f35b610309600480360381019061030491906125bc565b610bda565b604051610316919061246c565b60405180910390f35b610327610cda565b6040516103349190612170565b60405180910390f35b61035760048036038101906103529190612631565b610d6c565b005b610373600480360381019061036e9190612310565b610eec565b604051610380919061277d565b60405180910390f35b610391610fcc565b60405161039e919061246c565b60405180910390f35b6103af610fd2565b6040516103bc919061277d565b60405180910390f35b6103df60048036038101906103da9190612840565b611071565b005b6103fb60048036038101906103f691906121c8565b6110d3565b6040516104089190612170565b60405180910390f35b61042b600480360381019061042691906128c3565b611224565b60405161043891906120c5565b60405180910390f35b61045b60048036038101906104569190612430565b6112b8565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105385750610537826113af565b5b9050919050565b60606000805461054e90612932565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90612932565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b5050505050905090565b60006105dc82611419565b61061b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906129d5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610661826108f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c890612a67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106f0611485565b73ffffffffffffffffffffffffffffffffffffffff16148061071f575061071e81610719611485565b611224565b5b61075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590612af9565b60405180910390fd5b610768838361148d565b505050565b61077e610778611485565b82611546565b6107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490612b8b565b60405180910390fd5b6107c8838383611624565b505050565b606060008284116107ea576001846107e59190612bda565b6107ec565b825b90508067ffffffffffffffff81111561080857610807612491565b5b6040519080825280602002602001820160405280156108365781602001602082028036833780820191505090505b50915060005b818110156108cf5761086f82600183886108569190612bda565b6108609190612bda565b61086a9190612c0e565b6108f7565b83828151811061088257610881612c42565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806108c790612c71565b91505061083c565b505092915050565b6108f283838360405180602001604052806000815250611071565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690612d2b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612dbd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a67611485565b73ffffffffffffffffffffffffffffffffffffffff16610a85610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612e29565b60405180910390fd5b610ae5600061187f565b565b606060085467ffffffffffffffff811115610b0557610b04612491565b5b604051908082528060200260200182016040528015610b335781602001602082028036833780820191505090505b50905060005b600854811015610bac57610b4c816108f7565b828281518110610b5f57610b5e612c42565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080610ba490612c71565b915050610b39565b5090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610be4611485565b73ffffffffffffffffffffffffffffffffffffffff16610c02610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90612e29565b60405180910390fd5b60095460085410610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590612e95565b60405180910390fd5b60006008549050610caf3382611945565b610cb98184611963565b60086000815480929190610ccc90612c71565b919050555080915050919050565b606060018054610ce990612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1590612932565b8015610d625780601f10610d3757610100808354040283529160200191610d62565b820191906000526020600020905b815481529060010190602001808311610d4557829003601f168201915b5050505050905090565b610d74611485565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612f01565b60405180910390fd5b8060056000610dee611485565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e9b611485565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ee091906120c5565b60405180910390a35050565b60606000828411610f0957600184610f049190612bda565b610f0b565b825b90508067ffffffffffffffff811115610f2757610f26612491565b5b604051908082528060200260200182016040528015610f5a57816020015b6060815260200190600190039081610f455790505b50915060005b81811015610fc457610f938260018388610f7a9190612bda565b610f849190612bda565b610f8e9190612c0e565b6110d3565b838281518110610fa657610fa5612c42565b5b60200260200101819052508080610fbc90612c71565b915050610f60565b505092915050565b60085481565b606060085467ffffffffffffffff811115610ff057610fef612491565b5b60405190808252806020026020018201604052801561102357816020015b606081526020019060019003908161100e5790505b50905060005b60085481101561106d5761103c816110d3565b82828151811061104f5761104e612c42565b5b6020026020010181905250808061106590612c71565b915050611029565b5090565b61108261107c611485565b83611546565b6110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890612b8b565b60405180910390fd5b6110cd848484846119d0565b50505050565b60606110de82611419565b61111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612f93565b60405180910390fd5b600060066000848152602001908152602001600020805461113d90612932565b80601f016020809104026020016040519081016040528092919081815260200182805461116990612932565b80156111b65780601f1061118b576101008083540402835291602001916111b6565b820191906000526020600020905b81548152906001019060200180831161119957829003601f168201915b5050505050905060006111c7611a2c565b905060008151036111dc57819250505061121f565b6000825111156112115780826040516020016111f9929190612fef565b6040516020818303038152906040529250505061121f565b61121a84611a43565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112c0611485565b73ffffffffffffffffffffffffffffffffffffffff166112de610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613085565b60405180910390fd5b6113ac8161187f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611500836108f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061155182611419565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613117565b60405180910390fd5b600061159b836108f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061160a57508373ffffffffffffffffffffffffffffffffffffffff166115f2846105d1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061161b575061161a8185611224565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611644826108f7565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906131a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061323b565b60405180910390fd5b611714838383611aea565b61171f60008261148d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176f9190612c0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117c69190612bda565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61195f828260405180602001604052806000815250611aef565b5050565b61196c82611419565b6119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906132cd565b60405180910390fd5b806006600084815260200190815260200160002090816119cb9190613499565b505050565b6119db848484611624565b6119e784848484611b4a565b611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906135dd565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611a4e82611419565b611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a849061366f565b60405180910390fd5b6000611a97611a2c565b90506000815111611ab75760405180602001604052806000815250611ae2565b80611ac184611cd1565b604051602001611ad2929190612fef565b6040516020818303038152906040525b915050919050565b505050565b611af98383611e31565b611b066000848484611b4a565b611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c906135dd565b60405180910390fd5b505050565b6000611b6b8473ffffffffffffffffffffffffffffffffffffffff16611ffe565b15611cc4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b94611485565b8786866040518563ffffffff1660e01b8152600401611bb694939291906136e4565b6020604051808303816000875af1925050508015611bf257506040513d601f19601f82011682018060405250810190611bef9190613745565b60015b611c74573d8060008114611c22576040519150601f19603f3d011682016040523d82523d6000602084013e611c27565b606091505b506000815103611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c63906135dd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611cc9565b600190505b949350505050565b606060008203611d18576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e2c565b600082905060005b60008214611d4a578080611d3390612c71565b915050600a82611d4391906137a1565b9150611d20565b60008167ffffffffffffffff811115611d6657611d65612491565b5b6040519080825280601f01601f191660200182016040528015611d985781602001600182028036833780820191505090505b5090505b60008514611e2557600182611db19190612c0e565b9150600a85611dc091906137d2565b6030611dcc9190612bda565b60f81b818381518110611de257611de1612c42565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e1e91906137a1565b9450611d9c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e979061384f565b60405180910390fd5b611ea981611419565b15611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906138bb565b60405180910390fd5b611ef560008383611aea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f459190612bda565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61205a81612025565b811461206557600080fd5b50565b60008135905061207781612051565b92915050565b6000602082840312156120935761209261201b565b5b60006120a184828501612068565b91505092915050565b60008115159050919050565b6120bf816120aa565b82525050565b60006020820190506120da60008301846120b6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561211a5780820151818401526020810190506120ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000612142826120e0565b61214c81856120eb565b935061215c8185602086016120fc565b61216581612126565b840191505092915050565b6000602082019050818103600083015261218a8184612137565b905092915050565b6000819050919050565b6121a581612192565b81146121b057600080fd5b50565b6000813590506121c28161219c565b92915050565b6000602082840312156121de576121dd61201b565b5b60006121ec848285016121b3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612220826121f5565b9050919050565b61223081612215565b82525050565b600060208201905061224b6000830184612227565b92915050565b61225a81612215565b811461226557600080fd5b50565b60008135905061227781612251565b92915050565b600080604083850312156122945761229361201b565b5b60006122a285828601612268565b92505060206122b3858286016121b3565b9150509250929050565b6000806000606084860312156122d6576122d561201b565b5b60006122e486828701612268565b93505060206122f586828701612268565b9250506040612306868287016121b3565b9150509250925092565b600080604083850312156123275761232661201b565b5b6000612335858286016121b3565b9250506020612346858286016121b3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61238581612215565b82525050565b6000612397838361237c565b60208301905092915050565b6000602082019050919050565b60006123bb82612350565b6123c5818561235b565b93506123d08361236c565b8060005b838110156124015781516123e8888261238b565b97506123f3836123a3565b9250506001810190506123d4565b5085935050505092915050565b6000602082019050818103600083015261242881846123b0565b905092915050565b6000602082840312156124465761244561201b565b5b600061245484828501612268565b91505092915050565b61246681612192565b82525050565b6000602082019050612481600083018461245d565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124c982612126565b810181811067ffffffffffffffff821117156124e8576124e7612491565b5b80604052505050565b60006124fb612011565b905061250782826124c0565b919050565b600067ffffffffffffffff82111561252757612526612491565b5b61253082612126565b9050602081019050919050565b82818337600083830152505050565b600061255f61255a8461250c565b6124f1565b90508281526020810184848401111561257b5761257a61248c565b5b61258684828561253d565b509392505050565b600082601f8301126125a3576125a2612487565b5b81356125b384826020860161254c565b91505092915050565b6000602082840312156125d2576125d161201b565b5b600082013567ffffffffffffffff8111156125f0576125ef612020565b5b6125fc8482850161258e565b91505092915050565b61260e816120aa565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b600080604083850312156126485761264761201b565b5b600061265685828601612268565b92505060206126678582860161261c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126b9826120e0565b6126c3818561269d565b93506126d38185602086016120fc565b6126dc81612126565b840191505092915050565b60006126f383836126ae565b905092915050565b6000602082019050919050565b600061271382612671565b61271d818561267c565b93508360208202850161272f8561268d565b8060005b8581101561276b578484038952815161274c85826126e7565b9450612757836126fb565b925060208a01995050600181019050612733565b50829750879550505050505092915050565b600060208201905081810360008301526127978184612708565b905092915050565b600067ffffffffffffffff8211156127ba576127b9612491565b5b6127c382612126565b9050602081019050919050565b60006127e36127de8461279f565b6124f1565b9050828152602081018484840111156127ff576127fe61248c565b5b61280a84828561253d565b509392505050565b600082601f83011261282757612826612487565b5b81356128378482602086016127d0565b91505092915050565b6000806000806080858703121561285a5761285961201b565b5b600061286887828801612268565b945050602061287987828801612268565b935050604061288a878288016121b3565b925050606085013567ffffffffffffffff8111156128ab576128aa612020565b5b6128b787828801612812565b91505092959194509250565b600080604083850312156128da576128d961201b565b5b60006128e885828601612268565b92505060206128f985828601612268565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061294a57607f821691505b60208210810361295d5761295c612903565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129bf602c836120eb565b91506129ca82612963565b604082019050919050565b600060208201905081810360008301526129ee816129b2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a516021836120eb565b9150612a5c826129f5565b604082019050919050565b60006020820190508181036000830152612a8081612a44565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612ae36038836120eb565b9150612aee82612a87565b604082019050919050565b60006020820190508181036000830152612b1281612ad6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b756031836120eb565b9150612b8082612b19565b604082019050919050565b60006020820190508181036000830152612ba481612b68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612be582612192565b9150612bf083612192565b9250828201905080821115612c0857612c07612bab565b5b92915050565b6000612c1982612192565b9150612c2483612192565b9250828203905081811115612c3c57612c3b612bab565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612c7c82612192565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cae57612cad612bab565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612d156029836120eb565b9150612d2082612cb9565b604082019050919050565b60006020820190508181036000830152612d4481612d08565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612da7602a836120eb565b9150612db282612d4b565b604082019050919050565b60006020820190508181036000830152612dd681612d9a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e136020836120eb565b9150612e1e82612ddd565b602082019050919050565b60006020820190508181036000830152612e4281612e06565b9050919050565b7f6d6178537570706c792065786365656465640000000000000000000000000000600082015250565b6000612e7f6012836120eb565b9150612e8a82612e49565b602082019050919050565b60006020820190508181036000830152612eae81612e72565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612eeb6019836120eb565b9150612ef682612eb5565b602082019050919050565b60006020820190508181036000830152612f1a81612ede565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000612f7d6031836120eb565b9150612f8882612f21565b604082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b600081905092915050565b6000612fc9826120e0565b612fd38185612fb3565b9350612fe38185602086016120fc565b80840191505092915050565b6000612ffb8285612fbe565b91506130078284612fbe565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061306f6026836120eb565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613101602c836120eb565b915061310c826130a5565b604082019050919050565b60006020820190508181036000830152613130816130f4565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006131936029836120eb565b915061319e82613137565b604082019050919050565b600060208201905081810360008301526131c281613186565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132256024836120eb565b9150613230826131c9565b604082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006132b7602e836120eb565b91506132c28261325b565b604082019050919050565b600060208201905081810360008301526132e6816132aa565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261334f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613312565b6133598683613312565b95508019841693508086168417925050509392505050565b6000819050919050565b600061339661339161338c84612192565b613371565b612192565b9050919050565b6000819050919050565b6133b08361337b565b6133c46133bc8261339d565b84845461331f565b825550505050565b600090565b6133d96133cc565b6133e48184846133a7565b505050565b5b81811015613408576133fd6000826133d1565b6001810190506133ea565b5050565b601f82111561344d5761341e816132ed565b61342784613302565b81016020851015613436578190505b61344a61344285613302565b8301826133e9565b50505b505050565b600082821c905092915050565b600061347060001984600802613452565b1980831691505092915050565b6000613489838361345f565b9150826002028217905092915050565b6134a2826120e0565b67ffffffffffffffff8111156134bb576134ba612491565b5b6134c58254612932565b6134d082828561340c565b600060209050601f83116001811461350357600084156134f1578287015190505b6134fb858261347d565b865550613563565b601f198416613511866132ed565b60005b8281101561353957848901518255600182019150602085019450602081019050613514565b868310156135565784890151613552601f89168261345f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006135c76032836120eb565b91506135d28261356b565b604082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613659602f836120eb565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136b68261368f565b6136c0818561369a565b93506136d08185602086016120fc565b6136d981612126565b840191505092915050565b60006080820190506136f96000830187612227565b6137066020830186612227565b613713604083018561245d565b818103606083015261372581846136ab565b905095945050505050565b60008151905061373f81612051565b92915050565b60006020828403121561375b5761375a61201b565b5b600061376984828501613730565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137ac82612192565b91506137b783612192565b9250826137c7576137c6613772565b5b828204905092915050565b60006137dd82612192565b91506137e883612192565b9250826137f8576137f7613772565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138396020836120eb565b915061384482613803565b602082019050919050565b600060208201905081810360008301526138688161382c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006138a5601c836120eb565b91506138b08261386f565b602082019050919050565b600060208201905081810360008301526138d481613898565b905091905056fea2646970667358221220c337bd90ce8251614c16cc1f9be44bfee90ecb65a72ba6b874b92c768f20aa1b64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063af640d0f1161007c578063af640d0f14610389578063b5a99345146103a7578063b88d4fde146103c5578063c87b56dd146103e1578063e985e9c514610411578063f2fde38b1461044157610142565b80638da5cb5b146102d157806393c0572b146102ef57806395d89b411461031f578063a22cb4651461033d578063a9c684891461035957610142565b80633c80272d1161010a5780633c80272d146101fd57806342842e0e1461022d5780636352211e1461024957806370a0823114610279578063715018a6146102a95780638d05a638146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806323b872dd146101e1575b600080fd5b610161600480360381019061015c919061207d565b61045d565b60405161016e91906120c5565b60405180910390f35b61017f61053f565b60405161018c9190612170565b60405180910390f35b6101af60048036038101906101aa91906121c8565b6105d1565b6040516101bc9190612236565b60405180910390f35b6101df60048036038101906101da919061227d565b610656565b005b6101fb60048036038101906101f691906122bd565b61076d565b005b61021760048036038101906102129190612310565b6107cd565b604051610224919061240e565b60405180910390f35b610247600480360381019061024291906122bd565b6108d7565b005b610263600480360381019061025e91906121c8565b6108f7565b6040516102709190612236565b60405180910390f35b610293600480360381019061028e9190612430565b6109a8565b6040516102a0919061246c565b60405180910390f35b6102b1610a5f565b005b6102bb610ae7565b6040516102c8919061240e565b60405180910390f35b6102d9610bb0565b6040516102e69190612236565b60405180910390f35b610309600480360381019061030491906125bc565b610bda565b604051610316919061246c565b60405180910390f35b610327610cda565b6040516103349190612170565b60405180910390f35b61035760048036038101906103529190612631565b610d6c565b005b610373600480360381019061036e9190612310565b610eec565b604051610380919061277d565b60405180910390f35b610391610fcc565b60405161039e919061246c565b60405180910390f35b6103af610fd2565b6040516103bc919061277d565b60405180910390f35b6103df60048036038101906103da9190612840565b611071565b005b6103fb60048036038101906103f691906121c8565b6110d3565b6040516104089190612170565b60405180910390f35b61042b600480360381019061042691906128c3565b611224565b60405161043891906120c5565b60405180910390f35b61045b60048036038101906104569190612430565b6112b8565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105385750610537826113af565b5b9050919050565b60606000805461054e90612932565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90612932565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b5050505050905090565b60006105dc82611419565b61061b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906129d5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610661826108f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c890612a67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106f0611485565b73ffffffffffffffffffffffffffffffffffffffff16148061071f575061071e81610719611485565b611224565b5b61075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590612af9565b60405180910390fd5b610768838361148d565b505050565b61077e610778611485565b82611546565b6107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490612b8b565b60405180910390fd5b6107c8838383611624565b505050565b606060008284116107ea576001846107e59190612bda565b6107ec565b825b90508067ffffffffffffffff81111561080857610807612491565b5b6040519080825280602002602001820160405280156108365781602001602082028036833780820191505090505b50915060005b818110156108cf5761086f82600183886108569190612bda565b6108609190612bda565b61086a9190612c0e565b6108f7565b83828151811061088257610881612c42565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806108c790612c71565b91505061083c565b505092915050565b6108f283838360405180602001604052806000815250611071565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690612d2b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612dbd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a67611485565b73ffffffffffffffffffffffffffffffffffffffff16610a85610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612e29565b60405180910390fd5b610ae5600061187f565b565b606060085467ffffffffffffffff811115610b0557610b04612491565b5b604051908082528060200260200182016040528015610b335781602001602082028036833780820191505090505b50905060005b600854811015610bac57610b4c816108f7565b828281518110610b5f57610b5e612c42565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080610ba490612c71565b915050610b39565b5090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610be4611485565b73ffffffffffffffffffffffffffffffffffffffff16610c02610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90612e29565b60405180910390fd5b60095460085410610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590612e95565b60405180910390fd5b60006008549050610caf3382611945565b610cb98184611963565b60086000815480929190610ccc90612c71565b919050555080915050919050565b606060018054610ce990612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1590612932565b8015610d625780601f10610d3757610100808354040283529160200191610d62565b820191906000526020600020905b815481529060010190602001808311610d4557829003601f168201915b5050505050905090565b610d74611485565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612f01565b60405180910390fd5b8060056000610dee611485565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e9b611485565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ee091906120c5565b60405180910390a35050565b60606000828411610f0957600184610f049190612bda565b610f0b565b825b90508067ffffffffffffffff811115610f2757610f26612491565b5b604051908082528060200260200182016040528015610f5a57816020015b6060815260200190600190039081610f455790505b50915060005b81811015610fc457610f938260018388610f7a9190612bda565b610f849190612bda565b610f8e9190612c0e565b6110d3565b838281518110610fa657610fa5612c42565b5b60200260200101819052508080610fbc90612c71565b915050610f60565b505092915050565b60085481565b606060085467ffffffffffffffff811115610ff057610fef612491565b5b60405190808252806020026020018201604052801561102357816020015b606081526020019060019003908161100e5790505b50905060005b60085481101561106d5761103c816110d3565b82828151811061104f5761104e612c42565b5b6020026020010181905250808061106590612c71565b915050611029565b5090565b61108261107c611485565b83611546565b6110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890612b8b565b60405180910390fd5b6110cd848484846119d0565b50505050565b60606110de82611419565b61111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612f93565b60405180910390fd5b600060066000848152602001908152602001600020805461113d90612932565b80601f016020809104026020016040519081016040528092919081815260200182805461116990612932565b80156111b65780601f1061118b576101008083540402835291602001916111b6565b820191906000526020600020905b81548152906001019060200180831161119957829003601f168201915b5050505050905060006111c7611a2c565b905060008151036111dc57819250505061121f565b6000825111156112115780826040516020016111f9929190612fef565b6040516020818303038152906040529250505061121f565b61121a84611a43565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112c0611485565b73ffffffffffffffffffffffffffffffffffffffff166112de610bb0565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613085565b60405180910390fd5b6113ac8161187f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611500836108f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061155182611419565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613117565b60405180910390fd5b600061159b836108f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061160a57508373ffffffffffffffffffffffffffffffffffffffff166115f2846105d1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061161b575061161a8185611224565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611644826108f7565b73ffffffffffffffffffffffffffffffffffffffff161461169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906131a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061323b565b60405180910390fd5b611714838383611aea565b61171f60008261148d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176f9190612c0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117c69190612bda565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61195f828260405180602001604052806000815250611aef565b5050565b61196c82611419565b6119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906132cd565b60405180910390fd5b806006600084815260200190815260200160002090816119cb9190613499565b505050565b6119db848484611624565b6119e784848484611b4a565b611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906135dd565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611a4e82611419565b611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a849061366f565b60405180910390fd5b6000611a97611a2c565b90506000815111611ab75760405180602001604052806000815250611ae2565b80611ac184611cd1565b604051602001611ad2929190612fef565b6040516020818303038152906040525b915050919050565b505050565b611af98383611e31565b611b066000848484611b4a565b611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c906135dd565b60405180910390fd5b505050565b6000611b6b8473ffffffffffffffffffffffffffffffffffffffff16611ffe565b15611cc4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b94611485565b8786866040518563ffffffff1660e01b8152600401611bb694939291906136e4565b6020604051808303816000875af1925050508015611bf257506040513d601f19601f82011682018060405250810190611bef9190613745565b60015b611c74573d8060008114611c22576040519150601f19603f3d011682016040523d82523d6000602084013e611c27565b606091505b506000815103611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c63906135dd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611cc9565b600190505b949350505050565b606060008203611d18576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e2c565b600082905060005b60008214611d4a578080611d3390612c71565b915050600a82611d4391906137a1565b9150611d20565b60008167ffffffffffffffff811115611d6657611d65612491565b5b6040519080825280601f01601f191660200182016040528015611d985781602001600182028036833780820191505090505b5090505b60008514611e2557600182611db19190612c0e565b9150600a85611dc091906137d2565b6030611dcc9190612bda565b60f81b818381518110611de257611de1612c42565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e1e91906137a1565b9450611d9c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e979061384f565b60405180910390fd5b611ea981611419565b15611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906138bb565b60405180910390fd5b611ef560008383611aea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f459190612bda565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61205a81612025565b811461206557600080fd5b50565b60008135905061207781612051565b92915050565b6000602082840312156120935761209261201b565b5b60006120a184828501612068565b91505092915050565b60008115159050919050565b6120bf816120aa565b82525050565b60006020820190506120da60008301846120b6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561211a5780820151818401526020810190506120ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000612142826120e0565b61214c81856120eb565b935061215c8185602086016120fc565b61216581612126565b840191505092915050565b6000602082019050818103600083015261218a8184612137565b905092915050565b6000819050919050565b6121a581612192565b81146121b057600080fd5b50565b6000813590506121c28161219c565b92915050565b6000602082840312156121de576121dd61201b565b5b60006121ec848285016121b3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612220826121f5565b9050919050565b61223081612215565b82525050565b600060208201905061224b6000830184612227565b92915050565b61225a81612215565b811461226557600080fd5b50565b60008135905061227781612251565b92915050565b600080604083850312156122945761229361201b565b5b60006122a285828601612268565b92505060206122b3858286016121b3565b9150509250929050565b6000806000606084860312156122d6576122d561201b565b5b60006122e486828701612268565b93505060206122f586828701612268565b9250506040612306868287016121b3565b9150509250925092565b600080604083850312156123275761232661201b565b5b6000612335858286016121b3565b9250506020612346858286016121b3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61238581612215565b82525050565b6000612397838361237c565b60208301905092915050565b6000602082019050919050565b60006123bb82612350565b6123c5818561235b565b93506123d08361236c565b8060005b838110156124015781516123e8888261238b565b97506123f3836123a3565b9250506001810190506123d4565b5085935050505092915050565b6000602082019050818103600083015261242881846123b0565b905092915050565b6000602082840312156124465761244561201b565b5b600061245484828501612268565b91505092915050565b61246681612192565b82525050565b6000602082019050612481600083018461245d565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124c982612126565b810181811067ffffffffffffffff821117156124e8576124e7612491565b5b80604052505050565b60006124fb612011565b905061250782826124c0565b919050565b600067ffffffffffffffff82111561252757612526612491565b5b61253082612126565b9050602081019050919050565b82818337600083830152505050565b600061255f61255a8461250c565b6124f1565b90508281526020810184848401111561257b5761257a61248c565b5b61258684828561253d565b509392505050565b600082601f8301126125a3576125a2612487565b5b81356125b384826020860161254c565b91505092915050565b6000602082840312156125d2576125d161201b565b5b600082013567ffffffffffffffff8111156125f0576125ef612020565b5b6125fc8482850161258e565b91505092915050565b61260e816120aa565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b600080604083850312156126485761264761201b565b5b600061265685828601612268565b92505060206126678582860161261c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006126b9826120e0565b6126c3818561269d565b93506126d38185602086016120fc565b6126dc81612126565b840191505092915050565b60006126f383836126ae565b905092915050565b6000602082019050919050565b600061271382612671565b61271d818561267c565b93508360208202850161272f8561268d565b8060005b8581101561276b578484038952815161274c85826126e7565b9450612757836126fb565b925060208a01995050600181019050612733565b50829750879550505050505092915050565b600060208201905081810360008301526127978184612708565b905092915050565b600067ffffffffffffffff8211156127ba576127b9612491565b5b6127c382612126565b9050602081019050919050565b60006127e36127de8461279f565b6124f1565b9050828152602081018484840111156127ff576127fe61248c565b5b61280a84828561253d565b509392505050565b600082601f83011261282757612826612487565b5b81356128378482602086016127d0565b91505092915050565b6000806000806080858703121561285a5761285961201b565b5b600061286887828801612268565b945050602061287987828801612268565b935050604061288a878288016121b3565b925050606085013567ffffffffffffffff8111156128ab576128aa612020565b5b6128b787828801612812565b91505092959194509250565b600080604083850312156128da576128d961201b565b5b60006128e885828601612268565b92505060206128f985828601612268565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061294a57607f821691505b60208210810361295d5761295c612903565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129bf602c836120eb565b91506129ca82612963565b604082019050919050565b600060208201905081810360008301526129ee816129b2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a516021836120eb565b9150612a5c826129f5565b604082019050919050565b60006020820190508181036000830152612a8081612a44565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612ae36038836120eb565b9150612aee82612a87565b604082019050919050565b60006020820190508181036000830152612b1281612ad6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b756031836120eb565b9150612b8082612b19565b604082019050919050565b60006020820190508181036000830152612ba481612b68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612be582612192565b9150612bf083612192565b9250828201905080821115612c0857612c07612bab565b5b92915050565b6000612c1982612192565b9150612c2483612192565b9250828203905081811115612c3c57612c3b612bab565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612c7c82612192565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cae57612cad612bab565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612d156029836120eb565b9150612d2082612cb9565b604082019050919050565b60006020820190508181036000830152612d4481612d08565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612da7602a836120eb565b9150612db282612d4b565b604082019050919050565b60006020820190508181036000830152612dd681612d9a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e136020836120eb565b9150612e1e82612ddd565b602082019050919050565b60006020820190508181036000830152612e4281612e06565b9050919050565b7f6d6178537570706c792065786365656465640000000000000000000000000000600082015250565b6000612e7f6012836120eb565b9150612e8a82612e49565b602082019050919050565b60006020820190508181036000830152612eae81612e72565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612eeb6019836120eb565b9150612ef682612eb5565b602082019050919050565b60006020820190508181036000830152612f1a81612ede565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000612f7d6031836120eb565b9150612f8882612f21565b604082019050919050565b60006020820190508181036000830152612fac81612f70565b9050919050565b600081905092915050565b6000612fc9826120e0565b612fd38185612fb3565b9350612fe38185602086016120fc565b80840191505092915050565b6000612ffb8285612fbe565b91506130078284612fbe565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061306f6026836120eb565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613101602c836120eb565b915061310c826130a5565b604082019050919050565b60006020820190508181036000830152613130816130f4565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006131936029836120eb565b915061319e82613137565b604082019050919050565b600060208201905081810360008301526131c281613186565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132256024836120eb565b9150613230826131c9565b604082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006132b7602e836120eb565b91506132c28261325b565b604082019050919050565b600060208201905081810360008301526132e6816132aa565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261334f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613312565b6133598683613312565b95508019841693508086168417925050509392505050565b6000819050919050565b600061339661339161338c84612192565b613371565b612192565b9050919050565b6000819050919050565b6133b08361337b565b6133c46133bc8261339d565b84845461331f565b825550505050565b600090565b6133d96133cc565b6133e48184846133a7565b505050565b5b81811015613408576133fd6000826133d1565b6001810190506133ea565b5050565b601f82111561344d5761341e816132ed565b61342784613302565b81016020851015613436578190505b61344a61344285613302565b8301826133e9565b50505b505050565b600082821c905092915050565b600061347060001984600802613452565b1980831691505092915050565b6000613489838361345f565b9150826002028217905092915050565b6134a2826120e0565b67ffffffffffffffff8111156134bb576134ba612491565b5b6134c58254612932565b6134d082828561340c565b600060209050601f83116001811461350357600084156134f1578287015190505b6134fb858261347d565b865550613563565b601f198416613511866132ed565b60005b8281101561353957848901518255600182019150602085019450602081019050613514565b868310156135565784890151613552601f89168261345f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006135c76032836120eb565b91506135d28261356b565b604082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613659602f836120eb565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136b68261368f565b6136c0818561369a565b93506136d08185602086016120fc565b6136d981612126565b840191505092915050565b60006080820190506136f96000830187612227565b6137066020830186612227565b613713604083018561245d565b818103606083015261372581846136ab565b905095945050505050565b60008151905061373f81612051565b92915050565b60006020828403121561375b5761375a61201b565b5b600061376984828501613730565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137ac82612192565b91506137b783612192565b9250826137c7576137c6613772565b5b828204905092915050565b60006137dd82612192565b91506137e883612192565b9250826137f8576137f7613772565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138396020836120eb565b915061384482613803565b602082019050919050565b600060208201905081810360008301526138688161382c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006138a5601c836120eb565b91506138b08261386f565b602082019050919050565b600060208201905081810360008301526138d481613898565b905091905056fea2646970667358221220c337bd90ce8251614c16cc1f9be44bfee90ecb65a72ba6b874b92c768f20aa1b64736f6c63430008110033

Deployed Bytecode Sourcemap

116:1770:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:300:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4724:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;660:355:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:179:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2052:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1607:101:9;;;:::i;:::-;;1409:240:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;975:85:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;320:301:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4144:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1057:346:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;179:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1655:229;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5365:320:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;386:663:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:162:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1857:198:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:300:3;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;2349:98::-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;4724:330::-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;660:355:11:-;737:26;774:14;797:6;791:3;:12;:33;;822:1;816:3;:7;;;;:::i;:::-;791:33;;;806:6;791:33;774:50;;860:6;846:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:33;;882:9;878:105;901:6;897:1;:10;878:105;;;943:29;965:6;961:1;957;951:3;:7;;;;:::i;:::-;:11;;;;:::i;:::-;:20;;;;:::i;:::-;943:7;:29::i;:::-;928:9;938:1;928:12;;;;;;;;:::i;:::-;;;;;;;:44;;;;;;;;;;;909:4;;;;;:::i;:::-;;;;878:105;;;;992:16;660:355;;;;:::o;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;2052:235::-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1607:101:9:-;1198:12;:10;:12::i;:::-;1187:23;;:7;:5;:7::i;:::-;:23;;;1179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:30:::1;1698:1;1671:18;:30::i;:::-;1607:101::o:0;1409:240:11:-;1454:25;1515:2;;1501:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:28;;1541:9;1537:81;1560:2;;1556:1;:6;1537:81;;;1597:10;1605:1;1597:7;:10::i;:::-;1583:8;1592:1;1583:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;1564:4;;;;;:::i;:::-;;;;1537:81;;;;1409:240;:::o;975:85:9:-;1021:7;1047:6;;;;;;;;;;;1040:13;;975:85;:::o;320:301:11:-;396:7;1198:12:9;:10;:12::i;:::-;1187:23;;:7;:5;:7::i;:::-;:23;;;1179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;427:10:11::1;;422:2;;:15;414:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;471:15;489:2;;471:20;;501:30;511:10;523:7;501:9;:30::i;:::-;541:32;554:7;563:9;541:12;:32::i;:::-;584:2;;:5;;;;;;;;;:::i;:::-;;;;;;607:7;600:14;;;320:301:::0;;;:::o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;4144:290::-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;1057:346:11:-;1132:23;1166:14;1189:6;1183:3;:12;:33;;1214:1;1208:3;:7;;;;:::i;:::-;1183:33;;;1198:6;1183:33;1166:50;;1249:6;1236:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1226:30;;1272:9;1268:105;1291:6;1287:1;:10;1268:105;;;1331:31;1355:6;1351:1;1347;1340:3;:8;;;;:::i;:::-;:12;;;;:::i;:::-;:21;;;;:::i;:::-;1331:8;:31::i;:::-;1318:7;1326:1;1318:10;;;;;;;;:::i;:::-;;;;;;;:44;;;;1299:4;;;;;:::i;:::-;;;;1268:105;;;;1382:14;1057:346;;;;:::o;179:17::-;;;;:::o;1655:229::-;1698:22;1753:2;;1740:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1731:25;;1779:9;1775:80;1798:2;;1794:1;:6;1775:80;;;1833:11;1842:1;1833:8;:11::i;:::-;1821:6;1828:1;1821:9;;;;;;;;:::i;:::-;;;;;;;:23;;;;1802:4;;;;;:::i;:::-;;;;1775:80;;;;1655:229;:::o;5365:320:3:-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;386:663:4:-;459:13;492:16;500:7;492;:16::i;:::-;484:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;573:23;599:10;:19;610:7;599:19;;;;;;;;;;;573:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:18;649:10;:8;:10::i;:::-;628:31;;754:1;738:4;732:18;:23;728:70;;778:9;771:16;;;;;;728:70;926:1;906:9;900:23;:27;896:106;;;974:4;980:9;957:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;943:48;;;;;;896:106;1019:23;1034:7;1019:14;:23::i;:::-;1012:30;;;;386:663;;;;:::o;4500:162:3:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;1857:198:9:-;1198:12;:10;:12::i;:::-;1187:23;;:7;:5;:7::i;:::-;:23;;;1179:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1965:1:::1;1945:22;;:8;:22;;::::0;1937:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2020:28;2039:8;2020:18;:28::i;:::-;1857:198:::0;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7157:125:3:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11008:171:3:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2209:187:9:-;2282:16;2301:6;;;;;;;;;;;2282:25;;2326:8;2317:6;;:17;;;;;;;;;;;;;;;;;;2380:8;2349:40;;2370:8;2349:40;;;;;;;;;;;;2272:124;2209:187;:::o;8114:108:3:-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;1196:214:4:-;1295:16;1303:7;1295;:16::i;:::-;1287:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1394:9;1372:10;:19;1383:7;1372:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;1196:214;;:::o;6547:307:3:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;3249:92::-;3300:13;3325:9;;;;;;;;;;;;;;3249:92;:::o;2679:329::-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;13066:122::-;;;;:::o;8443:311::-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;275:703:10:-;331:13;557:1;548:5;:10;544:51;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;9076:372:3:-;9169:1;9155:16;;:2;:16;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;7:75:12:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:474::-;5583:6;5591;5640:2;5628:9;5619:7;5615:23;5611:32;5608:119;;;5646:79;;:::i;:::-;5608:119;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;5515:474;;;;;:::o;5995:114::-;6062:6;6096:5;6090:12;6080:22;;5995:114;;;:::o;6115:184::-;6214:11;6248:6;6243:3;6236:19;6288:4;6283:3;6279:14;6264:29;;6115:184;;;;:::o;6305:132::-;6372:4;6395:3;6387:11;;6425:4;6420:3;6416:14;6408:22;;6305:132;;;:::o;6443:108::-;6520:24;6538:5;6520:24;:::i;:::-;6515:3;6508:37;6443:108;;:::o;6557:179::-;6626:10;6647:46;6689:3;6681:6;6647:46;:::i;:::-;6725:4;6720:3;6716:14;6702:28;;6557:179;;;;:::o;6742:113::-;6812:4;6844;6839:3;6835:14;6827:22;;6742:113;;;:::o;6891:732::-;7010:3;7039:54;7087:5;7039:54;:::i;:::-;7109:86;7188:6;7183:3;7109:86;:::i;:::-;7102:93;;7219:56;7269:5;7219:56;:::i;:::-;7298:7;7329:1;7314:284;7339:6;7336:1;7333:13;7314:284;;;7415:6;7409:13;7442:63;7501:3;7486:13;7442:63;:::i;:::-;7435:70;;7528:60;7581:6;7528:60;:::i;:::-;7518:70;;7374:224;7361:1;7358;7354:9;7349:14;;7314:284;;;7318:14;7614:3;7607:10;;7015:608;;;6891:732;;;;:::o;7629:373::-;7772:4;7810:2;7799:9;7795:18;7787:26;;7859:9;7853:4;7849:20;7845:1;7834:9;7830:17;7823:47;7887:108;7990:4;7981:6;7887:108;:::i;:::-;7879:116;;7629:373;;;;:::o;8008:329::-;8067:6;8116:2;8104:9;8095:7;8091:23;8087:32;8084:119;;;8122:79;;:::i;:::-;8084:119;8242:1;8267:53;8312:7;8303:6;8292:9;8288:22;8267:53;:::i;:::-;8257:63;;8213:117;8008:329;;;;:::o;8343:118::-;8430:24;8448:5;8430:24;:::i;:::-;8425:3;8418:37;8343:118;;:::o;8467:222::-;8560:4;8598:2;8587:9;8583:18;8575:26;;8611:71;8679:1;8668:9;8664:17;8655:6;8611:71;:::i;:::-;8467:222;;;;:::o;8695:117::-;8804:1;8801;8794:12;8818:117;8927:1;8924;8917:12;8941:180;8989:77;8986:1;8979:88;9086:4;9083:1;9076:15;9110:4;9107:1;9100:15;9127:281;9210:27;9232:4;9210:27;:::i;:::-;9202:6;9198:40;9340:6;9328:10;9325:22;9304:18;9292:10;9289:34;9286:62;9283:88;;;9351:18;;:::i;:::-;9283:88;9391:10;9387:2;9380:22;9170:238;9127:281;;:::o;9414:129::-;9448:6;9475:20;;:::i;:::-;9465:30;;9504:33;9532:4;9524:6;9504:33;:::i;:::-;9414:129;;;:::o;9549:308::-;9611:4;9701:18;9693:6;9690:30;9687:56;;;9723:18;;:::i;:::-;9687:56;9761:29;9783:6;9761:29;:::i;:::-;9753:37;;9845:4;9839;9835:15;9827:23;;9549:308;;;:::o;9863:146::-;9960:6;9955:3;9950;9937:30;10001:1;9992:6;9987:3;9983:16;9976:27;9863:146;;;:::o;10015:425::-;10093:5;10118:66;10134:49;10176:6;10134:49;:::i;:::-;10118:66;:::i;:::-;10109:75;;10207:6;10200:5;10193:21;10245:4;10238:5;10234:16;10283:3;10274:6;10269:3;10265:16;10262:25;10259:112;;;10290:79;;:::i;:::-;10259:112;10380:54;10427:6;10422:3;10417;10380:54;:::i;:::-;10099:341;10015:425;;;;;:::o;10460:340::-;10516:5;10565:3;10558:4;10550:6;10546:17;10542:27;10532:122;;10573:79;;:::i;:::-;10532:122;10690:6;10677:20;10715:79;10790:3;10782:6;10775:4;10767:6;10763:17;10715:79;:::i;:::-;10706:88;;10522:278;10460:340;;;;:::o;10806:509::-;10875:6;10924:2;10912:9;10903:7;10899:23;10895:32;10892:119;;;10930:79;;:::i;:::-;10892:119;11078:1;11067:9;11063:17;11050:31;11108:18;11100:6;11097:30;11094:117;;;11130:79;;:::i;:::-;11094:117;11235:63;11290:7;11281:6;11270:9;11266:22;11235:63;:::i;:::-;11225:73;;11021:287;10806:509;;;;:::o;11321:116::-;11391:21;11406:5;11391:21;:::i;:::-;11384:5;11381:32;11371:60;;11427:1;11424;11417:12;11371:60;11321:116;:::o;11443:133::-;11486:5;11524:6;11511:20;11502:29;;11540:30;11564:5;11540:30;:::i;:::-;11443:133;;;;:::o;11582:468::-;11647:6;11655;11704:2;11692:9;11683:7;11679:23;11675:32;11672:119;;;11710:79;;:::i;:::-;11672:119;11830:1;11855:53;11900:7;11891:6;11880:9;11876:22;11855:53;:::i;:::-;11845:63;;11801:117;11957:2;11983:50;12025:7;12016:6;12005:9;12001:22;11983:50;:::i;:::-;11973:60;;11928:115;11582:468;;;;;:::o;12056:124::-;12133:6;12167:5;12161:12;12151:22;;12056:124;;;:::o;12186:194::-;12295:11;12329:6;12324:3;12317:19;12369:4;12364:3;12360:14;12345:29;;12186:194;;;;:::o;12386:142::-;12463:4;12486:3;12478:11;;12516:4;12511:3;12507:14;12499:22;;12386:142;;;:::o;12534:159::-;12608:11;12642:6;12637:3;12630:19;12682:4;12677:3;12673:14;12658:29;;12534:159;;;;:::o;12699:357::-;12777:3;12805:39;12838:5;12805:39;:::i;:::-;12860:61;12914:6;12909:3;12860:61;:::i;:::-;12853:68;;12930:65;12988:6;12983:3;12976:4;12969:5;12965:16;12930:65;:::i;:::-;13020:29;13042:6;13020:29;:::i;:::-;13015:3;13011:39;13004:46;;12781:275;12699:357;;;;:::o;13062:196::-;13151:10;13186:66;13248:3;13240:6;13186:66;:::i;:::-;13172:80;;13062:196;;;;:::o;13264:123::-;13344:4;13376;13371:3;13367:14;13359:22;;13264:123;;;:::o;13421:991::-;13560:3;13589:64;13647:5;13589:64;:::i;:::-;13669:96;13758:6;13753:3;13669:96;:::i;:::-;13662:103;;13791:3;13836:4;13828:6;13824:17;13819:3;13815:27;13866:66;13926:5;13866:66;:::i;:::-;13955:7;13986:1;13971:396;13996:6;13993:1;13990:13;13971:396;;;14067:9;14061:4;14057:20;14052:3;14045:33;14118:6;14112:13;14146:84;14225:4;14210:13;14146:84;:::i;:::-;14138:92;;14253:70;14316:6;14253:70;:::i;:::-;14243:80;;14352:4;14347:3;14343:14;14336:21;;14031:336;14018:1;14015;14011:9;14006:14;;13971:396;;;13975:14;14383:4;14376:11;;14403:3;14396:10;;13565:847;;;;;13421:991;;;;:::o;14418:413::-;14581:4;14619:2;14608:9;14604:18;14596:26;;14668:9;14662:4;14658:20;14654:1;14643:9;14639:17;14632:47;14696:128;14819:4;14810:6;14696:128;:::i;:::-;14688:136;;14418:413;;;;:::o;14837:307::-;14898:4;14988:18;14980:6;14977:30;14974:56;;;15010:18;;:::i;:::-;14974:56;15048:29;15070:6;15048:29;:::i;:::-;15040:37;;15132:4;15126;15122:15;15114:23;;14837:307;;;:::o;15150:423::-;15227:5;15252:65;15268:48;15309:6;15268:48;:::i;:::-;15252:65;:::i;:::-;15243:74;;15340:6;15333:5;15326:21;15378:4;15371:5;15367:16;15416:3;15407:6;15402:3;15398:16;15395:25;15392:112;;;15423:79;;:::i;:::-;15392:112;15513:54;15560:6;15555:3;15550;15513:54;:::i;:::-;15233:340;15150:423;;;;;:::o;15592:338::-;15647:5;15696:3;15689:4;15681:6;15677:17;15673:27;15663:122;;15704:79;;:::i;:::-;15663:122;15821:6;15808:20;15846:78;15920:3;15912:6;15905:4;15897:6;15893:17;15846:78;:::i;:::-;15837:87;;15653:277;15592:338;;;;:::o;15936:943::-;16031:6;16039;16047;16055;16104:3;16092:9;16083:7;16079:23;16075:33;16072:120;;;16111:79;;:::i;:::-;16072:120;16231:1;16256:53;16301:7;16292:6;16281:9;16277:22;16256:53;:::i;:::-;16246:63;;16202:117;16358:2;16384:53;16429:7;16420:6;16409:9;16405:22;16384:53;:::i;:::-;16374:63;;16329:118;16486:2;16512:53;16557:7;16548:6;16537:9;16533:22;16512:53;:::i;:::-;16502:63;;16457:118;16642:2;16631:9;16627:18;16614:32;16673:18;16665:6;16662:30;16659:117;;;16695:79;;:::i;:::-;16659:117;16800:62;16854:7;16845:6;16834:9;16830:22;16800:62;:::i;:::-;16790:72;;16585:287;15936:943;;;;;;;:::o;16885:474::-;16953:6;16961;17010:2;16998:9;16989:7;16985:23;16981:32;16978:119;;;17016:79;;:::i;:::-;16978:119;17136:1;17161:53;17206:7;17197:6;17186:9;17182:22;17161:53;:::i;:::-;17151:63;;17107:117;17263:2;17289:53;17334:7;17325:6;17314:9;17310:22;17289:53;:::i;:::-;17279:63;;17234:118;16885:474;;;;;:::o;17365:180::-;17413:77;17410:1;17403:88;17510:4;17507:1;17500:15;17534:4;17531:1;17524:15;17551:320;17595:6;17632:1;17626:4;17622:12;17612:22;;17679:1;17673:4;17669:12;17700:18;17690:81;;17756:4;17748:6;17744:17;17734:27;;17690:81;17818:2;17810:6;17807:14;17787:18;17784:38;17781:84;;17837:18;;:::i;:::-;17781:84;17602:269;17551:320;;;:::o;17877:231::-;18017:34;18013:1;18005:6;18001:14;17994:58;18086:14;18081:2;18073:6;18069:15;18062:39;17877:231;:::o;18114:366::-;18256:3;18277:67;18341:2;18336:3;18277:67;:::i;:::-;18270:74;;18353:93;18442:3;18353:93;:::i;:::-;18471:2;18466:3;18462:12;18455:19;;18114:366;;;:::o;18486:419::-;18652:4;18690:2;18679:9;18675:18;18667:26;;18739:9;18733:4;18729:20;18725:1;18714:9;18710:17;18703:47;18767:131;18893:4;18767:131;:::i;:::-;18759:139;;18486:419;;;:::o;18911:220::-;19051:34;19047:1;19039:6;19035:14;19028:58;19120:3;19115:2;19107:6;19103:15;19096:28;18911:220;:::o;19137:366::-;19279:3;19300:67;19364:2;19359:3;19300:67;:::i;:::-;19293:74;;19376:93;19465:3;19376:93;:::i;:::-;19494:2;19489:3;19485:12;19478:19;;19137:366;;;:::o;19509:419::-;19675:4;19713:2;19702:9;19698:18;19690:26;;19762:9;19756:4;19752:20;19748:1;19737:9;19733:17;19726:47;19790:131;19916:4;19790:131;:::i;:::-;19782:139;;19509:419;;;:::o;19934:243::-;20074:34;20070:1;20062:6;20058:14;20051:58;20143:26;20138:2;20130:6;20126:15;20119:51;19934:243;:::o;20183:366::-;20325:3;20346:67;20410:2;20405:3;20346:67;:::i;:::-;20339:74;;20422:93;20511:3;20422:93;:::i;:::-;20540:2;20535:3;20531:12;20524:19;;20183:366;;;:::o;20555:419::-;20721:4;20759:2;20748:9;20744:18;20736:26;;20808:9;20802:4;20798:20;20794:1;20783:9;20779:17;20772:47;20836:131;20962:4;20836:131;:::i;:::-;20828:139;;20555:419;;;:::o;20980:236::-;21120:34;21116:1;21108:6;21104:14;21097:58;21189:19;21184:2;21176:6;21172:15;21165:44;20980:236;:::o;21222:366::-;21364:3;21385:67;21449:2;21444:3;21385:67;:::i;:::-;21378:74;;21461:93;21550:3;21461:93;:::i;:::-;21579:2;21574:3;21570:12;21563:19;;21222:366;;;:::o;21594:419::-;21760:4;21798:2;21787:9;21783:18;21775:26;;21847:9;21841:4;21837:20;21833:1;21822:9;21818:17;21811:47;21875:131;22001:4;21875:131;:::i;:::-;21867:139;;21594:419;;;:::o;22019:180::-;22067:77;22064:1;22057:88;22164:4;22161:1;22154:15;22188:4;22185:1;22178:15;22205:191;22245:3;22264:20;22282:1;22264:20;:::i;:::-;22259:25;;22298:20;22316:1;22298:20;:::i;:::-;22293:25;;22341:1;22338;22334:9;22327:16;;22362:3;22359:1;22356:10;22353:36;;;22369:18;;:::i;:::-;22353:36;22205:191;;;;:::o;22402:194::-;22442:4;22462:20;22480:1;22462:20;:::i;:::-;22457:25;;22496:20;22514:1;22496:20;:::i;:::-;22491:25;;22540:1;22537;22533:9;22525:17;;22564:1;22558:4;22555:11;22552:37;;;22569:18;;:::i;:::-;22552:37;22402:194;;;;:::o;22602:180::-;22650:77;22647:1;22640:88;22747:4;22744:1;22737:15;22771:4;22768:1;22761:15;22788:233;22827:3;22850:24;22868:5;22850:24;:::i;:::-;22841:33;;22896:66;22889:5;22886:77;22883:103;;22966:18;;:::i;:::-;22883:103;23013:1;23006:5;23002:13;22995:20;;22788:233;;;:::o;23027:228::-;23167:34;23163:1;23155:6;23151:14;23144:58;23236:11;23231:2;23223:6;23219:15;23212:36;23027:228;:::o;23261:366::-;23403:3;23424:67;23488:2;23483:3;23424:67;:::i;:::-;23417:74;;23500:93;23589:3;23500:93;:::i;:::-;23618:2;23613:3;23609:12;23602:19;;23261:366;;;:::o;23633:419::-;23799:4;23837:2;23826:9;23822:18;23814:26;;23886:9;23880:4;23876:20;23872:1;23861:9;23857:17;23850:47;23914:131;24040:4;23914:131;:::i;:::-;23906:139;;23633:419;;;:::o;24058:229::-;24198:34;24194:1;24186:6;24182:14;24175:58;24267:12;24262:2;24254:6;24250:15;24243:37;24058:229;:::o;24293:366::-;24435:3;24456:67;24520:2;24515:3;24456:67;:::i;:::-;24449:74;;24532:93;24621:3;24532:93;:::i;:::-;24650:2;24645:3;24641:12;24634:19;;24293:366;;;:::o;24665:419::-;24831:4;24869:2;24858:9;24854:18;24846:26;;24918:9;24912:4;24908:20;24904:1;24893:9;24889:17;24882:47;24946:131;25072:4;24946:131;:::i;:::-;24938:139;;24665:419;;;:::o;25090:182::-;25230:34;25226:1;25218:6;25214:14;25207:58;25090:182;:::o;25278:366::-;25420:3;25441:67;25505:2;25500:3;25441:67;:::i;:::-;25434:74;;25517:93;25606:3;25517:93;:::i;:::-;25635:2;25630:3;25626:12;25619:19;;25278:366;;;:::o;25650:419::-;25816:4;25854:2;25843:9;25839:18;25831:26;;25903:9;25897:4;25893:20;25889:1;25878:9;25874:17;25867:47;25931:131;26057:4;25931:131;:::i;:::-;25923:139;;25650:419;;;:::o;26075:168::-;26215:20;26211:1;26203:6;26199:14;26192:44;26075:168;:::o;26249:366::-;26391:3;26412:67;26476:2;26471:3;26412:67;:::i;:::-;26405:74;;26488:93;26577:3;26488:93;:::i;:::-;26606:2;26601:3;26597:12;26590:19;;26249:366;;;:::o;26621:419::-;26787:4;26825:2;26814:9;26810:18;26802:26;;26874:9;26868:4;26864:20;26860:1;26849:9;26845:17;26838:47;26902:131;27028:4;26902:131;:::i;:::-;26894:139;;26621:419;;;:::o;27046:175::-;27186:27;27182:1;27174:6;27170:14;27163:51;27046:175;:::o;27227:366::-;27369:3;27390:67;27454:2;27449:3;27390:67;:::i;:::-;27383:74;;27466:93;27555:3;27466:93;:::i;:::-;27584:2;27579:3;27575:12;27568:19;;27227:366;;;:::o;27599:419::-;27765:4;27803:2;27792:9;27788:18;27780:26;;27852:9;27846:4;27842:20;27838:1;27827:9;27823:17;27816:47;27880:131;28006:4;27880:131;:::i;:::-;27872:139;;27599:419;;;:::o;28024:236::-;28164:34;28160:1;28152:6;28148:14;28141:58;28233:19;28228:2;28220:6;28216:15;28209:44;28024:236;:::o;28266:366::-;28408:3;28429:67;28493:2;28488:3;28429:67;:::i;:::-;28422:74;;28505:93;28594:3;28505:93;:::i;:::-;28623:2;28618:3;28614:12;28607:19;;28266:366;;;:::o;28638:419::-;28804:4;28842:2;28831:9;28827:18;28819:26;;28891:9;28885:4;28881:20;28877:1;28866:9;28862:17;28855:47;28919:131;29045:4;28919:131;:::i;:::-;28911:139;;28638:419;;;:::o;29063:148::-;29165:11;29202:3;29187:18;;29063:148;;;;:::o;29217:390::-;29323:3;29351:39;29384:5;29351:39;:::i;:::-;29406:89;29488:6;29483:3;29406:89;:::i;:::-;29399:96;;29504:65;29562:6;29557:3;29550:4;29543:5;29539:16;29504:65;:::i;:::-;29594:6;29589:3;29585:16;29578:23;;29327:280;29217:390;;;;:::o;29613:435::-;29793:3;29815:95;29906:3;29897:6;29815:95;:::i;:::-;29808:102;;29927:95;30018:3;30009:6;29927:95;:::i;:::-;29920:102;;30039:3;30032:10;;29613:435;;;;;:::o;30054:225::-;30194:34;30190:1;30182:6;30178:14;30171:58;30263:8;30258:2;30250:6;30246:15;30239:33;30054:225;:::o;30285:366::-;30427:3;30448:67;30512:2;30507:3;30448:67;:::i;:::-;30441:74;;30524:93;30613:3;30524:93;:::i;:::-;30642:2;30637:3;30633:12;30626:19;;30285:366;;;:::o;30657:419::-;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:231::-;31222:34;31218:1;31210:6;31206:14;31199:58;31291:14;31286:2;31278:6;31274:15;31267:39;31082:231;:::o;31319:366::-;31461:3;31482:67;31546:2;31541:3;31482:67;:::i;:::-;31475:74;;31558:93;31647:3;31558:93;:::i;:::-;31676:2;31671:3;31667:12;31660:19;;31319:366;;;:::o;31691:419::-;31857:4;31895:2;31884:9;31880:18;31872:26;;31944:9;31938:4;31934:20;31930:1;31919:9;31915:17;31908:47;31972:131;32098:4;31972:131;:::i;:::-;31964:139;;31691:419;;;:::o;32116:228::-;32256:34;32252:1;32244:6;32240:14;32233:58;32325:11;32320:2;32312:6;32308:15;32301:36;32116:228;:::o;32350:366::-;32492:3;32513:67;32577:2;32572:3;32513:67;:::i;:::-;32506:74;;32589:93;32678:3;32589:93;:::i;:::-;32707:2;32702:3;32698:12;32691:19;;32350:366;;;:::o;32722:419::-;32888:4;32926:2;32915:9;32911:18;32903:26;;32975:9;32969:4;32965:20;32961:1;32950:9;32946:17;32939:47;33003:131;33129:4;33003:131;:::i;:::-;32995:139;;32722:419;;;:::o;33147:223::-;33287:34;33283:1;33275:6;33271:14;33264:58;33356:6;33351:2;33343:6;33339:15;33332:31;33147:223;:::o;33376:366::-;33518:3;33539:67;33603:2;33598:3;33539:67;:::i;:::-;33532:74;;33615:93;33704:3;33615:93;:::i;:::-;33733:2;33728:3;33724:12;33717:19;;33376:366;;;:::o;33748:419::-;33914:4;33952:2;33941:9;33937:18;33929:26;;34001:9;33995:4;33991:20;33987:1;33976:9;33972:17;33965:47;34029:131;34155:4;34029:131;:::i;:::-;34021:139;;33748:419;;;:::o;34173:233::-;34313:34;34309:1;34301:6;34297:14;34290:58;34382:16;34377:2;34369:6;34365:15;34358:41;34173:233;:::o;34412:366::-;34554:3;34575:67;34639:2;34634:3;34575:67;:::i;:::-;34568:74;;34651:93;34740:3;34651:93;:::i;:::-;34769:2;34764:3;34760:12;34753:19;;34412:366;;;:::o;34784:419::-;34950:4;34988:2;34977:9;34973:18;34965:26;;35037:9;35031:4;35027:20;35023:1;35012:9;35008:17;35001:47;35065:131;35191:4;35065:131;:::i;:::-;35057:139;;34784:419;;;:::o;35209:141::-;35258:4;35281:3;35273:11;;35304:3;35301:1;35294:14;35338:4;35335:1;35325:18;35317:26;;35209:141;;;:::o;35356:93::-;35393:6;35440:2;35435;35428:5;35424:14;35420:23;35410:33;;35356:93;;;:::o;35455:107::-;35499:8;35549:5;35543:4;35539:16;35518:37;;35455:107;;;;:::o;35568:393::-;35637:6;35687:1;35675:10;35671:18;35710:97;35740:66;35729:9;35710:97;:::i;:::-;35828:39;35858:8;35847:9;35828:39;:::i;:::-;35816:51;;35900:4;35896:9;35889:5;35885:21;35876:30;;35949:4;35939:8;35935:19;35928:5;35925:30;35915:40;;35644:317;;35568:393;;;;;:::o;35967:60::-;35995:3;36016:5;36009:12;;35967:60;;;:::o;36033:142::-;36083:9;36116:53;36134:34;36143:24;36161:5;36143:24;:::i;:::-;36134:34;:::i;:::-;36116:53;:::i;:::-;36103:66;;36033:142;;;:::o;36181:75::-;36224:3;36245:5;36238:12;;36181:75;;;:::o;36262:269::-;36372:39;36403:7;36372:39;:::i;:::-;36433:91;36482:41;36506:16;36482:41;:::i;:::-;36474:6;36467:4;36461:11;36433:91;:::i;:::-;36427:4;36420:105;36338:193;36262:269;;;:::o;36537:73::-;36582:3;36537:73;:::o;36616:189::-;36693:32;;:::i;:::-;36734:65;36792:6;36784;36778:4;36734:65;:::i;:::-;36669:136;36616:189;;:::o;36811:186::-;36871:120;36888:3;36881:5;36878:14;36871:120;;;36942:39;36979:1;36972:5;36942:39;:::i;:::-;36915:1;36908:5;36904:13;36895:22;;36871:120;;;36811:186;;:::o;37003:543::-;37104:2;37099:3;37096:11;37093:446;;;37138:38;37170:5;37138:38;:::i;:::-;37222:29;37240:10;37222:29;:::i;:::-;37212:8;37208:44;37405:2;37393:10;37390:18;37387:49;;;37426:8;37411:23;;37387:49;37449:80;37505:22;37523:3;37505:22;:::i;:::-;37495:8;37491:37;37478:11;37449:80;:::i;:::-;37108:431;;37093:446;37003:543;;;:::o;37552:117::-;37606:8;37656:5;37650:4;37646:16;37625:37;;37552:117;;;;:::o;37675:169::-;37719:6;37752:51;37800:1;37796:6;37788:5;37785:1;37781:13;37752:51;:::i;:::-;37748:56;37833:4;37827;37823:15;37813:25;;37726:118;37675:169;;;;:::o;37849:295::-;37925:4;38071:29;38096:3;38090:4;38071:29;:::i;:::-;38063:37;;38133:3;38130:1;38126:11;38120:4;38117:21;38109:29;;37849:295;;;;:::o;38149:1395::-;38266:37;38299:3;38266:37;:::i;:::-;38368:18;38360:6;38357:30;38354:56;;;38390:18;;:::i;:::-;38354:56;38434:38;38466:4;38460:11;38434:38;:::i;:::-;38519:67;38579:6;38571;38565:4;38519:67;:::i;:::-;38613:1;38637:4;38624:17;;38669:2;38661:6;38658:14;38686:1;38681:618;;;;39343:1;39360:6;39357:77;;;39409:9;39404:3;39400:19;39394:26;39385:35;;39357:77;39460:67;39520:6;39513:5;39460:67;:::i;:::-;39454:4;39447:81;39316:222;38651:887;;38681:618;38733:4;38729:9;38721:6;38717:22;38767:37;38799:4;38767:37;:::i;:::-;38826:1;38840:208;38854:7;38851:1;38848:14;38840:208;;;38933:9;38928:3;38924:19;38918:26;38910:6;38903:42;38984:1;38976:6;38972:14;38962:24;;39031:2;39020:9;39016:18;39003:31;;38877:4;38874:1;38870:12;38865:17;;38840:208;;;39076:6;39067:7;39064:19;39061:179;;;39134:9;39129:3;39125:19;39119:26;39177:48;39219:4;39211:6;39207:17;39196:9;39177:48;:::i;:::-;39169:6;39162:64;39084:156;39061:179;39286:1;39282;39274:6;39270:14;39266:22;39260:4;39253:36;38688:611;;;38651:887;;38241:1303;;;38149:1395;;:::o;39550:237::-;39690:34;39686:1;39678:6;39674:14;39667:58;39759:20;39754:2;39746:6;39742:15;39735:45;39550:237;:::o;39793:366::-;39935:3;39956:67;40020:2;40015:3;39956:67;:::i;:::-;39949:74;;40032:93;40121:3;40032:93;:::i;:::-;40150:2;40145:3;40141:12;40134:19;;39793:366;;;:::o;40165:419::-;40331:4;40369:2;40358:9;40354:18;40346:26;;40418:9;40412:4;40408:20;40404:1;40393:9;40389:17;40382:47;40446:131;40572:4;40446:131;:::i;:::-;40438:139;;40165:419;;;:::o;40590:234::-;40730:34;40726:1;40718:6;40714:14;40707:58;40799:17;40794:2;40786:6;40782:15;40775:42;40590:234;:::o;40830:366::-;40972:3;40993:67;41057:2;41052:3;40993:67;:::i;:::-;40986:74;;41069:93;41158:3;41069:93;:::i;:::-;41187:2;41182:3;41178:12;41171:19;;40830:366;;;:::o;41202:419::-;41368:4;41406:2;41395:9;41391:18;41383:26;;41455:9;41449:4;41445:20;41441:1;41430:9;41426:17;41419:47;41483:131;41609:4;41483:131;:::i;:::-;41475:139;;41202:419;;;:::o;41627:98::-;41678:6;41712:5;41706:12;41696:22;;41627:98;;;:::o;41731:168::-;41814:11;41848:6;41843:3;41836:19;41888:4;41883:3;41879:14;41864:29;;41731:168;;;;:::o;41905:373::-;41991:3;42019:38;42051:5;42019:38;:::i;:::-;42073:70;42136:6;42131:3;42073:70;:::i;:::-;42066:77;;42152:65;42210:6;42205:3;42198:4;42191:5;42187:16;42152:65;:::i;:::-;42242:29;42264:6;42242:29;:::i;:::-;42237:3;42233:39;42226:46;;41995:283;41905:373;;;;:::o;42284:640::-;42479:4;42517:3;42506:9;42502:19;42494:27;;42531:71;42599:1;42588:9;42584:17;42575:6;42531:71;:::i;:::-;42612:72;42680:2;42669:9;42665:18;42656:6;42612:72;:::i;:::-;42694;42762:2;42751:9;42747:18;42738:6;42694:72;:::i;:::-;42813:9;42807:4;42803:20;42798:2;42787:9;42783:18;42776:48;42841:76;42912:4;42903:6;42841:76;:::i;:::-;42833:84;;42284:640;;;;;;;:::o;42930:141::-;42986:5;43017:6;43011:13;43002:22;;43033:32;43059:5;43033:32;:::i;:::-;42930:141;;;;:::o;43077:349::-;43146:6;43195:2;43183:9;43174:7;43170:23;43166:32;43163:119;;;43201:79;;:::i;:::-;43163:119;43321:1;43346:63;43401:7;43392:6;43381:9;43377:22;43346:63;:::i;:::-;43336:73;;43292:127;43077:349;;;;:::o;43432:180::-;43480:77;43477:1;43470:88;43577:4;43574:1;43567:15;43601:4;43598:1;43591:15;43618:185;43658:1;43675:20;43693:1;43675:20;:::i;:::-;43670:25;;43709:20;43727:1;43709:20;:::i;:::-;43704:25;;43748:1;43738:35;;43753:18;;:::i;:::-;43738:35;43795:1;43792;43788:9;43783:14;;43618:185;;;;:::o;43809:176::-;43841:1;43858:20;43876:1;43858:20;:::i;:::-;43853:25;;43892:20;43910:1;43892:20;:::i;:::-;43887:25;;43931:1;43921:35;;43936:18;;:::i;:::-;43921:35;43977:1;43974;43970:9;43965:14;;43809:176;;;;:::o;43991:182::-;44131:34;44127:1;44119:6;44115:14;44108:58;43991:182;:::o;44179:366::-;44321:3;44342:67;44406:2;44401:3;44342:67;:::i;:::-;44335:74;;44418:93;44507:3;44418:93;:::i;:::-;44536:2;44531:3;44527:12;44520:19;;44179:366;;;:::o;44551:419::-;44717:4;44755:2;44744:9;44740:18;44732:26;;44804:9;44798:4;44794:20;44790:1;44779:9;44775:17;44768:47;44832:131;44958:4;44832:131;:::i;:::-;44824:139;;44551:419;;;:::o;44976:178::-;45116:30;45112:1;45104:6;45100:14;45093:54;44976:178;:::o;45160:366::-;45302:3;45323:67;45387:2;45382:3;45323:67;:::i;:::-;45316:74;;45399:93;45488:3;45399:93;:::i;:::-;45517:2;45512:3;45508:12;45501:19;;45160:366;;;:::o;45532:419::-;45698:4;45736:2;45725:9;45721:18;45713:26;;45785:9;45779:4;45775:20;45771:1;45760:9;45756:17;45749:47;45813:131;45939:4;45813:131;:::i;:::-;45805:139;;45532:419;;;:::o

Swarm Source

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