ETH Price: $2,469.74 (+0.57%)
 

Overview

Max Total Supply

1,073 CoolCazuki

Holders

86

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 CoolCazuki
0x086b2d2993ccdba79b8d18dde67595a391948b65
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:
CoolCazuki

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-04-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;

/**
 * @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/CoolCazuki.sol

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

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

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

  /// @notice 0 = CLOSED, 1 = PUBLIC.
  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("Cool Cazuki", "CoolCazuki") {
    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 <= 1000) 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"}]

6080604052600980546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c1179055600a80547401f42aa99f011a1fa7cda90e5e98b277e306bca83e6001600160a81b03199091161790553480156200006057600080fd5b5060405162002d7438038062002d74833981016040819052620000839162000232565b6040518060400160405280600b81526020016a436f6f6c2043617a756b6960a81b8152506040518060400160405280600a815260200169436f6f6c43617a756b6960b01b815250620000db336200012660201b60201c565b8151620000f090600190602085019062000176565b5080516200010690600290602084019062000176565b505081516200011e9150600b90602084019062000176565b50506200034b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b82805462000184906200030e565b90600052602060002090601f016020900481019282620001a85760008555620001f3565b82601f10620001c357805160ff1916838001178555620001f3565b82800160010185558215620001f3579182015b82811115620001f3578251825591602001919060010190620001d6565b506200020192915062000205565b5090565b5b8082111562000201576000815560010162000206565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200024657600080fd5b82516001600160401b03808211156200025e57600080fd5b818501915085601f8301126200027357600080fd5b8151818111156200028857620002886200021c565b604051601f8201601f19908116603f01168101908382118183101715620002b357620002b36200021c565b816040528281528886848701011115620002cc57600080fd5b600093505b82841015620002f05784840186015181850187015292850192620002d1565b82841115620003025760008684830101525b98975050505050505050565b600181811c908216806200032357607f821691505b602082108114156200034557634e487b7160e01b600052602260045260246000fd5b50919050565b612a19806200035b6000396000f3fe6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612362565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123d7565b34801561032957600080fd5b5061033d6103383660046123ea565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123ea565b610948565b005b34801561038357600080fd5b50610375610392366004612418565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612444565b610ae5565b3480156103e757600080fd5b506103756103f6366004612461565b610b4f565b34801561040757600080fd5b506103ad610416366004612418565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b3660046124a2565b610d87565b34801561045c57600080fd5b5061037561046b366004612461565b610e68565b34801561047c57600080fd5b5061049061048b366004612444565b610e83565b6040516102d191906124d7565b3480156104a957600080fd5b506103ad6104b83660046123ea565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123ea565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125c7565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612444565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad61138881565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123ea565b611160565b3480156105e757600080fd5b506103756105f6366004612418565b61136c565b34801561060757600080fd5b50610375610616366004612639565b61143e565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612444565b611449565b34801561066757600080fd5b50610375610676366004612672565b6114b3565b34801561068757600080fd5b50610310611541565b34801561069c57600080fd5b506103106106ab3660046123ea565b61154e565b3480156106bc57600080fd5b506103ad600a81565b3480156106d157600080fd5b506102c56106e03660046126f2565b6116a9565b3480156106f157600080fd5b50610375610700366004612444565b6117d6565b34801561071157600080fd5b50610375610720366004612418565b6118ae565b34801561073157600080fd5b50610375610740366004612418565b611979565b34801561075157600080fd5b50610375610760366004612720565b6119f7565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612755565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612755565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a52565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a9c565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b1f565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bf0565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e612790565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127bc565b9250505b610ca5816127bc565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114b3565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61251b565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f00612790565b602090810291909101015280610f15816127bc565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a52565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b60006004838154811061100357611003612790565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b815161107a90600c906020850190612281565b50805161108e90600d906020840190612281565b5061109b600b6000612301565b5050565b600c805461084390612755565b600b805461084390612755565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612755565b60035461138861117083836127d7565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b0316331461133a576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b6000821180156112335750600a8211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b6103e881116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b61133a565b6112ec82662386f26fc100006127ef565b341461133a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae05761135a3383611353816127bc565b9450611d31565b80611364816127bc565b91505061133d565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae0919061280e565b61109b338383611d4b565b6000546001600160a01b031633146114915760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114bd3383611b1f565b61152f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61153b84848484611e1a565b50505050565b600d805461084390612755565b606061155982611a52565b6115cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115da90612755565b9050111561167457600b80546115ef90612755565b80601f016020809104026020016040519081016040528092919081815260200182805461161b90612755565b80156116685780601f1061163d57610100808354040283529160200191611668565b820191906000526020600020905b81548152906001019060200180831161164b57829003601f168201915b50505050509050919050565b600c61167f83611e31565b600d604051602001611693939291906128c5565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116ec57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177391906128f8565b6001600160a01b0316826001600160a01b0316148061179f5750600a546001600160a01b038381169116145b806117cf57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6000546001600160a01b03828116911614156118a25760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b6118ab81611f63565b50565b6000546001600160a01b031633146118f65760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561195d57600080fd5b505af1158015611971573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119c15760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b805161109b90600b906020840190612281565b60045460009082108015610830575060006001600160a01b031660048381548110611a7f57611a7f612790565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611ade57611ade612790565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b2a82611a52565b611b825760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b9757611b97612790565b6000918252602090912001546001600160a01b0390811691508416811480611bd85750836001600160a01b0316611bcd846108c4565b6001600160a01b0316145b80611be85750611be881856116a9565b949350505050565b826001600160a01b031660048281548110611c0d57611c0d612790565b6000918252602090912001546001600160a01b031614611c955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611ca0600082611a9c565b8160048281548110611cb457611cb4612790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fb3565b816001600160a01b0316836001600160a01b03161415611dad5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e25848484611bf0565b61153b84848484611fc6565b606081611e7157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e9b5780611e85816127bc565b9150611e949050600a8361292b565b9150611e75565b60008167ffffffffffffffff811115611eb657611eb661251b565b6040519080825280601f01601f191660200182016040528015611ee0576020820181803683370190505b5090505b8415611be857611ef560018361293f565b9150611f02600a86612956565b611f0d9060306127d7565b60f81b818381518110611f2257611f22612790565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f5c600a8661292b565b9450611ee4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fbd8383612180565b610ae060008484845b6001600160a01b0383163b1561153b57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061200890339088908790879060040161296a565b6020604051808303816000875af1925050508015612043575060408051601f3d908101601f19168201909252612040918101906129a6565b60015b6120f3573d808015612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b5080516120eb5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121795760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61218981611a52565b156121d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161222e836127bc565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461228d90612755565b90600052602060002090601f0160209004810192826122af57600085556122f5565b82601f106122c857805160ff19168380011785556122f5565b828001600101855582156122f5579182015b828111156122f55782518255916020019190600101906122da565b50610f87929150612337565b50805461230d90612755565b6000825580601f1061231d575050565b601f0160209004906000526020600020908101906118ab91905b5b80821115610f875760008155600101612338565b6001600160e01b0319811681146118ab57600080fd5b60006020828403121561237457600080fd5b81356117cf8161234c565b60005b8381101561239a578181015183820152602001612382565b8381111561153b5750506000910152565b600081518084526123c381602086016020860161237f565b601f01601f19169290920160200192915050565b6020815260006117cf60208301846123ab565b6000602082840312156123fc57600080fd5b5035919050565b6001600160a01b03811681146118ab57600080fd5b6000806040838503121561242b57600080fd5b823561243681612403565b946020939093013593505050565b60006020828403121561245657600080fd5b81356117cf81612403565b60008060006060848603121561247657600080fd5b833561248181612403565b9250602084013561249181612403565b929592945050506040919091013590565b6000806000606084860312156124b757600080fd5b83356124c281612403565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561250f578351835292840192918401916001016124f3565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561254c5761254c61251b565b604051601f8501601f19908116603f011681019082821181831017156125745761257461251b565b8160405280935085815286868601111561258d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125b857600080fd5b6117cf83833560208501612531565b600080604083850312156125da57600080fd5b823567ffffffffffffffff808211156125f257600080fd5b6125fe868387016125a7565b9350602085013591508082111561261457600080fd5b50612621858286016125a7565b9150509250929050565b80151581146118ab57600080fd5b6000806040838503121561264c57600080fd5b823561265781612403565b915060208301356126678161262b565b809150509250929050565b6000806000806080858703121561268857600080fd5b843561269381612403565b935060208501356126a381612403565b925060408501359150606085013567ffffffffffffffff8111156126c657600080fd5b8501601f810187136126d757600080fd5b6126e687823560208401612531565b91505092959194509250565b6000806040838503121561270557600080fd5b823561271081612403565b9150602083013561266781612403565b60006020828403121561273257600080fd5b813567ffffffffffffffff81111561274957600080fd5b611be8848285016125a7565b600181811c9082168061276957607f821691505b6020821081141561278a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127d0576127d06127a6565b5060010190565b600082198211156127ea576127ea6127a6565b500190565b6000816000190483118215151615612809576128096127a6565b500290565b60006020828403121561282057600080fd5b81516117cf8161262b565b8054600090600181811c908083168061284557607f831692505b602080841082141561286757634e487b7160e01b600052602260045260246000fd5b81801561287b576001811461288c576128b9565b60ff198616895284890196506128b9565b60008881526020902060005b868110156128b15781548b820152908501908301612898565b505084890196505b50505050505092915050565b60006128d1828661282b565b84516128e181836020890161237f565b6128ed8183018661282b565b979650505050505050565b60006020828403121561290a57600080fd5b81516117cf81612403565b634e487b7160e01b600052601260045260246000fd5b60008261293a5761293a612915565b500490565b600082821015612951576129516127a6565b500390565b60008261296557612965612915565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261299c60808301846123ab565b9695505050505050565b6000602082840312156129b857600080fd5b81516117cf8161234c56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a2646970667358221220ce503393bbe4fe76cb67e42337c2e1dcdf380ae7ef5633c3ffd26ae3f5b441e664736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6568725676656d6d5a3775744a47775551635268743879547077573334786a746d384d48454c6a574851712f00000000000000000000

Deployed Bytecode

0x6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612362565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123d7565b34801561032957600080fd5b5061033d6103383660046123ea565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123ea565b610948565b005b34801561038357600080fd5b50610375610392366004612418565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612444565b610ae5565b3480156103e757600080fd5b506103756103f6366004612461565b610b4f565b34801561040757600080fd5b506103ad610416366004612418565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b3660046124a2565b610d87565b34801561045c57600080fd5b5061037561046b366004612461565b610e68565b34801561047c57600080fd5b5061049061048b366004612444565b610e83565b6040516102d191906124d7565b3480156104a957600080fd5b506103ad6104b83660046123ea565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123ea565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125c7565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612444565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad61138881565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123ea565b611160565b3480156105e757600080fd5b506103756105f6366004612418565b61136c565b34801561060757600080fd5b50610375610616366004612639565b61143e565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612444565b611449565b34801561066757600080fd5b50610375610676366004612672565b6114b3565b34801561068757600080fd5b50610310611541565b34801561069c57600080fd5b506103106106ab3660046123ea565b61154e565b3480156106bc57600080fd5b506103ad600a81565b3480156106d157600080fd5b506102c56106e03660046126f2565b6116a9565b3480156106f157600080fd5b50610375610700366004612444565b6117d6565b34801561071157600080fd5b50610375610720366004612418565b6118ae565b34801561073157600080fd5b50610375610740366004612418565b611979565b34801561075157600080fd5b50610375610760366004612720565b6119f7565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612755565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612755565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a52565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a9c565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b1f565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bf0565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e612790565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127bc565b9250505b610ca5816127bc565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114b3565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61251b565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f00612790565b602090810291909101015280610f15816127bc565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a52565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b60006004838154811061100357611003612790565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b815161107a90600c906020850190612281565b50805161108e90600d906020840190612281565b5061109b600b6000612301565b5050565b600c805461084390612755565b600b805461084390612755565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612755565b60035461138861117083836127d7565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b0316331461133a576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b6000821180156112335750600a8211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b6103e881116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b61133a565b6112ec82662386f26fc100006127ef565b341461133a5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae05761135a3383611353816127bc565b9450611d31565b80611364816127bc565b91505061133d565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae0919061280e565b61109b338383611d4b565b6000546001600160a01b031633146114915760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114bd3383611b1f565b61152f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61153b84848484611e1a565b50505050565b600d805461084390612755565b606061155982611a52565b6115cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115da90612755565b9050111561167457600b80546115ef90612755565b80601f016020809104026020016040519081016040528092919081815260200182805461161b90612755565b80156116685780601f1061163d57610100808354040283529160200191611668565b820191906000526020600020905b81548152906001019060200180831161164b57829003601f168201915b50505050509050919050565b600c61167f83611e31565b600d604051602001611693939291906128c5565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116ec57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177391906128f8565b6001600160a01b0316826001600160a01b0316148061179f5750600a546001600160a01b038381169116145b806117cf57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6000546001600160a01b03828116911614156118a25760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b6118ab81611f63565b50565b6000546001600160a01b031633146118f65760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561195d57600080fd5b505af1158015611971573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119c15760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a3f5760405162461bcd60e51b815260206004820152601d60248201526000805160206129c48339815191526044820152606401610923565b805161109b90600b906020840190612281565b60045460009082108015610830575060006001600160a01b031660048381548110611a7f57611a7f612790565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611ade57611ade612790565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b2a82611a52565b611b825760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b9757611b97612790565b6000918252602090912001546001600160a01b0390811691508416811480611bd85750836001600160a01b0316611bcd846108c4565b6001600160a01b0316145b80611be85750611be881856116a9565b949350505050565b826001600160a01b031660048281548110611c0d57611c0d612790565b6000918252602090912001546001600160a01b031614611c955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611ca0600082611a9c565b8160048281548110611cb457611cb4612790565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fb3565b816001600160a01b0316836001600160a01b03161415611dad5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e25848484611bf0565b61153b84848484611fc6565b606081611e7157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e9b5780611e85816127bc565b9150611e949050600a8361292b565b9150611e75565b60008167ffffffffffffffff811115611eb657611eb661251b565b6040519080825280601f01601f191660200182016040528015611ee0576020820181803683370190505b5090505b8415611be857611ef560018361293f565b9150611f02600a86612956565b611f0d9060306127d7565b60f81b818381518110611f2257611f22612790565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f5c600a8661292b565b9450611ee4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fbd8383612180565b610ae060008484845b6001600160a01b0383163b1561153b57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061200890339088908790879060040161296a565b6020604051808303816000875af1925050508015612043575060408051601f3d908101601f19168201909252612040918101906129a6565b60015b6120f3573d808015612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b5080516120eb5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121795760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61218981611a52565b156121d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161222e836127bc565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461228d90612755565b90600052602060002090601f0160209004810192826122af57600085556122f5565b82601f106122c857805160ff19168380011785556122f5565b828001600101855582156122f5579182015b828111156122f55782518255916020019190600101906122da565b50610f87929150612337565b50805461230d90612755565b6000825580601f1061231d575050565b601f0160209004906000526020600020908101906118ab91905b5b80821115610f875760008155600101612338565b6001600160e01b0319811681146118ab57600080fd5b60006020828403121561237457600080fd5b81356117cf8161234c565b60005b8381101561239a578181015183820152602001612382565b8381111561153b5750506000910152565b600081518084526123c381602086016020860161237f565b601f01601f19169290920160200192915050565b6020815260006117cf60208301846123ab565b6000602082840312156123fc57600080fd5b5035919050565b6001600160a01b03811681146118ab57600080fd5b6000806040838503121561242b57600080fd5b823561243681612403565b946020939093013593505050565b60006020828403121561245657600080fd5b81356117cf81612403565b60008060006060848603121561247657600080fd5b833561248181612403565b9250602084013561249181612403565b929592945050506040919091013590565b6000806000606084860312156124b757600080fd5b83356124c281612403565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b8181101561250f578351835292840192918401916001016124f3565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561254c5761254c61251b565b604051601f8501601f19908116603f011681019082821181831017156125745761257461251b565b8160405280935085815286868601111561258d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125b857600080fd5b6117cf83833560208501612531565b600080604083850312156125da57600080fd5b823567ffffffffffffffff808211156125f257600080fd5b6125fe868387016125a7565b9350602085013591508082111561261457600080fd5b50612621858286016125a7565b9150509250929050565b80151581146118ab57600080fd5b6000806040838503121561264c57600080fd5b823561265781612403565b915060208301356126678161262b565b809150509250929050565b6000806000806080858703121561268857600080fd5b843561269381612403565b935060208501356126a381612403565b925060408501359150606085013567ffffffffffffffff8111156126c657600080fd5b8501601f810187136126d757600080fd5b6126e687823560208401612531565b91505092959194509250565b6000806040838503121561270557600080fd5b823561271081612403565b9150602083013561266781612403565b60006020828403121561273257600080fd5b813567ffffffffffffffff81111561274957600080fd5b611be8848285016125a7565b600181811c9082168061276957607f821691505b6020821081141561278a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127d0576127d06127a6565b5060010190565b600082198211156127ea576127ea6127a6565b500190565b6000816000190483118215151615612809576128096127a6565b500290565b60006020828403121561282057600080fd5b81516117cf8161262b565b8054600090600181811c908083168061284557607f831692505b602080841082141561286757634e487b7160e01b600052602260045260246000fd5b81801561287b576001811461288c576128b9565b60ff198616895284890196506128b9565b60008881526020902060005b868110156128b15781548b820152908501908301612898565b505084890196505b50505050505092915050565b60006128d1828661282b565b84516128e181836020890161237f565b6128ed8183018661282b565b979650505050505050565b60006020828403121561290a57600080fd5b81516117cf81612403565b634e487b7160e01b600052601260045260246000fd5b60008261293a5761293a612915565b500490565b600082821015612951576129516127a6565b500390565b60008261296557612965612915565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261299c60808301846123ab565b9695505050505050565b6000602082840312156129b857600080fd5b81516117cf8161234c56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a2646970667358221220ce503393bbe4fe76cb67e42337c2e1dcdf380ae7ef5633c3ffd26ae3f5b441e664736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6568725676656d6d5a3775744a47775551635268743879547077573334786a746d384d48454c6a574851712f00000000000000000000

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a6568725676656d6d5a3775744a477755516352687438
Arg [3] : 79547077573334786a746d384d48454c6a574851712f00000000000000000000


Deployed Bytecode Sourcemap

26777:4253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10068:305;;;;;;;;;;-1:-1:-1;10068:305:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;10068:305:0;;;;;;;;27380:39;;;;;;;;;;-1:-1:-1;27380:39:0;;;;-1:-1:-1;;;27380:39:0;;;;;;786:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2551:194::-;;;;;;;;;;-1:-1:-1;2551:194:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1738:55:1;;;1720:74;;1708:2;1693:18;2551:194:0;1574:226:1;29198:100:0;;;;;;;;;;-1:-1:-1;29198:100:0;;;;;:::i;:::-;;:::i;:::-;;2148:356;;;;;;;;;;-1:-1:-1;2148:356:0;;;;;:::i;:::-;;:::i;931:26::-;;;;;;;;;;;;;;;;;;;2430:25:1;;;2418:2;2403:18;931:26:0;2284:177:1;29494:100:0;;;;;;;;;;-1:-1:-1;29494:100:0;;;;;:::i;:::-;;:::i;3196:256::-;;;;;;;;;;-1:-1:-1;3196:256:0;;;;;:::i;:::-;;:::i;4079:430::-;;;;;;;;;;-1:-1:-1;4079:430:0;;;;;:::i;:::-;;:::i;29660:114::-;;;;;;;;;;;;;:::i;30395:184::-;;;;;;;;;;-1:-1:-1;30395:184:0;;;;;:::i;:::-;;:::i;3504:162::-;;;;;;;;;;-1:-1:-1;3504:162:0;;;;;:::i;:::-;;:::i;4820:301::-;;;;;;;;;;-1:-1:-1;4820:301:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4567:182::-;;;;;;;;;;-1:-1:-1;4567:182:0;;;;;:::i;:::-;;:::i;27118:67::-;;;;;;;;;;-1:-1:-1;27118:67:0;;;;-1:-1:-1;;;;;27118:67:0;;;27048:24;;;;;;;;;;;;;;;;1772:210;;;;;;;;;;-1:-1:-1;1772:210:0;;;;;:::i;:::-;;:::i;28758:196::-;;;;;;;;;;-1:-1:-1;28758:196:0;;;;;:::i;:::-;;:::i;27523:21::-;;;;;;;;;;;;;:::i;27457:27::-;;;;;;;;;;;;;:::i;1530:199::-;;;;;;;;;;-1:-1:-1;1530:199:0;;;;;:::i;:::-;;:::i;10920:20::-;;;;;;;;;;-1:-1:-1;10920:20:0;;;;-1:-1:-1;;;;;10920:20:0;;;26877:41;;;;;;;;;;;;26914:4;26877:41;;853:20;;;;;;;;;;;;;:::i;27800:565::-;;;;;;:::i;:::-;;:::i;30005:117::-;;;;;;;;;;-1:-1:-1;30005:117:0;;;;;:::i;:::-;;:::i;2798:142::-;;;;;;;;;;-1:-1:-1;2798:142:0;;;;;:::i;:::-;;:::i;27245:69::-;;;;;;;;;;-1:-1:-1;27245:69:0;;;;-1:-1:-1;;;;;27245:69:0;;;29348:92;;;;;;;;;;-1:-1:-1;29348:92:0;;;;;:::i;:::-;;:::i;3718:296::-;;;;;;;;;;-1:-1:-1;3718:296:0;;;;;:::i;:::-;;:::i;27594:27::-;;;;;;;;;;;;;:::i;28410:298::-;;;;;;;;;;-1:-1:-1;28410:298:0;;;;;:::i;:::-;;:::i;26960:42::-;;;;;;;;;;;;27000:2;26960:42;;30683:344;;;;;;;;;;-1:-1:-1;30683:344:0;;;;;:::i;:::-;;:::i;11253:178::-;;;;;;;;;;-1:-1:-1;11253:178:0;;;;;:::i;:::-;;:::i;30183:136::-;;;;;;;;;;-1:-1:-1;30183:136:0;;;;;:::i;:::-;;:::i;29836:105::-;;;;;;;;;;-1:-1:-1;29836:105:0;;;;;:::i;:::-;;:::i;29016:128::-;;;;;;;;;;-1:-1:-1;29016:128:0;;;;;:::i;:::-;;:::i;10068:305::-;10145:4;10172:26;-1:-1:-1;;;;;;10172:26:0;;;;:73;;-1:-1:-1;10219:26:0;-1:-1:-1;;;;;;10219:26:0;;;10172:73;:128;;;-1:-1:-1;10274:26:0;-1:-1:-1;;;;;;10274:26:0;;;10172:128;:185;;;-1:-1:-1;10331:26:0;-1:-1:-1;;;;;;10331:26:0;;;10172:185;10158:199;10068:305;-1:-1:-1;;10068:305:0:o;786:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2551:194::-;2619:7;2643:17;2651:8;2643:7;:17::i;:::-;2635:65;;;;-1:-1:-1;;;2635:65:0;;9495:2:1;2635: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;;2635:65:0;;;;;;;;;-1:-1:-1;2714:25:0;;;;:15;:25;;;;;;-1:-1:-1;;;;;2714:25:0;;2551:194::o;29198:100::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29268:9:::1;:24:::0;29198:100::o;2148:356::-;2218:13;2234:17;2242:8;2234:7;:17::i;:::-;2218:33;;2273:5;-1:-1:-1;;;;;2266:12:0;:3;-1:-1:-1;;;;;2266:12:0;;;2258:58;;;;-1:-1:-1;;;2258:58:0;;10257:2:1;2258: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;;2258:58:0;10055:397:1;2258:58:0;2341:10;-1:-1:-1;;;;;2341:19:0;;;;:59;;-1:-1:-1;;;;;;2364:24:0;;;;;;:17;:24;;;;;;;;2389:10;2364:36;;;;;;;;;;2341:59;2325:141;;;;-1:-1:-1;;;2325:141:0;;10659:2:1;2325:141:0;;;10641:21:1;10698:2;10678:18;;;10671:30;10737:34;10717:18;;;10710:62;10808:18;10788;;;10781:46;10844:19;;2325:141:0;10457:412:1;2325:141:0;2475:23;2484:3;2489:8;2475;:23::i;:::-;2211:293;2148:356;;:::o;29494:100::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29564:9:::1;:24:::0;;-1:-1:-1;;;;;;29564:24:0::1;-1:-1:-1::0;;;;;29564:24:0;;;::::1;::::0;;;::::1;::::0;;29494:100::o;3196:256::-;3314:40;3333:10;3345:8;3314:18;:40::i;:::-;3306:102;;;;-1:-1:-1;;;3306:102:0;;11076:2:1;3306: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;;3306:102:0;10874:413:1;3306:102:0;3415:31;3425:5;3432:3;3437:8;3415:9;:31::i;4079:430::-;4163:15;4204:19;4214:8;4204:9;:19::i;:::-;4195:6;:28;4187:78;;;;-1:-1:-1;;;4187:78:0;;11494:2:1;4187: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;;4187:78:0;11292:401:1;4187:78:0;4272:13;4297:9;4292:158;4312:7;:14;4308:18;;4292:158;;;4358:7;4366:1;4358:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4346:22:0;;;4358:10;;4346:22;4342:101;;;4394:6;4385:5;:15;4381:52;;;4409:1;-1:-1:-1;4402:8:0;;-1:-1:-1;4402:8:0;4381:52;4426:7;;;;:::i;:::-;;;;4381:52;4328:3;;;:::i;:::-;;;4292:158;;;-1:-1:-1;4456:47:0;;-1:-1:-1;;;4456:47:0;;11494:2:1;4456: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;;4456:47:0;11292:401:1;29660:114:0;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29748:20:::1;::::0;;29724:44;;::::1;-1:-1:-1::0;;;29748:20:0;;;::::1;;;29747:21;29724:44:::0;;::::1;;::::0;;29660:114::o;30395:184::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;30509:64:::1;::::0;;;;30540:4:::1;30509:64;::::0;::::1;12572:34:1::0;30547: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;;;;;30509:22:0;::::1;::::0;::::1;::::0;12841:19:1;;30509:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30395:184:::0;;;:::o;3504:162::-;3618:42;3635:5;3642:3;3647:8;3618:42;;;;;;;;;;;;:16;:42::i;4820:301::-;4882:16;4907:15;4925:19;4935:8;4925:9;:19::i;:::-;4907:37;;4951:20;4988:7;4974:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4974:22:0;;4951:45;;5008:9;5003:96;5027:7;5023:1;:11;5003:96;;;5059:32;5079:8;5089:1;5059:19;:32::i;:::-;5050:3;5054:1;5050:6;;;;;;;;:::i;:::-;;;;;;;;;;:41;5036:3;;;;:::i;:::-;;;;5003:96;;;-1:-1:-1;5112:3:0;4820:301;-1:-1:-1;;;4820:301:0:o;4567:182::-;4667:7;:14;4634:7;;4658:23;;4650:73;;;;-1:-1:-1;;;4650:73:0;;11494:2:1;4650: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;;4650:73:0;11292:401:1;4650:73:0;-1:-1:-1;4737:6:0;4567:182::o;1772:210::-;1836:7;1860:17;1868:8;1860:7;:17::i;:::-;1852:65;;;;-1:-1:-1;;;1852:65:0;;9495:2:1;1852: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;;1852:65:0;9293:399:1;1852:65:0;1924:13;1940:7;1948:8;1940:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1940:17:0;;1772:210;-1:-1:-1;;;1772:210:0:o;28758:196::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;28862:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;28889:32:0;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;28928:20:0::1;28935:13;;28928:20;:::i;:::-;28758:196:::0;;:::o;27523:21::-;;;;;;;:::i;27457:27::-;;;;;;;:::i;1530:199::-;1596:7;-1:-1:-1;;;;;1620:22:0;;1612:77;;;;-1:-1:-1;;;1612:77:0;;13073:2:1;1612: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;;1612:77:0;12871:406:1;1612:77:0;-1:-1:-1;;;;;;1703:20:0;;;;;:10;:20;;;;;;;1530:199::o;853:20::-;;;;;;;:::i;27800:565::-;27871:11;;26914:4;27897:15;27906:6;27871:11;27897:15;:::i;:::-;:29;;27889:61;;;;-1:-1:-1;;;27889:61:0;;13617:2:1;27889:61:0;;;13599:21:1;13656:2;13636:18;;;13629:30;13695:21;13675:18;;;13668:49;13734:18;;27889:61:0;13415:343:1;27889:61:0;27975:5;;-1:-1:-1;;;;;27975:5:0;27961:10;:19;27957:326;;27999:9;;28012:1;27999:14;27991:50;;;;-1:-1:-1;;;27991:50:0;;13965:2:1;27991:50:0;;;13947:21:1;14004:2;13984:18;;;13977:30;14043:25;14023:18;;;14016:53;14086:18;;27991:50:0;13763:347:1;27991:50:0;28067:1;28058:6;:10;:37;;;;;27000:2;28072:6;:23;;28058:37;28050:70;;;;-1:-1:-1;;;28050:70:0;;14317:2:1;28050:70:0;;;14299:21:1;14356:2;14336:18;;;14329:30;14395:22;14375:18;;;14368:50;14435:18;;28050:70:0;14115:344:1;28050:70:0;28143:4;28133:6;:14;28129:146;;28157:9;:14;28149:47;;;;-1:-1:-1;;;28149:47:0;;14666:2:1;28149:47:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;28149:47:0;14464:344:1;28149:47:0;28129:146;;;28231:19;:6;28240:10;28231:19;:::i;:::-;28218:9;:32;28210:65;;;;-1:-1:-1;;;28210:65:0;;14666:2:1;28210:65:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;28210:65:0;14464:344:1;28210:65:0;28296:9;28291:68;28315:6;28311:1;:10;28291:68;;;28328:31;28338:10;28350:8;;;;:::i;:::-;;;28328:9;:31::i;:::-;28323:3;;;;:::i;:::-;;;;28291:68;;30005:117;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;30083:33:::1;::::0;;;;30098:10:::1;30083:33;::::0;::::1;15160:74:1::0;15250:18;;;15243:34;;;-1:-1:-1;;;;;30083:14:0;::::1;::::0;::::1;::::0;15133:18:1;;30083:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2798:142::-:0;2882:52;2901:10;2913:9;2924;2882:18;:52::i;29348:92::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29414:7:::1;:20:::0;;-1:-1:-1;;;;;;29414:20:0::1;-1:-1:-1::0;;;;;29414:20:0;;;::::1;::::0;;;::::1;::::0;;29348:92::o;3718:296::-;3865:40;3884:10;3896:8;3865:18;:40::i;:::-;3857:102;;;;-1:-1:-1;;;3857:102:0;;11076:2:1;3857: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;;3857:102:0;10874:413:1;3857:102:0;3966:42;3980:5;3987:3;3992:8;4002:5;3966:13;:42::i;:::-;3718:296;;;;:::o;27594:27::-;;;;;;;:::i;28410:298::-;28470:13;28500:11;28508:2;28500:7;:11::i;:::-;28492:67;;;;-1:-1:-1;;;28492:67:0;;15740:2:1;28492: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;;28492:67:0;15538:407:1;28492:67:0;28602:1;28578:13;28572:27;;;;;:::i;:::-;;;:31;28568:57;;;28612:13;28605:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28410:298;;;:::o;28568:57::-;28663:7;28672:13;:2;:11;:13::i;:::-;28687;28646:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28632:70;;28410:298;;;:::o;30683:344::-;30790:20;;30772:4;;-1:-1:-1;;;30790:20:0;;;;30785:73;;-1:-1:-1;;;;;;3104:27:0;;;3084:4;3104:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;30812:46;;30785:73;30915:7;;30901:37;;;;;-1:-1:-1;;;;;1738:55:1;;;30901:37:0;;;1720:74:1;30915:7:0;;;;30901:30;;1693:18:1;;30901:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30881:58:0;:8;-1:-1:-1;;;;;30881:58:0;;:90;;;-1:-1:-1;30962:9:0;;-1:-1:-1;;;;;30950:21:0;;;30962:9;;30950:21;30881:90;:140;;;-1:-1:-1;;;;;;3104:27:0;;;3084:4;3104:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;30982:39;30867:154;30683:344;-1:-1:-1;;;30683:344:0:o;11253:178::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;11328:5:::1;::::0;-1:-1:-1;;;;;11328:15:0;;::::1;:5:::0;::::1;:15;;11320:72;;;::::0;-1:-1:-1;;;11320:72:0;;18059:2:1;11320: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;;11320:72:0::1;17857:408:1::0;11320:72:0::1;11399:26;11418:6;11399:18;:26::i;:::-;11253:178:::0;:::o;30183:136::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;30260:53:::1;::::0;;;;30291:4:::1;30260:53;::::0;::::1;18533:34:1::0;30298:10:0::1;18583:18:1::0;;;18576:43;18635:18;;;18628:34;;;-1:-1:-1;;;;;30260:22:0;::::1;::::0;::::1;::::0;18445:18:1;;30260:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30183:136:::0;;:::o;29836:105::-;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29916:19:::1;::::0;-1:-1:-1;;;;;29916:11:0;::::1;::::0;:19;::::1;;;::::0;29928:6;;29916:19:::1;::::0;;;29928:6;29916:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;29016:128:::0;11077:5;;-1:-1:-1;;;;;11077:5:0;11063:10;:19;11055:61;;;;-1:-1:-1;;;11055:61:0;;9899:2:1;11055:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;11055:61:0;9697:353:1;11055:61:0;29100:32;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;5625:152::-:0;5722:7;:14;5691:4;;5711:25;;:60;;;;;5769:1;-1:-1:-1;;;;;5740:31:0;:7;5748:8;5740:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5740:17:0;:31;;5704:67;5625:152;-1:-1:-1;;5625:152:0:o;8351:164::-;8424:25;;;;:15;:25;;;;;:31;;-1:-1:-1;;;;;;8424:31:0;-1:-1:-1;;;;;8424:31:0;;;;;;;;8476:7;:17;;8424:25;;:31;8476:7;8424:25;;8476:17;;;;;;:::i;:::-;;;;;;;;;;8467:42;;-1:-1:-1;;;;;8476:17:0;;;;8467:42;;;8351:164;;:::o;5857:326::-;5952:4;5973:17;5981:8;5973:7;:17::i;:::-;5965:65;;;;-1:-1:-1;;;5965:65:0;;9495:2:1;5965: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;;5965:65:0;9293:399:1;5965:65:0;6037:13;6053:7;6061:8;6053:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6053:17:0;;;;-1:-1:-1;6085:17:0;;;;;:54;;;6131:8;-1:-1:-1;;;;;6106:33:0;:21;6118:8;6106:11;:21::i;:::-;-1:-1:-1;;;;;6106:33:0;;6085:54;:91;;;;6143:33;6160:5;6167:8;6143:16;:33::i;:::-;6077:100;5857:326;-1:-1:-1;;;;5857:326:0:o;7756:535::-;7894:5;-1:-1:-1;;;;;7873:26:0;:7;7881:8;7873:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;7873:17:0;:26;7865:80;;;;-1:-1:-1;;;7865:80:0;;18875:2:1;7865: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;;7865:80:0;18673:405:1;7865:80:0;8053:30;8070:1;8074:8;8053;:30::i;:::-;8112:3;8092:7;8100:8;8092:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;-1:-1:-1;;;;;;8092:23:0;-1:-1:-1;;;;;8092:23:0;;;;;;8141:17;;;;;;:10;:17;;;;;;;:19;;-1:-1:-1;;8141:19:0;;;8169:15;;;;;;;;;:17;;-1:-1:-1;8169:17:0;;;8207:30;;8228:8;;8169:15;8207:30;;;2211:293;2148:356;;:::o;6254:108::-;6328:28;6338:3;6343:8;6328:28;;;;;;;;;;;;:9;:28::i;8596:305::-;8741:9;-1:-1:-1;;;;;8729:21:0;:8;-1:-1:-1;;;;;8729:21:0;;;8721:59;;;;-1:-1:-1;;;8721:59:0;;19285:2:1;8721:59:0;;;19267:21:1;19324:2;19304:18;;;19297:30;19363:27;19343:18;;;19336:55;19408:18;;8721:59:0;19083:349:1;8721:59:0;-1:-1:-1;;;;;8787:27:0;;;;;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;;:50;;-1:-1:-1;;8787:50:0;;;;;;;;;;8849:46;;586:41:1;;;8849:46:0;;559:18:1;8849:46:0;;;;;;;8596:305;;;:::o;5336:233::-;5474:31;5484:5;5491:3;5496:8;5474:9;:31::i;:::-;5512:51;5535:5;5542:3;5547:8;5557:5;5512:22;:51::i;12053:723::-;12109:13;12330:10;12326:53;;-1:-1:-1;;12357:10:0;;;;;;;;;;;;;;;;;;12053:723::o;12326:53::-;12404:5;12389:12;12445:78;12452:9;;12445:78;;12478:8;;;;:::i;:::-;;-1:-1:-1;12501:10:0;;-1:-1:-1;12509:2:0;12501:10;;:::i;:::-;;;12445:78;;;12533:19;12565:6;12555:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12555:17:0;;12533:39;;12583:154;12590:10;;12583:154;;12617:11;12627:1;12617:11;;:::i;:::-;;-1:-1:-1;12686:10:0;12694:2;12686:5;:10;:::i;:::-;12673:24;;:2;:24;:::i;:::-;12660:39;;12643:6;12650;12643:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;12714:11:0;12723:2;12714:11;;:::i;:::-;;;12583:154;;11513:162;11573:16;11592:5;;-1:-1:-1;;;;;11604:14:0;;;-1:-1:-1;;;;;;11604:14:0;;;;;;11632:37;;11592:5;;;;;;;11632:37;;11573:16;11632:37;11566:109;11513:162;:::o;6544:203::-;6658:20;6664:3;6669:8;6658:5;:20::i;:::-;6685:56;6716:1;6720:3;6725:8;6735:5;8975:673;-1:-1:-1;;;;;9117:15:0;;;:19;9113:530;;9151:73;;-1:-1:-1;;;9151:73:0;;-1:-1:-1;;;;;9151:37:0;;;;;:73;;9189:10;;9201:5;;9208:8;;9218:5;;9151:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9151:73:0;;;;;;;;-1:-1:-1;;9151:73:0;;;;;;;;;;;;:::i;:::-;;;9147:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9409:13:0;;9405:222;;9442:68;;-1:-1:-1;;;9442:68:0;;20971:2:1;9442: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;;9442:68:0;20769:422:1;9405:222:0;9595:6;9589:13;9580:6;9576:2;9572:15;9565:38;9147:489;-1:-1:-1;;;;;;;;;9270:22:0;;;9262:93;;;;-1:-1:-1;;;9262:93:0;;20971:2:1;9262: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;;9262:93:0;20769:422:1;9262:93:0;9225:140;8975:673;;;;:::o;6812:389::-;6891:17;6899:8;6891:7;:17::i;:::-;6890:18;6882:59;;;;-1:-1:-1;;;6882:59:0;;21398:2:1;6882:59:0;;;21380:21:1;21437:2;21417:18;;;21410:30;21476;21456:18;;;21449:58;21524:18;;6882:59:0;21196:352:1;6882:59:0;7006:7;:17;;;;;;;-1:-1:-1;7006:17:0;;;;;;;-1:-1:-1;;;;;;7006:17:0;-1:-1:-1;;;;;7006:17:0;;;;;7030:11;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7069:15:0;;;;;;:10;:15;;;;;;:17;;;;;;7107:35;7133:8;;7069:15;;7107:35;;7069:15;;7107:35;28758: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://ce503393bbe4fe76cb67e42337c2e1dcdf380ae7ef5633c3ffd26ae3f5b441e6
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.