ETH Price: $3,436.62 (-2.28%)
Gas: 3 Gwei

Token

SC Ladies (LADY)
 

Overview

Max Total Supply

777 LADY

Holders

381

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 LADY
0x272217c3B6A836445CeadBA7990FAA183a4E5832
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:
SCLadies

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-07
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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

// File: contracts/SCLadies_Flat.sol



//
//   _____  _____ _               _ _             _   _ ______ _______
//  / ____|/ ____| |             | (_)           | \ | |  ____|__   __|
// | (___ | |    | |     __ _  __| |_  ___  ___  |  \| | |__     | |
//  \___ \| |    | |    / _` |/ _` | |/ _ \/ __| | . ` |  __|    | |
//  ____) | |____| |___| (_| | (_| | |  __/\__ \ | |\  | |       | |
// |_____/ \_____|______\__,_|\__,_|_|\___||___/ |_| \_|_|       |_|
//
//

/*
 * @creator SC Ladies by San Coiffure
 * @author burakcbdn twitter.com/burakcbdn
 */

pragma solidity >=0.7.0 <0.9.0;





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

    Counters.Counter private supply;

    string public ladiesURI = "";
    string public metadataExtension = ".json";

    string public hiddenLadiesURI;

    uint256 public preSalePrice = 0.034 ether;
    uint256 public mintPrice = 0.064 ether;

    uint256 public maxSupply = 6434;

    uint256 public maxMintPerTx = 20;
    uint256 public maxMintPerFirstLady = 2;

    bool public paused = true;
    bool public preSale = false;
    bool public publicSale = false;

    bool public revealed = false;

    bytes32 public merkleRoot;

    mapping(address => uint256) public ladyBalances;

    constructor() ERC721("SC Ladies", "LADY"){}

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

    modifier onlyAccounts() {
        require(msg.sender == tx.origin, "Invalid origin");
        _;
    }

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

    function mint(uint256 _mintAmount)
        public
        payable
        onlyAccounts
        mintCompliance(_mintAmount)
    {
        require(!paused, "The contract is paused!");
        require(publicSale, "Public sale has not started yet!");
        require(msg.value >= mintPrice * _mintAmount, "Insufficient funds!");

        _mintLoop(msg.sender, _mintAmount);
    }

    function firstLadyMint(uint256 _mintAmount, bytes32[] calldata _merkleProof)
        public
        payable
        onlyAccounts
        mintCompliance(_mintAmount)
    {
        require(!paused, "The contract is paused!");
        require(preSale, "Pre sale is not active!");
        require(msg.value >= preSalePrice * _mintAmount, "Insufficient funds!");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, merkleRoot, leaf),
            "Invalid proof!"
        );
        require(
            ladyBalances[msg.sender] + _mintAmount <= maxMintPerFirstLady,
            "Whitelist mint claims used!"
        );

        _mintLoop(msg.sender, _mintAmount);
    }

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

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

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

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

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

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

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

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

    // Setter functions

    function setMerkleRoot(bytes32 _newRoot) public onlyOwner {
        merkleRoot = _newRoot;
    }

    function setHiddenLadiesURI(string memory _hiddenLadiesURI)
        public
        onlyOwner
    {
        hiddenLadiesURI = _hiddenLadiesURI;
    }

    function setladiesURI(string memory _ladiesURI) public onlyOwner {
        ladiesURI = _ladiesURI;
    }

    function setExtension(string memory _extension) public onlyOwner {
        metadataExtension = _extension;
    }

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

    function setPreSale(bool _state) public onlyOwner {
        preSale = _state;
    }

    function setPublicSale(bool _state) public onlyOwner {
        publicSale = _state;
    }

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

    // == 

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"firstLadyMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenLadiesURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ladiesURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ladyBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerFirstLady","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_extension","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenLadiesURI","type":"string"}],"name":"setHiddenLadiesURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ladiesURI","type":"string"}],"name":"setladiesURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040819052600060808190526200001b916008916200016b565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a916009916200016b565b506678cad1e25d0000600b5566e35fa931a00000600c55611922600d556014600e556002600f556010805463ffffffff191660011790553480156200008e57600080fd5b5060408051808201825260098152685343204c616469657360b81b6020808301918252835180850190945260048452634c41445960e01b908401528151919291620000dc916000916200016b565b508051620000f29060019060208401906200016b565b5050506200010f620001096200011560201b60201c565b62000119565b6200024e565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001799062000211565b90600052602060002090601f0160209004810192826200019d5760008555620001e8565b82601f10620001b857805160ff1916838001178555620001e8565b82800160010185558215620001e8579182015b82811115620001e8578251825591602001919060010190620001cb565b50620001f6929150620001fa565b5090565b5b80821115620001f65760008155600101620001fb565b600181811c908216806200022657607f821691505b602082108114156200024857634e487b7160e01b600052602260045260246000fd5b50919050565b6128b4806200025e6000396000f3fe6080604052600436106102675760003560e01c80637cb6475911610144578063d5abeb01116100b6578063e985e9c51161007a578063e985e9c5146106fa578063ebf72a5f14610743578063efbd73f414610758578063f2fde38b14610778578063f4ec4cd314610798578063f623d907146107ae57600080fd5b8063d5abeb0114610685578063dd4118701461069b578063de7fcb1d146106ae578063e0a80853146106c4578063e757c17d146106e457600080fd5b806395d89b411161010857806395d89b41146105d0578063a0712d68146105e5578063a22cb465146105f8578063b2c7044e14610618578063b88d4fde14610645578063c87b56dd1461066557600080fd5b80637cb64759146105325780637d331e30146105525780637e2285aa146105725780638d188840146105925780638da5cb5b146105b257600080fd5b806340a76033116101dd5780635aca1bb6116101a15780635aca1bb61461048d5780635c975abb146104ad5780636352211e146104c75780636817c76c146104e757806370a08231146104fd578063715018a61461051d57600080fd5b806340a76033146103eb57806342842e0e14610400578063438b630014610420578063518302271461044d5780635a7adf7f1461046e57600080fd5b806316c38b3c1161022f57806316c38b3c1461033d57806318160ddd1461035d57806323b872dd146103805780632eb4a7ab146103a057806333bc1c5c146103b65780633ccfd60b146103d657600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb5780630d95ccc91461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461233b565b6107c3565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610815565b60405161029891906125d1565b3480156102cf57600080fd5b506102e36102de366004612322565b6108a7565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b6103163660046122dd565b610941565b005b34801561032957600080fd5b5061031b610338366004612307565b610a57565b34801561034957600080fd5b5061031b610358366004612307565b610a9b565b34801561036957600080fd5b50610372610ad8565b604051908152602001610298565b34801561038c57600080fd5b5061031b61039b3660046121fb565b610ae8565b3480156103ac57600080fd5b5061037260115481565b3480156103c257600080fd5b5060105461028c9062010000900460ff1681565b3480156103e257600080fd5b5061031b610b19565b3480156103f757600080fd5b506102b6610bb7565b34801561040c57600080fd5b5061031b61041b3660046121fb565b610c45565b34801561042c57600080fd5b5061044061043b3660046121ad565b610c60565b604051610298919061258d565b34801561045957600080fd5b5060105461028c906301000000900460ff1681565b34801561047a57600080fd5b5060105461028c90610100900460ff1681565b34801561049957600080fd5b5061031b6104a8366004612307565b610d41565b3480156104b957600080fd5b5060105461028c9060ff1681565b3480156104d357600080fd5b506102e36104e2366004612322565b610d87565b3480156104f357600080fd5b50610372600c5481565b34801561050957600080fd5b506103726105183660046121ad565b610dfe565b34801561052957600080fd5b5061031b610e85565b34801561053e57600080fd5b5061031b61054d366004612322565b610ebb565b34801561055e57600080fd5b5061031b61056d366004612375565b610eea565b34801561057e57600080fd5b5061031b61058d366004612375565b610f2b565b34801561059e57600080fd5b5061031b6105ad366004612375565b610f68565b3480156105be57600080fd5b506006546001600160a01b03166102e3565b3480156105dc57600080fd5b506102b6610fa5565b61031b6105f3366004612322565b610fb4565b34801561060457600080fd5b5061031b6106133660046122b3565b61115a565b34801561062457600080fd5b506103726106333660046121ad565b60126020526000908152604090205481565b34801561065157600080fd5b5061031b610660366004612237565b611165565b34801561067157600080fd5b506102b6610680366004612322565b61119d565b34801561069157600080fd5b50610372600d5481565b61031b6106a93660046123e1565b61131e565b3480156106ba57600080fd5b50610372600e5481565b3480156106d057600080fd5b5061031b6106df366004612307565b6115ed565b3480156106f057600080fd5b50610372600b5481565b34801561070657600080fd5b5061028c6107153660046121c8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b506102b6611635565b34801561076457600080fd5b5061031b6107733660046123be565b611642565b34801561078457600080fd5b5061031b6107933660046121ad565b6116da565b3480156107a457600080fd5b50610372600f5481565b3480156107ba57600080fd5b506102b6611772565b60006001600160e01b031982166380ac58cd60e01b14806107f457506001600160e01b03198216635b5e139f60e01b145b8061080f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610824906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610850906127a6565b801561089d5780601f106108725761010080835404028352916020019161089d565b820191906000526020600020905b81548152906001019060200180831161088057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061094c82610d87565b9050806001600160a01b0316836001600160a01b031614156109ba5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161091c565b336001600160a01b03821614806109d657506109d68133610715565b610a485760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161091c565b610a52838361177f565b505050565b6006546001600160a01b03163314610a815760405162461bcd60e51b815260040161091c90612664565b601080549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610ac55760405162461bcd60e51b815260040161091c90612664565b6010805460ff1916911515919091179055565b6000610ae360075490565b905090565b610af233826117ed565b610b0e5760405162461bcd60e51b815260040161091c906126c7565b610a528383836118e4565b6006546001600160a01b03163314610b435760405162461bcd60e51b815260040161091c90612664565b6000610b576006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ba1576040519150601f19603f3d011682016040523d82523d6000602084013e610ba6565b606091505b5050905080610bb457600080fd5b50565b600a8054610bc4906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf0906127a6565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b505050505081565b610a5283838360405180602001604052806000815250611165565b60606000610c6d83610dfe565b905060008167ffffffffffffffff811115610c8a57610c8a612852565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b509050600160005b8381108015610ccc5750600d548211155b15610d37576000610cdc83610d87565b9050866001600160a01b0316816001600160a01b03161415610d245782848381518110610d0b57610d0b61283c565b602090810291909101015281610d20816127e1565b9250505b82610d2e816127e1565b93505050610cbb565b5090949350505050565b6006546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161091c90612664565b60108054911515620100000262ff000019909216919091179055565b6000818152600260205260408120546001600160a01b03168061080f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161091c565b60006001600160a01b038216610e695760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161091c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610eaf5760405162461bcd60e51b815260040161091c90612664565b610eb96000611a80565b565b6006546001600160a01b03163314610ee55760405162461bcd60e51b815260040161091c90612664565b601155565b6006546001600160a01b03163314610f145760405162461bcd60e51b815260040161091c90612664565b8051610f2790600a906020840190612072565b5050565b6006546001600160a01b03163314610f555760405162461bcd60e51b815260040161091c90612664565b8051610f27906009906020840190612072565b6006546001600160a01b03163314610f925760405162461bcd60e51b815260040161091c90612664565b8051610f27906008906020840190612072565b606060018054610824906127a6565b333214610ff45760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21037b934b3b4b760911b604482015260640161091c565b806000811180156110075750600e548111155b6110235760405162461bcd60e51b815260040161091c90612636565b600d548161103060075490565b61103a9190612718565b11156110585760405162461bcd60e51b815260040161091c90612699565b60105460ff16156110a55760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161091c565b60105462010000900460ff166110fd5760405162461bcd60e51b815260206004820181905260248201527f5075626c69632073616c6520686173206e6f7420737461727465642079657421604482015260640161091c565b81600c5461110b9190612744565b3410156111505760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161091c565b610f273383611ad2565b610f27338383611b3d565b61116f33836117ed565b61118b5760405162461bcd60e51b815260040161091c906126c7565b61119784848484611c0c565b50505050565b6000818152600260205260409020546060906001600160a01b031661121c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161091c565b6010546301000000900460ff166112bf57600a805461123a906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906127a6565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b50505050509050919050565b60006112c9611c3f565b905060008151116112e95760405180602001604052806000815250611317565b806112f384611c4e565b60096040516020016113079392919061248c565b6040516020818303038152906040525b9392505050565b33321461135e5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21037b934b3b4b760911b604482015260640161091c565b826000811180156113715750600e548111155b61138d5760405162461bcd60e51b815260040161091c90612636565b600d548161139a60075490565b6113a49190612718565b11156113c25760405162461bcd60e51b815260040161091c90612699565b60105460ff161561140f5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161091c565b601054610100900460ff166114665760405162461bcd60e51b815260206004820152601760248201527f5072652073616c65206973206e6f742061637469766521000000000000000000604482015260640161091c565b83600b546114749190612744565b3410156114b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161091c565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611533848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506011549150849050611d4c565b6115705760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b604482015260640161091c565b600f543360009081526012602052604090205461158e908790612718565b11156115dc5760405162461bcd60e51b815260206004820152601b60248201527f57686974656c697374206d696e7420636c61696d732075736564210000000000604482015260640161091c565b6115e63386611ad2565b5050505050565b6006546001600160a01b031633146116175760405162461bcd60e51b815260040161091c90612664565b6010805491151563010000000263ff00000019909216919091179055565b60098054610bc4906127a6565b816000811180156116555750600e548111155b6116715760405162461bcd60e51b815260040161091c90612636565b600d548161167e60075490565b6116889190612718565b11156116a65760405162461bcd60e51b815260040161091c90612699565b6006546001600160a01b031633146116d05760405162461bcd60e51b815260040161091c90612664565b610a528284611ad2565b6006546001600160a01b031633146117045760405162461bcd60e51b815260040161091c90612664565b6001600160a01b0381166117695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091c565b610bb481611a80565b60088054610bc4906127a6565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117b482610d87565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161091c565b600061187183610d87565b9050806001600160a01b0316846001600160a01b031614806118ac5750836001600160a01b03166118a1846108a7565b6001600160a01b0316145b806118dc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118f782610d87565b6001600160a01b03161461195b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161091c565b6001600160a01b0382166119bd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6119c860008261177f565b6001600160a01b03831660009081526003602052604081208054600192906119f1908490612763565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a1f908490612718565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526012602052604081208054839290611afa908490612718565b90915550600090505b81811015610a5257611b19600780546001019055565b611b2b83611b2660075490565b611d62565b80611b35816127e1565b915050611b03565b816001600160a01b0316836001600160a01b03161415611b9f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161091c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c178484846118e4565b611c2384848484611d7c565b6111975760405162461bcd60e51b815260040161091c906125e4565b606060088054610824906127a6565b606081611c725750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c9c5780611c86816127e1565b9150611c959050600a83612730565b9150611c76565b60008167ffffffffffffffff811115611cb757611cb7612852565b6040519080825280601f01601f191660200182016040528015611ce1576020820181803683370190505b5090505b84156118dc57611cf6600183612763565b9150611d03600a866127fc565b611d0e906030612718565b60f81b818381518110611d2357611d2361283c565b60200101906001600160f81b031916908160001a905350611d45600a86612730565b9450611ce5565b600082611d598584611e89565b14949350505050565b610f27828260405180602001604052806000815250611efd565b60006001600160a01b0384163b15611e7e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dc0903390899088908890600401612550565b602060405180830381600087803b158015611dda57600080fd5b505af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612358565b60015b611e64573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051611e5c5760405162461bcd60e51b815260040161091c906125e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118dc565b506001949350505050565b600081815b8451811015611ef5576000858281518110611eab57611eab61283c565b60200260200101519050808311611ed15760008381526020829052604090209250611ee2565b600081815260208490526040902092505b5080611eed816127e1565b915050611e8e565b509392505050565b611f078383611f30565b611f146000848484611d7c565b610a525760405162461bcd60e51b815260040161091c906125e4565b6001600160a01b038216611f865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161091c565b6000818152600260205260409020546001600160a01b031615611feb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161091c565b6001600160a01b0382166000908152600360205260408120805460019290612014908490612718565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461207e906127a6565b90600052602060002090601f0160209004810192826120a057600085556120e6565b82601f106120b957805160ff19168380011785556120e6565b828001600101855582156120e6579182015b828111156120e65782518255916020019190600101906120cb565b506120f29291506120f6565b5090565b5b808211156120f257600081556001016120f7565b600067ffffffffffffffff8084111561212657612126612852565b604051601f8501601f19908116603f0116810190828211818310171561214e5761214e612852565b8160405280935085815286868601111561216757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461219857600080fd5b919050565b8035801515811461219857600080fd5b6000602082840312156121bf57600080fd5b61131782612181565b600080604083850312156121db57600080fd5b6121e483612181565b91506121f260208401612181565b90509250929050565b60008060006060848603121561221057600080fd5b61221984612181565b925061222760208501612181565b9150604084013590509250925092565b6000806000806080858703121561224d57600080fd5b61225685612181565b935061226460208601612181565b925060408501359150606085013567ffffffffffffffff81111561228757600080fd5b8501601f8101871361229857600080fd5b6122a78782356020840161210b565b91505092959194509250565b600080604083850312156122c657600080fd5b6122cf83612181565b91506121f26020840161219d565b600080604083850312156122f057600080fd5b6122f983612181565b946020939093013593505050565b60006020828403121561231957600080fd5b6113178261219d565b60006020828403121561233457600080fd5b5035919050565b60006020828403121561234d57600080fd5b813561131781612868565b60006020828403121561236a57600080fd5b815161131781612868565b60006020828403121561238757600080fd5b813567ffffffffffffffff81111561239e57600080fd5b8201601f810184136123af57600080fd5b6118dc8482356020840161210b565b600080604083850312156123d157600080fd5b823591506121f260208401612181565b6000806000604084860312156123f657600080fd5b83359250602084013567ffffffffffffffff8082111561241557600080fd5b818601915086601f83011261242957600080fd5b81358181111561243857600080fd5b8760208260051b850101111561244d57600080fd5b6020830194508093505050509250925092565b6000815180845261247881602086016020860161277a565b601f01601f19169290920160200192915050565b60008451602061249f8285838a0161277a565b8551918401916124b28184848a0161277a565b8554920191600090600181811c90808316806124cf57607f831692505b8583108114156124ed57634e487b7160e01b85526022600452602485fd5b80801561250157600181146125125761253f565b60ff1985168852838801955061253f565b60008b81526020902060005b858110156125375781548a82015290840190880161251e565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258390830184612460565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156125c5578351835292840192918401916001016125a9565b50909695505050505050565b6020815260006113176020830184612460565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561272b5761272b612810565b500190565b60008261273f5761273f612826565b500490565b600081600019048311821515161561275e5761275e612810565b500290565b60008282101561277557612775612810565b500390565b60005b8381101561279557818101518382015260200161277d565b838111156111975750506000910152565b600181811c908216806127ba57607f821691505b602082108114156127db57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127f5576127f5612810565b5060010190565b60008261280b5761280b612826565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bb457600080fdfea264697066735822122036fde769c4a02db3a220f6ad49acc52ef484586140833accb3513c4e76a09ec464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102675760003560e01c80637cb6475911610144578063d5abeb01116100b6578063e985e9c51161007a578063e985e9c5146106fa578063ebf72a5f14610743578063efbd73f414610758578063f2fde38b14610778578063f4ec4cd314610798578063f623d907146107ae57600080fd5b8063d5abeb0114610685578063dd4118701461069b578063de7fcb1d146106ae578063e0a80853146106c4578063e757c17d146106e457600080fd5b806395d89b411161010857806395d89b41146105d0578063a0712d68146105e5578063a22cb465146105f8578063b2c7044e14610618578063b88d4fde14610645578063c87b56dd1461066557600080fd5b80637cb64759146105325780637d331e30146105525780637e2285aa146105725780638d188840146105925780638da5cb5b146105b257600080fd5b806340a76033116101dd5780635aca1bb6116101a15780635aca1bb61461048d5780635c975abb146104ad5780636352211e146104c75780636817c76c146104e757806370a08231146104fd578063715018a61461051d57600080fd5b806340a76033146103eb57806342842e0e14610400578063438b630014610420578063518302271461044d5780635a7adf7f1461046e57600080fd5b806316c38b3c1161022f57806316c38b3c1461033d57806318160ddd1461035d57806323b872dd146103805780632eb4a7ab146103a057806333bc1c5c146103b65780633ccfd60b146103d657600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb5780630d95ccc91461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461233b565b6107c3565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610815565b60405161029891906125d1565b3480156102cf57600080fd5b506102e36102de366004612322565b6108a7565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b6103163660046122dd565b610941565b005b34801561032957600080fd5b5061031b610338366004612307565b610a57565b34801561034957600080fd5b5061031b610358366004612307565b610a9b565b34801561036957600080fd5b50610372610ad8565b604051908152602001610298565b34801561038c57600080fd5b5061031b61039b3660046121fb565b610ae8565b3480156103ac57600080fd5b5061037260115481565b3480156103c257600080fd5b5060105461028c9062010000900460ff1681565b3480156103e257600080fd5b5061031b610b19565b3480156103f757600080fd5b506102b6610bb7565b34801561040c57600080fd5b5061031b61041b3660046121fb565b610c45565b34801561042c57600080fd5b5061044061043b3660046121ad565b610c60565b604051610298919061258d565b34801561045957600080fd5b5060105461028c906301000000900460ff1681565b34801561047a57600080fd5b5060105461028c90610100900460ff1681565b34801561049957600080fd5b5061031b6104a8366004612307565b610d41565b3480156104b957600080fd5b5060105461028c9060ff1681565b3480156104d357600080fd5b506102e36104e2366004612322565b610d87565b3480156104f357600080fd5b50610372600c5481565b34801561050957600080fd5b506103726105183660046121ad565b610dfe565b34801561052957600080fd5b5061031b610e85565b34801561053e57600080fd5b5061031b61054d366004612322565b610ebb565b34801561055e57600080fd5b5061031b61056d366004612375565b610eea565b34801561057e57600080fd5b5061031b61058d366004612375565b610f2b565b34801561059e57600080fd5b5061031b6105ad366004612375565b610f68565b3480156105be57600080fd5b506006546001600160a01b03166102e3565b3480156105dc57600080fd5b506102b6610fa5565b61031b6105f3366004612322565b610fb4565b34801561060457600080fd5b5061031b6106133660046122b3565b61115a565b34801561062457600080fd5b506103726106333660046121ad565b60126020526000908152604090205481565b34801561065157600080fd5b5061031b610660366004612237565b611165565b34801561067157600080fd5b506102b6610680366004612322565b61119d565b34801561069157600080fd5b50610372600d5481565b61031b6106a93660046123e1565b61131e565b3480156106ba57600080fd5b50610372600e5481565b3480156106d057600080fd5b5061031b6106df366004612307565b6115ed565b3480156106f057600080fd5b50610372600b5481565b34801561070657600080fd5b5061028c6107153660046121c8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b506102b6611635565b34801561076457600080fd5b5061031b6107733660046123be565b611642565b34801561078457600080fd5b5061031b6107933660046121ad565b6116da565b3480156107a457600080fd5b50610372600f5481565b3480156107ba57600080fd5b506102b6611772565b60006001600160e01b031982166380ac58cd60e01b14806107f457506001600160e01b03198216635b5e139f60e01b145b8061080f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610824906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610850906127a6565b801561089d5780601f106108725761010080835404028352916020019161089d565b820191906000526020600020905b81548152906001019060200180831161088057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061094c82610d87565b9050806001600160a01b0316836001600160a01b031614156109ba5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161091c565b336001600160a01b03821614806109d657506109d68133610715565b610a485760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161091c565b610a52838361177f565b505050565b6006546001600160a01b03163314610a815760405162461bcd60e51b815260040161091c90612664565b601080549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610ac55760405162461bcd60e51b815260040161091c90612664565b6010805460ff1916911515919091179055565b6000610ae360075490565b905090565b610af233826117ed565b610b0e5760405162461bcd60e51b815260040161091c906126c7565b610a528383836118e4565b6006546001600160a01b03163314610b435760405162461bcd60e51b815260040161091c90612664565b6000610b576006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ba1576040519150601f19603f3d011682016040523d82523d6000602084013e610ba6565b606091505b5050905080610bb457600080fd5b50565b600a8054610bc4906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf0906127a6565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b505050505081565b610a5283838360405180602001604052806000815250611165565b60606000610c6d83610dfe565b905060008167ffffffffffffffff811115610c8a57610c8a612852565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b509050600160005b8381108015610ccc5750600d548211155b15610d37576000610cdc83610d87565b9050866001600160a01b0316816001600160a01b03161415610d245782848381518110610d0b57610d0b61283c565b602090810291909101015281610d20816127e1565b9250505b82610d2e816127e1565b93505050610cbb565b5090949350505050565b6006546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161091c90612664565b60108054911515620100000262ff000019909216919091179055565b6000818152600260205260408120546001600160a01b03168061080f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161091c565b60006001600160a01b038216610e695760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161091c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610eaf5760405162461bcd60e51b815260040161091c90612664565b610eb96000611a80565b565b6006546001600160a01b03163314610ee55760405162461bcd60e51b815260040161091c90612664565b601155565b6006546001600160a01b03163314610f145760405162461bcd60e51b815260040161091c90612664565b8051610f2790600a906020840190612072565b5050565b6006546001600160a01b03163314610f555760405162461bcd60e51b815260040161091c90612664565b8051610f27906009906020840190612072565b6006546001600160a01b03163314610f925760405162461bcd60e51b815260040161091c90612664565b8051610f27906008906020840190612072565b606060018054610824906127a6565b333214610ff45760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21037b934b3b4b760911b604482015260640161091c565b806000811180156110075750600e548111155b6110235760405162461bcd60e51b815260040161091c90612636565b600d548161103060075490565b61103a9190612718565b11156110585760405162461bcd60e51b815260040161091c90612699565b60105460ff16156110a55760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161091c565b60105462010000900460ff166110fd5760405162461bcd60e51b815260206004820181905260248201527f5075626c69632073616c6520686173206e6f7420737461727465642079657421604482015260640161091c565b81600c5461110b9190612744565b3410156111505760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161091c565b610f273383611ad2565b610f27338383611b3d565b61116f33836117ed565b61118b5760405162461bcd60e51b815260040161091c906126c7565b61119784848484611c0c565b50505050565b6000818152600260205260409020546060906001600160a01b031661121c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161091c565b6010546301000000900460ff166112bf57600a805461123a906127a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906127a6565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b50505050509050919050565b60006112c9611c3f565b905060008151116112e95760405180602001604052806000815250611317565b806112f384611c4e565b60096040516020016113079392919061248c565b6040516020818303038152906040525b9392505050565b33321461135e5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21037b934b3b4b760911b604482015260640161091c565b826000811180156113715750600e548111155b61138d5760405162461bcd60e51b815260040161091c90612636565b600d548161139a60075490565b6113a49190612718565b11156113c25760405162461bcd60e51b815260040161091c90612699565b60105460ff161561140f5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b604482015260640161091c565b601054610100900460ff166114665760405162461bcd60e51b815260206004820152601760248201527f5072652073616c65206973206e6f742061637469766521000000000000000000604482015260640161091c565b83600b546114749190612744565b3410156114b95760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015260640161091c565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611533848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506011549150849050611d4c565b6115705760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b604482015260640161091c565b600f543360009081526012602052604090205461158e908790612718565b11156115dc5760405162461bcd60e51b815260206004820152601b60248201527f57686974656c697374206d696e7420636c61696d732075736564210000000000604482015260640161091c565b6115e63386611ad2565b5050505050565b6006546001600160a01b031633146116175760405162461bcd60e51b815260040161091c90612664565b6010805491151563010000000263ff00000019909216919091179055565b60098054610bc4906127a6565b816000811180156116555750600e548111155b6116715760405162461bcd60e51b815260040161091c90612636565b600d548161167e60075490565b6116889190612718565b11156116a65760405162461bcd60e51b815260040161091c90612699565b6006546001600160a01b031633146116d05760405162461bcd60e51b815260040161091c90612664565b610a528284611ad2565b6006546001600160a01b031633146117045760405162461bcd60e51b815260040161091c90612664565b6001600160a01b0381166117695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091c565b610bb481611a80565b60088054610bc4906127a6565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117b482610d87565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161091c565b600061187183610d87565b9050806001600160a01b0316846001600160a01b031614806118ac5750836001600160a01b03166118a1846108a7565b6001600160a01b0316145b806118dc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118f782610d87565b6001600160a01b03161461195b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161091c565b6001600160a01b0382166119bd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6119c860008261177f565b6001600160a01b03831660009081526003602052604081208054600192906119f1908490612763565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a1f908490612718565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526012602052604081208054839290611afa908490612718565b90915550600090505b81811015610a5257611b19600780546001019055565b611b2b83611b2660075490565b611d62565b80611b35816127e1565b915050611b03565b816001600160a01b0316836001600160a01b03161415611b9f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161091c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c178484846118e4565b611c2384848484611d7c565b6111975760405162461bcd60e51b815260040161091c906125e4565b606060088054610824906127a6565b606081611c725750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c9c5780611c86816127e1565b9150611c959050600a83612730565b9150611c76565b60008167ffffffffffffffff811115611cb757611cb7612852565b6040519080825280601f01601f191660200182016040528015611ce1576020820181803683370190505b5090505b84156118dc57611cf6600183612763565b9150611d03600a866127fc565b611d0e906030612718565b60f81b818381518110611d2357611d2361283c565b60200101906001600160f81b031916908160001a905350611d45600a86612730565b9450611ce5565b600082611d598584611e89565b14949350505050565b610f27828260405180602001604052806000815250611efd565b60006001600160a01b0384163b15611e7e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dc0903390899088908890600401612550565b602060405180830381600087803b158015611dda57600080fd5b505af1925050508015611e0a575060408051601f3d908101601f19168201909252611e0791810190612358565b60015b611e64573d808015611e38576040519150601f19603f3d011682016040523d82523d6000602084013e611e3d565b606091505b508051611e5c5760405162461bcd60e51b815260040161091c906125e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118dc565b506001949350505050565b600081815b8451811015611ef5576000858281518110611eab57611eab61283c565b60200260200101519050808311611ed15760008381526020829052604090209250611ee2565b600081815260208490526040902092505b5080611eed816127e1565b915050611e8e565b509392505050565b611f078383611f30565b611f146000848484611d7c565b610a525760405162461bcd60e51b815260040161091c906125e4565b6001600160a01b038216611f865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161091c565b6000818152600260205260409020546001600160a01b031615611feb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161091c565b6001600160a01b0382166000908152600360205260408120805460019290612014908490612718565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461207e906127a6565b90600052602060002090601f0160209004810192826120a057600085556120e6565b82601f106120b957805160ff19168380011785556120e6565b828001600101855582156120e6579182015b828111156120e65782518255916020019190600101906120cb565b506120f29291506120f6565b5090565b5b808211156120f257600081556001016120f7565b600067ffffffffffffffff8084111561212657612126612852565b604051601f8501601f19908116603f0116810190828211818310171561214e5761214e612852565b8160405280935085815286868601111561216757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461219857600080fd5b919050565b8035801515811461219857600080fd5b6000602082840312156121bf57600080fd5b61131782612181565b600080604083850312156121db57600080fd5b6121e483612181565b91506121f260208401612181565b90509250929050565b60008060006060848603121561221057600080fd5b61221984612181565b925061222760208501612181565b9150604084013590509250925092565b6000806000806080858703121561224d57600080fd5b61225685612181565b935061226460208601612181565b925060408501359150606085013567ffffffffffffffff81111561228757600080fd5b8501601f8101871361229857600080fd5b6122a78782356020840161210b565b91505092959194509250565b600080604083850312156122c657600080fd5b6122cf83612181565b91506121f26020840161219d565b600080604083850312156122f057600080fd5b6122f983612181565b946020939093013593505050565b60006020828403121561231957600080fd5b6113178261219d565b60006020828403121561233457600080fd5b5035919050565b60006020828403121561234d57600080fd5b813561131781612868565b60006020828403121561236a57600080fd5b815161131781612868565b60006020828403121561238757600080fd5b813567ffffffffffffffff81111561239e57600080fd5b8201601f810184136123af57600080fd5b6118dc8482356020840161210b565b600080604083850312156123d157600080fd5b823591506121f260208401612181565b6000806000604084860312156123f657600080fd5b83359250602084013567ffffffffffffffff8082111561241557600080fd5b818601915086601f83011261242957600080fd5b81358181111561243857600080fd5b8760208260051b850101111561244d57600080fd5b6020830194508093505050509250925092565b6000815180845261247881602086016020860161277a565b601f01601f19169290920160200192915050565b60008451602061249f8285838a0161277a565b8551918401916124b28184848a0161277a565b8554920191600090600181811c90808316806124cf57607f831692505b8583108114156124ed57634e487b7160e01b85526022600452602485fd5b80801561250157600181146125125761253f565b60ff1985168852838801955061253f565b60008b81526020902060005b858110156125375781548a82015290840190880161251e565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258390830184612460565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156125c5578351835292840192918401916001016125a9565b50909695505050505050565b6020815260006113176020830184612460565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561272b5761272b612810565b500190565b60008261273f5761273f612826565b500490565b600081600019048311821515161561275e5761275e612810565b500290565b60008282101561277557612775612810565b500390565b60005b8381101561279557818101518382015260200161277d565b838111156111975750506000910152565b600181811c908216806127ba57607f821691505b602082108114156127db57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127f5576127f5612810565b5060010190565b60008261280b5761280b612826565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bb457600080fdfea264697066735822122036fde769c4a02db3a220f6ad49acc52ef484586140833accb3513c4e76a09ec464736f6c63430008070033

Deployed Bytecode Sourcemap

41730:5655:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27996:305;;;;;;;;;;-1:-1:-1;27996:305:0;;;;;:::i;:::-;;:::i;:::-;;;9173:14:1;;9166:22;9148:41;;9136:2;9121:18;27996:305:0;;;;;;;;28941:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30500:221::-;;;;;;;;;;-1:-1:-1;30500:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7834:32:1;;;7816:51;;7804:2;7789:18;30500:221:0;7670:203:1;30023:411:0;;;;;;;;;;-1:-1:-1;30023:411:0;;;;;:::i;:::-;;:::i;:::-;;46531:85;;;;;;;;;;-1:-1:-1;46531:85:0;;;;;:::i;:::-;;:::i;46440:83::-;;;;;;;;;;-1:-1:-1;46440:83:0;;;;;:::i;:::-;;:::i;42954:95::-;;;;;;;;;;;;;:::i;:::-;;;9346:25:1;;;9334:2;9319:18;42954:95:0;9200:177:1;31250:339:0;;;;;;;;;;-1:-1:-1;31250:339:0;;;;;:::i;:::-;;:::i;42376:25::-;;;;;;;;;;;;;;;;42300:30;;;;;;;;;;-1:-1:-1;42300:30:0;;;;;;;;;;;46832:147;;;;;;;;;;;;;:::i;41975:29::-;;;;;;;;;;;;;:::i;31660:185::-;;;;;;;;;;-1:-1:-1;31660:185:0;;;;;:::i;:::-;;:::i;44418:743::-;;;;;;;;;;-1:-1:-1;44418:743:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42339:28::-;;;;;;;;;;-1:-1:-1;42339:28:0;;;;;;;;;;;42266:27;;;;;;;;;;-1:-1:-1;42266:27:0;;;;;;;;;;;46624:91;;;;;;;;;;-1:-1:-1;46624:91:0;;;;;:::i;:::-;;:::i;42234:25::-;;;;;;;;;;-1:-1:-1;42234:25:0;;;;;;;;28635:239;;;;;;;;;;-1:-1:-1;28635:239:0;;;;;:::i;:::-;;:::i;42061:38::-;;;;;;;;;;;;;;;;28365:208;;;;;;;;;;-1:-1:-1;28365:208:0;;;;;:::i;:::-;;:::i;8617:103::-;;;;;;;;;;;;;:::i;45937:98::-;;;;;;;;;;-1:-1:-1;45937:98:0;;;;;:::i;:::-;;:::i;46043:153::-;;;;;;;;;;-1:-1:-1;46043:153:0;;;;;:::i;:::-;;:::i;46318:114::-;;;;;;;;;;-1:-1:-1;46318:114:0;;;;;:::i;:::-;;:::i;46204:106::-;;;;;;;;;;-1:-1:-1;46204:106:0;;;;;:::i;:::-;;:::i;7966:87::-;;;;;;;;;;-1:-1:-1;8039:6:0;;-1:-1:-1;;;;;8039:6:0;7966:87;;29110:104;;;;;;;;;;;;;:::i;43057:386::-;;;;;;:::i;:::-;;:::i;30793:155::-;;;;;;;;;;-1:-1:-1;30793:155:0;;;;;:::i;:::-;;:::i;42410:47::-;;;;;;;;;;-1:-1:-1;42410:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;31916:328;;;;;;;;;;-1:-1:-1;31916:328:0;;;;;:::i;:::-;;:::i;45169:733::-;;;;;;;;;;-1:-1:-1;45169:733:0;;;;;:::i;:::-;;:::i;42108:31::-;;;;;;;;;;;;;;;;43451:758;;;;;;:::i;:::-;;:::i;42148:32::-;;;;;;;;;;;;;;;;46723:87;;;;;;;;;;-1:-1:-1;46723:87:0;;;;;:::i;:::-;;:::i;42013:41::-;;;;;;;;;;;;;;;;31019:164;;;;;;;;;;-1:-1:-1;31019:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31140:25:0;;;31116:4;31140:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31019:164;41925:41;;;;;;;;;;;;;:::i;44217:193::-;;;;;;;;;;-1:-1:-1;44217:193:0;;;;;:::i;:::-;;:::i;8875:201::-;;;;;;;;;;-1:-1:-1;8875:201:0;;;;;:::i;:::-;;:::i;42187:38::-;;;;;;;;;;;;;;;;41890:28;;;;;;;;;;;;;:::i;27996:305::-;28098:4;-1:-1:-1;;;;;;28135:40:0;;-1:-1:-1;;;28135:40:0;;:105;;-1:-1:-1;;;;;;;28192:48:0;;-1:-1:-1;;;28192:48:0;28135:105;:158;;;-1:-1:-1;;;;;;;;;;20859:40:0;;;28257:36;28115:178;27996:305;-1:-1:-1;;27996:305:0:o;28941:100::-;28995:13;29028:5;29021:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28941:100;:::o;30500:221::-;30576:7;33843:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33843:16:0;30596:73;;;;-1:-1:-1;;;30596:73:0;;15576:2:1;30596:73:0;;;15558:21:1;15615:2;15595:18;;;15588:30;15654:34;15634:18;;;15627:62;-1:-1:-1;;;15705:18:1;;;15698:42;15757:19;;30596:73:0;;;;;;;;;-1:-1:-1;30689:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30689:24:0;;30500:221::o;30023:411::-;30104:13;30120:23;30135:7;30120:14;:23::i;:::-;30104:39;;30168:5;-1:-1:-1;;;;;30162:11:0;:2;-1:-1:-1;;;;;30162:11:0;;;30154:57;;;;-1:-1:-1;;;30154:57:0;;17118:2:1;30154:57:0;;;17100:21:1;17157:2;17137:18;;;17130:30;17196:34;17176:18;;;17169:62;-1:-1:-1;;;17247:18:1;;;17240:31;17288:19;;30154:57:0;16916:397:1;30154:57:0;6770:10;-1:-1:-1;;;;;30246:21:0;;;;:62;;-1:-1:-1;30271:37:0;30288:5;6770:10;31019:164;:::i;30271:37::-;30224:168;;;;-1:-1:-1;;;30224:168:0;;13969:2:1;30224:168:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:34;14027:18;;;14020:62;14118:26;14098:18;;;14091:54;14162:19;;30224:168:0;13767:420:1;30224:168:0;30405:21;30414:2;30418:7;30405:8;:21::i;:::-;30093:341;30023:411;;:::o;46531:85::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46592:7:::1;:16:::0;;;::::1;;;;-1:-1:-1::0;;46592:16:0;;::::1;::::0;;;::::1;::::0;;46531:85::o;46440:83::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46500:6:::1;:15:::0;;-1:-1:-1;;46500:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46440:83::o;42954:95::-;42998:7;43025:16;:6;3386:14;;3294:114;43025:16;43018:23;;42954:95;:::o;31250:339::-;31445:41;6770:10;31478:7;31445:18;:41::i;:::-;31437:103;;;;-1:-1:-1;;;31437:103:0;;;;;;;:::i;:::-;31553:28;31563:4;31569:2;31573:7;31553:9;:28::i;46832:147::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46881:7:::1;46902;8039:6:::0;;-1:-1:-1;;;;;8039:6:0;;7966:87;46902:7:::1;-1:-1:-1::0;;;;;46894:21:0::1;46923;46894:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46880:69;;;46968:2;46960:11;;;::::0;::::1;;46869:110;46832:147::o:0;41975:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31660:185::-;31798:39;31815:4;31821:2;31825:7;31798:39;;;;;;;;;;;;:16;:39::i;44418:743::-;44505:16;44539:23;44565:17;44575:6;44565:9;:17::i;:::-;44539:43;;44593:30;44640:15;44626:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44626:30:0;-1:-1:-1;44593:63:0;-1:-1:-1;44692:1:0;44667:22;44744:377;44783:15;44765;:33;:64;;;;;44820:9;;44802:14;:27;;44765:64;44744:377;;;44856:25;44884:23;44892:14;44884:7;:23::i;:::-;44856:51;;44949:6;-1:-1:-1;;;;;44928:27:0;:17;-1:-1:-1;;;;;44928:27:0;;44924:153;;;45009:14;44976:13;44990:15;44976:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;45044:17;;;;:::i;:::-;;;;44924:153;45093:16;;;;:::i;:::-;;;;44841:280;44744:377;;;-1:-1:-1;45140:13:0;;44418:743;-1:-1:-1;;;;44418:743:0:o;46624:91::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46688:10:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;46688:19:0;;::::1;::::0;;;::::1;::::0;;46624:91::o;28635:239::-;28707:7;28743:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28743:16:0;28778:19;28770:73;;;;-1:-1:-1;;;28770:73:0;;14805:2:1;28770:73:0;;;14787:21:1;14844:2;14824:18;;;14817:30;14883:34;14863:18;;;14856:62;-1:-1:-1;;;14934:18:1;;;14927:39;14983:19;;28770:73:0;14603:405:1;28365:208:0;28437:7;-1:-1:-1;;;;;28465:19:0;;28457:74;;;;-1:-1:-1;;;28457:74:0;;14394:2:1;28457:74:0;;;14376:21:1;14433:2;14413:18;;;14406:30;14472:34;14452:18;;;14445:62;-1:-1:-1;;;14523:18:1;;;14516:40;14573:19;;28457:74:0;14192:406:1;28457:74:0;-1:-1:-1;;;;;;28549:16:0;;;;;:9;:16;;;;;;;28365:208::o;8617:103::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;8682:30:::1;8709:1;8682:18;:30::i;:::-;8617:103::o:0;45937:98::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46006:10:::1;:21:::0;45937:98::o;46043:153::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46154:34;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46043:153:::0;:::o;46318:114::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46394:30;;::::1;::::0;:17:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;46204:106::-:0;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46280:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;29110:104::-:0;29166:13;29199:7;29192:14;;;;;:::i;43057:386::-;42884:10;42898:9;42884:23;42876:50;;;;-1:-1:-1;;;42876:50:0;;18648:2:1;42876:50:0;;;18630:21:1;18687:2;18667:18;;;18660:30;-1:-1:-1;;;18706:18:1;;;18699:44;18760:18;;42876:50:0;18446:338:1;42876:50:0;43171:11:::1;42609:1;42595:11;:15;:46;;;;;42629:12;;42614:11;:27;;42595:46;42573:116;;;;-1:-1:-1::0;;;42573:116:0::1;;;;;;;:::i;:::-;42756:9;;42741:11;42722:16;:6;3386:14:::0;;3294:114;42722:16:::1;:30;;;;:::i;:::-;:43;;42700:113;;;;-1:-1:-1::0;;;42700:113:0::1;;;;;;;:::i;:::-;43209:6:::2;::::0;::::2;;43208:7;43200:43;;;::::0;-1:-1:-1;;;43200:43:0;;16350:2:1;43200:43:0::2;::::0;::::2;16332:21:1::0;16389:2;16369:18;;;16362:30;-1:-1:-1;;;16408:18:1;;;16401:53;16471:18;;43200:43:0::2;16148:347:1::0;43200:43:0::2;43262:10;::::0;;;::::2;;;43254:55;;;::::0;-1:-1:-1;;;43254:55:0;;17520:2:1;43254:55:0::2;::::0;::::2;17502:21:1::0;;;17539:18;;;17532:30;17598:34;17578:18;;;17571:62;17650:18;;43254:55:0::2;17318:356:1::0;43254:55:0::2;43353:11;43341:9;;:23;;;;:::i;:::-;43328:9;:36;;43320:68;;;::::0;-1:-1:-1;;;43320:68:0;;18991:2:1;43320:68:0::2;::::0;::::2;18973:21:1::0;19030:2;19010:18;;;19003:30;-1:-1:-1;;;19049:18:1;;;19042:49;19108:18;;43320:68:0::2;18789:343:1::0;43320:68:0::2;43401:34;43411:10;43423:11;43401:9;:34::i;30793:155::-:0;30888:52;6770:10;30921:8;30931;30888:18;:52::i;31916:328::-;32091:41;6770:10;32124:7;32091:18;:41::i;:::-;32083:103;;;;-1:-1:-1;;;32083:103:0;;;;;;;:::i;:::-;32197:39;32211:4;32217:2;32221:7;32230:5;32197:13;:39::i;:::-;31916:328;;;;:::o;45169:733::-;33819:4;33843:16;;;:7;:16;;;;;;45288:13;;-1:-1:-1;;;;;33843:16:0;45319:114;;;;-1:-1:-1;;;45319:114:0;;16702:2:1;45319:114:0;;;16684:21:1;16741:2;16721:18;;;16714:30;16780:34;16760:18;;;16753:62;-1:-1:-1;;;16831:18:1;;;16824:45;16886:19;;45319:114:0;16500:411:1;45319:114:0;45450:8;;;;;;;45446:72;;45491:15;45484:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45169:733;;;:::o;45446:72::-;45530:28;45561:10;:8;:10::i;:::-;45530:41;;45633:1;45608:14;45602:28;:32;:292;;;;;;;;;;;;;;;;;45726:14;45767:19;:8;:17;:19::i;:::-;45813:17;45683:170;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45602:292;45582:312;45169:733;-1:-1:-1;;;45169:733:0:o;43451:758::-;42884:10;42898:9;42884:23;42876:50;;;;-1:-1:-1;;;42876:50:0;;18648:2:1;42876:50:0;;;18630:21:1;18687:2;18667:18;;;18660:30;-1:-1:-1;;;18706:18:1;;;18699:44;18760:18;;42876:50:0;18446:338:1;42876:50:0;43607:11:::1;42609:1;42595:11;:15;:46;;;;;42629:12;;42614:11;:27;;42595:46;42573:116;;;;-1:-1:-1::0;;;42573:116:0::1;;;;;;;:::i;:::-;42756:9;;42741:11;42722:16;:6;3386:14:::0;;3294:114;42722:16:::1;:30;;;;:::i;:::-;:43;;42700:113;;;;-1:-1:-1::0;;;42700:113:0::1;;;;;;;:::i;:::-;43645:6:::2;::::0;::::2;;43644:7;43636:43;;;::::0;-1:-1:-1;;;43636:43:0;;16350:2:1;43636:43:0::2;::::0;::::2;16332:21:1::0;16389:2;16369:18;;;16362:30;-1:-1:-1;;;16408:18:1;;;16401:53;16471:18;;43636:43:0::2;16148:347:1::0;43636:43:0::2;43698:7;::::0;::::2;::::0;::::2;;;43690:43;;;::::0;-1:-1:-1;;;43690:43:0;;10164:2:1;43690:43:0::2;::::0;::::2;10146:21:1::0;10203:2;10183:18;;;10176:30;10242:25;10222:18;;;10215:53;10285:18;;43690:43:0::2;9962:347:1::0;43690:43:0::2;43780:11;43765:12;;:26;;;;:::i;:::-;43752:9;:39;;43744:71;;;::::0;-1:-1:-1;;;43744:71:0;;18991:2:1;43744:71:0::2;::::0;::::2;18973:21:1::0;19030:2;19010:18;;;19003:30;-1:-1:-1;;;19049:18:1;;;19042:49;19108:18;;43744:71:0::2;18789:343:1::0;43744:71:0::2;43851:28;::::0;-1:-1:-1;;43868:10:0::2;5843:2:1::0;5839:15;5835:53;43851:28:0::2;::::0;::::2;5823:66:1::0;43826:12:0::2;::::0;5905::1;;43851:28:0::2;;;;;;;;;;;;43841:39;;;;;;43826:54;;43913:50;43932:12;;43913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;43946:10:0::2;::::0;;-1:-1:-1;43958:4:0;;-1:-1:-1;43913:18:0::2;:50::i;:::-;43891:114;;;::::0;-1:-1:-1;;;43891:114:0;;10516:2:1;43891:114:0::2;::::0;::::2;10498:21:1::0;10555:2;10535:18;;;10528:30;-1:-1:-1;;;10574:18:1;;;10567:44;10628:18;;43891:114:0::2;10314:338:1::0;43891:114:0::2;44080:19;::::0;44051:10:::2;44038:24;::::0;;;:12:::2;:24;::::0;;;;;:38:::2;::::0;44065:11;;44038:38:::2;:::i;:::-;:61;;44016:138;;;::::0;-1:-1:-1;;;44016:138:0;;9808:2:1;44016:138:0::2;::::0;::::2;9790:21:1::0;9847:2;9827:18;;;9820:30;9886:29;9866:18;;;9859:57;9933:18;;44016:138:0::2;9606:351:1::0;44016:138:0::2;44167:34;44177:10;44189:11;44167:9;:34::i;:::-;43625:584;42937:1:::1;43451:758:::0;;;:::o;46723:87::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;46785:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;46785:17:0;;::::1;::::0;;;::::1;::::0;;46723:87::o;41925:41::-;;;;;;;:::i;44217:193::-;44321:11;42609:1;42595:11;:15;:46;;;;;42629:12;;42614:11;:27;;42595:46;42573:116;;;;-1:-1:-1;;;42573:116:0;;;;;;;:::i;:::-;42756:9;;42741:11;42722:16;:6;3386:14;;3294:114;42722:16;:30;;;;:::i;:::-;:43;;42700:113;;;;-1:-1:-1;;;42700:113:0;;;;;;;:::i;:::-;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23:::1;8178:68;;;;-1:-1:-1::0;;;8178:68:0::1;;;;;;;:::i;:::-;44369:33:::2;44379:9;44390:11;44369:9;:33::i;8875:201::-:0;8039:6;;-1:-1:-1;;;;;8039:6:0;6770:10;8186:23;8178:68;;;;-1:-1:-1;;;8178:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8964:22:0;::::1;8956:73;;;::::0;-1:-1:-1;;;8956:73:0;;11278:2:1;8956:73:0::1;::::0;::::1;11260:21:1::0;11317:2;11297:18;;;11290:30;11356:34;11336:18;;;11329:62;-1:-1:-1;;;11407:18:1;;;11400:36;11453:19;;8956:73:0::1;11076:402:1::0;8956:73:0::1;9040:28;9059:8;9040:18;:28::i;41890:::-:0;;;;;;;:::i;37900:174::-;37975:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;37975:29:0;-1:-1:-1;;;;;37975:29:0;;;;;;;;:24;;38029:23;37975:24;38029:14;:23::i;:::-;-1:-1:-1;;;;;38020:46:0;;;;;;;;;;;37900:174;;:::o;34048:348::-;34141:4;33843:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33843:16:0;34158:73;;;;-1:-1:-1;;;34158:73:0;;13556:2:1;34158:73:0;;;13538:21:1;13595:2;13575:18;;;13568:30;13634:34;13614:18;;;13607:62;-1:-1:-1;;;13685:18:1;;;13678:42;13737:19;;34158:73:0;13354:408:1;34158:73:0;34242:13;34258:23;34273:7;34258:14;:23::i;:::-;34242:39;;34311:5;-1:-1:-1;;;;;34300:16:0;:7;-1:-1:-1;;;;;34300:16:0;;:51;;;;34344:7;-1:-1:-1;;;;;34320:31:0;:20;34332:7;34320:11;:20::i;:::-;-1:-1:-1;;;;;34320:31:0;;34300:51;:87;;;-1:-1:-1;;;;;;31140:25:0;;;31116:4;31140:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;34355:32;34292:96;34048:348;-1:-1:-1;;;;34048:348:0:o;37157:625::-;37316:4;-1:-1:-1;;;;;37289:31:0;:23;37304:7;37289:14;:23::i;:::-;-1:-1:-1;;;;;37289:31:0;;37281:81;;;;-1:-1:-1;;;37281:81:0;;11685:2:1;37281:81:0;;;11667:21:1;11724:2;11704:18;;;11697:30;11763:34;11743:18;;;11736:62;-1:-1:-1;;;11814:18:1;;;11807:35;11859:19;;37281:81:0;11483:401:1;37281:81:0;-1:-1:-1;;;;;37381:16:0;;37373:65;;;;-1:-1:-1;;;37373:65:0;;12797:2:1;37373:65:0;;;12779:21:1;12836:2;12816:18;;;12809:30;12875:34;12855:18;;;12848:62;-1:-1:-1;;;12926:18:1;;;12919:34;12970:19;;37373:65:0;12595:400:1;37373:65:0;37555:29;37572:1;37576:7;37555:8;:29::i;:::-;-1:-1:-1;;;;;37597:15:0;;;;;;:9;:15;;;;;:20;;37616:1;;37597:15;:20;;37616:1;;37597:20;:::i;:::-;;;;-1:-1:-1;;;;;;;37628:13:0;;;;;;:9;:13;;;;;:18;;37645:1;;37628:13;:18;;37645:1;;37628:18;:::i;:::-;;;;-1:-1:-1;;37657:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37657:21:0;-1:-1:-1;;;;;37657:21:0;;;;;;;;;37696:27;;37657:16;;37696:27;;;;;;;30093:341;30023:411;;:::o;9236:191::-;9329:6;;;-1:-1:-1;;;;;9346:17:0;;;-1:-1:-1;;;;;;9346:17:0;;;;;;;9379:40;;9329:6;;;9346:17;9329:6;;9379:40;;9310:16;;9379:40;9299:128;9236:191;:::o;46987:275::-;-1:-1:-1;;;;;47066:23:0;;;;;;:12;:23;;;;;:38;;47093:11;;47066:23;:38;;47093:11;;47066:38;:::i;:::-;;;;-1:-1:-1;47120:9:0;;-1:-1:-1;47115:140:0;47139:11;47135:1;:15;47115:140;;;47172:18;:6;3505:19;;3523:1;3505:19;;;3416:127;47172:18;47205:38;47215:9;47226:16;:6;3386:14;;3294:114;47226:16;47205:9;:38::i;:::-;47152:3;;;;:::i;:::-;;;;47115:140;;38216:315;38371:8;-1:-1:-1;;;;;38362:17:0;:5;-1:-1:-1;;;;;38362:17:0;;;38354:55;;;;-1:-1:-1;;;38354:55:0;;13202:2:1;38354:55:0;;;13184:21:1;13241:2;13221:18;;;13214:30;13280:27;13260:18;;;13253:55;13325:18;;38354:55:0;13000:349:1;38354:55:0;-1:-1:-1;;;;;38420:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38420:46:0;;;;;;;;;;38482:41;;9148::1;;;38482::0;;9121:18:1;38482:41:0;;;;;;;38216:315;;;:::o;33126:::-;33283:28;33293:4;33299:2;33303:7;33283:9;:28::i;:::-;33330:48;33353:4;33359:2;33363:7;33372:5;33330:22;:48::i;:::-;33322:111;;;;-1:-1:-1;;;33322:111:0;;;;;;;:::i;47270:110::-;47330:13;47363:9;47356:16;;;;;:::i;4252:723::-;4308:13;4529:10;4525:53;;-1:-1:-1;;4556:10:0;;;;;;;;;;;;-1:-1:-1;;;4556:10:0;;;;;4252:723::o;4525:53::-;4603:5;4588:12;4644:78;4651:9;;4644:78;;4677:8;;;;:::i;:::-;;-1:-1:-1;4700:10:0;;-1:-1:-1;4708:2:0;4700:10;;:::i;:::-;;;4644:78;;;4732:19;4764:6;4754:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4754:17:0;;4732:39;;4782:154;4789:10;;4782:154;;4816:11;4826:1;4816:11;;:::i;:::-;;-1:-1:-1;4885:10:0;4893:2;4885:5;:10;:::i;:::-;4872:24;;:2;:24;:::i;:::-;4859:39;;4842:6;4849;4842:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4842:56:0;;;;;;;;-1:-1:-1;4913:11:0;4922:2;4913:11;;:::i;:::-;;;4782:154;;956:190;1081:4;1134;1105:25;1118:5;1125:4;1105:12;:25::i;:::-;:33;;956:190;-1:-1:-1;;;;956:190:0:o;34738:110::-;34814:26;34824:2;34828:7;34814:26;;;;;;;;;;;;:9;:26::i;39096:799::-;39251:4;-1:-1:-1;;;;;39272:13:0;;10962:19;:23;39268:620;;39308:72;;-1:-1:-1;;;39308:72:0;;-1:-1:-1;;;;;39308:36:0;;;;;:72;;6770:10;;39359:4;;39365:7;;39374:5;;39308:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39308:72:0;;;;;;;;-1:-1:-1;;39308:72:0;;;;;;;;;;;;:::i;:::-;;;39304:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39550:13:0;;39546:272;;39593:60;;-1:-1:-1;;;39593:60:0;;;;;;;:::i;39546:272::-;39768:6;39762:13;39753:6;39749:2;39745:15;39738:38;39304:529;-1:-1:-1;;;;;;39431:51:0;-1:-1:-1;;;39431:51:0;;-1:-1:-1;39424:58:0;;39268:620;-1:-1:-1;39872:4:0;39096:799;;;;;;:::o;1508:675::-;1591:7;1634:4;1591:7;1649:497;1673:5;:12;1669:1;:16;1649:497;;;1707:20;1730:5;1736:1;1730:8;;;;;;;;:::i;:::-;;;;;;;1707:31;;1773:12;1757;:28;1753:382;;2259:13;2309:15;;;2345:4;2338:15;;;2392:4;2376:21;;1885:57;;1753:382;;;2259:13;2309:15;;;2345:4;2338:15;;;2392:4;2376:21;;2062:57;;1753:382;-1:-1:-1;1687:3:0;;;;:::i;:::-;;;;1649:497;;;-1:-1:-1;2163:12:0;1508:675;-1:-1:-1;;;1508:675:0:o;35075:321::-;35205:18;35211:2;35215:7;35205:5;:18::i;:::-;35256:54;35287:1;35291:2;35295:7;35304:5;35256:22;:54::i;:::-;35234:154;;;;-1:-1:-1;;;35234:154:0;;;;;;;:::i;35732:439::-;-1:-1:-1;;;;;35812:16:0;;35804:61;;;;-1:-1:-1;;;35804:61:0;;15215:2:1;35804:61:0;;;15197:21:1;;;15234:18;;;15227:30;15293:34;15273:18;;;15266:62;15345:18;;35804:61:0;15013:356:1;35804:61:0;33819:4;33843:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33843:16:0;:30;35876:58;;;;-1:-1:-1;;;35876:58:0;;12091:2:1;35876:58:0;;;12073:21:1;12130:2;12110:18;;;12103:30;12169;12149:18;;;12142:58;12217:18;;35876:58:0;11889:352:1;35876:58:0;-1:-1:-1;;;;;36005:13:0;;;;;;:9;:13;;;;;:18;;36022:1;;36005:13;:18;;36022:1;;36005:18;:::i;:::-;;;;-1:-1:-1;;36034:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36034:21:0;-1:-1:-1;;;;;36034:21:0;;;;;;;;36073:33;;36034:16;;;36073:33;;36034:16;;36073:33;46154:34:::1;46043:153:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:180::-;3215:6;3268:2;3256:9;3247:7;3243:23;3239:32;3236:52;;;3284:1;3281;3274:12;3236:52;-1:-1:-1;3307:23:1;;3156:180;-1:-1:-1;3156:180:1:o;3341:245::-;3399:6;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;3507:9;3494:23;3526:30;3550:5;3526:30;:::i;3591:249::-;3660:6;3713:2;3701:9;3692:7;3688:23;3684:32;3681:52;;;3729:1;3726;3719:12;3681:52;3761:9;3755:16;3780:30;3804:5;3780:30;:::i;3845:450::-;3914:6;3967:2;3955:9;3946:7;3942:23;3938:32;3935:52;;;3983:1;3980;3973:12;3935:52;4023:9;4010:23;4056:18;4048:6;4045:30;4042:50;;;4088:1;4085;4078:12;4042:50;4111:22;;4164:4;4156:13;;4152:27;-1:-1:-1;4142:55:1;;4193:1;4190;4183:12;4142:55;4216:73;4281:7;4276:2;4263:16;4258:2;4254;4250:11;4216:73;:::i;4485:254::-;4553:6;4561;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4666:9;4653:23;4643:33;;4695:38;4729:2;4718:9;4714:18;4695:38;:::i;4744:683::-;4839:6;4847;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4960:9;4947:23;4937:33;;5021:2;5010:9;5006:18;4993:32;5044:18;5085:2;5077:6;5074:14;5071:34;;;5101:1;5098;5091:12;5071:34;5139:6;5128:9;5124:22;5114:32;;5184:7;5177:4;5173:2;5169:13;5165:27;5155:55;;5206:1;5203;5196:12;5155:55;5246:2;5233:16;5272:2;5264:6;5261:14;5258:34;;;5288:1;5285;5278:12;5258:34;5341:7;5336:2;5326:6;5323:1;5319:14;5315:2;5311:23;5307:32;5304:45;5301:65;;;5362:1;5359;5352:12;5301:65;5393:2;5389;5385:11;5375:21;;5415:6;5405:16;;;;;4744:683;;;;;:::o;5432:257::-;5473:3;5511:5;5505:12;5538:6;5533:3;5526:19;5554:63;5610:6;5603:4;5598:3;5594:14;5587:4;5580:5;5576:16;5554:63;:::i;:::-;5671:2;5650:15;-1:-1:-1;;5646:29:1;5637:39;;;;5678:4;5633:50;;5432:257;-1:-1:-1;;5432:257:1:o;5928:1527::-;6152:3;6190:6;6184:13;6216:4;6229:51;6273:6;6268:3;6263:2;6255:6;6251:15;6229:51;:::i;:::-;6343:13;;6302:16;;;;6365:55;6343:13;6302:16;6387:15;;;6365:55;:::i;:::-;6509:13;;6442:20;;;6482:1;;6569;6591:18;;;;6644;;;;6671:93;;6749:4;6739:8;6735:19;6723:31;;6671:93;6812:2;6802:8;6799:16;6779:18;6776:40;6773:167;;;-1:-1:-1;;;6839:33:1;;6895:4;6892:1;6885:15;6925:4;6846:3;6913:17;6773:167;6956:18;6983:110;;;;7107:1;7102:328;;;;6949:481;;6983:110;-1:-1:-1;;7018:24:1;;7004:39;;7063:20;;;;-1:-1:-1;6983:110:1;;7102:328;19392:1;19385:14;;;19429:4;19416:18;;7197:1;7211:169;7225:8;7222:1;7219:15;7211:169;;;7307:14;;7292:13;;;7285:37;7350:16;;;;7242:10;;7211:169;;;7215:3;;7411:8;7404:5;7400:20;7393:27;;6949:481;-1:-1:-1;7446:3:1;;5928:1527;-1:-1:-1;;;;;;;;;;;5928:1527:1:o;7878:488::-;-1:-1:-1;;;;;8147:15:1;;;8129:34;;8199:15;;8194:2;8179:18;;8172:43;8246:2;8231:18;;8224:34;;;8294:3;8289:2;8274:18;;8267:31;;;8072:4;;8315:45;;8340:19;;8332:6;8315:45;:::i;:::-;8307:53;7878:488;-1:-1:-1;;;;;;7878:488:1:o;8371:632::-;8542:2;8594:21;;;8664:13;;8567:18;;;8686:22;;;8513:4;;8542:2;8765:15;;;;8739:2;8724:18;;;8513:4;8808:169;8822:6;8819:1;8816:13;8808:169;;;8883:13;;8871:26;;8952:15;;;;8917:12;;;;8844:1;8837:9;8808:169;;;-1:-1:-1;8994:3:1;;8371:632;-1:-1:-1;;;;;;8371:632:1:o;9382:219::-;9531:2;9520:9;9513:21;9494:4;9551:44;9591:2;9580:9;9576:18;9568:6;9551:44;:::i;10657:414::-;10859:2;10841:21;;;10898:2;10878:18;;;10871:30;10937:34;10932:2;10917:18;;10910:62;-1:-1:-1;;;11003:2:1;10988:18;;10981:48;11061:3;11046:19;;10657:414::o;12246:344::-;12448:2;12430:21;;;12487:2;12467:18;;;12460:30;-1:-1:-1;;;12521:2:1;12506:18;;12499:50;12581:2;12566:18;;12246:344::o;15787:356::-;15989:2;15971:21;;;16008:18;;;16001:30;16067:34;16062:2;16047:18;;16040:62;16134:2;16119:18;;15787:356::o;17679:344::-;17881:2;17863:21;;;17920:2;17900:18;;;17893:30;-1:-1:-1;;;17954:2:1;17939:18;;17932:50;18014:2;17999:18;;17679:344::o;18028:413::-;18230:2;18212:21;;;18269:2;18249:18;;;18242:30;18308:34;18303:2;18288:18;;18281:62;-1:-1:-1;;;18374:2:1;18359:18;;18352:47;18431:3;18416:19;;18028:413::o;19445:128::-;19485:3;19516:1;19512:6;19509:1;19506:13;19503:39;;;19522:18;;:::i;:::-;-1:-1:-1;19558:9:1;;19445:128::o;19578:120::-;19618:1;19644;19634:35;;19649:18;;:::i;:::-;-1:-1:-1;19683:9:1;;19578:120::o;19703:168::-;19743:7;19809:1;19805;19801:6;19797:14;19794:1;19791:21;19786:1;19779:9;19772:17;19768:45;19765:71;;;19816:18;;:::i;:::-;-1:-1:-1;19856:9:1;;19703:168::o;19876:125::-;19916:4;19944:1;19941;19938:8;19935:34;;;19949:18;;:::i;:::-;-1:-1:-1;19986:9:1;;19876:125::o;20006:258::-;20078:1;20088:113;20102:6;20099:1;20096:13;20088:113;;;20178:11;;;20172:18;20159:11;;;20152:39;20124:2;20117:10;20088:113;;;20219:6;20216:1;20213:13;20210:48;;;-1:-1:-1;;20254:1:1;20236:16;;20229:27;20006:258::o;20269:380::-;20348:1;20344:12;;;;20391;;;20412:61;;20466:4;20458:6;20454:17;20444:27;;20412:61;20519:2;20511:6;20508:14;20488:18;20485:38;20482:161;;;20565:10;20560:3;20556:20;20553:1;20546:31;20600:4;20597:1;20590:15;20628:4;20625:1;20618:15;20482:161;;20269:380;;;:::o;20654:135::-;20693:3;-1:-1:-1;;20714:17:1;;20711:43;;;20734:18;;:::i;:::-;-1:-1:-1;20781:1:1;20770:13;;20654:135::o;20794:112::-;20826:1;20852;20842:35;;20857:18;;:::i;:::-;-1:-1:-1;20891:9:1;;20794:112::o;20911:127::-;20972:10;20967:3;20963:20;20960:1;20953:31;21003:4;21000:1;20993:15;21027:4;21024:1;21017:15;21043:127;21104:10;21099:3;21095:20;21092:1;21085:31;21135:4;21132:1;21125:15;21159:4;21156:1;21149:15;21175:127;21236:10;21231:3;21227:20;21224:1;21217:31;21267:4;21264:1;21257:15;21291:4;21288:1;21281:15;21307:127;21368:10;21363:3;21359:20;21356:1;21349:31;21399:4;21396:1;21389:15;21423:4;21420:1;21413:15;21439:131;-1:-1:-1;;;;;;21513:32:1;;21503:43;;21493:71;;21560:1;21557;21550:12

Swarm Source

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