ETH Price: $3,259.99 (-0.46%)
Gas: 2 Gwei

Token

AVOTAR (AVT)
 

Overview

Max Total Supply

0 AVT

Holders

101

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
avolab.eth
Balance
8 AVT
0xbd4e93f6fc94bbee948c7049b2d27b4f7c5290bd
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:
AVOLAB

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-27
*/

// File: @openzeppelin/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

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: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

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: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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);

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

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/AVOTARS.sol


pragma solidity ^0.8.7;



 
contract AVOLAB is ERC721, Ownable {
  using Counters for Counters.Counter;
  using Strings for uint256 ;
  Counters.Counter _tokenIds;
 
  mapping(uint256 => string) _tokenURIs;
  struct RenderToken {
      uint256 id;
      string uri;
  }
   constructor() ERC721("AVOTAR", "AVT") {}
  function _setTokenURI(uint256 tokenId, string memory _tokenURI)internal {
      _tokenURIs[tokenId]= _tokenURI;
  }
  function tokenURI(uint256 tokenId) public view virtual override returns(string memory) {
      require(_exists(tokenId));
      string memory _tokenURI = _tokenURIs[tokenId];
      return _tokenURI;
  }
 
  function getAllowTokens() public view returns (RenderToken[] memory) {
      uint256 lastesId = _tokenIds.current();
      uint256 counter = 0;
      RenderToken[] memory res = new RenderToken[](lastesId);
      for (uint256 i=0; i < lastesId; i++) {
          if(_exists(counter)){
              string memory uri = tokenURI(counter);
              res[counter] = RenderToken(counter, uri);
          }
          counter++;
      }
      return res;
  }
 
  function Mint(address recipient, string memory uri) public onlyOwner() returns (uint256) {
      uint256 newId = _tokenIds.current();
      _mint(recipient, newId);
      _tokenIds.increment();
      _setTokenURI(newId, uri);
      return newId;
   }
 
   function withdraw() public onlyOwner {
      (bool success, ) = payable(msg.sender).call{
          value: address(this).balance
      }("");
      require(success);
   }
 
}

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":"recipient","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"Mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllowTokens","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"internalType":"struct AVOLAB.RenderToken[]","name":"","type":"tuple[]"}],"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":"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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f41564f54415200000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4156540000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612e7980620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde146102f4578063c87b56dd14610310578063ce59dd9714610340578063e985e9c51461035e578063f2fde38b1461038e57610121565b806370a0823114610262578063715018a6146102925780638da5cb5b1461029c57806395d89b41146102ba578063a22cb465146102d857610121565b806323b872dd116100f457806323b872dd146101c05780633ccfd60b146101dc57806342842e0e146101e65780634c2f6dd3146102025780636352211e1461023257610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611ec0565b6103aa565b60405161014d91906123c2565b60405180910390f35b61015e61048c565b60405161016b91906123dd565b60405180910390f35b61018e60048036038101906101899190611f1a565b61051e565b60405161019b9190612339565b60405180910390f35b6101be60048036038101906101b99190611e80565b6105a3565b005b6101da60048036038101906101d59190611d0e565b6106bb565b005b6101e461071b565b005b61020060048036038101906101fb9190611d0e565b610810565b005b61021c60048036038101906102179190611e24565b610830565b60405161022991906125df565b60405180910390f35b61024c60048036038101906102479190611f1a565b6108e4565b6040516102599190612339565b60405180910390f35b61027c60048036038101906102779190611ca1565b610996565b60405161028991906125df565b60405180910390f35b61029a610a4e565b005b6102a4610ad6565b6040516102b19190612339565b60405180910390f35b6102c2610b00565b6040516102cf91906123dd565b60405180910390f35b6102f260048036038101906102ed9190611de4565b610b92565b005b61030e60048036038101906103099190611d61565b610ba8565b005b61032a60048036038101906103259190611f1a565b610c0a565b60405161033791906123dd565b60405180910390f35b610348610cc7565b60405161035591906123a0565b60405180910390f35b61037860048036038101906103739190611cce565b610db6565b60405161038591906123c2565b60405180910390f35b6103a860048036038101906103a39190611ca1565b610e4a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610485575061048482610f42565b5b9050919050565b60606000805461049b9061284e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c79061284e565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b600061052982610fac565b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f9061255f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105ae826108e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106169061259f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661063e611018565b73ffffffffffffffffffffffffffffffffffffffff16148061066d575061066c81610667611018565b610db6565b5b6106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906124df565b60405180910390fd5b6106b68383611020565b505050565b6106cc6106c6611018565b826110d9565b61070b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610702906125bf565b60405180910390fd5b6107168383836111b7565b505050565b610723611018565b73ffffffffffffffffffffffffffffffffffffffff16610741610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e9061257f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516107bd90612324565b60006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061080d57600080fd5b50565b61082b83838360405180602001604052806000815250610ba8565b505050565b600061083a611018565b73ffffffffffffffffffffffffffffffffffffffff16610858610ad6565b73ffffffffffffffffffffffffffffffffffffffff16146108ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a59061257f565b60405180910390fd5b60006108ba600761141e565b90506108c6848261142c565b6108d06007611606565b6108da818461161c565b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109849061251f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906124ff565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a56611018565b73ffffffffffffffffffffffffffffffffffffffff16610a74610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac19061257f565b60405180910390fd5b610ad46000611648565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b0f9061284e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3b9061284e565b8015610b885780601f10610b5d57610100808354040283529160200191610b88565b820191906000526020600020905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b610ba4610b9d611018565b838361170e565b5050565b610bb9610bb3611018565b836110d9565b610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef906125bf565b60405180910390fd5b610c048484848461187b565b50505050565b6060610c1582610fac565b610c1e57600080fd5b6000600860008481526020019081526020016000208054610c3e9061284e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6a9061284e565b8015610cb75780601f10610c8c57610100808354040283529160200191610cb7565b820191906000526020600020905b815481529060010190602001808311610c9a57829003601f168201915b5050505050905080915050919050565b60606000610cd5600761141e565b90506000808267ffffffffffffffff811115610cf457610cf3612987565b5b604051908082528060200260200182016040528015610d2d57816020015b610d1a611a9b565b815260200190600190039081610d125790505b50905060005b83811015610dac57610d4483610fac565b15610d8b576000610d5484610c0a565b9050604051806040016040528085815260200182815250838581518110610d7e57610d7d612958565b5b6020026020010181905250505b8280610d96906128b1565b9350508080610da4906128b1565b915050610d33565b5080935050505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e52611018565b73ffffffffffffffffffffffffffffffffffffffff16610e70610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd9061257f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d9061241f565b60405180910390fd5b610f3f81611648565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611093836108e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110e482610fac565b611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906124bf565b60405180910390fd5b600061112e836108e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061119d57508373ffffffffffffffffffffffffffffffffffffffff166111858461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b806111ae57506111ad8185610db6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166111d7826108e4565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061243f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061247f565b60405180910390fd5b6112a88383836118d7565b6112b3600082611020565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113039190612764565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461135a919061270e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114198383836118dc565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061253f565b60405180910390fd5b6114a581610fac565b156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061245f565b60405180910390fd5b6114f1600083836118d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611541919061270e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611602600083836118dc565b5050565b6001816000016000828254019250508190555050565b80600860008481526020019081526020016000209080519060200190611643929190611ab5565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061249f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161186e91906123c2565b60405180910390a3505050565b6118868484846111b7565b611892848484846118e1565b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906123ff565b60405180910390fd5b50505050565b505050565b505050565b60006119028473ffffffffffffffffffffffffffffffffffffffff16611a78565b15611a6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261192b611018565b8786866040518563ffffffff1660e01b815260040161194d9493929190612354565b602060405180830381600087803b15801561196757600080fd5b505af192505050801561199857506040513d601f19601f820116820180604052508101906119959190611eed565b60015b611a1b573d80600081146119c8576040519150601f19603f3d011682016040523d82523d6000602084013e6119cd565b606091505b50600081511415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906123ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a70565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b604051806040016040528060008152602001606081525090565b828054611ac19061284e565b90600052602060002090601f016020900481019282611ae35760008555611b2a565b82601f10611afc57805160ff1916838001178555611b2a565b82800160010185558215611b2a579182015b82811115611b29578251825591602001919060010190611b0e565b5b509050611b379190611b3b565b5090565b5b80821115611b54576000816000905550600101611b3c565b5090565b6000611b6b611b668461261f565b6125fa565b905082815260208101848484011115611b8757611b866129bb565b5b611b9284828561280c565b509392505050565b6000611bad611ba884612650565b6125fa565b905082815260208101848484011115611bc957611bc86129bb565b5b611bd484828561280c565b509392505050565b600081359050611beb81612de7565b92915050565b600081359050611c0081612dfe565b92915050565b600081359050611c1581612e15565b92915050565b600081519050611c2a81612e15565b92915050565b600082601f830112611c4557611c446129b6565b5b8135611c55848260208601611b58565b91505092915050565b600082601f830112611c7357611c726129b6565b5b8135611c83848260208601611b9a565b91505092915050565b600081359050611c9b81612e2c565b92915050565b600060208284031215611cb757611cb66129c5565b5b6000611cc584828501611bdc565b91505092915050565b60008060408385031215611ce557611ce46129c5565b5b6000611cf385828601611bdc565b9250506020611d0485828601611bdc565b9150509250929050565b600080600060608486031215611d2757611d266129c5565b5b6000611d3586828701611bdc565b9350506020611d4686828701611bdc565b9250506040611d5786828701611c8c565b9150509250925092565b60008060008060808587031215611d7b57611d7a6129c5565b5b6000611d8987828801611bdc565b9450506020611d9a87828801611bdc565b9350506040611dab87828801611c8c565b925050606085013567ffffffffffffffff811115611dcc57611dcb6129c0565b5b611dd887828801611c30565b91505092959194509250565b60008060408385031215611dfb57611dfa6129c5565b5b6000611e0985828601611bdc565b9250506020611e1a85828601611bf1565b9150509250929050565b60008060408385031215611e3b57611e3a6129c5565b5b6000611e4985828601611bdc565b925050602083013567ffffffffffffffff811115611e6a57611e696129c0565b5b611e7685828601611c5e565b9150509250929050565b60008060408385031215611e9757611e966129c5565b5b6000611ea585828601611bdc565b9250506020611eb685828601611c8c565b9150509250929050565b600060208284031215611ed657611ed56129c5565b5b6000611ee484828501611c06565b91505092915050565b600060208284031215611f0357611f026129c5565b5b6000611f1184828501611c1b565b91505092915050565b600060208284031215611f3057611f2f6129c5565b5b6000611f3e84828501611c8c565b91505092915050565b6000611f5383836122c9565b905092915050565b611f6481612798565b82525050565b6000611f7582612691565b611f7f81856126bf565b935083602082028501611f9185612681565b8060005b85811015611fcd5784840389528151611fae8582611f47565b9450611fb9836126b2565b925060208a01995050600181019050611f95565b50829750879550505050505092915050565b611fe8816127aa565b82525050565b6000611ff98261269c565b61200381856126d0565b935061201381856020860161281b565b61201c816129ca565b840191505092915050565b6000612032826126a7565b61203c81856126ec565b935061204c81856020860161281b565b612055816129ca565b840191505092915050565b600061206b826126a7565b61207581856126fd565b935061208581856020860161281b565b61208e816129ca565b840191505092915050565b60006120a66032836126fd565b91506120b1826129db565b604082019050919050565b60006120c96026836126fd565b91506120d482612a2a565b604082019050919050565b60006120ec6025836126fd565b91506120f782612a79565b604082019050919050565b600061210f601c836126fd565b915061211a82612ac8565b602082019050919050565b60006121326024836126fd565b915061213d82612af1565b604082019050919050565b60006121556019836126fd565b915061216082612b40565b602082019050919050565b6000612178602c836126fd565b915061218382612b69565b604082019050919050565b600061219b6038836126fd565b91506121a682612bb8565b604082019050919050565b60006121be602a836126fd565b91506121c982612c07565b604082019050919050565b60006121e16029836126fd565b91506121ec82612c56565b604082019050919050565b60006122046020836126fd565b915061220f82612ca5565b602082019050919050565b6000612227602c836126fd565b915061223282612cce565b604082019050919050565b600061224a6020836126fd565b915061225582612d1d565b602082019050919050565b600061226d6021836126fd565b915061227882612d46565b604082019050919050565b60006122906000836126e1565b915061229b82612d95565b600082019050919050565b60006122b36031836126fd565b91506122be82612d98565b604082019050919050565b60006040830160008301516122e16000860182612306565b50602083015184820360208601526122f98282612027565b9150508091505092915050565b61230f81612802565b82525050565b61231e81612802565b82525050565b600061232f82612283565b9150819050919050565b600060208201905061234e6000830184611f5b565b92915050565b60006080820190506123696000830187611f5b565b6123766020830186611f5b565b6123836040830185612315565b81810360608301526123958184611fee565b905095945050505050565b600060208201905081810360008301526123ba8184611f6a565b905092915050565b60006020820190506123d76000830184611fdf565b92915050565b600060208201905081810360008301526123f78184612060565b905092915050565b6000602082019050818103600083015261241881612099565b9050919050565b60006020820190508181036000830152612438816120bc565b9050919050565b60006020820190508181036000830152612458816120df565b9050919050565b6000602082019050818103600083015261247881612102565b9050919050565b6000602082019050818103600083015261249881612125565b9050919050565b600060208201905081810360008301526124b881612148565b9050919050565b600060208201905081810360008301526124d88161216b565b9050919050565b600060208201905081810360008301526124f88161218e565b9050919050565b60006020820190508181036000830152612518816121b1565b9050919050565b60006020820190508181036000830152612538816121d4565b9050919050565b60006020820190508181036000830152612558816121f7565b9050919050565b600060208201905081810360008301526125788161221a565b9050919050565b600060208201905081810360008301526125988161223d565b9050919050565b600060208201905081810360008301526125b881612260565b9050919050565b600060208201905081810360008301526125d8816122a6565b9050919050565b60006020820190506125f46000830184612315565b92915050565b6000612604612615565b90506126108282612880565b919050565b6000604051905090565b600067ffffffffffffffff82111561263a57612639612987565b5b612643826129ca565b9050602081019050919050565b600067ffffffffffffffff82111561266b5761266a612987565b5b612674826129ca565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061271982612802565b915061272483612802565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612759576127586128fa565b5b828201905092915050565b600061276f82612802565b915061277a83612802565b92508282101561278d5761278c6128fa565b5b828203905092915050565b60006127a3826127e2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561283957808201518184015260208101905061281e565b83811115612848576000848401525b50505050565b6000600282049050600182168061286657607f821691505b6020821081141561287a57612879612929565b5b50919050565b612889826129ca565b810181811067ffffffffffffffff821117156128a8576128a7612987565b5b80604052505050565b60006128bc82612802565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128ef576128ee6128fa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612df081612798565b8114612dfb57600080fd5b50565b612e07816127aa565b8114612e1257600080fd5b50565b612e1e816127b6565b8114612e2957600080fd5b50565b612e3581612802565b8114612e4057600080fd5b5056fea26469706673582212203d0dc521e1362fe003ac5f47d3935f2664b877e226487b0d7375bf31f85fd42264736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde146102f4578063c87b56dd14610310578063ce59dd9714610340578063e985e9c51461035e578063f2fde38b1461038e57610121565b806370a0823114610262578063715018a6146102925780638da5cb5b1461029c57806395d89b41146102ba578063a22cb465146102d857610121565b806323b872dd116100f457806323b872dd146101c05780633ccfd60b146101dc57806342842e0e146101e65780634c2f6dd3146102025780636352211e1461023257610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611ec0565b6103aa565b60405161014d91906123c2565b60405180910390f35b61015e61048c565b60405161016b91906123dd565b60405180910390f35b61018e60048036038101906101899190611f1a565b61051e565b60405161019b9190612339565b60405180910390f35b6101be60048036038101906101b99190611e80565b6105a3565b005b6101da60048036038101906101d59190611d0e565b6106bb565b005b6101e461071b565b005b61020060048036038101906101fb9190611d0e565b610810565b005b61021c60048036038101906102179190611e24565b610830565b60405161022991906125df565b60405180910390f35b61024c60048036038101906102479190611f1a565b6108e4565b6040516102599190612339565b60405180910390f35b61027c60048036038101906102779190611ca1565b610996565b60405161028991906125df565b60405180910390f35b61029a610a4e565b005b6102a4610ad6565b6040516102b19190612339565b60405180910390f35b6102c2610b00565b6040516102cf91906123dd565b60405180910390f35b6102f260048036038101906102ed9190611de4565b610b92565b005b61030e60048036038101906103099190611d61565b610ba8565b005b61032a60048036038101906103259190611f1a565b610c0a565b60405161033791906123dd565b60405180910390f35b610348610cc7565b60405161035591906123a0565b60405180910390f35b61037860048036038101906103739190611cce565b610db6565b60405161038591906123c2565b60405180910390f35b6103a860048036038101906103a39190611ca1565b610e4a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610485575061048482610f42565b5b9050919050565b60606000805461049b9061284e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c79061284e565b80156105145780601f106104e957610100808354040283529160200191610514565b820191906000526020600020905b8154815290600101906020018083116104f757829003601f168201915b5050505050905090565b600061052982610fac565b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f9061255f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105ae826108e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106169061259f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661063e611018565b73ffffffffffffffffffffffffffffffffffffffff16148061066d575061066c81610667611018565b610db6565b5b6106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906124df565b60405180910390fd5b6106b68383611020565b505050565b6106cc6106c6611018565b826110d9565b61070b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610702906125bf565b60405180910390fd5b6107168383836111b7565b505050565b610723611018565b73ffffffffffffffffffffffffffffffffffffffff16610741610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e9061257f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516107bd90612324565b60006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061080d57600080fd5b50565b61082b83838360405180602001604052806000815250610ba8565b505050565b600061083a611018565b73ffffffffffffffffffffffffffffffffffffffff16610858610ad6565b73ffffffffffffffffffffffffffffffffffffffff16146108ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a59061257f565b60405180910390fd5b60006108ba600761141e565b90506108c6848261142c565b6108d06007611606565b6108da818461161c565b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109849061251f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906124ff565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a56611018565b73ffffffffffffffffffffffffffffffffffffffff16610a74610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac19061257f565b60405180910390fd5b610ad46000611648565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b0f9061284e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3b9061284e565b8015610b885780601f10610b5d57610100808354040283529160200191610b88565b820191906000526020600020905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b610ba4610b9d611018565b838361170e565b5050565b610bb9610bb3611018565b836110d9565b610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef906125bf565b60405180910390fd5b610c048484848461187b565b50505050565b6060610c1582610fac565b610c1e57600080fd5b6000600860008481526020019081526020016000208054610c3e9061284e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6a9061284e565b8015610cb75780601f10610c8c57610100808354040283529160200191610cb7565b820191906000526020600020905b815481529060010190602001808311610c9a57829003601f168201915b5050505050905080915050919050565b60606000610cd5600761141e565b90506000808267ffffffffffffffff811115610cf457610cf3612987565b5b604051908082528060200260200182016040528015610d2d57816020015b610d1a611a9b565b815260200190600190039081610d125790505b50905060005b83811015610dac57610d4483610fac565b15610d8b576000610d5484610c0a565b9050604051806040016040528085815260200182815250838581518110610d7e57610d7d612958565b5b6020026020010181905250505b8280610d96906128b1565b9350508080610da4906128b1565b915050610d33565b5080935050505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e52611018565b73ffffffffffffffffffffffffffffffffffffffff16610e70610ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd9061257f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d9061241f565b60405180910390fd5b610f3f81611648565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611093836108e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110e482610fac565b611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906124bf565b60405180910390fd5b600061112e836108e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061119d57508373ffffffffffffffffffffffffffffffffffffffff166111858461051e565b73ffffffffffffffffffffffffffffffffffffffff16145b806111ae57506111ad8185610db6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166111d7826108e4565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061243f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061247f565b60405180910390fd5b6112a88383836118d7565b6112b3600082611020565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113039190612764565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461135a919061270e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114198383836118dc565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061253f565b60405180910390fd5b6114a581610fac565b156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061245f565b60405180910390fd5b6114f1600083836118d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611541919061270e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611602600083836118dc565b5050565b6001816000016000828254019250508190555050565b80600860008481526020019081526020016000209080519060200190611643929190611ab5565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061249f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161186e91906123c2565b60405180910390a3505050565b6118868484846111b7565b611892848484846118e1565b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906123ff565b60405180910390fd5b50505050565b505050565b505050565b60006119028473ffffffffffffffffffffffffffffffffffffffff16611a78565b15611a6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261192b611018565b8786866040518563ffffffff1660e01b815260040161194d9493929190612354565b602060405180830381600087803b15801561196757600080fd5b505af192505050801561199857506040513d601f19601f820116820180604052508101906119959190611eed565b60015b611a1b573d80600081146119c8576040519150601f19603f3d011682016040523d82523d6000602084013e6119cd565b606091505b50600081511415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906123ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a70565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b604051806040016040528060008152602001606081525090565b828054611ac19061284e565b90600052602060002090601f016020900481019282611ae35760008555611b2a565b82601f10611afc57805160ff1916838001178555611b2a565b82800160010185558215611b2a579182015b82811115611b29578251825591602001919060010190611b0e565b5b509050611b379190611b3b565b5090565b5b80821115611b54576000816000905550600101611b3c565b5090565b6000611b6b611b668461261f565b6125fa565b905082815260208101848484011115611b8757611b866129bb565b5b611b9284828561280c565b509392505050565b6000611bad611ba884612650565b6125fa565b905082815260208101848484011115611bc957611bc86129bb565b5b611bd484828561280c565b509392505050565b600081359050611beb81612de7565b92915050565b600081359050611c0081612dfe565b92915050565b600081359050611c1581612e15565b92915050565b600081519050611c2a81612e15565b92915050565b600082601f830112611c4557611c446129b6565b5b8135611c55848260208601611b58565b91505092915050565b600082601f830112611c7357611c726129b6565b5b8135611c83848260208601611b9a565b91505092915050565b600081359050611c9b81612e2c565b92915050565b600060208284031215611cb757611cb66129c5565b5b6000611cc584828501611bdc565b91505092915050565b60008060408385031215611ce557611ce46129c5565b5b6000611cf385828601611bdc565b9250506020611d0485828601611bdc565b9150509250929050565b600080600060608486031215611d2757611d266129c5565b5b6000611d3586828701611bdc565b9350506020611d4686828701611bdc565b9250506040611d5786828701611c8c565b9150509250925092565b60008060008060808587031215611d7b57611d7a6129c5565b5b6000611d8987828801611bdc565b9450506020611d9a87828801611bdc565b9350506040611dab87828801611c8c565b925050606085013567ffffffffffffffff811115611dcc57611dcb6129c0565b5b611dd887828801611c30565b91505092959194509250565b60008060408385031215611dfb57611dfa6129c5565b5b6000611e0985828601611bdc565b9250506020611e1a85828601611bf1565b9150509250929050565b60008060408385031215611e3b57611e3a6129c5565b5b6000611e4985828601611bdc565b925050602083013567ffffffffffffffff811115611e6a57611e696129c0565b5b611e7685828601611c5e565b9150509250929050565b60008060408385031215611e9757611e966129c5565b5b6000611ea585828601611bdc565b9250506020611eb685828601611c8c565b9150509250929050565b600060208284031215611ed657611ed56129c5565b5b6000611ee484828501611c06565b91505092915050565b600060208284031215611f0357611f026129c5565b5b6000611f1184828501611c1b565b91505092915050565b600060208284031215611f3057611f2f6129c5565b5b6000611f3e84828501611c8c565b91505092915050565b6000611f5383836122c9565b905092915050565b611f6481612798565b82525050565b6000611f7582612691565b611f7f81856126bf565b935083602082028501611f9185612681565b8060005b85811015611fcd5784840389528151611fae8582611f47565b9450611fb9836126b2565b925060208a01995050600181019050611f95565b50829750879550505050505092915050565b611fe8816127aa565b82525050565b6000611ff98261269c565b61200381856126d0565b935061201381856020860161281b565b61201c816129ca565b840191505092915050565b6000612032826126a7565b61203c81856126ec565b935061204c81856020860161281b565b612055816129ca565b840191505092915050565b600061206b826126a7565b61207581856126fd565b935061208581856020860161281b565b61208e816129ca565b840191505092915050565b60006120a66032836126fd565b91506120b1826129db565b604082019050919050565b60006120c96026836126fd565b91506120d482612a2a565b604082019050919050565b60006120ec6025836126fd565b91506120f782612a79565b604082019050919050565b600061210f601c836126fd565b915061211a82612ac8565b602082019050919050565b60006121326024836126fd565b915061213d82612af1565b604082019050919050565b60006121556019836126fd565b915061216082612b40565b602082019050919050565b6000612178602c836126fd565b915061218382612b69565b604082019050919050565b600061219b6038836126fd565b91506121a682612bb8565b604082019050919050565b60006121be602a836126fd565b91506121c982612c07565b604082019050919050565b60006121e16029836126fd565b91506121ec82612c56565b604082019050919050565b60006122046020836126fd565b915061220f82612ca5565b602082019050919050565b6000612227602c836126fd565b915061223282612cce565b604082019050919050565b600061224a6020836126fd565b915061225582612d1d565b602082019050919050565b600061226d6021836126fd565b915061227882612d46565b604082019050919050565b60006122906000836126e1565b915061229b82612d95565b600082019050919050565b60006122b36031836126fd565b91506122be82612d98565b604082019050919050565b60006040830160008301516122e16000860182612306565b50602083015184820360208601526122f98282612027565b9150508091505092915050565b61230f81612802565b82525050565b61231e81612802565b82525050565b600061232f82612283565b9150819050919050565b600060208201905061234e6000830184611f5b565b92915050565b60006080820190506123696000830187611f5b565b6123766020830186611f5b565b6123836040830185612315565b81810360608301526123958184611fee565b905095945050505050565b600060208201905081810360008301526123ba8184611f6a565b905092915050565b60006020820190506123d76000830184611fdf565b92915050565b600060208201905081810360008301526123f78184612060565b905092915050565b6000602082019050818103600083015261241881612099565b9050919050565b60006020820190508181036000830152612438816120bc565b9050919050565b60006020820190508181036000830152612458816120df565b9050919050565b6000602082019050818103600083015261247881612102565b9050919050565b6000602082019050818103600083015261249881612125565b9050919050565b600060208201905081810360008301526124b881612148565b9050919050565b600060208201905081810360008301526124d88161216b565b9050919050565b600060208201905081810360008301526124f88161218e565b9050919050565b60006020820190508181036000830152612518816121b1565b9050919050565b60006020820190508181036000830152612538816121d4565b9050919050565b60006020820190508181036000830152612558816121f7565b9050919050565b600060208201905081810360008301526125788161221a565b9050919050565b600060208201905081810360008301526125988161223d565b9050919050565b600060208201905081810360008301526125b881612260565b9050919050565b600060208201905081810360008301526125d8816122a6565b9050919050565b60006020820190506125f46000830184612315565b92915050565b6000612604612615565b90506126108282612880565b919050565b6000604051905090565b600067ffffffffffffffff82111561263a57612639612987565b5b612643826129ca565b9050602081019050919050565b600067ffffffffffffffff82111561266b5761266a612987565b5b612674826129ca565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061271982612802565b915061272483612802565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612759576127586128fa565b5b828201905092915050565b600061276f82612802565b915061277a83612802565b92508282101561278d5761278c6128fa565b5b828203905092915050565b60006127a3826127e2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561283957808201518184015260208101905061281e565b83811115612848576000848401525b50505050565b6000600282049050600182168061286657607f821691505b6020821081141561287a57612879612929565b5b50919050565b612889826129ca565b810181811067ffffffffffffffff821117156128a8576128a7612987565b5b80604052505050565b60006128bc82612802565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128ef576128ee6128fa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612df081612798565b8114612dfb57600080fd5b50565b612e07816127aa565b8114612e1257600080fd5b50565b612e1e816127b6565b8114612e2957600080fd5b50565b612e3581612802565b8114612e4057600080fd5b5056fea26469706673582212203d0dc521e1362fe003ac5f47d3935f2664b877e226487b0d7375bf31f85fd42264736f6c63430008070033

Deployed Bytecode Sourcemap

38758:1551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25574:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28828:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40128:175;;;:::i;:::-;;29238:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39864:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;:::i;:::-;;5544:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39178:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39391:466;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28597:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;40128:175::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40175:12:::1;40201:10;40193:24;;40237:21;40193:78;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40174:97;;;40288:7;40280:16;;;::::0;::::1;;40165:138;40128:175::o:0;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;39864:256::-;39944:7;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39962:13:::1;39978:19;:9;:17;:19::i;:::-;39962:35;;40006:23;40012:9;40023:5;40006;:23::i;:::-;40038:21;:9;:19;:21::i;:::-;40068:24;40081:5;40088:3;40068:12;:24::i;:::-;40108:5;40101:12;;;39864:256:::0;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;39178:206::-;39250:13;39282:16;39290:7;39282;:16::i;:::-;39274:25;;;;;;39308:23;39334:10;:19;39345:7;39334:19;;;;;;;;;;;39308:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39369:9;39362:16;;;39178:206;;;:::o;39391:466::-;39438:20;39469:16;39488:19;:9;:17;:19::i;:::-;39469:38;;39516:15;39544:24;39589:8;39571:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;39544:54;;39612:9;39607:226;39629:8;39625:1;:12;39607:226;;;39660:16;39668:7;39660;:16::i;:::-;39657:145;;;39694:17;39714;39723:7;39714:8;:17::i;:::-;39694:37;;39763:25;;;;;;;;39775:7;39763:25;;;;39784:3;39763:25;;;39748:3;39752:7;39748:12;;;;;;;;:::i;:::-;;;;;;;:40;;;;39677:125;39657:145;39814:9;;;;;:::i;:::-;;;;39639:3;;;;;:::i;:::-;;;;39607:226;;;;39848:3;39841:10;;;;;39391:466;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;39057:117::-;39159:9;39138:10;:19;39149:7;39138:19;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;39057:117;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:654::-;5218:6;5226;5275:2;5263:9;5254:7;5250:23;5246:32;5243:119;;;5281:79;;:::i;:::-;5243:119;5401:1;5426:53;5471:7;5462:6;5451:9;5447:22;5426:53;:::i;:::-;5416:63;;5372:117;5556:2;5545:9;5541:18;5528:32;5587:18;5579:6;5576:30;5573:117;;;5609:79;;:::i;:::-;5573:117;5714:63;5769:7;5760:6;5749:9;5745:22;5714:63;:::i;:::-;5704:73;;5499:288;5140:654;;;;;:::o;5800:474::-;5868:6;5876;5925:2;5913:9;5904:7;5900:23;5896:32;5893:119;;;5931:79;;:::i;:::-;5893:119;6051:1;6076:53;6121:7;6112:6;6101:9;6097:22;6076:53;:::i;:::-;6066:63;;6022:117;6178:2;6204:53;6249:7;6240:6;6229:9;6225:22;6204:53;:::i;:::-;6194:63;;6149:118;5800:474;;;;;:::o;6280:327::-;6338:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:119;;;6393:79;;:::i;:::-;6355:119;6513:1;6538:52;6582:7;6573:6;6562:9;6558:22;6538:52;:::i;:::-;6528:62;;6484:116;6280:327;;;;:::o;6613:349::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:119;;;6737:79;;:::i;:::-;6699:119;6857:1;6882:63;6937:7;6928:6;6917:9;6913:22;6882:63;:::i;:::-;6872:73;;6828:127;6613:349;;;;:::o;6968:329::-;7027:6;7076:2;7064:9;7055:7;7051:23;7047:32;7044:119;;;7082:79;;:::i;:::-;7044:119;7202:1;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7173:117;6968:329;;;;:::o;7303:272::-;7430:10;7465:104;7565:3;7557:6;7465:104;:::i;:::-;7451:118;;7303:272;;;;:::o;7581:118::-;7668:24;7686:5;7668:24;:::i;:::-;7663:3;7656:37;7581:118;;:::o;7771:1143::-;7948:3;7977:83;8054:5;7977:83;:::i;:::-;8076:115;8184:6;8179:3;8076:115;:::i;:::-;8069:122;;8217:3;8262:4;8254:6;8250:17;8245:3;8241:27;8292:85;8371:5;8292:85;:::i;:::-;8400:7;8431:1;8416:453;8441:6;8438:1;8435:13;8416:453;;;8512:9;8506:4;8502:20;8497:3;8490:33;8563:6;8557:13;8591:122;8708:4;8693:13;8591:122;:::i;:::-;8583:130;;8736:89;8818:6;8736:89;:::i;:::-;8726:99;;8854:4;8849:3;8845:14;8838:21;;8476:393;8463:1;8460;8456:9;8451:14;;8416:453;;;8420:14;8885:4;8878:11;;8905:3;8898:10;;7953:961;;;;;7771:1143;;;;:::o;8920:109::-;9001:21;9016:5;9001:21;:::i;:::-;8996:3;8989:34;8920:109;;:::o;9035:360::-;9121:3;9149:38;9181:5;9149:38;:::i;:::-;9203:70;9266:6;9261:3;9203:70;:::i;:::-;9196:77;;9282:52;9327:6;9322:3;9315:4;9308:5;9304:16;9282:52;:::i;:::-;9359:29;9381:6;9359:29;:::i;:::-;9354:3;9350:39;9343:46;;9125:270;9035:360;;;;:::o;9401:344::-;9479:3;9507:39;9540:5;9507:39;:::i;:::-;9562:61;9616:6;9611:3;9562:61;:::i;:::-;9555:68;;9632:52;9677:6;9672:3;9665:4;9658:5;9654:16;9632:52;:::i;:::-;9709:29;9731:6;9709:29;:::i;:::-;9704:3;9700:39;9693:46;;9483:262;9401:344;;;;:::o;9751:364::-;9839:3;9867:39;9900:5;9867:39;:::i;:::-;9922:71;9986:6;9981:3;9922:71;:::i;:::-;9915:78;;10002:52;10047:6;10042:3;10035:4;10028:5;10024:16;10002:52;:::i;:::-;10079:29;10101:6;10079:29;:::i;:::-;10074:3;10070:39;10063:46;;9843:272;9751:364;;;;:::o;10121:366::-;10263:3;10284:67;10348:2;10343:3;10284:67;:::i;:::-;10277:74;;10360:93;10449:3;10360:93;:::i;:::-;10478:2;10473:3;10469:12;10462:19;;10121:366;;;:::o;10493:::-;10635:3;10656:67;10720:2;10715:3;10656:67;:::i;:::-;10649:74;;10732:93;10821:3;10732:93;:::i;:::-;10850:2;10845:3;10841:12;10834:19;;10493:366;;;:::o;10865:::-;11007:3;11028:67;11092:2;11087:3;11028:67;:::i;:::-;11021:74;;11104:93;11193:3;11104:93;:::i;:::-;11222:2;11217:3;11213:12;11206:19;;10865:366;;;:::o;11237:::-;11379:3;11400:67;11464:2;11459:3;11400:67;:::i;:::-;11393:74;;11476:93;11565:3;11476:93;:::i;:::-;11594:2;11589:3;11585:12;11578:19;;11237:366;;;:::o;11609:::-;11751:3;11772:67;11836:2;11831:3;11772:67;:::i;:::-;11765:74;;11848:93;11937:3;11848:93;:::i;:::-;11966:2;11961:3;11957:12;11950:19;;11609:366;;;:::o;11981:::-;12123:3;12144:67;12208:2;12203:3;12144:67;:::i;:::-;12137:74;;12220:93;12309:3;12220:93;:::i;:::-;12338:2;12333:3;12329:12;12322:19;;11981:366;;;:::o;12353:::-;12495:3;12516:67;12580:2;12575:3;12516:67;:::i;:::-;12509:74;;12592:93;12681:3;12592:93;:::i;:::-;12710:2;12705:3;12701:12;12694:19;;12353:366;;;:::o;12725:::-;12867:3;12888:67;12952:2;12947:3;12888:67;:::i;:::-;12881:74;;12964:93;13053:3;12964:93;:::i;:::-;13082:2;13077:3;13073:12;13066:19;;12725:366;;;:::o;13097:::-;13239:3;13260:67;13324:2;13319:3;13260:67;:::i;:::-;13253:74;;13336:93;13425:3;13336:93;:::i;:::-;13454:2;13449:3;13445:12;13438:19;;13097:366;;;:::o;13469:::-;13611:3;13632:67;13696:2;13691:3;13632:67;:::i;:::-;13625:74;;13708:93;13797:3;13708:93;:::i;:::-;13826:2;13821:3;13817:12;13810:19;;13469:366;;;:::o;13841:::-;13983:3;14004:67;14068:2;14063:3;14004:67;:::i;:::-;13997:74;;14080:93;14169:3;14080:93;:::i;:::-;14198:2;14193:3;14189:12;14182:19;;13841:366;;;:::o;14213:::-;14355:3;14376:67;14440:2;14435:3;14376:67;:::i;:::-;14369:74;;14452:93;14541:3;14452:93;:::i;:::-;14570:2;14565:3;14561:12;14554:19;;14213:366;;;:::o;14585:::-;14727:3;14748:67;14812:2;14807:3;14748:67;:::i;:::-;14741:74;;14824:93;14913:3;14824:93;:::i;:::-;14942:2;14937:3;14933:12;14926:19;;14585:366;;;:::o;14957:::-;15099:3;15120:67;15184:2;15179:3;15120:67;:::i;:::-;15113:74;;15196:93;15285:3;15196:93;:::i;:::-;15314:2;15309:3;15305:12;15298:19;;14957:366;;;:::o;15329:398::-;15488:3;15509:83;15590:1;15585:3;15509:83;:::i;:::-;15502:90;;15601:93;15690:3;15601:93;:::i;:::-;15719:1;15714:3;15710:11;15703:18;;15329:398;;;:::o;15733:366::-;15875:3;15896:67;15960:2;15955:3;15896:67;:::i;:::-;15889:74;;15972:93;16061:3;15972:93;:::i;:::-;16090:2;16085:3;16081:12;16074:19;;15733:366;;;:::o;16167:601::-;16284:3;16320:4;16315:3;16311:14;16405:4;16398:5;16394:16;16388:23;16424:63;16481:4;16476:3;16472:14;16458:12;16424:63;:::i;:::-;16335:162;16578:4;16571:5;16567:16;16561:23;16631:3;16625:4;16621:14;16614:4;16609:3;16605:14;16598:38;16657:73;16725:4;16711:12;16657:73;:::i;:::-;16649:81;;16507:234;16758:4;16751:11;;16289:479;16167:601;;;;:::o;16774:108::-;16851:24;16869:5;16851:24;:::i;:::-;16846:3;16839:37;16774:108;;:::o;16888:118::-;16975:24;16993:5;16975:24;:::i;:::-;16970:3;16963:37;16888:118;;:::o;17012:379::-;17196:3;17218:147;17361:3;17218:147;:::i;:::-;17211:154;;17382:3;17375:10;;17012:379;;;:::o;17397:222::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17541:71;17609:1;17598:9;17594:17;17585:6;17541:71;:::i;:::-;17397:222;;;;:::o;17625:640::-;17820:4;17858:3;17847:9;17843:19;17835:27;;17872:71;17940:1;17929:9;17925:17;17916:6;17872:71;:::i;:::-;17953:72;18021:2;18010:9;18006:18;17997:6;17953:72;:::i;:::-;18035;18103:2;18092:9;18088:18;18079:6;18035:72;:::i;:::-;18154:9;18148:4;18144:20;18139:2;18128:9;18124:18;18117:48;18182:76;18253:4;18244:6;18182:76;:::i;:::-;18174:84;;17625:640;;;;;;;:::o;18271:489::-;18472:4;18510:2;18499:9;18495:18;18487:26;;18559:9;18553:4;18549:20;18545:1;18534:9;18530:17;18523:47;18587:166;18748:4;18739:6;18587:166;:::i;:::-;18579:174;;18271:489;;;;:::o;18766:210::-;18853:4;18891:2;18880:9;18876:18;18868:26;;18904:65;18966:1;18955:9;18951:17;18942:6;18904:65;:::i;:::-;18766:210;;;;:::o;18982:313::-;19095:4;19133:2;19122:9;19118:18;19110:26;;19182:9;19176:4;19172:20;19168:1;19157:9;19153:17;19146:47;19210:78;19283:4;19274:6;19210:78;:::i;:::-;19202:86;;18982:313;;;;:::o;19301:419::-;19467:4;19505:2;19494:9;19490:18;19482:26;;19554:9;19548:4;19544:20;19540:1;19529:9;19525:17;19518:47;19582:131;19708:4;19582:131;:::i;:::-;19574:139;;19301:419;;;:::o;19726:::-;19892:4;19930:2;19919:9;19915:18;19907:26;;19979:9;19973:4;19969:20;19965:1;19954:9;19950:17;19943:47;20007:131;20133:4;20007:131;:::i;:::-;19999:139;;19726:419;;;:::o;20151:::-;20317:4;20355:2;20344:9;20340:18;20332:26;;20404:9;20398:4;20394:20;20390:1;20379:9;20375:17;20368:47;20432:131;20558:4;20432:131;:::i;:::-;20424:139;;20151:419;;;:::o;20576:::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20576:419;;;:::o;21001:::-;21167:4;21205:2;21194:9;21190:18;21182:26;;21254:9;21248:4;21244:20;21240:1;21229:9;21225:17;21218:47;21282:131;21408:4;21282:131;:::i;:::-;21274:139;;21001:419;;;:::o;21426:::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21679:9;21673:4;21669:20;21665:1;21654:9;21650:17;21643:47;21707:131;21833:4;21707:131;:::i;:::-;21699:139;;21426:419;;;:::o;21851:::-;22017:4;22055:2;22044:9;22040:18;22032:26;;22104:9;22098:4;22094:20;22090:1;22079:9;22075:17;22068:47;22132:131;22258:4;22132:131;:::i;:::-;22124:139;;21851:419;;;:::o;22276:::-;22442:4;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22276:419;;;:::o;22701:::-;22867:4;22905:2;22894:9;22890:18;22882:26;;22954:9;22948:4;22944:20;22940:1;22929:9;22925:17;22918:47;22982:131;23108:4;22982:131;:::i;:::-;22974:139;;22701:419;;;:::o;23126:::-;23292:4;23330:2;23319:9;23315:18;23307:26;;23379:9;23373:4;23369:20;23365:1;23354:9;23350:17;23343:47;23407:131;23533:4;23407:131;:::i;:::-;23399:139;;23126:419;;;:::o;23551:::-;23717:4;23755:2;23744:9;23740:18;23732:26;;23804:9;23798:4;23794:20;23790:1;23779:9;23775:17;23768:47;23832:131;23958:4;23832:131;:::i;:::-;23824:139;;23551:419;;;:::o;23976:::-;24142:4;24180:2;24169:9;24165:18;24157:26;;24229:9;24223:4;24219:20;24215:1;24204:9;24200:17;24193:47;24257:131;24383:4;24257:131;:::i;:::-;24249:139;;23976:419;;;:::o;24401:::-;24567:4;24605:2;24594:9;24590:18;24582:26;;24654:9;24648:4;24644:20;24640:1;24629:9;24625:17;24618:47;24682:131;24808:4;24682:131;:::i;:::-;24674:139;;24401:419;;;:::o;24826:::-;24992:4;25030:2;25019:9;25015:18;25007:26;;25079:9;25073:4;25069:20;25065:1;25054:9;25050:17;25043:47;25107:131;25233:4;25107:131;:::i;:::-;25099:139;;24826:419;;;:::o;25251:::-;25417:4;25455:2;25444:9;25440:18;25432:26;;25504:9;25498:4;25494:20;25490:1;25479:9;25475:17;25468:47;25532:131;25658:4;25532:131;:::i;:::-;25524:139;;25251:419;;;:::o;25676:222::-;25769:4;25807:2;25796:9;25792:18;25784:26;;25820:71;25888:1;25877:9;25873:17;25864:6;25820:71;:::i;:::-;25676:222;;;;:::o;25904:129::-;25938:6;25965:20;;:::i;:::-;25955:30;;25994:33;26022:4;26014:6;25994:33;:::i;:::-;25904:129;;;:::o;26039:75::-;26072:6;26105:2;26099:9;26089:19;;26039:75;:::o;26120:307::-;26181:4;26271:18;26263:6;26260:30;26257:56;;;26293:18;;:::i;:::-;26257:56;26331:29;26353:6;26331:29;:::i;:::-;26323:37;;26415:4;26409;26405:15;26397:23;;26120:307;;;:::o;26433:308::-;26495:4;26585:18;26577:6;26574:30;26571:56;;;26607:18;;:::i;:::-;26571:56;26645:29;26667:6;26645:29;:::i;:::-;26637:37;;26729:4;26723;26719:15;26711:23;;26433:308;;;:::o;26747:161::-;26843:4;26866:3;26858:11;;26896:4;26891:3;26887:14;26879:22;;26747:161;;;:::o;26914:143::-;27010:6;27044:5;27038:12;27028:22;;26914:143;;;:::o;27063:98::-;27114:6;27148:5;27142:12;27132:22;;27063:98;;;:::o;27167:99::-;27219:6;27253:5;27247:12;27237:22;;27167:99;;;:::o;27272:142::-;27371:4;27403;27398:3;27394:14;27386:22;;27272:142;;;:::o;27420:213::-;27548:11;27582:6;27577:3;27570:19;27622:4;27617:3;27613:14;27598:29;;27420:213;;;;:::o;27639:168::-;27722:11;27756:6;27751:3;27744:19;27796:4;27791:3;27787:14;27772:29;;27639:168;;;;:::o;27813:147::-;27914:11;27951:3;27936:18;;27813:147;;;;:::o;27966:159::-;28040:11;28074:6;28069:3;28062:19;28114:4;28109:3;28105:14;28090:29;;27966:159;;;;:::o;28131:169::-;28215:11;28249:6;28244:3;28237:19;28289:4;28284:3;28280:14;28265:29;;28131:169;;;;:::o;28306:305::-;28346:3;28365:20;28383:1;28365:20;:::i;:::-;28360:25;;28399:20;28417:1;28399:20;:::i;:::-;28394:25;;28553:1;28485:66;28481:74;28478:1;28475:81;28472:107;;;28559:18;;:::i;:::-;28472:107;28603:1;28600;28596:9;28589:16;;28306:305;;;;:::o;28617:191::-;28657:4;28677:20;28695:1;28677:20;:::i;:::-;28672:25;;28711:20;28729:1;28711:20;:::i;:::-;28706:25;;28750:1;28747;28744:8;28741:34;;;28755:18;;:::i;:::-;28741:34;28800:1;28797;28793:9;28785:17;;28617:191;;;;:::o;28814:96::-;28851:7;28880:24;28898:5;28880:24;:::i;:::-;28869:35;;28814:96;;;:::o;28916:90::-;28950:7;28993:5;28986:13;28979:21;28968:32;;28916:90;;;:::o;29012:149::-;29048:7;29088:66;29081:5;29077:78;29066:89;;29012:149;;;:::o;29167:126::-;29204:7;29244:42;29237:5;29233:54;29222:65;;29167:126;;;:::o;29299:77::-;29336:7;29365:5;29354:16;;29299:77;;;:::o;29382:154::-;29466:6;29461:3;29456;29443:30;29528:1;29519:6;29514:3;29510:16;29503:27;29382:154;;;:::o;29542:307::-;29610:1;29620:113;29634:6;29631:1;29628:13;29620:113;;;29719:1;29714:3;29710:11;29704:18;29700:1;29695:3;29691:11;29684:39;29656:2;29653:1;29649:10;29644:15;;29620:113;;;29751:6;29748:1;29745:13;29742:101;;;29831:1;29822:6;29817:3;29813:16;29806:27;29742:101;29591:258;29542:307;;;:::o;29855:320::-;29899:6;29936:1;29930:4;29926:12;29916:22;;29983:1;29977:4;29973:12;30004:18;29994:81;;30060:4;30052:6;30048:17;30038:27;;29994:81;30122:2;30114:6;30111:14;30091:18;30088:38;30085:84;;;30141:18;;:::i;:::-;30085:84;29906:269;29855:320;;;:::o;30181:281::-;30264:27;30286:4;30264:27;:::i;:::-;30256:6;30252:40;30394:6;30382:10;30379:22;30358:18;30346:10;30343:34;30340:62;30337:88;;;30405:18;;:::i;:::-;30337:88;30445:10;30441:2;30434:22;30224:238;30181:281;;:::o;30468:233::-;30507:3;30530:24;30548:5;30530:24;:::i;:::-;30521:33;;30576:66;30569:5;30566:77;30563:103;;;30646:18;;:::i;:::-;30563:103;30693:1;30686:5;30682:13;30675:20;;30468:233;;;:::o;30707:180::-;30755:77;30752:1;30745:88;30852:4;30849:1;30842:15;30876:4;30873:1;30866:15;30893:180;30941:77;30938:1;30931:88;31038:4;31035:1;31028:15;31062:4;31059:1;31052:15;31079:180;31127:77;31124:1;31117:88;31224:4;31221:1;31214:15;31248:4;31245:1;31238:15;31265:180;31313:77;31310:1;31303:88;31410:4;31407:1;31400:15;31434:4;31431:1;31424:15;31451:117;31560:1;31557;31550:12;31574:117;31683:1;31680;31673:12;31697:117;31806:1;31803;31796:12;31820:117;31929:1;31926;31919:12;31943:102;31984:6;32035:2;32031:7;32026:2;32019:5;32015:14;32011:28;32001:38;;31943:102;;;:::o;32051:237::-;32191:34;32187:1;32179:6;32175:14;32168:58;32260:20;32255:2;32247:6;32243:15;32236:45;32051:237;:::o;32294:225::-;32434:34;32430:1;32422:6;32418:14;32411:58;32503:8;32498:2;32490:6;32486:15;32479:33;32294:225;:::o;32525:224::-;32665:34;32661:1;32653:6;32649:14;32642:58;32734:7;32729:2;32721:6;32717:15;32710:32;32525:224;:::o;32755:178::-;32895:30;32891:1;32883:6;32879:14;32872:54;32755:178;:::o;32939:223::-;33079:34;33075:1;33067:6;33063:14;33056:58;33148:6;33143:2;33135:6;33131:15;33124:31;32939:223;:::o;33168:175::-;33308:27;33304:1;33296:6;33292:14;33285:51;33168:175;:::o;33349:231::-;33489:34;33485:1;33477:6;33473:14;33466:58;33558:14;33553:2;33545:6;33541:15;33534:39;33349:231;:::o;33586:243::-;33726:34;33722:1;33714:6;33710:14;33703:58;33795:26;33790:2;33782:6;33778:15;33771:51;33586:243;:::o;33835:229::-;33975:34;33971:1;33963:6;33959:14;33952:58;34044:12;34039:2;34031:6;34027:15;34020:37;33835:229;:::o;34070:228::-;34210:34;34206:1;34198:6;34194:14;34187:58;34279:11;34274:2;34266:6;34262:15;34255:36;34070:228;:::o;34304:182::-;34444:34;34440:1;34432:6;34428:14;34421:58;34304:182;:::o;34492:231::-;34632:34;34628:1;34620:6;34616:14;34609:58;34701:14;34696:2;34688:6;34684:15;34677:39;34492:231;:::o;34729:182::-;34869:34;34865:1;34857:6;34853:14;34846:58;34729:182;:::o;34917:220::-;35057:34;35053:1;35045:6;35041:14;35034:58;35126:3;35121:2;35113:6;35109:15;35102:28;34917:220;:::o;35143:114::-;;:::o;35263:236::-;35403:34;35399:1;35391:6;35387:14;35380:58;35472:19;35467:2;35459:6;35455:15;35448:44;35263:236;:::o;35505:122::-;35578:24;35596:5;35578:24;:::i;:::-;35571:5;35568:35;35558:63;;35617:1;35614;35607:12;35558:63;35505:122;:::o;35633:116::-;35703:21;35718:5;35703:21;:::i;:::-;35696:5;35693:32;35683:60;;35739:1;35736;35729:12;35683:60;35633:116;:::o;35755:120::-;35827:23;35844:5;35827:23;:::i;:::-;35820:5;35817:34;35807:62;;35865:1;35862;35855:12;35807:62;35755:120;:::o;35881:122::-;35954:24;35972:5;35954:24;:::i;:::-;35947:5;35944:35;35934:63;;35993:1;35990;35983:12;35934:63;35881:122;:::o

Swarm Source

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