ETH Price: $3,087.48 (+0.84%)
Gas: 5 Gwei

Token

Meta Sneakers (SNEAKERS)
 

Overview

Max Total Supply

888 SNEAKERS

Holders

389

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
themoneyleg.eth
Balance
1 SNEAKERS
0x490545ce76B4455cE5941012978035aF4cea745e
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:
MetaSneaker

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-02-16
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
/**
 * @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/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
/**
 * @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)
/**
 * @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)
/**
 * @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)

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

/**
 * @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/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
  /**
   * @dev Returns the total amount of tokens stored by the contract.
   */
  function totalSupply() external view returns (uint256);
  /**
   * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
   * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
  /**
   * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
   * Use along with {totalSupply} to enumerate all tokens.
   */
  function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

/**
 * @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/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @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/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)


/**
 * @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: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
  // Mapping from owner to list of owned token IDs
  mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) private _ownedTokensIndex;
  // Array with all token ids, used for enumeration
  uint256[] private _allTokens;
  // Mapping from token id to position in the allTokens array
  mapping(uint256 => uint256) private _allTokensIndex;
  /**
   * @dev See {IERC165-supportsInterface}.
   */
  function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
    return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
  }
  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
    require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
    return _ownedTokens[owner][index];
  }
  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view virtual override returns (uint256) {
    return _allTokens.length;
  }
  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
    require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
    return _allTokens[index];
  }
  /**
   * @dev Hook that is called before any token transfer. This includes minting
   * and burning.
   *
   * Calling conditions:
   *
   * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
   * transferred to `to`.
   * - When `from` is zero, `tokenId` will be minted for `to`.
   * - When `to` is zero, ``from``'s `tokenId` will be burned.
   * - `from` cannot be the zero address.
   * - `to` cannot be the zero address.
   *
   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
   */
  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual override {
    super._beforeTokenTransfer(from, to, tokenId);
    if (from == address(0)) {
      _addTokenToAllTokensEnumeration(tokenId);
    } else if (from != to) {
      _removeTokenFromOwnerEnumeration(from, tokenId);
    }
    if (to == address(0)) {
      _removeTokenFromAllTokensEnumeration(tokenId);
    } else if (to != from) {
      _addTokenToOwnerEnumeration(to, tokenId);
    }
  }
  /**
   * @dev Private function to add a token to this extension's ownership-tracking data structures.
   * @param to address representing the new owner of the given token ID
   * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
   */
  function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
    uint256 length = ERC721.balanceOf(to);
    _ownedTokens[to][length] = tokenId;
    _ownedTokensIndex[tokenId] = length;
  }
  /**
   * @dev Private function to add a token to this extension's token tracking data structures.
   * @param tokenId uint256 ID of the token to be added to the tokens list
   */
  function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
    _allTokensIndex[tokenId] = _allTokens.length;
    _allTokens.push(tokenId);
  }
  /**
   * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
   * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
   * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
   * This has O(1) time complexity, but alters the order of the _ownedTokens array.
   * @param from address representing the previous owner of the given token ID
   * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
   */
  function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
    // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
    // then delete the last slot (swap and pop).
    uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
    uint256 tokenIndex = _ownedTokensIndex[tokenId];
    // When the token to delete is the last token, the swap operation is unnecessary
    if (tokenIndex != lastTokenIndex) {
      uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
      _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
      _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
    }
    // This also deletes the contents at the last position of the array
    delete _ownedTokensIndex[tokenId];
    delete _ownedTokens[from][lastTokenIndex];
  }
  /**
   * @dev Private function to remove a token from this extension's token tracking data structures.
   * This has O(1) time complexity, but alters the order of the _allTokens array.
   * @param tokenId uint256 ID of the token to be removed from the tokens list
   */
  function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
    // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
    // then delete the last slot (swap and pop).
    uint256 lastTokenIndex = _allTokens.length - 1;
    uint256 tokenIndex = _allTokensIndex[tokenId];
    // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
    // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
    // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
    uint256 lastTokenId = _allTokens[lastTokenIndex];
    _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
    _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
    // This also deletes the contents at the last position of the array
    delete _allTokensIndex[tokenId];
    _allTokens.pop();
  }
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

/**
 * @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);
  }
}
// MetaSneaker.sol
contract MetaSneaker is ERC721Enumerable, Ownable {
  uint256 public maxSupply = 4000;
  bool public whiteListSaleStatus = false;
  bool public publicSaleStatus = false;
  bool public revealStatus = false;
  uint256 public whiteListPrice = 0.22 ether;
  uint256 public publicPrice = 0.25 ether;
  uint256 public mintTxLimit = 5;
  string public baseUri = "";
  string public contractURI = "https://gateway.pinata.cloud/ipfs/QmcCuXWqPyFtsPUy5zP5cxHLzJHZd9HPXQtQvXVWkc27oc";
  string public beforeRevealURI;
  mapping (address => bool) private _whiteList;
  uint256 private _airdropCount; // default 0;
  mapping (uint256 => address) private _airdropList; // airdrop_id => address, airdrop_id's min value is 1
  mapping (address => uint256) private _airdropAmount;
  event TokensMinted(address receiver, uint256 numOfToken);
  modifier onlyWhiteListed {
    require(_whiteList[msg.sender], "not_whitelisted");
    _;
  }
  modifier onlyAirdropped {
    require(getAirdroppedTokens(msg.sender) > 0, "not_airdropped");
    _;
  }
  constructor() ERC721("Meta Sneakers", "SNEAKERS") {}
  function _baseURI() internal view override returns (string memory) {
    return baseUri;
  }
  function _mintToken(address to, uint256 numOfToken) internal {
    require(numOfToken > 0, "zero_amount");
    require(numOfToken <= mintTxLimit, "exceed_tx_limit");
    require((totalSupply() + numOfToken) <= maxSupply, "exceed_max_supply");
    require(to != address(0), "invalid_to_address");
    for (uint256 i=0; i<numOfToken; i++) {
      _safeMint(to, totalSupply() + 1);
    }
    emit TokensMinted(to, numOfToken);
  }
  function airdrop() external onlyAirdropped {
    _mintToken(msg.sender, getAirdroppedTokens(msg.sender));
  }
  function whiteListSale(uint256 numOfToken) external payable onlyWhiteListed {
    require(whiteListPrice * numOfToken <= msg.value, "insuf_price");
    require(whiteListSaleStatus, "not_sale");
    _mintToken(msg.sender, numOfToken);
  }
  function publicSale(uint256 numOfToken) external payable {
    require(publicPrice * numOfToken <= msg.value, "insuf_price");
    require(publicSaleStatus, "not_sale");
    _mintToken(msg.sender, numOfToken);
  }
  function tokenURI(uint256 tokenId) public  view override returns (string memory) {
    require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
    if (revealStatus){
      return super.tokenURI(tokenId);
    } else {
      return beforeRevealURI;
    }
  }
  function walletOfOwner(address walletAddress) public view returns (uint256[] memory) {
    uint256 tokenCount = balanceOf(walletAddress);
    uint256[] memory tokenIds = new uint256[](tokenCount);
    for (uint256 i=0; i < tokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(walletAddress, i);
    }
    return tokenIds;
  }
  function isWhitelisted(address addr) public view returns(bool){
    return _whiteList[addr];
  }
  function totalAirdrops() public view returns(uint256) {
    return _airdropCount;
  }
  function getAirdroppedTokens(address addr) public view returns(uint256) {
    uint256 airdrop_id;
    uint256 airdrop_amount = 0;
    for (uint256 i=0; i < _airdropCount; i++) {
      airdrop_id = i + 1;
      if (_airdropList[airdrop_id] == addr) {
        airdrop_amount = _airdropAmount[addr];
        break;
      }
    }
    return airdrop_amount;
  }
  /**
   * Owner methods
  **/
  function adminSetMaxSupply(uint256 newSupply) external onlyOwner {
    maxSupply = newSupply;
  }
  function adminSetBaseURI(string memory newUri) external onlyOwner {
    baseUri = newUri;
  }
  function adminSetMintTxLimit(uint256 newLimit) external onlyOwner {
    mintTxLimit = newLimit;
  }
  function adminSetWhitelistSaleState(bool newStatus) external onlyOwner {
    whiteListSaleStatus = newStatus;
  }
  function adminSetPublicSaleState(bool newStatus) external onlyOwner {
    publicSaleStatus = newStatus;
  }
  function adminSetWhitelistPrice(uint256 newPrice) external onlyOwner {
    whiteListPrice = newPrice;
  }
  function adminSetPublicPrice(uint256 newPrice) external onlyOwner {
    publicPrice = newPrice;
  }
  function adminSetRevealStatus(bool newStatus) external onlyOwner {
    revealStatus = newStatus;
  }
  function adminSetBeforeRevealURI(string memory newUri) external onlyOwner {
    beforeRevealURI = newUri;
  }
  function adminAddToWhitelistBulk(address[] calldata addrs) external onlyOwner {
    for (uint256 i=0; i < addrs.length; i++) {
      _whiteList[addrs[i]] = true;
    }
  }
  function adminRemoveFromWhitelist(address addr) external onlyOwner {
    _whiteList[addr] = false;
  }
  function adminAirdrop(uint256 startRange, uint256 endRange) external onlyOwner {
    require(startRange >= 0 && endRange <= _airdropCount,"out_of_airdrop_count");
    require(startRange <= endRange);
    for (uint256 i=startRange; i<endRange; i++) {
      uint256 airdrop_id = i + 1;
      address holder_addr = _airdropList[airdrop_id];
      uint256 num_of_token = _airdropAmount[holder_addr];
      if (holder_addr != address(0) && num_of_token > 0) {
        for (uint256 j=0; j<num_of_token; j++) {
          _safeMint(holder_addr, totalSupply() + 1);
        }
        _airdropAmount[holder_addr] = 0;
      }
    }
  }
  function adminAddAirdropBulk(address[] calldata addrs, uint256[] calldata numOfTokens) external onlyOwner {
    require (addrs.length == numOfTokens.length, 'invalid_params');
    uint256 airdrop_id;
    for (uint256 i=0; i < addrs.length; i++) {
      airdrop_id = totalAirdrops() + 1;
      _airdropList[airdrop_id] = addrs[i];
      _airdropAmount[addrs[i]] = numOfTokens[i];
      _airdropCount = airdrop_id;
    }
  }
  function adminRemoveAirdrop(address addr) external onlyOwner {
    uint256 airdrop_id;
    for (uint256 i=0; i < _airdropCount; i++) {
      airdrop_id = i + 1;
      if (_airdropList[airdrop_id] == addr) {
        _airdropAmount[addr] = 0;
        break;
      }
    }
  }
  function withdraw() external onlyOwner {
    require(address(this).balance > 0, "no_balance");
    bool success = false;
    (success, ) = (payable(msg.sender)).call{value: address(this).balance}("");
    require(success, "withdraw_failed");
  }
}

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":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"numOfToken","type":"uint256"}],"name":"TokensMinted","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":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"numOfTokens","type":"uint256[]"}],"name":"adminAddAirdropBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"adminAddToWhitelistBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startRange","type":"uint256"},{"internalType":"uint256","name":"endRange","type":"uint256"}],"name":"adminAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"adminRemoveAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"adminRemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"adminSetBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"adminSetBeforeRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"adminSetMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"adminSetMintTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"adminSetPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"adminSetPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"adminSetRevealStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"adminSetWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"adminSetWhitelistSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeRevealURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAirdroppedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintTxLimit","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":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfToken","type":"uint256"}],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealStatus","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAirdrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"walletAddress","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfToken","type":"uint256"}],"name":"whiteListSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whiteListSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610fa0600b55600c805462ffffff1916905567030d98d59a960000600d556703782dace9d90000600e556005600f5560a06040819052600060808190526200004a916010916200016e565b50604051806080016040528060508152602001620032036050913980516200007b916011916020909101906200016e565b503480156200008957600080fd5b50604080518082018252600d81526c4d65746120536e65616b65727360981b602080830191825283518085019094526008845267534e45414b45525360c01b908401528151919291620000df916000916200016e565b508051620000f59060019060208401906200016e565b505050620001126200010c6200011860201b60201c565b6200011c565b62000251565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200017c9062000214565b90600052602060002090601f016020900481019282620001a05760008555620001eb565b82601f10620001bb57805160ff1916838001178555620001eb565b82800160010185558215620001eb579182015b82811115620001eb578251825591602001919060010190620001ce565b50620001f9929150620001fd565b5090565b5b80821115620001f95760008155600101620001fe565b600181811c908216806200022957607f821691505b602082108114156200024b57634e487b7160e01b600052602260045260246000fd5b50919050565b612fa280620002616000396000f3fe6080604052600436106102e45760003560e01c8063715018a611610190578063b6c693e5116100dc578063cb4fb4d711610095578063e69c85121161006f578063e69c851214610891578063e8a3d485146108a7578063e985e9c5146108bc578063f2fde38b1461090557600080fd5b8063cb4fb4d71461083b578063cd7d3b801461085b578063d5abeb011461087b57600080fd5b8063b6c693e514610789578063b85eb674146107a8578063b88d4fde146107bb578063bfa5c4a4146107db578063c87b56dd146107fb578063c89d94061461081b57600080fd5b80639abc832011610149578063a2d2cd6211610123578063a2d2cd6214610720578063a792babb14610740578063a945bf8014610760578063b287c8ed1461077657600080fd5b80639abc8320146106cb5780639d1f73f6146106e0578063a22cb4651461070057600080fd5b8063715018a61461062e57806376f93128146106435780637bea6632146106635780638da5cb5b1461068357806395d89b41146106a1578063971a1ca2146106b657600080fd5b80633ccfd60b1161024f5780636352211e116102085780636b3e863b116101e25780636b3e863b146105ae5780636db06a9a146105ce5780636ef2fcbc146105ee57806370a082311461060e57600080fd5b80636352211e1461055857806365490c0f14610578578063685756851461059857600080fd5b80633ccfd60b146104965780633e976df5146104ab57806342842e0e146104cb578063438b6300146104eb57806343b2608c146105185780634f6ccce71461053857600080fd5b806318160ddd116102a157806318160ddd146103c957806323b872dd146103e8578063263e4f5e146104085780632f745c59146104285780633884d635146104485780633af32abf1461045d57600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780630de4cd801461039a578063173e81df146103b4575b600080fd5b3480156102f557600080fd5b50610309610304366004612b1c565b610925565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50610333610950565b6040516103159190612cb6565b34801561034c57600080fd5b5061036061035b366004612b9f565b6109e2565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004612a29565b610a7c565b005b3480156103a657600080fd5b50600c546103099060ff1681565b3480156103c057600080fd5b50610333610b92565b3480156103d557600080fd5b506008545b604051908152602001610315565b3480156103f457600080fd5b50610398610403366004612947565b610c20565b34801561041457600080fd5b50600c546103099062010000900460ff1681565b34801561043457600080fd5b506103da610443366004612a29565b610c51565b34801561045457600080fd5b50610398610ce7565b34801561046957600080fd5b506103096104783660046128f9565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156104a257600080fd5b50610398610d44565b3480156104b757600080fd5b506103986104c6366004612b56565b610e3a565b3480156104d757600080fd5b506103986104e6366004612947565b610e7b565b3480156104f757600080fd5b5061050b6105063660046128f9565b610e96565b6040516103159190612c72565b34801561052457600080fd5b50610398610533366004612b56565b610f38565b34801561054457600080fd5b506103da610553366004612b9f565b610f75565b34801561056457600080fd5b50610360610573366004612b9f565b611008565b34801561058457600080fd5b50610398610593366004612b01565b61107f565b3480156105a457600080fd5b506103da600d5481565b3480156105ba57600080fd5b506103da6105c93660046128f9565b6110c5565b3480156105da57600080fd5b506103986105e9366004612b9f565b611138565b3480156105fa57600080fd5b506103986106093660046128f9565b611167565b34801561061a57600080fd5b506103da6106293660046128f9565b6111fd565b34801561063a57600080fd5b50610398611284565b34801561064f57600080fd5b5061039861065e366004612b01565b6112b8565b34801561066f57600080fd5b5061039861067e3660046128f9565b6112f5565b34801561068f57600080fd5b50600a546001600160a01b0316610360565b3480156106ad57600080fd5b50610333611340565b3480156106c257600080fd5b506014546103da565b3480156106d757600080fd5b5061033361134f565b3480156106ec57600080fd5b506103986106fb366004612b9f565b61135c565b34801561070c57600080fd5b5061039861071b3660046129ff565b61138b565b34801561072c57600080fd5b5061039861073b366004612b9f565b611396565b34801561074c57600080fd5b5061039861075b366004612bb8565b6113c5565b34801561076c57600080fd5b506103da600e5481565b610398610784366004612b9f565b611506565b34801561079557600080fd5b50600c5461030990610100900460ff1681565b6103986107b6366004612b9f565b61159d565b3480156107c757600080fd5b506103986107d6366004612983565b611676565b3480156107e757600080fd5b506103986107f6366004612a53565b6116ae565b34801561080757600080fd5b50610333610816366004612b9f565b61174a565b34801561082757600080fd5b50610398610836366004612b01565b611832565b34801561084757600080fd5b50610398610856366004612a95565b611876565b34801561086757600080fd5b50610398610876366004612b9f565b6119cc565b34801561088757600080fd5b506103da600b5481565b34801561089d57600080fd5b506103da600f5481565b3480156108b357600080fd5b506103336119fb565b3480156108c857600080fd5b506103096108d7366004612914565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b506103986109203660046128f9565b611a08565b60006001600160e01b0319821663780e9d6360e01b148061094a575061094a82611aa0565b92915050565b60606000805461095f90612e7e565b80601f016020809104026020016040519081016040528092919081815260200182805461098b90612e7e565b80156109d85780601f106109ad576101008083540402835291602001916109d8565b820191906000526020600020905b8154815290600101906020018083116109bb57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a8782611008565b9050806001600160a01b0316836001600160a01b03161415610af55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a57565b336001600160a01b0382161480610b115750610b1181336108d7565b610b835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a57565b610b8d8383611af0565b505050565b60128054610b9f90612e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcb90612e7e565b8015610c185780601f10610bed57610100808354040283529160200191610c18565b820191906000526020600020905b815481529060010190602001808311610bfb57829003601f168201915b505050505081565b610c2a3382611b5e565b610c465760405162461bcd60e51b8152600401610a5790612d9f565b610b8d838383611c55565b6000610c5c836111fd565b8210610cbe5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a57565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000610cf2336110c5565b11610d305760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd17d85a5c991c9bdc1c195960921b6044820152606401610a57565b610d4233610d3d336110c5565b611dfc565b565b600a546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610a5790612d1b565b60004711610dab5760405162461bcd60e51b815260206004820152600a6024820152696e6f5f62616c616e636560b01b6044820152606401610a57565b604051600090339047908381818185875af1925050503d8060008114610ded576040519150601f19603f3d011682016040523d82523d6000602084013e610df2565b606091505b50508091505080610e375760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dd7d9985a5b1959608a1b6044820152606401610a57565b50565b600a546001600160a01b03163314610e645760405162461bcd60e51b8152600401610a5790612d1b565b8051610e77906010906020840190612777565b5050565b610b8d83838360405180602001604052806000815250611676565b60606000610ea3836111fd565b905060008167ffffffffffffffff811115610ec057610ec0612f40565b604051908082528060200260200182016040528015610ee9578160200160208202803683370190505b50905060005b82811015610f3057610f018582610c51565b828281518110610f1357610f13612f2a565b602090810291909101015280610f2881612eb9565b915050610eef565b509392505050565b600a546001600160a01b03163314610f625760405162461bcd60e51b8152600401610a5790612d1b565b8051610e77906012906020840190612777565b6000610f8060085490565b8210610fe35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a57565b60088281548110610ff657610ff6612f2a565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061094a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a57565b600a546001600160a01b031633146110a95760405162461bcd60e51b8152600401610a5790612d1b565b600c8054911515620100000262ff000019909216919091179055565b6000806000805b601454811015610f30576110e1816001612df0565b6000818152601560205260409020549093506001600160a01b0386811691161415611126576001600160a01b0385166000908152601660205260409020549150610f30565b8061113081612eb9565b9150506110cc565b600a546001600160a01b031633146111625760405162461bcd60e51b8152600401610a5790612d1b565b600b55565b600a546001600160a01b031633146111915760405162461bcd60e51b8152600401610a5790612d1b565b6000805b601454811015610b8d576111aa816001612df0565b6000818152601560205260409020549092506001600160a01b03848116911614156111eb5750506001600160a01b0316600090815260166020526040812055565b806111f581612eb9565b915050611195565b60006001600160a01b0382166112685760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a57565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112ae5760405162461bcd60e51b8152600401610a5790612d1b565b610d426000611f93565b600a546001600160a01b031633146112e25760405162461bcd60e51b8152600401610a5790612d1b565b600c805460ff1916911515919091179055565b600a546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610a5790612d1b565b6001600160a01b03166000908152601360205260409020805460ff19169055565b60606001805461095f90612e7e565b60108054610b9f90612e7e565b600a546001600160a01b031633146113865760405162461bcd60e51b8152600401610a5790612d1b565b600e55565b610e77338383611fe5565b600a546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a5790612d1b565b600f55565b600a546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610a5790612d1b565b6014548111156114385760405162461bcd60e51b81526020600482015260146024820152731bdd5d17dbd997d85a5c991c9bdc17d8dbdd5b9d60621b6044820152606401610a57565b8082111561144557600080fd5b815b81811015610b8d57600061145c826001612df0565b6000818152601560209081526040808320546001600160a01b03168084526016909252909120549192509081158015906114965750600081115b156114f05760005b818110156114d5576114c3836114b360085490565b6114be906001612df0565b6120b4565b806114cd81612eb9565b91505061149e565b506001600160a01b0382166000908152601660205260408120555b50505080806114fe90612eb9565b915050611447565b3481600e546115159190612e1c565b11156115515760405162461bcd60e51b815260206004820152600b60248201526a696e7375665f707269636560a81b6044820152606401610a57565b600c54610100900460ff166115935760405162461bcd60e51b81526020600482015260086024820152676e6f745f73616c6560c01b6044820152606401610a57565b610e373382611dfc565b3360009081526013602052604090205460ff166115ee5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd17ddda1a5d195b1a5cdd1959608a1b6044820152606401610a57565b3481600d546115fd9190612e1c565b11156116395760405162461bcd60e51b815260206004820152600b60248201526a696e7375665f707269636560a81b6044820152606401610a57565b600c5460ff166115935760405162461bcd60e51b81526020600482015260086024820152676e6f745f73616c6560c01b6044820152606401610a57565b6116803383611b5e565b61169c5760405162461bcd60e51b8152600401610a5790612d9f565b6116a8848484846120ce565b50505050565b600a546001600160a01b031633146116d85760405162461bcd60e51b8152600401610a5790612d1b565b60005b81811015610b8d576001601360008585858181106116fb576116fb612f2a565b905060200201602081019061171091906128f9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061174281612eb9565b9150506116db565b6000818152600260205260409020546060906001600160a01b03166117815760405162461bcd60e51b8152600401610a5790612d50565b600c5462010000900460ff161561179b5761094a82612101565b601280546117a890612e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546117d490612e7e565b80156118215780601f106117f657610100808354040283529160200191611821565b820191906000526020600020905b81548152906001019060200180831161180457829003601f168201915b50505050509050919050565b919050565b600a546001600160a01b0316331461185c5760405162461bcd60e51b8152600401610a5790612d1b565b600c80549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146118a05760405162461bcd60e51b8152600401610a5790612d1b565b8281146118e05760405162461bcd60e51b815260206004820152600e60248201526d696e76616c69645f706172616d7360901b6044820152606401610a57565b6000805b848110156119c4576014546118fa906001612df0565b915085858281811061190e5761190e612f2a565b905060200201602081019061192391906128f9565b600083815260156020526040902080546001600160a01b0319166001600160a01b039290921691909117905583838281811061196157611961612f2a565b905060200201356016600088888581811061197e5761197e612f2a565b905060200201602081019061199391906128f9565b6001600160a01b031681526020810191909152604001600020556014829055806119bc81612eb9565b9150506118e4565b505050505050565b600a546001600160a01b031633146119f65760405162461bcd60e51b8152600401610a5790612d1b565b600d55565b60118054610b9f90612e7e565b600a546001600160a01b03163314611a325760405162461bcd60e51b8152600401610a5790612d1b565b6001600160a01b038116611a975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a57565b610e3781611f93565b60006001600160e01b031982166380ac58cd60e01b1480611ad157506001600160e01b03198216635b5e139f60e01b145b8061094a57506301ffc9a760e01b6001600160e01b031983161461094a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b2582611008565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611bd75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a57565b6000611be283611008565b9050806001600160a01b0316846001600160a01b03161480611c1d5750836001600160a01b0316611c12846109e2565b6001600160a01b0316145b80611c4d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c6882611008565b6001600160a01b031614611ccc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a57565b6001600160a01b038216611d2e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a57565b611d39838383612194565b611d44600082611af0565b6001600160a01b0383166000908152600360205260408120805460019290611d6d908490612e3b565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d9b908490612df0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008111611e3a5760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bd7d85b5bdd5b9d60aa1b6044820152606401610a57565b600f54811115611e7e5760405162461bcd60e51b815260206004820152600f60248201526e195e18d9595917dd1e17db1a5b5a5d608a1b6044820152606401610a57565b600b5481611e8b60085490565b611e959190612df0565b1115611ed75760405162461bcd60e51b81526020600482015260116024820152706578636565645f6d61785f737570706c7960781b6044820152606401610a57565b6001600160a01b038216611f225760405162461bcd60e51b8152602060048201526012602482015271696e76616c69645f746f5f6164647265737360701b6044820152606401610a57565b60005b81811015611f4c57611f3a836114b360085490565b80611f4481612eb9565b915050611f25565b50604080516001600160a01b0384168152602081018390527f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273910160405180910390a15050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120475760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a57565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610e7782826040518060200160405280600081525061224c565b6120d9848484611c55565b6120e58484848461227f565b6116a85760405162461bcd60e51b8152600401610a5790612cc9565b6000818152600260205260409020546060906001600160a01b03166121385760405162461bcd60e51b8152600401610a5790612d50565b600061214261238c565b90506000815111612162576040518060200160405280600081525061218d565b8061216c8461239b565b60405160200161217d929190612c06565b6040516020818303038152906040525b9392505050565b6001600160a01b0383166121ef576121ea81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612212565b816001600160a01b0316836001600160a01b031614612212576122128382612499565b6001600160a01b03821661222957610b8d81612536565b826001600160a01b0316826001600160a01b031614610b8d57610b8d82826125e5565b6122568383612629565b612263600084848461227f565b610b8d5760405162461bcd60e51b8152600401610a5790612cc9565b60006001600160a01b0384163b1561238157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122c3903390899088908890600401612c35565b602060405180830381600087803b1580156122dd57600080fd5b505af192505050801561230d575060408051601f3d908101601f1916820190925261230a91810190612b39565b60015b612367573d80801561233b576040519150601f19603f3d011682016040523d82523d6000602084013e612340565b606091505b50805161235f5760405162461bcd60e51b8152600401610a5790612cc9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c4d565b506001949350505050565b60606010805461095f90612e7e565b6060816123bf5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123e957806123d381612eb9565b91506123e29050600a83612e08565b91506123c3565b60008167ffffffffffffffff81111561240457612404612f40565b6040519080825280601f01601f19166020018201604052801561242e576020820181803683370190505b5090505b8415611c4d57612443600183612e3b565b9150612450600a86612ed4565b61245b906030612df0565b60f81b81838151811061247057612470612f2a565b60200101906001600160f81b031916908160001a905350612492600a86612e08565b9450612432565b600060016124a6846111fd565b6124b09190612e3b565b600083815260076020526040902054909150808214612503576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061254890600190612e3b565b6000838152600960205260408120546008805493945090928490811061257057612570612f2a565b90600052602060002001549050806008838154811061259157612591612f2a565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125c9576125c9612f14565b6001900381819060005260206000200160009055905550505050565b60006125f0836111fd565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a57565b6000818152600260205260409020546001600160a01b0316156126e45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a57565b6126f060008383612194565b6001600160a01b0382166000908152600360205260408120805460019290612719908490612df0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461278390612e7e565b90600052602060002090601f0160209004810192826127a557600085556127eb565b82601f106127be57805160ff19168380011785556127eb565b828001600101855582156127eb579182015b828111156127eb5782518255916020019190600101906127d0565b506127f79291506127fb565b5090565b5b808211156127f757600081556001016127fc565b600067ffffffffffffffff8084111561282b5761282b612f40565b604051601f8501601f19908116603f0116810190828211818310171561285357612853612f40565b8160405280935085815286868601111561286c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461182d57600080fd5b60008083601f8401126128af57600080fd5b50813567ffffffffffffffff8111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b8035801515811461182d57600080fd5b60006020828403121561290b57600080fd5b61218d82612886565b6000806040838503121561292757600080fd5b61293083612886565b915061293e60208401612886565b90509250929050565b60008060006060848603121561295c57600080fd5b61296584612886565b925061297360208501612886565b9150604084013590509250925092565b6000806000806080858703121561299957600080fd5b6129a285612886565b93506129b060208601612886565b925060408501359150606085013567ffffffffffffffff8111156129d357600080fd5b8501601f810187136129e457600080fd5b6129f387823560208401612810565b91505092959194509250565b60008060408385031215612a1257600080fd5b612a1b83612886565b915061293e602084016128e9565b60008060408385031215612a3c57600080fd5b612a4583612886565b946020939093013593505050565b60008060208385031215612a6657600080fd5b823567ffffffffffffffff811115612a7d57600080fd5b612a898582860161289d565b90969095509350505050565b60008060008060408587031215612aab57600080fd5b843567ffffffffffffffff80821115612ac357600080fd5b612acf8883890161289d565b90965094506020870135915080821115612ae857600080fd5b50612af58782880161289d565b95989497509550505050565b600060208284031215612b1357600080fd5b61218d826128e9565b600060208284031215612b2e57600080fd5b813561218d81612f56565b600060208284031215612b4b57600080fd5b815161218d81612f56565b600060208284031215612b6857600080fd5b813567ffffffffffffffff811115612b7f57600080fd5b8201601f81018413612b9057600080fd5b611c4d84823560208401612810565b600060208284031215612bb157600080fd5b5035919050565b60008060408385031215612bcb57600080fd5b50508035926020909101359150565b60008151808452612bf2816020860160208601612e52565b601f01601f19169290920160200192915050565b60008351612c18818460208801612e52565b835190830190612c2c818360208801612e52565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c6890830184612bda565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612caa57835183529284019291840191600101612c8e565b50909695505050505050565b60208152600061218d6020830184612bda565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612e0357612e03612ee8565b500190565b600082612e1757612e17612efe565b500490565b6000816000190483118215151615612e3657612e36612ee8565b500290565b600082821015612e4d57612e4d612ee8565b500390565b60005b83811015612e6d578181015183820152602001612e55565b838111156116a85750506000910152565b600181811c90821680612e9257607f821691505b60208210811415612eb357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ecd57612ecd612ee8565b5060010190565b600082612ee357612ee3612efe565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e3757600080fdfea26469706673582212207f41920bf6c8afe05fa81e00f0da7545baebdf16df7c577bbfe0f1a630816d1a64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6343755857715079467473505579357a50356378484c7a4a485a6439485058517451765856576b6332376f63

Deployed Bytecode

0x6080604052600436106102e45760003560e01c8063715018a611610190578063b6c693e5116100dc578063cb4fb4d711610095578063e69c85121161006f578063e69c851214610891578063e8a3d485146108a7578063e985e9c5146108bc578063f2fde38b1461090557600080fd5b8063cb4fb4d71461083b578063cd7d3b801461085b578063d5abeb011461087b57600080fd5b8063b6c693e514610789578063b85eb674146107a8578063b88d4fde146107bb578063bfa5c4a4146107db578063c87b56dd146107fb578063c89d94061461081b57600080fd5b80639abc832011610149578063a2d2cd6211610123578063a2d2cd6214610720578063a792babb14610740578063a945bf8014610760578063b287c8ed1461077657600080fd5b80639abc8320146106cb5780639d1f73f6146106e0578063a22cb4651461070057600080fd5b8063715018a61461062e57806376f93128146106435780637bea6632146106635780638da5cb5b1461068357806395d89b41146106a1578063971a1ca2146106b657600080fd5b80633ccfd60b1161024f5780636352211e116102085780636b3e863b116101e25780636b3e863b146105ae5780636db06a9a146105ce5780636ef2fcbc146105ee57806370a082311461060e57600080fd5b80636352211e1461055857806365490c0f14610578578063685756851461059857600080fd5b80633ccfd60b146104965780633e976df5146104ab57806342842e0e146104cb578063438b6300146104eb57806343b2608c146105185780634f6ccce71461053857600080fd5b806318160ddd116102a157806318160ddd146103c957806323b872dd146103e8578063263e4f5e146104085780632f745c59146104285780633884d635146104485780633af32abf1461045d57600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780630de4cd801461039a578063173e81df146103b4575b600080fd5b3480156102f557600080fd5b50610309610304366004612b1c565b610925565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50610333610950565b6040516103159190612cb6565b34801561034c57600080fd5b5061036061035b366004612b9f565b6109e2565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004612a29565b610a7c565b005b3480156103a657600080fd5b50600c546103099060ff1681565b3480156103c057600080fd5b50610333610b92565b3480156103d557600080fd5b506008545b604051908152602001610315565b3480156103f457600080fd5b50610398610403366004612947565b610c20565b34801561041457600080fd5b50600c546103099062010000900460ff1681565b34801561043457600080fd5b506103da610443366004612a29565b610c51565b34801561045457600080fd5b50610398610ce7565b34801561046957600080fd5b506103096104783660046128f9565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156104a257600080fd5b50610398610d44565b3480156104b757600080fd5b506103986104c6366004612b56565b610e3a565b3480156104d757600080fd5b506103986104e6366004612947565b610e7b565b3480156104f757600080fd5b5061050b6105063660046128f9565b610e96565b6040516103159190612c72565b34801561052457600080fd5b50610398610533366004612b56565b610f38565b34801561054457600080fd5b506103da610553366004612b9f565b610f75565b34801561056457600080fd5b50610360610573366004612b9f565b611008565b34801561058457600080fd5b50610398610593366004612b01565b61107f565b3480156105a457600080fd5b506103da600d5481565b3480156105ba57600080fd5b506103da6105c93660046128f9565b6110c5565b3480156105da57600080fd5b506103986105e9366004612b9f565b611138565b3480156105fa57600080fd5b506103986106093660046128f9565b611167565b34801561061a57600080fd5b506103da6106293660046128f9565b6111fd565b34801561063a57600080fd5b50610398611284565b34801561064f57600080fd5b5061039861065e366004612b01565b6112b8565b34801561066f57600080fd5b5061039861067e3660046128f9565b6112f5565b34801561068f57600080fd5b50600a546001600160a01b0316610360565b3480156106ad57600080fd5b50610333611340565b3480156106c257600080fd5b506014546103da565b3480156106d757600080fd5b5061033361134f565b3480156106ec57600080fd5b506103986106fb366004612b9f565b61135c565b34801561070c57600080fd5b5061039861071b3660046129ff565b61138b565b34801561072c57600080fd5b5061039861073b366004612b9f565b611396565b34801561074c57600080fd5b5061039861075b366004612bb8565b6113c5565b34801561076c57600080fd5b506103da600e5481565b610398610784366004612b9f565b611506565b34801561079557600080fd5b50600c5461030990610100900460ff1681565b6103986107b6366004612b9f565b61159d565b3480156107c757600080fd5b506103986107d6366004612983565b611676565b3480156107e757600080fd5b506103986107f6366004612a53565b6116ae565b34801561080757600080fd5b50610333610816366004612b9f565b61174a565b34801561082757600080fd5b50610398610836366004612b01565b611832565b34801561084757600080fd5b50610398610856366004612a95565b611876565b34801561086757600080fd5b50610398610876366004612b9f565b6119cc565b34801561088757600080fd5b506103da600b5481565b34801561089d57600080fd5b506103da600f5481565b3480156108b357600080fd5b506103336119fb565b3480156108c857600080fd5b506103096108d7366004612914565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b506103986109203660046128f9565b611a08565b60006001600160e01b0319821663780e9d6360e01b148061094a575061094a82611aa0565b92915050565b60606000805461095f90612e7e565b80601f016020809104026020016040519081016040528092919081815260200182805461098b90612e7e565b80156109d85780601f106109ad576101008083540402835291602001916109d8565b820191906000526020600020905b8154815290600101906020018083116109bb57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a605760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a8782611008565b9050806001600160a01b0316836001600160a01b03161415610af55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a57565b336001600160a01b0382161480610b115750610b1181336108d7565b610b835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a57565b610b8d8383611af0565b505050565b60128054610b9f90612e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcb90612e7e565b8015610c185780601f10610bed57610100808354040283529160200191610c18565b820191906000526020600020905b815481529060010190602001808311610bfb57829003601f168201915b505050505081565b610c2a3382611b5e565b610c465760405162461bcd60e51b8152600401610a5790612d9f565b610b8d838383611c55565b6000610c5c836111fd565b8210610cbe5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a57565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000610cf2336110c5565b11610d305760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd17d85a5c991c9bdc1c195960921b6044820152606401610a57565b610d4233610d3d336110c5565b611dfc565b565b600a546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610a5790612d1b565b60004711610dab5760405162461bcd60e51b815260206004820152600a6024820152696e6f5f62616c616e636560b01b6044820152606401610a57565b604051600090339047908381818185875af1925050503d8060008114610ded576040519150601f19603f3d011682016040523d82523d6000602084013e610df2565b606091505b50508091505080610e375760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dd7d9985a5b1959608a1b6044820152606401610a57565b50565b600a546001600160a01b03163314610e645760405162461bcd60e51b8152600401610a5790612d1b565b8051610e77906010906020840190612777565b5050565b610b8d83838360405180602001604052806000815250611676565b60606000610ea3836111fd565b905060008167ffffffffffffffff811115610ec057610ec0612f40565b604051908082528060200260200182016040528015610ee9578160200160208202803683370190505b50905060005b82811015610f3057610f018582610c51565b828281518110610f1357610f13612f2a565b602090810291909101015280610f2881612eb9565b915050610eef565b509392505050565b600a546001600160a01b03163314610f625760405162461bcd60e51b8152600401610a5790612d1b565b8051610e77906012906020840190612777565b6000610f8060085490565b8210610fe35760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a57565b60088281548110610ff657610ff6612f2a565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061094a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a57565b600a546001600160a01b031633146110a95760405162461bcd60e51b8152600401610a5790612d1b565b600c8054911515620100000262ff000019909216919091179055565b6000806000805b601454811015610f30576110e1816001612df0565b6000818152601560205260409020549093506001600160a01b0386811691161415611126576001600160a01b0385166000908152601660205260409020549150610f30565b8061113081612eb9565b9150506110cc565b600a546001600160a01b031633146111625760405162461bcd60e51b8152600401610a5790612d1b565b600b55565b600a546001600160a01b031633146111915760405162461bcd60e51b8152600401610a5790612d1b565b6000805b601454811015610b8d576111aa816001612df0565b6000818152601560205260409020549092506001600160a01b03848116911614156111eb5750506001600160a01b0316600090815260166020526040812055565b806111f581612eb9565b915050611195565b60006001600160a01b0382166112685760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a57565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112ae5760405162461bcd60e51b8152600401610a5790612d1b565b610d426000611f93565b600a546001600160a01b031633146112e25760405162461bcd60e51b8152600401610a5790612d1b565b600c805460ff1916911515919091179055565b600a546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610a5790612d1b565b6001600160a01b03166000908152601360205260409020805460ff19169055565b60606001805461095f90612e7e565b60108054610b9f90612e7e565b600a546001600160a01b031633146113865760405162461bcd60e51b8152600401610a5790612d1b565b600e55565b610e77338383611fe5565b600a546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a5790612d1b565b600f55565b600a546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610a5790612d1b565b6014548111156114385760405162461bcd60e51b81526020600482015260146024820152731bdd5d17dbd997d85a5c991c9bdc17d8dbdd5b9d60621b6044820152606401610a57565b8082111561144557600080fd5b815b81811015610b8d57600061145c826001612df0565b6000818152601560209081526040808320546001600160a01b03168084526016909252909120549192509081158015906114965750600081115b156114f05760005b818110156114d5576114c3836114b360085490565b6114be906001612df0565b6120b4565b806114cd81612eb9565b91505061149e565b506001600160a01b0382166000908152601660205260408120555b50505080806114fe90612eb9565b915050611447565b3481600e546115159190612e1c565b11156115515760405162461bcd60e51b815260206004820152600b60248201526a696e7375665f707269636560a81b6044820152606401610a57565b600c54610100900460ff166115935760405162461bcd60e51b81526020600482015260086024820152676e6f745f73616c6560c01b6044820152606401610a57565b610e373382611dfc565b3360009081526013602052604090205460ff166115ee5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd17ddda1a5d195b1a5cdd1959608a1b6044820152606401610a57565b3481600d546115fd9190612e1c565b11156116395760405162461bcd60e51b815260206004820152600b60248201526a696e7375665f707269636560a81b6044820152606401610a57565b600c5460ff166115935760405162461bcd60e51b81526020600482015260086024820152676e6f745f73616c6560c01b6044820152606401610a57565b6116803383611b5e565b61169c5760405162461bcd60e51b8152600401610a5790612d9f565b6116a8848484846120ce565b50505050565b600a546001600160a01b031633146116d85760405162461bcd60e51b8152600401610a5790612d1b565b60005b81811015610b8d576001601360008585858181106116fb576116fb612f2a565b905060200201602081019061171091906128f9565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061174281612eb9565b9150506116db565b6000818152600260205260409020546060906001600160a01b03166117815760405162461bcd60e51b8152600401610a5790612d50565b600c5462010000900460ff161561179b5761094a82612101565b601280546117a890612e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546117d490612e7e565b80156118215780601f106117f657610100808354040283529160200191611821565b820191906000526020600020905b81548152906001019060200180831161180457829003601f168201915b50505050509050919050565b919050565b600a546001600160a01b0316331461185c5760405162461bcd60e51b8152600401610a5790612d1b565b600c80549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146118a05760405162461bcd60e51b8152600401610a5790612d1b565b8281146118e05760405162461bcd60e51b815260206004820152600e60248201526d696e76616c69645f706172616d7360901b6044820152606401610a57565b6000805b848110156119c4576014546118fa906001612df0565b915085858281811061190e5761190e612f2a565b905060200201602081019061192391906128f9565b600083815260156020526040902080546001600160a01b0319166001600160a01b039290921691909117905583838281811061196157611961612f2a565b905060200201356016600088888581811061197e5761197e612f2a565b905060200201602081019061199391906128f9565b6001600160a01b031681526020810191909152604001600020556014829055806119bc81612eb9565b9150506118e4565b505050505050565b600a546001600160a01b031633146119f65760405162461bcd60e51b8152600401610a5790612d1b565b600d55565b60118054610b9f90612e7e565b600a546001600160a01b03163314611a325760405162461bcd60e51b8152600401610a5790612d1b565b6001600160a01b038116611a975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a57565b610e3781611f93565b60006001600160e01b031982166380ac58cd60e01b1480611ad157506001600160e01b03198216635b5e139f60e01b145b8061094a57506301ffc9a760e01b6001600160e01b031983161461094a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b2582611008565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611bd75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a57565b6000611be283611008565b9050806001600160a01b0316846001600160a01b03161480611c1d5750836001600160a01b0316611c12846109e2565b6001600160a01b0316145b80611c4d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c6882611008565b6001600160a01b031614611ccc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a57565b6001600160a01b038216611d2e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a57565b611d39838383612194565b611d44600082611af0565b6001600160a01b0383166000908152600360205260408120805460019290611d6d908490612e3b565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d9b908490612df0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008111611e3a5760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bd7d85b5bdd5b9d60aa1b6044820152606401610a57565b600f54811115611e7e5760405162461bcd60e51b815260206004820152600f60248201526e195e18d9595917dd1e17db1a5b5a5d608a1b6044820152606401610a57565b600b5481611e8b60085490565b611e959190612df0565b1115611ed75760405162461bcd60e51b81526020600482015260116024820152706578636565645f6d61785f737570706c7960781b6044820152606401610a57565b6001600160a01b038216611f225760405162461bcd60e51b8152602060048201526012602482015271696e76616c69645f746f5f6164647265737360701b6044820152606401610a57565b60005b81811015611f4c57611f3a836114b360085490565b80611f4481612eb9565b915050611f25565b50604080516001600160a01b0384168152602081018390527f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a4273910160405180910390a15050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120475760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a57565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610e7782826040518060200160405280600081525061224c565b6120d9848484611c55565b6120e58484848461227f565b6116a85760405162461bcd60e51b8152600401610a5790612cc9565b6000818152600260205260409020546060906001600160a01b03166121385760405162461bcd60e51b8152600401610a5790612d50565b600061214261238c565b90506000815111612162576040518060200160405280600081525061218d565b8061216c8461239b565b60405160200161217d929190612c06565b6040516020818303038152906040525b9392505050565b6001600160a01b0383166121ef576121ea81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612212565b816001600160a01b0316836001600160a01b031614612212576122128382612499565b6001600160a01b03821661222957610b8d81612536565b826001600160a01b0316826001600160a01b031614610b8d57610b8d82826125e5565b6122568383612629565b612263600084848461227f565b610b8d5760405162461bcd60e51b8152600401610a5790612cc9565b60006001600160a01b0384163b1561238157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122c3903390899088908890600401612c35565b602060405180830381600087803b1580156122dd57600080fd5b505af192505050801561230d575060408051601f3d908101601f1916820190925261230a91810190612b39565b60015b612367573d80801561233b576040519150601f19603f3d011682016040523d82523d6000602084013e612340565b606091505b50805161235f5760405162461bcd60e51b8152600401610a5790612cc9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c4d565b506001949350505050565b60606010805461095f90612e7e565b6060816123bf5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123e957806123d381612eb9565b91506123e29050600a83612e08565b91506123c3565b60008167ffffffffffffffff81111561240457612404612f40565b6040519080825280601f01601f19166020018201604052801561242e576020820181803683370190505b5090505b8415611c4d57612443600183612e3b565b9150612450600a86612ed4565b61245b906030612df0565b60f81b81838151811061247057612470612f2a565b60200101906001600160f81b031916908160001a905350612492600a86612e08565b9450612432565b600060016124a6846111fd565b6124b09190612e3b565b600083815260076020526040902054909150808214612503576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061254890600190612e3b565b6000838152600960205260408120546008805493945090928490811061257057612570612f2a565b90600052602060002001549050806008838154811061259157612591612f2a565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125c9576125c9612f14565b6001900381819060005260206000200160009055905550505050565b60006125f0836111fd565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a57565b6000818152600260205260409020546001600160a01b0316156126e45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a57565b6126f060008383612194565b6001600160a01b0382166000908152600360205260408120805460019290612719908490612df0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461278390612e7e565b90600052602060002090601f0160209004810192826127a557600085556127eb565b82601f106127be57805160ff19168380011785556127eb565b828001600101855582156127eb579182015b828111156127eb5782518255916020019190600101906127d0565b506127f79291506127fb565b5090565b5b808211156127f757600081556001016127fc565b600067ffffffffffffffff8084111561282b5761282b612f40565b604051601f8501601f19908116603f0116810190828211818310171561285357612853612f40565b8160405280935085815286868601111561286c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461182d57600080fd5b60008083601f8401126128af57600080fd5b50813567ffffffffffffffff8111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b8035801515811461182d57600080fd5b60006020828403121561290b57600080fd5b61218d82612886565b6000806040838503121561292757600080fd5b61293083612886565b915061293e60208401612886565b90509250929050565b60008060006060848603121561295c57600080fd5b61296584612886565b925061297360208501612886565b9150604084013590509250925092565b6000806000806080858703121561299957600080fd5b6129a285612886565b93506129b060208601612886565b925060408501359150606085013567ffffffffffffffff8111156129d357600080fd5b8501601f810187136129e457600080fd5b6129f387823560208401612810565b91505092959194509250565b60008060408385031215612a1257600080fd5b612a1b83612886565b915061293e602084016128e9565b60008060408385031215612a3c57600080fd5b612a4583612886565b946020939093013593505050565b60008060208385031215612a6657600080fd5b823567ffffffffffffffff811115612a7d57600080fd5b612a898582860161289d565b90969095509350505050565b60008060008060408587031215612aab57600080fd5b843567ffffffffffffffff80821115612ac357600080fd5b612acf8883890161289d565b90965094506020870135915080821115612ae857600080fd5b50612af58782880161289d565b95989497509550505050565b600060208284031215612b1357600080fd5b61218d826128e9565b600060208284031215612b2e57600080fd5b813561218d81612f56565b600060208284031215612b4b57600080fd5b815161218d81612f56565b600060208284031215612b6857600080fd5b813567ffffffffffffffff811115612b7f57600080fd5b8201601f81018413612b9057600080fd5b611c4d84823560208401612810565b600060208284031215612bb157600080fd5b5035919050565b60008060408385031215612bcb57600080fd5b50508035926020909101359150565b60008151808452612bf2816020860160208601612e52565b601f01601f19169290920160200192915050565b60008351612c18818460208801612e52565b835190830190612c2c818360208801612e52565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c6890830184612bda565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612caa57835183529284019291840191600101612c8e565b50909695505050505050565b60208152600061218d6020830184612bda565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612e0357612e03612ee8565b500190565b600082612e1757612e17612efe565b500490565b6000816000190483118215151615612e3657612e36612ee8565b500290565b600082821015612e4d57612e4d612ee8565b500390565b60005b83811015612e6d578181015183820152602001612e55565b838111156116a85750506000910152565b600181811c90821680612e9257607f821691505b60208210811415612eb357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ecd57612ecd612ee8565b5060010190565b600082612ee357612ee3612efe565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e3757600080fdfea26469706673582212207f41920bf6c8afe05fa81e00f0da7545baebdf16df7c577bbfe0f1a630816d1a64736f6c63430008070033

Deployed Bytecode Sourcemap

42188:6335:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34037:218;;;;;;;;;;-1:-1:-1;34037:218:0;;;;;:::i;:::-;;:::i;:::-;;;8874:14:1;;8867:22;8849:41;;8837:2;8822:18;34037:218:0;;;;;;;;21944:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23377:209::-;;;;;;;;;;-1:-1:-1;23377:209:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7256:32:1;;;7238:51;;7226:2;7211:18;23377:209:0;7092:203:1;22948:373:0;;;;;;;;;;-1:-1:-1;22948:373:0;;;;;:::i;:::-;;:::i;:::-;;42279:39;;;;;;;;;;-1:-1:-1;42279:39:0;;;;;;;;42673:29;;;;;;;;;;;;;:::i;34641:107::-;;;;;;;;;;-1:-1:-1;34725:10:0;:17;34641:107;;;20589:25:1;;;20577:2;20562:18;34641:107:0;20443:177:1;24073:309:0;;;;;;;;;;-1:-1:-1;24073:309:0;;;;;:::i;:::-;;:::i;42364:32::-;;;;;;;;;;-1:-1:-1;42364:32:0;;;;;;;;;;;34329:246;;;;;;;;;;-1:-1:-1;34329:246:0;;;;;:::i;:::-;;:::i;43834:111::-;;;;;;;;;;;;;:::i;45045:98::-;;;;;;;;;;-1:-1:-1;45045:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;45121:16:0;45102:4;45121:16;;;:10;:16;;;;;;;;;45045:98;48270:250;;;;;;;;;;;;;:::i;45746:95::-;;;;;;;;;;-1:-1:-1;45746:95:0;;;;;:::i;:::-;;:::i;24443:165::-;;;;;;;;;;-1:-1:-1;24443:165:0;;;;;:::i;:::-;;:::i;44703:338::-;;;;;;;;;;-1:-1:-1;44703:338:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46504:111::-;;;;;;;;;;-1:-1:-1;46504:111:0;;;;;:::i;:::-;;:::i;34815:223::-;;;;;;;;;;-1:-1:-1;34815:223:0;;;;;:::i;:::-;;:::i;21662:225::-;;;;;;;;;;-1:-1:-1;21662:225:0;;;;;:::i;:::-;;:::i;46398:102::-;;;;;;;;;;-1:-1:-1;46398:102:0;;;;;:::i;:::-;;:::i;42401:42::-;;;;;;;;;;;;;;;;45238:367;;;;;;;;;;-1:-1:-1;45238:367:0;;;;;:::i;:::-;;:::i;45643:99::-;;;;;;;;;;-1:-1:-1;45643:99:0;;;;;:::i;:::-;;:::i;47984:282::-;;;;;;;;;;-1:-1:-1;47984:282:0;;;;;:::i;:::-;;:::i;21412:198::-;;;;;;;;;;-1:-1:-1;21412:198:0;;;;;:::i;:::-;;:::i;41407:97::-;;;;;;;;;;;;;:::i;45950:115::-;;;;;;;;;;-1:-1:-1;45950:115:0;;;;;:::i;:::-;;:::i;46798:104::-;;;;;;;;;;-1:-1:-1;46798:104:0;;;;;:::i;:::-;;:::i;40800:81::-;;;;;;;;;;-1:-1:-1;40869:6:0;;-1:-1:-1;;;;;40869:6:0;40800:81;;22097:98;;;;;;;;;;;;;:::i;45147:87::-;;;;;;;;;;-1:-1:-1;45215:13:0;;45147:87;;42527:26;;;;;;;;;;;;;:::i;46293:101::-;;;;;;;;;;-1:-1:-1;46293:101:0;;;;;:::i;:::-;;:::i;23648:149::-;;;;;;;;;;-1:-1:-1;23648:149:0;;;;;:::i;:::-;;:::i;45845:101::-;;;;;;;;;;-1:-1:-1;45845:101:0;;;;;:::i;:::-;;:::i;46906:639::-;;;;;;;;;;-1:-1:-1;46906:639:0;;;;;:::i;:::-;;:::i;42448:39::-;;;;;;;;;;;;;;;;44194:216;;;;;;:::i;:::-;;:::i;42323:36::-;;;;;;;;;;-1:-1:-1;42323:36:0;;;;;;;;;;;43949:241;;;;;;:::i;:::-;;:::i;24669:300::-;;;;;;;;;;-1:-1:-1;24669:300:0;;;;;:::i;:::-;;:::i;46619:175::-;;;;;;;;;;-1:-1:-1;46619:175:0;;;;;:::i;:::-;;:::i;44414:285::-;;;;;;;;;;-1:-1:-1;44414:285:0;;;;;:::i;:::-;;:::i;46069:109::-;;;;;;;;;;-1:-1:-1;46069:109:0;;;;;:::i;:::-;;:::i;47549:431::-;;;;;;;;;;-1:-1:-1;47549:431:0;;;;;:::i;:::-;;:::i;46182:107::-;;;;;;;;;;-1:-1:-1;46182:107:0;;;;;:::i;:::-;;:::i;42243:31::-;;;;;;;;;;;;;;;;42492:30;;;;;;;;;;;;;;;;42558:110;;;;;;;;;;;;;:::i;23858:158::-;;;;;;;;;;-1:-1:-1;23858:158:0;;;;;:::i;:::-;-1:-1:-1;;;;;23975:25:0;;;23955:4;23975:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23858:158;41647:191;;;;;;;;;;-1:-1:-1;41647:191:0;;;;;:::i;:::-;;:::i;34037:218::-;34139:4;-1:-1:-1;;;;;;34159:50:0;;-1:-1:-1;;;34159:50:0;;:90;;;34213:36;34237:11;34213:23;:36::i;:::-;34152:97;34037:218;-1:-1:-1;;34037:218:0:o;21944:94::-;21998:13;22027:5;22020:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21944:94;:::o;23377:209::-;23453:7;26476:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26476:16:0;23469:73;;;;-1:-1:-1;;;23469:73:0;;16848:2:1;23469:73:0;;;16830:21:1;16887:2;16867:18;;;16860:30;16926:34;16906:18;;;16899:62;-1:-1:-1;;;16977:18:1;;;16970:42;17029:19;;23469:73:0;;;;;;;;;-1:-1:-1;23556:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23556:24:0;;23377:209::o;22948:373::-;23025:13;23041:23;23056:7;23041:14;:23::i;:::-;23025:39;;23085:5;-1:-1:-1;;;;;23079:11:0;:2;-1:-1:-1;;;;;23079:11:0;;;23071:57;;;;-1:-1:-1;;;23071:57:0;;18038:2:1;23071:57:0;;;18020:21:1;18077:2;18057:18;;;18050:30;18116:34;18096:18;;;18089:62;-1:-1:-1;;;18167:18:1;;;18160:31;18208:19;;23071:57:0;17836:397:1;23071:57:0;19663:10;-1:-1:-1;;;;;23151:21:0;;;;:62;;-1:-1:-1;23176:37:0;23193:5;19663:10;23858:158;:::i;23176:37::-;23135:152;;;;-1:-1:-1;;;23135:152:0;;14213:2:1;23135:152:0;;;14195:21:1;14252:2;14232:18;;;14225:30;14291:34;14271:18;;;14264:62;14362:26;14342:18;;;14335:54;14406:19;;23135:152:0;14011:420:1;23135:152:0;23294:21;23303:2;23307:7;23294:8;:21::i;:::-;23018:303;22948:373;;:::o;42673:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24073:309::-;24246:41;19663:10;24279:7;24246:18;:41::i;:::-;24238:103;;;;-1:-1:-1;;;24238:103:0;;;;;;;:::i;:::-;24348:28;24358:4;24364:2;24368:7;24348:9;:28::i;34329:246::-;34426:7;34458:23;34475:5;34458:16;:23::i;:::-;34450:5;:31;34442:87;;;;-1:-1:-1;;;34442:87:0;;10010:2:1;34442:87:0;;;9992:21:1;10049:2;10029:18;;;10022:30;10088:34;10068:18;;;10061:62;-1:-1:-1;;;10139:18:1;;;10132:41;10190:19;;34442:87:0;9808:407:1;34442:87:0;-1:-1:-1;;;;;;34543:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34329:246::o;43834:111::-;43202:1;43168:31;43188:10;43168:19;:31::i;:::-;:35;43160:62;;;;-1:-1:-1;;;43160:62:0;;9327:2:1;43160:62:0;;;9309:21:1;9366:2;9346:18;;;9339:30;-1:-1:-1;;;9385:18:1;;;9378:44;9439:18;;43160:62:0;9125:338:1;43160:62:0;43884:55:::1;43895:10;43907:31;43927:10;43907:19;:31::i;:::-;43884:10;:55::i;:::-;43834:111::o:0;48270:250::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;48348:1:::1;48324:21;:25;48316:48;;;::::0;-1:-1:-1;;;48316:48:0;;13530:2:1;48316:48:0::1;::::0;::::1;13512:21:1::0;13569:2;13549:18;;;13542:30;-1:-1:-1;;;13588:18:1;;;13581:40;13638:18;;48316:48:0::1;13328:334:1::0;48316:48:0::1;48412:60;::::0;48371:12:::1;::::0;48421:10:::1;::::0;48446:21:::1;::::0;48371:12;48412:60;48371:12;48412:60;48446:21;48421:10;48412:60:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48398:74;;;;;48487:7;48479:35;;;::::0;-1:-1:-1;;;48479:35:0;;14982:2:1;48479:35:0::1;::::0;::::1;14964:21:1::0;15021:2;15001:18;;;14994:30;-1:-1:-1;;;15040:18:1;;;15033:45;15095:18;;48479:35:0::1;14780:339:1::0;48479:35:0::1;48309:211;48270:250::o:0;45746:95::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;45819:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45746:95:::0;:::o;24443:165::-;24563:39;24580:4;24586:2;24590:7;24563:39;;;;;;;;;;;;:16;:39::i;44703:338::-;44770:16;44795:18;44816:24;44826:13;44816:9;:24::i;:::-;44795:45;;44847:25;44889:10;44875:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44875:25:0;;44847:53;;44912:9;44907:107;44929:10;44925:1;:14;44907:107;;;44969:37;44989:13;45004:1;44969:19;:37::i;:::-;44955:8;44964:1;44955:11;;;;;;;;:::i;:::-;;;;;;;;;;:51;44941:3;;;;:::i;:::-;;;;44907:107;;;-1:-1:-1;45027:8:0;44703:338;-1:-1:-1;;;44703:338:0:o;46504:111::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46585:24;;::::1;::::0;:15:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;34815:223::-:0;34890:7;34922:30;34725:10;:17;;34641:107;34922:30;34914:5;:38;34906:95;;;;-1:-1:-1;;;34906:95:0;;19889:2:1;34906:95:0;;;19871:21:1;19928:2;19908:18;;;19901:30;19967:34;19947:18;;;19940:62;-1:-1:-1;;;20018:18:1;;;20011:42;20070:19;;34906:95:0;19687:408:1;34906:95:0;35015:10;35026:5;35015:17;;;;;;;;:::i;:::-;;;;;;;;;35008:24;;34815:223;;;:::o;21662:225::-;21734:7;21766:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21766:16:0;21797:19;21789:73;;;;-1:-1:-1;;;21789:73:0;;15737:2:1;21789:73:0;;;15719:21:1;15776:2;15756:18;;;15749:30;15815:34;15795:18;;;15788:62;-1:-1:-1;;;15866:18:1;;;15859:39;15915:19;;21789:73:0;15535:405:1;46398:102:0;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46470:12:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;46470:24:0;;::::1;::::0;;;::::1;::::0;;46398:102::o;45238:367::-;45301:7;45317:18;45342:22;45380:9;45375:197;45397:13;;45393:1;:17;45375:197;;;45439:5;:1;45443;45439:5;:::i;:::-;45457:24;;;;:12;:24;;;;;;;;-1:-1:-1;;;;;;45457:32:0;;;:24;;:32;45453:112;;;-1:-1:-1;;;;;45519:20:0;;;;;;:14;:20;;;;;;;-1:-1:-1;45550:5:0;;45453:112;45412:3;;;;:::i;:::-;;;;45375:197;;45643:99;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;45715:9:::1;:21:::0;45643:99::o;47984:282::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;48052:18:::1;::::0;48077:184:::1;48099:13;;48095:1;:17;48077:184;;;48141:5;:1:::0;48145::::1;48141:5;:::i;:::-;48159:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;;48159:32:0;;::::1;:24:::0;::::1;:32;48155:99;;;-1:-1:-1::0;;;;;;;48204:20:0::1;48227:1;48204:20:::0;;;:14:::1;:20;::::0;;;;:24;22948:373::o;48155:99::-:1;48114:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48077:184;;21412:198:::0;21484:7;-1:-1:-1;;;;;21508:19:0;;21500:74;;;;-1:-1:-1;;;21500:74:0;;15326:2:1;21500:74:0;;;15308:21:1;15365:2;15345:18;;;15338:30;15404:34;15384:18;;;15377:62;-1:-1:-1;;;15455:18:1;;;15448:40;15505:19;;21500:74:0;15124:406:1;21500:74:0;-1:-1:-1;;;;;;21588:16:0;;;;;:9;:16;;;;;;;21412:198::o;41407:97::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;41468:30:::1;41495:1;41468:18;:30::i;45950:115::-:0;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46028:19:::1;:31:::0;;-1:-1:-1;;46028:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45950:115::o;46798:104::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46872:16:0::1;46891:5;46872:16:::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;46872:24:0::1;::::0;;46798:104::o;22097:98::-;22153:13;22182:7;22175:14;;;;;:::i;42527:26::-;;;;;;;:::i;46293:101::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46366:11:::1;:22:::0;46293:101::o;23648:149::-;23739:52;19663:10;23772:8;23782;23739:18;:52::i;45845:101::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;45918:11:::1;:22:::0;45845:101::o;46906:639::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;47031:13:::1;;47019:8;:25;;46992:76;;;::::0;-1:-1:-1;;;46992:76:0;;18440:2:1;46992:76:0::1;::::0;::::1;18422:21:1::0;18479:2;18459:18;;;18452:30;-1:-1:-1;;;18498:18:1;;;18491:50;18558:18;;46992:76:0::1;18238:344:1::0;46992:76:0::1;47097:8;47083:10;:22;;47075:31;;;::::0;::::1;;47128:10:::0;47113:427:::1;47142:8;47140:1;:10;47113:427;;;47166:18;47187:5;:1:::0;47191::::1;47187:5;:::i;:::-;47201:19;47223:24:::0;;;:12:::1;:24;::::0;;;;;;;;-1:-1:-1;;;;;47223:24:0::1;47279:27:::0;;;:14:::1;:27:::0;;;;;;;47166:26;;-1:-1:-1;47223:24:0;47319:25;;;::::1;::::0;:45:::1;;;47363:1;47348:12;:16;47319:45;47315:218;;;47382:9;47377:105;47397:12;47395:1;:14;47377:105;;;47429:41;47439:11;47452:13;34725:10:::0;:17;;34641:107;47452:13:::1;:17;::::0;47468:1:::1;47452:17;:::i;:::-;47429:9;:41::i;:::-;47411:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47377:105;;;-1:-1:-1::0;;;;;;47492:27:0;::::1;47522:1;47492:27:::0;;;:14:::1;:27;::::0;;;;:31;47315:218:::1;47157:383;;;47152:3;;;;;:::i;:::-;;;;47113:427;;44194:216:::0;44294:9;44280:10;44266:11;;:24;;;;:::i;:::-;:37;;44258:61;;;;-1:-1:-1;;;44258:61:0;;16147:2:1;44258:61:0;;;16129:21:1;16186:2;16166:18;;;16159:30;-1:-1:-1;;;16205:18:1;;;16198:41;16256:18;;44258:61:0;15945:335:1;44258:61:0;44334:16;;;;;;;44326:37;;;;-1:-1:-1;;;44326:37:0;;19135:2:1;44326:37:0;;;19117:21:1;19174:1;19154:18;;;19147:29;-1:-1:-1;;;19192:18:1;;;19185:38;19240:18;;44326:37:0;18933:331:1;44326:37:0;44370:34;44381:10;44393;44370;:34::i;43949:241::-;43080:10;43069:22;;;;:10;:22;;;;;;;;43061:50;;;;-1:-1:-1;;;43061:50:0;;14638:2:1;43061:50:0;;;14620:21:1;14677:2;14657:18;;;14650:30;-1:-1:-1;;;14696:18:1;;;14689:45;14751:18;;43061:50:0;14436:339:1;43061:50:0;44071:9:::1;44057:10;44040:14;;:27;;;;:::i;:::-;:40;;44032:64;;;::::0;-1:-1:-1;;;44032:64:0;;16147:2:1;44032:64:0::1;::::0;::::1;16129:21:1::0;16186:2;16166:18;;;16159:30;-1:-1:-1;;;16205:18:1;;;16198:41;16256:18;;44032:64:0::1;15945:335:1::0;44032:64:0::1;44111:19;::::0;::::1;;44103:40;;;::::0;-1:-1:-1;;;44103:40:0;;19135:2:1;44103:40:0::1;::::0;::::1;19117:21:1::0;19174:1;19154:18;;;19147:29;-1:-1:-1;;;19192:18:1;;;19185:38;19240:18;;44103:40:0::1;18933:331:1::0;24669:300:0;24822:41;19663:10;24855:7;24822:18;:41::i;:::-;24814:103;;;;-1:-1:-1;;;24814:103:0;;;;;;;:::i;:::-;24924:39;24938:4;24944:2;24948:7;24957:5;24924:13;:39::i;:::-;24669:300;;;;:::o;46619:175::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46709:9:::1;46704:85;46722:16:::0;;::::1;46704:85;;;46777:4;46754:10;:20;46765:5;;46771:1;46765:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46754:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46754:20:0;:27;;-1:-1:-1;;46754:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46740:3;::::1;::::0;::::1;:::i;:::-;;;;46704:85;;44414:285:::0;26456:4;26476:16;;;:7;:16;;;;;;44480:13;;-1:-1:-1;;;;;26476:16:0;44502:76;;;;-1:-1:-1;;;44502:76:0;;;;;;;:::i;:::-;44589:12;;;;;;;44585:109;;;44618:23;44633:7;44618:14;:23::i;44585:109::-;44671:15;44664:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44414:285;;;:::o;44585:109::-;44414:285;;;:::o;46069:109::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46144:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;46144:28:0;;::::1;::::0;;;::::1;::::0;;46069:109::o;47549:431::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;47671:34;;::::1;47662:62;;;::::0;-1:-1:-1;;;47662:62:0;;20302:2:1;47662:62:0::1;::::0;::::1;20284:21:1::0;20341:2;20321:18;;;20314:30;-1:-1:-1;;;20360:18:1;;;20353:44;20414:18;;47662:62:0::1;20100:338:1::0;47662:62:0::1;47731:18;::::0;47756:219:::1;47774:16:::0;;::::1;47756:219;;;45215:13:::0;;47819:19:::1;::::0;47837:1:::1;47819:19;:::i;:::-;47806:32;;47874:5;;47880:1;47874:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;47847:24;::::0;;;:12:::1;:24;::::0;;;;:35;;-1:-1:-1;;;;;;47847:35:0::1;-1:-1:-1::0;;;;;47847:35:0;;;::::1;::::0;;;::::1;::::0;;47918:11;;47930:1;47918:14;;::::1;;;;;:::i;:::-;;;;;;;47891;:24;47906:5;;47912:1;47906:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47891:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47891:24:0;:41;47941:13:::1;:26:::0;;;47792:3;::::1;::::0;::::1;:::i;:::-;;;;47756:219;;;;47655:325;47549:431:::0;;;;:::o;46182:107::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;46258:14:::1;:25:::0;46182:107::o;42558:110::-;;;;;;;:::i;41647:191::-;40869:6;;-1:-1:-1;;;;;40869:6:0;19663:10;41000:23;40992:68;;;;-1:-1:-1;;;40992:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41732:22:0;::::1;41724:73;;;::::0;-1:-1:-1;;;41724:73:0;;10841:2:1;41724:73:0::1;::::0;::::1;10823:21:1::0;10880:2;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;-1:-1:-1;;;10970:18:1;;;10963:36;11016:19;;41724:73:0::1;10639:402:1::0;41724:73:0::1;41804:28;41823:8;41804:18;:28::i;21077:281::-:0;21179:4;-1:-1:-1;;;;;;21206:40:0;;-1:-1:-1;;;21206:40:0;;:99;;-1:-1:-1;;;;;;;21257:48:0;;-1:-1:-1;;;21257:48:0;21206:99;:146;;;-1:-1:-1;;;;;;;;;;12584:40:0;;;21316:36;12479:151;30177:164;30248:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30248:29:0;-1:-1:-1;;;;;30248:29:0;;;;;;;;:24;;30298:23;30248:24;30298:14;:23::i;:::-;-1:-1:-1;;;;;30289:46:0;;;;;;;;;;;30177:164;;:::o;26661:334::-;26754:4;26476:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26476:16:0;26767:73;;;;-1:-1:-1;;;26767:73:0;;13117:2:1;26767:73:0;;;13099:21:1;13156:2;13136:18;;;13129:30;13195:34;13175:18;;;13168:62;-1:-1:-1;;;13246:18:1;;;13239:42;13298:19;;26767:73:0;12915:408:1;26767:73:0;26847:13;26863:23;26878:7;26863:14;:23::i;:::-;26847:39;;26912:5;-1:-1:-1;;;;;26901:16:0;:7;-1:-1:-1;;;;;26901:16:0;;:51;;;;26945:7;-1:-1:-1;;;;;26921:31:0;:20;26933:7;26921:11;:20::i;:::-;-1:-1:-1;;;;;26921:31:0;;26901:51;:87;;;-1:-1:-1;;;;;;23975:25:0;;;23955:4;23975:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26956:32;26893:96;26661:334;-1:-1:-1;;;;26661:334:0:o;29514:559::-;29655:4;-1:-1:-1;;;;;29628:31:0;:23;29643:7;29628:14;:23::i;:::-;-1:-1:-1;;;;;29628:31:0;;29620:81;;;;-1:-1:-1;;;29620:81:0;;11248:2:1;29620:81:0;;;11230:21:1;11287:2;11267:18;;;11260:30;11326:34;11306:18;;;11299:62;-1:-1:-1;;;11377:18:1;;;11370:35;11422:19;;29620:81:0;11046:401:1;29620:81:0;-1:-1:-1;;;;;29716:16:0;;29708:65;;;;-1:-1:-1;;;29708:65:0;;12358:2:1;29708:65:0;;;12340:21:1;12397:2;12377:18;;;12370:30;12436:34;12416:18;;;12409:62;-1:-1:-1;;;12487:18:1;;;12480:34;12531:19;;29708:65:0;12156:400:1;29708:65:0;29780:39;29801:4;29807:2;29811:7;29780:20;:39::i;:::-;29874:29;29891:1;29895:7;29874:8;:29::i;:::-;-1:-1:-1;;;;;29910:15:0;;;;;;:9;:15;;;;;:20;;29929:1;;29910:15;:20;;29929:1;;29910:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29937:13:0;;;;;;:9;:13;;;;;:18;;29954:1;;29937:13;:18;;29954:1;;29937:18;:::i;:::-;;;;-1:-1:-1;;29962:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29962:21:0;-1:-1:-1;;;;;29962:21:0;;;;;;;;;29995:27;;29962:16;;29995:27;;;;;;;23018:303;22948:373;;:::o;43394:436::-;43483:1;43470:10;:14;43462:38;;;;-1:-1:-1;;;43462:38:0;;9670:2:1;43462:38:0;;;9652:21:1;9709:2;9689:18;;;9682:30;-1:-1:-1;;;9728:18:1;;;9721:41;9779:18;;43462:38:0;9468:335:1;43462:38:0;43529:11;;43515:10;:25;;43507:53;;;;-1:-1:-1;;;43507:53:0;;13869:2:1;43507:53:0;;;13851:21:1;13908:2;13888:18;;;13881:30;-1:-1:-1;;;13927:18:1;;;13920:45;13982:18;;43507:53:0;13667:339:1;43507:53:0;43607:9;;43592:10;43576:13;34725:10;:17;;34641:107;43576:13;:26;;;;:::i;:::-;43575:41;;43567:71;;;;-1:-1:-1;;;43567:71:0;;18789:2:1;43567:71:0;;;18771:21:1;18828:2;18808:18;;;18801:30;-1:-1:-1;;;18847:18:1;;;18840:47;18904:18;;43567:71:0;18587:341:1;43567:71:0;-1:-1:-1;;;;;43653:16:0;;43645:47;;;;-1:-1:-1;;;43645:47:0;;12011:2:1;43645:47:0;;;11993:21:1;12050:2;12030:18;;;12023:30;-1:-1:-1;;;12069:18:1;;;12062:48;12127:18;;43645:47:0;11809:342:1;43645:47:0;43704:9;43699:86;43719:10;43717:1;:12;43699:86;;;43745:32;43755:2;43759:13;34725:10;:17;;34641:107;43745:32;43731:3;;;;:::i;:::-;;;;43699:86;;;-1:-1:-1;43796:28:0;;;-1:-1:-1;;;;;7985:32:1;;7967:51;;8049:2;8034:18;;8027:34;;;43796:28:0;;7940:18:1;43796:28:0;;;;;;;43394:436;;:::o;41986:177::-;42075:6;;;-1:-1:-1;;;;;42088:17:0;;;-1:-1:-1;;;;;;42088:17:0;;;;;;;42117:40;;42075:6;;;42088:17;42075:6;;42117:40;;42056:16;;42117:40;42049:114;41986:177;:::o;30469:287::-;30606:8;-1:-1:-1;;;;;30597:17:0;:5;-1:-1:-1;;;;;30597:17:0;;;30589:55;;;;-1:-1:-1;;;30589:55:0;;12763:2:1;30589:55:0;;;12745:21:1;12802:2;12782:18;;;12775:30;12841:27;12821:18;;;12814:55;12886:18;;30589:55:0;12561:349:1;30589:55:0;-1:-1:-1;;;;;30651:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;30651:46:0;;;;;;;;;;30709:41;;8849::1;;;30709::0;;8822:18:1;30709:41:0;;;;;;;30469:287;;;:::o;27313:104::-;27385:26;27395:2;27399:7;27385:26;;;;;;;;;;;;:9;:26::i;25811:287::-;25946:28;25956:4;25962:2;25966:7;25946:9;:28::i;:::-;25989:48;26012:4;26018:2;26022:7;26031:5;25989:22;:48::i;:::-;25981:111;;;;-1:-1:-1;;;25981:111:0;;;;;;;:::i;22256:318::-;26456:4;26476:16;;;:7;:16;;;;;;22329:13;;-1:-1:-1;;;;;26476:16:0;22351:76;;;;-1:-1:-1;;;22351:76:0;;;;;;;:::i;:::-;22434:21;22458:10;:8;:10::i;:::-;22434:34;;22506:1;22488:7;22482:21;:25;:86;;;;;;;;;;;;;;;;;22534:7;22543:18;:7;:16;:18::i;:::-;22517:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22482:86;22475:93;22256:318;-1:-1:-1;;;22256:318:0:o;35617:519::-;-1:-1:-1;;;;;35799:18:0;;35795:167;;35828:40;35860:7;36919:10;:17;;36892:24;;;;:15;:24;;;;;:44;;;36943:24;;;;;;;;;;;;36819:154;35828:40;35795:167;;;35894:2;-1:-1:-1;;;;;35886:10:0;:4;-1:-1:-1;;;;;35886:10:0;;35882:80;;35907:47;35940:4;35946:7;35907:32;:47::i;:::-;-1:-1:-1;;;;;35972:16:0;;35968:163;;35999:45;36036:7;35999:36;:45::i;35968:163::-;36068:4;-1:-1:-1;;;;;36062:10:0;:2;-1:-1:-1;;;;;36062:10:0;;36058:73;;36083:40;36111:2;36115:7;36083:27;:40::i;27632:281::-;27744:18;27750:2;27754:7;27744:5;:18::i;:::-;27785:54;27816:1;27820:2;27824:7;27833:5;27785:22;:54::i;:::-;27769:138;;;;-1:-1:-1;;;27769:138:0;;;;;;;:::i;31297:669::-;31434:4;-1:-1:-1;;;;;31451:13:0;;3360:19;:23;31447:514;;31481:72;;-1:-1:-1;;;31481:72:0;;-1:-1:-1;;;;;31481:36:0;;;;;:72;;19663:10;;31532:4;;31538:7;;31547:5;;31481:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31481:72:0;;;;;;;;-1:-1:-1;;31481:72:0;;;;;;;;;;;;:::i;:::-;;;31477:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31701:13:0;;31697:214;;31734:60;;-1:-1:-1;;;31734:60:0;;;;;;;:::i;31697:214::-;31879:6;31873:13;31864:6;31860:2;31856:15;31849:38;31477:443;-1:-1:-1;;;;;;31596:51:0;-1:-1:-1;;;31596:51:0;;-1:-1:-1;31589:58:0;;31447:514;-1:-1:-1;31949:4:0;31297:669;;;;;;:::o;43296:94::-;43348:13;43377:7;43370:14;;;;;:::i;378:635::-;434:13;641:10;637:43;;-1:-1:-1;;662:10:0;;;;;;;;;;;;-1:-1:-1;;;662:10:0;;;;;378:635::o;637:43::-;701:5;686:12;734:62;741:9;;734:62;;761:8;;;;:::i;:::-;;-1:-1:-1;778:10:0;;-1:-1:-1;786:2:0;778:10;;:::i;:::-;;;734:62;;;802:19;834:6;824:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;824:17:0;;802:39;;848:132;855:10;;848:132;;876:11;886:1;876:11;;:::i;:::-;;-1:-1:-1;939:10:0;947:2;939:5;:10;:::i;:::-;926:24;;:2;:24;:::i;:::-;913:39;;896:6;903;896:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;896:56:0;;;;;;;;-1:-1:-1;961:11:0;970:2;961:11;;:::i;:::-;;;848:132;;37580:920;37832:22;37882:1;37857:22;37874:4;37857:16;:22::i;:::-;:26;;;;:::i;:::-;37890:18;37911:26;;;:17;:26;;;;;;37832:51;;-1:-1:-1;38034:28:0;;;38030:304;;-1:-1:-1;;;;;38095:18:0;;38073:19;38095:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38138:30;;;;;;:44;;;38249:30;;:17;:30;;;;;:43;;;38030:304;-1:-1:-1;38420:26:0;;;;:17;:26;;;;;;;;38413:33;;;-1:-1:-1;;;;;38460:18:0;;;;;:12;:18;;;;;:34;;;;;;;38453:41;37580:920::o;38781:1017::-;39045:10;:17;39020:22;;39045:21;;39065:1;;39045:21;:::i;:::-;39073:18;39094:24;;;:15;:24;;;;;;39449:10;:26;;39020:46;;-1:-1:-1;39094:24:0;;39020:46;;39449:26;;;;;;:::i;:::-;;;;;;;;;39427:48;;39507:11;39482:10;39493;39482:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;39583:28;;;:15;:28;;;;;;;:41;;;39745:24;;;;;39738:31;39776:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;38852:946;;;38781:1017;:::o;36423:207::-;36504:14;36521:20;36538:2;36521:16;:20::i;:::-;-1:-1:-1;;;;;36548:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;36589:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;36423:207:0:o;28221:401::-;-1:-1:-1;;;;;28297:16:0;;28289:61;;;;-1:-1:-1;;;28289:61:0;;16487:2:1;28289:61:0;;;16469:21:1;;;16506:18;;;16499:30;16565:34;16545:18;;;16538:62;16617:18;;28289:61:0;16285:356:1;28289:61:0;26456:4;26476:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26476:16:0;:30;28357:58;;;;-1:-1:-1;;;28357:58:0;;11654:2:1;28357:58:0;;;11636:21:1;11693:2;11673:18;;;11666:30;11732;11712:18;;;11705:58;11780:18;;28357:58:0;11452:352:1;28357:58:0;28422:45;28451:1;28455:2;28459:7;28422:20;:45::i;:::-;-1:-1:-1;;;;;28474:13:0;;;;;;:9;:13;;;;;:18;;28491:1;;28474:13;:18;;28491:1;;28474:18;:::i;:::-;;;;-1:-1:-1;;28499:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28499:21:0;-1:-1:-1;;;;;28499:21:0;;;;;;;;28532:33;;28499:16;;;28532:33;;28499:16;;28532:33;45819:16:::1;45746:95:::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;828:367;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;2581:18;2573:6;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3084:254:1:o;3343:437::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3546:9;3533:23;3579:18;3571:6;3568:30;3565:50;;;3611:1;3608;3601:12;3565:50;3650:70;3712:7;3703:6;3692:9;3688:22;3650:70;:::i;:::-;3739:8;;3624:96;;-1:-1:-1;3343:437:1;-1:-1:-1;;;;3343:437:1:o;3785:773::-;3907:6;3915;3923;3931;3984:2;3972:9;3963:7;3959:23;3955:32;3952:52;;;4000:1;3997;3990:12;3952:52;4040:9;4027:23;4069:18;4110:2;4102:6;4099:14;4096:34;;;4126:1;4123;4116:12;4096:34;4165:70;4227:7;4218:6;4207:9;4203:22;4165:70;:::i;:::-;4254:8;;-1:-1:-1;4139:96:1;-1:-1:-1;4342:2:1;4327:18;;4314:32;;-1:-1:-1;4358:16:1;;;4355:36;;;4387:1;4384;4377:12;4355:36;;4426:72;4490:7;4479:8;4468:9;4464:24;4426:72;:::i;:::-;3785:773;;;;-1:-1:-1;4517:8:1;-1:-1:-1;;;;3785:773:1:o;4563:180::-;4619:6;4672:2;4660:9;4651:7;4647:23;4643:32;4640:52;;;4688:1;4685;4678:12;4640:52;4711:26;4727:9;4711:26;:::i;4748:245::-;4806:6;4859:2;4847:9;4838:7;4834:23;4830:32;4827:52;;;4875:1;4872;4865:12;4827:52;4914:9;4901:23;4933:30;4957:5;4933:30;:::i;4998:249::-;5067:6;5120:2;5108:9;5099:7;5095:23;5091:32;5088:52;;;5136:1;5133;5126:12;5088:52;5168:9;5162:16;5187:30;5211:5;5187:30;:::i;5252:450::-;5321:6;5374:2;5362:9;5353:7;5349:23;5345:32;5342:52;;;5390:1;5387;5380:12;5342:52;5430:9;5417:23;5463:18;5455:6;5452:30;5449:50;;;5495:1;5492;5485:12;5449:50;5518:22;;5571:4;5563:13;;5559:27;-1:-1:-1;5549:55:1;;5600:1;5597;5590:12;5549:55;5623:73;5688:7;5683:2;5670:16;5665:2;5661;5657:11;5623:73;:::i;5707:180::-;5766:6;5819:2;5807:9;5798:7;5794:23;5790:32;5787:52;;;5835:1;5832;5825:12;5787:52;-1:-1:-1;5858:23:1;;5707:180;-1:-1:-1;5707:180:1:o;5892:248::-;5960:6;5968;6021:2;6009:9;6000:7;5996:23;5992:32;5989:52;;;6037:1;6034;6027:12;5989:52;-1:-1:-1;;6060:23:1;;;6130:2;6115:18;;;6102:32;;-1:-1:-1;5892:248:1:o;6145:257::-;6186:3;6224:5;6218:12;6251:6;6246:3;6239:19;6267:63;6323:6;6316:4;6311:3;6307:14;6300:4;6293:5;6289:16;6267:63;:::i;:::-;6384:2;6363:15;-1:-1:-1;;6359:29:1;6350:39;;;;6391:4;6346:50;;6145:257;-1:-1:-1;;6145:257:1:o;6407:470::-;6586:3;6624:6;6618:13;6640:53;6686:6;6681:3;6674:4;6666:6;6662:17;6640:53;:::i;:::-;6756:13;;6715:16;;;;6778:57;6756:13;6715:16;6812:4;6800:17;;6778:57;:::i;:::-;6851:20;;6407:470;-1:-1:-1;;;;6407:470:1:o;7300:488::-;-1:-1:-1;;;;;7569:15:1;;;7551:34;;7621:15;;7616:2;7601:18;;7594:43;7668:2;7653:18;;7646:34;;;7716:3;7711:2;7696:18;;7689:31;;;7494:4;;7737:45;;7762:19;;7754:6;7737:45;:::i;:::-;7729:53;7300:488;-1:-1:-1;;;;;;7300:488:1:o;8072:632::-;8243:2;8295:21;;;8365:13;;8268:18;;;8387:22;;;8214:4;;8243:2;8466:15;;;;8440:2;8425:18;;;8214:4;8509:169;8523:6;8520:1;8517:13;8509:169;;;8584:13;;8572:26;;8653:15;;;;8618:12;;;;8545:1;8538:9;8509:169;;;-1:-1:-1;8695:3:1;;8072:632;-1:-1:-1;;;;;;8072:632:1:o;8901:219::-;9050:2;9039:9;9032:21;9013:4;9070:44;9110:2;9099:9;9095:18;9087:6;9070:44;:::i;10220:414::-;10422:2;10404:21;;;10461:2;10441:18;;;10434:30;10500:34;10495:2;10480:18;;10473:62;-1:-1:-1;;;10566:2:1;10551:18;;10544:48;10624:3;10609:19;;10220:414::o;17059:356::-;17261:2;17243:21;;;17280:18;;;17273:30;17339:34;17334:2;17319:18;;17312:62;17406:2;17391:18;;17059:356::o;17420:411::-;17622:2;17604:21;;;17661:2;17641:18;;;17634:30;17700:34;17695:2;17680:18;;17673:62;-1:-1:-1;;;17766:2:1;17751:18;;17744:45;17821:3;17806:19;;17420:411::o;19269:413::-;19471:2;19453:21;;;19510:2;19490:18;;;19483:30;19549:34;19544:2;19529:18;;19522:62;-1:-1:-1;;;19615:2:1;19600:18;;19593:47;19672:3;19657:19;;19269:413::o;20625:128::-;20665:3;20696:1;20692:6;20689:1;20686:13;20683:39;;;20702:18;;:::i;:::-;-1:-1:-1;20738:9:1;;20625:128::o;20758:120::-;20798:1;20824;20814:35;;20829:18;;:::i;:::-;-1:-1:-1;20863:9:1;;20758:120::o;20883:168::-;20923:7;20989:1;20985;20981:6;20977:14;20974:1;20971:21;20966:1;20959:9;20952:17;20948:45;20945:71;;;20996:18;;:::i;:::-;-1:-1:-1;21036:9:1;;20883:168::o;21056:125::-;21096:4;21124:1;21121;21118:8;21115:34;;;21129:18;;:::i;:::-;-1:-1:-1;21166:9:1;;21056:125::o;21186:258::-;21258:1;21268:113;21282:6;21279:1;21276:13;21268:113;;;21358:11;;;21352:18;21339:11;;;21332:39;21304:2;21297:10;21268:113;;;21399:6;21396:1;21393:13;21390:48;;;-1:-1:-1;;21434:1:1;21416:16;;21409:27;21186:258::o;21449:380::-;21528:1;21524:12;;;;21571;;;21592:61;;21646:4;21638:6;21634:17;21624:27;;21592:61;21699:2;21691:6;21688:14;21668:18;21665:38;21662:161;;;21745:10;21740:3;21736:20;21733:1;21726:31;21780:4;21777:1;21770:15;21808:4;21805:1;21798:15;21662:161;;21449:380;;;:::o;21834:135::-;21873:3;-1:-1:-1;;21894:17:1;;21891:43;;;21914:18;;:::i;:::-;-1:-1:-1;21961:1:1;21950:13;;21834:135::o;21974:112::-;22006:1;22032;22022:35;;22037:18;;:::i;:::-;-1:-1:-1;22071:9:1;;21974:112::o;22091:127::-;22152:10;22147:3;22143:20;22140:1;22133:31;22183:4;22180:1;22173:15;22207:4;22204:1;22197:15;22223:127;22284:10;22279:3;22275:20;22272:1;22265:31;22315:4;22312:1;22305:15;22339:4;22336:1;22329:15;22355:127;22416:10;22411:3;22407:20;22404:1;22397:31;22447:4;22444:1;22437:15;22471:4;22468:1;22461:15;22487:127;22548:10;22543:3;22539:20;22536:1;22529:31;22579:4;22576:1;22569:15;22603:4;22600:1;22593:15;22619:127;22680:10;22675:3;22671:20;22668:1;22661:31;22711:4;22708:1;22701:15;22735:4;22732:1;22725:15;22751:131;-1:-1:-1;;;;;;22825:32:1;;22815:43;;22805:71;;22872:1;22869;22862:12

Swarm Source

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