ETH Price: $3,306.10 (-0.03%)
 

Overview

Max Total Supply

1 SOD

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 SOD
0xAf0F84F09060ECF8E70ee9B31a5bee0061901412
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:
SidesOfDark

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-30
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-26
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


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


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


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


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



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


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

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


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


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

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


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


contract SidesOfDark is ERC721Enumerable, Ownable {
    using Strings for uint;
    string public baseURI;
    string public baseExtension = ".json";
    uint public mintPrice = 666e15; // 0.666 ETH
    uint public maxSupply = 666;
    uint public maxBuyAmt = 5;
    bool public isMintable = true;
    bool private lastIsMinted = false;

    modifier checkLastIsMinted(uint _amt) {
        if (lastIsMinted){
            require(totalSupply() + _amt <= maxSupply, "Not allowed to mint more than maxSupply");
        } else {
            require(totalSupply() + _amt <= maxSupply - 1, "Not allowed to mint more than maxSupply");
        }
        _;
    }

    event minted(address _user, uint _amt, uint _value);
    event baseURIset(string _newVal);
    event mintPriceSet(uint _newVal);
    event baseExtentionSet(string _newVal);
    event mintableStatusSet(bool _newVal);
    event withdrawn(uint _val);
    event lastMinted(bool _val);

    constructor (string memory _name, string memory _symbol, string memory _tokeBaseURI) ERC721(_name, _symbol) {
        setBaseURI(_tokeBaseURI);
        _safeMint(owner(), totalSupply()+1);
    }

    function mint(uint _amt) public payable checkLastIsMinted(_amt) {
        require(_amt <= maxBuyAmt, "Not possible to mint more than maxBuyAmt");
        require(_amt + balanceOf(msg.sender) <= maxBuyAmt, "Not possible to mint more than maxBuyAmt in total");
        require(msg.value >= mintPrice * _amt , "Value is less than listing price");
        require(isMintable, "Minting new NFT is not avilable now");

        if (!lastIsMinted) {
            for (uint i = 0; i < _amt; i++) {
                _safeMint(msg.sender, totalSupply()+1);
            }
        } else {
            for (uint i = 0; i < _amt; i++) {
                _safeMint(msg.sender, totalSupply()-1+1);
            }
        }
        emit minted(msg.sender, _amt, msg.value);
    }

    /*
    ** Override functions
    */

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

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

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

    /*
    ** Helper functions (public)
    */    

    function walletOfOwner(address _user) public view returns(uint[] memory) {
        uint[] memory tokens = new uint[](balanceOf(_user));
        for (uint i = 0; i < balanceOf(_user); i++){
            tokens[i] = tokenOfOwnerByIndex(_user, i);
        }
        return tokens;
    }

    /*
    ** Helper functions (owner)
    */

    function mintByArtist(uint _amt) external onlyOwner checkLastIsMinted(_amt) {
        require(totalSupply() + _amt <= maxSupply, "Not allowed to mint more than maxSupply");
        if (!lastIsMinted) {
            for (uint i = 0; i < _amt; i++) {
                _safeMint(msg.sender, totalSupply()+1);
            }
        } else {
            for (uint i = 0; i < _amt; i++) {
                _safeMint(msg.sender, totalSupply()-1+1);
            }
        }
    }

    function setBaseURI(string memory _newVal) public onlyOwner {
        baseURI = _newVal;
        emit baseURIset(_newVal);
    }

    function setMintPrice(uint _newVal) external onlyOwner {
        mintPrice = _newVal;
        emit mintPriceSet(_newVal);
    }

    function setBaseExtention(string memory _newVal) external onlyOwner {
        baseExtension = _newVal;
        emit baseExtentionSet(_newVal);
    }

    function setMintableStatus(bool _newVal) external onlyOwner {
        isMintable = _newVal;
        emit mintableStatusSet(_newVal);
    }

    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
        emit withdrawn(address(this).balance);
    }

    function ownerLast() external onlyOwner {
        require(!_exists(maxSupply), "NFT has already been minted");
        _safeMint(owner(), maxSupply);
        lastIsMinted = true;
        emit lastMinted(lastIsMinted);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_tokeBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"string","name":"_newVal","type":"string"}],"name":"baseExtentionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_newVal","type":"string"}],"name":"baseURIset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_val","type":"bool"}],"name":"lastMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newVal","type":"uint256"}],"name":"mintPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_newVal","type":"bool"}],"name":"mintableStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_val","type":"uint256"}],"name":"withdrawn","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"mintByArtist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerLast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newVal","type":"string"}],"name":"setBaseExtention","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newVal","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newVal","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newVal","type":"bool"}],"name":"setMintableStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000d51565b5067093e1b78ac690000600d5561029a600e556005600f556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000ac57600080fd5b506040516200612e3803806200612e8339818101604052810190620000d2919062000ec8565b82828160009080519060200190620000ec92919062000d51565b5080600190805190602001906200010592919062000d51565b505050620001286200011c6200018060201b60201c565b6200018860201b60201c565b62000139816200024e60201b60201c565b620001776200014d6200033260201b60201c565b60016200015f6200035c60201b60201c565b6200016b9190620012a1565b6200036960201b60201c565b50505062001688565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025e6200018060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002846200033260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d490620011e8565b60405180910390fd5b80600b9080519060200190620002f592919062000d51565b507f69683d1ec09b45a164fbd90f4d9bdc1fd1130f1928b5d743ba11b0ea53d4e20a816040516200032791906200113c565b60405180910390a150565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6200038b8282604051806020016040528060008152506200038f60201b60201c565b5050565b620003a18383620003fd60201b60201c565b620003b66000848484620005e360201b60201c565b620003f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ef9062001160565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046790620011c6565b60405180910390fd5b62000481816200079d60201b60201c565b15620004c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004bb9062001182565b60405180910390fd5b620004d8600083836200080960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200052a9190620012a1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006118473ffffffffffffffffffffffffffffffffffffffff166200095060201b62001f981760201c565b1562000790578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006436200018060201b60201c565b8786866040518563ffffffff1660e01b8152600401620006679493929190620010e8565b602060405180830381600087803b1580156200068257600080fd5b505af1925050508015620006b657506040513d601f19601f82011682018060405250810190620006b3919062000e96565b60015b6200073f573d8060008114620006e9576040519150601f19603f3d011682016040523d82523d6000602084013e620006ee565b606091505b5060008151141562000737576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072e9062001160565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000795565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008218383836200096360201b62001fab1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200086e5762000868816200096860201b60201c565b620008b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008b557620008b48382620009b160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200090357620008fd8162000b2e60201b60201c565b6200094b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200094a5762000949828262000c0a60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009cb8462000c9660201b620013311760201c565b620009d79190620012fe565b905060006007600084815260200190815260200160002054905081811462000abd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b449190620012fe565b905060006009600084815260200190815260200160002054905060006008838154811062000b775762000b76620014d2565b5b90600052602060002001549050806008838154811062000b9c5762000b9b620014d2565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bee5762000bed620014a3565b5b6001900381819060005260206000200160009055905550505050565b600062000c228362000c9660201b620013311760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0190620011a4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d5f90620013d9565b90600052602060002090601f01602090048101928262000d83576000855562000dcf565b82601f1062000d9e57805160ff191683800117855562000dcf565b8280016001018555821562000dcf579182015b8281111562000dce57825182559160200191906001019062000db1565b5b50905062000dde919062000de2565b5090565b5b8082111562000dfd57600081600090555060010162000de3565b5090565b600062000e1862000e128462001233565b6200120a565b90508281526020810184848401111562000e375762000e3662001535565b5b62000e44848285620013a3565b509392505050565b60008151905062000e5d816200166e565b92915050565b600082601f83011262000e7b5762000e7a62001530565b5b815162000e8d84826020860162000e01565b91505092915050565b60006020828403121562000eaf5762000eae6200153f565b5b600062000ebf8482850162000e4c565b91505092915050565b60008060006060848603121562000ee45762000ee36200153f565b5b600084015167ffffffffffffffff81111562000f055762000f046200153a565b5b62000f138682870162000e63565b935050602084015167ffffffffffffffff81111562000f375762000f366200153a565b5b62000f458682870162000e63565b925050604084015167ffffffffffffffff81111562000f695762000f686200153a565b5b62000f778682870162000e63565b9150509250925092565b62000f8c8162001339565b82525050565b600062000f9f8262001269565b62000fab81856200127f565b935062000fbd818560208601620013a3565b62000fc88162001544565b840191505092915050565b600062000fe08262001274565b62000fec818562001290565b935062000ffe818560208601620013a3565b620010098162001544565b840191505092915050565b60006200102360328362001290565b9150620010308262001555565b604082019050919050565b60006200104a601c8362001290565b91506200105782620015a4565b602082019050919050565b600062001071602a8362001290565b91506200107e82620015cd565b604082019050919050565b60006200109860208362001290565b9150620010a5826200161c565b602082019050919050565b6000620010bf60208362001290565b9150620010cc8262001645565b602082019050919050565b620010e28162001399565b82525050565b6000608082019050620010ff600083018762000f81565b6200110e602083018662000f81565b6200111d6040830185620010d7565b818103606083015262001131818462000f92565b905095945050505050565b6000602082019050818103600083015262001158818462000fd3565b905092915050565b600060208201905081810360008301526200117b8162001014565b9050919050565b600060208201905081810360008301526200119d816200103b565b9050919050565b60006020820190508181036000830152620011bf8162001062565b9050919050565b60006020820190508181036000830152620011e18162001089565b9050919050565b600060208201905081810360008301526200120381620010b0565b9050919050565b60006200121662001229565b90506200122482826200140f565b919050565b6000604051905090565b600067ffffffffffffffff82111562001251576200125062001501565b5b6200125c8262001544565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012ae8262001399565b9150620012bb8362001399565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012f357620012f262001445565b5b828201905092915050565b60006200130b8262001399565b9150620013188362001399565b9250828210156200132e576200132d62001445565b5b828203905092915050565b6000620013468262001379565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013c3578082015181840152602081019050620013a6565b83811115620013d3576000848401525b50505050565b60006002820490506001821680620013f257607f821691505b6020821081141562001409576200140862001474565b5b50919050565b6200141a8262001544565b810181811067ffffffffffffffff821117156200143c576200143b62001501565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62001679816200134d565b81146200168557600080fd5b50565b614a9680620016986000396000f3fe6080604052600436106101f95760003560e01c80636c0360eb1161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106fe578063d5abeb011461073b578063e985e9c514610766578063f2fde38b146107a3578063f4a0a528146107cc576101f9565b8063a22cb46514610656578063ac1b129d1461067f578063b88d4fde146106aa578063c6682862146106d3576101f9565b80638dcffd35116100dc5780638dcffd35146105cf57806395d89b41146105f85780639e89059214610623578063a0712d681461063a576101f9565b80636c0360eb1461052557806370a0823114610550578063715018a61461058d5780638da5cb5b146105a4576101f9565b806342842e0e116101905780634f6ccce71161015f5780634f6ccce71461042e57806355f804b31461046b578063562ccd2d146104945780636352211e146104bd5780636817c76c146104fa576101f9565b806342842e0e14610374578063438b63001461039d57806346b45af7146103da5780634987b3bc14610405576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633ccfd60b1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061344c565b6107f5565b6040516102329190613b29565b60405180910390f35b34801561024757600080fd5b5061025061086f565b60405161025d9190613b44565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906134ef565b610901565b60405161029a9190613a69565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906133df565b610986565b005b3480156102d857600080fd5b506102e1610a9e565b6040516102ee9190613e66565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906132c9565b610aab565b005b34801561032c57600080fd5b50610347600480360381019061034291906133df565b610b0b565b6040516103549190613e66565b60405180910390f35b34801561036957600080fd5b50610372610bb0565b005b34801561038057600080fd5b5061039b600480360381019061039691906132c9565b610cb3565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061325c565b610cd3565b6040516103d19190613b07565b60405180910390f35b3480156103e657600080fd5b506103ef610d83565b6040516103fc9190613b29565b60405180910390f35b34801561041157600080fd5b5061042c600480360381019061042791906134a6565b610d96565b005b34801561043a57600080fd5b50610455600480360381019061045091906134ef565b610e63565b6040516104629190613e66565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d91906134a6565b610ed4565b005b3480156104a057600080fd5b506104bb60048036038101906104b691906134ef565b610fa1565b005b3480156104c957600080fd5b506104e460048036038101906104df91906134ef565b6111eb565b6040516104f19190613a69565b60405180910390f35b34801561050657600080fd5b5061050f61129d565b60405161051c9190613e66565b60405180910390f35b34801561053157600080fd5b5061053a6112a3565b6040516105479190613b44565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061325c565b611331565b6040516105849190613e66565b60405180910390f35b34801561059957600080fd5b506105a26113e9565b005b3480156105b057600080fd5b506105b9611471565b6040516105c69190613a69565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f1919061341f565b61149b565b005b34801561060457600080fd5b5061060d61156b565b60405161061a9190613b44565b60405180910390f35b34801561062f57600080fd5b506106386115fd565b005b610654600480360381019061064f91906134ef565b61173a565b005b34801561066257600080fd5b5061067d6004803603810190610678919061339f565b611a28565b005b34801561068b57600080fd5b50610694611ba9565b6040516106a19190613e66565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc919061331c565b611baf565b005b3480156106df57600080fd5b506106e8611c11565b6040516106f59190613b44565b60405180910390f35b34801561070a57600080fd5b50610725600480360381019061072091906134ef565b611c9f565b6040516107329190613b44565b60405180910390f35b34801561074757600080fd5b50610750611d49565b60405161075d9190613e66565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613289565b611d4f565b60405161079a9190613b29565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c5919061325c565b611de3565b005b3480156107d857600080fd5b506107f360048036038101906107ee91906134ef565b611edb565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610868575061086782611fb0565b5b9050919050565b60606000805461087e90614164565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90614164565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061090c82612092565b61094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613d26565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610991826111eb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990613dc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a216120fe565b73ffffffffffffffffffffffffffffffffffffffff161480610a505750610a4f81610a4a6120fe565b611d4f565b5b610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613ca6565b60405180910390fd5b610a998383612106565b505050565b6000600880549050905090565b610abc610ab66120fe565b826121bf565b610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290613e26565b60405180910390fd5b610b0683838361229d565b505050565b6000610b1683611331565b8210610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613b86565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bb86120fe565b73ffffffffffffffffffffffffffffffffffffffff16610bd6611471565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613d46565b60405180910390fd5b610c34611471565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c79573d6000803e3d6000fd5b507fe6b43d01275ea8d9d25bfaa418ad4c2cba4924a59bae1903979130e0a2bbf19247604051610ca99190613e66565b60405180910390a1565b610cce83838360405180602001604052806000815250611baf565b505050565b60606000610ce083611331565b67ffffffffffffffff811115610cf957610cf861432c565b5b604051908082528060200260200182016040528015610d275781602001602082028036833780820191505090505b50905060005b610d3684611331565b811015610d7957610d478482610b0b565b828281518110610d5a57610d596142fd565b5b6020026020010181815250508080610d71906141c7565b915050610d2d565b5080915050919050565b601060009054906101000a900460ff1681565b610d9e6120fe565b73ffffffffffffffffffffffffffffffffffffffff16610dbc611471565b73ffffffffffffffffffffffffffffffffffffffff1614610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990613d46565b60405180910390fd5b80600c9080519060200190610e28929190613070565b507f336e990a2f68a89fd1ca04a685c53ddada4ca0af79ebc53579467f2127ffab9581604051610e589190613b44565b60405180910390a150565b6000610e6d610a9e565b8210610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613e46565b60405180910390fd5b60088281548110610ec257610ec16142fd565b5b90600052602060002001549050919050565b610edc6120fe565b73ffffffffffffffffffffffffffffffffffffffff16610efa611471565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613d46565b60405180910390fd5b80600b9080519060200190610f66929190613070565b507f69683d1ec09b45a164fbd90f4d9bdc1fd1130f1928b5d743ba11b0ea53d4e20a81604051610f969190613b44565b60405180910390a150565b610fa96120fe565b73ffffffffffffffffffffffffffffffffffffffff16610fc7611471565b73ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613d46565b60405180910390fd5b80601060019054906101000a900460ff161561108f57600e548161103f610a9e565b6110499190613f99565b111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190613e06565b60405180910390fd5b6110f3565b6001600e5461109e919061407a565b816110a7610a9e565b6110b19190613f99565b11156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613e06565b60405180910390fd5b5b600e54826110ff610a9e565b6111099190613f99565b111561114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190613e06565b60405180910390fd5b601060019054906101000a900460ff1661119f5760005b8281101561119957611186336001611177610a9e565b6111819190613f99565b6124f9565b8080611191906141c7565b915050611161565b506111e7565b60005b828110156111e5576111d2336001806111b9610a9e565b6111c3919061407a565b6111cd9190613f99565b6124f9565b80806111dd906141c7565b9150506111a2565b505b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613ce6565b60405180910390fd5b80915050919050565b600d5481565b600b80546112b090614164565b80601f01602080910402602001604051908101604052809291908181526020018280546112dc90614164565b80156113295780601f106112fe57610100808354040283529160200191611329565b820191906000526020600020905b81548152906001019060200180831161130c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613cc6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f16120fe565b73ffffffffffffffffffffffffffffffffffffffff1661140f611471565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613d46565b60405180910390fd5b61146f6000612517565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114a36120fe565b73ffffffffffffffffffffffffffffffffffffffff166114c1611471565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613d46565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f95df26ffb1e030a06466efc3eba3f6ee2c687b4e14a7ec40c26e4ab115c3c034816040516115609190613b29565b60405180910390a150565b60606001805461157a90614164565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614164565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b5050505050905090565b6116056120fe565b73ffffffffffffffffffffffffffffffffffffffff16611623611471565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090613d46565b60405180910390fd5b611684600e54612092565b156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613c66565b60405180910390fd5b6116d76116cf611471565b600e546124f9565b6001601060016101000a81548160ff0219169083151502179055507f9a8c0a7a222d438af70961aeecce122dc2a3a3fe5bb081336f29b5d672535c8b601060019054906101000a900460ff166040516117309190613b29565b60405180910390a1565b80601060019054906101000a900460ff16156117ac57600e548161175c610a9e565b6117669190613f99565b11156117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613e06565b60405180910390fd5b611810565b6001600e546117bb919061407a565b816117c4610a9e565b6117ce9190613f99565b111561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613e06565b60405180910390fd5b5b600f54821115611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613c86565b60405180910390fd5b600f5461186133611331565b8361186c9190613f99565b11156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613b66565b60405180910390fd5b81600d546118bb9190614020565b3410156118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613da6565b60405180910390fd5b601060009054906101000a900460ff1661194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613de6565b60405180910390fd5b601060019054906101000a900460ff166119a15760005b8281101561199b57611988336001611979610a9e565b6119839190613f99565b6124f9565b8080611993906141c7565b915050611963565b506119e9565b60005b828110156119e7576119d4336001806119bb610a9e565b6119c5919061407a565b6119cf9190613f99565b6124f9565b80806119df906141c7565b9150506119a4565b505b7fead94eb56e46b064207039af2a77f19bbfdcdf7cb4481d53d8f8c75dfcb59fc4338334604051611a1c93929190613ad0565b60405180910390a15050565b611a306120fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590613c26565b60405180910390fd5b8060056000611aab6120fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b586120fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b9d9190613b29565b60405180910390a35050565b600f5481565b611bc0611bba6120fe565b836121bf565b611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613e26565b60405180910390fd5b611c0b848484846125dd565b50505050565b600c8054611c1e90614164565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4a90614164565b8015611c975780601f10611c6c57610100808354040283529160200191611c97565b820191906000526020600020905b815481529060010190602001808311611c7a57829003601f168201915b505050505081565b6060611caa82612092565b611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090613d86565b60405180910390fd5b6000611cf3612639565b90506000815111611d135760405180602001604052806000815250611d41565b80611d1d846126cb565b600c604051602001611d3193929190613a38565b6040516020818303038152906040525b915050919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611deb6120fe565b73ffffffffffffffffffffffffffffffffffffffff16611e09611471565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613bc6565b60405180910390fd5b611ed881612517565b50565b611ee36120fe565b73ffffffffffffffffffffffffffffffffffffffff16611f01611471565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e90613d46565b60405180910390fd5b80600d819055507f98609fe056b3e7e377501445e050cf913b49e573199de13b63467d56dd53fcd581604051611f8d9190613e66565b60405180910390a150565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061207b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061208b575061208a8261282c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612179836111eb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121ca82612092565b612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090613c46565b60405180910390fd5b6000612214836111eb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061228357508373ffffffffffffffffffffffffffffffffffffffff1661226b84610901565b73ffffffffffffffffffffffffffffffffffffffff16145b8061229457506122938185611d4f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122bd826111eb565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613d66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613c06565b60405180910390fd5b61238e838383612896565b612399600082612106565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e9919061407a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124409190613f99565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125138282604051806020016040528060008152506129aa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125e884848461229d565b6125f484848484612a05565b612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90613ba6565b60405180910390fd5b50505050565b6060600b805461264890614164565b80601f016020809104026020016040519081016040528092919081815260200182805461267490614164565b80156126c15780601f10612696576101008083540402835291602001916126c1565b820191906000526020600020905b8154815290600101906020018083116126a457829003601f168201915b5050505050905090565b60606000821415612713576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612827565b600082905060005b6000821461274557808061272e906141c7565b915050600a8261273e9190613fef565b915061271b565b60008167ffffffffffffffff8111156127615761276061432c565b5b6040519080825280601f01601f1916602001820160405280156127935781602001600182028036833780820191505090505b5090505b60008514612820576001826127ac919061407a565b9150600a856127bb9190614210565b60306127c79190613f99565b60f81b8183815181106127dd576127dc6142fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128199190613fef565b9450612797565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128a1838383611fab565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e4576128df81612b9c565b612923565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612922576129218382612be5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129665761296181612d52565b6129a5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129a4576129a38282612e23565b5b5b505050565b6129b48383612ea2565b6129c16000848484612a05565b612a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f790613ba6565b60405180910390fd5b505050565b6000612a268473ffffffffffffffffffffffffffffffffffffffff16611f98565b15612b8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a4f6120fe565b8786866040518563ffffffff1660e01b8152600401612a719493929190613a84565b602060405180830381600087803b158015612a8b57600080fd5b505af1925050508015612abc57506040513d601f19601f82011682018060405250810190612ab99190613479565b60015b612b3f573d8060008114612aec576040519150601f19603f3d011682016040523d82523d6000602084013e612af1565b606091505b50600081511415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90613ba6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b94565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bf284611331565b612bfc919061407a565b9050600060076000848152602001908152602001600020549050818114612ce1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d66919061407a565b9050600060096000848152602001908152602001600020549050600060088381548110612d9657612d956142fd565b5b906000526020600020015490508060088381548110612db857612db76142fd565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e0757612e066142ce565b5b6001900381819060005260206000200160009055905550505050565b6000612e2e83611331565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0990613d06565b60405180910390fd5b612f1b81612092565b15612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290613be6565b60405180910390fd5b612f6760008383612896565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fb79190613f99565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461307c90614164565b90600052602060002090601f01602090048101928261309e57600085556130e5565b82601f106130b757805160ff19168380011785556130e5565b828001600101855582156130e5579182015b828111156130e45782518255916020019190600101906130c9565b5b5090506130f291906130f6565b5090565b5b8082111561310f5760008160009055506001016130f7565b5090565b600061312661312184613ea6565b613e81565b90508281526020810184848401111561314257613141614360565b5b61314d848285614122565b509392505050565b600061316861316384613ed7565b613e81565b90508281526020810184848401111561318457613183614360565b5b61318f848285614122565b509392505050565b6000813590506131a681614a04565b92915050565b6000813590506131bb81614a1b565b92915050565b6000813590506131d081614a32565b92915050565b6000815190506131e581614a32565b92915050565b600082601f830112613200576131ff61435b565b5b8135613210848260208601613113565b91505092915050565b600082601f83011261322e5761322d61435b565b5b813561323e848260208601613155565b91505092915050565b60008135905061325681614a49565b92915050565b6000602082840312156132725761327161436a565b5b600061328084828501613197565b91505092915050565b600080604083850312156132a05761329f61436a565b5b60006132ae85828601613197565b92505060206132bf85828601613197565b9150509250929050565b6000806000606084860312156132e2576132e161436a565b5b60006132f086828701613197565b935050602061330186828701613197565b925050604061331286828701613247565b9150509250925092565b600080600080608085870312156133365761333561436a565b5b600061334487828801613197565b945050602061335587828801613197565b935050604061336687828801613247565b925050606085013567ffffffffffffffff81111561338757613386614365565b5b613393878288016131eb565b91505092959194509250565b600080604083850312156133b6576133b561436a565b5b60006133c485828601613197565b92505060206133d5858286016131ac565b9150509250929050565b600080604083850312156133f6576133f561436a565b5b600061340485828601613197565b925050602061341585828601613247565b9150509250929050565b6000602082840312156134355761343461436a565b5b6000613443848285016131ac565b91505092915050565b6000602082840312156134625761346161436a565b5b6000613470848285016131c1565b91505092915050565b60006020828403121561348f5761348e61436a565b5b600061349d848285016131d6565b91505092915050565b6000602082840312156134bc576134bb61436a565b5b600082013567ffffffffffffffff8111156134da576134d9614365565b5b6134e684828501613219565b91505092915050565b6000602082840312156135055761350461436a565b5b600061351384828501613247565b91505092915050565b60006135288383613a1a565b60208301905092915050565b61353d816140ae565b82525050565b600061354e82613f2d565b6135588185613f5b565b935061356383613f08565b8060005b8381101561359457815161357b888261351c565b975061358683613f4e565b925050600181019050613567565b5085935050505092915050565b6135aa816140c0565b82525050565b60006135bb82613f38565b6135c58185613f6c565b93506135d5818560208601614131565b6135de8161436f565b840191505092915050565b60006135f482613f43565b6135fe8185613f7d565b935061360e818560208601614131565b6136178161436f565b840191505092915050565b600061362d82613f43565b6136378185613f8e565b9350613647818560208601614131565b80840191505092915050565b6000815461366081614164565b61366a8186613f8e565b945060018216600081146136855760018114613696576136c9565b60ff198316865281860193506136c9565b61369f85613f18565b60005b838110156136c1578154818901526001820191506020810190506136a2565b838801955050505b50505092915050565b60006136df603183613f7d565b91506136ea82614380565b604082019050919050565b6000613702602b83613f7d565b915061370d826143cf565b604082019050919050565b6000613725603283613f7d565b91506137308261441e565b604082019050919050565b6000613748602683613f7d565b91506137538261446d565b604082019050919050565b600061376b601c83613f7d565b9150613776826144bc565b602082019050919050565b600061378e602483613f7d565b9150613799826144e5565b604082019050919050565b60006137b1601983613f7d565b91506137bc82614534565b602082019050919050565b60006137d4602c83613f7d565b91506137df8261455d565b604082019050919050565b60006137f7601b83613f7d565b9150613802826145ac565b602082019050919050565b600061381a602883613f7d565b9150613825826145d5565b604082019050919050565b600061383d603883613f7d565b915061384882614624565b604082019050919050565b6000613860602a83613f7d565b915061386b82614673565b604082019050919050565b6000613883602983613f7d565b915061388e826146c2565b604082019050919050565b60006138a6602083613f7d565b91506138b182614711565b602082019050919050565b60006138c9602c83613f7d565b91506138d48261473a565b604082019050919050565b60006138ec602083613f7d565b91506138f782614789565b602082019050919050565b600061390f602983613f7d565b915061391a826147b2565b604082019050919050565b6000613932602f83613f7d565b915061393d82614801565b604082019050919050565b6000613955602083613f7d565b915061396082614850565b602082019050919050565b6000613978602183613f7d565b915061398382614879565b604082019050919050565b600061399b602383613f7d565b91506139a6826148c8565b604082019050919050565b60006139be602783613f7d565b91506139c982614917565b604082019050919050565b60006139e1603183613f7d565b91506139ec82614966565b604082019050919050565b6000613a04602c83613f7d565b9150613a0f826149b5565b604082019050919050565b613a2381614118565b82525050565b613a3281614118565b82525050565b6000613a448286613622565b9150613a508285613622565b9150613a5c8284613653565b9150819050949350505050565b6000602082019050613a7e6000830184613534565b92915050565b6000608082019050613a996000830187613534565b613aa66020830186613534565b613ab36040830185613a29565b8181036060830152613ac581846135b0565b905095945050505050565b6000606082019050613ae56000830186613534565b613af26020830185613a29565b613aff6040830184613a29565b949350505050565b60006020820190508181036000830152613b218184613543565b905092915050565b6000602082019050613b3e60008301846135a1565b92915050565b60006020820190508181036000830152613b5e81846135e9565b905092915050565b60006020820190508181036000830152613b7f816136d2565b9050919050565b60006020820190508181036000830152613b9f816136f5565b9050919050565b60006020820190508181036000830152613bbf81613718565b9050919050565b60006020820190508181036000830152613bdf8161373b565b9050919050565b60006020820190508181036000830152613bff8161375e565b9050919050565b60006020820190508181036000830152613c1f81613781565b9050919050565b60006020820190508181036000830152613c3f816137a4565b9050919050565b60006020820190508181036000830152613c5f816137c7565b9050919050565b60006020820190508181036000830152613c7f816137ea565b9050919050565b60006020820190508181036000830152613c9f8161380d565b9050919050565b60006020820190508181036000830152613cbf81613830565b9050919050565b60006020820190508181036000830152613cdf81613853565b9050919050565b60006020820190508181036000830152613cff81613876565b9050919050565b60006020820190508181036000830152613d1f81613899565b9050919050565b60006020820190508181036000830152613d3f816138bc565b9050919050565b60006020820190508181036000830152613d5f816138df565b9050919050565b60006020820190508181036000830152613d7f81613902565b9050919050565b60006020820190508181036000830152613d9f81613925565b9050919050565b60006020820190508181036000830152613dbf81613948565b9050919050565b60006020820190508181036000830152613ddf8161396b565b9050919050565b60006020820190508181036000830152613dff8161398e565b9050919050565b60006020820190508181036000830152613e1f816139b1565b9050919050565b60006020820190508181036000830152613e3f816139d4565b9050919050565b60006020820190508181036000830152613e5f816139f7565b9050919050565b6000602082019050613e7b6000830184613a29565b92915050565b6000613e8b613e9c565b9050613e978282614196565b919050565b6000604051905090565b600067ffffffffffffffff821115613ec157613ec061432c565b5b613eca8261436f565b9050602081019050919050565b600067ffffffffffffffff821115613ef257613ef161432c565b5b613efb8261436f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fa482614118565b9150613faf83614118565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe457613fe3614241565b5b828201905092915050565b6000613ffa82614118565b915061400583614118565b92508261401557614014614270565b5b828204905092915050565b600061402b82614118565b915061403683614118565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406f5761406e614241565b5b828202905092915050565b600061408582614118565b915061409083614118565b9250828210156140a3576140a2614241565b5b828203905092915050565b60006140b9826140f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561414f578082015181840152602081019050614134565b8381111561415e576000848401525b50505050565b6000600282049050600182168061417c57607f821691505b602082108114156141905761418f61429f565b5b50919050565b61419f8261436f565b810181811067ffffffffffffffff821117156141be576141bd61432c565b5b80604052505050565b60006141d282614118565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420557614204614241565b5b600182019050919050565b600061421b82614118565b915061422683614118565b92508261423657614235614270565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420706f737369626c6520746f206d696e74206d6f7265207468616e206d60008201527f6178427579416d7420696e20746f74616c000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e46542068617320616c7265616479206265656e206d696e7465640000000000600082015250565b7f4e6f7420706f737369626c6520746f206d696e74206d6f7265207468616e206d60008201527f6178427579416d74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c7565206973206c657373207468616e206c697374696e67207072696365600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6577204e4654206973206e6f74206176696c61626c652060008201527f6e6f770000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e206d6160008201527f78537570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614a0d816140ae565b8114614a1857600080fd5b50565b614a24816140c0565b8114614a2f57600080fd5b50565b614a3b816140cc565b8114614a4657600080fd5b50565b614a5281614118565b8114614a5d57600080fd5b5056fea26469706673582212207b579264abcc54847f18f5f54ef27f01dd57467d44f74ed3495eca7806cac3e864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d5369646573206f66204461726b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534f440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d554565357a414c7a326e536979706f74526456576b517375504844444d4b537a4e504d6552666a65326537692f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80636c0360eb1161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106fe578063d5abeb011461073b578063e985e9c514610766578063f2fde38b146107a3578063f4a0a528146107cc576101f9565b8063a22cb46514610656578063ac1b129d1461067f578063b88d4fde146106aa578063c6682862146106d3576101f9565b80638dcffd35116100dc5780638dcffd35146105cf57806395d89b41146105f85780639e89059214610623578063a0712d681461063a576101f9565b80636c0360eb1461052557806370a0823114610550578063715018a61461058d5780638da5cb5b146105a4576101f9565b806342842e0e116101905780634f6ccce71161015f5780634f6ccce71461042e57806355f804b31461046b578063562ccd2d146104945780636352211e146104bd5780636817c76c146104fa576101f9565b806342842e0e14610374578063438b63001461039d57806346b45af7146103da5780634987b3bc14610405576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633ccfd60b1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061344c565b6107f5565b6040516102329190613b29565b60405180910390f35b34801561024757600080fd5b5061025061086f565b60405161025d9190613b44565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906134ef565b610901565b60405161029a9190613a69565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906133df565b610986565b005b3480156102d857600080fd5b506102e1610a9e565b6040516102ee9190613e66565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906132c9565b610aab565b005b34801561032c57600080fd5b50610347600480360381019061034291906133df565b610b0b565b6040516103549190613e66565b60405180910390f35b34801561036957600080fd5b50610372610bb0565b005b34801561038057600080fd5b5061039b600480360381019061039691906132c9565b610cb3565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061325c565b610cd3565b6040516103d19190613b07565b60405180910390f35b3480156103e657600080fd5b506103ef610d83565b6040516103fc9190613b29565b60405180910390f35b34801561041157600080fd5b5061042c600480360381019061042791906134a6565b610d96565b005b34801561043a57600080fd5b50610455600480360381019061045091906134ef565b610e63565b6040516104629190613e66565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d91906134a6565b610ed4565b005b3480156104a057600080fd5b506104bb60048036038101906104b691906134ef565b610fa1565b005b3480156104c957600080fd5b506104e460048036038101906104df91906134ef565b6111eb565b6040516104f19190613a69565b60405180910390f35b34801561050657600080fd5b5061050f61129d565b60405161051c9190613e66565b60405180910390f35b34801561053157600080fd5b5061053a6112a3565b6040516105479190613b44565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061325c565b611331565b6040516105849190613e66565b60405180910390f35b34801561059957600080fd5b506105a26113e9565b005b3480156105b057600080fd5b506105b9611471565b6040516105c69190613a69565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f1919061341f565b61149b565b005b34801561060457600080fd5b5061060d61156b565b60405161061a9190613b44565b60405180910390f35b34801561062f57600080fd5b506106386115fd565b005b610654600480360381019061064f91906134ef565b61173a565b005b34801561066257600080fd5b5061067d6004803603810190610678919061339f565b611a28565b005b34801561068b57600080fd5b50610694611ba9565b6040516106a19190613e66565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc919061331c565b611baf565b005b3480156106df57600080fd5b506106e8611c11565b6040516106f59190613b44565b60405180910390f35b34801561070a57600080fd5b50610725600480360381019061072091906134ef565b611c9f565b6040516107329190613b44565b60405180910390f35b34801561074757600080fd5b50610750611d49565b60405161075d9190613e66565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613289565b611d4f565b60405161079a9190613b29565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c5919061325c565b611de3565b005b3480156107d857600080fd5b506107f360048036038101906107ee91906134ef565b611edb565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610868575061086782611fb0565b5b9050919050565b60606000805461087e90614164565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90614164565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061090c82612092565b61094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613d26565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610991826111eb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990613dc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a216120fe565b73ffffffffffffffffffffffffffffffffffffffff161480610a505750610a4f81610a4a6120fe565b611d4f565b5b610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613ca6565b60405180910390fd5b610a998383612106565b505050565b6000600880549050905090565b610abc610ab66120fe565b826121bf565b610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290613e26565b60405180910390fd5b610b0683838361229d565b505050565b6000610b1683611331565b8210610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613b86565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bb86120fe565b73ffffffffffffffffffffffffffffffffffffffff16610bd6611471565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613d46565b60405180910390fd5b610c34611471565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c79573d6000803e3d6000fd5b507fe6b43d01275ea8d9d25bfaa418ad4c2cba4924a59bae1903979130e0a2bbf19247604051610ca99190613e66565b60405180910390a1565b610cce83838360405180602001604052806000815250611baf565b505050565b60606000610ce083611331565b67ffffffffffffffff811115610cf957610cf861432c565b5b604051908082528060200260200182016040528015610d275781602001602082028036833780820191505090505b50905060005b610d3684611331565b811015610d7957610d478482610b0b565b828281518110610d5a57610d596142fd565b5b6020026020010181815250508080610d71906141c7565b915050610d2d565b5080915050919050565b601060009054906101000a900460ff1681565b610d9e6120fe565b73ffffffffffffffffffffffffffffffffffffffff16610dbc611471565b73ffffffffffffffffffffffffffffffffffffffff1614610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990613d46565b60405180910390fd5b80600c9080519060200190610e28929190613070565b507f336e990a2f68a89fd1ca04a685c53ddada4ca0af79ebc53579467f2127ffab9581604051610e589190613b44565b60405180910390a150565b6000610e6d610a9e565b8210610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613e46565b60405180910390fd5b60088281548110610ec257610ec16142fd565b5b90600052602060002001549050919050565b610edc6120fe565b73ffffffffffffffffffffffffffffffffffffffff16610efa611471565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613d46565b60405180910390fd5b80600b9080519060200190610f66929190613070565b507f69683d1ec09b45a164fbd90f4d9bdc1fd1130f1928b5d743ba11b0ea53d4e20a81604051610f969190613b44565b60405180910390a150565b610fa96120fe565b73ffffffffffffffffffffffffffffffffffffffff16610fc7611471565b73ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613d46565b60405180910390fd5b80601060019054906101000a900460ff161561108f57600e548161103f610a9e565b6110499190613f99565b111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190613e06565b60405180910390fd5b6110f3565b6001600e5461109e919061407a565b816110a7610a9e565b6110b19190613f99565b11156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613e06565b60405180910390fd5b5b600e54826110ff610a9e565b6111099190613f99565b111561114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190613e06565b60405180910390fd5b601060019054906101000a900460ff1661119f5760005b8281101561119957611186336001611177610a9e565b6111819190613f99565b6124f9565b8080611191906141c7565b915050611161565b506111e7565b60005b828110156111e5576111d2336001806111b9610a9e565b6111c3919061407a565b6111cd9190613f99565b6124f9565b80806111dd906141c7565b9150506111a2565b505b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613ce6565b60405180910390fd5b80915050919050565b600d5481565b600b80546112b090614164565b80601f01602080910402602001604051908101604052809291908181526020018280546112dc90614164565b80156113295780601f106112fe57610100808354040283529160200191611329565b820191906000526020600020905b81548152906001019060200180831161130c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613cc6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f16120fe565b73ffffffffffffffffffffffffffffffffffffffff1661140f611471565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613d46565b60405180910390fd5b61146f6000612517565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114a36120fe565b73ffffffffffffffffffffffffffffffffffffffff166114c1611471565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613d46565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f95df26ffb1e030a06466efc3eba3f6ee2c687b4e14a7ec40c26e4ab115c3c034816040516115609190613b29565b60405180910390a150565b60606001805461157a90614164565b80601f01602080910402602001604051908101604052809291908181526020018280546115a690614164565b80156115f35780601f106115c8576101008083540402835291602001916115f3565b820191906000526020600020905b8154815290600101906020018083116115d657829003601f168201915b5050505050905090565b6116056120fe565b73ffffffffffffffffffffffffffffffffffffffff16611623611471565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090613d46565b60405180910390fd5b611684600e54612092565b156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613c66565b60405180910390fd5b6116d76116cf611471565b600e546124f9565b6001601060016101000a81548160ff0219169083151502179055507f9a8c0a7a222d438af70961aeecce122dc2a3a3fe5bb081336f29b5d672535c8b601060019054906101000a900460ff166040516117309190613b29565b60405180910390a1565b80601060019054906101000a900460ff16156117ac57600e548161175c610a9e565b6117669190613f99565b11156117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613e06565b60405180910390fd5b611810565b6001600e546117bb919061407a565b816117c4610a9e565b6117ce9190613f99565b111561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613e06565b60405180910390fd5b5b600f54821115611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90613c86565b60405180910390fd5b600f5461186133611331565b8361186c9190613f99565b11156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613b66565b60405180910390fd5b81600d546118bb9190614020565b3410156118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613da6565b60405180910390fd5b601060009054906101000a900460ff1661194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613de6565b60405180910390fd5b601060019054906101000a900460ff166119a15760005b8281101561199b57611988336001611979610a9e565b6119839190613f99565b6124f9565b8080611993906141c7565b915050611963565b506119e9565b60005b828110156119e7576119d4336001806119bb610a9e565b6119c5919061407a565b6119cf9190613f99565b6124f9565b80806119df906141c7565b9150506119a4565b505b7fead94eb56e46b064207039af2a77f19bbfdcdf7cb4481d53d8f8c75dfcb59fc4338334604051611a1c93929190613ad0565b60405180910390a15050565b611a306120fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590613c26565b60405180910390fd5b8060056000611aab6120fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b586120fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b9d9190613b29565b60405180910390a35050565b600f5481565b611bc0611bba6120fe565b836121bf565b611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613e26565b60405180910390fd5b611c0b848484846125dd565b50505050565b600c8054611c1e90614164565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4a90614164565b8015611c975780601f10611c6c57610100808354040283529160200191611c97565b820191906000526020600020905b815481529060010190602001808311611c7a57829003601f168201915b505050505081565b6060611caa82612092565b611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090613d86565b60405180910390fd5b6000611cf3612639565b90506000815111611d135760405180602001604052806000815250611d41565b80611d1d846126cb565b600c604051602001611d3193929190613a38565b6040516020818303038152906040525b915050919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611deb6120fe565b73ffffffffffffffffffffffffffffffffffffffff16611e09611471565b73ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613bc6565b60405180910390fd5b611ed881612517565b50565b611ee36120fe565b73ffffffffffffffffffffffffffffffffffffffff16611f01611471565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e90613d46565b60405180910390fd5b80600d819055507f98609fe056b3e7e377501445e050cf913b49e573199de13b63467d56dd53fcd581604051611f8d9190613e66565b60405180910390a150565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061207b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061208b575061208a8261282c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612179836111eb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121ca82612092565b612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090613c46565b60405180910390fd5b6000612214836111eb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061228357508373ffffffffffffffffffffffffffffffffffffffff1661226b84610901565b73ffffffffffffffffffffffffffffffffffffffff16145b8061229457506122938185611d4f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122bd826111eb565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613d66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613c06565b60405180910390fd5b61238e838383612896565b612399600082612106565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e9919061407a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124409190613f99565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6125138282604051806020016040528060008152506129aa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125e884848461229d565b6125f484848484612a05565b612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90613ba6565b60405180910390fd5b50505050565b6060600b805461264890614164565b80601f016020809104026020016040519081016040528092919081815260200182805461267490614164565b80156126c15780601f10612696576101008083540402835291602001916126c1565b820191906000526020600020905b8154815290600101906020018083116126a457829003601f168201915b5050505050905090565b60606000821415612713576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612827565b600082905060005b6000821461274557808061272e906141c7565b915050600a8261273e9190613fef565b915061271b565b60008167ffffffffffffffff8111156127615761276061432c565b5b6040519080825280601f01601f1916602001820160405280156127935781602001600182028036833780820191505090505b5090505b60008514612820576001826127ac919061407a565b9150600a856127bb9190614210565b60306127c79190613f99565b60f81b8183815181106127dd576127dc6142fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128199190613fef565b9450612797565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128a1838383611fab565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e4576128df81612b9c565b612923565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612922576129218382612be5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129665761296181612d52565b6129a5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129a4576129a38282612e23565b5b5b505050565b6129b48383612ea2565b6129c16000848484612a05565b612a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f790613ba6565b60405180910390fd5b505050565b6000612a268473ffffffffffffffffffffffffffffffffffffffff16611f98565b15612b8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a4f6120fe565b8786866040518563ffffffff1660e01b8152600401612a719493929190613a84565b602060405180830381600087803b158015612a8b57600080fd5b505af1925050508015612abc57506040513d601f19601f82011682018060405250810190612ab99190613479565b60015b612b3f573d8060008114612aec576040519150601f19603f3d011682016040523d82523d6000602084013e612af1565b606091505b50600081511415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90613ba6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b94565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bf284611331565b612bfc919061407a565b9050600060076000848152602001908152602001600020549050818114612ce1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d66919061407a565b9050600060096000848152602001908152602001600020549050600060088381548110612d9657612d956142fd565b5b906000526020600020015490508060088381548110612db857612db76142fd565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e0757612e066142ce565b5b6001900381819060005260206000200160009055905550505050565b6000612e2e83611331565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0990613d06565b60405180910390fd5b612f1b81612092565b15612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290613be6565b60405180910390fd5b612f6760008383612896565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fb79190613f99565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461307c90614164565b90600052602060002090601f01602090048101928261309e57600085556130e5565b82601f106130b757805160ff19168380011785556130e5565b828001600101855582156130e5579182015b828111156130e45782518255916020019190600101906130c9565b5b5090506130f291906130f6565b5090565b5b8082111561310f5760008160009055506001016130f7565b5090565b600061312661312184613ea6565b613e81565b90508281526020810184848401111561314257613141614360565b5b61314d848285614122565b509392505050565b600061316861316384613ed7565b613e81565b90508281526020810184848401111561318457613183614360565b5b61318f848285614122565b509392505050565b6000813590506131a681614a04565b92915050565b6000813590506131bb81614a1b565b92915050565b6000813590506131d081614a32565b92915050565b6000815190506131e581614a32565b92915050565b600082601f830112613200576131ff61435b565b5b8135613210848260208601613113565b91505092915050565b600082601f83011261322e5761322d61435b565b5b813561323e848260208601613155565b91505092915050565b60008135905061325681614a49565b92915050565b6000602082840312156132725761327161436a565b5b600061328084828501613197565b91505092915050565b600080604083850312156132a05761329f61436a565b5b60006132ae85828601613197565b92505060206132bf85828601613197565b9150509250929050565b6000806000606084860312156132e2576132e161436a565b5b60006132f086828701613197565b935050602061330186828701613197565b925050604061331286828701613247565b9150509250925092565b600080600080608085870312156133365761333561436a565b5b600061334487828801613197565b945050602061335587828801613197565b935050604061336687828801613247565b925050606085013567ffffffffffffffff81111561338757613386614365565b5b613393878288016131eb565b91505092959194509250565b600080604083850312156133b6576133b561436a565b5b60006133c485828601613197565b92505060206133d5858286016131ac565b9150509250929050565b600080604083850312156133f6576133f561436a565b5b600061340485828601613197565b925050602061341585828601613247565b9150509250929050565b6000602082840312156134355761343461436a565b5b6000613443848285016131ac565b91505092915050565b6000602082840312156134625761346161436a565b5b6000613470848285016131c1565b91505092915050565b60006020828403121561348f5761348e61436a565b5b600061349d848285016131d6565b91505092915050565b6000602082840312156134bc576134bb61436a565b5b600082013567ffffffffffffffff8111156134da576134d9614365565b5b6134e684828501613219565b91505092915050565b6000602082840312156135055761350461436a565b5b600061351384828501613247565b91505092915050565b60006135288383613a1a565b60208301905092915050565b61353d816140ae565b82525050565b600061354e82613f2d565b6135588185613f5b565b935061356383613f08565b8060005b8381101561359457815161357b888261351c565b975061358683613f4e565b925050600181019050613567565b5085935050505092915050565b6135aa816140c0565b82525050565b60006135bb82613f38565b6135c58185613f6c565b93506135d5818560208601614131565b6135de8161436f565b840191505092915050565b60006135f482613f43565b6135fe8185613f7d565b935061360e818560208601614131565b6136178161436f565b840191505092915050565b600061362d82613f43565b6136378185613f8e565b9350613647818560208601614131565b80840191505092915050565b6000815461366081614164565b61366a8186613f8e565b945060018216600081146136855760018114613696576136c9565b60ff198316865281860193506136c9565b61369f85613f18565b60005b838110156136c1578154818901526001820191506020810190506136a2565b838801955050505b50505092915050565b60006136df603183613f7d565b91506136ea82614380565b604082019050919050565b6000613702602b83613f7d565b915061370d826143cf565b604082019050919050565b6000613725603283613f7d565b91506137308261441e565b604082019050919050565b6000613748602683613f7d565b91506137538261446d565b604082019050919050565b600061376b601c83613f7d565b9150613776826144bc565b602082019050919050565b600061378e602483613f7d565b9150613799826144e5565b604082019050919050565b60006137b1601983613f7d565b91506137bc82614534565b602082019050919050565b60006137d4602c83613f7d565b91506137df8261455d565b604082019050919050565b60006137f7601b83613f7d565b9150613802826145ac565b602082019050919050565b600061381a602883613f7d565b9150613825826145d5565b604082019050919050565b600061383d603883613f7d565b915061384882614624565b604082019050919050565b6000613860602a83613f7d565b915061386b82614673565b604082019050919050565b6000613883602983613f7d565b915061388e826146c2565b604082019050919050565b60006138a6602083613f7d565b91506138b182614711565b602082019050919050565b60006138c9602c83613f7d565b91506138d48261473a565b604082019050919050565b60006138ec602083613f7d565b91506138f782614789565b602082019050919050565b600061390f602983613f7d565b915061391a826147b2565b604082019050919050565b6000613932602f83613f7d565b915061393d82614801565b604082019050919050565b6000613955602083613f7d565b915061396082614850565b602082019050919050565b6000613978602183613f7d565b915061398382614879565b604082019050919050565b600061399b602383613f7d565b91506139a6826148c8565b604082019050919050565b60006139be602783613f7d565b91506139c982614917565b604082019050919050565b60006139e1603183613f7d565b91506139ec82614966565b604082019050919050565b6000613a04602c83613f7d565b9150613a0f826149b5565b604082019050919050565b613a2381614118565b82525050565b613a3281614118565b82525050565b6000613a448286613622565b9150613a508285613622565b9150613a5c8284613653565b9150819050949350505050565b6000602082019050613a7e6000830184613534565b92915050565b6000608082019050613a996000830187613534565b613aa66020830186613534565b613ab36040830185613a29565b8181036060830152613ac581846135b0565b905095945050505050565b6000606082019050613ae56000830186613534565b613af26020830185613a29565b613aff6040830184613a29565b949350505050565b60006020820190508181036000830152613b218184613543565b905092915050565b6000602082019050613b3e60008301846135a1565b92915050565b60006020820190508181036000830152613b5e81846135e9565b905092915050565b60006020820190508181036000830152613b7f816136d2565b9050919050565b60006020820190508181036000830152613b9f816136f5565b9050919050565b60006020820190508181036000830152613bbf81613718565b9050919050565b60006020820190508181036000830152613bdf8161373b565b9050919050565b60006020820190508181036000830152613bff8161375e565b9050919050565b60006020820190508181036000830152613c1f81613781565b9050919050565b60006020820190508181036000830152613c3f816137a4565b9050919050565b60006020820190508181036000830152613c5f816137c7565b9050919050565b60006020820190508181036000830152613c7f816137ea565b9050919050565b60006020820190508181036000830152613c9f8161380d565b9050919050565b60006020820190508181036000830152613cbf81613830565b9050919050565b60006020820190508181036000830152613cdf81613853565b9050919050565b60006020820190508181036000830152613cff81613876565b9050919050565b60006020820190508181036000830152613d1f81613899565b9050919050565b60006020820190508181036000830152613d3f816138bc565b9050919050565b60006020820190508181036000830152613d5f816138df565b9050919050565b60006020820190508181036000830152613d7f81613902565b9050919050565b60006020820190508181036000830152613d9f81613925565b9050919050565b60006020820190508181036000830152613dbf81613948565b9050919050565b60006020820190508181036000830152613ddf8161396b565b9050919050565b60006020820190508181036000830152613dff8161398e565b9050919050565b60006020820190508181036000830152613e1f816139b1565b9050919050565b60006020820190508181036000830152613e3f816139d4565b9050919050565b60006020820190508181036000830152613e5f816139f7565b9050919050565b6000602082019050613e7b6000830184613a29565b92915050565b6000613e8b613e9c565b9050613e978282614196565b919050565b6000604051905090565b600067ffffffffffffffff821115613ec157613ec061432c565b5b613eca8261436f565b9050602081019050919050565b600067ffffffffffffffff821115613ef257613ef161432c565b5b613efb8261436f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fa482614118565b9150613faf83614118565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe457613fe3614241565b5b828201905092915050565b6000613ffa82614118565b915061400583614118565b92508261401557614014614270565b5b828204905092915050565b600061402b82614118565b915061403683614118565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561406f5761406e614241565b5b828202905092915050565b600061408582614118565b915061409083614118565b9250828210156140a3576140a2614241565b5b828203905092915050565b60006140b9826140f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561414f578082015181840152602081019050614134565b8381111561415e576000848401525b50505050565b6000600282049050600182168061417c57607f821691505b602082108114156141905761418f61429f565b5b50919050565b61419f8261436f565b810181811067ffffffffffffffff821117156141be576141bd61432c565b5b80604052505050565b60006141d282614118565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420557614204614241565b5b600182019050919050565b600061421b82614118565b915061422683614118565b92508261423657614235614270565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420706f737369626c6520746f206d696e74206d6f7265207468616e206d60008201527f6178427579416d7420696e20746f74616c000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e46542068617320616c7265616479206265656e206d696e7465640000000000600082015250565b7f4e6f7420706f737369626c6520746f206d696e74206d6f7265207468616e206d60008201527f6178427579416d74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c7565206973206c657373207468616e206c697374696e67207072696365600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6577204e4654206973206e6f74206176696c61626c652060008201527f6e6f770000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e206d6160008201527f78537570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614a0d816140ae565b8114614a1857600080fd5b50565b614a24816140c0565b8114614a2f57600080fd5b50565b614a3b816140cc565b8114614a4657600080fd5b50565b614a5281614118565b8114614a5d57600080fd5b5056fea26469706673582212207b579264abcc54847f18f5f54ef27f01dd57467d44f74ed3495eca7806cac3e864736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d5369646573206f66204461726b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534f440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d554565357a414c7a326e536979706f74526456576b517375504844444d4b537a4e504d6552666a65326537692f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Sides of Dark
Arg [1] : _symbol (string): SOD
Arg [2] : _tokeBaseURI (string): https://gateway.pinata.cloud/ipfs/QmUEe5zALz2nSiypotRdVWkQsuPHDDMKSzNPMeRfje2e7i/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 5369646573206f66204461726b00000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 534f440000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d554565357a414c7a326e536979706f74526456576b51737550484444
Arg [10] : 4d4b537a4e504d6552666a65326537692f000000000000000000000000000000


Deployed Bytecode Sourcemap

42083:4355:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35933:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20873:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22432:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21955:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36573:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23322:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36241:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46045:154;;;;;;;;;;;;;:::i;:::-;;23732:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44626:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42357:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45737:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36763:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45460:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44973:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20567:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42241:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42169:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20297:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33612:94;;;;;;;;;;;;;:::i;:::-;;32961:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45896:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21042:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46207:228;;;;;;;;;;;;;:::i;:::-;;43261:774;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22725:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42325:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23988:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42197:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44196:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42291:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23091:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33861:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45599:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35933:224;36035:4;36074:35;36059:50;;;:11;:50;;;;:90;;;;36113:36;36137:11;36113:23;:36::i;:::-;36059:90;36052:97;;35933:224;;;:::o;20873:100::-;20927:13;20960:5;20953:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20873:100;:::o;22432:221::-;22508:7;22536:16;22544:7;22536;:16::i;:::-;22528:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22621:15;:24;22637:7;22621:24;;;;;;;;;;;;;;;;;;;;;22614:31;;22432:221;;;:::o;21955:411::-;22036:13;22052:23;22067:7;22052:14;:23::i;:::-;22036:39;;22100:5;22094:11;;:2;:11;;;;22086:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22194:5;22178:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22203:37;22220:5;22227:12;:10;:12::i;:::-;22203:16;:37::i;:::-;22178:62;22156:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22337:21;22346:2;22350:7;22337:8;:21::i;:::-;22025:341;21955:411;;:::o;36573:113::-;36634:7;36661:10;:17;;;;36654:24;;36573:113;:::o;23322:339::-;23517:41;23536:12;:10;:12::i;:::-;23550:7;23517:18;:41::i;:::-;23509:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23625:28;23635:4;23641:2;23645:7;23625:9;:28::i;:::-;23322:339;;;:::o;36241:256::-;36338:7;36374:23;36391:5;36374:16;:23::i;:::-;36366:5;:31;36358:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36463:12;:19;36476:5;36463:19;;;;;;;;;;;;;;;:26;36483:5;36463:26;;;;;;;;;;;;36456:33;;36241:256;;;;:::o;46045:154::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46103:7:::1;:5;:7::i;:::-;46095:25;;:48;46121:21;46095:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46159:32;46169:21;46159:32;;;;;;:::i;:::-;;;;;;;;46045:154::o:0;23732:185::-;23870:39;23887:4;23893:2;23897:7;23870:39;;;;;;;;;;;;:16;:39::i;:::-;23732:185;;;:::o;44626:288::-;44684:13;44710:20;44744:16;44754:5;44744:9;:16::i;:::-;44733:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44710:51;;44777:6;44772:111;44793:16;44803:5;44793:9;:16::i;:::-;44789:1;:20;44772:111;;;44842:29;44862:5;44869:1;44842:19;:29::i;:::-;44830:6;44837:1;44830:9;;;;;;;;:::i;:::-;;;;;;;:41;;;;;44811:3;;;;;:::i;:::-;;;;44772:111;;;;44900:6;44893:13;;;44626:288;;;:::o;42357:29::-;;;;;;;;;;;;;:::o;45737:151::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45832:7:::1;45816:13;:23;;;;;;;;;;;;:::i;:::-;;45855:25;45872:7;45855:25;;;;;;:::i;:::-;;;;;;;;45737:151:::0;:::o;36763:233::-;36838:7;36874:30;:28;:30::i;:::-;36866:5;:38;36858:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36971:10;36982:5;36971:17;;;;;;;;:::i;:::-;;;;;;;;;;36964:24;;36763:233;;;:::o;45460:131::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45541:7:::1;45531;:17;;;;;;;;;;;;:::i;:::-;;45564:19;45575:7;45564:19;;;;;;:::i;:::-;;;;;;;;45460:131:::0;:::o;44973:479::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45043:4:::1;42488:12;;;;;;;;;;;42484:251;;;42548:9;;42540:4;42524:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:33;;42516:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:251;;;42678:1;42666:9;;:13;;;;:::i;:::-;42658:4;42642:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:37;;42634:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:251;45092:9:::2;;45084:4;45068:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:33;;45060:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;45161:12;;;;;;;;;;;45156:289;;45195:6;45190:105;45211:4;45207:1;:8;45190:105;;;45241:38;45251:10;45277:1;45263:13;:11;:13::i;:::-;:15;;;;:::i;:::-;45241:9;:38::i;:::-;45217:3;;;;;:::i;:::-;;;;45190:105;;;;45156:289;;;45332:6;45327:107;45348:4;45344:1;:8;45327:107;;;45378:40;45388:10;45416:1;45414::::0;45400:13:::2;:11;:13::i;:::-;:15;;;;:::i;:::-;:17;;;;:::i;:::-;45378:9;:40::i;:::-;45354:3;;;;;:::i;:::-;;;;45327:107;;;;45156:289;33252:1:::1;44973:479:::0;:::o;20567:239::-;20639:7;20659:13;20675:7;:16;20683:7;20675:16;;;;;;;;;;;;;;;;;;;;;20659:32;;20727:1;20710:19;;:5;:19;;;;20702:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20793:5;20786:12;;;20567:239;;;:::o;42241:30::-;;;;:::o;42169:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20297:208::-;20369:7;20414:1;20397:19;;:5;:19;;;;20389:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20481:9;:16;20491:5;20481:16;;;;;;;;;;;;;;;;20474:23;;20297:208;;;:::o;33612:94::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33677:21:::1;33695:1;33677:9;:21::i;:::-;33612:94::o:0;32961:87::-;33007:7;33034:6;;;;;;;;;;;33027:13;;32961:87;:::o;45896:141::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45980:7:::1;45967:10;;:20;;;;;;;;;;;;;;;;;;46003:26;46021:7;46003:26;;;;;;:::i;:::-;;;;;;;;45896:141:::0;:::o;21042:104::-;21098:13;21131:7;21124:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21042:104;:::o;46207:228::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46267:18:::1;46275:9;;46267:7;:18::i;:::-;46266:19;46258:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46328:29;46338:7;:5;:7::i;:::-;46347:9;;46328;:29::i;:::-;46383:4;46368:12;;:19;;;;;;;;;;;;;;;;;;46403:24;46414:12;;;;;;;;;;;46403:24;;;;;;:::i;:::-;;;;;;;;46207:228::o:0;43261:774::-;43319:4;42488:12;;;;;;;;;;;42484:251;;;42548:9;;42540:4;42524:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:33;;42516:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:251;;;42678:1;42666:9;;:13;;;;:::i;:::-;42658:4;42642:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:37;;42634:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:251;43352:9:::1;;43344:4;:17;;43336:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43457:9;;43432:21;43442:10;43432:9;:21::i;:::-;43425:4;:28;;;;:::i;:::-;:41;;43417:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;43564:4;43552:9;;:16;;;;:::i;:::-;43539:9;:29;;43531:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43625:10;;;;;;;;;;;43617:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43693:12;;;;;;;;;;;43688:289;;43727:6;43722:105;43743:4;43739:1;:8;43722:105;;;43773:38;43783:10;43809:1;43795:13;:11;:13::i;:::-;:15;;;;:::i;:::-;43773:9;:38::i;:::-;43749:3;;;;;:::i;:::-;;;;43722:105;;;;43688:289;;;43864:6;43859:107;43880:4;43876:1;:8;43859:107;;;43910:40;43920:10;43948:1;43946::::0;43932:13:::1;:11;:13::i;:::-;:15;;;;:::i;:::-;:17;;;;:::i;:::-;43910:9;:40::i;:::-;43886:3;;;;;:::i;:::-;;;;43859:107;;;;43688:289;43992:35;43999:10;44011:4;44017:9;43992:35;;;;;;;;:::i;:::-;;;;;;;;43261:774:::0;;:::o;22725:295::-;22840:12;:10;:12::i;:::-;22828:24;;:8;:24;;;;22820:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22940:8;22895:18;:32;22914:12;:10;:12::i;:::-;22895:32;;;;;;;;;;;;;;;:42;22928:8;22895:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22993:8;22964:48;;22979:12;:10;:12::i;:::-;22964:48;;;23003:8;22964:48;;;;;;:::i;:::-;;;;;;;;22725:295;;:::o;42325:25::-;;;;:::o;23988:328::-;24163:41;24182:12;:10;:12::i;:::-;24196:7;24163:18;:41::i;:::-;24155:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24269:39;24283:4;24289:2;24293:7;24302:5;24269:13;:39::i;:::-;23988:328;;;;:::o;42197:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44196:362::-;44261:13;44295:16;44303:7;44295;:16::i;:::-;44287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44376:28;44407:10;:8;:10::i;:::-;44376:41;;44466:1;44441:14;44435:28;:32;:115;;;;;;;;;;;;;;;;;44494:14;44510:18;:7;:16;:18::i;:::-;44530:13;44477:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44435:115;44428:122;;;44196:362;;;:::o;42291:27::-;;;;:::o;23091:164::-;23188:4;23212:18;:25;23231:5;23212:25;;;;;;;;;;;;;;;:35;23238:8;23212:35;;;;;;;;;;;;;;;;;;;;;;;;;23205:42;;23091:164;;;;:::o;33861:192::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33970:1:::1;33950:22;;:8;:22;;;;33942:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34026:19;34036:8;34026:9;:19::i;:::-;33861:192:::0;:::o;45599:130::-;33192:12;:10;:12::i;:::-;33181:23;;:7;:5;:7::i;:::-;:23;;;33173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45677:7:::1;45665:9;:19;;;;45700:21;45713:7;45700:21;;;;;;:::i;:::-;;;;;;;;45599:130:::0;:::o;9128:387::-;9188:4;9396:12;9463:7;9451:20;9443:28;;9506:1;9499:4;:8;9492:15;;;9128:387;;;:::o;31918:126::-;;;;:::o;19928:305::-;20030:4;20082:25;20067:40;;;:11;:40;;;;:105;;;;20139:33;20124:48;;;:11;:48;;;;20067:105;:158;;;;20189:36;20213:11;20189:23;:36::i;:::-;20067:158;20047:178;;19928:305;;;:::o;25826:127::-;25891:4;25943:1;25915:30;;:7;:16;25923:7;25915:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25908:37;;25826:127;;;:::o;17001:98::-;17054:7;17081:10;17074:17;;17001:98;:::o;29808:174::-;29910:2;29883:15;:24;29899:7;29883:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29966:7;29962:2;29928:46;;29937:23;29952:7;29937:14;:23::i;:::-;29928:46;;;;;;;;;;;;29808:174;;:::o;26120:348::-;26213:4;26238:16;26246:7;26238;:16::i;:::-;26230:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26314:13;26330:23;26345:7;26330:14;:23::i;:::-;26314:39;;26383:5;26372:16;;:7;:16;;;:51;;;;26416:7;26392:31;;:20;26404:7;26392:11;:20::i;:::-;:31;;;26372:51;:87;;;;26427:32;26444:5;26451:7;26427:16;:32::i;:::-;26372:87;26364:96;;;26120:348;;;;:::o;29112:578::-;29271:4;29244:31;;:23;29259:7;29244:14;:23::i;:::-;:31;;;29236:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29354:1;29340:16;;:2;:16;;;;29332:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29410:39;29431:4;29437:2;29441:7;29410:20;:39::i;:::-;29514:29;29531:1;29535:7;29514:8;:29::i;:::-;29575:1;29556:9;:15;29566:4;29556:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29604:1;29587:9;:13;29597:2;29587:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29635:2;29616:7;:16;29624:7;29616:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29674:7;29670:2;29655:27;;29664:4;29655:27;;;;;;;;;;;;29112:578;;;:::o;26810:110::-;26886:26;26896:2;26900:7;26886:26;;;;;;;;;;;;:9;:26::i;:::-;26810:110;;:::o;34061:173::-;34117:16;34136:6;;;;;;;;;;;34117:25;;34162:8;34153:6;;:17;;;;;;;;;;;;;;;;;;34217:8;34186:40;;34207:8;34186:40;;;;;;;;;;;;34106:128;34061:173;:::o;25198:315::-;25355:28;25365:4;25371:2;25375:7;25355:9;:28::i;:::-;25402:48;25425:4;25431:2;25435:7;25444:5;25402:22;:48::i;:::-;25394:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25198:315;;;;:::o;44088:100::-;44140:13;44173:7;44166:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44088:100;:::o;6684:723::-;6740:13;6970:1;6961:5;:10;6957:53;;;6988:10;;;;;;;;;;;;;;;;;;;;;6957:53;7020:12;7035:5;7020:20;;7051:14;7076:78;7091:1;7083:4;:9;7076:78;;7109:8;;;;;:::i;:::-;;;;7140:2;7132:10;;;;;:::i;:::-;;;7076:78;;;7164:19;7196:6;7186:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7164:39;;7214:154;7230:1;7221:5;:10;7214:154;;7258:1;7248:11;;;;;:::i;:::-;;;7325:2;7317:5;:10;;;;:::i;:::-;7304:2;:24;;;;:::i;:::-;7291:39;;7274:6;7281;7274:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7354:2;7345:11;;;;;:::i;:::-;;;7214:154;;;7392:6;7378:21;;;;;6684:723;;;;:::o;1583:157::-;1668:4;1707:25;1692:40;;;:11;:40;;;;1685:47;;1583:157;;;:::o;37609:589::-;37753:45;37780:4;37786:2;37790:7;37753:26;:45::i;:::-;37831:1;37815:18;;:4;:18;;;37811:187;;;37850:40;37882:7;37850:31;:40::i;:::-;37811:187;;;37920:2;37912:10;;:4;:10;;;37908:90;;37939:47;37972:4;37978:7;37939:32;:47::i;:::-;37908:90;37811:187;38026:1;38012:16;;:2;:16;;;38008:183;;;38045:45;38082:7;38045:36;:45::i;:::-;38008:183;;;38118:4;38112:10;;:2;:10;;;38108:83;;38139:40;38167:2;38171:7;38139:27;:40::i;:::-;38108:83;38008:183;37609:589;;;:::o;27147:321::-;27277:18;27283:2;27287:7;27277:5;:18::i;:::-;27328:54;27359:1;27363:2;27367:7;27376:5;27328:22;:54::i;:::-;27306:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27147:321;;;:::o;30547:799::-;30702:4;30723:15;:2;:13;;;:15::i;:::-;30719:620;;;30775:2;30759:36;;;30796:12;:10;:12::i;:::-;30810:4;30816:7;30825:5;30759:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30755:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31018:1;31001:6;:13;:18;30997:272;;;31044:60;;;;;;;;;;:::i;:::-;;;;;;;;30997:272;31219:6;31213:13;31204:6;31200:2;31196:15;31189:38;30755:529;30892:41;;;30882:51;;;:6;:51;;;;30875:58;;;;;30719:620;31323:4;31316:11;;30547:799;;;;;;;:::o;38921:164::-;39025:10;:17;;;;38998:15;:24;39014:7;38998:24;;;;;;;;;;;:44;;;;39053:10;39069:7;39053:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38921:164;:::o;39712:988::-;39978:22;40028:1;40003:22;40020:4;40003:16;:22::i;:::-;:26;;;;:::i;:::-;39978:51;;40040:18;40061:17;:26;40079:7;40061:26;;;;;;;;;;;;40040:47;;40208:14;40194:10;:28;40190:328;;40239:19;40261:12;:18;40274:4;40261:18;;;;;;;;;;;;;;;:34;40280:14;40261:34;;;;;;;;;;;;40239:56;;40345:11;40312:12;:18;40325:4;40312:18;;;;;;;;;;;;;;;:30;40331:10;40312:30;;;;;;;;;;;:44;;;;40462:10;40429:17;:30;40447:11;40429:30;;;;;;;;;;;:43;;;;40224:294;40190:328;40614:17;:26;40632:7;40614:26;;;;;;;;;;;40607:33;;;40658:12;:18;40671:4;40658:18;;;;;;;;;;;;;;;:34;40677:14;40658:34;;;;;;;;;;;40651:41;;;39793:907;;39712:988;;:::o;40995:1079::-;41248:22;41293:1;41273:10;:17;;;;:21;;;;:::i;:::-;41248:46;;41305:18;41326:15;:24;41342:7;41326:24;;;;;;;;;;;;41305:45;;41677:19;41699:10;41710:14;41699:26;;;;;;;;:::i;:::-;;;;;;;;;;41677:48;;41763:11;41738:10;41749;41738:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41874:10;41843:15;:28;41859:11;41843:28;;;;;;;;;;;:41;;;;42015:15;:24;42031:7;42015:24;;;;;;;;;;;42008:31;;;42050:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41066:1008;;;40995:1079;:::o;38499:221::-;38584:14;38601:20;38618:2;38601:16;:20::i;:::-;38584:37;;38659:7;38632:12;:16;38645:2;38632:16;;;;;;;;;;;;;;;:24;38649:6;38632:24;;;;;;;;;;;:34;;;;38706:6;38677:17;:26;38695:7;38677:26;;;;;;;;;;;:35;;;;38573:147;38499:221;;:::o;27804:382::-;27898:1;27884:16;;:2;:16;;;;27876:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27957:16;27965:7;27957;:16::i;:::-;27956:17;27948:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28019:45;28048:1;28052:2;28056:7;28019:20;:45::i;:::-;28094:1;28077:9;:13;28087:2;28077:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28125:2;28106:7;:16;28114:7;28106:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28170:7;28166:2;28145:33;;28162:1;28145:33;;;;;;;;;;;;27804:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:::-;17883:3;17904:67;17968:2;17963:3;17904:67;:::i;:::-;17897:74;;17980:93;18069:3;17980:93;:::i;:::-;18098:2;18093:3;18089:12;18082:19;;17741:366;;;:::o;18113:::-;18255:3;18276:67;18340:2;18335:3;18276:67;:::i;:::-;18269:74;;18352:93;18441:3;18352:93;:::i;:::-;18470:2;18465:3;18461:12;18454:19;;18113:366;;;:::o;18485:::-;18627:3;18648:67;18712:2;18707:3;18648:67;:::i;:::-;18641:74;;18724:93;18813:3;18724:93;:::i;:::-;18842:2;18837:3;18833:12;18826:19;;18485:366;;;:::o;18857:::-;18999:3;19020:67;19084:2;19079:3;19020:67;:::i;:::-;19013:74;;19096:93;19185:3;19096:93;:::i;:::-;19214:2;19209:3;19205:12;19198:19;;18857:366;;;:::o;19229:::-;19371:3;19392:67;19456:2;19451:3;19392:67;:::i;:::-;19385:74;;19468:93;19557:3;19468:93;:::i;:::-;19586:2;19581:3;19577:12;19570:19;;19229:366;;;:::o;19601:108::-;19678:24;19696:5;19678:24;:::i;:::-;19673:3;19666:37;19601:108;;:::o;19715:118::-;19802:24;19820:5;19802:24;:::i;:::-;19797:3;19790:37;19715:118;;:::o;19839:589::-;20064:3;20086:95;20177:3;20168:6;20086:95;:::i;:::-;20079:102;;20198:95;20289:3;20280:6;20198:95;:::i;:::-;20191:102;;20310:92;20398:3;20389:6;20310:92;:::i;:::-;20303:99;;20419:3;20412:10;;19839:589;;;;;;:::o;20434:222::-;20527:4;20565:2;20554:9;20550:18;20542:26;;20578:71;20646:1;20635:9;20631:17;20622:6;20578:71;:::i;:::-;20434:222;;;;:::o;20662:640::-;20857:4;20895:3;20884:9;20880:19;20872:27;;20909:71;20977:1;20966:9;20962:17;20953:6;20909:71;:::i;:::-;20990:72;21058:2;21047:9;21043:18;21034:6;20990:72;:::i;:::-;21072;21140:2;21129:9;21125:18;21116:6;21072:72;:::i;:::-;21191:9;21185:4;21181:20;21176:2;21165:9;21161:18;21154:48;21219:76;21290:4;21281:6;21219:76;:::i;:::-;21211:84;;20662:640;;;;;;;:::o;21308:442::-;21457:4;21495:2;21484:9;21480:18;21472:26;;21508:71;21576:1;21565:9;21561:17;21552:6;21508:71;:::i;:::-;21589:72;21657:2;21646:9;21642:18;21633:6;21589:72;:::i;:::-;21671;21739:2;21728:9;21724:18;21715:6;21671:72;:::i;:::-;21308:442;;;;;;:::o;21756:373::-;21899:4;21937:2;21926:9;21922:18;21914:26;;21986:9;21980:4;21976:20;21972:1;21961:9;21957:17;21950:47;22014:108;22117:4;22108:6;22014:108;:::i;:::-;22006:116;;21756:373;;;;:::o;22135:210::-;22222:4;22260:2;22249:9;22245:18;22237:26;;22273:65;22335:1;22324:9;22320:17;22311:6;22273:65;:::i;:::-;22135:210;;;;:::o;22351:313::-;22464:4;22502:2;22491:9;22487:18;22479:26;;22551:9;22545:4;22541:20;22537:1;22526:9;22522:17;22515:47;22579:78;22652:4;22643:6;22579:78;:::i;:::-;22571:86;;22351:313;;;;:::o;22670:419::-;22836:4;22874:2;22863:9;22859:18;22851:26;;22923:9;22917:4;22913:20;22909:1;22898:9;22894:17;22887:47;22951:131;23077:4;22951:131;:::i;:::-;22943:139;;22670:419;;;:::o;23095:::-;23261:4;23299:2;23288:9;23284:18;23276:26;;23348:9;23342:4;23338:20;23334:1;23323:9;23319:17;23312:47;23376:131;23502:4;23376:131;:::i;:::-;23368:139;;23095:419;;;:::o;23520:::-;23686:4;23724:2;23713:9;23709:18;23701:26;;23773:9;23767:4;23763:20;23759:1;23748:9;23744:17;23737:47;23801:131;23927:4;23801:131;:::i;:::-;23793:139;;23520:419;;;:::o;23945:::-;24111:4;24149:2;24138:9;24134:18;24126:26;;24198:9;24192:4;24188:20;24184:1;24173:9;24169:17;24162:47;24226:131;24352:4;24226:131;:::i;:::-;24218:139;;23945:419;;;:::o;24370:::-;24536:4;24574:2;24563:9;24559:18;24551:26;;24623:9;24617:4;24613:20;24609:1;24598:9;24594:17;24587:47;24651:131;24777:4;24651:131;:::i;:::-;24643:139;;24370:419;;;:::o;24795:::-;24961:4;24999:2;24988:9;24984:18;24976:26;;25048:9;25042:4;25038:20;25034:1;25023:9;25019:17;25012:47;25076:131;25202:4;25076:131;:::i;:::-;25068:139;;24795:419;;;:::o;25220:::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:::-;25811:4;25849:2;25838:9;25834:18;25826:26;;25898:9;25892:4;25888:20;25884:1;25873:9;25869:17;25862:47;25926:131;26052:4;25926:131;:::i;:::-;25918:139;;25645:419;;;:::o;26070:::-;26236:4;26274:2;26263:9;26259:18;26251:26;;26323:9;26317:4;26313:20;26309:1;26298:9;26294:17;26287:47;26351:131;26477:4;26351:131;:::i;:::-;26343:139;;26070:419;;;:::o;26495:::-;26661:4;26699:2;26688:9;26684:18;26676:26;;26748:9;26742:4;26738:20;26734:1;26723:9;26719:17;26712:47;26776:131;26902:4;26776:131;:::i;:::-;26768:139;;26495:419;;;:::o;26920:::-;27086:4;27124:2;27113:9;27109:18;27101:26;;27173:9;27167:4;27163:20;27159:1;27148:9;27144:17;27137:47;27201:131;27327:4;27201:131;:::i;:::-;27193:139;;26920:419;;;:::o;27345:::-;27511:4;27549:2;27538:9;27534:18;27526:26;;27598:9;27592:4;27588:20;27584:1;27573:9;27569:17;27562:47;27626:131;27752:4;27626:131;:::i;:::-;27618:139;;27345:419;;;:::o;27770:::-;27936:4;27974:2;27963:9;27959:18;27951:26;;28023:9;28017:4;28013:20;28009:1;27998:9;27994:17;27987:47;28051:131;28177:4;28051:131;:::i;:::-;28043:139;;27770:419;;;:::o;28195:::-;28361:4;28399:2;28388:9;28384:18;28376:26;;28448:9;28442:4;28438:20;28434:1;28423:9;28419:17;28412:47;28476:131;28602:4;28476:131;:::i;:::-;28468:139;;28195:419;;;:::o;28620:::-;28786:4;28824:2;28813:9;28809:18;28801:26;;28873:9;28867:4;28863:20;28859:1;28848:9;28844:17;28837:47;28901:131;29027:4;28901:131;:::i;:::-;28893:139;;28620:419;;;:::o;29045:::-;29211:4;29249:2;29238:9;29234:18;29226:26;;29298:9;29292:4;29288:20;29284:1;29273:9;29269:17;29262:47;29326:131;29452:4;29326:131;:::i;:::-;29318:139;;29045:419;;;:::o;29470:::-;29636:4;29674:2;29663:9;29659:18;29651:26;;29723:9;29717:4;29713:20;29709:1;29698:9;29694:17;29687:47;29751:131;29877:4;29751:131;:::i;:::-;29743:139;;29470:419;;;:::o;29895:::-;30061:4;30099:2;30088:9;30084:18;30076:26;;30148:9;30142:4;30138:20;30134:1;30123:9;30119:17;30112:47;30176:131;30302:4;30176:131;:::i;:::-;30168:139;;29895:419;;;:::o;30320:::-;30486:4;30524:2;30513:9;30509:18;30501:26;;30573:9;30567:4;30563:20;30559:1;30548:9;30544:17;30537:47;30601:131;30727:4;30601:131;:::i;:::-;30593:139;;30320:419;;;:::o;30745:::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:::-;31336:4;31374:2;31363:9;31359:18;31351:26;;31423:9;31417:4;31413:20;31409:1;31398:9;31394:17;31387:47;31451:131;31577:4;31451:131;:::i;:::-;31443:139;;31170:419;;;:::o;31595:::-;31761:4;31799:2;31788:9;31784:18;31776:26;;31848:9;31842:4;31838:20;31834:1;31823:9;31819:17;31812:47;31876:131;32002:4;31876:131;:::i;:::-;31868:139;;31595:419;;;:::o;32020:::-;32186:4;32224:2;32213:9;32209:18;32201:26;;32273:9;32267:4;32263:20;32259:1;32248:9;32244:17;32237:47;32301:131;32427:4;32301:131;:::i;:::-;32293:139;;32020:419;;;:::o;32445:::-;32611:4;32649:2;32638:9;32634:18;32626:26;;32698:9;32692:4;32688:20;32684:1;32673:9;32669:17;32662:47;32726:131;32852:4;32726:131;:::i;:::-;32718:139;;32445:419;;;:::o;32870:222::-;32963:4;33001:2;32990:9;32986:18;32978:26;;33014:71;33082:1;33071:9;33067:17;33058:6;33014:71;:::i;:::-;32870:222;;;;:::o;33098:129::-;33132:6;33159:20;;:::i;:::-;33149:30;;33188:33;33216:4;33208:6;33188:33;:::i;:::-;33098:129;;;:::o;33233:75::-;33266:6;33299:2;33293:9;33283:19;;33233:75;:::o;33314:307::-;33375:4;33465:18;33457:6;33454:30;33451:56;;;33487:18;;:::i;:::-;33451:56;33525:29;33547:6;33525:29;:::i;:::-;33517:37;;33609:4;33603;33599:15;33591:23;;33314:307;;;:::o;33627:308::-;33689:4;33779:18;33771:6;33768:30;33765:56;;;33801:18;;:::i;:::-;33765:56;33839:29;33861:6;33839:29;:::i;:::-;33831:37;;33923:4;33917;33913:15;33905:23;;33627:308;;;:::o;33941:132::-;34008:4;34031:3;34023:11;;34061:4;34056:3;34052:14;34044:22;;33941:132;;;:::o;34079:141::-;34128:4;34151:3;34143:11;;34174:3;34171:1;34164:14;34208:4;34205:1;34195:18;34187:26;;34079:141;;;:::o;34226:114::-;34293:6;34327:5;34321:12;34311:22;;34226:114;;;:::o;34346:98::-;34397:6;34431:5;34425:12;34415:22;;34346:98;;;:::o;34450:99::-;34502:6;34536:5;34530:12;34520:22;;34450:99;;;:::o;34555:113::-;34625:4;34657;34652:3;34648:14;34640:22;;34555:113;;;:::o;34674:184::-;34773:11;34807:6;34802:3;34795:19;34847:4;34842:3;34838:14;34823:29;;34674:184;;;;:::o;34864:168::-;34947:11;34981:6;34976:3;34969:19;35021:4;35016:3;35012:14;34997:29;;34864:168;;;;:::o;35038:169::-;35122:11;35156:6;35151:3;35144:19;35196:4;35191:3;35187:14;35172:29;;35038:169;;;;:::o;35213:148::-;35315:11;35352:3;35337:18;;35213:148;;;;:::o;35367:305::-;35407:3;35426:20;35444:1;35426:20;:::i;:::-;35421:25;;35460:20;35478:1;35460:20;:::i;:::-;35455:25;;35614:1;35546:66;35542:74;35539:1;35536:81;35533:107;;;35620:18;;:::i;:::-;35533:107;35664:1;35661;35657:9;35650:16;;35367:305;;;;:::o;35678:185::-;35718:1;35735:20;35753:1;35735:20;:::i;:::-;35730:25;;35769:20;35787:1;35769:20;:::i;:::-;35764:25;;35808:1;35798:35;;35813:18;;:::i;:::-;35798:35;35855:1;35852;35848:9;35843:14;;35678:185;;;;:::o;35869:348::-;35909:7;35932:20;35950:1;35932:20;:::i;:::-;35927:25;;35966:20;35984:1;35966:20;:::i;:::-;35961:25;;36154:1;36086:66;36082:74;36079:1;36076:81;36071:1;36064:9;36057:17;36053:105;36050:131;;;36161:18;;:::i;:::-;36050:131;36209:1;36206;36202:9;36191:20;;35869:348;;;;:::o;36223:191::-;36263:4;36283:20;36301:1;36283:20;:::i;:::-;36278:25;;36317:20;36335:1;36317:20;:::i;:::-;36312:25;;36356:1;36353;36350:8;36347:34;;;36361:18;;:::i;:::-;36347:34;36406:1;36403;36399:9;36391:17;;36223:191;;;;:::o;36420:96::-;36457:7;36486:24;36504:5;36486:24;:::i;:::-;36475:35;;36420:96;;;:::o;36522:90::-;36556:7;36599:5;36592:13;36585:21;36574:32;;36522:90;;;:::o;36618:149::-;36654:7;36694:66;36687:5;36683:78;36672:89;;36618:149;;;:::o;36773:126::-;36810:7;36850:42;36843:5;36839:54;36828:65;;36773:126;;;:::o;36905:77::-;36942:7;36971:5;36960:16;;36905:77;;;:::o;36988:154::-;37072:6;37067:3;37062;37049:30;37134:1;37125:6;37120:3;37116:16;37109:27;36988:154;;;:::o;37148:307::-;37216:1;37226:113;37240:6;37237:1;37234:13;37226:113;;;37325:1;37320:3;37316:11;37310:18;37306:1;37301:3;37297:11;37290:39;37262:2;37259:1;37255:10;37250:15;;37226:113;;;37357:6;37354:1;37351:13;37348:101;;;37437:1;37428:6;37423:3;37419:16;37412:27;37348:101;37197:258;37148:307;;;:::o;37461:320::-;37505:6;37542:1;37536:4;37532:12;37522:22;;37589:1;37583:4;37579:12;37610:18;37600:81;;37666:4;37658:6;37654:17;37644:27;;37600:81;37728:2;37720:6;37717:14;37697:18;37694:38;37691:84;;;37747:18;;:::i;:::-;37691:84;37512:269;37461:320;;;:::o;37787:281::-;37870:27;37892:4;37870:27;:::i;:::-;37862:6;37858:40;38000:6;37988:10;37985:22;37964:18;37952:10;37949:34;37946:62;37943:88;;;38011:18;;:::i;:::-;37943:88;38051:10;38047:2;38040:22;37830:238;37787:281;;:::o;38074:233::-;38113:3;38136:24;38154:5;38136:24;:::i;:::-;38127:33;;38182:66;38175:5;38172:77;38169:103;;;38252:18;;:::i;:::-;38169:103;38299:1;38292:5;38288:13;38281:20;;38074:233;;;:::o;38313:176::-;38345:1;38362:20;38380:1;38362:20;:::i;:::-;38357:25;;38396:20;38414:1;38396:20;:::i;:::-;38391:25;;38435:1;38425:35;;38440:18;;:::i;:::-;38425:35;38481:1;38478;38474:9;38469:14;;38313:176;;;;:::o;38495:180::-;38543:77;38540:1;38533:88;38640:4;38637:1;38630:15;38664:4;38661:1;38654:15;38681:180;38729:77;38726:1;38719:88;38826:4;38823:1;38816:15;38850:4;38847:1;38840:15;38867:180;38915:77;38912:1;38905:88;39012:4;39009:1;39002:15;39036:4;39033:1;39026:15;39053:180;39101:77;39098:1;39091:88;39198:4;39195:1;39188:15;39222:4;39219:1;39212:15;39239:180;39287:77;39284:1;39277:88;39384:4;39381:1;39374:15;39408:4;39405:1;39398:15;39425:180;39473:77;39470:1;39463:88;39570:4;39567:1;39560:15;39594:4;39591:1;39584:15;39611:117;39720:1;39717;39710:12;39734:117;39843:1;39840;39833:12;39857:117;39966:1;39963;39956:12;39980:117;40089:1;40086;40079:12;40103:102;40144:6;40195:2;40191:7;40186:2;40179:5;40175:14;40171:28;40161:38;;40103:102;;;:::o;40211:236::-;40351:34;40347:1;40339:6;40335:14;40328:58;40420:19;40415:2;40407:6;40403:15;40396:44;40211:236;:::o;40453:230::-;40593:34;40589:1;40581:6;40577:14;40570:58;40662:13;40657:2;40649:6;40645:15;40638:38;40453:230;:::o;40689:237::-;40829:34;40825:1;40817:6;40813:14;40806:58;40898:20;40893:2;40885:6;40881:15;40874:45;40689:237;:::o;40932:225::-;41072:34;41068:1;41060:6;41056:14;41049:58;41141:8;41136:2;41128:6;41124:15;41117:33;40932:225;:::o;41163:178::-;41303:30;41299:1;41291:6;41287:14;41280:54;41163:178;:::o;41347:223::-;41487:34;41483:1;41475:6;41471:14;41464:58;41556:6;41551:2;41543:6;41539:15;41532:31;41347:223;:::o;41576:175::-;41716:27;41712:1;41704:6;41700:14;41693:51;41576:175;:::o;41757:231::-;41897:34;41893:1;41885:6;41881:14;41874:58;41966:14;41961:2;41953:6;41949:15;41942:39;41757:231;:::o;41994:177::-;42134:29;42130:1;42122:6;42118:14;42111:53;41994:177;:::o;42177:227::-;42317:34;42313:1;42305:6;42301:14;42294:58;42386:10;42381:2;42373:6;42369:15;42362:35;42177:227;:::o;42410:243::-;42550:34;42546:1;42538:6;42534:14;42527:58;42619:26;42614:2;42606:6;42602:15;42595:51;42410:243;:::o;42659:229::-;42799:34;42795:1;42787:6;42783:14;42776:58;42868:12;42863:2;42855:6;42851:15;42844:37;42659:229;:::o;42894:228::-;43034:34;43030:1;43022:6;43018:14;43011:58;43103:11;43098:2;43090:6;43086:15;43079:36;42894:228;:::o;43128:182::-;43268:34;43264:1;43256:6;43252:14;43245:58;43128:182;:::o;43316:231::-;43456:34;43452:1;43444:6;43440:14;43433:58;43525:14;43520:2;43512:6;43508:15;43501:39;43316:231;:::o;43553:182::-;43693:34;43689:1;43681:6;43677:14;43670:58;43553:182;:::o;43741:228::-;43881:34;43877:1;43869:6;43865:14;43858:58;43950:11;43945:2;43937:6;43933:15;43926:36;43741:228;:::o;43975:234::-;44115:34;44111:1;44103:6;44099:14;44092:58;44184:17;44179:2;44171:6;44167:15;44160:42;43975:234;:::o;44215:182::-;44355:34;44351:1;44343:6;44339:14;44332:58;44215:182;:::o;44403:220::-;44543:34;44539:1;44531:6;44527:14;44520:58;44612:3;44607:2;44599:6;44595:15;44588:28;44403:220;:::o;44629:222::-;44769:34;44765:1;44757:6;44753:14;44746:58;44838:5;44833:2;44825:6;44821:15;44814:30;44629:222;:::o;44857:226::-;44997:34;44993:1;44985:6;44981:14;44974:58;45066:9;45061:2;45053:6;45049:15;45042:34;44857:226;:::o;45089:236::-;45229:34;45225:1;45217:6;45213:14;45206:58;45298:19;45293:2;45285:6;45281:15;45274:44;45089:236;:::o;45331:231::-;45471:34;45467:1;45459:6;45455:14;45448:58;45540:14;45535:2;45527:6;45523:15;45516:39;45331:231;:::o;45568:122::-;45641:24;45659:5;45641:24;:::i;:::-;45634:5;45631:35;45621:63;;45680:1;45677;45670:12;45621:63;45568:122;:::o;45696:116::-;45766:21;45781:5;45766:21;:::i;:::-;45759:5;45756:32;45746:60;;45802:1;45799;45792:12;45746:60;45696:116;:::o;45818:120::-;45890:23;45907:5;45890:23;:::i;:::-;45883:5;45880:34;45870:62;;45928:1;45925;45918:12;45870:62;45818:120;:::o;45944:122::-;46017:24;46035:5;46017:24;:::i;:::-;46010:5;46007:35;45997:63;;46056:1;46053;46046:12;45997:63;45944:122;:::o

Swarm Source

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