ETH Price: $2,526.62 (+0.61%)

Token

YeeDontDoNFTs (YEE)
 

Overview

Max Total Supply

1,000 YEE

Holders

245

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 YEE
0xacce4bcabfde92502b55de25e38986bc40e58e56
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:
YeeDontDoNFTs

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-02-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/Yeee.sol

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

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

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

  /// @notice 0 = CLOSED, 1 = WHITELIST, 2 = 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("YeeDontDoNFTs", "YEE") {
    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 == 0.00 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"}]

6080604052600980546001600160a01b03191673a5409ec958c83c3f309868babaca7c86dcb077c1179055600a80547401f42aa99f011a1fa7cda90e5e98b277e306bca83e6001600160a81b03199091161790553480156200006057600080fd5b5060405162002d3f38038062002d3f83398101604081905262000083916200022d565b6040518060400160405280600d81526020016c596565446f6e74446f4e46547360981b8152506040518060400160405280600381526020016259454560e81b815250620000d6336200012160201b60201c565b8151620000eb90600190602085019062000171565b5080516200010190600290602084019062000171565b50508151620001199150600b90602084019062000171565b505062000346565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b8280546200017f9062000309565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200024157600080fd5b82516001600160401b03808211156200025957600080fd5b818501915085601f8301126200026e57600080fd5b81518181111562000283576200028362000217565b604051601f8201601f19908116603f01168101908382118183101715620002ae57620002ae62000217565b816040528281528886848701011115620002c757600080fd5b600093505b82841015620002eb5784840186015181850187015292850192620002cc565b82841115620002fd5760008684830101525b98975050505050505050565b600181811c908216806200031e57607f821691505b602082108114156200034057634e487b7160e01b600052602260045260246000fd5b50919050565b6129e980620003566000396000f3fe6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612351565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123c6565b34801561032957600080fd5b5061033d6103383660046123d9565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123d9565b610948565b005b34801561038357600080fd5b50610375610392366004612407565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612433565b610ae5565b3480156103e757600080fd5b506103756103f6366004612450565b610b4f565b34801561040757600080fd5b506103ad610416366004612407565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b366004612491565b610d87565b34801561045c57600080fd5b5061037561046b366004612450565b610e68565b34801561047c57600080fd5b5061049061048b366004612433565b610e83565b6040516102d191906124c6565b3480156104a957600080fd5b506103ad6104b83660046123d9565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123d9565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125b6565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612433565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad6103e881565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123d9565b611160565b3480156105e757600080fd5b506103756105f6366004612407565b61135b565b34801561060757600080fd5b50610375610616366004612628565b61142d565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612433565b611438565b34801561066757600080fd5b50610375610676366004612661565b6114a2565b34801561068757600080fd5b50610310611530565b34801561069c57600080fd5b506103106106ab3660046123d9565b61153d565b3480156106bc57600080fd5b506103ad600381565b3480156106d157600080fd5b506102c56106e03660046126e1565b611698565b3480156106f157600080fd5b50610375610700366004612433565b6117c5565b34801561071157600080fd5b50610375610720366004612407565b61189d565b34801561073157600080fd5b50610375610740366004612407565b611968565b34801561075157600080fd5b5061037561076036600461270f565b6119e6565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612744565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612744565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a41565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a8b565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b0e565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bdf565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e61277f565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127ab565b9250505b610ca5816127ab565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114a2565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61250a565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f0061277f565b602090810291909101015280610f15816127ab565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a41565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b6000600483815481106110035761100361277f565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b815161107a90600c906020850190612270565b50805161108e90600d906020840190612270565b5061109b600b60006122f0565b5050565b600c805461084390612744565b600b805461084390612744565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612744565b6003546103e861117083836127c6565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b03163314611329576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b600082118015611233575060038211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b6103e881116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b611329565b34156113295760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae0576113493383611342816127ab565b9450611d20565b80611353816127ab565b91505061132c565b6000546001600160a01b031633146113a35760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611409573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae091906127de565b61109b338383611d3a565b6000546001600160a01b031633146114805760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114ac3383611b0e565b61151e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61152a84848484611e09565b50505050565b600d805461084390612744565b606061154882611a41565b6115ba5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115c990612744565b9050111561166357600b80546115de90612744565b80601f016020809104026020016040519081016040528092919081815260200182805461160a90612744565b80156116575780601f1061162c57610100808354040283529160200191611657565b820191906000526020600020905b81548152906001019060200180831161163a57829003601f168201915b50505050509050919050565b600c61166e83611e20565b600d60405160200161168293929190612895565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116db57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561173e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176291906128c8565b6001600160a01b0316826001600160a01b0316148061178e5750600a546001600160a01b038381169116145b806117be57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461180d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6000546001600160a01b03828116911614156118915760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b61189a81611f52565b50565b6000546001600160a01b031633146118e55760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119b05760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a2e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b805161109b90600b906020840190612270565b60045460009082108015610830575060006001600160a01b031660048381548110611a6e57611a6e61277f565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611acd57611acd61277f565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b1982611a41565b611b715760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b8657611b8661277f565b6000918252602090912001546001600160a01b0390811691508416811480611bc75750836001600160a01b0316611bbc846108c4565b6001600160a01b0316145b80611bd75750611bd78185611698565b949350505050565b826001600160a01b031660048281548110611bfc57611bfc61277f565b6000918252602090912001546001600160a01b031614611c845760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611c8f600082611a8b565b8160048281548110611ca357611ca361277f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fa2565b816001600160a01b0316836001600160a01b03161415611d9c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e14848484611bdf565b61152a84848484611fb5565b606081611e6057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e8a5780611e74816127ab565b9150611e839050600a836128fb565b9150611e64565b60008167ffffffffffffffff811115611ea557611ea561250a565b6040519080825280601f01601f191660200182016040528015611ecf576020820181803683370190505b5090505b8415611bd757611ee460018361290f565b9150611ef1600a86612926565b611efc9060306127c6565b60f81b818381518110611f1157611f1161277f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f4b600a866128fb565b9450611ed3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fac838361216f565b610ae060008484845b6001600160a01b0383163b1561152a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611ff790339088908790879060040161293a565b6020604051808303816000875af1925050508015612032575060408051601f3d908101601f1916820190925261202f91810190612976565b60015b6120e2573d808015612060576040519150601f19603f3d011682016040523d82523d6000602084013e612065565b606091505b5080516120da5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121685760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61217881611a41565b156121c55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161221d836127ab565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461227c90612744565b90600052602060002090601f01602090048101928261229e57600085556122e4565b82601f106122b757805160ff19168380011785556122e4565b828001600101855582156122e4579182015b828111156122e45782518255916020019190600101906122c9565b50610f87929150612326565b5080546122fc90612744565b6000825580601f1061230c575050565b601f01602090049060005260206000209081019061189a91905b5b80821115610f875760008155600101612327565b6001600160e01b03198116811461189a57600080fd5b60006020828403121561236357600080fd5b81356117be8161233b565b60005b83811015612389578181015183820152602001612371565b8381111561152a5750506000910152565b600081518084526123b281602086016020860161236e565b601f01601f19169290920160200192915050565b6020815260006117be602083018461239a565b6000602082840312156123eb57600080fd5b5035919050565b6001600160a01b038116811461189a57600080fd5b6000806040838503121561241a57600080fd5b8235612425816123f2565b946020939093013593505050565b60006020828403121561244557600080fd5b81356117be816123f2565b60008060006060848603121561246557600080fd5b8335612470816123f2565b92506020840135612480816123f2565b929592945050506040919091013590565b6000806000606084860312156124a657600080fd5b83356124b1816123f2565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b818110156124fe578351835292840192918401916001016124e2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561253b5761253b61250a565b604051601f8501601f19908116603f011681019082821181831017156125635761256361250a565b8160405280935085815286868601111561257c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125a757600080fd5b6117be83833560208501612520565b600080604083850312156125c957600080fd5b823567ffffffffffffffff808211156125e157600080fd5b6125ed86838701612596565b9350602085013591508082111561260357600080fd5b5061261085828601612596565b9150509250929050565b801515811461189a57600080fd5b6000806040838503121561263b57600080fd5b8235612646816123f2565b915060208301356126568161261a565b809150509250929050565b6000806000806080858703121561267757600080fd5b8435612682816123f2565b93506020850135612692816123f2565b925060408501359150606085013567ffffffffffffffff8111156126b557600080fd5b8501601f810187136126c657600080fd5b6126d587823560208401612520565b91505092959194509250565b600080604083850312156126f457600080fd5b82356126ff816123f2565b91506020830135612656816123f2565b60006020828403121561272157600080fd5b813567ffffffffffffffff81111561273857600080fd5b611bd784828501612596565b600181811c9082168061275857607f821691505b6020821081141561277957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127bf576127bf612795565b5060010190565b600082198211156127d9576127d9612795565b500190565b6000602082840312156127f057600080fd5b81516117be8161261a565b8054600090600181811c908083168061281557607f831692505b602080841082141561283757634e487b7160e01b600052602260045260246000fd5b81801561284b576001811461285c57612889565b60ff19861689528489019650612889565b60008881526020902060005b868110156128815781548b820152908501908301612868565b505084890196505b50505050505092915050565b60006128a182866127fb565b84516128b181836020890161236e565b6128bd818301866127fb565b979650505050505050565b6000602082840312156128da57600080fd5b81516117be816123f2565b634e487b7160e01b600052601260045260246000fd5b60008261290a5761290a6128e5565b500490565b60008282101561292157612921612795565b500390565b600082612935576129356128e5565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261296c608083018461239a565b9695505050505050565b60006020828403121561298857600080fd5b81516117be8161233b56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a2646970667358221220817ccf35d20afffcd42f08aa0b2f6cd6c155ef1360b555ce32d523b667b095d864736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53514a746d3251685868646b64726759316f484865783153437863396b75514b64416f7657413265616937722f00000000000000000000

Deployed Bytecode

0x6080604052600436106102a05760003560e01c80636c0360eb1161016e578063b776c8a6116100cb578063e985e9c51161007f578063f3e414f811610064578063f3e414f814610705578063f3fef3a314610725578063fe2c7fee1461074557600080fd5b8063e985e9c5146106c5578063f2fde38b146106e557600080fd5b8063c6682862116100b0578063c66828621461067b578063c87b56dd14610690578063de562a53146106b057600080fd5b8063b776c8a61461063b578063b88d4fde1461065b57600080fd5b806395d89b4111610122578063a1db978211610107578063a1db9782146105db578063a22cb465146105fb578063a8e90b571461061b57600080fd5b806395d89b41146105b3578063a0712d68146105c857600080fd5b806370a082311161015357806370a082311461055d5780638da5cb5b1461057d578063958f6ed61461059d57600080fd5b80636c0360eb146105335780637035bf181461054857600080fd5b80632f745c591161021c5780634f6ccce7116101d0578063603f4d52116101b5578063603f4d52146104dd5780636352211e146104f35780636790a9de1461051357600080fd5b80634f6ccce71461049d578063511ed382146104bd57600080fd5b806339ead7201161020157806339ead7201461043057806342842e0e14610450578063438b63001461047057600080fd5b80632f745c59146103fb57806333c12e171461041b57600080fd5b8063084c40881161027357806318160ddd1161025857806318160ddd146103975780631e8858fb146103bb57806323b872dd146103db57600080fd5b8063084c408814610355578063095ea7b31461037757600080fd5b806301ffc9a7146102a5578063026ae102146102da57806306fdde03146102fb578063081812fc1461031d575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612351565b610765565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b50600a546102c590600160a01b900460ff1681565b34801561030757600080fd5b50610310610836565b6040516102d191906123c6565b34801561032957600080fd5b5061033d6103383660046123d9565b6108c4565b6040516001600160a01b0390911681526020016102d1565b34801561036157600080fd5b506103756103703660046123d9565b610948565b005b34801561038357600080fd5b50610375610392366004612407565b610995565b3480156103a357600080fd5b506103ad60035481565b6040519081526020016102d1565b3480156103c757600080fd5b506103756103d6366004612433565b610ae5565b3480156103e757600080fd5b506103756103f6366004612450565b610b4f565b34801561040757600080fd5b506103ad610416366004612407565b610bd6565b34801561042757600080fd5b50610375610d03565b34801561043c57600080fd5b5061037561044b366004612491565b610d87565b34801561045c57600080fd5b5061037561046b366004612450565b610e68565b34801561047c57600080fd5b5061049061048b366004612433565b610e83565b6040516102d191906124c6565b3480156104a957600080fd5b506103ad6104b83660046123d9565b610f25565b3480156104c957600080fd5b5060095461033d906001600160a01b031681565b3480156104e957600080fd5b506103ad60085481565b3480156104ff57600080fd5b5061033d61050e3660046123d9565b610f8b565b34801561051f57600080fd5b5061037561052e3660046125b6565b61101f565b34801561053f57600080fd5b5061031061109f565b34801561055457600080fd5b506103106110ac565b34801561056957600080fd5b506103ad610578366004612433565b6110b9565b34801561058957600080fd5b5060005461033d906001600160a01b031681565b3480156105a957600080fd5b506103ad6103e881565b3480156105bf57600080fd5b50610310611153565b6103756105d63660046123d9565b611160565b3480156105e757600080fd5b506103756105f6366004612407565b61135b565b34801561060757600080fd5b50610375610616366004612628565b61142d565b34801561062757600080fd5b50600a5461033d906001600160a01b031681565b34801561064757600080fd5b50610375610656366004612433565b611438565b34801561066757600080fd5b50610375610676366004612661565b6114a2565b34801561068757600080fd5b50610310611530565b34801561069c57600080fd5b506103106106ab3660046123d9565b61153d565b3480156106bc57600080fd5b506103ad600381565b3480156106d157600080fd5b506102c56106e03660046126e1565b611698565b3480156106f157600080fd5b50610375610700366004612433565b6117c5565b34801561071157600080fd5b50610375610720366004612407565b61189d565b34801561073157600080fd5b50610375610740366004612407565b611968565b34801561075157600080fd5b5061037561076036600461270f565b6119e6565b60007f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b0319831614806107c857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806107fc57507f780e9d63000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061083057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6001805461084390612744565b80601f016020809104026020016040519081016040528092919081815260200182805461086f90612744565b80156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505050505081565b60006108cf82611a41565b61092c5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b031633146109905760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600855565b60006109a082610f8b565b9050806001600160a01b0316836001600160a01b03161415610a2a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610923565b336001600160a01b0382161480610a6457506001600160a01b038116600090815260076020908152604080832033845290915290205460ff165b610ad65760405162461bcd60e51b815260206004820152603060248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f722060448201527f617070726f76656420666f7220616c6c000000000000000000000000000000006064820152608401610923565b610ae08383611a8b565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b593382611b0e565b610bcb5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b610ae0838383611bdf565b6000610be1836110b9565b8210610c3d5760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000805b600454811015610cac5760048181548110610c5e57610c5e61277f565b6000918252602090912001546001600160a01b0386811691161415610c9c5783821415610c8e5791506108309050565b81610c98816127ab565b9250505b610ca5816127ab565b9050610c41565b5060405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018390526064810182905260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050505050565b610ae0838383604051806020016040528060008152506114a2565b60606000610e90836110b9565b905060008167ffffffffffffffff811115610ead57610ead61250a565b604051908082528060200260200182016040528015610ed6578160200160208202803683370190505b50905060005b82811015610f1d57610eee8582610bd6565b828281518110610f0057610f0061277f565b602090810291909101015280610f15816127ab565b915050610edc565b509392505050565b6004546000908210610f875760405162461bcd60e51b815260206004820152602560248201527f455243373231456e756d657261626c653a20496e646578206f7574206f6620626044820152646f756e647360d81b6064820152608401610923565b5090565b6000610f9682611a41565b610fee5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b6000600483815481106110035761100361277f565b6000918252602090912001546001600160a01b03169392505050565b6000546001600160a01b031633146110675760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b815161107a90600c906020850190612270565b50805161108e90600d906020840190612270565b5061109b600b60006122f0565b5050565b600c805461084390612744565b600b805461084390612744565b60006001600160a01b0382166111375760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610923565b506001600160a01b031660009081526005602052604090205490565b6002805461084390612744565b6003546103e861117083836127c6565b11156111be5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c79206578636565646564000000000000000000000000006044820152606401610923565b6000546001600160a01b03163314611329576008546001146112225760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206973206e6f74206f70656e0000000000000000006044820152606401610923565b600082118015611233575060038211155b61127f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420636c61696d20616d6f756e740000000000000000000000006044820152606401610923565b6103e881116112db5734156112d65760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b611329565b34156113295760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420657468657220616d6f756e740000000000000000000000006044820152606401610923565b60005b82811015610ae0576113493383611342816127ab565b9450611d20565b80611353816127ab565b91505061132c565b6000546001600160a01b031633146113a35760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611409573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae091906127de565b61109b338383611d3a565b6000546001600160a01b031633146114805760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6114ac3383611b0e565b61151e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610923565b61152a84848484611e09565b50505050565b600d805461084390612744565b606061154882611a41565b6115ba5760405162461bcd60e51b815260206004820152602b60248201527f4552433732314d657461646174613a20717565727920666f72206e6f6e65786960448201527f7374696e6720746f6b656e0000000000000000000000000000000000000000006064820152608401610923565b6000600b80546115c990612744565b9050111561166357600b80546115de90612744565b80601f016020809104026020016040519081016040528092919081815260200182805461160a90612744565b80156116575780601f1061162c57610100808354040283529160200191611657565b820191906000526020600020905b81548152906001019060200180831161163a57829003601f168201915b50505050509050919050565b600c61166e83611e20565b600d60405160200161168293929190612895565b6040516020818303038152906040529050919050565b600a54600090600160a01b900460ff166116db57506001600160a01b0382811660009081526007602090815260408083209385168352929052205460ff16610830565b6009546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063c455279190602401602060405180830381865afa15801561173e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176291906128c8565b6001600160a01b0316826001600160a01b0316148061178e5750600a546001600160a01b038381169116145b806117be57506001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff165b9392505050565b6000546001600160a01b0316331461180d5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6000546001600160a01b03828116911614156118915760405162461bcd60e51b815260206004820152602c60248201527f417574683a207472616e73666572696e67206f776e65727368697020746f206360448201527f757272656e74206f776e657200000000000000000000000000000000000000006064820152608401610923565b61189a81611f52565b50565b6000546001600160a01b031633146118e55760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146119b05760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ae0573d6000803e3d6000fd5b6000546001600160a01b03163314611a2e5760405162461bcd60e51b815260206004820152601d60248201526000805160206129948339815191526044820152606401610923565b805161109b90600b906020840190612270565b60045460009082108015610830575060006001600160a01b031660048381548110611a6e57611a6e61277f565b6000918252602090912001546001600160a01b0316141592915050565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155600480548392919083908110611acd57611acd61277f565b60009182526020822001546040516001600160a01b03909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611b1982611a41565b611b715760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b6064820152608401610923565b600060048381548110611b8657611b8661277f565b6000918252602090912001546001600160a01b0390811691508416811480611bc75750836001600160a01b0316611bbc846108c4565b6001600160a01b0316145b80611bd75750611bd78185611698565b949350505050565b826001600160a01b031660048281548110611bfc57611bfc61277f565b6000918252602090912001546001600160a01b031614611c845760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610923565b611c8f600082611a8b565b8160048281548110611ca357611ca361277f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558583168083526005909152604080832080546000190190559285168083528383208054600101905592518493927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61109b828260405180602001604052806000815250611fa2565b816001600160a01b0316836001600160a01b03161415611d9c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610923565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e14848484611bdf565b61152a84848484611fb5565b606081611e6057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611e8a5780611e74816127ab565b9150611e839050600a836128fb565b9150611e64565b60008167ffffffffffffffff811115611ea557611ea561250a565b6040519080825280601f01601f191660200182016040528015611ecf576020820181803683370190505b5090505b8415611bd757611ee460018361290f565b9150611ef1600a86612926565b611efc9060306127c6565b60f81b818381518110611f1157611f1161277f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f4b600a866128fb565b9450611ed3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee679190a35050565b611fac838361216f565b610ae060008484845b6001600160a01b0383163b1561152a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611ff790339088908790879060040161293a565b6020604051808303816000875af1925050508015612032575060408051601f3d908101601f1916820190925261202f91810190612976565b60015b6120e2573d808015612060576040519150601f19603f3d011682016040523d82523d6000602084013e612065565b606091505b5080516120da5760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b805181602001fd5b630a85bd0160e11b6001600160e01b03198216146121685760405162461bcd60e51b815260206004820152603a60248201527f4552433732313a2073616665207472616e7366657220746f206e6f6e2045524360448201527f373231526563656976657220696d706c656d656e746174696f6e0000000000006064820152608401610923565b5050505050565b61217881611a41565b156121c55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610923565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055600380549161221d836127ab565b90915550506001600160a01b0382166000818152600560205260408082208054600101905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461227c90612744565b90600052602060002090601f01602090048101928261229e57600085556122e4565b82601f106122b757805160ff19168380011785556122e4565b828001600101855582156122e4579182015b828111156122e45782518255916020019190600101906122c9565b50610f87929150612326565b5080546122fc90612744565b6000825580601f1061230c575050565b601f01602090049060005260206000209081019061189a91905b5b80821115610f875760008155600101612327565b6001600160e01b03198116811461189a57600080fd5b60006020828403121561236357600080fd5b81356117be8161233b565b60005b83811015612389578181015183820152602001612371565b8381111561152a5750506000910152565b600081518084526123b281602086016020860161236e565b601f01601f19169290920160200192915050565b6020815260006117be602083018461239a565b6000602082840312156123eb57600080fd5b5035919050565b6001600160a01b038116811461189a57600080fd5b6000806040838503121561241a57600080fd5b8235612425816123f2565b946020939093013593505050565b60006020828403121561244557600080fd5b81356117be816123f2565b60008060006060848603121561246557600080fd5b8335612470816123f2565b92506020840135612480816123f2565b929592945050506040919091013590565b6000806000606084860312156124a657600080fd5b83356124b1816123f2565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b818110156124fe578351835292840192918401916001016124e2565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561253b5761253b61250a565b604051601f8501601f19908116603f011681019082821181831017156125635761256361250a565b8160405280935085815286868601111561257c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125a757600080fd5b6117be83833560208501612520565b600080604083850312156125c957600080fd5b823567ffffffffffffffff808211156125e157600080fd5b6125ed86838701612596565b9350602085013591508082111561260357600080fd5b5061261085828601612596565b9150509250929050565b801515811461189a57600080fd5b6000806040838503121561263b57600080fd5b8235612646816123f2565b915060208301356126568161261a565b809150509250929050565b6000806000806080858703121561267757600080fd5b8435612682816123f2565b93506020850135612692816123f2565b925060408501359150606085013567ffffffffffffffff8111156126b557600080fd5b8501601f810187136126c657600080fd5b6126d587823560208401612520565b91505092959194509250565b600080604083850312156126f457600080fd5b82356126ff816123f2565b91506020830135612656816123f2565b60006020828403121561272157600080fd5b813567ffffffffffffffff81111561273857600080fd5b611bd784828501612596565b600181811c9082168061275857607f821691505b6020821081141561277957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127bf576127bf612795565b5060010190565b600082198211156127d9576127d9612795565b500190565b6000602082840312156127f057600080fd5b81516117be8161261a565b8054600090600181811c908083168061281557607f831692505b602080841082141561283757634e487b7160e01b600052602260045260246000fd5b81801561284b576001811461285c57612889565b60ff19861689528489019650612889565b60008881526020902060005b868110156128815781548b820152908501908301612868565b505084890196505b50505050505092915050565b60006128a182866127fb565b84516128b181836020890161236e565b6128bd818301866127fb565b979650505050505050565b6000602082840312156128da57600080fd5b81516117be816123f2565b634e487b7160e01b600052601260045260246000fd5b60008261290a5761290a6128e5565b500490565b60008282101561292157612921612795565b500390565b600082612935576129356128e5565b500690565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261296c608083018461239a565b9695505050505050565b60006020828403121561298857600080fd5b81516117be8161233b56fe417574683a2073656e646572206973206e6f7420746865206f776e6572000000a2646970667358221220817ccf35d20afffcd42f08aa0b2f6cd6c155ef1360b555ce32d523b667b095d864736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53514a746d3251685868646b64726759316f484865783153437863396b75514b64416f7657413265616937722f00000000000000000000

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d53514a746d3251685868646b64726759316f4848657831
Arg [3] : 53437863396b75514b64416f7657413265616937722f00000000000000000000


Deployed Bytecode Sourcemap

28737:4256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11466:305;;;;;;;;;;-1:-1:-1;11466:305:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;11466:305:0;;;;;;;;29357:39;;;;;;;;;;-1:-1:-1;29357:39:0;;;;-1:-1:-1;;;29357:39:0;;;;;;1248:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3335:194::-;;;;;;;;;;-1:-1:-1;3335:194:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1738:55:1;;;1720:74;;1708:2;1693:18;3335:194:0;1574:226:1;31161:100:0;;;;;;;;;;-1:-1:-1;31161:100:0;;;;;:::i;:::-;;:::i;:::-;;2932:356;;;;;;;;;;-1:-1:-1;2932:356:0;;;;;:::i;:::-;;:::i;1393:26::-;;;;;;;;;;;;;;;;;;;2430:25:1;;;2418:2;2403:18;1393:26:0;2284:177:1;31457:100:0;;;;;;;;;;-1:-1:-1;31457:100:0;;;;;:::i;:::-;;:::i;3980:256::-;;;;;;;;;;-1:-1:-1;3980:256:0;;;;;:::i;:::-;;:::i;4863:430::-;;;;;;;;;;-1:-1:-1;4863:430:0;;;;;:::i;:::-;;:::i;31623:114::-;;;;;;;;;;;;;:::i;32358:184::-;;;;;;;;;;-1:-1:-1;32358:184:0;;;;;:::i;:::-;;:::i;4288:162::-;;;;;;;;;;-1:-1:-1;4288:162:0;;;;;:::i;:::-;;:::i;5604:301::-;;;;;;;;;;-1:-1:-1;5604:301:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5351:182::-;;;;;;;;;;-1:-1:-1;5351:182:0;;;;;:::i;:::-;;:::i;29095:67::-;;;;;;;;;;-1:-1:-1;29095:67:0;;;;-1:-1:-1;;;;;29095:67:0;;;29025:24;;;;;;;;;;;;;;;;2556:210;;;;;;;;;;-1:-1:-1;2556:210:0;;;;;:::i;:::-;;:::i;30721:196::-;;;;;;;;;;-1:-1:-1;30721:196:0;;;;;:::i;:::-;;:::i;29500:21::-;;;;;;;;;;;;;:::i;29434:27::-;;;;;;;;;;;;;:::i;2314:199::-;;;;;;;;;;-1:-1:-1;2314:199:0;;;;;:::i;:::-;;:::i;12568:20::-;;;;;;;;;;-1:-1:-1;12568:20:0;;;;-1:-1:-1;;;;;12568:20:0;;;28840:41;;;;;;;;;;;;28877:4;28840:41;;1315:20;;;;;;;;;;;;;:::i;29772:556::-;;;;;;:::i;:::-;;:::i;31968:117::-;;;;;;;;;;-1:-1:-1;31968:117:0;;;;;:::i;:::-;;:::i;3582:142::-;;;;;;;;;;-1:-1:-1;3582:142:0;;;;;:::i;:::-;;:::i;29222:69::-;;;;;;;;;;-1:-1:-1;29222:69:0;;;;-1:-1:-1;;;;;29222:69:0;;;31311:92;;;;;;;;;;-1:-1:-1;31311:92:0;;;;;:::i;:::-;;:::i;4502:296::-;;;;;;;;;;-1:-1:-1;4502:296:0;;;;;:::i;:::-;;:::i;29571:27::-;;;;;;;;;;;;;:::i;30373:298::-;;;;;;;;;;-1:-1:-1;30373:298:0;;;;;:::i;:::-;;:::i;28923:41::-;;;;;;;;;;;;28963:1;28923:41;;32646:344;;;;;;;;;;-1:-1:-1;32646:344:0;;;;;:::i;:::-;;:::i;13219:178::-;;;;;;;;;;-1:-1:-1;13219:178:0;;;;;:::i;:::-;;:::i;32146:136::-;;;;;;;;;;-1:-1:-1;32146:136:0;;;;;:::i;:::-;;:::i;31799:105::-;;;;;;;;;;-1:-1:-1;31799:105:0;;;;;:::i;:::-;;:::i;30979:128::-;;;;;;;;;;-1:-1:-1;30979:128:0;;;;;:::i;:::-;;:::i;11466:305::-;11543:4;11570:26;-1:-1:-1;;;;;;11570:26:0;;;;:73;;-1:-1:-1;11617:26:0;-1:-1:-1;;;;;;11617:26:0;;;11570:73;:128;;;-1:-1:-1;11672:26:0;-1:-1:-1;;;;;;11672:26:0;;;11570:128;:185;;;-1:-1:-1;11729:26:0;-1:-1:-1;;;;;;11729:26:0;;;11570:185;11556:199;11466:305;-1:-1:-1;;11466:305:0:o;1248:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3335:194::-;3403:7;3427:17;3435:8;3427:7;:17::i;:::-;3419:65;;;;-1:-1:-1;;;3419:65:0;;9495:2:1;3419: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;;3419:65:0;;;;;;;;;-1:-1:-1;3498:25:0;;;;:15;:25;;;;;;-1:-1:-1;;;;;3498:25:0;;3335:194::o;31161:100::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31231:9:::1;:24:::0;31161:100::o;2932:356::-;3002:13;3018:17;3026:8;3018:7;:17::i;:::-;3002:33;;3057:5;-1:-1:-1;;;;;3050:12:0;:3;-1:-1:-1;;;;;3050:12:0;;;3042:58;;;;-1:-1:-1;;;3042:58:0;;10257:2:1;3042: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;;3042:58:0;10055:397:1;3042:58:0;3125:10;-1:-1:-1;;;;;3125:19:0;;;;:59;;-1:-1:-1;;;;;;3148:24:0;;;;;;:17;:24;;;;;;;;3173:10;3148:36;;;;;;;;;;3125:59;3109:141;;;;-1:-1:-1;;;3109:141:0;;10659:2:1;3109:141:0;;;10641:21:1;10698:2;10678:18;;;10671:30;10737:34;10717:18;;;10710:62;10808:18;10788;;;10781:46;10844:19;;3109:141:0;10457:412:1;3109:141:0;3259:23;3268:3;3273:8;3259;:23::i;:::-;2995:293;2932:356;;:::o;31457:100::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31527:9:::1;:24:::0;;-1:-1:-1;;;;;;31527:24:0::1;-1:-1:-1::0;;;;;31527:24:0;;;::::1;::::0;;;::::1;::::0;;31457:100::o;3980:256::-;4098:40;4117:10;4129:8;4098:18;:40::i;:::-;4090:102;;;;-1:-1:-1;;;4090:102:0;;11076:2:1;4090: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;;4090:102:0;10874:413:1;4090:102:0;4199:31;4209:5;4216:3;4221:8;4199:9;:31::i;4863:430::-;4947:15;4988:19;4998:8;4988:9;:19::i;:::-;4979:6;:28;4971:78;;;;-1:-1:-1;;;4971:78:0;;11494:2:1;4971: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;;4971:78:0;11292:401:1;4971:78:0;5056:13;5081:9;5076:158;5096:7;:14;5092:18;;5076:158;;;5142:7;5150:1;5142:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5130:22:0;;;5142:10;;5130:22;5126:101;;;5178:6;5169:5;:15;5165:52;;;5193:1;-1:-1:-1;5186:8:0;;-1:-1:-1;5186:8:0;5165:52;5210:7;;;;:::i;:::-;;;;5165:52;5112:3;;;:::i;:::-;;;5076:158;;;-1:-1:-1;5240:47:0;;-1:-1:-1;;;5240:47:0;;11494:2:1;5240: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;;5240:47:0;11292:401:1;31623:114:0;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31711:20:::1;::::0;;31687:44;;::::1;-1:-1:-1::0;;;31711:20:0;;;::::1;;;31710:21;31687:44:::0;;::::1;;::::0;;31623:114::o;32358:184::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;32472:64:::1;::::0;;;;32503:4:::1;32472:64;::::0;::::1;12572:34:1::0;32510: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;;;;;32472:22:0;::::1;::::0;::::1;::::0;12841:19:1;;32472:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32358:184:::0;;;:::o;4288:162::-;4402:42;4419:5;4426:3;4431:8;4402:42;;;;;;;;;;;;:16;:42::i;5604:301::-;5666:16;5691:15;5709:19;5719:8;5709:9;:19::i;:::-;5691:37;;5735:20;5772:7;5758:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5758:22:0;;5735:45;;5792:9;5787:96;5811:7;5807:1;:11;5787:96;;;5843:32;5863:8;5873:1;5843:19;:32::i;:::-;5834:3;5838:1;5834:6;;;;;;;;:::i;:::-;;;;;;;;;;:41;5820:3;;;;:::i;:::-;;;;5787:96;;;-1:-1:-1;5896:3:0;5604:301;-1:-1:-1;;;5604:301:0:o;5351:182::-;5451:7;:14;5418:7;;5442:23;;5434:73;;;;-1:-1:-1;;;5434:73:0;;11494:2:1;5434: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;;5434:73:0;11292:401:1;5434:73:0;-1:-1:-1;5521:6:0;5351:182::o;2556:210::-;2620:7;2644:17;2652:8;2644:7;:17::i;:::-;2636:65;;;;-1:-1:-1;;;2636:65:0;;9495:2:1;2636: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;;2636:65:0;9293:399:1;2636:65:0;2708:13;2724:7;2732:8;2724:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2724:17:0;;2556:210;-1:-1:-1;;;2556:210:0:o;30721:196::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;30825:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;30852:32:0;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;30891:20:0::1;30898:13;;30891:20;:::i;:::-;30721:196:::0;;:::o;29500:21::-;;;;;;;:::i;29434:27::-;;;;;;;:::i;2314:199::-;2380:7;-1:-1:-1;;;;;2404:22:0;;2396:77;;;;-1:-1:-1;;;2396:77:0;;13073:2:1;2396: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;;2396:77:0;12871:406:1;2396:77:0;-1:-1:-1;;;;;;2487:20:0;;;;;:10;:20;;;;;;;2314:199::o;1315:20::-;;;;;;;:::i;29772:556::-;29843:11;;28877:4;29869:15;29878:6;29843:11;29869:15;:::i;:::-;:29;;29861:61;;;;-1:-1:-1;;;29861:61:0;;13617:2:1;29861:61:0;;;13599:21:1;13656:2;13636:18;;;13629:30;13695:21;13675:18;;;13668:49;13734:18;;29861:61:0;13415:343:1;29861:61:0;29947:5;;-1:-1:-1;;;;;29947:5:0;29933:10;:19;29929:317;;29971:9;;29984:1;29971:14;29963:50;;;;-1:-1:-1;;;29963:50:0;;13965:2:1;29963:50:0;;;13947:21:1;14004:2;13984:18;;;13977:30;14043:25;14023:18;;;14016:53;14086:18;;29963:50:0;13763:347:1;29963:50:0;30039:1;30030:6;:10;:37;;;;;28963:1;30044:6;:23;;30030:37;30022:70;;;;-1:-1:-1;;;30022:70:0;;14317:2:1;30022:70:0;;;14299:21:1;14356:2;14336:18;;;14329:30;14395:22;14375:18;;;14368:50;14435:18;;30022:70:0;14115:344:1;30022:70:0;30115:4;30105:6;:14;30101:137;;30129:9;:14;30121:47;;;;-1:-1:-1;;;30121:47:0;;14666:2:1;30121:47:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;30121:47:0;14464:344:1;30121:47:0;30101:137;;;30190:9;:23;30182:56;;;;-1:-1:-1;;;30182:56:0;;14666:2:1;30182:56:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:22;14724:18;;;14717:50;14784:18;;30182:56:0;14464:344:1;30182:56:0;30259:9;30254:68;30278:6;30274:1;:10;30254:68;;;30291:31;30301:10;30313:8;;;;:::i;:::-;;;30291:9;:31::i;:::-;30286:3;;;;:::i;:::-;;;;30254:68;;31968:117;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;32046:33:::1;::::0;;;;32061:10:::1;32046:33;::::0;::::1;14987:74:1::0;15077:18;;;15070:34;;;-1:-1:-1;;;;;32046:14:0;::::1;::::0;::::1;::::0;14960:18:1;;32046:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3582:142::-:0;3666:52;3685:10;3697:9;3708;3666:18;:52::i;31311:92::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31377:7:::1;:20:::0;;-1:-1:-1;;;;;;31377:20:0::1;-1:-1:-1::0;;;;;31377:20:0;;;::::1;::::0;;;::::1;::::0;;31311:92::o;4502:296::-;4649:40;4668:10;4680:8;4649:18;:40::i;:::-;4641:102;;;;-1:-1:-1;;;4641:102:0;;11076:2:1;4641: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;;4641:102:0;10874:413:1;4641:102:0;4750:42;4764:5;4771:3;4776:8;4786:5;4750:13;:42::i;:::-;4502:296;;;;:::o;29571:27::-;;;;;;;:::i;30373:298::-;30433:13;30463:11;30471:2;30463:7;:11::i;:::-;30455:67;;;;-1:-1:-1;;;30455:67:0;;15567:2:1;30455:67:0;;;15549:21:1;15606:2;15586:18;;;15579:30;15645:34;15625:18;;;15618:62;15716:13;15696:18;;;15689:41;15747:19;;30455:67:0;15365:407:1;30455:67:0;30565:1;30541:13;30535:27;;;;;:::i;:::-;;;:31;30531:57;;;30575:13;30568:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30373:298;;;:::o;30531:57::-;30626:7;30635:13;:2;:11;:13::i;:::-;30650;30609:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30595:70;;30373:298;;;:::o;32646:344::-;32753:20;;32735:4;;-1:-1:-1;;;32753:20:0;;;;32748:73;;-1:-1:-1;;;;;;3888:27:0;;;3868:4;3888:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;32775:46;;32748:73;32878:7;;32864:37;;;;;-1:-1:-1;;;;;1738:55:1;;;32864:37:0;;;1720:74:1;32878:7:0;;;;32864:30;;1693:18:1;;32864:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32844:58:0;:8;-1:-1:-1;;;;;32844:58:0;;:90;;;-1:-1:-1;32925:9:0;;-1:-1:-1;;;;;32913:21:0;;;32925:9;;32913:21;32844:90;:140;;;-1:-1:-1;;;;;;3888:27:0;;;3868:4;3888:27;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;32945:39;32830:154;32646:344;-1:-1:-1;;;32646:344:0:o;13219:178::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;13294:5:::1;::::0;-1:-1:-1;;;;;13294:15:0;;::::1;:5:::0;::::1;:15;;13286:72;;;::::0;-1:-1:-1;;;13286:72:0;;17886:2:1;13286:72:0::1;::::0;::::1;17868:21:1::0;17925:2;17905:18;;;17898:30;17964:34;17944:18;;;17937:62;18035:14;18015:18;;;18008:42;18067:19;;13286:72:0::1;17684:408:1::0;13286:72:0::1;13365:26;13384:6;13365:18;:26::i;:::-;13219:178:::0;:::o;32146:136::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;32223:53:::1;::::0;;;;32254:4:::1;32223:53;::::0;::::1;18360:34:1::0;32261:10:0::1;18410:18:1::0;;;18403:43;18462:18;;;18455:34;;;-1:-1:-1;;;;;32223:22:0;::::1;::::0;::::1;::::0;18272:18:1;;32223:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32146:136:::0;;:::o;31799:105::-;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31879:19:::1;::::0;-1:-1:-1;;;;;31879:11:0;::::1;::::0;:19;::::1;;;::::0;31891:6;;31879:19:::1;::::0;;;31891:6;31879:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;30979:128:::0;12725:5;;-1:-1:-1;;;;;12725:5:0;12711:10;:19;12703:61;;;;-1:-1:-1;;;12703:61:0;;9899:2:1;12703:61:0;;;9881:21:1;9938:2;9918:18;;;9911:30;-1:-1:-1;;;;;;;;;;;9957:18:1;;;9950:59;10026:18;;12703:61:0;9697:353:1;12703:61:0;31063:32;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;6759:152::-:0;6856:7;:14;6825:4;;6845:25;;:60;;;;;6903:1;-1:-1:-1;;;;;6874:31:0;:7;6882:8;6874:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6874:17:0;:31;;6838:67;6759:152;-1:-1:-1;;6759:152:0:o;9485:164::-;9558:25;;;;:15;:25;;;;;:31;;-1:-1:-1;;;;;;9558:31:0;-1:-1:-1;;;;;9558:31:0;;;;;;;;9610:7;:17;;9558:25;;:31;9610:7;9558:25;;9610:17;;;;;;:::i;:::-;;;;;;;;;;9601:42;;-1:-1:-1;;;;;9610:17:0;;;;9601:42;;;9485:164;;:::o;6991:326::-;7086:4;7107:17;7115:8;7107:7;:17::i;:::-;7099:65;;;;-1:-1:-1;;;7099:65:0;;9495:2:1;7099: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;;7099:65:0;9293:399:1;7099:65:0;7171:13;7187:7;7195:8;7187:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;7187:17:0;;;;-1:-1:-1;7219:17:0;;;;;:54;;;7265:8;-1:-1:-1;;;;;7240:33:0;:21;7252:8;7240:11;:21::i;:::-;-1:-1:-1;;;;;7240:33:0;;7219:54;:91;;;;7277:33;7294:5;7301:8;7277:16;:33::i;:::-;7211:100;6991:326;-1:-1:-1;;;;6991:326:0:o;8890:535::-;9028:5;-1:-1:-1;;;;;9007:26:0;:7;9015:8;9007:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;9007:17:0;:26;8999:80;;;;-1:-1:-1;;;8999:80:0;;18702:2:1;8999:80:0;;;18684:21:1;18741:2;18721:18;;;18714:30;18780:34;18760:18;;;18753:62;18851:11;18831:18;;;18824:39;18880:19;;8999:80:0;18500:405:1;8999:80:0;9187:30;9204:1;9208:8;9187;:30::i;:::-;9246:3;9226:7;9234:8;9226:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;-1:-1:-1;;;;;;9226:23:0;-1:-1:-1;;;;;9226:23:0;;;;;;9275:17;;;;;;:10;:17;;;;;;;:19;;-1:-1:-1;;9275:19:0;;;9303:15;;;;;;;;;:17;;-1:-1:-1;9303:17:0;;;9341:30;;9362:8;;9303:15;9341:30;;;2995:293;2932:356;;:::o;7388:108::-;7462:28;7472:3;7477:8;7462:28;;;;;;;;;;;;:9;:28::i;9730:305::-;9875:9;-1:-1:-1;;;;;9863:21:0;:8;-1:-1:-1;;;;;9863:21:0;;;9855:59;;;;-1:-1:-1;;;9855:59:0;;19112:2:1;9855:59:0;;;19094:21:1;19151:2;19131:18;;;19124:30;19190:27;19170:18;;;19163:55;19235:18;;9855:59:0;18910:349:1;9855:59:0;-1:-1:-1;;;;;9921:27:0;;;;;;;:17;:27;;;;;;;;:38;;;;;;;;;;;;;:50;;-1:-1:-1;;9921:50:0;;;;;;;;;;9983:46;;586:41:1;;;9983:46:0;;559:18:1;9983:46:0;;;;;;;9730:305;;;:::o;6470:233::-;6608:31;6618:5;6625:3;6630:8;6608:9;:31::i;:::-;6646:51;6669:5;6676:3;6681:8;6691:5;6646:22;:51::i;14019:723::-;14075:13;14296:10;14292:53;;-1:-1:-1;;14323:10:0;;;;;;;;;;;;;;;;;;14019:723::o;14292:53::-;14370:5;14355:12;14411:78;14418:9;;14411:78;;14444:8;;;;:::i;:::-;;-1:-1:-1;14467:10:0;;-1:-1:-1;14475:2:0;14467:10;;:::i;:::-;;;14411:78;;;14499:19;14531:6;14521:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14521:17:0;;14499:39;;14549:154;14556:10;;14549:154;;14583:11;14593:1;14583:11;;:::i;:::-;;-1:-1:-1;14652:10:0;14660:2;14652:5;:10;:::i;:::-;14639:24;;:2;:24;:::i;:::-;14626:39;;14609:6;14616;14609:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;14680:11:0;14689:2;14680:11;;:::i;:::-;;;14549:154;;13479:162;13539:16;13558:5;;-1:-1:-1;;;;;13570:14:0;;;-1:-1:-1;;;;;;13570:14:0;;;;;;13598:37;;13558:5;;;;;;;13598:37;;13539:16;13598:37;13532:109;13479:162;:::o;7678:203::-;7792:20;7798:3;7803:8;7792:5;:20::i;:::-;7819:56;7850:1;7854:3;7859:8;7869:5;10109:673;-1:-1:-1;;;;;10251:15:0;;;:19;10247:530;;10285:73;;-1:-1:-1;;;10285:73:0;;-1:-1:-1;;;;;10285:37:0;;;;;:73;;10323:10;;10335:5;;10342:8;;10352:5;;10285:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10285:73:0;;;;;;;;-1:-1:-1;;10285:73:0;;;;;;;;;;;;:::i;:::-;;;10281:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10543:13:0;;10539:222;;10576:68;;-1:-1:-1;;;10576:68:0;;20798:2:1;10576:68:0;;;20780:21:1;20837:2;20817:18;;;20810:30;20876:34;20856:18;;;20849:62;20947:28;20927:18;;;20920:56;20993:19;;10576:68:0;20596:422:1;10539:222:0;10729:6;10723:13;10714:6;10710:2;10706:15;10699:38;10281:489;-1:-1:-1;;;;;;;;;10404:22:0;;;10396:93;;;;-1:-1:-1;;;10396:93:0;;20798:2:1;10396:93:0;;;20780:21:1;20837:2;20817:18;;;20810:30;20876:34;20856:18;;;20849:62;20947:28;20927:18;;;20920:56;20993:19;;10396:93:0;20596:422:1;10396:93:0;10359:140;10109:673;;;;:::o;7946:389::-;8025:17;8033:8;8025:7;:17::i;:::-;8024:18;8016:59;;;;-1:-1:-1;;;8016:59:0;;21225:2:1;8016:59:0;;;21207:21:1;21264:2;21244:18;;;21237:30;21303;21283:18;;;21276:58;21351:18;;8016:59:0;21023:352:1;8016:59:0;8140:7;:17;;;;;;;-1:-1:-1;8140:17:0;;;;;;;-1:-1:-1;;;;;;8140:17:0;-1:-1:-1;;;;;8140:17:0;;;;;8164:11;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8203:15:0;;;;;;:10;:15;;;;;;:17;;;;;;8241:35;8267:8;;8203:15;;8241:35;;8203:15;;8241:35;30721: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;15115:245::-;15182:6;15235:2;15223:9;15214:7;15210:23;15206:32;15203:52;;;15251:1;15248;15241:12;15203:52;15283:9;15277:16;15302:28;15324:5;15302:28;:::i;15903:1030::-;15988:12;;15953:3;;16043:1;16063:18;;;;16116;;;;16143:61;;16197:4;16189:6;16185:17;16175:27;;16143:61;16223:2;16271;16263:6;16260:14;16240:18;16237:38;16234:218;;;-1:-1:-1;;;16305:1:1;16298:88;16409:4;16406:1;16399:15;16437:4;16434:1;16427:15;16234:218;16468:18;16495:104;;;;16613:1;16608:319;;;;16461:466;;16495:104;-1:-1:-1;;16528:24:1;;16516:37;;16573:16;;;;-1:-1:-1;16495:104:1;;16608:319;15850:1;15843:14;;;15887:4;15874:18;;16702:1;16716:165;16730:6;16727:1;16724:13;16716:165;;;16808:14;;16795:11;;;16788:35;16851:16;;;;16745:10;;16716:165;;;16720:3;;16910:6;16905:3;16901:16;16894:23;;16461:466;;;;;;;15903:1030;;;;:::o;16938:456::-;17159:3;17187:38;17221:3;17213:6;17187:38;:::i;:::-;17254:6;17248:13;17270:52;17315:6;17311:2;17304:4;17296:6;17292:17;17270:52;:::i;:::-;17338:50;17380:6;17376:2;17372:15;17364:6;17338:50;:::i;:::-;17331:57;16938:456;-1:-1:-1;;;;;;;16938:456:1:o;17399:280::-;17498:6;17551:2;17539:9;17530:7;17526:23;17522:32;17519:52;;;17567:1;17564;17557:12;17519:52;17599:9;17593:16;17618:31;17643:5;17618:31;:::i;19264:184::-;-1:-1:-1;;;19313:1:1;19306:88;19413:4;19410:1;19403:15;19437:4;19434:1;19427:15;19453:120;19493:1;19519;19509:35;;19524:18;;:::i;:::-;-1:-1:-1;19558:9:1;;19453:120::o;19578:125::-;19618:4;19646:1;19643;19640:8;19637:34;;;19651:18;;:::i;:::-;-1:-1:-1;19688:9:1;;19578:125::o;19708:112::-;19740:1;19766;19756:35;;19771:18;;:::i;:::-;-1:-1:-1;19805:9:1;;19708:112::o;19825:512::-;20019:4;-1:-1:-1;;;;;20129:2:1;20121:6;20117:15;20106:9;20099:34;20181:2;20173:6;20169:15;20164:2;20153:9;20149:18;20142:43;;20221:6;20216:2;20205:9;20201:18;20194:34;20264:3;20259:2;20248:9;20244:18;20237:31;20285:46;20326:3;20315:9;20311:19;20303:6;20285:46;:::i;:::-;20277:54;19825:512;-1:-1:-1;;;;;;19825:512:1:o;20342:249::-;20411:6;20464:2;20452:9;20443:7;20439:23;20435:32;20432:52;;;20480:1;20477;20470:12;20432:52;20512:9;20506:16;20531:30;20555:5;20531:30;:::i

Swarm Source

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