ETH Price: $2,629.77 (-1.53%)

Token

ZiZis by Zanolino (ZIZI)
 

Overview

Max Total Supply

1,080 ZIZI

Holders

96

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ZIZI
0x6310197b486d5928990b05aab633bf3d51e0b69f
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:
Zizis

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-22
*/

// SPDX-License-Identifier: MIT

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/Zizis.sol




pragma solidity >=0.7.0 <0.9.0;




contract Zizis is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.03 ether;
  uint256 public whitelistCost = 0.00 ether;
  uint256 public maxSupply = 10800;
  uint256 public wlSupply = 1080;
  uint256 public maxMintAmountPerTx = 18;
  uint256 public nftPerAddressLimit = 18;

  bool public paused = true;
  bool public whitelistPaused = true;
  bool public artBlootPaused = true;
  bool public revealed = false;
  bool public onlyWhitelisted = true;

  address[] public whitelistedAddresses;
  address public artBlootContract;
  mapping(address => uint256) public addressMintedBalance;

  constructor() ERC721("ZiZis by Zanolino", "ZIZI") {
    setHiddenMetadataUri("https://zizis.s3.us-east-2.amazonaws.com/hidden.json");
    setArtBlootAddress(0x6A1968533e9d053E557cfb58B92Db48fcF7f907B);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  modifier mintComplianceWL(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= wlSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function publicMint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");

    _mintLoop(msg.sender, _mintAmount);
  }

  function whitelistMint(uint256 _mintAmount) public payable mintComplianceWL(_mintAmount) {
    require(!whitelistPaused, "The contract is paused!");
    require(isWhitelisted(msg.sender), "user is not whitelisted");
      uint256 ownerMintedCount = addressMintedBalance[msg.sender];
      require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
    require(msg.value >= whitelistCost * _mintAmount, "Insufficient funds!");

    _mintLoop(msg.sender, _mintAmount);
  }
  
  function artBlootMint(uint256 _mintAmount) public payable mintComplianceWL(_mintAmount) {
    require(!artBlootPaused, "The contract is paused!");
    IERC721 token = IERC721(artBlootContract);
    uint256 ownerAmount = token.balanceOf(msg.sender);
    require(ownerAmount >= 1, "You do not own artBloots");
    uint256 ownerMintedCount = addressMintedBalance[msg.sender];
    require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
    require(msg.value >= whitelistCost * _mintAmount, "Insufficient funds!");

    _mintLoop(msg.sender, _mintAmount);
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

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

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setArtBlootAddress(address _newArtBlootContract) public onlyOwner {
    artBlootContract = _newArtBlootContract;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setWLCost(uint256 _cost) public onlyOwner {
    whitelistCost = _cost;
  }

  function setMaxSupply(uint256 _updateMaxSupply) public onlyOwner {
    maxSupply = _updateMaxSupply;
  }

  function setWhitelistSupply(uint256 _whitelistSupply) public onlyOwner {
    wlSupply = _whitelistSupply;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }
  
  function setNftPerAddressLimit(uint256 _nftPerAddressLimit) public onlyOwner {
    nftPerAddressLimit = _nftPerAddressLimit;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function setWLPaused(bool _state) public onlyOwner {
    whitelistPaused = _state;
  }

  function artBlootMintPaused(bool _state) public onlyOwner {
    artBlootPaused = _state;
  }

  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
          return true;
      }
    }
    return false;
  }

  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }

  function withdraw() public onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;  
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artBlootContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"artBlootMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"artBlootMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artBlootPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newArtBlootContract","type":"address"}],"name":"setArtBlootAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updateMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftPerAddressLimit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistSupply","type":"uint256"}],"name":"setWhitelistSupply","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b929190620004c0565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000079929190620004c0565b50666a94d74f430000600b556000600c55612a30600d55610438600e556012600f5560126010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506000601160036101000a81548160ff0219169083151502179055506001601160046101000a81548160ff0219169083151502179055503480156200013457600080fd5b506040518060400160405280601181526020017f5a695a6973206279205a616e6f6c696e6f0000000000000000000000000000008152506040518060400160405280600481526020017f5a495a49000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b9929190620004c0565b508060019080519060200190620001d2929190620004c0565b505050620001f5620001e96200024a60201b60201c565b6200025260201b60201c565b6200021f60405180606001604052806034815260200162005bab603491396200031860201b60201c565b62000244736a1968533e9d053e557cfb58b92db48fcf7f907b620003c360201b60201c565b62000658565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003286200024a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034e6200049660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039e9062000597565b60405180910390fd5b80600a9080519060200190620003bf929190620004c0565b5050565b620003d36200024a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003f96200049660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004499062000597565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004ce90620005ca565b90600052602060002090601f016020900481019282620004f257600085556200053e565b82601f106200050d57805160ff19168380011785556200053e565b828001600101855582156200053e579182015b828111156200053d57825182559160200191906001019062000520565b5b5090506200054d919062000551565b5090565b5b808211156200056c57600081600090555060010162000552565b5090565b60006200057f602083620005b9565b91506200058c826200062f565b602082019050919050565b60006020820190508181036000830152620005b28162000570565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620005e357607f821691505b60208210811415620005fa57620005f962000600565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61554380620006686000396000f3fe60806040526004361061036b5760003560e01c8063715018a6116101c6578063ba7d2c76116100f7578063e265711f11610095578063edec5f271161006f578063edec5f2714610c67578063efbd73f414610c90578063f2fde38b14610cb9578063fa5d9b0d14610ce25761036b565b8063e265711f14610bd4578063e7b99ec714610bff578063e985e9c514610c2a5761036b565b8063d1d19213116100d1578063d1d1921314610b2e578063d5abeb0114610b57578063e0a8085314610b82578063e1cc799e14610bab5761036b565b8063ba7d2c7614610a9d578063c87b56dd14610ac8578063d0eb26b014610b055761036b565b806395d89b4111610164578063a45ba8e71161013e578063a45ba8e7146109e3578063b071401b14610a0e578063b88d4fde14610a37578063ba4e5c4914610a605761036b565b806395d89b41146109645780639c70b5121461098f578063a22cb465146109ba5761036b565b8063868ff4a2116101a0578063868ff4a2146108d65780638da5cb5b146108f257806392ea68c31461091d57806394354fd0146109395761036b565b8063715018a61461086b5780637ec4a6591461088257806384f78b2a146108ab5761036b565b80633ccfd60b116102a057806355a63bf41161023e57806362b99ad41161021857806362b99ad41461079d5780636352211e146107c85780636f8b44b01461080557806370a082311461082e5761036b565b806355a63bf41461071e5780635c975abb1461074757806361e61a25146107725761036b565b806344a0d68a1161027a57806344a0d68a146106765780634fdd43cb1461069f57806351830227146106c85780635503a0e8146106f35761036b565b80633ccfd60b146105f957806342842e0e14610610578063438b6300146106395761036b565b806316ba10e01161030d57806318cae269116102e757806318cae2691461053a57806323b872dd146105775780632db11544146105a05780633af32abf146105bc5761036b565b806316ba10e0146104bd57806316c38b3c146104e657806318160ddd1461050f5761036b565b8063095ea7b311610349578063095ea7b3146104155780630fe8418b1461043e5780630ff086091461046957806313faede6146104925761036b565b806301ffc9a71461037057806306fdde03146103ad578063081812fc146103d8575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190613ff2565b610d0b565b6040516103a4919061471a565b60405180910390f35b3480156103b957600080fd5b506103c2610ded565b6040516103cf9190614735565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614095565b610e7f565b60405161040c9190614691565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190613f38565b610f04565b005b34801561044a57600080fd5b5061045361101c565b6040516104609190614a37565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613fc5565b611022565b005b34801561049e57600080fd5b506104a76110bb565b6040516104b49190614a37565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df919061404c565b6110c1565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613fc5565b611157565b005b34801561051b57600080fd5b506105246111f0565b6040516105319190614a37565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613db5565b611201565b60405161056e9190614a37565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613e22565b611219565b005b6105ba60048036038101906105b59190614095565b611279565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613db5565b6113d2565b6040516105f0919061471a565b60405180910390f35b34801561060557600080fd5b5061060e611481565b005b34801561061c57600080fd5b5061063760048036038101906106329190613e22565b61157d565b005b34801561064557600080fd5b50610660600480360381019061065b9190613db5565b61159d565b60405161066d91906146f8565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190614095565b6116a8565b005b3480156106ab57600080fd5b506106c660048036038101906106c1919061404c565b61172e565b005b3480156106d457600080fd5b506106dd6117c4565b6040516106ea919061471a565b60405180910390f35b3480156106ff57600080fd5b506107086117d7565b6040516107159190614735565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190614095565b611865565b005b34801561075357600080fd5b5061075c6118eb565b604051610769919061471a565b60405180910390f35b34801561077e57600080fd5b506107876118fe565b604051610794919061471a565b60405180910390f35b3480156107a957600080fd5b506107b2611911565b6040516107bf9190614735565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190614095565b61199f565b6040516107fc9190614691565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190614095565b611a51565b005b34801561083a57600080fd5b5061085560048036038101906108509190613db5565b611ad7565b6040516108629190614a37565b60405180910390f35b34801561087757600080fd5b50610880611b8f565b005b34801561088e57600080fd5b506108a960048036038101906108a4919061404c565b611c17565b005b3480156108b757600080fd5b506108c0611cad565b6040516108cd919061471a565b60405180910390f35b6108f060048036038101906108eb9190614095565b611cc0565b005b3480156108fe57600080fd5b50610907611ef6565b6040516109149190614691565b60405180910390f35b61093760048036038101906109329190614095565b611f20565b005b34801561094557600080fd5b5061094e612208565b60405161095b9190614a37565b60405180910390f35b34801561097057600080fd5b5061097961220e565b6040516109869190614735565b60405180910390f35b34801561099b57600080fd5b506109a46122a0565b6040516109b1919061471a565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613ef8565b6122b3565b005b3480156109ef57600080fd5b506109f86122c9565b604051610a059190614735565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190614095565b612357565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613e75565b6123dd565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614095565b61243f565b604051610a949190614691565b60405180910390f35b348015610aa957600080fd5b50610ab261247e565b604051610abf9190614a37565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614095565b612484565b604051610afc9190614735565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b279190614095565b6125dd565b005b348015610b3a57600080fd5b50610b556004803603810190610b509190614095565b612663565b005b348015610b6357600080fd5b50610b6c6126e9565b604051610b799190614a37565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190613fc5565b6126ef565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190613db5565b612788565b005b348015610be057600080fd5b50610be9612848565b604051610bf69190614691565b60405180910390f35b348015610c0b57600080fd5b50610c1461286e565b604051610c219190614a37565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613de2565b612874565b604051610c5e919061471a565b60405180910390f35b348015610c7357600080fd5b50610c8e6004803603810190610c899190613f78565b612908565b005b348015610c9c57600080fd5b50610cb76004803603810190610cb291906140ef565b6129a8565b005b348015610cc557600080fd5b50610ce06004803603810190610cdb9190613db5565b612ade565b005b348015610cee57600080fd5b50610d096004803603810190610d049190613fc5565b612bd6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dd657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610de65750610de582612c6f565b5b9050919050565b606060008054610dfc90614d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614d40565b8015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b5050505050905090565b6000610e8a82612cd9565b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906148f7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0f8261199f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7790614977565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9f612d45565b73ffffffffffffffffffffffffffffffffffffffff161480610fce5750610fcd81610fc8612d45565b612874565b5b61100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614877565b60405180910390fd5b6110178383612d4d565b505050565b600e5481565b61102a612d45565b73ffffffffffffffffffffffffffffffffffffffff16611048611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614917565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600b5481565b6110c9612d45565b73ffffffffffffffffffffffffffffffffffffffff166110e7611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614917565b60405180910390fd5b8060099080519060200190611153929190613a9d565b5050565b61115f612d45565b73ffffffffffffffffffffffffffffffffffffffff1661117d611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614917565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60006111fc6007612e06565b905090565b60146020528060005260406000206000915090505481565b61122a611224612d45565b82612e14565b611269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611260906149b7565b60405180910390fd5b611274838383612ef2565b505050565b8060008111801561128c5750600f548111155b6112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c2906147d7565b60405180910390fd5b600d54816112d96007612e06565b6112e39190614b75565b1115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614997565b60405180910390fd5b601160009054906101000a900460ff1615611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614937565b60405180910390fd5b81600b546113829190614bfc565b3410156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614a17565b60405180910390fd5b6113ce3383613159565b5050565b600080600090505b601280549050811015611476578273ffffffffffffffffffffffffffffffffffffffff166012828154811061141257611411614eaa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561146357600191505061147c565b808061146e90614da3565b9150506113da565b50600090505b919050565b611489612d45565b73ffffffffffffffffffffffffffffffffffffffff166114a7611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614917565b60405180910390fd5b6000611507611ef6565b73ffffffffffffffffffffffffffffffffffffffff164760405161152a9061467c565b60006040518083038185875af1925050503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b505090508061157a57600080fd5b50565b611598838383604051806020016040528060008152506123dd565b505050565b606060006115aa83611ad7565b905060008167ffffffffffffffff8111156115c8576115c7614ed9565b5b6040519080825280602002602001820160405280156115f65781602001602082028036833780820191505090505b50905060006001905060005b83811080156116135750600d548211155b1561169c5760006116238361199f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611688578284838151811061166d5761166c614eaa565b5b602002602001018181525050818061168490614da3565b9250505b828061169390614da3565b93505050611602565b82945050505050919050565b6116b0612d45565b73ffffffffffffffffffffffffffffffffffffffff166116ce611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614917565b60405180910390fd5b80600b8190555050565b611736612d45565b73ffffffffffffffffffffffffffffffffffffffff16611754611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190614917565b60405180910390fd5b80600a90805190602001906117c0929190613a9d565b5050565b601160039054906101000a900460ff1681565b600980546117e490614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461181090614d40565b801561185d5780601f106118325761010080835404028352916020019161185d565b820191906000526020600020905b81548152906001019060200180831161184057829003601f168201915b505050505081565b61186d612d45565b73ffffffffffffffffffffffffffffffffffffffff1661188b611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890614917565b60405180910390fd5b80600e8190555050565b601160009054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6008805461191e90614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461194a90614d40565b80156119975780601f1061196c57610100808354040283529160200191611997565b820191906000526020600020905b81548152906001019060200180831161197a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906148b7565b60405180910390fd5b80915050919050565b611a59612d45565b73ffffffffffffffffffffffffffffffffffffffff16611a77611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614917565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90614897565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b97612d45565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614917565b60405180910390fd5b611c1560006131ee565b565b611c1f612d45565b73ffffffffffffffffffffffffffffffffffffffff16611c3d611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90614917565b60405180910390fd5b8060089080519060200190611ca9929190613a9d565b5050565b601160029054906101000a900460ff1681565b80600081118015611cd35750600f548111155b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d09906147d7565b60405180910390fd5b600e5481611d206007612e06565b611d2a9190614b75565b1115611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6290614997565b60405180910390fd5b601160019054906101000a900460ff1615611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db290614937565b60405180910390fd5b611dc4336113d2565b611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906149d7565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548382611e569190614b75565b1115611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e906147f7565b60405180910390fd5b82600c54611ea59190614bfc565b341015611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede90614a17565b60405180910390fd5b611ef13384613159565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600081118015611f335750600f548111155b611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906147d7565b60405180910390fd5b600e5481611f806007612e06565b611f8a9190614b75565b1115611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290614997565b60405180910390fd5b601160029054906101000a900460ff161561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290614937565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161207d9190614691565b60206040518083038186803b15801561209557600080fd5b505afa1580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd91906140c2565b90506001811015612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906149f7565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105485826121669190614b75565b11156121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e906147f7565b60405180910390fd5b84600c546121b59190614bfc565b3410156121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614a17565b60405180910390fd5b6122013386613159565b5050505050565b600f5481565b60606001805461221d90614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461224990614d40565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b5050505050905090565b601160049054906101000a900460ff1681565b6122c56122be612d45565b83836132b4565b5050565b600a80546122d690614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461230290614d40565b801561234f5780601f106123245761010080835404028352916020019161234f565b820191906000526020600020905b81548152906001019060200180831161233257829003601f168201915b505050505081565b61235f612d45565b73ffffffffffffffffffffffffffffffffffffffff1661237d611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614917565b60405180910390fd5b80600f8190555050565b6123ee6123e8612d45565b83612e14565b61242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906149b7565b60405180910390fd5b61243984848484613421565b50505050565b6012818154811061244f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b606061248f82612cd9565b6124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590614957565b60405180910390fd5b60001515601160039054906101000a900460ff161515141561257c57600a80546124f790614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461252390614d40565b80156125705780601f1061254557610100808354040283529160200191612570565b820191906000526020600020905b81548152906001019060200180831161255357829003601f168201915b505050505090506125d8565b600061258661347d565b905060008151116125a657604051806020016040528060008152506125d4565b806125b08461350f565b60096040516020016125c49392919061464b565b6040516020818303038152906040525b9150505b919050565b6125e5612d45565b73ffffffffffffffffffffffffffffffffffffffff16612603611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614917565b60405180910390fd5b8060108190555050565b61266b612d45565b73ffffffffffffffffffffffffffffffffffffffff16612689611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614917565b60405180910390fd5b80600c8190555050565b600d5481565b6126f7612d45565b73ffffffffffffffffffffffffffffffffffffffff16612715611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614917565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b612790612d45565b73ffffffffffffffffffffffffffffffffffffffff166127ae611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614917565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612910612d45565b73ffffffffffffffffffffffffffffffffffffffff1661292e611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90614917565b60405180910390fd5b601260006129929190613b23565b8181601291906129a3929190613b44565b505050565b816000811180156129bb5750600f548111155b6129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f1906147d7565b60405180910390fd5b600d5481612a086007612e06565b612a129190614b75565b1115612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90614997565b60405180910390fd5b612a5b612d45565b73ffffffffffffffffffffffffffffffffffffffff16612a79611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac690614917565b60405180910390fd5b612ad98284613159565b505050565b612ae6612d45565b73ffffffffffffffffffffffffffffffffffffffff16612b04611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5190614917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc190614777565b60405180910390fd5b612bd3816131ee565b50565b612bde612d45565b73ffffffffffffffffffffffffffffffffffffffff16612bfc611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990614917565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dc08361199f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612e1f82612cd9565b612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614857565b60405180910390fd5b6000612e698361199f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ed857508373ffffffffffffffffffffffffffffffffffffffff16612ec084610e7f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ee95750612ee88185612874565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f128261199f565b73ffffffffffffffffffffffffffffffffffffffff1614612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90614797565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcf90614817565b60405180910390fd5b612fe3838383613670565b612fee600082612d4d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461303e9190614c56565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130959190614b75565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613154838383613675565b505050565b60005b818110156131e957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906131b490614da3565b91905055506131c3600761367a565b6131d6836131d16007612e06565b613690565b80806131e190614da3565b91505061315c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a90614837565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613414919061471a565b60405180910390a3505050565b61342c848484612ef2565b613438848484846136ae565b613477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346e90614757565b60405180910390fd5b50505050565b60606008805461348c90614d40565b80601f01602080910402602001604051908101604052809291908181526020018280546134b890614d40565b80156135055780601f106134da57610100808354040283529160200191613505565b820191906000526020600020905b8154815290600101906020018083116134e857829003601f168201915b5050505050905090565b60606000821415613557576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366b565b600082905060005b6000821461358957808061357290614da3565b915050600a826135829190614bcb565b915061355f565b60008167ffffffffffffffff8111156135a5576135a4614ed9565b5b6040519080825280601f01601f1916602001820160405280156135d75781602001600182028036833780820191505090505b5090505b60008514613664576001826135f09190614c56565b9150600a856135ff9190614dec565b603061360b9190614b75565b60f81b81838151811061362157613620614eaa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365d9190614bcb565b94506135db565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b6136aa828260405180602001604052806000815250613845565b5050565b60006136cf8473ffffffffffffffffffffffffffffffffffffffff166138a0565b15613838578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f8612d45565b8786866040518563ffffffff1660e01b815260040161371a94939291906146ac565b602060405180830381600087803b15801561373457600080fd5b505af192505050801561376557506040513d601f19601f82011682018060405250810190613762919061401f565b60015b6137e8573d8060008114613795576040519150601f19603f3d011682016040523d82523d6000602084013e61379a565b606091505b506000815114156137e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d790614757565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383d565b600190505b949350505050565b61384f83836138c3565b61385c60008484846136ae565b61389b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389290614757565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392a906148d7565b60405180910390fd5b61393c81612cd9565b1561397c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613973906147b7565b60405180910390fd5b61398860008383613670565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d89190614b75565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a9960008383613675565b5050565b828054613aa990614d40565b90600052602060002090601f016020900481019282613acb5760008555613b12565b82601f10613ae457805160ff1916838001178555613b12565b82800160010185558215613b12579182015b82811115613b11578251825591602001919060010190613af6565b5b509050613b1f9190613be4565b5090565b5080546000825590600052602060002090810190613b419190613be4565b50565b828054828255906000526020600020908101928215613bd3579160200282015b82811115613bd257823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613b64565b5b509050613be09190613be4565b5090565b5b80821115613bfd576000816000905550600101613be5565b5090565b6000613c14613c0f84614a77565b614a52565b905082815260208101848484011115613c3057613c2f614f17565b5b613c3b848285614cfe565b509392505050565b6000613c56613c5184614aa8565b614a52565b905082815260208101848484011115613c7257613c71614f17565b5b613c7d848285614cfe565b509392505050565b600081359050613c94816154b1565b92915050565b60008083601f840112613cb057613caf614f0d565b5b8235905067ffffffffffffffff811115613ccd57613ccc614f08565b5b602083019150836020820283011115613ce957613ce8614f12565b5b9250929050565b600081359050613cff816154c8565b92915050565b600081359050613d14816154df565b92915050565b600081519050613d29816154df565b92915050565b600082601f830112613d4457613d43614f0d565b5b8135613d54848260208601613c01565b91505092915050565b600082601f830112613d7257613d71614f0d565b5b8135613d82848260208601613c43565b91505092915050565b600081359050613d9a816154f6565b92915050565b600081519050613daf816154f6565b92915050565b600060208284031215613dcb57613dca614f21565b5b6000613dd984828501613c85565b91505092915050565b60008060408385031215613df957613df8614f21565b5b6000613e0785828601613c85565b9250506020613e1885828601613c85565b9150509250929050565b600080600060608486031215613e3b57613e3a614f21565b5b6000613e4986828701613c85565b9350506020613e5a86828701613c85565b9250506040613e6b86828701613d8b565b9150509250925092565b60008060008060808587031215613e8f57613e8e614f21565b5b6000613e9d87828801613c85565b9450506020613eae87828801613c85565b9350506040613ebf87828801613d8b565b925050606085013567ffffffffffffffff811115613ee057613edf614f1c565b5b613eec87828801613d2f565b91505092959194509250565b60008060408385031215613f0f57613f0e614f21565b5b6000613f1d85828601613c85565b9250506020613f2e85828601613cf0565b9150509250929050565b60008060408385031215613f4f57613f4e614f21565b5b6000613f5d85828601613c85565b9250506020613f6e85828601613d8b565b9150509250929050565b60008060208385031215613f8f57613f8e614f21565b5b600083013567ffffffffffffffff811115613fad57613fac614f1c565b5b613fb985828601613c9a565b92509250509250929050565b600060208284031215613fdb57613fda614f21565b5b6000613fe984828501613cf0565b91505092915050565b60006020828403121561400857614007614f21565b5b600061401684828501613d05565b91505092915050565b60006020828403121561403557614034614f21565b5b600061404384828501613d1a565b91505092915050565b60006020828403121561406257614061614f21565b5b600082013567ffffffffffffffff8111156140805761407f614f1c565b5b61408c84828501613d5d565b91505092915050565b6000602082840312156140ab576140aa614f21565b5b60006140b984828501613d8b565b91505092915050565b6000602082840312156140d8576140d7614f21565b5b60006140e684828501613da0565b91505092915050565b6000806040838503121561410657614105614f21565b5b600061411485828601613d8b565b925050602061412585828601613c85565b9150509250929050565b600061413b838361462d565b60208301905092915050565b61415081614c8a565b82525050565b600061416182614afe565b61416b8185614b2c565b935061417683614ad9565b8060005b838110156141a757815161418e888261412f565b975061419983614b1f565b92505060018101905061417a565b5085935050505092915050565b6141bd81614c9c565b82525050565b60006141ce82614b09565b6141d88185614b3d565b93506141e8818560208601614d0d565b6141f181614f26565b840191505092915050565b600061420782614b14565b6142118185614b59565b9350614221818560208601614d0d565b61422a81614f26565b840191505092915050565b600061424082614b14565b61424a8185614b6a565b935061425a818560208601614d0d565b80840191505092915050565b6000815461427381614d40565b61427d8186614b6a565b9450600182166000811461429857600181146142a9576142dc565b60ff198316865281860193506142dc565b6142b285614ae9565b60005b838110156142d4578154818901526001820191506020810190506142b5565b838801955050505b50505092915050565b60006142f2603283614b59565b91506142fd82614f37565b604082019050919050565b6000614315602683614b59565b915061432082614f86565b604082019050919050565b6000614338602583614b59565b915061434382614fd5565b604082019050919050565b600061435b601c83614b59565b915061436682615024565b602082019050919050565b600061437e601483614b59565b91506143898261504d565b602082019050919050565b60006143a1601c83614b59565b91506143ac82615076565b602082019050919050565b60006143c4602483614b59565b91506143cf8261509f565b604082019050919050565b60006143e7601983614b59565b91506143f2826150ee565b602082019050919050565b600061440a602c83614b59565b915061441582615117565b604082019050919050565b600061442d603883614b59565b915061443882615166565b604082019050919050565b6000614450602a83614b59565b915061445b826151b5565b604082019050919050565b6000614473602983614b59565b915061447e82615204565b604082019050919050565b6000614496602083614b59565b91506144a182615253565b602082019050919050565b60006144b9602c83614b59565b91506144c48261527c565b604082019050919050565b60006144dc602083614b59565b91506144e7826152cb565b602082019050919050565b60006144ff601783614b59565b915061450a826152f4565b602082019050919050565b6000614522602f83614b59565b915061452d8261531d565b604082019050919050565b6000614545602183614b59565b91506145508261536c565b604082019050919050565b6000614568600083614b4e565b9150614573826153bb565b600082019050919050565b600061458b601483614b59565b9150614596826153be565b602082019050919050565b60006145ae603183614b59565b91506145b9826153e7565b604082019050919050565b60006145d1601783614b59565b91506145dc82615436565b602082019050919050565b60006145f4601883614b59565b91506145ff8261545f565b602082019050919050565b6000614617601383614b59565b915061462282615488565b602082019050919050565b61463681614cf4565b82525050565b61464581614cf4565b82525050565b60006146578286614235565b91506146638285614235565b915061466f8284614266565b9150819050949350505050565b60006146878261455b565b9150819050919050565b60006020820190506146a66000830184614147565b92915050565b60006080820190506146c16000830187614147565b6146ce6020830186614147565b6146db604083018561463c565b81810360608301526146ed81846141c3565b905095945050505050565b600060208201905081810360008301526147128184614156565b905092915050565b600060208201905061472f60008301846141b4565b92915050565b6000602082019050818103600083015261474f81846141fc565b905092915050565b60006020820190508181036000830152614770816142e5565b9050919050565b6000602082019050818103600083015261479081614308565b9050919050565b600060208201905081810360008301526147b08161432b565b9050919050565b600060208201905081810360008301526147d08161434e565b9050919050565b600060208201905081810360008301526147f081614371565b9050919050565b6000602082019050818103600083015261481081614394565b9050919050565b60006020820190508181036000830152614830816143b7565b9050919050565b60006020820190508181036000830152614850816143da565b9050919050565b60006020820190508181036000830152614870816143fd565b9050919050565b6000602082019050818103600083015261489081614420565b9050919050565b600060208201905081810360008301526148b081614443565b9050919050565b600060208201905081810360008301526148d081614466565b9050919050565b600060208201905081810360008301526148f081614489565b9050919050565b60006020820190508181036000830152614910816144ac565b9050919050565b60006020820190508181036000830152614930816144cf565b9050919050565b60006020820190508181036000830152614950816144f2565b9050919050565b6000602082019050818103600083015261497081614515565b9050919050565b6000602082019050818103600083015261499081614538565b9050919050565b600060208201905081810360008301526149b08161457e565b9050919050565b600060208201905081810360008301526149d0816145a1565b9050919050565b600060208201905081810360008301526149f0816145c4565b9050919050565b60006020820190508181036000830152614a10816145e7565b9050919050565b60006020820190508181036000830152614a308161460a565b9050919050565b6000602082019050614a4c600083018461463c565b92915050565b6000614a5c614a6d565b9050614a688282614d72565b919050565b6000604051905090565b600067ffffffffffffffff821115614a9257614a91614ed9565b5b614a9b82614f26565b9050602081019050919050565b600067ffffffffffffffff821115614ac357614ac2614ed9565b5b614acc82614f26565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b8082614cf4565b9150614b8b83614cf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc057614bbf614e1d565b5b828201905092915050565b6000614bd682614cf4565b9150614be183614cf4565b925082614bf157614bf0614e4c565b5b828204905092915050565b6000614c0782614cf4565b9150614c1283614cf4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c4b57614c4a614e1d565b5b828202905092915050565b6000614c6182614cf4565b9150614c6c83614cf4565b925082821015614c7f57614c7e614e1d565b5b828203905092915050565b6000614c9582614cd4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d2b578082015181840152602081019050614d10565b83811115614d3a576000848401525b50505050565b60006002820490506001821680614d5857607f821691505b60208210811415614d6c57614d6b614e7b565b5b50919050565b614d7b82614f26565b810181811067ffffffffffffffff82111715614d9a57614d99614ed9565b5b80604052505050565b6000614dae82614cf4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614de157614de0614e1d565b5b600182019050919050565b6000614df782614cf4565b9150614e0283614cf4565b925082614e1257614e11614e4c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f596f7520646f206e6f74206f776e20617274426c6f6f74730000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6154ba81614c8a565b81146154c557600080fd5b50565b6154d181614c9c565b81146154dc57600080fd5b50565b6154e881614ca8565b81146154f357600080fd5b50565b6154ff81614cf4565b811461550a57600080fd5b5056fea264697066735822122047a543d47d86510d499d9fc3120fef2e4488be63eeca1c25bf5c0dc65a355d1564736f6c6343000807003368747470733a2f2f7a697a69732e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f68696464656e2e6a736f6e

Deployed Bytecode

0x60806040526004361061036b5760003560e01c8063715018a6116101c6578063ba7d2c76116100f7578063e265711f11610095578063edec5f271161006f578063edec5f2714610c67578063efbd73f414610c90578063f2fde38b14610cb9578063fa5d9b0d14610ce25761036b565b8063e265711f14610bd4578063e7b99ec714610bff578063e985e9c514610c2a5761036b565b8063d1d19213116100d1578063d1d1921314610b2e578063d5abeb0114610b57578063e0a8085314610b82578063e1cc799e14610bab5761036b565b8063ba7d2c7614610a9d578063c87b56dd14610ac8578063d0eb26b014610b055761036b565b806395d89b4111610164578063a45ba8e71161013e578063a45ba8e7146109e3578063b071401b14610a0e578063b88d4fde14610a37578063ba4e5c4914610a605761036b565b806395d89b41146109645780639c70b5121461098f578063a22cb465146109ba5761036b565b8063868ff4a2116101a0578063868ff4a2146108d65780638da5cb5b146108f257806392ea68c31461091d57806394354fd0146109395761036b565b8063715018a61461086b5780637ec4a6591461088257806384f78b2a146108ab5761036b565b80633ccfd60b116102a057806355a63bf41161023e57806362b99ad41161021857806362b99ad41461079d5780636352211e146107c85780636f8b44b01461080557806370a082311461082e5761036b565b806355a63bf41461071e5780635c975abb1461074757806361e61a25146107725761036b565b806344a0d68a1161027a57806344a0d68a146106765780634fdd43cb1461069f57806351830227146106c85780635503a0e8146106f35761036b565b80633ccfd60b146105f957806342842e0e14610610578063438b6300146106395761036b565b806316ba10e01161030d57806318cae269116102e757806318cae2691461053a57806323b872dd146105775780632db11544146105a05780633af32abf146105bc5761036b565b806316ba10e0146104bd57806316c38b3c146104e657806318160ddd1461050f5761036b565b8063095ea7b311610349578063095ea7b3146104155780630fe8418b1461043e5780630ff086091461046957806313faede6146104925761036b565b806301ffc9a71461037057806306fdde03146103ad578063081812fc146103d8575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190613ff2565b610d0b565b6040516103a4919061471a565b60405180910390f35b3480156103b957600080fd5b506103c2610ded565b6040516103cf9190614735565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614095565b610e7f565b60405161040c9190614691565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190613f38565b610f04565b005b34801561044a57600080fd5b5061045361101c565b6040516104609190614a37565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613fc5565b611022565b005b34801561049e57600080fd5b506104a76110bb565b6040516104b49190614a37565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df919061404c565b6110c1565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613fc5565b611157565b005b34801561051b57600080fd5b506105246111f0565b6040516105319190614a37565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613db5565b611201565b60405161056e9190614a37565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613e22565b611219565b005b6105ba60048036038101906105b59190614095565b611279565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613db5565b6113d2565b6040516105f0919061471a565b60405180910390f35b34801561060557600080fd5b5061060e611481565b005b34801561061c57600080fd5b5061063760048036038101906106329190613e22565b61157d565b005b34801561064557600080fd5b50610660600480360381019061065b9190613db5565b61159d565b60405161066d91906146f8565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190614095565b6116a8565b005b3480156106ab57600080fd5b506106c660048036038101906106c1919061404c565b61172e565b005b3480156106d457600080fd5b506106dd6117c4565b6040516106ea919061471a565b60405180910390f35b3480156106ff57600080fd5b506107086117d7565b6040516107159190614735565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190614095565b611865565b005b34801561075357600080fd5b5061075c6118eb565b604051610769919061471a565b60405180910390f35b34801561077e57600080fd5b506107876118fe565b604051610794919061471a565b60405180910390f35b3480156107a957600080fd5b506107b2611911565b6040516107bf9190614735565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190614095565b61199f565b6040516107fc9190614691565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190614095565b611a51565b005b34801561083a57600080fd5b5061085560048036038101906108509190613db5565b611ad7565b6040516108629190614a37565b60405180910390f35b34801561087757600080fd5b50610880611b8f565b005b34801561088e57600080fd5b506108a960048036038101906108a4919061404c565b611c17565b005b3480156108b757600080fd5b506108c0611cad565b6040516108cd919061471a565b60405180910390f35b6108f060048036038101906108eb9190614095565b611cc0565b005b3480156108fe57600080fd5b50610907611ef6565b6040516109149190614691565b60405180910390f35b61093760048036038101906109329190614095565b611f20565b005b34801561094557600080fd5b5061094e612208565b60405161095b9190614a37565b60405180910390f35b34801561097057600080fd5b5061097961220e565b6040516109869190614735565b60405180910390f35b34801561099b57600080fd5b506109a46122a0565b6040516109b1919061471a565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613ef8565b6122b3565b005b3480156109ef57600080fd5b506109f86122c9565b604051610a059190614735565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190614095565b612357565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613e75565b6123dd565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614095565b61243f565b604051610a949190614691565b60405180910390f35b348015610aa957600080fd5b50610ab261247e565b604051610abf9190614a37565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614095565b612484565b604051610afc9190614735565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b279190614095565b6125dd565b005b348015610b3a57600080fd5b50610b556004803603810190610b509190614095565b612663565b005b348015610b6357600080fd5b50610b6c6126e9565b604051610b799190614a37565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190613fc5565b6126ef565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190613db5565b612788565b005b348015610be057600080fd5b50610be9612848565b604051610bf69190614691565b60405180910390f35b348015610c0b57600080fd5b50610c1461286e565b604051610c219190614a37565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613de2565b612874565b604051610c5e919061471a565b60405180910390f35b348015610c7357600080fd5b50610c8e6004803603810190610c899190613f78565b612908565b005b348015610c9c57600080fd5b50610cb76004803603810190610cb291906140ef565b6129a8565b005b348015610cc557600080fd5b50610ce06004803603810190610cdb9190613db5565b612ade565b005b348015610cee57600080fd5b50610d096004803603810190610d049190613fc5565b612bd6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dd657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610de65750610de582612c6f565b5b9050919050565b606060008054610dfc90614d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614d40565b8015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b5050505050905090565b6000610e8a82612cd9565b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906148f7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f0f8261199f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7790614977565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f9f612d45565b73ffffffffffffffffffffffffffffffffffffffff161480610fce5750610fcd81610fc8612d45565b612874565b5b61100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614877565b60405180910390fd5b6110178383612d4d565b505050565b600e5481565b61102a612d45565b73ffffffffffffffffffffffffffffffffffffffff16611048611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614917565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600b5481565b6110c9612d45565b73ffffffffffffffffffffffffffffffffffffffff166110e7611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614917565b60405180910390fd5b8060099080519060200190611153929190613a9d565b5050565b61115f612d45565b73ffffffffffffffffffffffffffffffffffffffff1661117d611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614917565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60006111fc6007612e06565b905090565b60146020528060005260406000206000915090505481565b61122a611224612d45565b82612e14565b611269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611260906149b7565b60405180910390fd5b611274838383612ef2565b505050565b8060008111801561128c5750600f548111155b6112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c2906147d7565b60405180910390fd5b600d54816112d96007612e06565b6112e39190614b75565b1115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614997565b60405180910390fd5b601160009054906101000a900460ff1615611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614937565b60405180910390fd5b81600b546113829190614bfc565b3410156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614a17565b60405180910390fd5b6113ce3383613159565b5050565b600080600090505b601280549050811015611476578273ffffffffffffffffffffffffffffffffffffffff166012828154811061141257611411614eaa565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561146357600191505061147c565b808061146e90614da3565b9150506113da565b50600090505b919050565b611489612d45565b73ffffffffffffffffffffffffffffffffffffffff166114a7611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614917565b60405180910390fd5b6000611507611ef6565b73ffffffffffffffffffffffffffffffffffffffff164760405161152a9061467c565b60006040518083038185875af1925050503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b505090508061157a57600080fd5b50565b611598838383604051806020016040528060008152506123dd565b505050565b606060006115aa83611ad7565b905060008167ffffffffffffffff8111156115c8576115c7614ed9565b5b6040519080825280602002602001820160405280156115f65781602001602082028036833780820191505090505b50905060006001905060005b83811080156116135750600d548211155b1561169c5760006116238361199f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611688578284838151811061166d5761166c614eaa565b5b602002602001018181525050818061168490614da3565b9250505b828061169390614da3565b93505050611602565b82945050505050919050565b6116b0612d45565b73ffffffffffffffffffffffffffffffffffffffff166116ce611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614917565b60405180910390fd5b80600b8190555050565b611736612d45565b73ffffffffffffffffffffffffffffffffffffffff16611754611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190614917565b60405180910390fd5b80600a90805190602001906117c0929190613a9d565b5050565b601160039054906101000a900460ff1681565b600980546117e490614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461181090614d40565b801561185d5780601f106118325761010080835404028352916020019161185d565b820191906000526020600020905b81548152906001019060200180831161184057829003601f168201915b505050505081565b61186d612d45565b73ffffffffffffffffffffffffffffffffffffffff1661188b611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890614917565b60405180910390fd5b80600e8190555050565b601160009054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6008805461191e90614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461194a90614d40565b80156119975780601f1061196c57610100808354040283529160200191611997565b820191906000526020600020905b81548152906001019060200180831161197a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906148b7565b60405180910390fd5b80915050919050565b611a59612d45565b73ffffffffffffffffffffffffffffffffffffffff16611a77611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614917565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90614897565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b97612d45565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614917565b60405180910390fd5b611c1560006131ee565b565b611c1f612d45565b73ffffffffffffffffffffffffffffffffffffffff16611c3d611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90614917565b60405180910390fd5b8060089080519060200190611ca9929190613a9d565b5050565b601160029054906101000a900460ff1681565b80600081118015611cd35750600f548111155b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d09906147d7565b60405180910390fd5b600e5481611d206007612e06565b611d2a9190614b75565b1115611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6290614997565b60405180910390fd5b601160019054906101000a900460ff1615611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db290614937565b60405180910390fd5b611dc4336113d2565b611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906149d7565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506010548382611e569190614b75565b1115611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e906147f7565b60405180910390fd5b82600c54611ea59190614bfc565b341015611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede90614a17565b60405180910390fd5b611ef13384613159565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600081118015611f335750600f548111155b611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906147d7565b60405180910390fd5b600e5481611f806007612e06565b611f8a9190614b75565b1115611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290614997565b60405180910390fd5b601160029054906101000a900460ff161561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290614937565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161207d9190614691565b60206040518083038186803b15801561209557600080fd5b505afa1580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd91906140c2565b90506001811015612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906149f7565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105485826121669190614b75565b11156121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e906147f7565b60405180910390fd5b84600c546121b59190614bfc565b3410156121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614a17565b60405180910390fd5b6122013386613159565b5050505050565b600f5481565b60606001805461221d90614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461224990614d40565b80156122965780601f1061226b57610100808354040283529160200191612296565b820191906000526020600020905b81548152906001019060200180831161227957829003601f168201915b5050505050905090565b601160049054906101000a900460ff1681565b6122c56122be612d45565b83836132b4565b5050565b600a80546122d690614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461230290614d40565b801561234f5780601f106123245761010080835404028352916020019161234f565b820191906000526020600020905b81548152906001019060200180831161233257829003601f168201915b505050505081565b61235f612d45565b73ffffffffffffffffffffffffffffffffffffffff1661237d611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614917565b60405180910390fd5b80600f8190555050565b6123ee6123e8612d45565b83612e14565b61242d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612424906149b7565b60405180910390fd5b61243984848484613421565b50505050565b6012818154811061244f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b606061248f82612cd9565b6124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590614957565b60405180910390fd5b60001515601160039054906101000a900460ff161515141561257c57600a80546124f790614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461252390614d40565b80156125705780601f1061254557610100808354040283529160200191612570565b820191906000526020600020905b81548152906001019060200180831161255357829003601f168201915b505050505090506125d8565b600061258661347d565b905060008151116125a657604051806020016040528060008152506125d4565b806125b08461350f565b60096040516020016125c49392919061464b565b6040516020818303038152906040525b9150505b919050565b6125e5612d45565b73ffffffffffffffffffffffffffffffffffffffff16612603611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265090614917565b60405180910390fd5b8060108190555050565b61266b612d45565b73ffffffffffffffffffffffffffffffffffffffff16612689611ef6565b73ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614917565b60405180910390fd5b80600c8190555050565b600d5481565b6126f7612d45565b73ffffffffffffffffffffffffffffffffffffffff16612715611ef6565b73ffffffffffffffffffffffffffffffffffffffff161461276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614917565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b612790612d45565b73ffffffffffffffffffffffffffffffffffffffff166127ae611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614917565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612910612d45565b73ffffffffffffffffffffffffffffffffffffffff1661292e611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90614917565b60405180910390fd5b601260006129929190613b23565b8181601291906129a3929190613b44565b505050565b816000811180156129bb5750600f548111155b6129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f1906147d7565b60405180910390fd5b600d5481612a086007612e06565b612a129190614b75565b1115612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90614997565b60405180910390fd5b612a5b612d45565b73ffffffffffffffffffffffffffffffffffffffff16612a79611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac690614917565b60405180910390fd5b612ad98284613159565b505050565b612ae6612d45565b73ffffffffffffffffffffffffffffffffffffffff16612b04611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5190614917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc190614777565b60405180910390fd5b612bd3816131ee565b50565b612bde612d45565b73ffffffffffffffffffffffffffffffffffffffff16612bfc611ef6565b73ffffffffffffffffffffffffffffffffffffffff1614612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990614917565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dc08361199f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612e1f82612cd9565b612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614857565b60405180910390fd5b6000612e698361199f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ed857508373ffffffffffffffffffffffffffffffffffffffff16612ec084610e7f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ee95750612ee88185612874565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f128261199f565b73ffffffffffffffffffffffffffffffffffffffff1614612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90614797565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcf90614817565b60405180910390fd5b612fe3838383613670565b612fee600082612d4d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461303e9190614c56565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130959190614b75565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613154838383613675565b505050565b60005b818110156131e957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906131b490614da3565b91905055506131c3600761367a565b6131d6836131d16007612e06565b613690565b80806131e190614da3565b91505061315c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a90614837565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613414919061471a565b60405180910390a3505050565b61342c848484612ef2565b613438848484846136ae565b613477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346e90614757565b60405180910390fd5b50505050565b60606008805461348c90614d40565b80601f01602080910402602001604051908101604052809291908181526020018280546134b890614d40565b80156135055780601f106134da57610100808354040283529160200191613505565b820191906000526020600020905b8154815290600101906020018083116134e857829003601f168201915b5050505050905090565b60606000821415613557576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366b565b600082905060005b6000821461358957808061357290614da3565b915050600a826135829190614bcb565b915061355f565b60008167ffffffffffffffff8111156135a5576135a4614ed9565b5b6040519080825280601f01601f1916602001820160405280156135d75781602001600182028036833780820191505090505b5090505b60008514613664576001826135f09190614c56565b9150600a856135ff9190614dec565b603061360b9190614b75565b60f81b81838151811061362157613620614eaa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365d9190614bcb565b94506135db565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b6136aa828260405180602001604052806000815250613845565b5050565b60006136cf8473ffffffffffffffffffffffffffffffffffffffff166138a0565b15613838578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f8612d45565b8786866040518563ffffffff1660e01b815260040161371a94939291906146ac565b602060405180830381600087803b15801561373457600080fd5b505af192505050801561376557506040513d601f19601f82011682018060405250810190613762919061401f565b60015b6137e8573d8060008114613795576040519150601f19603f3d011682016040523d82523d6000602084013e61379a565b606091505b506000815114156137e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d790614757565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383d565b600190505b949350505050565b61384f83836138c3565b61385c60008484846136ae565b61389b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389290614757565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392a906148d7565b60405180910390fd5b61393c81612cd9565b1561397c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613973906147b7565b60405180910390fd5b61398860008383613670565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d89190614b75565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a9960008383613675565b5050565b828054613aa990614d40565b90600052602060002090601f016020900481019282613acb5760008555613b12565b82601f10613ae457805160ff1916838001178555613b12565b82800160010185558215613b12579182015b82811115613b11578251825591602001919060010190613af6565b5b509050613b1f9190613be4565b5090565b5080546000825590600052602060002090810190613b419190613be4565b50565b828054828255906000526020600020908101928215613bd3579160200282015b82811115613bd257823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613b64565b5b509050613be09190613be4565b5090565b5b80821115613bfd576000816000905550600101613be5565b5090565b6000613c14613c0f84614a77565b614a52565b905082815260208101848484011115613c3057613c2f614f17565b5b613c3b848285614cfe565b509392505050565b6000613c56613c5184614aa8565b614a52565b905082815260208101848484011115613c7257613c71614f17565b5b613c7d848285614cfe565b509392505050565b600081359050613c94816154b1565b92915050565b60008083601f840112613cb057613caf614f0d565b5b8235905067ffffffffffffffff811115613ccd57613ccc614f08565b5b602083019150836020820283011115613ce957613ce8614f12565b5b9250929050565b600081359050613cff816154c8565b92915050565b600081359050613d14816154df565b92915050565b600081519050613d29816154df565b92915050565b600082601f830112613d4457613d43614f0d565b5b8135613d54848260208601613c01565b91505092915050565b600082601f830112613d7257613d71614f0d565b5b8135613d82848260208601613c43565b91505092915050565b600081359050613d9a816154f6565b92915050565b600081519050613daf816154f6565b92915050565b600060208284031215613dcb57613dca614f21565b5b6000613dd984828501613c85565b91505092915050565b60008060408385031215613df957613df8614f21565b5b6000613e0785828601613c85565b9250506020613e1885828601613c85565b9150509250929050565b600080600060608486031215613e3b57613e3a614f21565b5b6000613e4986828701613c85565b9350506020613e5a86828701613c85565b9250506040613e6b86828701613d8b565b9150509250925092565b60008060008060808587031215613e8f57613e8e614f21565b5b6000613e9d87828801613c85565b9450506020613eae87828801613c85565b9350506040613ebf87828801613d8b565b925050606085013567ffffffffffffffff811115613ee057613edf614f1c565b5b613eec87828801613d2f565b91505092959194509250565b60008060408385031215613f0f57613f0e614f21565b5b6000613f1d85828601613c85565b9250506020613f2e85828601613cf0565b9150509250929050565b60008060408385031215613f4f57613f4e614f21565b5b6000613f5d85828601613c85565b9250506020613f6e85828601613d8b565b9150509250929050565b60008060208385031215613f8f57613f8e614f21565b5b600083013567ffffffffffffffff811115613fad57613fac614f1c565b5b613fb985828601613c9a565b92509250509250929050565b600060208284031215613fdb57613fda614f21565b5b6000613fe984828501613cf0565b91505092915050565b60006020828403121561400857614007614f21565b5b600061401684828501613d05565b91505092915050565b60006020828403121561403557614034614f21565b5b600061404384828501613d1a565b91505092915050565b60006020828403121561406257614061614f21565b5b600082013567ffffffffffffffff8111156140805761407f614f1c565b5b61408c84828501613d5d565b91505092915050565b6000602082840312156140ab576140aa614f21565b5b60006140b984828501613d8b565b91505092915050565b6000602082840312156140d8576140d7614f21565b5b60006140e684828501613da0565b91505092915050565b6000806040838503121561410657614105614f21565b5b600061411485828601613d8b565b925050602061412585828601613c85565b9150509250929050565b600061413b838361462d565b60208301905092915050565b61415081614c8a565b82525050565b600061416182614afe565b61416b8185614b2c565b935061417683614ad9565b8060005b838110156141a757815161418e888261412f565b975061419983614b1f565b92505060018101905061417a565b5085935050505092915050565b6141bd81614c9c565b82525050565b60006141ce82614b09565b6141d88185614b3d565b93506141e8818560208601614d0d565b6141f181614f26565b840191505092915050565b600061420782614b14565b6142118185614b59565b9350614221818560208601614d0d565b61422a81614f26565b840191505092915050565b600061424082614b14565b61424a8185614b6a565b935061425a818560208601614d0d565b80840191505092915050565b6000815461427381614d40565b61427d8186614b6a565b9450600182166000811461429857600181146142a9576142dc565b60ff198316865281860193506142dc565b6142b285614ae9565b60005b838110156142d4578154818901526001820191506020810190506142b5565b838801955050505b50505092915050565b60006142f2603283614b59565b91506142fd82614f37565b604082019050919050565b6000614315602683614b59565b915061432082614f86565b604082019050919050565b6000614338602583614b59565b915061434382614fd5565b604082019050919050565b600061435b601c83614b59565b915061436682615024565b602082019050919050565b600061437e601483614b59565b91506143898261504d565b602082019050919050565b60006143a1601c83614b59565b91506143ac82615076565b602082019050919050565b60006143c4602483614b59565b91506143cf8261509f565b604082019050919050565b60006143e7601983614b59565b91506143f2826150ee565b602082019050919050565b600061440a602c83614b59565b915061441582615117565b604082019050919050565b600061442d603883614b59565b915061443882615166565b604082019050919050565b6000614450602a83614b59565b915061445b826151b5565b604082019050919050565b6000614473602983614b59565b915061447e82615204565b604082019050919050565b6000614496602083614b59565b91506144a182615253565b602082019050919050565b60006144b9602c83614b59565b91506144c48261527c565b604082019050919050565b60006144dc602083614b59565b91506144e7826152cb565b602082019050919050565b60006144ff601783614b59565b915061450a826152f4565b602082019050919050565b6000614522602f83614b59565b915061452d8261531d565b604082019050919050565b6000614545602183614b59565b91506145508261536c565b604082019050919050565b6000614568600083614b4e565b9150614573826153bb565b600082019050919050565b600061458b601483614b59565b9150614596826153be565b602082019050919050565b60006145ae603183614b59565b91506145b9826153e7565b604082019050919050565b60006145d1601783614b59565b91506145dc82615436565b602082019050919050565b60006145f4601883614b59565b91506145ff8261545f565b602082019050919050565b6000614617601383614b59565b915061462282615488565b602082019050919050565b61463681614cf4565b82525050565b61464581614cf4565b82525050565b60006146578286614235565b91506146638285614235565b915061466f8284614266565b9150819050949350505050565b60006146878261455b565b9150819050919050565b60006020820190506146a66000830184614147565b92915050565b60006080820190506146c16000830187614147565b6146ce6020830186614147565b6146db604083018561463c565b81810360608301526146ed81846141c3565b905095945050505050565b600060208201905081810360008301526147128184614156565b905092915050565b600060208201905061472f60008301846141b4565b92915050565b6000602082019050818103600083015261474f81846141fc565b905092915050565b60006020820190508181036000830152614770816142e5565b9050919050565b6000602082019050818103600083015261479081614308565b9050919050565b600060208201905081810360008301526147b08161432b565b9050919050565b600060208201905081810360008301526147d08161434e565b9050919050565b600060208201905081810360008301526147f081614371565b9050919050565b6000602082019050818103600083015261481081614394565b9050919050565b60006020820190508181036000830152614830816143b7565b9050919050565b60006020820190508181036000830152614850816143da565b9050919050565b60006020820190508181036000830152614870816143fd565b9050919050565b6000602082019050818103600083015261489081614420565b9050919050565b600060208201905081810360008301526148b081614443565b9050919050565b600060208201905081810360008301526148d081614466565b9050919050565b600060208201905081810360008301526148f081614489565b9050919050565b60006020820190508181036000830152614910816144ac565b9050919050565b60006020820190508181036000830152614930816144cf565b9050919050565b60006020820190508181036000830152614950816144f2565b9050919050565b6000602082019050818103600083015261497081614515565b9050919050565b6000602082019050818103600083015261499081614538565b9050919050565b600060208201905081810360008301526149b08161457e565b9050919050565b600060208201905081810360008301526149d0816145a1565b9050919050565b600060208201905081810360008301526149f0816145c4565b9050919050565b60006020820190508181036000830152614a10816145e7565b9050919050565b60006020820190508181036000830152614a308161460a565b9050919050565b6000602082019050614a4c600083018461463c565b92915050565b6000614a5c614a6d565b9050614a688282614d72565b919050565b6000604051905090565b600067ffffffffffffffff821115614a9257614a91614ed9565b5b614a9b82614f26565b9050602081019050919050565b600067ffffffffffffffff821115614ac357614ac2614ed9565b5b614acc82614f26565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b8082614cf4565b9150614b8b83614cf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc057614bbf614e1d565b5b828201905092915050565b6000614bd682614cf4565b9150614be183614cf4565b925082614bf157614bf0614e4c565b5b828204905092915050565b6000614c0782614cf4565b9150614c1283614cf4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c4b57614c4a614e1d565b5b828202905092915050565b6000614c6182614cf4565b9150614c6c83614cf4565b925082821015614c7f57614c7e614e1d565b5b828203905092915050565b6000614c9582614cd4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d2b578082015181840152602081019050614d10565b83811115614d3a576000848401525b50505050565b60006002820490506001821680614d5857607f821691505b60208210811415614d6c57614d6b614e7b565b5b50919050565b614d7b82614f26565b810181811067ffffffffffffffff82111715614d9a57614d99614ed9565b5b80604052505050565b6000614dae82614cf4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614de157614de0614e1d565b5b600182019050919050565b6000614df782614cf4565b9150614e0283614cf4565b925082614e1257614e11614e4c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f596f7520646f206e6f74206f776e20617274426c6f6f74730000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6154ba81614c8a565b81146154c557600080fd5b50565b6154d181614c9c565b81146154dc57600080fd5b50565b6154e881614ca8565b81146154f357600080fd5b50565b6154ff81614cf4565b811461550a57600080fd5b5056fea264697066735822122047a543d47d86510d499d9fc3120fef2e4488be63eeca1c25bf5c0dc65a355d1564736f6c63430008070033

Deployed Bytecode Sourcemap

38688:6728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25495:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26440:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27999:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27522:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39068:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44322:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38948:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44239:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40207:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39450:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28749:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40302:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44516:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44911:137;;;;;;;;;;;;;:::i;:::-;;29159:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41854:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43215:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43889:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39298:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38870:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43498:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39191:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39221:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38837:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26134:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43386:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25864:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6116:103;;;;;;;;;;;;;:::i;:::-;;44027:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39260:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40561:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5465:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41083:604;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39103:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26609:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39331:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28292:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38908:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43615:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29415:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39372:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39146:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42495:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43753:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43295:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39031:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42995:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43082:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39414:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38985:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28518:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44761:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41693:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6374:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44416:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25495:305;25597:4;25649:25;25634:40;;;:11;:40;;;;:105;;;;25706:33;25691:48;;;:11;:48;;;;25634:105;:158;;;;25756:36;25780:11;25756:23;:36::i;:::-;25634:158;25614:178;;25495:305;;;:::o;26440:100::-;26494:13;26527:5;26520:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26440:100;:::o;27999:221::-;28075:7;28103:16;28111:7;28103;:16::i;:::-;28095:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28188:15;:24;28204:7;28188:24;;;;;;;;;;;;;;;;;;;;;28181:31;;27999:221;;;:::o;27522:411::-;27603:13;27619:23;27634:7;27619:14;:23::i;:::-;27603:39;;27667:5;27661:11;;:2;:11;;;;27653:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27761:5;27745:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27770:37;27787:5;27794:12;:10;:12::i;:::-;27770:16;:37::i;:::-;27745:62;27723:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27904:21;27913:2;27917:7;27904:8;:21::i;:::-;27592:341;27522:411;;:::o;39068:30::-;;;;:::o;44322:88::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44398:6:::1;44380:15;;:24;;;;;;;;;;;;;;;;;;44322:88:::0;:::o;38948:32::-;;;;:::o;44133:100::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44217:10:::1;44205:9;:22;;;;;;;;;;;;:::i;:::-;;44133:100:::0;:::o;44239:77::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44304:6:::1;44295;;:15;;;;;;;;;;;;;;;;;;44239:77:::0;:::o;40207:89::-;40251:7;40274:16;:6;:14;:16::i;:::-;40267:23;;40207:89;:::o;39450:55::-;;;;;;;;;;;;;;;;;:::o;28749:339::-;28944:41;28963:12;:10;:12::i;:::-;28977:7;28944:18;:41::i;:::-;28936:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29052:28;29062:4;29068:2;29072:7;29052:9;:28::i;:::-;28749:339;;;:::o;40302:253::-;40373:11;39800:1;39786:11;:15;:52;;;;;39820:18;;39805:11;:33;;39786:52;39778:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39912:9;;39897:11;39878:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39870:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40402:6:::1;;;;;;;;;;;40401:7;40393:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;40471:11;40464:4;;:18;;;;:::i;:::-;40451:9;:31;;40443:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40515:34;40525:10;40537:11;40515:9;:34::i;:::-;40302:253:::0;;:::o;44516:239::-;44575:4;44593:6;44602:1;44593:10;;44588:143;44609:20;:27;;;;44605:1;:31;44588:143;;;44683:5;44656:32;;:20;44677:1;44656:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;44652:72;;;44710:4;44703:11;;;;;44652:72;44638:3;;;;;:::i;:::-;;;;44588:143;;;;44744:5;44737:12;;44516:239;;;;:::o;44911:137::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44956:7:::1;44977;:5;:7::i;:::-;44969:21;;44998;44969:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44955:69;;;45039:2;45031:11;;;::::0;::::1;;44948:100;44911:137::o:0;29159:185::-;29297:39;29314:4;29320:2;29324:7;29297:39;;;;;;;;;;;;:16;:39::i;:::-;29159:185;;;:::o;41854:635::-;41929:16;41957:23;41983:17;41993:6;41983:9;:17::i;:::-;41957:43;;42007:30;42054:15;42040:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42007:63;;42077:22;42102:1;42077:26;;42110:23;42146:309;42171:15;42153;:33;:64;;;;;42208:9;;42190:14;:27;;42153:64;42146:309;;;42228:25;42256:23;42264:14;42256:7;:23::i;:::-;42228:51;;42315:6;42294:27;;:17;:27;;;42290:131;;;42367:14;42334:13;42348:15;42334:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42394:17;;;;;:::i;:::-;;;;42290:131;42431:16;;;;;:::i;:::-;;;;42219:236;42146:309;;;42470:13;42463:20;;;;;;41854:635;;;:::o;43215:74::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43278:5:::1;43271:4;:12;;;;43215:74:::0;:::o;43889:132::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43997:18:::1;43977:17;:38;;;;;;;;;;;;:::i;:::-;;43889:132:::0;:::o;39298:28::-;;;;;;;;;;;;;:::o;38870:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43498:111::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43587:16:::1;43576:8;:27;;;;43498:111:::0;:::o;39191:25::-;;;;;;;;;;;;;:::o;39221:34::-;;;;;;;;;;;;;:::o;38837:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26134:239::-;26206:7;26226:13;26242:7;:16;26250:7;26242:16;;;;;;;;;;;;;;;;;;;;;26226:32;;26294:1;26277:19;;:5;:19;;;;26269:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26360:5;26353:12;;;26134:239;;;:::o;43386:106::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43470:16:::1;43458:9;:28;;;;43386:106:::0;:::o;25864:208::-;25936:7;25981:1;25964:19;;:5;:19;;;;25956:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26048:9;:16;26058:5;26048:16;;;;;;;;;;;;;;;;26041:23;;25864:208;;;:::o;6116:103::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6181:30:::1;6208:1;6181:18;:30::i;:::-;6116:103::o:0;44027:100::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44111:10:::1;44099:9;:22;;;;;;;;;;;;:::i;:::-;;44027:100:::0;:::o;39260:33::-;;;;;;;;;;;;;:::o;40561:514::-;40637:11;40042:1;40028:11;:15;:52;;;;;40062:18;;40047:11;:33;;40028:52;40020:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40154:8;;40139:11;40120:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:42;;40112:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40666:15:::1;;;;;;;;;;;40665:16;40657:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;40724:25;40738:10;40724:13;:25::i;:::-;40716:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40786:24;40813:20;:32;40834:10;40813:32;;;;;;;;;;;;;;;;40786:59;;40896:18;;40881:11;40862:16;:30;;;;:::i;:::-;:52;;40854:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;40991:11;40975:13;;:27;;;;:::i;:::-;40962:9;:40;;40954:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41035:34;41045:10;41057:11;41035:9;:34::i;:::-;40650:425;40561:514:::0;;:::o;5465:87::-;5511:7;5538:6;;;;;;;;;;;5531:13;;5465:87;:::o;41083:604::-;41158:11;40042:1;40028:11;:15;:52;;;;;40062:18;;40047:11;:33;;40028:52;40020:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40154:8;;40139:11;40120:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:42;;40112:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41187:14:::1;;;;;;;;;;;41186:15;41178:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41236:13;41260:16;;;;;;;;;;;41236:41;;41284:19;41306:5;:15;;;41322:10;41306:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41284:49;;41363:1;41348:11;:16;;41340:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41400:24;41427:20;:32;41448:10;41427:32;;;;;;;;;;;;;;;;41400:59;;41508:18;;41493:11;41474:16;:30;;;;:::i;:::-;:52;;41466:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;41603:11;41587:13;;:27;;;;:::i;:::-;41574:9;:40;;41566:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41647:34;41657:10;41669:11;41647:9;:34::i;:::-;41171:516;;;41083:604:::0;;:::o;39103:38::-;;;;:::o;26609:104::-;26665:13;26698:7;26691:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26609:104;:::o;39331:34::-;;;;;;;;;;;;;:::o;28292:155::-;28387:52;28406:12;:10;:12::i;:::-;28420:8;28430;28387:18;:52::i;:::-;28292:155;;:::o;38908:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43615:130::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43720:19:::1;43699:18;:40;;;;43615:130:::0;:::o;29415:328::-;29590:41;29609:12;:10;:12::i;:::-;29623:7;29590:18;:41::i;:::-;29582:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29696:39;29710:4;29716:2;29720:7;29729:5;29696:13;:39::i;:::-;29415:328;;;;:::o;39372:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39146:38::-;;;;:::o;42495:494::-;42594:13;42635:17;42643:8;42635:7;:17::i;:::-;42619:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42742:5;42730:17;;:8;;;;;;;;;;;:17;;;42726:64;;;42765:17;42758:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42726:64;42798:28;42829:10;:8;:10::i;:::-;42798:41;;42884:1;42859:14;42853:28;:32;:130;;;;;;;;;;;;;;;;;42921:14;42937:19;:8;:17;:19::i;:::-;42958:9;42904:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42853:130;42846:137;;;42495:494;;;;:::o;43753:130::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43858:19:::1;43837:18;:40;;;;43753:130:::0;:::o;43295:85::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:5:::1;43353:13;:21;;;;43295:85:::0;:::o;39031:32::-;;;;:::o;42995:81::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43064:6:::1;43053:8;;:17;;;;;;;;;;;;;;;;;;42995:81:::0;:::o;43082:127::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43183:20:::1;43164:16;;:39;;;;;;;;;;;;;;;;;;43082:127:::0;:::o;39414:31::-;;;;;;;;;;;;;:::o;38985:41::-;;;;:::o;28518:164::-;28615:4;28639:18;:25;28658:5;28639:25;;;;;;;;;;;;;;;:35;28665:8;28639:35;;;;;;;;;;;;;;;;;;;;;;;;;28632:42;;28518:164;;;;:::o;44761:144::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44843:20:::1;;44836:27;;;;:::i;:::-;44893:6;;44870:20;:29;;;;;;;:::i;:::-;;44761:144:::0;;:::o;41693:155::-;41779:11;39800:1;39786:11;:15;:52;;;;;39820:18;;39805:11;:33;;39786:52;39778:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39912:9;;39897:11;39878:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39870:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:12:::1;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41809:33:::2;41819:9;41830:11;41809:9;:33::i;:::-;41693:155:::0;;;:::o;6374:201::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6483:1:::1;6463:22;;:8;:22;;;;6455:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6539:28;6558:8;6539:18;:28::i;:::-;6374:201:::0;:::o;44416:94::-;5696:12;:10;:12::i;:::-;5685:23;;:7;:5;:7::i;:::-;:23;;;5677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44498:6:::1;44481:14;;:23;;;;;;;;;;;;;;;;;;44416:94:::0;:::o;18249:157::-;18334:4;18373:25;18358:40;;;:11;:40;;;;18351:47;;18249:157;;;:::o;31253:127::-;31318:4;31370:1;31342:30;;:7;:16;31350:7;31342:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31335:37;;31253:127;;;:::o;4189:98::-;4242:7;4269:10;4262:17;;4189:98;:::o;35399:174::-;35501:2;35474:15;:24;35490:7;35474:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35557:7;35553:2;35519:46;;35528:23;35543:7;35528:14;:23::i;:::-;35519:46;;;;;;;;;;;;35399:174;;:::o;793:114::-;858:7;885;:14;;;878:21;;793:114;;;:::o;31547:348::-;31640:4;31665:16;31673:7;31665;:16::i;:::-;31657:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31741:13;31757:23;31772:7;31757:14;:23::i;:::-;31741:39;;31810:5;31799:16;;:7;:16;;;:51;;;;31843:7;31819:31;;:20;31831:7;31819:11;:20::i;:::-;:31;;;31799:51;:87;;;;31854:32;31871:5;31878:7;31854:16;:32::i;:::-;31799:87;31791:96;;;31547:348;;;;:::o;34656:625::-;34815:4;34788:31;;:23;34803:7;34788:14;:23::i;:::-;:31;;;34780:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34894:1;34880:16;;:2;:16;;;;34872:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34950:39;34971:4;34977:2;34981:7;34950:20;:39::i;:::-;35054:29;35071:1;35075:7;35054:8;:29::i;:::-;35115:1;35096:9;:15;35106:4;35096:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35144:1;35127:9;:13;35137:2;35127:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35175:2;35156:7;:16;35164:7;35156:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35214:7;35210:2;35195:27;;35204:4;35195:27;;;;;;;;;;;;35235:38;35255:4;35261:2;35265:7;35235:19;:38::i;:::-;34656:625;;;:::o;45054:249::-;45134:9;45129:169;45153:11;45149:1;:15;45129:169;;;45180:20;:32;45201:10;45180:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;45225:18;:6;:16;:18::i;:::-;45252:38;45262:9;45273:16;:6;:14;:16::i;:::-;45252:9;:38::i;:::-;45166:3;;;;;:::i;:::-;;;;45129:169;;;;45054:249;;:::o;6735:191::-;6809:16;6828:6;;;;;;;;;;;6809:25;;6854:8;6845:6;;:17;;;;;;;;;;;;;;;;;;6909:8;6878:40;;6899:8;6878:40;;;;;;;;;;;;6798:128;6735:191;:::o;35715:315::-;35870:8;35861:17;;:5;:17;;;;35853:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35957:8;35919:18;:25;35938:5;35919:25;;;;;;;;;;;;;;;:35;35945:8;35919:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36003:8;35981:41;;35996:5;35981:41;;;36013:8;35981:41;;;;;;:::i;:::-;;;;;;;;35715:315;;;:::o;30625:::-;30782:28;30792:4;30798:2;30802:7;30782:9;:28::i;:::-;30829:48;30852:4;30858:2;30862:7;30871:5;30829:22;:48::i;:::-;30821:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30625:315;;;;:::o;45309:104::-;45369:13;45398:9;45391:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45309:104;:::o;1751:723::-;1807:13;2037:1;2028:5;:10;2024:53;;;2055:10;;;;;;;;;;;;;;;;;;;;;2024:53;2087:12;2102:5;2087:20;;2118:14;2143:78;2158:1;2150:4;:9;2143:78;;2176:8;;;;;:::i;:::-;;;;2207:2;2199:10;;;;;:::i;:::-;;;2143:78;;;2231:19;2263:6;2253:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2231:39;;2281:154;2297:1;2288:5;:10;2281:154;;2325:1;2315:11;;;;;:::i;:::-;;;2392:2;2384:5;:10;;;;:::i;:::-;2371:2;:24;;;;:::i;:::-;2358:39;;2341:6;2348;2341:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2421:2;2412:11;;;;;:::i;:::-;;;2281:154;;;2459:6;2445:21;;;;;1751:723;;;;:::o;37966:126::-;;;;:::o;38477:125::-;;;;:::o;915:127::-;1022:1;1004:7;:14;;;:19;;;;;;;;;;;915:127;:::o;32237:110::-;32313:26;32323:2;32327:7;32313:26;;;;;;;;;;;;:9;:26::i;:::-;32237:110;;:::o;36595:799::-;36750:4;36771:15;:2;:13;;;:15::i;:::-;36767:620;;;36823:2;36807:36;;;36844:12;:10;:12::i;:::-;36858:4;36864:7;36873:5;36807:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36803:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37066:1;37049:6;:13;:18;37045:272;;;37092:60;;;;;;;;;;:::i;:::-;;;;;;;;37045:272;37267:6;37261:13;37252:6;37248:2;37244:15;37237:38;36803:529;36940:41;;;36930:51;;;:6;:51;;;;36923:58;;;;;36767:620;37371:4;37364:11;;36595:799;;;;;;;:::o;32574:321::-;32704:18;32710:2;32714:7;32704:5;:18::i;:::-;32755:54;32786:1;32790:2;32794:7;32803:5;32755:22;:54::i;:::-;32733:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32574:321;;;:::o;8166:326::-;8226:4;8483:1;8461:7;:19;;;:23;8454:30;;8166:326;;;:::o;33231:439::-;33325:1;33311:16;;:2;:16;;;;33303:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33384:16;33392:7;33384;:16::i;:::-;33383:17;33375:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33446:45;33475:1;33479:2;33483:7;33446:20;:45::i;:::-;33521:1;33504:9;:13;33514:2;33504:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33552:2;33533:7;:16;33541:7;33533:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33597:7;33593:2;33572:33;;33589:1;33572:33;;;;;;;;;;;;33618:44;33646:1;33650:2;33654:7;33618:19;:44::i;:::-;33231:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:143::-;2925:5;2956:6;2950:13;2941:22;;2972:33;2999:5;2972:33;:::i;:::-;2868:143;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:474::-;3420:6;3428;3477:2;3465:9;3456:7;3452:23;3448:32;3445:119;;;3483:79;;:::i;:::-;3445:119;3603:1;3628:53;3673:7;3664:6;3653:9;3649:22;3628:53;:::i;:::-;3618:63;;3574:117;3730:2;3756:53;3801:7;3792:6;3781:9;3777:22;3756:53;:::i;:::-;3746:63;;3701:118;3352:474;;;;;:::o;3832:619::-;3909:6;3917;3925;3974:2;3962:9;3953:7;3949:23;3945:32;3942:119;;;3980:79;;:::i;:::-;3942:119;4100:1;4125:53;4170:7;4161:6;4150:9;4146:22;4125:53;:::i;:::-;4115:63;;4071:117;4227:2;4253:53;4298:7;4289:6;4278:9;4274:22;4253:53;:::i;:::-;4243:63;;4198:118;4355:2;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4326:118;3832:619;;;;;:::o;4457:943::-;4552:6;4560;4568;4576;4625:3;4613:9;4604:7;4600:23;4596:33;4593:120;;;4632:79;;:::i;:::-;4593:120;4752:1;4777:53;4822:7;4813:6;4802:9;4798:22;4777:53;:::i;:::-;4767:63;;4723:117;4879:2;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4850:118;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;5163:2;5152:9;5148:18;5135:32;5194:18;5186:6;5183:30;5180:117;;;5216:79;;:::i;:::-;5180:117;5321:62;5375:7;5366:6;5355:9;5351:22;5321:62;:::i;:::-;5311:72;;5106:287;4457:943;;;;;;;:::o;5406:468::-;5471:6;5479;5528:2;5516:9;5507:7;5503:23;5499:32;5496:119;;;5534:79;;:::i;:::-;5496:119;5654:1;5679:53;5724:7;5715:6;5704:9;5700:22;5679:53;:::i;:::-;5669:63;;5625:117;5781:2;5807:50;5849:7;5840:6;5829:9;5825:22;5807:50;:::i;:::-;5797:60;;5752:115;5406:468;;;;;:::o;5880:474::-;5948:6;5956;6005:2;5993:9;5984:7;5980:23;5976:32;5973:119;;;6011:79;;:::i;:::-;5973:119;6131:1;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6102:117;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;5880:474;;;;;:::o;6360:559::-;6446:6;6454;6503:2;6491:9;6482:7;6478:23;6474:32;6471:119;;;6509:79;;:::i;:::-;6471:119;6657:1;6646:9;6642:17;6629:31;6687:18;6679:6;6676:30;6673:117;;;6709:79;;:::i;:::-;6673:117;6822:80;6894:7;6885:6;6874:9;6870:22;6822:80;:::i;:::-;6804:98;;;;6600:312;6360:559;;;;;:::o;6925:323::-;6981:6;7030:2;7018:9;7009:7;7005:23;7001:32;6998:119;;;7036:79;;:::i;:::-;6998:119;7156:1;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7127:114;6925:323;;;;:::o;7254:327::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:52;7556:7;7547:6;7536:9;7532:22;7512:52;:::i;:::-;7502:62;;7458:116;7254:327;;;;:::o;7587:349::-;7656:6;7705:2;7693:9;7684:7;7680:23;7676:32;7673:119;;;7711:79;;:::i;:::-;7673:119;7831:1;7856:63;7911:7;7902:6;7891:9;7887:22;7856:63;:::i;:::-;7846:73;;7802:127;7587:349;;;;:::o;7942:509::-;8011:6;8060:2;8048:9;8039:7;8035:23;8031:32;8028:119;;;8066:79;;:::i;:::-;8028:119;8214:1;8203:9;8199:17;8186:31;8244:18;8236:6;8233:30;8230:117;;;8266:79;;:::i;:::-;8230:117;8371:63;8426:7;8417:6;8406:9;8402:22;8371:63;:::i;:::-;8361:73;;8157:287;7942:509;;;;:::o;8457:329::-;8516:6;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8457:329;;;;:::o;8792:351::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9037:1;9062:64;9118:7;9109:6;9098:9;9094:22;9062:64;:::i;:::-;9052:74;;9008:128;8792:351;;;;:::o;9149:474::-;9217:6;9225;9274:2;9262:9;9253:7;9249:23;9245:32;9242:119;;;9280:79;;:::i;:::-;9242:119;9400:1;9425:53;9470:7;9461:6;9450:9;9446:22;9425:53;:::i;:::-;9415:63;;9371:117;9527:2;9553:53;9598:7;9589:6;9578:9;9574:22;9553:53;:::i;:::-;9543:63;;9498:118;9149:474;;;;;:::o;9629:179::-;9698:10;9719:46;9761:3;9753:6;9719:46;:::i;:::-;9797:4;9792:3;9788:14;9774:28;;9629:179;;;;:::o;9814:118::-;9901:24;9919:5;9901:24;:::i;:::-;9896:3;9889:37;9814:118;;:::o;9968:732::-;10087:3;10116:54;10164:5;10116:54;:::i;:::-;10186:86;10265:6;10260:3;10186:86;:::i;:::-;10179:93;;10296:56;10346:5;10296:56;:::i;:::-;10375:7;10406:1;10391:284;10416:6;10413:1;10410:13;10391:284;;;10492:6;10486:13;10519:63;10578:3;10563:13;10519:63;:::i;:::-;10512:70;;10605:60;10658:6;10605:60;:::i;:::-;10595:70;;10451:224;10438:1;10435;10431:9;10426:14;;10391:284;;;10395:14;10691:3;10684:10;;10092:608;;;9968:732;;;;:::o;10706:109::-;10787:21;10802:5;10787:21;:::i;:::-;10782:3;10775:34;10706:109;;:::o;10821:360::-;10907:3;10935:38;10967:5;10935:38;:::i;:::-;10989:70;11052:6;11047:3;10989:70;:::i;:::-;10982:77;;11068:52;11113:6;11108:3;11101:4;11094:5;11090:16;11068:52;:::i;:::-;11145:29;11167:6;11145:29;:::i;:::-;11140:3;11136:39;11129:46;;10911:270;10821:360;;;;:::o;11187:364::-;11275:3;11303:39;11336:5;11303:39;:::i;:::-;11358:71;11422:6;11417:3;11358:71;:::i;:::-;11351:78;;11438:52;11483:6;11478:3;11471:4;11464:5;11460:16;11438:52;:::i;:::-;11515:29;11537:6;11515:29;:::i;:::-;11510:3;11506:39;11499:46;;11279:272;11187:364;;;;:::o;11557:377::-;11663:3;11691:39;11724:5;11691:39;:::i;:::-;11746:89;11828:6;11823:3;11746:89;:::i;:::-;11739:96;;11844:52;11889:6;11884:3;11877:4;11870:5;11866:16;11844:52;:::i;:::-;11921:6;11916:3;11912:16;11905:23;;11667:267;11557:377;;;;:::o;11964:845::-;12067:3;12104:5;12098:12;12133:36;12159:9;12133:36;:::i;:::-;12185:89;12267:6;12262:3;12185:89;:::i;:::-;12178:96;;12305:1;12294:9;12290:17;12321:1;12316:137;;;;12467:1;12462:341;;;;12283:520;;12316:137;12400:4;12396:9;12385;12381:25;12376:3;12369:38;12436:6;12431:3;12427:16;12420:23;;12316:137;;12462:341;12529:38;12561:5;12529:38;:::i;:::-;12589:1;12603:154;12617:6;12614:1;12611:13;12603:154;;;12691:7;12685:14;12681:1;12676:3;12672:11;12665:35;12741:1;12732:7;12728:15;12717:26;;12639:4;12636:1;12632:12;12627:17;;12603:154;;;12786:6;12781:3;12777:16;12770:23;;12469:334;;12283:520;;12071:738;;11964:845;;;;:::o;12815:366::-;12957:3;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13054:93;13143:3;13054:93;:::i;:::-;13172:2;13167:3;13163:12;13156:19;;12815:366;;;:::o;13187:::-;13329:3;13350:67;13414:2;13409:3;13350:67;:::i;:::-;13343:74;;13426:93;13515:3;13426:93;:::i;:::-;13544:2;13539:3;13535:12;13528:19;;13187:366;;;:::o;13559:::-;13701:3;13722:67;13786:2;13781:3;13722:67;:::i;:::-;13715:74;;13798:93;13887:3;13798:93;:::i;:::-;13916:2;13911:3;13907:12;13900:19;;13559:366;;;:::o;13931:::-;14073:3;14094:67;14158:2;14153:3;14094:67;:::i;:::-;14087:74;;14170:93;14259:3;14170:93;:::i;:::-;14288:2;14283:3;14279:12;14272:19;;13931:366;;;:::o;14303:::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:::-;14817:3;14838:67;14902:2;14897:3;14838:67;:::i;:::-;14831:74;;14914:93;15003:3;14914:93;:::i;:::-;15032:2;15027:3;15023:12;15016:19;;14675:366;;;:::o;15047:::-;15189:3;15210:67;15274:2;15269:3;15210:67;:::i;:::-;15203:74;;15286:93;15375:3;15286:93;:::i;:::-;15404:2;15399:3;15395:12;15388:19;;15047:366;;;:::o;15419:::-;15561:3;15582:67;15646:2;15641:3;15582:67;:::i;:::-;15575:74;;15658:93;15747:3;15658:93;:::i;:::-;15776:2;15771:3;15767:12;15760:19;;15419:366;;;:::o;15791:::-;15933:3;15954:67;16018:2;16013:3;15954:67;:::i;:::-;15947:74;;16030:93;16119:3;16030:93;:::i;:::-;16148:2;16143:3;16139:12;16132:19;;15791:366;;;:::o;16163:::-;16305:3;16326:67;16390:2;16385:3;16326:67;:::i;:::-;16319:74;;16402:93;16491:3;16402:93;:::i;:::-;16520:2;16515:3;16511:12;16504:19;;16163:366;;;:::o;16535:::-;16677:3;16698:67;16762:2;16757:3;16698:67;:::i;:::-;16691:74;;16774:93;16863:3;16774:93;:::i;:::-;16892:2;16887:3;16883:12;16876:19;;16535:366;;;:::o;16907:::-;17049:3;17070:67;17134:2;17129:3;17070:67;:::i;:::-;17063:74;;17146:93;17235:3;17146:93;:::i;:::-;17264:2;17259:3;17255:12;17248:19;;16907:366;;;:::o;17279:::-;17421:3;17442:67;17506:2;17501:3;17442:67;:::i;:::-;17435:74;;17518:93;17607:3;17518:93;:::i;:::-;17636:2;17631:3;17627:12;17620:19;;17279:366;;;:::o;17651:::-;17793:3;17814:67;17878:2;17873:3;17814:67;:::i;:::-;17807:74;;17890:93;17979:3;17890:93;:::i;:::-;18008:2;18003:3;17999:12;17992:19;;17651:366;;;:::o;18023:::-;18165:3;18186:67;18250:2;18245:3;18186:67;:::i;:::-;18179:74;;18262:93;18351:3;18262:93;:::i;:::-;18380:2;18375:3;18371:12;18364:19;;18023:366;;;:::o;18395:::-;18537:3;18558:67;18622:2;18617:3;18558:67;:::i;:::-;18551:74;;18634:93;18723:3;18634:93;:::i;:::-;18752:2;18747:3;18743:12;18736:19;;18395:366;;;:::o;18767:::-;18909:3;18930:67;18994:2;18989:3;18930:67;:::i;:::-;18923:74;;19006:93;19095:3;19006:93;:::i;:::-;19124:2;19119:3;19115:12;19108:19;;18767:366;;;:::o;19139:::-;19281:3;19302:67;19366:2;19361:3;19302:67;:::i;:::-;19295:74;;19378:93;19467:3;19378:93;:::i;:::-;19496:2;19491:3;19487:12;19480:19;;19139:366;;;:::o;19511:398::-;19670:3;19691:83;19772:1;19767:3;19691:83;:::i;:::-;19684:90;;19783:93;19872:3;19783:93;:::i;:::-;19901:1;19896:3;19892:11;19885:18;;19511:398;;;:::o;19915:366::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:::-;20801:3;20822:67;20886:2;20881:3;20822:67;:::i;:::-;20815:74;;20898:93;20987:3;20898:93;:::i;:::-;21016:2;21011:3;21007:12;21000:19;;20659:366;;;:::o;21031:::-;21173:3;21194:67;21258:2;21253:3;21194:67;:::i;:::-;21187:74;;21270:93;21359:3;21270:93;:::i;:::-;21388:2;21383:3;21379:12;21372:19;;21031:366;;;:::o;21403:::-;21545:3;21566:67;21630:2;21625:3;21566:67;:::i;:::-;21559:74;;21642:93;21731:3;21642:93;:::i;:::-;21760:2;21755:3;21751:12;21744:19;;21403:366;;;:::o;21775:108::-;21852:24;21870:5;21852:24;:::i;:::-;21847:3;21840:37;21775:108;;:::o;21889:118::-;21976:24;21994:5;21976:24;:::i;:::-;21971:3;21964:37;21889:118;;:::o;22013:589::-;22238:3;22260:95;22351:3;22342:6;22260:95;:::i;:::-;22253:102;;22372:95;22463:3;22454:6;22372:95;:::i;:::-;22365:102;;22484:92;22572:3;22563:6;22484:92;:::i;:::-;22477:99;;22593:3;22586:10;;22013:589;;;;;;:::o;22608:379::-;22792:3;22814:147;22957:3;22814:147;:::i;:::-;22807:154;;22978:3;22971:10;;22608:379;;;:::o;22993:222::-;23086:4;23124:2;23113:9;23109:18;23101:26;;23137:71;23205:1;23194:9;23190:17;23181:6;23137:71;:::i;:::-;22993:222;;;;:::o;23221:640::-;23416:4;23454:3;23443:9;23439:19;23431:27;;23468:71;23536:1;23525:9;23521:17;23512:6;23468:71;:::i;:::-;23549:72;23617:2;23606:9;23602:18;23593:6;23549:72;:::i;:::-;23631;23699:2;23688:9;23684:18;23675:6;23631:72;:::i;:::-;23750:9;23744:4;23740:20;23735:2;23724:9;23720:18;23713:48;23778:76;23849:4;23840:6;23778:76;:::i;:::-;23770:84;;23221:640;;;;;;;:::o;23867:373::-;24010:4;24048:2;24037:9;24033:18;24025:26;;24097:9;24091:4;24087:20;24083:1;24072:9;24068:17;24061:47;24125:108;24228:4;24219:6;24125:108;:::i;:::-;24117:116;;23867:373;;;;:::o;24246:210::-;24333:4;24371:2;24360:9;24356:18;24348:26;;24384:65;24446:1;24435:9;24431:17;24422:6;24384:65;:::i;:::-;24246:210;;;;:::o;24462:313::-;24575:4;24613:2;24602:9;24598:18;24590:26;;24662:9;24656:4;24652:20;24648:1;24637:9;24633:17;24626:47;24690:78;24763:4;24754:6;24690:78;:::i;:::-;24682:86;;24462:313;;;;:::o;24781:419::-;24947:4;24985:2;24974:9;24970:18;24962:26;;25034:9;25028:4;25024:20;25020:1;25009:9;25005:17;24998:47;25062:131;25188:4;25062:131;:::i;:::-;25054:139;;24781:419;;;:::o;25206:::-;25372:4;25410:2;25399:9;25395:18;25387:26;;25459:9;25453:4;25449:20;25445:1;25434:9;25430:17;25423:47;25487:131;25613:4;25487:131;:::i;:::-;25479:139;;25206:419;;;:::o;25631:::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25884:9;25878:4;25874:20;25870:1;25859:9;25855:17;25848:47;25912:131;26038:4;25912:131;:::i;:::-;25904:139;;25631:419;;;:::o;26056:::-;26222:4;26260:2;26249:9;26245:18;26237:26;;26309:9;26303:4;26299:20;26295:1;26284:9;26280:17;26273:47;26337:131;26463:4;26337:131;:::i;:::-;26329:139;;26056:419;;;:::o;26481:::-;26647:4;26685:2;26674:9;26670:18;26662:26;;26734:9;26728:4;26724:20;26720:1;26709:9;26705:17;26698:47;26762:131;26888:4;26762:131;:::i;:::-;26754:139;;26481:419;;;:::o;26906:::-;27072:4;27110:2;27099:9;27095:18;27087:26;;27159:9;27153:4;27149:20;27145:1;27134:9;27130:17;27123:47;27187:131;27313:4;27187:131;:::i;:::-;27179:139;;26906:419;;;:::o;27331:::-;27497:4;27535:2;27524:9;27520:18;27512:26;;27584:9;27578:4;27574:20;27570:1;27559:9;27555:17;27548:47;27612:131;27738:4;27612:131;:::i;:::-;27604:139;;27331:419;;;:::o;27756:::-;27922:4;27960:2;27949:9;27945:18;27937:26;;28009:9;28003:4;27999:20;27995:1;27984:9;27980:17;27973:47;28037:131;28163:4;28037:131;:::i;:::-;28029:139;;27756:419;;;:::o;28181:::-;28347:4;28385:2;28374:9;28370:18;28362:26;;28434:9;28428:4;28424:20;28420:1;28409:9;28405:17;28398:47;28462:131;28588:4;28462:131;:::i;:::-;28454:139;;28181:419;;;:::o;28606:::-;28772:4;28810:2;28799:9;28795:18;28787:26;;28859:9;28853:4;28849:20;28845:1;28834:9;28830:17;28823:47;28887:131;29013:4;28887:131;:::i;:::-;28879:139;;28606:419;;;:::o;29031:::-;29197:4;29235:2;29224:9;29220:18;29212:26;;29284:9;29278:4;29274:20;29270:1;29259:9;29255:17;29248:47;29312:131;29438:4;29312:131;:::i;:::-;29304:139;;29031:419;;;:::o;29456:::-;29622:4;29660:2;29649:9;29645:18;29637:26;;29709:9;29703:4;29699:20;29695:1;29684:9;29680:17;29673:47;29737:131;29863:4;29737:131;:::i;:::-;29729:139;;29456:419;;;:::o;29881:::-;30047:4;30085:2;30074:9;30070:18;30062:26;;30134:9;30128:4;30124:20;30120:1;30109:9;30105:17;30098:47;30162:131;30288:4;30162:131;:::i;:::-;30154:139;;29881:419;;;:::o;30306:::-;30472:4;30510:2;30499:9;30495:18;30487:26;;30559:9;30553:4;30549:20;30545:1;30534:9;30530:17;30523:47;30587:131;30713:4;30587:131;:::i;:::-;30579:139;;30306:419;;;:::o;30731:::-;30897:4;30935:2;30924:9;30920:18;30912:26;;30984:9;30978:4;30974:20;30970:1;30959:9;30955:17;30948:47;31012:131;31138:4;31012:131;:::i;:::-;31004:139;;30731:419;;;:::o;31156:::-;31322:4;31360:2;31349:9;31345:18;31337:26;;31409:9;31403:4;31399:20;31395:1;31384:9;31380:17;31373:47;31437:131;31563:4;31437:131;:::i;:::-;31429:139;;31156:419;;;:::o;31581:::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31834:9;31828:4;31824:20;31820:1;31809:9;31805:17;31798:47;31862:131;31988:4;31862:131;:::i;:::-;31854:139;;31581:419;;;:::o;32006:::-;32172:4;32210:2;32199:9;32195:18;32187:26;;32259:9;32253:4;32249:20;32245:1;32234:9;32230:17;32223:47;32287:131;32413:4;32287:131;:::i;:::-;32279:139;;32006:419;;;:::o;32431:::-;32597:4;32635:2;32624:9;32620:18;32612:26;;32684:9;32678:4;32674:20;32670:1;32659:9;32655:17;32648:47;32712:131;32838:4;32712:131;:::i;:::-;32704:139;;32431:419;;;:::o;32856:::-;33022:4;33060:2;33049:9;33045:18;33037:26;;33109:9;33103:4;33099:20;33095:1;33084:9;33080:17;33073:47;33137:131;33263:4;33137:131;:::i;:::-;33129:139;;32856:419;;;:::o;33281:::-;33447:4;33485:2;33474:9;33470:18;33462:26;;33534:9;33528:4;33524:20;33520:1;33509:9;33505:17;33498:47;33562:131;33688:4;33562:131;:::i;:::-;33554:139;;33281:419;;;:::o;33706:::-;33872:4;33910:2;33899:9;33895:18;33887:26;;33959:9;33953:4;33949:20;33945:1;33934:9;33930:17;33923:47;33987:131;34113:4;33987:131;:::i;:::-;33979:139;;33706:419;;;:::o;34131:::-;34297:4;34335:2;34324:9;34320:18;34312:26;;34384:9;34378:4;34374:20;34370:1;34359:9;34355:17;34348:47;34412:131;34538:4;34412:131;:::i;:::-;34404:139;;34131:419;;;:::o;34556:222::-;34649:4;34687:2;34676:9;34672:18;34664:26;;34700:71;34768:1;34757:9;34753:17;34744:6;34700:71;:::i;:::-;34556:222;;;;:::o;34784:129::-;34818:6;34845:20;;:::i;:::-;34835:30;;34874:33;34902:4;34894:6;34874:33;:::i;:::-;34784:129;;;:::o;34919:75::-;34952:6;34985:2;34979:9;34969:19;;34919:75;:::o;35000:307::-;35061:4;35151:18;35143:6;35140:30;35137:56;;;35173:18;;:::i;:::-;35137:56;35211:29;35233:6;35211:29;:::i;:::-;35203:37;;35295:4;35289;35285:15;35277:23;;35000:307;;;:::o;35313:308::-;35375:4;35465:18;35457:6;35454:30;35451:56;;;35487:18;;:::i;:::-;35451:56;35525:29;35547:6;35525:29;:::i;:::-;35517:37;;35609:4;35603;35599:15;35591:23;;35313:308;;;:::o;35627:132::-;35694:4;35717:3;35709:11;;35747:4;35742:3;35738:14;35730:22;;35627:132;;;:::o;35765:141::-;35814:4;35837:3;35829:11;;35860:3;35857:1;35850:14;35894:4;35891:1;35881:18;35873:26;;35765:141;;;:::o;35912:114::-;35979:6;36013:5;36007:12;35997:22;;35912:114;;;:::o;36032:98::-;36083:6;36117:5;36111:12;36101:22;;36032:98;;;:::o;36136:99::-;36188:6;36222:5;36216:12;36206:22;;36136:99;;;:::o;36241:113::-;36311:4;36343;36338:3;36334:14;36326:22;;36241:113;;;:::o;36360:184::-;36459:11;36493:6;36488:3;36481:19;36533:4;36528:3;36524:14;36509:29;;36360:184;;;;:::o;36550:168::-;36633:11;36667:6;36662:3;36655:19;36707:4;36702:3;36698:14;36683:29;;36550:168;;;;:::o;36724:147::-;36825:11;36862:3;36847:18;;36724:147;;;;:::o;36877:169::-;36961:11;36995:6;36990:3;36983:19;37035:4;37030:3;37026:14;37011:29;;36877:169;;;;:::o;37052:148::-;37154:11;37191:3;37176:18;;37052:148;;;;:::o;37206:305::-;37246:3;37265:20;37283:1;37265:20;:::i;:::-;37260:25;;37299:20;37317:1;37299:20;:::i;:::-;37294:25;;37453:1;37385:66;37381:74;37378:1;37375:81;37372:107;;;37459:18;;:::i;:::-;37372:107;37503:1;37500;37496:9;37489:16;;37206:305;;;;:::o;37517:185::-;37557:1;37574:20;37592:1;37574:20;:::i;:::-;37569:25;;37608:20;37626:1;37608:20;:::i;:::-;37603:25;;37647:1;37637:35;;37652:18;;:::i;:::-;37637:35;37694:1;37691;37687:9;37682:14;;37517:185;;;;:::o;37708:348::-;37748:7;37771:20;37789:1;37771:20;:::i;:::-;37766:25;;37805:20;37823:1;37805:20;:::i;:::-;37800:25;;37993:1;37925:66;37921:74;37918:1;37915:81;37910:1;37903:9;37896:17;37892:105;37889:131;;;38000:18;;:::i;:::-;37889:131;38048:1;38045;38041:9;38030:20;;37708:348;;;;:::o;38062:191::-;38102:4;38122:20;38140:1;38122:20;:::i;:::-;38117:25;;38156:20;38174:1;38156:20;:::i;:::-;38151:25;;38195:1;38192;38189:8;38186:34;;;38200:18;;:::i;:::-;38186:34;38245:1;38242;38238:9;38230:17;;38062:191;;;;:::o;38259:96::-;38296:7;38325:24;38343:5;38325:24;:::i;:::-;38314:35;;38259:96;;;:::o;38361:90::-;38395:7;38438:5;38431:13;38424:21;38413:32;;38361:90;;;:::o;38457:149::-;38493:7;38533:66;38526:5;38522:78;38511:89;;38457:149;;;:::o;38612:126::-;38649:7;38689:42;38682:5;38678:54;38667:65;;38612:126;;;:::o;38744:77::-;38781:7;38810:5;38799:16;;38744:77;;;:::o;38827:154::-;38911:6;38906:3;38901;38888:30;38973:1;38964:6;38959:3;38955:16;38948:27;38827:154;;;:::o;38987:307::-;39055:1;39065:113;39079:6;39076:1;39073:13;39065:113;;;39164:1;39159:3;39155:11;39149:18;39145:1;39140:3;39136:11;39129:39;39101:2;39098:1;39094:10;39089:15;;39065:113;;;39196:6;39193:1;39190:13;39187:101;;;39276:1;39267:6;39262:3;39258:16;39251:27;39187:101;39036:258;38987:307;;;:::o;39300:320::-;39344:6;39381:1;39375:4;39371:12;39361:22;;39428:1;39422:4;39418:12;39449:18;39439:81;;39505:4;39497:6;39493:17;39483:27;;39439:81;39567:2;39559:6;39556:14;39536:18;39533:38;39530:84;;;39586:18;;:::i;:::-;39530:84;39351:269;39300:320;;;:::o;39626:281::-;39709:27;39731:4;39709:27;:::i;:::-;39701:6;39697:40;39839:6;39827:10;39824:22;39803:18;39791:10;39788:34;39785:62;39782:88;;;39850:18;;:::i;:::-;39782:88;39890:10;39886:2;39879:22;39669:238;39626:281;;:::o;39913:233::-;39952:3;39975:24;39993:5;39975:24;:::i;:::-;39966:33;;40021:66;40014:5;40011:77;40008:103;;;40091:18;;:::i;:::-;40008:103;40138:1;40131:5;40127:13;40120:20;;39913:233;;;:::o;40152:176::-;40184:1;40201:20;40219:1;40201:20;:::i;:::-;40196:25;;40235:20;40253:1;40235:20;:::i;:::-;40230:25;;40274:1;40264:35;;40279:18;;:::i;:::-;40264:35;40320:1;40317;40313:9;40308:14;;40152:176;;;;:::o;40334:180::-;40382:77;40379:1;40372:88;40479:4;40476:1;40469:15;40503:4;40500:1;40493:15;40520:180;40568:77;40565:1;40558:88;40665:4;40662:1;40655:15;40689:4;40686:1;40679:15;40706:180;40754:77;40751:1;40744:88;40851:4;40848:1;40841:15;40875:4;40872:1;40865:15;40892:180;40940:77;40937:1;40930:88;41037:4;41034:1;41027:15;41061:4;41058:1;41051:15;41078:180;41126:77;41123:1;41116:88;41223:4;41220:1;41213:15;41247:4;41244:1;41237:15;41264:117;41373:1;41370;41363:12;41387:117;41496:1;41493;41486:12;41510:117;41619:1;41616;41609:12;41633:117;41742:1;41739;41732:12;41756:117;41865:1;41862;41855:12;41879:117;41988:1;41985;41978:12;42002:102;42043:6;42094:2;42090:7;42085:2;42078:5;42074:14;42070:28;42060:38;;42002:102;;;:::o;42110:237::-;42250:34;42246:1;42238:6;42234:14;42227:58;42319:20;42314:2;42306:6;42302:15;42295:45;42110:237;:::o;42353:225::-;42493:34;42489:1;42481:6;42477:14;42470:58;42562:8;42557:2;42549:6;42545:15;42538:33;42353:225;:::o;42584:224::-;42724:34;42720:1;42712:6;42708:14;42701:58;42793:7;42788:2;42780:6;42776:15;42769:32;42584:224;:::o;42814:178::-;42954:30;42950:1;42942:6;42938:14;42931:54;42814:178;:::o;42998:170::-;43138:22;43134:1;43126:6;43122:14;43115:46;42998:170;:::o;43174:178::-;43314:30;43310:1;43302:6;43298:14;43291:54;43174:178;:::o;43358:223::-;43498:34;43494:1;43486:6;43482:14;43475:58;43567:6;43562:2;43554:6;43550:15;43543:31;43358:223;:::o;43587:175::-;43727:27;43723:1;43715:6;43711:14;43704:51;43587:175;:::o;43768:231::-;43908:34;43904:1;43896:6;43892:14;43885:58;43977:14;43972:2;43964:6;43960:15;43953:39;43768:231;:::o;44005:243::-;44145:34;44141:1;44133:6;44129:14;44122:58;44214:26;44209:2;44201:6;44197:15;44190:51;44005:243;:::o;44254:229::-;44394:34;44390:1;44382:6;44378:14;44371:58;44463:12;44458:2;44450:6;44446:15;44439:37;44254:229;:::o;44489:228::-;44629:34;44625:1;44617:6;44613:14;44606:58;44698:11;44693:2;44685:6;44681:15;44674:36;44489:228;:::o;44723:182::-;44863:34;44859:1;44851:6;44847:14;44840:58;44723:182;:::o;44911:231::-;45051:34;45047:1;45039:6;45035:14;45028:58;45120:14;45115:2;45107:6;45103:15;45096:39;44911:231;:::o;45148:182::-;45288:34;45284:1;45276:6;45272:14;45265:58;45148:182;:::o;45336:173::-;45476:25;45472:1;45464:6;45460:14;45453:49;45336:173;:::o;45515:234::-;45655:34;45651:1;45643:6;45639:14;45632:58;45724:17;45719:2;45711:6;45707:15;45700:42;45515:234;:::o;45755:220::-;45895:34;45891:1;45883:6;45879:14;45872:58;45964:3;45959:2;45951:6;45947:15;45940:28;45755:220;:::o;45981:114::-;;:::o;46101:170::-;46241:22;46237:1;46229:6;46225:14;46218:46;46101:170;:::o;46277:236::-;46417:34;46413:1;46405:6;46401:14;46394:58;46486:19;46481:2;46473:6;46469:15;46462:44;46277:236;:::o;46519:173::-;46659:25;46655:1;46647:6;46643:14;46636:49;46519:173;:::o;46698:174::-;46838:26;46834:1;46826:6;46822:14;46815:50;46698:174;:::o;46878:169::-;47018:21;47014:1;47006:6;47002:14;46995:45;46878:169;:::o;47053:122::-;47126:24;47144:5;47126:24;:::i;:::-;47119:5;47116:35;47106:63;;47165:1;47162;47155:12;47106:63;47053:122;:::o;47181:116::-;47251:21;47266:5;47251:21;:::i;:::-;47244:5;47241:32;47231:60;;47287:1;47284;47277:12;47231:60;47181:116;:::o;47303:120::-;47375:23;47392:5;47375:23;:::i;:::-;47368:5;47365:34;47355:62;;47413:1;47410;47403:12;47355:62;47303:120;:::o;47429:122::-;47502:24;47520:5;47502:24;:::i;:::-;47495:5;47492:35;47482:63;;47541:1;47538;47531:12;47482:63;47429:122;:::o

Swarm Source

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