ETH Price: $3,248.66 (-12.34%)

Token

KevinZuki (KevZuki)
 

Overview

Max Total Supply

1,100 KevZuki

Holders

249

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
poorcunt.eth
Balance
5 KevZuki
0x4e88a7ef592a49b3e9b7546cde0e8ed320d3e8a9
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:
KevinZuki

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.7.0 https://hardhat.org

// File sol-temple/src/tokens/[email protected]

pragma solidity >=0.8.0 <0.9.0;
/* 

/* KEVIINNNNNNN

/**
 * @title ERC721
 * @notice A complete ERC721 implementation including metadata and enumerable
 * functions. Completely gas optimized and extensible.
 */
abstract contract ERC721 {

  /// @notice See {ERC721-Transfer}.
  event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
  /// @notice See {ERC721-Approval}.
  event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
  /// @notice See {ERC721-ApprovalForAll}.
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /// @notice See {ERC721Metadata-name}.
  string public name;
  /// @notice See {ERC721Metadata-symbol}.
  string public symbol;

  /// @notice See {ERC721Enumerable-totalSupply}.
  uint256 public totalSupply;

  /// @notice Array of all owners.
  address[] private _owners;
  /// @notice Mapping of all balances.
  mapping(address => uint256) private _balanceOf;
  /// @notice Mapping from token Id to it's approved address.
  mapping(uint256 => address) private _tokenApprovals;
  /// @notice Mapping of approvals between owner and operator.
  mapping(address => mapping(address => bool)) private _isApprovedForAll;

  constructor(string memory name_, string memory symbol_) {
    name = name_;
    symbol = symbol_;
  }

  /// @notice See {ERC721-balanceOf}.
  function balanceOf(address account_) public view virtual returns (uint256) {
    require(account_ != address(0), "ERC721: balance query for the zero address");
    return _balanceOf[account_];
  }

  /// @notice See {ERC721-ownerOf}.
  function ownerOf(uint256 tokenId_) public view virtual returns (address) {
    require(_exists(tokenId_), "ERC721: query for nonexistent token");
    address owner = _owners[tokenId_];
    return owner;
  }

  /// @notice See {ERC721Metadata-tokenURI}.
  function tokenURI(uint256) public view virtual returns (string memory);

  /// @notice See {ERC721-approve}.
  function approve(address to_, uint256 tokenId_) public virtual {
    address owner = ownerOf(tokenId_);
    require(to_ != owner, "ERC721: approval to current owner");

    require(
      msg.sender == owner || _isApprovedForAll[owner][msg.sender],
      "ERC721: caller is not owner nor approved for all"
    );

    _approve(to_, tokenId_);
  }

  /// @notice See {ERC721-getApproved}.
  function getApproved(uint256 tokenId_) public view virtual returns (address) {
    require(_exists(tokenId_), "ERC721: query for nonexistent token");
    return _tokenApprovals[tokenId_];
  }

  /// @notice See {ERC721-setApprovalForAll}.
  function setApprovalForAll(address operator_, bool approved_) public virtual {
    _setApprovalForAll(msg.sender, operator_, approved_);
  }

  /// @notice See {ERC721-isApprovedForAll}.
  function isApprovedForAll(address account_, address operator_) public view virtual returns (bool) {
    return _isApprovedForAll[account_][operator_];
  }

  /// @notice See {ERC721-transferFrom}.
  function transferFrom(
    address from_,
    address to_,
    uint256 tokenId_
  ) public virtual {
    require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721: transfer caller is not owner nor approved");
    _transfer(from_, to_, tokenId_);
  }

  /// @notice See {ERC721-safeTransferFrom}.
  function safeTransferFrom(
    address from_,
    address to_,
    uint256 tokenId_
  ) public virtual {
    safeTransferFrom(from_, to_, tokenId_, "");
  }

  /// @notice See {ERC721-safeTransferFrom}.
  function safeTransferFrom(
    address from_,
    address to_,
    uint256 tokenId_,
    bytes memory data_
  ) public virtual {
    require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721: transfer caller is not owner nor approved");
    _safeTransfer(from_, to_, tokenId_, data_);
  }

  /// @notice See {ERC721Enumerable.tokenOfOwnerByIndex}.
  function tokenOfOwnerByIndex(address account_, uint256 index_) public view returns (uint256 tokenId) {
    require(index_ < balanceOf(account_), "ERC721Enumerable: Index out of bounds");
    uint256 count;
    for (uint256 i; i < _owners.length; ++i) {
      if (account_ == _owners[i]) {
        if (count == index_) return i;
        else count++;
      }
    }
    revert("ERC721Enumerable: Index out of bounds");
  }

  /// @notice See {ERC721Enumerable.tokenByIndex}.
  function tokenByIndex(uint256 index_) public view virtual returns (uint256) {
    require(index_ < _owners.length, "ERC721Enumerable: Index out of bounds");
    return index_;
  }

  /// @notice Returns a list of all token Ids owned by `owner`.
  function walletOfOwner(address account_) public view returns (uint256[] memory) {
    uint256 balance = balanceOf(account_);
    uint256[] memory ids = new uint256[](balance);
    for (uint256 i = 0; i < balance; i++) {
      ids[i] = tokenOfOwnerByIndex(account_, i);
    }
    return ids;
  }

   /**
   * @notice 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.
   */
  function _safeTransfer(
    address from_,
    address to_,
    uint256 tokenId_,
    bytes memory data_
  ) internal virtual {
    _transfer(from_, to_, tokenId_);
    _checkOnERC721Received(from_, to_, tokenId_, data_);
  }

  /// @notice Returns whether `tokenId_` exists.
  function _exists(uint256 tokenId_) internal view virtual returns (bool) {
    return tokenId_ < _owners.length && _owners[tokenId_] != address(0);
  }

  /// @notice Returns whether `spender_` is allowed to manage `tokenId`.
  function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view virtual returns (bool) {
    require(_exists(tokenId_), "ERC721: query for nonexistent token");
    address owner = _owners[tokenId_];
    return (spender_ == owner || getApproved(tokenId_) == spender_ || isApprovedForAll(owner, spender_));
  }

  /// @notice Safely mints `tokenId_` and transfers it to `to`.
  function _safeMint(address to_, uint256 tokenId_) internal virtual {
    _safeMint(to_, tokenId_, "");
  }

  /**
   * @notice Same as {_safeMint}, but with an additional `data_` parameter which is
   * forwarded in {ERC721Receiver-onERC721Received} to contract recipients.
   */
  function _safeMint(
    address to_,
    uint256 tokenId_,
    bytes memory data_
  ) internal virtual {
    _mint(to_, tokenId_);
    _checkOnERC721Received(address(0), to_, tokenId_, data_);
  }

  /// @notice Mints `tokenId_` and transfers it to `to_`.
  function _mint(address to_, uint256 tokenId_) internal virtual {
    require(!_exists(tokenId_), "ERC721: token already minted");

    _beforeTokenTransfer(address(0), to_, tokenId_);

    _owners.push(to_);
    totalSupply++;
    unchecked {
      _balanceOf[to_]++;
    }

    emit Transfer(address(0), to_, tokenId_);
    _afterTokenTransfer(address(0), to_, tokenId_);
  }

  /// @notice Destroys `tokenId`. The approval is cleared when the token is burned.
  function _burn(uint256 tokenId_) internal virtual {
    address owner = ownerOf(tokenId_);

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

    // Clear approvals
    _approve(address(0), tokenId_);
    delete _owners[tokenId_];
    totalSupply--;
    _balanceOf[owner]--;

    emit Transfer(owner, address(0), tokenId_);
    _afterTokenTransfer(owner, address(0), tokenId_);
  }

  /// @notice Transfers `tokenId_` from `from_` to `to`.
  function _transfer(
    address from_,
    address to_,
    uint256 tokenId_
  ) internal virtual {
    require(_owners[tokenId_] == from_, "ERC721: transfer of token that is not own");

    _beforeTokenTransfer(from_, to_, tokenId_);

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

    _owners[tokenId_] = to_;
    unchecked {
      _balanceOf[from_]--;
      _balanceOf[to_]++;
    }

    emit Transfer(from_, to_, tokenId_);
    _afterTokenTransfer(from_, to_, tokenId_);
  }

  /// @notice Approve `to_` to operate on `tokenId_`
  function _approve(address to_, uint256 tokenId_) internal virtual {
    _tokenApprovals[tokenId_] = to_;
    emit Approval(_owners[tokenId_], to_, tokenId_);
  }

  /// @notice Approve `operator_` to operate on all of `account_` tokens.
  function _setApprovalForAll(
    address account_,
    address operator_,
    bool approved_
  ) internal virtual {
    require(account_ != operator_, "ERC721: approve to caller");
    _isApprovedForAll[account_][operator_] = approved_;
    emit ApprovalForAll(account_, operator_, approved_);
  }

  /// @notice ERC721Receiver callback checking and calling helper.
  function _checkOnERC721Received(
    address from_,
    address to_,
    uint256 tokenId_,
    bytes memory data_
  ) private {
    if (to_.code.length > 0) {
      try IERC721Receiver(to_).onERC721Received(msg.sender, from_, tokenId_, data_) returns (bytes4 returned) {
        require(returned == 0x150b7a02, "ERC721: safe transfer to non ERC721Receiver implementation");
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721: safe transfer to non ERC721Receiver implementation");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    }
  }

  /// @notice Hook that is called before any token transfer.
  function _beforeTokenTransfer(
    address from_,
    address to_,
    uint256 tokenId_
  ) internal virtual {}

  /// @notice Hook that is called after any token transfer.
  function _afterTokenTransfer(
    address from_,
    address to_,
    uint256 tokenId_
  ) internal virtual {}


  /// @notice See {IERC165-supportsInterface}.
  function supportsInterface(bytes4 interfaceId_) public view virtual returns (bool) {
    return
      interfaceId_ == 0x80ac58cd || // ERC721
      interfaceId_ == 0x5b5e139f || // ERC721Metadata
      interfaceId_ == 0x780e9d63 || // ERC721Enumerable
      interfaceId_ == 0x01ffc9a7; // ERC165
  }
}

interface IERC721Receiver {
  function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes memory data
  ) external returns (bytes4);
}


// File sol-temple/src/utils/[email protected]

pragma solidity >=0.8.0 <0.9.0;

/**
 * @title Auth
 * @notice Just a simple authing system.
 */
abstract contract Auth {


  /// @notice Emitted when the ownership is transfered.
  event OwnershipTransfered(address indexed from, address indexed to);

  /// @notice Contract's owner address.
  address public owner;

  /// @notice A simple modifier just to check whether the sender is the owner.
  modifier onlyOwner() {
    require(msg.sender == owner, "Auth: sender is not the owner");
    _;
  }



  constructor() {
    _transferOwnership(msg.sender);
  }

  /// @notice Set the owner address to `owner_`.
  function transferOwnership(address owner_) public onlyOwner {
    require(owner != owner_, "Auth: transfering ownership to current owner");
    _transferOwnership(owner_);
  }

  /// @notice Set the owner address to `owner_`. Does not require anything
  function _transferOwnership(address owner_) internal {
    address oldOwner = owner;
    owner = owner_;

    emit OwnershipTransfered(oldOwner, owner_);
  }
}


// File @openzeppelin/contracts/utils/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File @openzeppelin/contracts/utils/introspection/[email protected]

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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}


// File contracts/KevinZuki.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

contract KevinZuki is Auth, ERC721 {
  using Strings for uint256;

  /// @notice Max supply.
  uint256 public constant SUPPLY_MAX = 1100;
  /// @notice Max amount per claim.
  uint256 public constant SUPPLY_PER_TX = 5;

  /// @notice 0 = CLOSED, 1 = PUBLIC, 2 = WHITELIST.
  uint256 public saleState;

  /// @notice OpenSea proxy registry.
  address public opensea = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;
  /// @notice LooksRare marketplace transfer manager.
  address public looksrare = 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e;
  /// @notice Check if marketplaces pre-approve is enabled.
  bool public marketplacesApproved = true;

  /// @notice Unrevelead URI.
  string public unrevealedURI;
  /// @notice Metadata base URI.
  string public baseURI;
  /// @notice Metadata base file extension.
  string public baseExtension;

  constructor(string memory newUnrevealedURI) ERC721("KevinZuki", "KevZuki") {
    unrevealedURI = newUnrevealedURI;
  }

  /// @notice Claim one or more tokens.
  function mint(uint256 amount) external payable {
    uint256 supply = totalSupply;
    require(supply + amount <= SUPPLY_MAX, "Max supply exceeded");
    if (msg.sender != owner) {
      require(saleState == 1, "Public sale is not open");
      require(amount > 0 && amount <= SUPPLY_PER_TX, "Invalid claim amount");
      if (supply <= 333) require(msg.value == 0, "Invalid ether amount");
      else require(msg.value == amount * 0.01 ether, "Invalid ether amount");
    }

    for (uint256 i = 0; i < amount; i++) _safeMint(msg.sender, supply++);
  }

  /// @notice See {IERC721-tokenURI}.
  function tokenURI(uint256 id) public view override returns (string memory) {
    require(_exists(id), "ERC721Metadata: query for nonexisting token");

    if (bytes(unrevealedURI).length > 0) return unrevealedURI;
    return string(abi.encodePacked(baseURI, id.toString(), baseExtension));
  }

  /// @notice Set baseURI to `newBaseURI`.
  function setBaseURI(string memory newBaseURI, string memory newBaseExtension) external onlyOwner {
    baseURI = newBaseURI;
    baseExtension = newBaseExtension;
    delete unrevealedURI;
  }

  /// @notice Set unrevealedURI to `newUnrevealedURI`.
  function setUnrevealedURI(string memory newUnrevealedURI) external onlyOwner {
    unrevealedURI = newUnrevealedURI;
    
  }

  /// @notice Set saleState to `newSaleState`.
  function setSaleState(uint256 newSaleState) external onlyOwner {
    saleState = newSaleState;
  }

  /// @notice Set opensea to `newOpensea`.
  function setOpensea(address newOpensea) external onlyOwner {
    opensea = newOpensea;
  }

  /// @notice Set looksrare to `newLooksrare`.
  function setLooksrare(address newLooksrare) external onlyOwner {
    looksrare = newLooksrare;
  }

  /// @notice Toggle pre-approve feature state for sender.
  function toggleMarketplacesApproved() external onlyOwner {
    marketplacesApproved = !marketplacesApproved;
  }

  /// @notice Withdraw `value` of ether to the sender.
  function withdraw(address payable to, uint256 amount) external onlyOwner {
    to.transfer(amount);
  }

  /// @notice Withdraw `value` of `token` to the sender.
  function withdrawERC20(IERC20 token, uint256 value) external onlyOwner {
    token.transfer(msg.sender, value);
  }

  /// @notice Withdraw `id` of `token` to the sender.
  function withdrawERC721(IERC721 token, uint256 id) external onlyOwner {
    token.safeTransferFrom(address(this), msg.sender, id);
  }

  /// @notice Withdraw `id` with `value` from `token` to the sender.
  function withdrawERC1155(
    IERC1155 token,
    uint256 id,
    uint256 value
  ) external onlyOwner {
    token.safeTransferFrom(address(this), msg.sender, id, value, "");
  }

  /// @dev Modified for opensea and looksrare pre-approve so users can make truly gasless sales.
  function isApprovedForAll(address owner, address operator) public view override returns (bool) {
    if (!marketplacesApproved) return super.isApprovedForAll(owner, operator);

    return
      operator == address(ProxyRegistry(opensea).proxies(owner)) ||
      operator == looksrare ||
      super.isApprovedForAll(owner, operator);
  }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"newUnrevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransfered","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":[],"name":"SUPPLY_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksrare","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketplacesApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opensea","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"},{"internalType":"string","name":"newBaseExtension","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLooksrare","type":"address"}],"name":"setLooksrare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOpensea","type":"address"}],"name":"setOpensea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSaleState","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUnrevealedURI","type":"string"}],"name":"setUnrevealedURI","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":[],"name":"toggleMarketplacesApproved","outputs":[],"stateMutability":"nonpayable","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":"account_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600980546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c1179055600a80547401f42aa99f011a1fa7cda90e5e98b277e306bca83e6001600160a81b03199091161790553480156200006057600080fd5b5060405162002d6f38038062002d6f83398101604081905262000083916200022d565b604051806040016040528060098152602001684b6576696e5a756b6960b81b815250604051806040016040528060078152602001664b65765a756b6960c81b815250620000d6336200012160201b60201c565b8151620000eb90600190602085019062000171565b5080516200010190600290602084019062000171565b50508151620001199150600b90602084019062000171565b505062000346565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b8280546200017f9062000309565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200024157600080fd5b82516001600160401b03808211156200025957600080fd5b818501915085601f8301126200026e57600080fd5b81518181111562000283576200028362000217565b604051601f8201601f19908116603f01168101908382118183101715620002ae57620002ae62000217565b816040528281528886848701011115620002c757600080fd5b600093505b82841015620002eb5784840186015181850187015292850192620002cc565b82841115620002fd5760008684830101525b98975050505050505050565b600181811c908216806200031e57607f821691505b602082108114156200034057634e487b7160e01b600052602260045260246000fd5b50919050565b612a1980620003566000396000f3fe6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612362565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123d7565b34801561032957600080fd5b5061033d6103383660046123ea565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123ea565b610948565b005b34801561038357600080fd5b50610375610392366004612418565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612444565b610ae5565b3480156103e757600080fd5b506103756103f6366004612461565b610b4f565b34801561040757600080fd5b506103ad610416366004612418565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b3660046124a2565b610d87565b34801561045c57600080fd5b5061037561046b366004612461565b610e68565b34801561047c57600080fd5b5061049061048b366004612444565b610e83565b6040516102d191906124d7565b3480156104a957600080fd5b506103ad6104b83660046123ea565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123ea565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125c7565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612444565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad61044c81565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123ea565b611160565b3480156105e757600080fd5b506103756105f6366004612418565b61136c565b34801561060757600080fd5b50610375610616366004612639565b61143e565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612444565b611449565b34801561066757600080fd5b50610375610676366004612672565b6114b3565b34801561068757600080fd5b50610310611541565b34801561069c57600080fd5b506103106106ab3660046123ea565b61154e565b3480156106bc57600080fd5b506103ad600581565b3480156106d157600080fd5b506102c56106e03660046126f2565b6116a9565b3480156106f157600080fd5b50610375610700366004612444565b6117d6565b34801561071157600080fd5b50610375610720366004612418565b6118ae565b34801561073157600080fd5b50610375610740366004612418565b611979565b34801561075157600080fd5b50610375610760366004612720565b6119f7565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612755565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612755565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a52565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a9c565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b1f565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bf0565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e612790565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127bc565b9250505b610ca5816127bc565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114b3565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61251b565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f00612790565b602090810291909101015280610f15816127bc565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a52565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b60006004838154811061100357611003612790565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b815161107a90600c906020850190612281565b50805161108e90600d906020840190612281565b5061109b600b6000612301565b5050565b600c805461084390612755565b600b805461084390612755565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612755565b60035461044c61117083836127d7565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b0316331461133a576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b600082118015611233575060058211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b61014d81116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b61133a565b6112ec82662386f26fc100006127ef565b341461133a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae05761135a3383611353816127bc565b9450611d31565b80611364816127bc565b91505061133d565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae0919061280e565b61109b338383611d4b565b6000546001600160a01b031633146114915760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114bd3383611b1f565b61152f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61153b84848484611e1a565b50505050565b600d805461084390612755565b606061155982611a52565b6115cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115da90612755565b9050111561167457600b80546115ef90612755565b80601f016020809104026020016040519081016040528092919081815260200182805461161b90612755565b80156116685780601f1061163d57610100808354040283529160200191611668565b820191906000526020600020905b81548152906001019060200180831161164b57829003601f168201915b50505050509050919050565b600c61167f83611e31565b600d604051602001611693939291906128c5565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116ec57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177391906128f8565b6001600160a01b0316826001600160a01b0316148061179f5750600a546001600160a01b038381169116145b806117cf57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6000546001600160a01b03828116911614156118a25760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b6118ab81611f63565b50565b6000546001600160a01b031633146118f65760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561195d57600080fd5b505af1158015611971573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119c15760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b805161109b90600b906020840190612281565b60045460009082108015610830575060006001600160a01b031660048381548110611a7f57611a7f612790565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611ade57611ade612790565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b2a82611a52565b611b825760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b9757611b97612790565b6000918252602090912001546001600160a01b0390811691508416811480611bd85750836001600160a01b0316611bcd846108c4565b6001600160a01b0316145b80611be85750611be881856116a9565b949350505050565b826001600160a01b031660048281548110611c0d57611c0d612790565b6000918252602090912001546001600160a01b031614611c955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611ca0600082611a9c565b8160048281548110611cb457611cb4612790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fb3565b816001600160a01b0316836001600160a01b03161415611dad5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e25848484611bf0565b61153b84848484611fc6565b606081611e7157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e9b5780611e85816127bc565b9150611e949050600a8361292b565b9150611e75565b60008167ffffffffffffffff811115611eb657611eb661251b565b6040519080825280601f01601f191660200182016040528015611ee0576020820181803683370190505b5090505b8415611be857611ef560018361293f565b9150611f02600a86612956565b611f0d9060306127d7565b60f81b818381518110611f2257611f22612790565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f5c600a8661292b565b9450611ee4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fbd8383612180565b610ae060008484845b6001600160a01b0383163b1561153b57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061200890339088908790879060040161296a565b6020604051808303816000875af1925050508015612043575060408051601f3d908101601f19168201909252612040918101906129a6565b60015b6120f3573d808015612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b5080516120eb5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121795760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61218981611a52565b156121d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161222e836127bc565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461228d90612755565b90600052602060002090601f0160209004810192826122af57600085556122f5565b82601f106122c857805160ff19168380011785556122f5565b828001600101855582156122f5579182015b828111156122f55782518255916020019190600101906122da565b50610f87929150612337565b50805461230d90612755565b6000825580601f1061231d575050565b601f0160209004906000526020600020908101906118ab91905b5b80821115610f875760008155600101612338565b6001600160e01b0319811681146118ab57600080fd5b60006020828403121561237457600080fd5b81356117cf8161234c565b60005b8381101561239a578181015183820152602001612382565b8381111561153b5750506000910152565b600081518084526123c381602086016020860161237f565b601f01601f19169290920160200192915050565b6020815260006117cf60208301846123ab565b6000602082840312156123fc57600080fd5b5035919050565b6001600160a01b03811681146118ab57600080fd5b6000806040838503121561242b57600080fd5b823561243681612403565b946020939093013593505050565b60006020828403121561245657600080fd5b81356117cf81612403565b60008060006060848603121561247657600080fd5b833561248181612403565b9250602084013561249181612403565b929592945050506040919091013590565b6000806000606084860312156124b757600080fd5b83356124c281612403565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561250f578351835292840192918401916001016124f3565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561254c5761254c61251b565b604051601f8501601f19908116603f011681019082821181831017156125745761257461251b565b8160405280935085815286868601111561258d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125b857600080fd5b6117cf83833560208501612531565b600080604083850312156125da57600080fd5b823567ffffffffffffffff808211156125f257600080fd5b6125fe868387016125a7565b9350602085013591508082111561261457600080fd5b50612621858286016125a7565b9150509250929050565b80151581146118ab57600080fd5b6000806040838503121561264c57600080fd5b823561265781612403565b915060208301356126678161262b565b809150509250929050565b6000806000806080858703121561268857600080fd5b843561269381612403565b935060208501356126a381612403565b925060408501359150606085013567ffffffffffffffff8111156126c657600080fd5b8501601f810187136126d757600080fd5b6126e687823560208401612531565b91505092959194509250565b6000806040838503121561270557600080fd5b823561271081612403565b9150602083013561266781612403565b60006020828403121561273257600080fd5b813567ffffffffffffffff81111561274957600080fd5b611be8848285016125a7565b600181811c9082168061276957607f821691505b6020821081141561278a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127d0576127d06127a6565b5060010190565b600082198211156127ea576127ea6127a6565b500190565b6000816000190483118215151615612809576128096127a6565b500290565b60006020828403121561282057600080fd5b81516117cf8161262b565b8054600090600181811c908083168061284557607f831692505b602080841082141561286757634e487b7160e01b600052602260045260246000fd5b81801561287b576001811461288c576128b9565b60ff198616895284890196506128b9565b60008881526020902060005b868110156128b15781548b820152908501908301612898565b505084890196505b50505050505092915050565b60006128d1828661282b565b84516128e181836020890161237f565b6128ed8183018661282b565b979650505050505050565b60006020828403121561290a57600080fd5b81516117cf81612403565b634e487b7160e01b600052601260045260246000fd5b60008261293a5761293a612915565b500490565b600082821015612951576129516127a6565b500390565b60008261296557612965612915565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261299c60808301846123ab565b9695505050505050565b6000602082840312156129b857600080fd5b81516117cf8161234c56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a26469706673582212201dd156da198f59a2aa142cf263886702671df5faf793666c46769335fd537df264736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55334259694b754d4a414743717a4665676f5475314c375a51754d4a4c47546263696647565a53533832344c2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612362565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123d7565b34801561032957600080fd5b5061033d6103383660046123ea565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123ea565b610948565b005b34801561038357600080fd5b50610375610392366004612418565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612444565b610ae5565b3480156103e757600080fd5b506103756103f6366004612461565b610b4f565b34801561040757600080fd5b506103ad610416366004612418565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b3660046124a2565b610d87565b34801561045c57600080fd5b5061037561046b366004612461565b610e68565b34801561047c57600080fd5b5061049061048b366004612444565b610e83565b6040516102d191906124d7565b3480156104a957600080fd5b506103ad6104b83660046123ea565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123ea565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125c7565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612444565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad61044c81565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123ea565b611160565b3480156105e757600080fd5b506103756105f6366004612418565b61136c565b34801561060757600080fd5b50610375610616366004612639565b61143e565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612444565b611449565b34801561066757600080fd5b50610375610676366004612672565b6114b3565b34801561068757600080fd5b50610310611541565b34801561069c57600080fd5b506103106106ab3660046123ea565b61154e565b3480156106bc57600080fd5b506103ad600581565b3480156106d157600080fd5b506102c56106e03660046126f2565b6116a9565b3480156106f157600080fd5b50610375610700366004612444565b6117d6565b34801561071157600080fd5b50610375610720366004612418565b6118ae565b34801561073157600080fd5b50610375610740366004612418565b611979565b34801561075157600080fd5b50610375610760366004612720565b6119f7565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612755565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612755565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a52565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a9c565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b1f565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bf0565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e612790565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127bc565b9250505b610ca5816127bc565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114b3565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61251b565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f00612790565b602090810291909101015280610f15816127bc565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a52565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b60006004838154811061100357611003612790565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b815161107a90600c906020850190612281565b50805161108e90600d906020840190612281565b5061109b600b6000612301565b5050565b600c805461084390612755565b600b805461084390612755565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612755565b60035461044c61117083836127d7565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b0316331461133a576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b600082118015611233575060058211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b61014d81116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b61133a565b6112ec82662386f26fc100006127ef565b341461133a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae05761135a3383611353816127bc565b9450611d31565b80611364816127bc565b91505061133d565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae0919061280e565b61109b338383611d4b565b6000546001600160a01b031633146114915760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114bd3383611b1f565b61152f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61153b84848484611e1a565b50505050565b600d805461084390612755565b606061155982611a52565b6115cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115da90612755565b9050111561167457600b80546115ef90612755565b80601f016020809104026020016040519081016040528092919081815260200182805461161b90612755565b80156116685780601f1061163d57610100808354040283529160200191611668565b820191906000526020600020905b81548152906001019060200180831161164b57829003601f168201915b50505050509050919050565b600c61167f83611e31565b600d604051602001611693939291906128c5565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116ec57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177391906128f8565b6001600160a01b0316826001600160a01b0316148061179f5750600a546001600160a01b038381169116145b806117cf57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6000546001600160a01b03828116911614156118a25760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b6118ab81611f63565b50565b6000546001600160a01b031633146118f65760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561195d57600080fd5b505af1158015611971573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119c15760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b805161109b90600b906020840190612281565b60045460009082108015610830575060006001600160a01b031660048381548110611a7f57611a7f612790565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611ade57611ade612790565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b2a82611a52565b611b825760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b9757611b97612790565b6000918252602090912001546001600160a01b0390811691508416811480611bd85750836001600160a01b0316611bcd846108c4565b6001600160a01b0316145b80611be85750611be881856116a9565b949350505050565b826001600160a01b031660048281548110611c0d57611c0d612790565b6000918252602090912001546001600160a01b031614611c955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611ca0600082611a9c565b8160048281548110611cb457611cb4612790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fb3565b816001600160a01b0316836001600160a01b03161415611dad5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e25848484611bf0565b61153b84848484611fc6565b606081611e7157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e9b5780611e85816127bc565b9150611e949050600a8361292b565b9150611e75565b60008167ffffffffffffffff811115611eb657611eb661251b565b6040519080825280601f01601f191660200182016040528015611ee0576020820181803683370190505b5090505b8415611be857611ef560018361293f565b9150611f02600a86612956565b611f0d9060306127d7565b60f81b818381518110611f2257611f22612790565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f5c600a8661292b565b9450611ee4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fbd8383612180565b610ae060008484845b6001600160a01b0383163b1561153b57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061200890339088908790879060040161296a565b6020604051808303816000875af1925050508015612043575060408051601f3d908101601f19168201909252612040918101906129a6565b60015b6120f3573d808015612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b5080516120eb5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121795760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61218981611a52565b156121d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161222e836127bc565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461228d90612755565b90600052602060002090601f0160209004810192826122af57600085556122f5565b82601f106122c857805160ff19168380011785556122f5565b828001600101855582156122f5579182015b828111156122f55782518255916020019190600101906122da565b50610f87929150612337565b50805461230d90612755565b6000825580601f1061231d575050565b601f0160209004906000526020600020908101906118ab91905b5b80821115610f875760008155600101612338565b6001600160e01b0319811681146118ab57600080fd5b60006020828403121561237457600080fd5b81356117cf8161234c565b60005b8381101561239a578181015183820152602001612382565b8381111561153b5750506000910152565b600081518084526123c381602086016020860161237f565b601f01601f19169290920160200192915050565b6020815260006117cf60208301846123ab565b6000602082840312156123fc57600080fd5b5035919050565b6001600160a01b03811681146118ab57600080fd5b6000806040838503121561242b57600080fd5b823561243681612403565b946020939093013593505050565b60006020828403121561245657600080fd5b81356117cf81612403565b60008060006060848603121561247657600080fd5b833561248181612403565b9250602084013561249181612403565b929592945050506040919091013590565b6000806000606084860312156124b757600080fd5b83356124c281612403565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561250f578351835292840192918401916001016124f3565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561254c5761254c61251b565b604051601f8501601f19908116603f011681019082821181831017156125745761257461251b565b8160405280935085815286868601111561258d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125b857600080fd5b6117cf83833560208501612531565b600080604083850312156125da57600080fd5b823567ffffffffffffffff808211156125f257600080fd5b6125fe868387016125a7565b9350602085013591508082111561261457600080fd5b50612621858286016125a7565b9150509250929050565b80151581146118ab57600080fd5b6000806040838503121561264c57600080fd5b823561265781612403565b915060208301356126678161262b565b809150509250929050565b6000806000806080858703121561268857600080fd5b843561269381612403565b935060208501356126a381612403565b925060408501359150606085013567ffffffffffffffff8111156126c657600080fd5b8501601f810187136126d757600080fd5b6126e687823560208401612531565b91505092959194509250565b6000806040838503121561270557600080fd5b823561271081612403565b9150602083013561266781612403565b60006020828403121561273257600080fd5b813567ffffffffffffffff81111561274957600080fd5b611be8848285016125a7565b600181811c9082168061276957607f821691505b6020821081141561278a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127d0576127d06127a6565b5060010190565b600082198211156127ea576127ea6127a6565b500190565b6000816000190483118215151615612809576128096127a6565b500290565b60006020828403121561282057600080fd5b81516117cf8161262b565b8054600090600181811c908083168061284557607f831692505b602080841082141561286757634e487b7160e01b600052602260045260246000fd5b81801561287b576001811461288c576128b9565b60ff198616895284890196506128b9565b60008881526020902060005b868110156128b15781548b820152908501908301612898565b505084890196505b50505050505092915050565b60006128d1828661282b565b84516128e181836020890161237f565b6128ed8183018661282b565b979650505050505050565b60006020828403121561290a57600080fd5b81516117cf81612403565b634e487b7160e01b600052601260045260246000fd5b60008261293a5761293a612915565b500490565b600082821015612951576129516127a6565b500390565b60008261296557612965612915565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261299c60808301846123ab565b9695505050505050565b6000602082840312156129b857600080fd5b81516117cf8161234c56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a26469706673582212201dd156da198f59a2aa142cf263886702671df5faf793666c46769335fd537df264736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55334259694b754d4a414743717a4665676f5475314c375a51754d4a4c47546263696647565a53533832344c2f00000000000000000000

-----Decoded View---------------
Arg [0] : newUnrevealedURI (string): ipfs://QmU3BYiKuMJAGCqzFegoTu1L7ZQuMJLGTbcifGVZSS824L/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d55334259694b754d4a414743717a4665676f5475314c37
Arg [3] : 5a51754d4a4c47546263696647565a53533832344c2f00000000000000000000


Deployed Bytecode Sourcemap

26800:4260:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10092:305;;;;;;;;;;-1:-1:-1;10092:305:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;10092:305:0;;;;;;;;27416:39;;;;;;;;;;-1:-1:-1;27416:39:0;;;;-1:-1:-1;;;27416:39:0;;;;;;810:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2575:194::-;;;;;;;;;;-1:-1:-1;2575:194:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1738:55:1;;;1720:74;;1708:2;1693:18;2575:194:0;1574:226:1;29228:100:0;;;;;;;;;;-1:-1:-1;29228:100:0;;;;;:::i;:::-;;:::i;:::-;;2172:356;;;;;;;;;;-1:-1:-1;2172:356:0;;;;;:::i;:::-;;:::i;955:26::-;;;;;;;;;;;;;;;;;;;2430:25:1;;;2418:2;2403:18;955:26:0;2284:177:1;29524:100:0;;;;;;;;;;-1:-1:-1;29524:100:0;;;;;:::i;:::-;;:::i;3220:256::-;;;;;;;;;;-1:-1:-1;3220:256:0;;;;;:::i;:::-;;:::i;4103:430::-;;;;;;;;;;-1:-1:-1;4103:430:0;;;;;:::i;:::-;;:::i;29690:114::-;;;;;;;;;;;;;:::i;30425:184::-;;;;;;;;;;-1:-1:-1;30425:184:0;;;;;:::i;:::-;;:::i;3528:162::-;;;;;;;;;;-1:-1:-1;3528:162:0;;;;;:::i;:::-;;:::i;4844:301::-;;;;;;;;;;-1:-1:-1;4844:301:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4591:182::-;;;;;;;;;;-1:-1:-1;4591:182:0;;;;;:::i;:::-;;:::i;27154:67::-;;;;;;;;;;-1:-1:-1;27154:67:0;;;;-1:-1:-1;;;;;27154:67:0;;;27084:24;;;;;;;;;;;;;;;;1796:210;;;;;;;;;;-1:-1:-1;1796:210:0;;;;;:::i;:::-;;:::i;28788:196::-;;;;;;;;;;-1:-1:-1;28788:196:0;;;;;:::i;:::-;;:::i;27559:21::-;;;;;;;;;;;;;:::i;27493:27::-;;;;;;;;;;;;;:::i;1554:199::-;;;;;;;;;;-1:-1:-1;1554:199:0;;;;;:::i;:::-;;:::i;10944:20::-;;;;;;;;;;-1:-1:-1;10944:20:0;;;;-1:-1:-1;;;;;10944:20:0;;;26899:41;;;;;;;;;;;;26936:4;26899:41;;877:20;;;;;;;;;;;;;:::i;27831:564::-;;;;;;:::i;:::-;;:::i;30035:117::-;;;;;;;;;;-1:-1:-1;30035:117:0;;;;;:::i;:::-;;:::i;2822:142::-;;;;;;;;;;-1:-1:-1;2822:142:0;;;;;:::i;:::-;;:::i;27281:69::-;;;;;;;;;;-1:-1:-1;27281:69:0;;;;-1:-1:-1;;;;;27281:69:0;;;29378:92;;;;;;;;;;-1:-1:-1;29378:92:0;;;;;:::i;:::-;;:::i;3742:296::-;;;;;;;;;;-1:-1:-1;3742:296:0;;;;;:::i;:::-;;:::i;27630:27::-;;;;;;;;;;;;;:::i;28440:298::-;;;;;;;;;;-1:-1:-1;28440:298:0;;;;;:::i;:::-;;:::i;26982:41::-;;;;;;;;;;;;27022:1;26982:41;;30713:344;;;;;;;;;;-1:-1:-1;30713:344:0;;;;;:::i;:::-;;:::i;11277:178::-;;;;;;;;;;-1:-1:-1;11277:178:0;;;;;:::i;:::-;;:::i;30213:136::-;;;;;;;;;;-1:-1:-1;30213:136:0;;;;;:::i;:::-;;:::i;29866:105::-;;;;;;;;;;-1:-1:-1;29866:105:0;;;;;:::i;:::-;;:::i;29046:128::-;;;;;;;;;;-1:-1:-1;29046:128:0;;;;;:::i;:::-;;:::i;10092:305::-;10169:4;10196:26;-1:-1:-1;;;;;;10196:26:0;;;;:73;;-1:-1:-1;10243:26:0;-1:-1:-1;;;;;;10243:26:0;;;10196:73;:128;;;-1:-1:-1;10298:26:0;-1:-1:-1;;;;;;10298:26:0;;;10196:128;:185;;;-1:-1:-1;10355:26:0;-1:-1:-1;;;;;;10355:26:0;;;10196:185;10182:199;10092:305;-1:-1:-1;;10092:305:0:o;810:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2575:194::-;2643:7;2667:17;2675:8;2667:7;:17::i;:::-;2659:65;;;;-1:-1:-1;;;2659:65:0;;9495:2:1;2659:65:0;;;9477:21:1;9534:2;9514:18;;;9507:30;9573:34;9553:18;;;9546:62;-1:-1:-1;;;9624:18:1;;;9617:33;9667:19;;2659:65:0;;;;;;;;;-1:-1:-1;2738:25:0;;;;:15;:25;;;;;;-1:-1:-1;;;;;2738:25:0;;2575:194::o;29228:100::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29298:9:::1;:24:::0;29228:100::o;2172:356::-;2242:13;2258:17;2266:8;2258:7;:17::i;:::-;2242:33;;2297:5;-1:-1:-1;;;;;2290:12:0;:3;-1:-1:-1;;;;;2290:12:0;;;2282:58;;;;-1:-1:-1;;;2282:58:0;;10257:2:1;2282:58:0;;;10239:21:1;10296:2;10276:18;;;10269:30;10335:34;10315:18;;;10308:62;10406:3;10386:18;;;10379:31;10427:19;;2282:58:0;10055:397:1;2282:58:0;2365:10;-1:-1:-1;;;;;2365:19:0;;;;:59;;-1:-1:-1;;;;;;2388:24:0;;;;;;:17;:24;;;;;;;;2413:10;2388:36;;;;;;;;;;2365:59;2349:141;;;;-1:-1:-1;;;2349:141:0;;10659:2:1;2349:141:0;;;10641:21:1;10698:2;10678:18;;;10671:30;10737:34;10717:18;;;10710:62;10808:18;10788;;;10781:46;10844:19;;2349:141:0;10457:412:1;2349:141:0;2499:23;2508:3;2513:8;2499;:23::i;:::-;2235:293;2172:356;;:::o;29524:100::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29594:9:::1;:24:::0;;-1:-1:-1;;;;;;29594:24:0::1;-1:-1:-1::0;;;;;29594:24:0;;;::::1;::::0;;;::::1;::::0;;29524:100::o;3220:256::-;3338:40;3357:10;3369:8;3338:18;:40::i;:::-;3330:102;;;;-1:-1:-1;;;3330:102:0;;11076:2:1;3330:102:0;;;11058:21:1;11115:2;11095:18;;;11088:30;11154:34;11134:18;;;11127:62;11225:19;11205:18;;;11198:47;11262:19;;3330:102:0;10874:413:1;3330:102:0;3439:31;3449:5;3456:3;3461:8;3439:9;:31::i;4103:430::-;4187:15;4228:19;4238:8;4228:9;:19::i;:::-;4219:6;:28;4211:78;;;;-1:-1:-1;;;4211:78:0;;11494:2:1;4211:78:0;;;11476:21:1;11533:2;11513:18;;;11506:30;11572:34;11552:18;;;11545:62;-1:-1:-1;;;11623:18:1;;;11616:35;11668:19;;4211:78:0;11292:401:1;4211:78:0;4296:13;4321:9;4316:158;4336:7;:14;4332:18;;4316:158;;;4382:7;4390:1;4382:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4370:22:0;;;4382:10;;4370:22;4366:101;;;4418:6;4409:5;:15;4405:52;;;4433:1;-1:-1:-1;4426:8:0;;-1:-1:-1;4426:8:0;4405:52;4450:7;;;;:::i;:::-;;;;4405:52;4352:3;;;:::i;:::-;;;4316:158;;;-1:-1:-1;4480:47:0;;-1:-1:-1;;;4480:47:0;;11494:2:1;4480:47:0;;;11476:21:1;11533:2;11513:18;;;11506:30;11572:34;11552:18;;;11545:62;-1:-1:-1;;;11623:18:1;;;11616:35;11668:19;;4480:47:0;11292:401:1;29690:114:0;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29778:20:::1;::::0;;29754:44;;::::1;-1:-1:-1::0;;;29778:20:0;;;::::1;;;29777:21;29754:44:::0;;::::1;;::::0;;29690:114::o;30425:184::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;30539:64:::1;::::0;;;;30570:4:::1;30539:64;::::0;::::1;12572:34:1::0;30577:10:0::1;12622:18:1::0;;;12615:43;12674:18;;;12667:34;;;12717:18;;;12710:34;;;12781:3;12760:19;;;12753:32;-1:-1:-1;12801:19:1;;;12794:30;-1:-1:-1;;;;;30539:22:0;::::1;::::0;::::1;::::0;12841:19:1;;30539:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30425:184:::0;;;:::o;3528:162::-;3642:42;3659:5;3666:3;3671:8;3642:42;;;;;;;;;;;;:16;:42::i;4844:301::-;4906:16;4931:15;4949:19;4959:8;4949:9;:19::i;:::-;4931:37;;4975:20;5012:7;4998:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4998:22:0;;4975:45;;5032:9;5027:96;5051:7;5047:1;:11;5027:96;;;5083:32;5103:8;5113:1;5083:19;:32::i;:::-;5074:3;5078:1;5074:6;;;;;;;;:::i;:::-;;;;;;;;;;:41;5060:3;;;;:::i;:::-;;;;5027:96;;;-1:-1:-1;5136:3:0;4844:301;-1:-1:-1;;;4844:301:0:o;4591:182::-;4691:7;:14;4658:7;;4682:23;;4674:73;;;;-1:-1:-1;;;4674:73:0;;11494:2:1;4674:73:0;;;11476:21:1;11533:2;11513:18;;;11506:30;11572:34;11552:18;;;11545:62;-1:-1:-1;;;11623:18:1;;;11616:35;11668:19;;4674:73:0;11292:401:1;4674:73:0;-1:-1:-1;4761:6:0;4591:182::o;1796:210::-;1860:7;1884:17;1892:8;1884:7;:17::i;:::-;1876:65;;;;-1:-1:-1;;;1876:65:0;;9495:2:1;1876:65:0;;;9477:21:1;9534:2;9514:18;;;9507:30;9573:34;9553:18;;;9546:62;-1:-1:-1;;;9624:18:1;;;9617:33;9667:19;;1876:65:0;9293:399:1;1876:65:0;1948:13;1964:7;1972:8;1964:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1964:17:0;;1796:210;-1:-1:-1;;;1796:210:0:o;28788:196::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;28892:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;28919:32:0;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;28958:20:0::1;28965:13;;28958:20;:::i;:::-;28788:196:::0;;:::o;27559:21::-;;;;;;;:::i;27493:27::-;;;;;;;:::i;1554:199::-;1620:7;-1:-1:-1;;;;;1644:22:0;;1636:77;;;;-1:-1:-1;;;1636:77:0;;13073:2:1;1636:77:0;;;13055:21:1;13112:2;13092:18;;;13085:30;13151:34;13131:18;;;13124:62;13222:12;13202:18;;;13195:40;13252:19;;1636:77:0;12871:406:1;1636:77:0;-1:-1:-1;;;;;;1727:20:0;;;;;:10;:20;;;;;;;1554:199::o;877:20::-;;;;;;;:::i;27831:564::-;27902:11;;26936:4;27928:15;27937:6;27902:11;27928:15;:::i;:::-;:29;;27920:61;;;;-1:-1:-1;;;27920:61:0;;13617:2:1;27920:61:0;;;13599:21:1;13656:2;13636:18;;;13629:30;13695:21;13675:18;;;13668:49;13734:18;;27920:61:0;13415:343:1;27920:61:0;28006:5;;-1:-1:-1;;;;;28006:5:0;27992:10;:19;27988:325;;28030:9;;28043:1;28030:14;28022:50;;;;-1:-1:-1;;;28022:50:0;;13965:2:1;28022:50:0;;;13947:21:1;14004:2;13984:18;;;13977:30;14043:25;14023:18;;;14016:53;14086:18;;28022:50:0;13763:347:1;28022:50:0;28098:1;28089:6;:10;:37;;;;;27022:1;28103:6;:23;;28089:37;28081:70;;;;-1:-1:-1;;;28081:70:0;;14317:2:1;28081:70:0;;;14299:21:1;14356:2;14336:18;;;14329:30;14395:22;14375:18;;;14368:50;14435:18;;28081:70:0;14115:344:1;28081:70:0;28174:3;28164:6;:13;28160:145;;28187:9;:14;28179:47;;;;-1:-1:-1;;;28179:47:0;;14666:2:1;28179:47:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;28179:47:0;14464:344:1;28179:47:0;28160:145;;;28261:19;:6;28270:10;28261:19;:::i;:::-;28248:9;:32;28240:65;;;;-1:-1:-1;;;28240:65:0;;14666:2:1;28240:65:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;28240:65:0;14464:344:1;28240:65:0;28326:9;28321:68;28345:6;28341:1;:10;28321:68;;;28358:31;28368:10;28380:8;;;;:::i;:::-;;;28358:9;:31::i;:::-;28353:3;;;;:::i;:::-;;;;28321:68;;30035:117;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;30113:33:::1;::::0;;;;30128:10:::1;30113:33;::::0;::::1;15160:74:1::0;15250:18;;;15243:34;;;-1:-1:-1;;;;;30113:14:0;::::1;::::0;::::1;::::0;15133:18:1;;30113:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2822:142::-:0;2906:52;2925:10;2937:9;2948;2906:18;:52::i;29378:92::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29444:7:::1;:20:::0;;-1:-1:-1;;;;;;29444:20:0::1;-1:-1:-1::0;;;;;29444:20:0;;;::::1;::::0;;;::::1;::::0;;29378:92::o;3742:296::-;3889:40;3908:10;3920:8;3889:18;:40::i;:::-;3881:102;;;;-1:-1:-1;;;3881:102:0;;11076:2:1;3881:102:0;;;11058:21:1;11115:2;11095:18;;;11088:30;11154:34;11134:18;;;11127:62;11225:19;11205:18;;;11198:47;11262:19;;3881:102:0;10874:413:1;3881:102:0;3990:42;4004:5;4011:3;4016:8;4026:5;3990:13;:42::i;:::-;3742:296;;;;:::o;27630:27::-;;;;;;;:::i;28440:298::-;28500:13;28530:11;28538:2;28530:7;:11::i;:::-;28522:67;;;;-1:-1:-1;;;28522:67:0;;15740:2:1;28522:67:0;;;15722:21:1;15779:2;15759:18;;;15752:30;15818:34;15798:18;;;15791:62;15889:13;15869:18;;;15862:41;15920:19;;28522:67:0;15538:407:1;28522:67:0;28632:1;28608:13;28602:27;;;;;:::i;:::-;;;:31;28598:57;;;28642:13;28635:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28440:298;;;:::o;28598:57::-;28693:7;28702:13;:2;:11;:13::i;:::-;28717;28676:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28662:70;;28440:298;;;:::o;30713:344::-;30820:20;;30802:4;;-1:-1:-1;;;30820:20:0;;;;30815:73;;-1:-1:-1;;;;;;3128:27:0;;;3108:4;3128:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;30842:46;;30815:73;30945:7;;30931:37;;;;;-1:-1:-1;;;;;1738:55:1;;;30931:37:0;;;1720:74:1;30945:7:0;;;;30931:30;;1693:18:1;;30931:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30911:58:0;:8;-1:-1:-1;;;;;30911:58:0;;:90;;;-1:-1:-1;30992:9:0;;-1:-1:-1;;;;;30980:21:0;;;30992:9;;30980:21;30911:90;:140;;;-1:-1:-1;;;;;;3128:27:0;;;3108:4;3128:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;31012:39;30897:154;30713:344;-1:-1:-1;;;30713:344:0:o;11277:178::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;11352:5:::1;::::0;-1:-1:-1;;;;;11352:15:0;;::::1;:5:::0;::::1;:15;;11344:72;;;::::0;-1:-1:-1;;;11344:72:0;;18059:2:1;11344:72:0::1;::::0;::::1;18041:21:1::0;18098:2;18078:18;;;18071:30;18137:34;18117:18;;;18110:62;18208:14;18188:18;;;18181:42;18240:19;;11344:72:0::1;17857:408:1::0;11344:72:0::1;11423:26;11442:6;11423:18;:26::i;:::-;11277:178:::0;:::o;30213:136::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;30290:53:::1;::::0;;;;30321:4:::1;30290:53;::::0;::::1;18533:34:1::0;30328:10:0::1;18583:18:1::0;;;18576:43;18635:18;;;18628:34;;;-1:-1:-1;;;;;30290:22:0;::::1;::::0;::::1;::::0;18445:18:1;;30290:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30213:136:::0;;:::o;29866:105::-;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29946:19:::1;::::0;-1:-1:-1;;;;;29946:11:0;::::1;::::0;:19;::::1;;;::::0;29958:6;;29946:19:::1;::::0;;;29958:6;29946:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;29046:128:::0;11101:5;;-1:-1:-1;;;;;11101:5:0;11087:10;:19;11079:61;;;;-1:-1:-1;;;11079:61:0;;9899:2:1;11079:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11079:61:0;9697:353:1;11079:61:0;29130:32;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;5649:152::-:0;5746:7;:14;5715:4;;5735:25;;:60;;;;;5793:1;-1:-1:-1;;;;;5764:31:0;:7;5772:8;5764:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5764:17:0;:31;;5728:67;5649:152;-1:-1:-1;;5649:152:0:o;8375:164::-;8448:25;;;;:15;:25;;;;;:31;;-1:-1:-1;;;;;;8448:31:0;-1:-1:-1;;;;;8448:31:0;;;;;;;;8500:7;:17;;8448:25;;:31;8500:7;8448:25;;8500:17;;;;;;:::i;:::-;;;;;;;;;;8491:42;;-1:-1:-1;;;;;8500:17:0;;;;8491:42;;;8375:164;;:::o;5881:326::-;5976:4;5997:17;6005:8;5997:7;:17::i;:::-;5989:65;;;;-1:-1:-1;;;5989:65:0;;9495:2:1;5989:65:0;;;9477:21:1;9534:2;9514:18;;;9507:30;9573:34;9553:18;;;9546:62;-1:-1:-1;;;9624:18:1;;;9617:33;9667:19;;5989:65:0;9293:399:1;5989:65:0;6061:13;6077:7;6085:8;6077:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6077:17:0;;;;-1:-1:-1;6109:17:0;;;;;:54;;;6155:8;-1:-1:-1;;;;;6130:33:0;:21;6142:8;6130:11;:21::i;:::-;-1:-1:-1;;;;;6130:33:0;;6109:54;:91;;;;6167:33;6184:5;6191:8;6167:16;:33::i;:::-;6101:100;5881:326;-1:-1:-1;;;;5881:326:0:o;7780:535::-;7918:5;-1:-1:-1;;;;;7897:26:0;:7;7905:8;7897:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;7897:17:0;:26;7889:80;;;;-1:-1:-1;;;7889:80:0;;18875:2:1;7889:80:0;;;18857:21:1;18914:2;18894:18;;;18887:30;18953:34;18933:18;;;18926:62;19024:11;19004:18;;;18997:39;19053:19;;7889:80:0;18673:405:1;7889:80:0;8077:30;8094:1;8098:8;8077;:30::i;:::-;8136:3;8116:7;8124:8;8116:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;-1:-1:-1;;;;;;8116:23:0;-1:-1:-1;;;;;8116:23:0;;;;;;8165:17;;;;;;:10;:17;;;;;;;:19;;-1:-1:-1;;8165:19:0;;;8193:15;;;;;;;;;:17;;-1:-1:-1;8193:17:0;;;8231:30;;8252:8;;8193:15;8231:30;;;2235:293;2172:356;;:::o;6278:108::-;6352:28;6362:3;6367:8;6352:28;;;;;;;;;;;;:9;:28::i;8620:305::-;8765:9;-1:-1:-1;;;;;8753:21:0;:8;-1:-1:-1;;;;;8753:21:0;;;8745:59;;;;-1:-1:-1;;;8745:59:0;;19285:2:1;8745:59:0;;;19267:21:1;19324:2;19304:18;;;19297:30;19363:27;19343:18;;;19336:55;19408:18;;8745:59:0;19083:349:1;8745:59:0;-1:-1:-1;;;;;8811:27:0;;;;;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;;:50;;-1:-1:-1;;8811:50:0;;;;;;;;;;8873:46;;586:41:1;;;8873:46:0;;559:18:1;8873:46:0;;;;;;;8620:305;;;:::o;5360:233::-;5498:31;5508:5;5515:3;5520:8;5498:9;:31::i;:::-;5536:51;5559:5;5566:3;5571:8;5581:5;5536:22;:51::i;12077:723::-;12133:13;12354:10;12350:53;;-1:-1:-1;;12381:10:0;;;;;;;;;;;;;;;;;;12077:723::o;12350:53::-;12428:5;12413:12;12469:78;12476:9;;12469:78;;12502:8;;;;:::i;:::-;;-1:-1:-1;12525:10:0;;-1:-1:-1;12533:2:0;12525:10;;:::i;:::-;;;12469:78;;;12557:19;12589:6;12579:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12579:17:0;;12557:39;;12607:154;12614:10;;12607:154;;12641:11;12651:1;12641:11;;:::i;:::-;;-1:-1:-1;12710:10:0;12718:2;12710:5;:10;:::i;:::-;12697:24;;:2;:24;:::i;:::-;12684:39;;12667:6;12674;12667:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;12738:11:0;12747:2;12738:11;;:::i;:::-;;;12607:154;;11537:162;11597:16;11616:5;;-1:-1:-1;;;;;11628:14:0;;;-1:-1:-1;;;;;;11628:14:0;;;;;;11656:37;;11616:5;;;;;;;11656:37;;11597:16;11656:37;11590:109;11537:162;:::o;6568:203::-;6682:20;6688:3;6693:8;6682:5;:20::i;:::-;6709:56;6740:1;6744:3;6749:8;6759:5;8999:673;-1:-1:-1;;;;;9141:15:0;;;:19;9137:530;;9175:73;;-1:-1:-1;;;9175:73:0;;-1:-1:-1;;;;;9175:37:0;;;;;:73;;9213:10;;9225:5;;9232:8;;9242:5;;9175:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9175:73:0;;;;;;;;-1:-1:-1;;9175:73:0;;;;;;;;;;;;:::i;:::-;;;9171:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9433:13:0;;9429:222;;9466:68;;-1:-1:-1;;;9466:68:0;;20971:2:1;9466:68:0;;;20953:21:1;21010:2;20990:18;;;20983:30;21049:34;21029:18;;;21022:62;21120:28;21100:18;;;21093:56;21166:19;;9466:68:0;20769:422:1;9429:222:0;9619:6;9613:13;9604:6;9600:2;9596:15;9589:38;9171:489;-1:-1:-1;;;;;;;;;9294:22:0;;;9286:93;;;;-1:-1:-1;;;9286:93:0;;20971:2:1;9286:93:0;;;20953:21:1;21010:2;20990:18;;;20983:30;21049:34;21029:18;;;21022:62;21120:28;21100:18;;;21093:56;21166:19;;9286:93:0;20769:422:1;9286:93:0;9249:140;8999:673;;;;:::o;6836:389::-;6915:17;6923:8;6915:7;:17::i;:::-;6914:18;6906:59;;;;-1:-1:-1;;;6906:59:0;;21398:2:1;6906:59:0;;;21380:21:1;21437:2;21417:18;;;21410:30;21476;21456:18;;;21449:58;21524:18;;6906:59:0;21196:352:1;6906:59:0;7030:7;:17;;;;;;;-1:-1:-1;7030:17:0;;;;;;;-1:-1:-1;;;;;;7030:17:0;-1:-1:-1;;;;;7030:17:0;;;;;7054:11;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7093:15:0;;;;;;:10;:15;;;;;;:17;;;;;;7131:35;7157:8;;7093:15;;7131:35;;7093:15;;7131:35;28788:196;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:177:1;-1:-1:-1;;;;;;92:5:1;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1141:2;1120:15;-1:-1:-1;;1116:29:1;1107:39;;;;1148:4;1103:50;;901:258;-1:-1:-1;;901:258:1:o;1164:220::-;1313:2;1302:9;1295:21;1276:4;1333:45;1374:2;1363:9;1359:18;1351:6;1333:45;:::i;1389:180::-;1448:6;1501:2;1489:9;1480:7;1476:23;1472:32;1469:52;;;1517:1;1514;1507:12;1469:52;-1:-1:-1;1540:23:1;;1389:180;-1:-1:-1;1389:180:1:o;1805:154::-;-1:-1:-1;;;;;1884:5:1;1880:54;1873:5;1870:65;1860:93;;1949:1;1946;1939:12;1964:315;2032:6;2040;2093:2;2081:9;2072:7;2068:23;2064:32;2061:52;;;2109:1;2106;2099:12;2061:52;2148:9;2135:23;2167:31;2192:5;2167:31;:::i;:::-;2217:5;2269:2;2254:18;;;;2241:32;;-1:-1:-1;;;1964:315:1:o;2466:247::-;2525:6;2578:2;2566:9;2557:7;2553:23;2549:32;2546:52;;;2594:1;2591;2584:12;2546:52;2633:9;2620:23;2652:31;2677:5;2652:31;:::i;2718:456::-;2795:6;2803;2811;2864:2;2852:9;2843:7;2839:23;2835:32;2832:52;;;2880:1;2877;2870:12;2832:52;2919:9;2906:23;2938:31;2963:5;2938:31;:::i;:::-;2988:5;-1:-1:-1;3045:2:1;3030:18;;3017:32;3058:33;3017:32;3058:33;:::i;:::-;2718:456;;3110:7;;-1:-1:-1;;;3164:2:1;3149:18;;;;3136:32;;2718:456::o;3179:400::-;3273:6;3281;3289;3342:2;3330:9;3321:7;3317:23;3313:32;3310:52;;;3358:1;3355;3348:12;3310:52;3397:9;3384:23;3416:31;3441:5;3416:31;:::i;:::-;3466:5;3518:2;3503:18;;3490:32;;-1:-1:-1;3569:2:1;3554:18;;;3541:32;;3179:400;-1:-1:-1;;;3179:400:1:o;3584:632::-;3755:2;3807:21;;;3877:13;;3780:18;;;3899:22;;;3726:4;;3755:2;3978:15;;;;3952:2;3937:18;;;3726:4;4021:169;4035:6;4032:1;4029:13;4021:169;;;4096:13;;4084:26;;4165:15;;;;4130:12;;;;4057:1;4050:9;4021:169;;;-1:-1:-1;4207:3:1;;3584:632;-1:-1:-1;;;;;;3584:632:1:o;4221:184::-;-1:-1:-1;;;4270:1:1;4263:88;4370:4;4367:1;4360:15;4394:4;4391:1;4384:15;4410:632;4475:5;4505:18;4546:2;4538:6;4535:14;4532:40;;;4552:18;;:::i;:::-;4627:2;4621:9;4595:2;4681:15;;-1:-1:-1;;4677:24:1;;;4703:2;4673:33;4669:42;4657:55;;;4727:18;;;4747:22;;;4724:46;4721:72;;;4773:18;;:::i;:::-;4813:10;4809:2;4802:22;4842:6;4833:15;;4872:6;4864;4857:22;4912:3;4903:6;4898:3;4894:16;4891:25;4888:45;;;4929:1;4926;4919:12;4888:45;4979:6;4974:3;4967:4;4959:6;4955:17;4942:44;5034:1;5027:4;5018:6;5010;5006:19;5002:30;4995:41;;;;4410:632;;;;;:::o;5047:222::-;5090:5;5143:3;5136:4;5128:6;5124:17;5120:27;5110:55;;5161:1;5158;5151:12;5110:55;5183:80;5259:3;5250:6;5237:20;5230:4;5222:6;5218:17;5183:80;:::i;5274:543::-;5362:6;5370;5423:2;5411:9;5402:7;5398:23;5394:32;5391:52;;;5439:1;5436;5429:12;5391:52;5479:9;5466:23;5508:18;5549:2;5541:6;5538:14;5535:34;;;5565:1;5562;5555:12;5535:34;5588:50;5630:7;5621:6;5610:9;5606:22;5588:50;:::i;:::-;5578:60;;5691:2;5680:9;5676:18;5663:32;5647:48;;5720:2;5710:8;5707:16;5704:36;;;5736:1;5733;5726:12;5704:36;;5759:52;5803:7;5792:8;5781:9;5777:24;5759:52;:::i;:::-;5749:62;;;5274:543;;;;;:::o;6157:118::-;6243:5;6236:13;6229:21;6222:5;6219:32;6209:60;;6265:1;6262;6255:12;6280:382;6345:6;6353;6406:2;6394:9;6385:7;6381:23;6377:32;6374:52;;;6422:1;6419;6412:12;6374:52;6461:9;6448:23;6480:31;6505:5;6480:31;:::i;:::-;6530:5;-1:-1:-1;6587:2:1;6572:18;;6559:32;6600:30;6559:32;6600:30;:::i;:::-;6649:7;6639:17;;;6280:382;;;;;:::o;6667:795::-;6762:6;6770;6778;6786;6839:3;6827:9;6818:7;6814:23;6810:33;6807:53;;;6856:1;6853;6846:12;6807:53;6895:9;6882:23;6914:31;6939:5;6914:31;:::i;:::-;6964:5;-1:-1:-1;7021:2:1;7006:18;;6993:32;7034:33;6993:32;7034:33;:::i;:::-;7086:7;-1:-1:-1;7140:2:1;7125:18;;7112:32;;-1:-1:-1;7195:2:1;7180:18;;7167:32;7222:18;7211:30;;7208:50;;;7254:1;7251;7244:12;7208:50;7277:22;;7330:4;7322:13;;7318:27;-1:-1:-1;7308:55:1;;7359:1;7356;7349:12;7308:55;7382:74;7448:7;7443:2;7430:16;7425:2;7421;7417:11;7382:74;:::i;:::-;7372:84;;;6667:795;;;;;;;:::o;7467:388::-;7535:6;7543;7596:2;7584:9;7575:7;7571:23;7567:32;7564:52;;;7612:1;7609;7602:12;7564:52;7651:9;7638:23;7670:31;7695:5;7670:31;:::i;:::-;7720:5;-1:-1:-1;7777:2:1;7762:18;;7749:32;7790:33;7749:32;7790:33;:::i;8524:322::-;8593:6;8646:2;8634:9;8625:7;8621:23;8617:32;8614:52;;;8662:1;8659;8652:12;8614:52;8702:9;8689:23;8735:18;8727:6;8724:30;8721:50;;;8767:1;8764;8757:12;8721:50;8790;8832:7;8823:6;8812:9;8808:22;8790:50;:::i;8851:437::-;8930:1;8926:12;;;;8973;;;8994:61;;9048:4;9040:6;9036:17;9026:27;;8994:61;9101:2;9093:6;9090:14;9070:18;9067:38;9064:218;;;-1:-1:-1;;;9135:1:1;9128:88;9239:4;9236:1;9229:15;9267:4;9264:1;9257:15;9064:218;;8851:437;;;:::o;11698:184::-;-1:-1:-1;;;11747:1:1;11740:88;11847:4;11844:1;11837:15;11871:4;11868:1;11861:15;11887:184;-1:-1:-1;;;11936:1:1;11929:88;12036:4;12033:1;12026:15;12060:4;12057:1;12050:15;12076:135;12115:3;-1:-1:-1;;12136:17:1;;12133:43;;;12156:18;;:::i;:::-;-1:-1:-1;12203:1:1;12192:13;;12076:135::o;13282:128::-;13322:3;13353:1;13349:6;13346:1;13343:13;13340:39;;;13359:18;;:::i;:::-;-1:-1:-1;13395:9:1;;13282:128::o;14813:168::-;14853:7;14919:1;14915;14911:6;14907:14;14904:1;14901:21;14896:1;14889:9;14882:17;14878:45;14875:71;;;14926:18;;:::i;:::-;-1:-1:-1;14966:9:1;;14813:168::o;15288:245::-;15355:6;15408:2;15396:9;15387:7;15383:23;15379:32;15376:52;;;15424:1;15421;15414:12;15376:52;15456:9;15450:16;15475:28;15497:5;15475:28;:::i;16076:1030::-;16161:12;;16126:3;;16216:1;16236:18;;;;16289;;;;16316:61;;16370:4;16362:6;16358:17;16348:27;;16316:61;16396:2;16444;16436:6;16433:14;16413:18;16410:38;16407:218;;;-1:-1:-1;;;16478:1:1;16471:88;16582:4;16579:1;16572:15;16610:4;16607:1;16600:15;16407:218;16641:18;16668:104;;;;16786:1;16781:319;;;;16634:466;;16668:104;-1:-1:-1;;16701:24:1;;16689:37;;16746:16;;;;-1:-1:-1;16668:104:1;;16781:319;16023:1;16016:14;;;16060:4;16047:18;;16875:1;16889:165;16903:6;16900:1;16897:13;16889:165;;;16981:14;;16968:11;;;16961:35;17024:16;;;;16918:10;;16889:165;;;16893:3;;17083:6;17078:3;17074:16;17067:23;;16634:466;;;;;;;16076:1030;;;;:::o;17111:456::-;17332:3;17360:38;17394:3;17386:6;17360:38;:::i;:::-;17427:6;17421:13;17443:52;17488:6;17484:2;17477:4;17469:6;17465:17;17443:52;:::i;:::-;17511:50;17553:6;17549:2;17545:15;17537:6;17511:50;:::i;:::-;17504:57;17111:456;-1:-1:-1;;;;;;;17111:456:1:o;17572:280::-;17671:6;17724:2;17712:9;17703:7;17699:23;17695:32;17692:52;;;17740:1;17737;17730:12;17692:52;17772:9;17766:16;17791:31;17816:5;17791:31;:::i;19437:184::-;-1:-1:-1;;;19486:1:1;19479:88;19586:4;19583:1;19576:15;19610:4;19607:1;19600:15;19626:120;19666:1;19692;19682:35;;19697:18;;:::i;:::-;-1:-1:-1;19731:9:1;;19626:120::o;19751:125::-;19791:4;19819:1;19816;19813:8;19810:34;;;19824:18;;:::i;:::-;-1:-1:-1;19861:9:1;;19751:125::o;19881:112::-;19913:1;19939;19929:35;;19944:18;;:::i;:::-;-1:-1:-1;19978:9:1;;19881:112::o;19998:512::-;20192:4;-1:-1:-1;;;;;20302:2:1;20294:6;20290:15;20279:9;20272:34;20354:2;20346:6;20342:15;20337:2;20326:9;20322:18;20315:43;;20394:6;20389:2;20378:9;20374:18;20367:34;20437:3;20432:2;20421:9;20417:18;20410:31;20458:46;20499:3;20488:9;20484:19;20476:6;20458:46;:::i;:::-;20450:54;19998:512;-1:-1:-1;;;;;;19998:512:1:o;20515:249::-;20584:6;20637:2;20625:9;20616:7;20612:23;20608:32;20605:52;;;20653:1;20650;20643:12;20605:52;20685:9;20679:16;20704:30;20728:5;20704:30;:::i

Swarm Source

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