ETH Price: $2,623.58 (+1.21%)

Token

Space Kubz (KUBZ)
 

Overview

Max Total Supply

8,888 KUBZ

Holders

328

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 KUBZ
0xc5219714996df4ad38eba5c9ef870e2a9ff06c42
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:
SpaceKubz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-20
*/

// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/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



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



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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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



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



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



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



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



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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: contracts/SpaceKubz.sol

pragma solidity ^0.8.0;



contract SpaceKubz is ERC721, Ownable {

    bool public saleActive = false;
    bool public presaleActive = false;
   
    string internal baseTokenURI;

    uint public price = 0.11 ether;
    uint public totalSupply = 8888;
    uint public nonce = 0;
    uint public maxTx = 8;
   
    event Mint(address owner, uint qty);
    event Giveaway(address to, uint qty);
    event Withdraw(uint amount);

    mapping (address => uint256) public presaleWallets;
    mapping (address => bool) public presaleWalletsList;
    constructor() ERC721("Space Kubz", "KUBZ") {}
   
    function setPrice(uint newPrice) external onlyOwner {
        price = newPrice;
    }
   
    function setBaseTokenURI(string calldata _uri) external onlyOwner {
        baseTokenURI = _uri;
    }
   
    function setTotalSupply(uint newSupply) external onlyOwner {
        totalSupply = newSupply;
    }

    function setPresaleActive(bool val) public onlyOwner {
        presaleActive = val;
    }

    function setSaleActive(bool val) public onlyOwner {
        saleActive = val;
    }

    function setPresaleWallets(address[] memory _a, uint256[] memory _amount) public onlyOwner {
        for(uint256 i; i < _a.length; i++){
            presaleWallets[_a[i]] = _amount[i];
            setWallet(_a[i]);
        }
    }

    function editPresaleWallets(address[] memory _a, uint256[] memory _amount) public onlyOwner {
        for(uint256 i; i < _a.length; i++){
            presaleWallets[_a[i]] = _amount[i];
            //presaleWallets[_a[i]+presaleWallets.length] = _amount[i];
            setWallet(_a[i]);
        }
    }

   
    function setMaxTx(uint newMax) external onlyOwner {
        maxTx = newMax;
    }
   
    function getAssetsByOwner(address _owner) public view returns(uint[] memory) {
        uint[] memory result = new uint[](balanceOf(_owner));
        uint counter = 0;
        for (uint i = 0; i < nonce; i++) {
            if (ownerOf(i) == _owner) {
                result[counter] = i;
                counter++;
            }
        }
        return result;
    }
   
    function getMyAssets() external view returns(uint[] memory){
        return getAssetsByOwner(tx.origin);
    }

    function _baseURI() internal override view returns (string memory) {
        return baseTokenURI;
    }
   
    function giveaway(address to, uint qty) external onlyOwner {
        require(qty + nonce <= totalSupply, "SUPPLY: Value exceeds totalSupply");
        for(uint i = 0; i < qty; i++){
            uint tokenId = nonce;
            _safeMint(to, tokenId);
            nonce++;
        }
        emit Giveaway(to, qty);
    }

    function buyPresale(uint qty) external payable {
        uint256 qtyAllowed = presaleWallets[msg.sender];
        require(presaleActive, "TRANSACTION: Presale is not active");
        require(contains(msg.sender), "TRANSACTION: You can't mint on presale");
        require(qtyAllowed > 0, "TRANSACTION: You can't mint on presale");
        require(qty + nonce <= totalSupply, "SUPPLY: max supply exceeded");
        require(qty <= qtyAllowed, "TRANSACTION: Mint amount authorized should be less");
        require(msg.value == price * qty, "PAYMENT: incorrect Ether value");
        presaleWallets[msg.sender] = qtyAllowed - qty;
        for(uint i = 0; i < qty; i++){
            uint tokenId = nonce;
            _safeMint(msg.sender, tokenId);
            nonce++;
        }
        emit Mint(msg.sender, qty);
    }
   
    function buy(uint qty) external payable {
        require(saleActive, "TRANSACTION: sale is not active");
        require(qty <= maxTx && qty > 0, "TRANSACTION: qty of mints not alowed");
        require(qty + nonce <= totalSupply, "SUPPLY: max supply exceeded");
        require(msg.value == price * qty, "PAYMENT: incorrect Ether value");
        for(uint i = 0; i < qty; i++){
            uint tokenId = nonce;
            _safeMint(msg.sender, tokenId);
            nonce++;
        }
        emit Mint(msg.sender, qty);
    }
   
    function withdrawOwner() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }


    function setWallet(address _wallet) private {
        presaleWalletsList[_wallet]=true;
    }

    function contains(address _wallet) private returns (bool){
        return presaleWalletsList[_wallet];
    }
}

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":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"qty","type":"uint256"}],"name":"Giveaway","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"qty","type":"uint256"}],"name":"Mint","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"buyPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"editPresaleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getAssetsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyAssets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWalletsList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"setPresaleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setTotalSupply","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":"withdrawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600660146101000a81548160ff0219169083151502179055506000600660156101000a81548160ff021916908315150217905550670186cc6acd4b00006008556122b86009556000600a556008600b553480156200006357600080fd5b506040518060400160405280600a81526020017f5370616365204b75627a000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b55425a000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e8929190620001f8565b50806001908051906020019062000101929190620001f8565b50505062000124620001186200012a60201b60201c565b6200013260201b60201c565b6200030d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020690620002a8565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b60006002820490506001821680620002c157607f821691505b60208210811415620002d857620002d7620002de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614893806200031d6000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063affed0e0116100ab578063d96a094a1161006f578063d96a094a14610808578063e8cc00ad14610824578063e985e9c51461083b578063f2fde38b14610878578063f7ea7a3d146108a157610225565b8063affed0e014610725578063b88d4fde14610750578063bc33718214610779578063c87b56dd146107a2578063d27b1be9146107df57610225565b80638da5cb5b116100f25780638da5cb5b1461065257806391b7f5ed1461067d57806395d89b41146106a6578063a035b1fe146106d1578063a22cb465146106fc57610225565b806370a08231146105aa578063715018a6146105e75780637437681e146105fe578063841718a61461062957610225565b806330176e13116101b157806347002d1d1161017557806347002d1d146104d057806349c32217146104fb57806353135ca0146105175780636352211e1461054257806368428a1b1461057f57610225565b806330176e13146103db57806330b2264e146104045780633f8121a21461044157806342842e0e1461046a5780634305b0151461049357610225565b8063095ea7b3116101f8578063095ea7b3146102f857806318160ddd1461032157806323b872dd1461034c578063276f0934146103755780632e6b106c146103b257610225565b806301ffc9a71461022a578063050225ea1461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613318565b6108ca565b60405161025e919061395f565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613233565b6109ac565b005b34801561029c57600080fd5b506102a5610b00565b6040516102b2919061397a565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906133bf565b610b92565b6040516102ef91906138ad565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613233565b610c17565b005b34801561032d57600080fd5b50610336610d2f565b6040516103439190613c9c565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061311d565b610d35565b005b34801561038157600080fd5b5061039c600480360381019061039791906130b0565b610d95565b6040516103a9919061393d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613273565b610e83565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613372565b610fbe565b005b34801561041057600080fd5b5061042b600480360381019061042691906130b0565b611050565b6040516104389190613c9c565b60405180910390f35b34801561044d57600080fd5b50610468600480360381019061046391906132eb565b611068565b005b34801561047657600080fd5b50610491600480360381019061048c919061311d565b611101565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906130b0565b611121565b6040516104c7919061395f565b60405180910390f35b3480156104dc57600080fd5b506104e5611141565b6040516104f2919061393d565b60405180910390f35b610515600480360381019061051091906133bf565b611151565b005b34801561052357600080fd5b5061052c611428565b604051610539919061395f565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906133bf565b61143b565b60405161057691906138ad565b60405180910390f35b34801561058b57600080fd5b506105946114ed565b6040516105a1919061395f565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906130b0565b611500565b6040516105de9190613c9c565b60405180910390f35b3480156105f357600080fd5b506105fc6115b8565b005b34801561060a57600080fd5b50610613611640565b6040516106209190613c9c565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906132eb565b611646565b005b34801561065e57600080fd5b506106676116df565b60405161067491906138ad565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906133bf565b611709565b005b3480156106b257600080fd5b506106bb61178f565b6040516106c8919061397a565b60405180910390f35b3480156106dd57600080fd5b506106e6611821565b6040516106f39190613c9c565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906131f3565b611827565b005b34801561073157600080fd5b5061073a6119a8565b6040516107479190613c9c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613170565b6119ae565b005b34801561078557600080fd5b506107a0600480360381019061079b91906133bf565b611a10565b005b3480156107ae57600080fd5b506107c960048036038101906107c491906133bf565b611a96565b6040516107d6919061397a565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190613273565b611b3d565b005b610822600480360381019061081d91906133bf565b611c78565b005b34801561083057600080fd5b50610839611e3e565b005b34801561084757600080fd5b50610862600480360381019061085d91906130dd565b611f03565b60405161086f919061395f565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a91906130b0565b611f97565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906133bf565b61208f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a557506109a482612115565b5b9050919050565b6109b461217f565b73ffffffffffffffffffffffffffffffffffffffff166109d26116df565b73ffffffffffffffffffffffffffffffffffffffff1614610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613b9c565b60405180910390fd5b600954600a5482610a399190613de1565b1115610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7190613c3c565b60405180910390fd5b60005b81811015610ac2576000600a549050610a968482612187565b600a6000815480929190610aa99061400f565b9190505550508080610aba9061400f565b915050610a7d565b507f2118eda2a5fcc2e5f909a608477a856272adadcb48e1373747c51d2d3f6fc2ef8282604051610af4929190613914565b60405180910390a15050565b606060008054610b0f90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3b90613fac565b8015610b885780601f10610b5d57610100808354040283529160200191610b88565b820191906000526020600020905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b6000610b9d826121a5565b610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613b7c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c228261143b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613c1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb261217f565b73ffffffffffffffffffffffffffffffffffffffff161480610ce15750610ce081610cdb61217f565b611f03565b5b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613adc565b60405180910390fd5b610d2a8383612211565b505050565b60095481565b610d46610d4061217f565b826122ca565b610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613c5c565b60405180910390fd5b610d908383836123a8565b505050565b60606000610da283611500565b67ffffffffffffffff811115610dbb57610dba614145565b5b604051908082528060200260200182016040528015610de95781602001602082028036833780820191505090505b5090506000805b600a54811015610e78578473ffffffffffffffffffffffffffffffffffffffff16610e1a8261143b565b73ffffffffffffffffffffffffffffffffffffffff161415610e655780838381518110610e4a57610e49614116565b5b6020026020010181815250508180610e619061400f565b9250505b8080610e709061400f565b915050610df0565b508192505050919050565b610e8b61217f565b73ffffffffffffffffffffffffffffffffffffffff16610ea96116df565b73ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613b9c565b60405180910390fd5b60005b8251811015610fb957818181518110610f1e57610f1d614116565b5b6020026020010151600c6000858481518110610f3d57610f3c614116565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fa6838281518110610f9957610f98614116565b5b6020026020010151612604565b8080610fb19061400f565b915050610f02565b505050565b610fc661217f565b73ffffffffffffffffffffffffffffffffffffffff16610fe46116df565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103190613b9c565b60405180910390fd5b81816007919061104b929190612da2565b505050565b600c6020528060005260406000206000915090505481565b61107061217f565b73ffffffffffffffffffffffffffffffffffffffff1661108e6116df565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613b9c565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b61111c838383604051806020016040528060008152506119ae565b505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b606061114c32610d95565b905090565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600660159054906101000a900460ff166111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90613bfc565b60405180910390fd5b6111ed3361265f565b61122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390613c7c565b60405180910390fd5b6000811161126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613c7c565b60405180910390fd5b600954600a54836112809190613de1565b11156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613a5c565b60405180910390fd5b80821115611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613a9c565b60405180910390fd5b816008546113129190613e68565b3414611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613abc565b60405180910390fd5b818161135f9190613ec2565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b828110156113ea576000600a5490506113be3382612187565b600a60008154809291906113d19061400f565b91905055505080806113e29061400f565b9150506113a5565b507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885338360405161141c929190613914565b60405180910390a15050565b600660159054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613b1c565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613afc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115c061217f565b73ffffffffffffffffffffffffffffffffffffffff166115de6116df565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90613b9c565b60405180910390fd5b61163e60006126b5565b565b600b5481565b61164e61217f565b73ffffffffffffffffffffffffffffffffffffffff1661166c6116df565b73ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b990613b9c565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171161217f565b73ffffffffffffffffffffffffffffffffffffffff1661172f6116df565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613b9c565b60405180910390fd5b8060088190555050565b60606001805461179e90613fac565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90613fac565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b60085481565b61182f61217f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613a3c565b60405180910390fd5b80600560006118aa61217f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195761217f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161199c919061395f565b60405180910390a35050565b600a5481565b6119bf6119b961217f565b836122ca565b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590613c5c565b60405180910390fd5b611a0a8484848461277b565b50505050565b611a1861217f565b73ffffffffffffffffffffffffffffffffffffffff16611a366116df565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613b9c565b60405180910390fd5b80600b8190555050565b6060611aa1826121a5565b611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790613bdc565b60405180910390fd5b6000611aea6127d7565b90506000815111611b0a5760405180602001604052806000815250611b35565b80611b1484612869565b604051602001611b25929190613889565b6040516020818303038152906040525b915050919050565b611b4561217f565b73ffffffffffffffffffffffffffffffffffffffff16611b636116df565b73ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613b9c565b60405180910390fd5b60005b8251811015611c7357818181518110611bd857611bd7614116565b5b6020026020010151600c6000858481518110611bf757611bf6614116565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c60838281518110611c5357611c52614116565b5b6020026020010151612604565b8080611c6b9061400f565b915050611bbc565b505050565b600660149054906101000a900460ff16611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613b5c565b60405180910390fd5b600b548111158015611cd95750600081115b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906139fc565b60405180910390fd5b600954600a5482611d299190613de1565b1115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613a5c565b60405180910390fd5b80600854611d789190613e68565b3414611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090613abc565b60405180910390fd5b60005b81811015611e01576000600a549050611dd53382612187565b600a6000815480929190611de89061400f565b9190505550508080611df99061400f565b915050611dbc565b507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968853382604051611e33929190613914565b60405180910390a150565b611e4661217f565b73ffffffffffffffffffffffffffffffffffffffff16611e646116df565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190613b9c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f00573d6000803e3d6000fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f9f61217f565b73ffffffffffffffffffffffffffffffffffffffff16611fbd6116df565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613b9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906139bc565b60405180910390fd5b61208c816126b5565b50565b61209761217f565b73ffffffffffffffffffffffffffffffffffffffff166120b56116df565b73ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613b9c565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6121a18282604051806020016040528060008152506129ca565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122848361143b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122d5826121a5565b612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90613a7c565b60405180910390fd5b600061231f8361143b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238e57508373ffffffffffffffffffffffffffffffffffffffff1661237684610b92565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239f575061239e8185611f03565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123c88261143b565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613bbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590613a1c565b60405180910390fd5b612499838383612a25565b6124a4600082612211565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f49190613ec2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254b9190613de1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127868484846123a8565b61279284848484612a2a565b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c89061399c565b60405180910390fd5b50505050565b6060600780546127e690613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461281290613fac565b801561285f5780601f106128345761010080835404028352916020019161285f565b820191906000526020600020905b81548152906001019060200180831161284257829003601f168201915b5050505050905090565b606060008214156128b1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c5565b600082905060005b600082146128e35780806128cc9061400f565b915050600a826128dc9190613e37565b91506128b9565b60008167ffffffffffffffff8111156128ff576128fe614145565b5b6040519080825280601f01601f1916602001820160405280156129315781602001600182028036833780820191505090505b5090505b600085146129be5760018261294a9190613ec2565b9150600a856129599190614058565b60306129659190613de1565b60f81b81838151811061297b5761297a614116565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129b79190613e37565b9450612935565b8093505050505b919050565b6129d48383612bc1565b6129e16000848484612a2a565b612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a179061399c565b60405180910390fd5b505050565b505050565b6000612a4b8473ffffffffffffffffffffffffffffffffffffffff16612d8f565b15612bb4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7461217f565b8786866040518563ffffffff1660e01b8152600401612a9694939291906138c8565b602060405180830381600087803b158015612ab057600080fd5b505af1925050508015612ae157506040513d601f19601f82011682018060405250810190612ade9190613345565b60015b612b64573d8060008114612b11576040519150601f19603f3d011682016040523d82523d6000602084013e612b16565b606091505b50600081511415612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061399c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb9565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613b3c565b60405180910390fd5b612c3a816121a5565b15612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c71906139dc565b60405180910390fd5b612c8660008383612a25565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613de1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612dae90613fac565b90600052602060002090601f016020900481019282612dd05760008555612e17565b82601f10612de957803560ff1916838001178555612e17565b82800160010185558215612e17579182015b82811115612e16578235825591602001919060010190612dfb565b5b509050612e249190612e28565b5090565b5b80821115612e41576000816000905550600101612e29565b5090565b6000612e58612e5384613cdc565b613cb7565b90508083825260208201905082856020860282011115612e7b57612e7a61417e565b5b60005b85811015612eab5781612e918882612f67565b845260208401935060208301925050600181019050612e7e565b5050509392505050565b6000612ec8612ec384613d08565b613cb7565b90508083825260208201905082856020860282011115612eeb57612eea61417e565b5b60005b85811015612f1b5781612f01888261309b565b845260208401935060208301925050600181019050612eee565b5050509392505050565b6000612f38612f3384613d34565b613cb7565b905082815260208101848484011115612f5457612f53614183565b5b612f5f848285613f6a565b509392505050565b600081359050612f7681614801565b92915050565b600082601f830112612f9157612f90614179565b5b8135612fa1848260208601612e45565b91505092915050565b600082601f830112612fbf57612fbe614179565b5b8135612fcf848260208601612eb5565b91505092915050565b600081359050612fe781614818565b92915050565b600081359050612ffc8161482f565b92915050565b6000815190506130118161482f565b92915050565b600082601f83011261302c5761302b614179565b5b813561303c848260208601612f25565b91505092915050565b60008083601f84011261305b5761305a614179565b5b8235905067ffffffffffffffff81111561307857613077614174565b5b6020830191508360018202830111156130945761309361417e565b5b9250929050565b6000813590506130aa81614846565b92915050565b6000602082840312156130c6576130c561418d565b5b60006130d484828501612f67565b91505092915050565b600080604083850312156130f4576130f361418d565b5b600061310285828601612f67565b925050602061311385828601612f67565b9150509250929050565b6000806000606084860312156131365761313561418d565b5b600061314486828701612f67565b935050602061315586828701612f67565b92505060406131668682870161309b565b9150509250925092565b6000806000806080858703121561318a5761318961418d565b5b600061319887828801612f67565b94505060206131a987828801612f67565b93505060406131ba8782880161309b565b925050606085013567ffffffffffffffff8111156131db576131da614188565b5b6131e787828801613017565b91505092959194509250565b6000806040838503121561320a5761320961418d565b5b600061321885828601612f67565b925050602061322985828601612fd8565b9150509250929050565b6000806040838503121561324a5761324961418d565b5b600061325885828601612f67565b92505060206132698582860161309b565b9150509250929050565b6000806040838503121561328a5761328961418d565b5b600083013567ffffffffffffffff8111156132a8576132a7614188565b5b6132b485828601612f7c565b925050602083013567ffffffffffffffff8111156132d5576132d4614188565b5b6132e185828601612faa565b9150509250929050565b6000602082840312156133015761330061418d565b5b600061330f84828501612fd8565b91505092915050565b60006020828403121561332e5761332d61418d565b5b600061333c84828501612fed565b91505092915050565b60006020828403121561335b5761335a61418d565b5b600061336984828501613002565b91505092915050565b600080602083850312156133895761338861418d565b5b600083013567ffffffffffffffff8111156133a7576133a6614188565b5b6133b385828601613045565b92509250509250929050565b6000602082840312156133d5576133d461418d565b5b60006133e38482850161309b565b91505092915050565b60006133f8838361386b565b60208301905092915050565b61340d81613ef6565b82525050565b600061341e82613d75565b6134288185613da3565b935061343383613d65565b8060005b8381101561346457815161344b88826133ec565b975061345683613d96565b925050600181019050613437565b5085935050505092915050565b61347a81613f08565b82525050565b600061348b82613d80565b6134958185613db4565b93506134a5818560208601613f79565b6134ae81614192565b840191505092915050565b60006134c482613d8b565b6134ce8185613dc5565b93506134de818560208601613f79565b6134e781614192565b840191505092915050565b60006134fd82613d8b565b6135078185613dd6565b9350613517818560208601613f79565b80840191505092915050565b6000613530603283613dc5565b915061353b826141a3565b604082019050919050565b6000613553602683613dc5565b915061355e826141f2565b604082019050919050565b6000613576601c83613dc5565b915061358182614241565b602082019050919050565b6000613599602483613dc5565b91506135a48261426a565b604082019050919050565b60006135bc602483613dc5565b91506135c7826142b9565b604082019050919050565b60006135df601983613dc5565b91506135ea82614308565b602082019050919050565b6000613602601b83613dc5565b915061360d82614331565b602082019050919050565b6000613625602c83613dc5565b91506136308261435a565b604082019050919050565b6000613648603283613dc5565b9150613653826143a9565b604082019050919050565b600061366b601e83613dc5565b9150613676826143f8565b602082019050919050565b600061368e603883613dc5565b915061369982614421565b604082019050919050565b60006136b1602a83613dc5565b91506136bc82614470565b604082019050919050565b60006136d4602983613dc5565b91506136df826144bf565b604082019050919050565b60006136f7602083613dc5565b91506137028261450e565b602082019050919050565b600061371a601f83613dc5565b915061372582614537565b602082019050919050565b600061373d602c83613dc5565b915061374882614560565b604082019050919050565b6000613760602083613dc5565b915061376b826145af565b602082019050919050565b6000613783602983613dc5565b915061378e826145d8565b604082019050919050565b60006137a6602f83613dc5565b91506137b182614627565b604082019050919050565b60006137c9602283613dc5565b91506137d482614676565b604082019050919050565b60006137ec602183613dc5565b91506137f7826146c5565b604082019050919050565b600061380f602183613dc5565b915061381a82614714565b604082019050919050565b6000613832603183613dc5565b915061383d82614763565b604082019050919050565b6000613855602683613dc5565b9150613860826147b2565b604082019050919050565b61387481613f60565b82525050565b61388381613f60565b82525050565b600061389582856134f2565b91506138a182846134f2565b91508190509392505050565b60006020820190506138c26000830184613404565b92915050565b60006080820190506138dd6000830187613404565b6138ea6020830186613404565b6138f7604083018561387a565b81810360608301526139098184613480565b905095945050505050565b60006040820190506139296000830185613404565b613936602083018461387a565b9392505050565b600060208201905081810360008301526139578184613413565b905092915050565b60006020820190506139746000830184613471565b92915050565b6000602082019050818103600083015261399481846134b9565b905092915050565b600060208201905081810360008301526139b581613523565b9050919050565b600060208201905081810360008301526139d581613546565b9050919050565b600060208201905081810360008301526139f581613569565b9050919050565b60006020820190508181036000830152613a158161358c565b9050919050565b60006020820190508181036000830152613a35816135af565b9050919050565b60006020820190508181036000830152613a55816135d2565b9050919050565b60006020820190508181036000830152613a75816135f5565b9050919050565b60006020820190508181036000830152613a9581613618565b9050919050565b60006020820190508181036000830152613ab58161363b565b9050919050565b60006020820190508181036000830152613ad58161365e565b9050919050565b60006020820190508181036000830152613af581613681565b9050919050565b60006020820190508181036000830152613b15816136a4565b9050919050565b60006020820190508181036000830152613b35816136c7565b9050919050565b60006020820190508181036000830152613b55816136ea565b9050919050565b60006020820190508181036000830152613b758161370d565b9050919050565b60006020820190508181036000830152613b9581613730565b9050919050565b60006020820190508181036000830152613bb581613753565b9050919050565b60006020820190508181036000830152613bd581613776565b9050919050565b60006020820190508181036000830152613bf581613799565b9050919050565b60006020820190508181036000830152613c15816137bc565b9050919050565b60006020820190508181036000830152613c35816137df565b9050919050565b60006020820190508181036000830152613c5581613802565b9050919050565b60006020820190508181036000830152613c7581613825565b9050919050565b60006020820190508181036000830152613c9581613848565b9050919050565b6000602082019050613cb1600083018461387a565b92915050565b6000613cc1613cd2565b9050613ccd8282613fde565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf757613cf6614145565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d2357613d22614145565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d4f57613d4e614145565b5b613d5882614192565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dec82613f60565b9150613df783613f60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2c57613e2b614089565b5b828201905092915050565b6000613e4282613f60565b9150613e4d83613f60565b925082613e5d57613e5c6140b8565b5b828204905092915050565b6000613e7382613f60565b9150613e7e83613f60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eb757613eb6614089565b5b828202905092915050565b6000613ecd82613f60565b9150613ed883613f60565b925082821015613eeb57613eea614089565b5b828203905092915050565b6000613f0182613f40565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f97578082015181840152602081019050613f7c565b83811115613fa6576000848401525b50505050565b60006002820490506001821680613fc457607f821691505b60208210811415613fd857613fd76140e7565b5b50919050565b613fe782614192565b810181811067ffffffffffffffff8211171561400657614005614145565b5b80604052505050565b600061401a82613f60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561404d5761404c614089565b5b600182019050919050565b600061406382613f60565b915061406e83613f60565b92508261407e5761407d6140b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5452414e53414354494f4e3a20717479206f66206d696e7473206e6f7420616c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f535550504c593a206d617820737570706c792065786365656465640000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a204d696e7420616d6f756e7420617574686f726960008201527f7a65642073686f756c64206265206c6573730000000000000000000000000000602082015250565b7f5041594d454e543a20696e636f72726563742045746865722076616c75650000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5452414e53414354494f4e3a2073616c65206973206e6f742061637469766500600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a2050726573616c65206973206e6f74206163746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f535550504c593a2056616c7565206578636565647320746f74616c537570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a20596f752063616e2774206d696e74206f6e207060008201527f726573616c650000000000000000000000000000000000000000000000000000602082015250565b61480a81613ef6565b811461481557600080fd5b50565b61482181613f08565b811461482c57600080fd5b50565b61483881613f14565b811461484357600080fd5b50565b61484f81613f60565b811461485a57600080fd5b5056fea2646970667358221220527a298d7a4c845a3b6ce795d51f191c94613d9b51b4ab348e90165402cd7c3864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102255760003560e01c806370a0823111610123578063affed0e0116100ab578063d96a094a1161006f578063d96a094a14610808578063e8cc00ad14610824578063e985e9c51461083b578063f2fde38b14610878578063f7ea7a3d146108a157610225565b8063affed0e014610725578063b88d4fde14610750578063bc33718214610779578063c87b56dd146107a2578063d27b1be9146107df57610225565b80638da5cb5b116100f25780638da5cb5b1461065257806391b7f5ed1461067d57806395d89b41146106a6578063a035b1fe146106d1578063a22cb465146106fc57610225565b806370a08231146105aa578063715018a6146105e75780637437681e146105fe578063841718a61461062957610225565b806330176e13116101b157806347002d1d1161017557806347002d1d146104d057806349c32217146104fb57806353135ca0146105175780636352211e1461054257806368428a1b1461057f57610225565b806330176e13146103db57806330b2264e146104045780633f8121a21461044157806342842e0e1461046a5780634305b0151461049357610225565b8063095ea7b3116101f8578063095ea7b3146102f857806318160ddd1461032157806323b872dd1461034c578063276f0934146103755780632e6b106c146103b257610225565b806301ffc9a71461022a578063050225ea1461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613318565b6108ca565b60405161025e919061395f565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613233565b6109ac565b005b34801561029c57600080fd5b506102a5610b00565b6040516102b2919061397a565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd91906133bf565b610b92565b6040516102ef91906138ad565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613233565b610c17565b005b34801561032d57600080fd5b50610336610d2f565b6040516103439190613c9c565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061311d565b610d35565b005b34801561038157600080fd5b5061039c600480360381019061039791906130b0565b610d95565b6040516103a9919061393d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613273565b610e83565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190613372565b610fbe565b005b34801561041057600080fd5b5061042b600480360381019061042691906130b0565b611050565b6040516104389190613c9c565b60405180910390f35b34801561044d57600080fd5b50610468600480360381019061046391906132eb565b611068565b005b34801561047657600080fd5b50610491600480360381019061048c919061311d565b611101565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906130b0565b611121565b6040516104c7919061395f565b60405180910390f35b3480156104dc57600080fd5b506104e5611141565b6040516104f2919061393d565b60405180910390f35b610515600480360381019061051091906133bf565b611151565b005b34801561052357600080fd5b5061052c611428565b604051610539919061395f565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906133bf565b61143b565b60405161057691906138ad565b60405180910390f35b34801561058b57600080fd5b506105946114ed565b6040516105a1919061395f565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906130b0565b611500565b6040516105de9190613c9c565b60405180910390f35b3480156105f357600080fd5b506105fc6115b8565b005b34801561060a57600080fd5b50610613611640565b6040516106209190613c9c565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906132eb565b611646565b005b34801561065e57600080fd5b506106676116df565b60405161067491906138ad565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906133bf565b611709565b005b3480156106b257600080fd5b506106bb61178f565b6040516106c8919061397a565b60405180910390f35b3480156106dd57600080fd5b506106e6611821565b6040516106f39190613c9c565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906131f3565b611827565b005b34801561073157600080fd5b5061073a6119a8565b6040516107479190613c9c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613170565b6119ae565b005b34801561078557600080fd5b506107a0600480360381019061079b91906133bf565b611a10565b005b3480156107ae57600080fd5b506107c960048036038101906107c491906133bf565b611a96565b6040516107d6919061397a565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190613273565b611b3d565b005b610822600480360381019061081d91906133bf565b611c78565b005b34801561083057600080fd5b50610839611e3e565b005b34801561084757600080fd5b50610862600480360381019061085d91906130dd565b611f03565b60405161086f919061395f565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a91906130b0565b611f97565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906133bf565b61208f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a557506109a482612115565b5b9050919050565b6109b461217f565b73ffffffffffffffffffffffffffffffffffffffff166109d26116df565b73ffffffffffffffffffffffffffffffffffffffff1614610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613b9c565b60405180910390fd5b600954600a5482610a399190613de1565b1115610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7190613c3c565b60405180910390fd5b60005b81811015610ac2576000600a549050610a968482612187565b600a6000815480929190610aa99061400f565b9190505550508080610aba9061400f565b915050610a7d565b507f2118eda2a5fcc2e5f909a608477a856272adadcb48e1373747c51d2d3f6fc2ef8282604051610af4929190613914565b60405180910390a15050565b606060008054610b0f90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3b90613fac565b8015610b885780601f10610b5d57610100808354040283529160200191610b88565b820191906000526020600020905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b6000610b9d826121a5565b610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613b7c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c228261143b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613c1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb261217f565b73ffffffffffffffffffffffffffffffffffffffff161480610ce15750610ce081610cdb61217f565b611f03565b5b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613adc565b60405180910390fd5b610d2a8383612211565b505050565b60095481565b610d46610d4061217f565b826122ca565b610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613c5c565b60405180910390fd5b610d908383836123a8565b505050565b60606000610da283611500565b67ffffffffffffffff811115610dbb57610dba614145565b5b604051908082528060200260200182016040528015610de95781602001602082028036833780820191505090505b5090506000805b600a54811015610e78578473ffffffffffffffffffffffffffffffffffffffff16610e1a8261143b565b73ffffffffffffffffffffffffffffffffffffffff161415610e655780838381518110610e4a57610e49614116565b5b6020026020010181815250508180610e619061400f565b9250505b8080610e709061400f565b915050610df0565b508192505050919050565b610e8b61217f565b73ffffffffffffffffffffffffffffffffffffffff16610ea96116df565b73ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613b9c565b60405180910390fd5b60005b8251811015610fb957818181518110610f1e57610f1d614116565b5b6020026020010151600c6000858481518110610f3d57610f3c614116565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fa6838281518110610f9957610f98614116565b5b6020026020010151612604565b8080610fb19061400f565b915050610f02565b505050565b610fc661217f565b73ffffffffffffffffffffffffffffffffffffffff16610fe46116df565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103190613b9c565b60405180910390fd5b81816007919061104b929190612da2565b505050565b600c6020528060005260406000206000915090505481565b61107061217f565b73ffffffffffffffffffffffffffffffffffffffff1661108e6116df565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613b9c565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b61111c838383604051806020016040528060008152506119ae565b505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b606061114c32610d95565b905090565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600660159054906101000a900460ff166111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90613bfc565b60405180910390fd5b6111ed3361265f565b61122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390613c7c565b60405180910390fd5b6000811161126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613c7c565b60405180910390fd5b600954600a54836112809190613de1565b11156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613a5c565b60405180910390fd5b80821115611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613a9c565b60405180910390fd5b816008546113129190613e68565b3414611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613abc565b60405180910390fd5b818161135f9190613ec2565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b828110156113ea576000600a5490506113be3382612187565b600a60008154809291906113d19061400f565b91905055505080806113e29061400f565b9150506113a5565b507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885338360405161141c929190613914565b60405180910390a15050565b600660159054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613b1c565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156890613afc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115c061217f565b73ffffffffffffffffffffffffffffffffffffffff166115de6116df565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90613b9c565b60405180910390fd5b61163e60006126b5565b565b600b5481565b61164e61217f565b73ffffffffffffffffffffffffffffffffffffffff1661166c6116df565b73ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b990613b9c565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171161217f565b73ffffffffffffffffffffffffffffffffffffffff1661172f6116df565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613b9c565b60405180910390fd5b8060088190555050565b60606001805461179e90613fac565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90613fac565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b60085481565b61182f61217f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613a3c565b60405180910390fd5b80600560006118aa61217f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195761217f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161199c919061395f565b60405180910390a35050565b600a5481565b6119bf6119b961217f565b836122ca565b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590613c5c565b60405180910390fd5b611a0a8484848461277b565b50505050565b611a1861217f565b73ffffffffffffffffffffffffffffffffffffffff16611a366116df565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613b9c565b60405180910390fd5b80600b8190555050565b6060611aa1826121a5565b611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790613bdc565b60405180910390fd5b6000611aea6127d7565b90506000815111611b0a5760405180602001604052806000815250611b35565b80611b1484612869565b604051602001611b25929190613889565b6040516020818303038152906040525b915050919050565b611b4561217f565b73ffffffffffffffffffffffffffffffffffffffff16611b636116df565b73ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613b9c565b60405180910390fd5b60005b8251811015611c7357818181518110611bd857611bd7614116565b5b6020026020010151600c6000858481518110611bf757611bf6614116565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c60838281518110611c5357611c52614116565b5b6020026020010151612604565b8080611c6b9061400f565b915050611bbc565b505050565b600660149054906101000a900460ff16611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613b5c565b60405180910390fd5b600b548111158015611cd95750600081115b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906139fc565b60405180910390fd5b600954600a5482611d299190613de1565b1115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613a5c565b60405180910390fd5b80600854611d789190613e68565b3414611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090613abc565b60405180910390fd5b60005b81811015611e01576000600a549050611dd53382612187565b600a6000815480929190611de89061400f565b9190505550508080611df99061400f565b915050611dbc565b507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968853382604051611e33929190613914565b60405180910390a150565b611e4661217f565b73ffffffffffffffffffffffffffffffffffffffff16611e646116df565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190613b9c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f00573d6000803e3d6000fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f9f61217f565b73ffffffffffffffffffffffffffffffffffffffff16611fbd6116df565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613b9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906139bc565b60405180910390fd5b61208c816126b5565b50565b61209761217f565b73ffffffffffffffffffffffffffffffffffffffff166120b56116df565b73ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613b9c565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6121a18282604051806020016040528060008152506129ca565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122848361143b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122d5826121a5565b612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90613a7c565b60405180910390fd5b600061231f8361143b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238e57508373ffffffffffffffffffffffffffffffffffffffff1661237684610b92565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239f575061239e8185611f03565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123c88261143b565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613bbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590613a1c565b60405180910390fd5b612499838383612a25565b6124a4600082612211565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f49190613ec2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254b9190613de1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127868484846123a8565b61279284848484612a2a565b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c89061399c565b60405180910390fd5b50505050565b6060600780546127e690613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461281290613fac565b801561285f5780601f106128345761010080835404028352916020019161285f565b820191906000526020600020905b81548152906001019060200180831161284257829003601f168201915b5050505050905090565b606060008214156128b1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c5565b600082905060005b600082146128e35780806128cc9061400f565b915050600a826128dc9190613e37565b91506128b9565b60008167ffffffffffffffff8111156128ff576128fe614145565b5b6040519080825280601f01601f1916602001820160405280156129315781602001600182028036833780820191505090505b5090505b600085146129be5760018261294a9190613ec2565b9150600a856129599190614058565b60306129659190613de1565b60f81b81838151811061297b5761297a614116565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129b79190613e37565b9450612935565b8093505050505b919050565b6129d48383612bc1565b6129e16000848484612a2a565b612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a179061399c565b60405180910390fd5b505050565b505050565b6000612a4b8473ffffffffffffffffffffffffffffffffffffffff16612d8f565b15612bb4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7461217f565b8786866040518563ffffffff1660e01b8152600401612a9694939291906138c8565b602060405180830381600087803b158015612ab057600080fd5b505af1925050508015612ae157506040513d601f19601f82011682018060405250810190612ade9190613345565b60015b612b64573d8060008114612b11576040519150601f19603f3d011682016040523d82523d6000602084013e612b16565b606091505b50600081511415612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061399c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb9565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2890613b3c565b60405180910390fd5b612c3a816121a5565b15612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c71906139dc565b60405180910390fd5b612c8660008383612a25565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd69190613de1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612dae90613fac565b90600052602060002090601f016020900481019282612dd05760008555612e17565b82601f10612de957803560ff1916838001178555612e17565b82800160010185558215612e17579182015b82811115612e16578235825591602001919060010190612dfb565b5b509050612e249190612e28565b5090565b5b80821115612e41576000816000905550600101612e29565b5090565b6000612e58612e5384613cdc565b613cb7565b90508083825260208201905082856020860282011115612e7b57612e7a61417e565b5b60005b85811015612eab5781612e918882612f67565b845260208401935060208301925050600181019050612e7e565b5050509392505050565b6000612ec8612ec384613d08565b613cb7565b90508083825260208201905082856020860282011115612eeb57612eea61417e565b5b60005b85811015612f1b5781612f01888261309b565b845260208401935060208301925050600181019050612eee565b5050509392505050565b6000612f38612f3384613d34565b613cb7565b905082815260208101848484011115612f5457612f53614183565b5b612f5f848285613f6a565b509392505050565b600081359050612f7681614801565b92915050565b600082601f830112612f9157612f90614179565b5b8135612fa1848260208601612e45565b91505092915050565b600082601f830112612fbf57612fbe614179565b5b8135612fcf848260208601612eb5565b91505092915050565b600081359050612fe781614818565b92915050565b600081359050612ffc8161482f565b92915050565b6000815190506130118161482f565b92915050565b600082601f83011261302c5761302b614179565b5b813561303c848260208601612f25565b91505092915050565b60008083601f84011261305b5761305a614179565b5b8235905067ffffffffffffffff81111561307857613077614174565b5b6020830191508360018202830111156130945761309361417e565b5b9250929050565b6000813590506130aa81614846565b92915050565b6000602082840312156130c6576130c561418d565b5b60006130d484828501612f67565b91505092915050565b600080604083850312156130f4576130f361418d565b5b600061310285828601612f67565b925050602061311385828601612f67565b9150509250929050565b6000806000606084860312156131365761313561418d565b5b600061314486828701612f67565b935050602061315586828701612f67565b92505060406131668682870161309b565b9150509250925092565b6000806000806080858703121561318a5761318961418d565b5b600061319887828801612f67565b94505060206131a987828801612f67565b93505060406131ba8782880161309b565b925050606085013567ffffffffffffffff8111156131db576131da614188565b5b6131e787828801613017565b91505092959194509250565b6000806040838503121561320a5761320961418d565b5b600061321885828601612f67565b925050602061322985828601612fd8565b9150509250929050565b6000806040838503121561324a5761324961418d565b5b600061325885828601612f67565b92505060206132698582860161309b565b9150509250929050565b6000806040838503121561328a5761328961418d565b5b600083013567ffffffffffffffff8111156132a8576132a7614188565b5b6132b485828601612f7c565b925050602083013567ffffffffffffffff8111156132d5576132d4614188565b5b6132e185828601612faa565b9150509250929050565b6000602082840312156133015761330061418d565b5b600061330f84828501612fd8565b91505092915050565b60006020828403121561332e5761332d61418d565b5b600061333c84828501612fed565b91505092915050565b60006020828403121561335b5761335a61418d565b5b600061336984828501613002565b91505092915050565b600080602083850312156133895761338861418d565b5b600083013567ffffffffffffffff8111156133a7576133a6614188565b5b6133b385828601613045565b92509250509250929050565b6000602082840312156133d5576133d461418d565b5b60006133e38482850161309b565b91505092915050565b60006133f8838361386b565b60208301905092915050565b61340d81613ef6565b82525050565b600061341e82613d75565b6134288185613da3565b935061343383613d65565b8060005b8381101561346457815161344b88826133ec565b975061345683613d96565b925050600181019050613437565b5085935050505092915050565b61347a81613f08565b82525050565b600061348b82613d80565b6134958185613db4565b93506134a5818560208601613f79565b6134ae81614192565b840191505092915050565b60006134c482613d8b565b6134ce8185613dc5565b93506134de818560208601613f79565b6134e781614192565b840191505092915050565b60006134fd82613d8b565b6135078185613dd6565b9350613517818560208601613f79565b80840191505092915050565b6000613530603283613dc5565b915061353b826141a3565b604082019050919050565b6000613553602683613dc5565b915061355e826141f2565b604082019050919050565b6000613576601c83613dc5565b915061358182614241565b602082019050919050565b6000613599602483613dc5565b91506135a48261426a565b604082019050919050565b60006135bc602483613dc5565b91506135c7826142b9565b604082019050919050565b60006135df601983613dc5565b91506135ea82614308565b602082019050919050565b6000613602601b83613dc5565b915061360d82614331565b602082019050919050565b6000613625602c83613dc5565b91506136308261435a565b604082019050919050565b6000613648603283613dc5565b9150613653826143a9565b604082019050919050565b600061366b601e83613dc5565b9150613676826143f8565b602082019050919050565b600061368e603883613dc5565b915061369982614421565b604082019050919050565b60006136b1602a83613dc5565b91506136bc82614470565b604082019050919050565b60006136d4602983613dc5565b91506136df826144bf565b604082019050919050565b60006136f7602083613dc5565b91506137028261450e565b602082019050919050565b600061371a601f83613dc5565b915061372582614537565b602082019050919050565b600061373d602c83613dc5565b915061374882614560565b604082019050919050565b6000613760602083613dc5565b915061376b826145af565b602082019050919050565b6000613783602983613dc5565b915061378e826145d8565b604082019050919050565b60006137a6602f83613dc5565b91506137b182614627565b604082019050919050565b60006137c9602283613dc5565b91506137d482614676565b604082019050919050565b60006137ec602183613dc5565b91506137f7826146c5565b604082019050919050565b600061380f602183613dc5565b915061381a82614714565b604082019050919050565b6000613832603183613dc5565b915061383d82614763565b604082019050919050565b6000613855602683613dc5565b9150613860826147b2565b604082019050919050565b61387481613f60565b82525050565b61388381613f60565b82525050565b600061389582856134f2565b91506138a182846134f2565b91508190509392505050565b60006020820190506138c26000830184613404565b92915050565b60006080820190506138dd6000830187613404565b6138ea6020830186613404565b6138f7604083018561387a565b81810360608301526139098184613480565b905095945050505050565b60006040820190506139296000830185613404565b613936602083018461387a565b9392505050565b600060208201905081810360008301526139578184613413565b905092915050565b60006020820190506139746000830184613471565b92915050565b6000602082019050818103600083015261399481846134b9565b905092915050565b600060208201905081810360008301526139b581613523565b9050919050565b600060208201905081810360008301526139d581613546565b9050919050565b600060208201905081810360008301526139f581613569565b9050919050565b60006020820190508181036000830152613a158161358c565b9050919050565b60006020820190508181036000830152613a35816135af565b9050919050565b60006020820190508181036000830152613a55816135d2565b9050919050565b60006020820190508181036000830152613a75816135f5565b9050919050565b60006020820190508181036000830152613a9581613618565b9050919050565b60006020820190508181036000830152613ab58161363b565b9050919050565b60006020820190508181036000830152613ad58161365e565b9050919050565b60006020820190508181036000830152613af581613681565b9050919050565b60006020820190508181036000830152613b15816136a4565b9050919050565b60006020820190508181036000830152613b35816136c7565b9050919050565b60006020820190508181036000830152613b55816136ea565b9050919050565b60006020820190508181036000830152613b758161370d565b9050919050565b60006020820190508181036000830152613b9581613730565b9050919050565b60006020820190508181036000830152613bb581613753565b9050919050565b60006020820190508181036000830152613bd581613776565b9050919050565b60006020820190508181036000830152613bf581613799565b9050919050565b60006020820190508181036000830152613c15816137bc565b9050919050565b60006020820190508181036000830152613c35816137df565b9050919050565b60006020820190508181036000830152613c5581613802565b9050919050565b60006020820190508181036000830152613c7581613825565b9050919050565b60006020820190508181036000830152613c9581613848565b9050919050565b6000602082019050613cb1600083018461387a565b92915050565b6000613cc1613cd2565b9050613ccd8282613fde565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf757613cf6614145565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d2357613d22614145565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d4f57613d4e614145565b5b613d5882614192565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dec82613f60565b9150613df783613f60565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2c57613e2b614089565b5b828201905092915050565b6000613e4282613f60565b9150613e4d83613f60565b925082613e5d57613e5c6140b8565b5b828204905092915050565b6000613e7382613f60565b9150613e7e83613f60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eb757613eb6614089565b5b828202905092915050565b6000613ecd82613f60565b9150613ed883613f60565b925082821015613eeb57613eea614089565b5b828203905092915050565b6000613f0182613f40565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f97578082015181840152602081019050613f7c565b83811115613fa6576000848401525b50505050565b60006002820490506001821680613fc457607f821691505b60208210811415613fd857613fd76140e7565b5b50919050565b613fe782614192565b810181811067ffffffffffffffff8211171561400657614005614145565b5b80604052505050565b600061401a82613f60565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561404d5761404c614089565b5b600182019050919050565b600061406382613f60565b915061406e83613f60565b92508261407e5761407d6140b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5452414e53414354494f4e3a20717479206f66206d696e7473206e6f7420616c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f535550504c593a206d617820737570706c792065786365656465640000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a204d696e7420616d6f756e7420617574686f726960008201527f7a65642073686f756c64206265206c6573730000000000000000000000000000602082015250565b7f5041594d454e543a20696e636f72726563742045746865722076616c75650000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5452414e53414354494f4e3a2073616c65206973206e6f742061637469766500600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a2050726573616c65206973206e6f74206163746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f535550504c593a2056616c7565206578636565647320746f74616c537570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5452414e53414354494f4e3a20596f752063616e2774206d696e74206f6e207060008201527f726573616c650000000000000000000000000000000000000000000000000000602082015250565b61480a81613ef6565b811461481557600080fd5b50565b61482181613f08565b811461482c57600080fd5b50565b61483881613f14565b811461484357600080fd5b50565b61484f81613f60565b811461485a57600080fd5b5056fea2646970667358221220527a298d7a4c845a3b6ce795d51f191c94613d9b51b4ab348e90165402cd7c3864736f6c63430008070033

Deployed Bytecode Sourcemap

35150:4462:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22960:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37539:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23905:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25464:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24987:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35353:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26354:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36916:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36257:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35841:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35572:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36065:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26764:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35629:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37303:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37875:834;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35234:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23599:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35197:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23329:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4595:94;;;;;;;;;;;;;:::i;:::-;;35418:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36164:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3944:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35743;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24074:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35316:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25757:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35390:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27020:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36822:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24249:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36500:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38720:541;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39272:114;;;;;;;;;;;;;:::i;:::-;;26123:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4844:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35956:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22960:305;23062:4;23114:25;23099:40;;;:11;:40;;;;:105;;;;23171:33;23156:48;;;:11;:48;;;;23099:105;:158;;;;23221:36;23245:11;23221:23;:36::i;:::-;23099:158;23079:178;;22960:305;;;:::o;37539:328::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:11:::1;;37623:5;;37617:3;:11;;;;:::i;:::-;:26;;37609:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;37696:6;37692:135;37712:3;37708:1;:7;37692:135;;;37736:12;37751:5;;37736:20;;37771:22;37781:2;37785:7;37771:9;:22::i;:::-;37808:5;;:7;;;;;;;;;:::i;:::-;;;;;;37721:106;37717:3;;;;;:::i;:::-;;;;37692:135;;;;37842:17;37851:2;37855:3;37842:17;;;;;;;:::i;:::-;;;;;;;;37539:328:::0;;:::o;23905:100::-;23959:13;23992:5;23985:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23905:100;:::o;25464:221::-;25540:7;25568:16;25576:7;25568;:16::i;:::-;25560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25653:15;:24;25669:7;25653:24;;;;;;;;;;;;;;;;;;;;;25646:31;;25464:221;;;:::o;24987:411::-;25068:13;25084:23;25099:7;25084:14;:23::i;:::-;25068:39;;25132:5;25126:11;;:2;:11;;;;25118:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25226:5;25210:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25235:37;25252:5;25259:12;:10;:12::i;:::-;25235:16;:37::i;:::-;25210:62;25188:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25369:21;25378:2;25382:7;25369:8;:21::i;:::-;25057:341;24987:411;;:::o;35353:30::-;;;;:::o;26354:339::-;26549:41;26568:12;:10;:12::i;:::-;26582:7;26549:18;:41::i;:::-;26541:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26657:28;26667:4;26673:2;26677:7;26657:9;:28::i;:::-;26354:339;;;:::o;36916:376::-;36978:13;37004:20;37038:17;37048:6;37038:9;:17::i;:::-;37027:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37004:52;;37067:12;37099:6;37094:167;37115:5;;37111:1;:9;37094:167;;;37160:6;37146:20;;:10;37154:1;37146:7;:10::i;:::-;:20;;;37142:108;;;37205:1;37187:6;37194:7;37187:15;;;;;;;;:::i;:::-;;;;;;;:19;;;;;37225:9;;;;;:::i;:::-;;;;37142:108;37122:3;;;;;:::i;:::-;;;;37094:167;;;;37278:6;37271:13;;;;36916:376;;;:::o;36257:235::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36363:9:::1;36359:126;36378:2;:9;36374:1;:13;36359:126;;;36432:7;36440:1;36432:10;;;;;;;;:::i;:::-;;;;;;;;36408:14;:21;36423:2;36426:1;36423:5;;;;;;;;:::i;:::-;;;;;;;;36408:21;;;;;;;;;;;;;;;:34;;;;36457:16;36467:2;36470:1;36467:5;;;;;;;;:::i;:::-;;;;;;;;36457:9;:16::i;:::-;36389:3;;;;;:::i;:::-;;;;36359:126;;;;36257:235:::0;;:::o;35841:104::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35933:4:::1;;35918:12;:19;;;;;;;:::i;:::-;;35841:104:::0;;:::o;35572:50::-;;;;;;;;;;;;;;;;;:::o;36065:91::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36145:3:::1;36129:13;;:19;;;;;;;;;;;;;;;;;;36065:91:::0;:::o;26764:185::-;26902:39;26919:4;26925:2;26929:7;26902:39;;;;;;;;;;;;:16;:39::i;:::-;26764:185;;;:::o;35629:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;37303:112::-;37348:13;37380:27;37397:9;37380:16;:27::i;:::-;37373:34;;37303:112;:::o;37875:834::-;37933:18;37954:14;:26;37969:10;37954:26;;;;;;;;;;;;;;;;37933:47;;37999:13;;;;;;;;;;;37991:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38070:20;38079:10;38070:8;:20::i;:::-;38062:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38165:1;38152:10;:14;38144:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38243:11;;38234:5;;38228:3;:11;;;;:::i;:::-;:26;;38220:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38312:10;38305:3;:17;;38297:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;38417:3;38409:5;;:11;;;;:::i;:::-;38396:9;:24;38388:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38508:3;38495:10;:16;;;;:::i;:::-;38466:14;:26;38481:10;38466:26;;;;;;;;;;;;;;;:45;;;;38526:6;38522:143;38542:3;38538:1;:7;38522:143;;;38566:12;38581:5;;38566:20;;38601:30;38611:10;38623:7;38601:9;:30::i;:::-;38646:5;;:7;;;;;;;;;:::i;:::-;;;;;;38551:114;38547:3;;;;;:::i;:::-;;;;38522:143;;;;38680:21;38685:10;38697:3;38680:21;;;;;;;:::i;:::-;;;;;;;;37922:787;37875:834;:::o;35234:33::-;;;;;;;;;;;;;:::o;23599:239::-;23671:7;23691:13;23707:7;:16;23715:7;23707:16;;;;;;;;;;;;;;;;;;;;;23691:32;;23759:1;23742:19;;:5;:19;;;;23734:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23825:5;23818:12;;;23599:239;;;:::o;35197:30::-;;;;;;;;;;;;;:::o;23329:208::-;23401:7;23446:1;23429:19;;:5;:19;;;;23421:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23513:9;:16;23523:5;23513:16;;;;;;;;;;;;;;;;23506:23;;23329:208;;;:::o;4595:94::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4660:21:::1;4678:1;4660:9;:21::i;:::-;4595:94::o:0;35418:21::-;;;;:::o;36164:85::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36238:3:::1;36225:10;;:16;;;;;;;;;;;;;;;;;;36164:85:::0;:::o;3944:87::-;3990:7;4017:6;;;;;;;;;;;4010:13;;3944:87;:::o;35743:::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35814:8:::1;35806:5;:16;;;;35743:87:::0;:::o;24074:104::-;24130:13;24163:7;24156:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24074:104;:::o;35316:30::-;;;;:::o;25757:295::-;25872:12;:10;:12::i;:::-;25860:24;;:8;:24;;;;25852:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25972:8;25927:18;:32;25946:12;:10;:12::i;:::-;25927:32;;;;;;;;;;;;;;;:42;25960:8;25927:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26025:8;25996:48;;26011:12;:10;:12::i;:::-;25996:48;;;26035:8;25996:48;;;;;;:::i;:::-;;;;;;;;25757:295;;:::o;35390:21::-;;;;:::o;27020:328::-;27195:41;27214:12;:10;:12::i;:::-;27228:7;27195:18;:41::i;:::-;27187:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27301:39;27315:4;27321:2;27325:7;27334:5;27301:13;:39::i;:::-;27020:328;;;;:::o;36822:83::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36891:6:::1;36883:5;:14;;;;36822:83:::0;:::o;24249:334::-;24322:13;24356:16;24364:7;24356;:16::i;:::-;24348:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24437:21;24461:10;:8;:10::i;:::-;24437:34;;24513:1;24495:7;24489:21;:25;:86;;;;;;;;;;;;;;;;;24541:7;24550:18;:7;:16;:18::i;:::-;24524:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24489:86;24482:93;;;24249:334;;;:::o;36500:309::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:9:::1;36603:199;36622:2;:9;36618:1;:13;36603:199;;;36676:7;36684:1;36676:10;;;;;;;;:::i;:::-;;;;;;;;36652:14;:21;36667:2;36670:1;36667:5;;;;;;;;:::i;:::-;;;;;;;;36652:21;;;;;;;;;;;;;;;:34;;;;36774:16;36784:2;36787:1;36784:5;;;;;;;;:::i;:::-;;;;;;;;36774:9;:16::i;:::-;36633:3;;;;;:::i;:::-;;;;36603:199;;;;36500:309:::0;;:::o;38720:541::-;38779:10;;;;;;;;;;;38771:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38851:5;;38844:3;:12;;:23;;;;;38866:1;38860:3;:7;38844:23;38836:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38942:11;;38933:5;;38927:3;:11;;;;:::i;:::-;:26;;38919:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39025:3;39017:5;;:11;;;;:::i;:::-;39004:9;:24;38996:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39078:6;39074:143;39094:3;39090:1;:7;39074:143;;;39118:12;39133:5;;39118:20;;39153:30;39163:10;39175:7;39153:9;:30::i;:::-;39198:5;;:7;;;;;;;;;:::i;:::-;;;;;;39103:114;39099:3;;;;;:::i;:::-;;;;39074:143;;;;39232:21;39237:10;39249:3;39232:21;;;;;;;:::i;:::-;;;;;;;;38720:541;:::o;39272:114::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39335:10:::1;39327:28;;:51;39356:21;39327:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39272:114::o:0;26123:164::-;26220:4;26244:18;:25;26263:5;26244:25;;;;;;;;;;;;;;;:35;26270:8;26244:35;;;;;;;;;;;;;;;;;;;;;;;;;26237:42;;26123:164;;;;:::o;4844:192::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4953:1:::1;4933:22;;:8;:22;;;;4925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5009:19;5019:8;5009:9;:19::i;:::-;4844:192:::0;:::o;35956:101::-;4175:12;:10;:12::i;:::-;4164:23;;:7;:5;:7::i;:::-;:23;;;4156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36040:9:::1;36026:11;:23;;;;35956:101:::0;:::o;15930:157::-;16015:4;16054:25;16039:40;;;:11;:40;;;;16032:47;;15930:157;;;:::o;2732:98::-;2785:7;2812:10;2805:17;;2732:98;:::o;29842:110::-;29918:26;29928:2;29932:7;29918:26;;;;;;;;;;;;:9;:26::i;:::-;29842:110;;:::o;28858:127::-;28923:4;28975:1;28947:30;;:7;:16;28955:7;28947:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28940:37;;28858:127;;;:::o;32840:174::-;32942:2;32915:15;:24;32931:7;32915:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32998:7;32994:2;32960:46;;32969:23;32984:7;32969:14;:23::i;:::-;32960:46;;;;;;;;;;;;32840:174;;:::o;29152:348::-;29245:4;29270:16;29278:7;29270;:16::i;:::-;29262:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29346:13;29362:23;29377:7;29362:14;:23::i;:::-;29346:39;;29415:5;29404:16;;:7;:16;;;:51;;;;29448:7;29424:31;;:20;29436:7;29424:11;:20::i;:::-;:31;;;29404:51;:87;;;;29459:32;29476:5;29483:7;29459:16;:32::i;:::-;29404:87;29396:96;;;29152:348;;;;:::o;32144:578::-;32303:4;32276:31;;:23;32291:7;32276:14;:23::i;:::-;:31;;;32268:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32386:1;32372:16;;:2;:16;;;;32364:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32442:39;32463:4;32469:2;32473:7;32442:20;:39::i;:::-;32546:29;32563:1;32567:7;32546:8;:29::i;:::-;32607:1;32588:9;:15;32598:4;32588:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32636:1;32619:9;:13;32629:2;32619:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32667:2;32648:7;:16;32656:7;32648:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32706:7;32702:2;32687:27;;32696:4;32687:27;;;;;;;;;;;;32144:578;;;:::o;39396:95::-;39479:4;39451:18;:27;39470:7;39451:27;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;39396:95;:::o;39499:110::-;39551:4;39574:18;:27;39593:7;39574:27;;;;;;;;;;;;;;;;;;;;;;;;;39567:34;;39499:110;;;:::o;5044:173::-;5100:16;5119:6;;;;;;;;;;;5100:25;;5145:8;5136:6;;:17;;;;;;;;;;;;;;;;;;5200:8;5169:40;;5190:8;5169:40;;;;;;;;;;;;5089:128;5044:173;:::o;28230:315::-;28387:28;28397:4;28403:2;28407:7;28387:9;:28::i;:::-;28434:48;28457:4;28463:2;28467:7;28476:5;28434:22;:48::i;:::-;28426:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28230:315;;;;:::o;37423:105::-;37475:13;37508:12;37501:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37423:105;:::o;348:723::-;404:13;634:1;625:5;:10;621:53;;;652:10;;;;;;;;;;;;;;;;;;;;;621:53;684:12;699:5;684:20;;715:14;740:78;755:1;747:4;:9;740:78;;773:8;;;;;:::i;:::-;;;;804:2;796:10;;;;;:::i;:::-;;;740:78;;;828:19;860:6;850:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;828:39;;878:154;894:1;885:5;:10;878:154;;922:1;912:11;;;;;:::i;:::-;;;989:2;981:5;:10;;;;:::i;:::-;968:2;:24;;;;:::i;:::-;955:39;;938:6;945;938:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1018:2;1009:11;;;;;:::i;:::-;;;878:154;;;1056:6;1042:21;;;;;348:723;;;;:::o;30179:321::-;30309:18;30315:2;30319:7;30309:5;:18::i;:::-;30360:54;30391:1;30395:2;30399:7;30408:5;30360:22;:54::i;:::-;30338:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30179:321;;;:::o;34950:126::-;;;;:::o;33579:799::-;33734:4;33755:15;:2;:13;;;:15::i;:::-;33751:620;;;33807:2;33791:36;;;33828:12;:10;:12::i;:::-;33842:4;33848:7;33857:5;33791:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33787:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34050:1;34033:6;:13;:18;34029:272;;;34076:60;;;;;;;;;;:::i;:::-;;;;;;;;34029:272;34251:6;34245:13;34236:6;34232:2;34228:15;34221:38;33787:529;33924:41;;;33914:51;;;:6;:51;;;;33907:58;;;;;33751:620;34355:4;34348:11;;33579:799;;;;;;;:::o;30836:382::-;30930:1;30916:16;;:2;:16;;;;30908:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30989:16;30997:7;30989;:16::i;:::-;30988:17;30980:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31051:45;31080:1;31084:2;31088:7;31051:20;:45::i;:::-;31126:1;31109:9;:13;31119:2;31109:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31157:2;31138:7;:16;31146:7;31138:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31202:7;31198:2;31177:33;;31194:1;31177:33;;;;;;;;;;;;30836:382;;:::o;5990:387::-;6050:4;6258:12;6325:7;6313:20;6305:28;;6368:1;6361:4;:8;6354:15;;;5990:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:329::-;4407:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:119;;;4462:79;;:::i;:::-;4424:119;4582:1;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4553:117;4348:329;;;;:::o;4683:474::-;4751:6;4759;4808:2;4796:9;4787:7;4783:23;4779:32;4776:119;;;4814:79;;:::i;:::-;4776:119;4934:1;4959:53;5004:7;4995:6;4984:9;4980:22;4959:53;:::i;:::-;4949:63;;4905:117;5061:2;5087:53;5132:7;5123:6;5112:9;5108:22;5087:53;:::i;:::-;5077:63;;5032:118;4683:474;;;;;:::o;5163:619::-;5240:6;5248;5256;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5558:2;5584:53;5629:7;5620:6;5609:9;5605:22;5584:53;:::i;:::-;5574:63;;5529:118;5686:2;5712:53;5757:7;5748:6;5737:9;5733:22;5712:53;:::i;:::-;5702:63;;5657:118;5163:619;;;;;:::o;5788:943::-;5883:6;5891;5899;5907;5956:3;5944:9;5935:7;5931:23;5927:33;5924:120;;;5963:79;;:::i;:::-;5924:120;6083:1;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6054:117;6210:2;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6181:118;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6494:2;6483:9;6479:18;6466:32;6525:18;6517:6;6514:30;6511:117;;;6547:79;;:::i;:::-;6511:117;6652:62;6706:7;6697:6;6686:9;6682:22;6652:62;:::i;:::-;6642:72;;6437:287;5788:943;;;;;;;:::o;6737:468::-;6802:6;6810;6859:2;6847:9;6838:7;6834:23;6830:32;6827:119;;;6865:79;;:::i;:::-;6827:119;6985:1;7010:53;7055:7;7046:6;7035:9;7031:22;7010:53;:::i;:::-;7000:63;;6956:117;7112:2;7138:50;7180:7;7171:6;7160:9;7156:22;7138:50;:::i;:::-;7128:60;;7083:115;6737:468;;;;;:::o;7211:474::-;7279:6;7287;7336:2;7324:9;7315:7;7311:23;7307:32;7304:119;;;7342:79;;:::i;:::-;7304:119;7462:1;7487:53;7532:7;7523:6;7512:9;7508:22;7487:53;:::i;:::-;7477:63;;7433:117;7589:2;7615:53;7660:7;7651:6;7640:9;7636:22;7615:53;:::i;:::-;7605:63;;7560:118;7211:474;;;;;:::o;7691:894::-;7809:6;7817;7866:2;7854:9;7845:7;7841:23;7837:32;7834:119;;;7872:79;;:::i;:::-;7834:119;8020:1;8009:9;8005:17;7992:31;8050:18;8042:6;8039:30;8036:117;;;8072:79;;:::i;:::-;8036:117;8177:78;8247:7;8238:6;8227:9;8223:22;8177:78;:::i;:::-;8167:88;;7963:302;8332:2;8321:9;8317:18;8304:32;8363:18;8355:6;8352:30;8349:117;;;8385:79;;:::i;:::-;8349:117;8490:78;8560:7;8551:6;8540:9;8536:22;8490:78;:::i;:::-;8480:88;;8275:303;7691:894;;;;;:::o;8591:323::-;8647:6;8696:2;8684:9;8675:7;8671:23;8667:32;8664:119;;;8702:79;;:::i;:::-;8664:119;8822:1;8847:50;8889:7;8880:6;8869:9;8865:22;8847:50;:::i;:::-;8837:60;;8793:114;8591:323;;;;:::o;8920:327::-;8978:6;9027:2;9015:9;9006:7;9002:23;8998:32;8995:119;;;9033:79;;:::i;:::-;8995:119;9153:1;9178:52;9222:7;9213:6;9202:9;9198:22;9178:52;:::i;:::-;9168:62;;9124:116;8920:327;;;;:::o;9253:349::-;9322:6;9371:2;9359:9;9350:7;9346:23;9342:32;9339:119;;;9377:79;;:::i;:::-;9339:119;9497:1;9522:63;9577:7;9568:6;9557:9;9553:22;9522:63;:::i;:::-;9512:73;;9468:127;9253:349;;;;:::o;9608:529::-;9679:6;9687;9736:2;9724:9;9715:7;9711:23;9707:32;9704:119;;;9742:79;;:::i;:::-;9704:119;9890:1;9879:9;9875:17;9862:31;9920:18;9912:6;9909:30;9906:117;;;9942:79;;:::i;:::-;9906:117;10055:65;10112:7;10103:6;10092:9;10088:22;10055:65;:::i;:::-;10037:83;;;;9833:297;9608:529;;;;;:::o;10143:329::-;10202:6;10251:2;10239:9;10230:7;10226:23;10222:32;10219:119;;;10257:79;;:::i;:::-;10219:119;10377:1;10402:53;10447:7;10438:6;10427:9;10423:22;10402:53;:::i;:::-;10392:63;;10348:117;10143:329;;;;:::o;10478:179::-;10547:10;10568:46;10610:3;10602:6;10568:46;:::i;:::-;10646:4;10641:3;10637:14;10623:28;;10478:179;;;;:::o;10663:118::-;10750:24;10768:5;10750:24;:::i;:::-;10745:3;10738:37;10663:118;;:::o;10817:732::-;10936:3;10965:54;11013:5;10965:54;:::i;:::-;11035:86;11114:6;11109:3;11035:86;:::i;:::-;11028:93;;11145:56;11195:5;11145:56;:::i;:::-;11224:7;11255:1;11240:284;11265:6;11262:1;11259:13;11240:284;;;11341:6;11335:13;11368:63;11427:3;11412:13;11368:63;:::i;:::-;11361:70;;11454:60;11507:6;11454:60;:::i;:::-;11444:70;;11300:224;11287:1;11284;11280:9;11275:14;;11240:284;;;11244:14;11540:3;11533:10;;10941:608;;;10817:732;;;;:::o;11555:109::-;11636:21;11651:5;11636:21;:::i;:::-;11631:3;11624:34;11555:109;;:::o;11670:360::-;11756:3;11784:38;11816:5;11784:38;:::i;:::-;11838:70;11901:6;11896:3;11838:70;:::i;:::-;11831:77;;11917:52;11962:6;11957:3;11950:4;11943:5;11939:16;11917:52;:::i;:::-;11994:29;12016:6;11994:29;:::i;:::-;11989:3;11985:39;11978:46;;11760:270;11670:360;;;;:::o;12036:364::-;12124:3;12152:39;12185:5;12152:39;:::i;:::-;12207:71;12271:6;12266:3;12207:71;:::i;:::-;12200:78;;12287:52;12332:6;12327:3;12320:4;12313:5;12309:16;12287:52;:::i;:::-;12364:29;12386:6;12364:29;:::i;:::-;12359:3;12355:39;12348:46;;12128:272;12036:364;;;;:::o;12406:377::-;12512:3;12540:39;12573:5;12540:39;:::i;:::-;12595:89;12677:6;12672:3;12595:89;:::i;:::-;12588:96;;12693:52;12738:6;12733:3;12726:4;12719:5;12715:16;12693:52;:::i;:::-;12770:6;12765:3;12761:16;12754:23;;12516:267;12406:377;;;;:::o;12789:366::-;12931:3;12952:67;13016:2;13011:3;12952:67;:::i;:::-;12945:74;;13028:93;13117:3;13028:93;:::i;:::-;13146:2;13141:3;13137:12;13130:19;;12789:366;;;:::o;13161:::-;13303:3;13324:67;13388:2;13383:3;13324:67;:::i;:::-;13317:74;;13400:93;13489:3;13400:93;:::i;:::-;13518:2;13513:3;13509:12;13502:19;;13161:366;;;:::o;13533:::-;13675:3;13696:67;13760:2;13755:3;13696:67;:::i;:::-;13689:74;;13772:93;13861:3;13772:93;:::i;:::-;13890:2;13885:3;13881:12;13874:19;;13533:366;;;:::o;13905:::-;14047:3;14068:67;14132:2;14127:3;14068:67;:::i;:::-;14061:74;;14144:93;14233:3;14144:93;:::i;:::-;14262:2;14257:3;14253:12;14246:19;;13905:366;;;:::o;14277:::-;14419:3;14440:67;14504:2;14499:3;14440:67;:::i;:::-;14433:74;;14516:93;14605:3;14516:93;:::i;:::-;14634:2;14629:3;14625:12;14618:19;;14277:366;;;:::o;14649:::-;14791:3;14812:67;14876:2;14871:3;14812:67;:::i;:::-;14805:74;;14888:93;14977:3;14888:93;:::i;:::-;15006:2;15001:3;14997:12;14990:19;;14649:366;;;:::o;15021:::-;15163:3;15184:67;15248:2;15243:3;15184:67;:::i;:::-;15177:74;;15260:93;15349:3;15260:93;:::i;:::-;15378:2;15373:3;15369:12;15362:19;;15021:366;;;:::o;15393:::-;15535:3;15556:67;15620:2;15615:3;15556:67;:::i;:::-;15549:74;;15632:93;15721:3;15632:93;:::i;:::-;15750:2;15745:3;15741:12;15734:19;;15393:366;;;:::o;15765:::-;15907:3;15928:67;15992:2;15987:3;15928:67;:::i;:::-;15921:74;;16004:93;16093:3;16004:93;:::i;:::-;16122:2;16117:3;16113:12;16106:19;;15765:366;;;:::o;16137:::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:::-;16651:3;16672:67;16736:2;16731:3;16672:67;:::i;:::-;16665:74;;16748:93;16837:3;16748:93;:::i;:::-;16866:2;16861:3;16857:12;16850:19;;16509:366;;;:::o;16881:::-;17023:3;17044:67;17108:2;17103:3;17044:67;:::i;:::-;17037:74;;17120:93;17209:3;17120:93;:::i;:::-;17238:2;17233:3;17229:12;17222:19;;16881:366;;;:::o;17253:::-;17395:3;17416:67;17480:2;17475:3;17416:67;:::i;:::-;17409:74;;17492:93;17581:3;17492:93;:::i;:::-;17610:2;17605:3;17601:12;17594:19;;17253:366;;;:::o;17625:::-;17767:3;17788:67;17852:2;17847:3;17788:67;:::i;:::-;17781:74;;17864:93;17953:3;17864:93;:::i;:::-;17982:2;17977:3;17973:12;17966:19;;17625:366;;;:::o;17997:::-;18139:3;18160:67;18224:2;18219:3;18160:67;:::i;:::-;18153:74;;18236:93;18325:3;18236:93;:::i;:::-;18354:2;18349:3;18345:12;18338:19;;17997:366;;;:::o;18369:::-;18511:3;18532:67;18596:2;18591:3;18532:67;:::i;:::-;18525:74;;18608:93;18697:3;18608:93;:::i;:::-;18726:2;18721:3;18717:12;18710:19;;18369:366;;;:::o;18741:::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:::-;19255:3;19276:67;19340:2;19335:3;19276:67;:::i;:::-;19269:74;;19352:93;19441:3;19352:93;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19113:366;;;:::o;19485:::-;19627:3;19648:67;19712:2;19707:3;19648:67;:::i;:::-;19641:74;;19724:93;19813:3;19724:93;:::i;:::-;19842:2;19837:3;19833:12;19826:19;;19485:366;;;:::o;19857:::-;19999:3;20020:67;20084:2;20079:3;20020:67;:::i;:::-;20013:74;;20096:93;20185:3;20096:93;:::i;:::-;20214:2;20209:3;20205:12;20198:19;;19857:366;;;:::o;20229:::-;20371:3;20392:67;20456:2;20451:3;20392:67;:::i;:::-;20385:74;;20468:93;20557:3;20468:93;:::i;:::-;20586:2;20581:3;20577:12;20570:19;;20229:366;;;:::o;20601:::-;20743:3;20764:67;20828:2;20823:3;20764:67;:::i;:::-;20757:74;;20840:93;20929:3;20840:93;:::i;:::-;20958:2;20953:3;20949:12;20942:19;;20601:366;;;:::o;20973:::-;21115:3;21136:67;21200:2;21195:3;21136:67;:::i;:::-;21129:74;;21212:93;21301:3;21212:93;:::i;:::-;21330:2;21325:3;21321:12;21314:19;;20973:366;;;:::o;21345:::-;21487:3;21508:67;21572:2;21567:3;21508:67;:::i;:::-;21501:74;;21584:93;21673:3;21584:93;:::i;:::-;21702:2;21697:3;21693:12;21686:19;;21345:366;;;:::o;21717:108::-;21794:24;21812:5;21794:24;:::i;:::-;21789:3;21782:37;21717:108;;:::o;21831:118::-;21918:24;21936:5;21918:24;:::i;:::-;21913:3;21906:37;21831:118;;:::o;21955:435::-;22135:3;22157:95;22248:3;22239:6;22157:95;:::i;:::-;22150:102;;22269:95;22360:3;22351:6;22269:95;:::i;:::-;22262:102;;22381:3;22374:10;;21955:435;;;;;:::o;22396:222::-;22489:4;22527:2;22516:9;22512:18;22504:26;;22540:71;22608:1;22597:9;22593:17;22584:6;22540:71;:::i;:::-;22396:222;;;;:::o;22624:640::-;22819:4;22857:3;22846:9;22842:19;22834:27;;22871:71;22939:1;22928:9;22924:17;22915:6;22871:71;:::i;:::-;22952:72;23020:2;23009:9;23005:18;22996:6;22952:72;:::i;:::-;23034;23102:2;23091:9;23087:18;23078:6;23034:72;:::i;:::-;23153:9;23147:4;23143:20;23138:2;23127:9;23123:18;23116:48;23181:76;23252:4;23243:6;23181:76;:::i;:::-;23173:84;;22624:640;;;;;;;:::o;23270:332::-;23391:4;23429:2;23418:9;23414:18;23406:26;;23442:71;23510:1;23499:9;23495:17;23486:6;23442:71;:::i;:::-;23523:72;23591:2;23580:9;23576:18;23567:6;23523:72;:::i;:::-;23270:332;;;;;:::o;23608:373::-;23751:4;23789:2;23778:9;23774:18;23766:26;;23838:9;23832:4;23828:20;23824:1;23813:9;23809:17;23802:47;23866:108;23969:4;23960:6;23866:108;:::i;:::-;23858:116;;23608:373;;;;:::o;23987:210::-;24074:4;24112:2;24101:9;24097:18;24089:26;;24125:65;24187:1;24176:9;24172:17;24163:6;24125:65;:::i;:::-;23987:210;;;;:::o;24203:313::-;24316:4;24354:2;24343:9;24339:18;24331:26;;24403:9;24397:4;24393:20;24389:1;24378:9;24374:17;24367:47;24431:78;24504:4;24495:6;24431:78;:::i;:::-;24423:86;;24203:313;;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:::-;25113:4;25151:2;25140:9;25136:18;25128:26;;25200:9;25194:4;25190:20;25186:1;25175:9;25171:17;25164:47;25228:131;25354:4;25228:131;:::i;:::-;25220:139;;24947:419;;;:::o;25372:::-;25538:4;25576:2;25565:9;25561:18;25553:26;;25625:9;25619:4;25615:20;25611:1;25600:9;25596:17;25589:47;25653:131;25779:4;25653:131;:::i;:::-;25645:139;;25372:419;;;:::o;25797:::-;25963:4;26001:2;25990:9;25986:18;25978:26;;26050:9;26044:4;26040:20;26036:1;26025:9;26021:17;26014:47;26078:131;26204:4;26078:131;:::i;:::-;26070:139;;25797:419;;;:::o;26222:::-;26388:4;26426:2;26415:9;26411:18;26403:26;;26475:9;26469:4;26465:20;26461:1;26450:9;26446:17;26439:47;26503:131;26629:4;26503:131;:::i;:::-;26495:139;;26222:419;;;:::o;26647:::-;26813:4;26851:2;26840:9;26836:18;26828:26;;26900:9;26894:4;26890:20;26886:1;26875:9;26871:17;26864:47;26928:131;27054:4;26928:131;:::i;:::-;26920:139;;26647:419;;;:::o;27072:::-;27238:4;27276:2;27265:9;27261:18;27253:26;;27325:9;27319:4;27315:20;27311:1;27300:9;27296:17;27289:47;27353:131;27479:4;27353:131;:::i;:::-;27345:139;;27072:419;;;:::o;27497:::-;27663:4;27701:2;27690:9;27686:18;27678:26;;27750:9;27744:4;27740:20;27736:1;27725:9;27721:17;27714:47;27778:131;27904:4;27778:131;:::i;:::-;27770:139;;27497:419;;;:::o;27922:::-;28088:4;28126:2;28115:9;28111:18;28103:26;;28175:9;28169:4;28165:20;28161:1;28150:9;28146:17;28139:47;28203:131;28329:4;28203:131;:::i;:::-;28195:139;;27922:419;;;:::o;28347:::-;28513:4;28551:2;28540:9;28536:18;28528:26;;28600:9;28594:4;28590:20;28586:1;28575:9;28571:17;28564:47;28628:131;28754:4;28628:131;:::i;:::-;28620:139;;28347:419;;;:::o;28772:::-;28938:4;28976:2;28965:9;28961:18;28953:26;;29025:9;29019:4;29015:20;29011:1;29000:9;28996:17;28989:47;29053:131;29179:4;29053:131;:::i;:::-;29045:139;;28772:419;;;:::o;29197:::-;29363:4;29401:2;29390:9;29386:18;29378:26;;29450:9;29444:4;29440:20;29436:1;29425:9;29421:17;29414:47;29478:131;29604:4;29478:131;:::i;:::-;29470:139;;29197:419;;;:::o;29622:::-;29788:4;29826:2;29815:9;29811:18;29803:26;;29875:9;29869:4;29865:20;29861:1;29850:9;29846:17;29839:47;29903:131;30029:4;29903:131;:::i;:::-;29895:139;;29622:419;;;:::o;30047:::-;30213:4;30251:2;30240:9;30236:18;30228:26;;30300:9;30294:4;30290:20;30286:1;30275:9;30271:17;30264:47;30328:131;30454:4;30328:131;:::i;:::-;30320:139;;30047:419;;;:::o;30472:::-;30638:4;30676:2;30665:9;30661:18;30653:26;;30725:9;30719:4;30715:20;30711:1;30700:9;30696:17;30689:47;30753:131;30879:4;30753:131;:::i;:::-;30745:139;;30472:419;;;:::o;30897:::-;31063:4;31101:2;31090:9;31086:18;31078:26;;31150:9;31144:4;31140:20;31136:1;31125:9;31121:17;31114:47;31178:131;31304:4;31178:131;:::i;:::-;31170:139;;30897:419;;;:::o;31322:::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31575:9;31569:4;31565:20;31561:1;31550:9;31546:17;31539:47;31603:131;31729:4;31603:131;:::i;:::-;31595:139;;31322:419;;;:::o;31747:::-;31913:4;31951:2;31940:9;31936:18;31928:26;;32000:9;31994:4;31990:20;31986:1;31975:9;31971:17;31964:47;32028:131;32154:4;32028:131;:::i;:::-;32020:139;;31747:419;;;:::o;32172:::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32425:9;32419:4;32415:20;32411:1;32400:9;32396:17;32389:47;32453:131;32579:4;32453:131;:::i;:::-;32445:139;;32172:419;;;:::o;32597:::-;32763:4;32801:2;32790:9;32786:18;32778:26;;32850:9;32844:4;32840:20;32836:1;32825:9;32821:17;32814:47;32878:131;33004:4;32878:131;:::i;:::-;32870:139;;32597:419;;;:::o;33022:::-;33188:4;33226:2;33215:9;33211:18;33203:26;;33275:9;33269:4;33265:20;33261:1;33250:9;33246:17;33239:47;33303:131;33429:4;33303:131;:::i;:::-;33295:139;;33022:419;;;:::o;33447:::-;33613:4;33651:2;33640:9;33636:18;33628:26;;33700:9;33694:4;33690:20;33686:1;33675:9;33671:17;33664:47;33728:131;33854:4;33728:131;:::i;:::-;33720:139;;33447:419;;;:::o;33872:::-;34038:4;34076:2;34065:9;34061:18;34053:26;;34125:9;34119:4;34115:20;34111:1;34100:9;34096:17;34089:47;34153:131;34279:4;34153:131;:::i;:::-;34145:139;;33872:419;;;:::o;34297:::-;34463:4;34501:2;34490:9;34486:18;34478:26;;34550:9;34544:4;34540:20;34536:1;34525:9;34521:17;34514:47;34578:131;34704:4;34578:131;:::i;:::-;34570:139;;34297:419;;;:::o;34722:222::-;34815:4;34853:2;34842:9;34838:18;34830:26;;34866:71;34934:1;34923:9;34919:17;34910:6;34866:71;:::i;:::-;34722:222;;;;:::o;34950:129::-;34984:6;35011:20;;:::i;:::-;35001:30;;35040:33;35068:4;35060:6;35040:33;:::i;:::-;34950:129;;;:::o;35085:75::-;35118:6;35151:2;35145:9;35135:19;;35085:75;:::o;35166:311::-;35243:4;35333:18;35325:6;35322:30;35319:56;;;35355:18;;:::i;:::-;35319:56;35405:4;35397:6;35393:17;35385:25;;35465:4;35459;35455:15;35447:23;;35166:311;;;:::o;35483:::-;35560:4;35650:18;35642:6;35639:30;35636:56;;;35672:18;;:::i;:::-;35636:56;35722:4;35714:6;35710:17;35702:25;;35782:4;35776;35772:15;35764:23;;35483:311;;;:::o;35800:307::-;35861:4;35951:18;35943:6;35940:30;35937:56;;;35973:18;;:::i;:::-;35937:56;36011:29;36033:6;36011:29;:::i;:::-;36003:37;;36095:4;36089;36085:15;36077:23;;35800:307;;;:::o;36113:132::-;36180:4;36203:3;36195:11;;36233:4;36228:3;36224:14;36216:22;;36113:132;;;:::o;36251:114::-;36318:6;36352:5;36346:12;36336:22;;36251:114;;;:::o;36371:98::-;36422:6;36456:5;36450:12;36440:22;;36371:98;;;:::o;36475:99::-;36527:6;36561:5;36555:12;36545:22;;36475:99;;;:::o;36580:113::-;36650:4;36682;36677:3;36673:14;36665:22;;36580:113;;;:::o;36699:184::-;36798:11;36832:6;36827:3;36820:19;36872:4;36867:3;36863:14;36848:29;;36699:184;;;;:::o;36889:168::-;36972:11;37006:6;37001:3;36994:19;37046:4;37041:3;37037:14;37022:29;;36889:168;;;;:::o;37063:169::-;37147:11;37181:6;37176:3;37169:19;37221:4;37216:3;37212:14;37197:29;;37063:169;;;;:::o;37238:148::-;37340:11;37377:3;37362:18;;37238:148;;;;:::o;37392:305::-;37432:3;37451:20;37469:1;37451:20;:::i;:::-;37446:25;;37485:20;37503:1;37485:20;:::i;:::-;37480:25;;37639:1;37571:66;37567:74;37564:1;37561:81;37558:107;;;37645:18;;:::i;:::-;37558:107;37689:1;37686;37682:9;37675:16;;37392:305;;;;:::o;37703:185::-;37743:1;37760:20;37778:1;37760:20;:::i;:::-;37755:25;;37794:20;37812:1;37794:20;:::i;:::-;37789:25;;37833:1;37823:35;;37838:18;;:::i;:::-;37823:35;37880:1;37877;37873:9;37868:14;;37703:185;;;;:::o;37894:348::-;37934:7;37957:20;37975:1;37957:20;:::i;:::-;37952:25;;37991:20;38009:1;37991:20;:::i;:::-;37986:25;;38179:1;38111:66;38107:74;38104:1;38101:81;38096:1;38089:9;38082:17;38078:105;38075:131;;;38186:18;;:::i;:::-;38075:131;38234:1;38231;38227:9;38216:20;;37894:348;;;;:::o;38248:191::-;38288:4;38308:20;38326:1;38308:20;:::i;:::-;38303:25;;38342:20;38360:1;38342:20;:::i;:::-;38337:25;;38381:1;38378;38375:8;38372:34;;;38386:18;;:::i;:::-;38372:34;38431:1;38428;38424:9;38416:17;;38248:191;;;;:::o;38445:96::-;38482:7;38511:24;38529:5;38511:24;:::i;:::-;38500:35;;38445:96;;;:::o;38547:90::-;38581:7;38624:5;38617:13;38610:21;38599:32;;38547:90;;;:::o;38643:149::-;38679:7;38719:66;38712:5;38708:78;38697:89;;38643:149;;;:::o;38798:126::-;38835:7;38875:42;38868:5;38864:54;38853:65;;38798:126;;;:::o;38930:77::-;38967:7;38996:5;38985:16;;38930:77;;;:::o;39013:154::-;39097:6;39092:3;39087;39074:30;39159:1;39150:6;39145:3;39141:16;39134:27;39013:154;;;:::o;39173:307::-;39241:1;39251:113;39265:6;39262:1;39259:13;39251:113;;;39350:1;39345:3;39341:11;39335:18;39331:1;39326:3;39322:11;39315:39;39287:2;39284:1;39280:10;39275:15;;39251:113;;;39382:6;39379:1;39376:13;39373:101;;;39462:1;39453:6;39448:3;39444:16;39437:27;39373:101;39222:258;39173:307;;;:::o;39486:320::-;39530:6;39567:1;39561:4;39557:12;39547:22;;39614:1;39608:4;39604:12;39635:18;39625:81;;39691:4;39683:6;39679:17;39669:27;;39625:81;39753:2;39745:6;39742:14;39722:18;39719:38;39716:84;;;39772:18;;:::i;:::-;39716:84;39537:269;39486:320;;;:::o;39812:281::-;39895:27;39917:4;39895:27;:::i;:::-;39887:6;39883:40;40025:6;40013:10;40010:22;39989:18;39977:10;39974:34;39971:62;39968:88;;;40036:18;;:::i;:::-;39968:88;40076:10;40072:2;40065:22;39855:238;39812:281;;:::o;40099:233::-;40138:3;40161:24;40179:5;40161:24;:::i;:::-;40152:33;;40207:66;40200:5;40197:77;40194:103;;;40277:18;;:::i;:::-;40194:103;40324:1;40317:5;40313:13;40306:20;;40099:233;;;:::o;40338:176::-;40370:1;40387:20;40405:1;40387:20;:::i;:::-;40382:25;;40421:20;40439:1;40421:20;:::i;:::-;40416:25;;40460:1;40450:35;;40465:18;;:::i;:::-;40450:35;40506:1;40503;40499:9;40494:14;;40338:176;;;;:::o;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:180;41312:77;41309:1;41302:88;41409:4;41406:1;41399:15;41433:4;41430:1;41423:15;41450:117;41559:1;41556;41549:12;41573:117;41682:1;41679;41672:12;41696:117;41805:1;41802;41795:12;41819:117;41928:1;41925;41918:12;41942:117;42051:1;42048;42041:12;42065:117;42174:1;42171;42164:12;42188:102;42229:6;42280:2;42276:7;42271:2;42264:5;42260:14;42256:28;42246:38;;42188:102;;;:::o;42296:237::-;42436:34;42432:1;42424:6;42420:14;42413:58;42505:20;42500:2;42492:6;42488:15;42481:45;42296:237;:::o;42539:225::-;42679:34;42675:1;42667:6;42663:14;42656:58;42748:8;42743:2;42735:6;42731:15;42724:33;42539:225;:::o;42770:178::-;42910:30;42906:1;42898:6;42894:14;42887:54;42770:178;:::o;42954:223::-;43094:34;43090:1;43082:6;43078:14;43071:58;43163:6;43158:2;43150:6;43146:15;43139:31;42954:223;:::o;43183:::-;43323:34;43319:1;43311:6;43307:14;43300:58;43392:6;43387:2;43379:6;43375:15;43368:31;43183:223;:::o;43412:175::-;43552:27;43548:1;43540:6;43536:14;43529:51;43412:175;:::o;43593:177::-;43733:29;43729:1;43721:6;43717:14;43710:53;43593:177;:::o;43776:231::-;43916:34;43912:1;43904:6;43900:14;43893:58;43985:14;43980:2;43972:6;43968:15;43961:39;43776:231;:::o;44013:237::-;44153:34;44149:1;44141:6;44137:14;44130:58;44222:20;44217:2;44209:6;44205:15;44198:45;44013:237;:::o;44256:180::-;44396:32;44392:1;44384:6;44380:14;44373:56;44256:180;:::o;44442:243::-;44582:34;44578:1;44570:6;44566:14;44559:58;44651:26;44646:2;44638:6;44634:15;44627:51;44442:243;:::o;44691:229::-;44831:34;44827:1;44819:6;44815:14;44808:58;44900:12;44895:2;44887:6;44883:15;44876:37;44691:229;:::o;44926:228::-;45066:34;45062:1;45054:6;45050:14;45043:58;45135:11;45130:2;45122:6;45118:15;45111:36;44926:228;:::o;45160:182::-;45300:34;45296:1;45288:6;45284:14;45277:58;45160:182;:::o;45348:181::-;45488:33;45484:1;45476:6;45472:14;45465:57;45348:181;:::o;45535:231::-;45675:34;45671:1;45663:6;45659:14;45652:58;45744:14;45739:2;45731:6;45727:15;45720:39;45535:231;:::o;45772:182::-;45912:34;45908:1;45900:6;45896:14;45889:58;45772:182;:::o;45960:228::-;46100:34;46096:1;46088:6;46084:14;46077:58;46169:11;46164:2;46156:6;46152:15;46145:36;45960:228;:::o;46194:234::-;46334:34;46330:1;46322:6;46318:14;46311:58;46403:17;46398:2;46390:6;46386:15;46379:42;46194:234;:::o;46434:221::-;46574:34;46570:1;46562:6;46558:14;46551:58;46643:4;46638:2;46630:6;46626:15;46619:29;46434:221;:::o;46661:220::-;46801:34;46797:1;46789:6;46785:14;46778:58;46870:3;46865:2;46857:6;46853:15;46846:28;46661:220;:::o;46887:::-;47027:34;47023:1;47015:6;47011:14;47004:58;47096:3;47091:2;47083:6;47079:15;47072:28;46887:220;:::o;47113:236::-;47253:34;47249:1;47241:6;47237:14;47230:58;47322:19;47317:2;47309:6;47305:15;47298:44;47113:236;:::o;47355:225::-;47495:34;47491:1;47483:6;47479:14;47472:58;47564:8;47559:2;47551:6;47547:15;47540:33;47355:225;:::o;47586:122::-;47659:24;47677:5;47659:24;:::i;:::-;47652:5;47649:35;47639:63;;47698:1;47695;47688:12;47639:63;47586:122;:::o;47714:116::-;47784:21;47799:5;47784:21;:::i;:::-;47777:5;47774:32;47764:60;;47820:1;47817;47810:12;47764:60;47714:116;:::o;47836:120::-;47908:23;47925:5;47908:23;:::i;:::-;47901:5;47898:34;47888:62;;47946:1;47943;47936:12;47888:62;47836:120;:::o;47962:122::-;48035:24;48053:5;48035:24;:::i;:::-;48028:5;48025:35;48015:63;;48074:1;48071;48064:12;48015:63;47962:122;:::o

Swarm Source

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