ETH Price: $3,316.70 (-1.10%)
 

Overview

Max Total Supply

91,295,773.159722222222222201 FERN

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
500 FERN

Value
$0.00
0xADD62287c10d90F65fd3Bf8bf94183Df115C030a
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:
Fern

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : Fern.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";

contract Fern is Context, IERC20, IERC20Metadata, Ownable {
  using SafeMath for uint256;

  uint256 public constant EMISSION_PER_DAY = 30 * (10 ** 18);

  uint256 public emissionStart;
  uint256 public emissionEnd;
  mapping(address => bool) public allowedAddress;

  mapping(uint256 => uint256) private _lastClaim;
  address private _nftAddress;

  mapping(address => uint256) private _balances;
  mapping(address => mapping(address => uint256)) private _allowances;
  uint256 private _totalSupply;
  string private _name;
  string private _symbol;

  constructor(string memory tokenName, string memory tokenSymbol)
  {
    _name = tokenName;
    _symbol = tokenSymbol;
    _mint(msg.sender, 91240875 * 10 ** decimals());// 20% is for community activity, commiter and developers
  }

  function name() public view override returns (string memory) {
    return _name;
  }

  function symbol() public view override returns (string memory) {
    return _symbol;
  }

  function decimals() public view override returns (uint8) {
    return 18;
  }

  function totalSupply() public view override returns (uint256) {
    return _totalSupply;
  }

  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account];
  }

  function transfer(address recipient, uint256 amount) public override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address owner, address spender) public view override returns (uint256) {
    return _allowances[owner][spender];
  }

  function approve(address spender, uint256 amount) public override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
    _transfer(sender, recipient, amount);
    if (!allowedAddress[msg.sender]) {
      uint256 currentAllowance = _allowances[sender][_msgSender()];
      require(currentAllowance >= amount, "exceeds allowance");
      unchecked {
        _approve(sender, _msgSender(), currentAllowance - amount);
      }
    }
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
    uint256 currentAllowance = _allowances[_msgSender()][spender];
    require(currentAllowance >= subtractedValue, "below zero");
    unchecked {
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
    }

    return true;
  }

  function _transfer(address sender, address recipient, uint256 amount) internal {
    require(sender != address(0), "zero address");
    require(recipient != address(0), "zero address");

    _beforeTokenTransfer(sender, recipient, amount);

    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "exceeds balance");
    unchecked {
        _balances[sender] = senderBalance - amount;
    }
    _balances[recipient] += amount;

    emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
  }

  function _mint(address account, uint256 amount) internal {
    require(account != address(0), "zero address");

    _beforeTokenTransfer(address(0), account, amount);

    _totalSupply += amount;
    _balances[account] += amount;
    emit Transfer(address(0), account, amount);

    _afterTokenTransfer(address(0), account, amount);
  }

  function _burn(address account, uint256 amount) internal {
    require(account != address(0), "zero address");

    _beforeTokenTransfer(account, address(0), amount);

    uint256 accountBalance = _balances[account];
    require(accountBalance >= amount, "exceeds balance");
    unchecked {
        _balances[account] = accountBalance - amount;
    }
    _totalSupply -= amount;

    emit Transfer(account, address(0), amount);

    _afterTokenTransfer(account, address(0), amount);
  }

  function _approve(address owner, address spender, uint256 amount) internal {
    require(owner != address(0), "zero address");
    require(spender != address(0), "zero address");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

  function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}

  function burn(uint256 amount) public {
      _burn(_msgSender(), amount);
  }

  function burnFrom(address account, uint256 amount) public virtual {
      uint256 currentAllowance = allowance(account, _msgSender());
      require(currentAllowance >= amount, "exceeds allowance");
      unchecked {
          _approve(account, _msgSender(), currentAllowance - amount);
      }
      _burn(account, amount);
  }

  function setEmissionStart() public onlyOwner {
    require(emissionStart == 0);
    require(emissionEnd == 0);

    emissionStart = block.timestamp;
    emissionEnd = emissionStart + (86400 * 365 * 10);
  }

  function setNftAddress(address nftAddress) public onlyOwner {
    require(_nftAddress == address(0));

    _nftAddress = nftAddress;
  }

  function setAllowedAddress(address nftAddress, bool allowed) public onlyOwner {
    allowedAddress[nftAddress] = allowed;
  }

  function lastClaim(uint256 tokenId) public view returns (uint256) {
    require(IERC721Enumerable(_nftAddress).ownerOf(tokenId) != address(0));

    uint256 lastClaimed = uint256(_lastClaim[tokenId]) != 0 ? uint256(_lastClaim[tokenId]) : emissionStart;
    return lastClaimed;
  }

  function accumulated(uint256 tokenId) public view returns (uint256) {
    require(emissionStart != 0);
    require(IERC721Enumerable(_nftAddress).ownerOf(tokenId) != address(0));

    uint256 lastClaimed = lastClaim(tokenId);

    if (lastClaimed >= emissionEnd) return 0;

    uint256 accumulationPeriod = block.timestamp < emissionEnd ? block.timestamp : emissionEnd;
    uint256 totalAccumulated = accumulationPeriod.sub(lastClaimed).mul(EMISSION_PER_DAY).div(86400);

    return totalAccumulated;
  }

  function claim(uint256[] memory tokenIds) public returns (uint256) {
    require(emissionStart != 0, "not yet");

    uint256 totalClaimQty = 0;
    for (uint i = 0; i < tokenIds.length; i++) {
      require(tokenIds[i] <= IERC721Enumerable(_nftAddress).totalSupply(), "invalid");
      for (uint j = i + 1; j < tokenIds.length; j++) {
        require(tokenIds[i] != tokenIds[j], "duplicate");
      }

      uint tokenId = tokenIds[i];
      require(IERC721Enumerable(_nftAddress).ownerOf(tokenId) == msg.sender, "invalid");

      uint256 claimQty = accumulated(tokenId);
      if (claimQty != 0) {
        totalClaimQty = totalClaimQty.add(claimQty);
        _lastClaim[tokenId] = block.timestamp;
      }
    }

    require(totalClaimQty != 0, "zero");
    _mint(msg.sender, totalClaimQty);
    return totalClaimQty;
  }  
}

File 2 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT

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 3 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 4 of 9 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 5 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 9 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 7 of 9 : IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 9 : IERC165.sol
// SPDX-License-Identifier: MIT

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 9 of 9 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EMISSION_PER_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"accumulated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emissionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emissionStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lastClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEmissionStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200343f3803806200343f83398181016040528101906200003791906200044c565b620000576200004b620000d160201b60201c565b620000d960201b60201c565b81600990805190602001906200006f9291906200032a565b5080600a9080519060200190620000889291906200032a565b50620000c9336200009e6200019d60201b60201c565b600a620000ac919062000681565b63057039ab620000bd9190620007be565b620001a660201b60201c565b50506200093c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002109062000512565b60405180910390fd5b6200022d600083836200032060201b60201c565b8060086000828254620002419190620005c9565b9250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002999190620005c9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000300919062000534565b60405180910390a36200031c600083836200032560201b60201c565b5050565b505050565b505050565b82805462000338906200086c565b90600052602060002090601f0160209004810192826200035c5760008555620003a8565b82601f106200037757805160ff1916838001178555620003a8565b82800160010185558215620003a8579182015b82811115620003a75782518255916020019190600101906200038a565b5b509050620003b79190620003bb565b5090565b5b80821115620003d6576000816000905550600101620003bc565b5090565b6000620003f1620003eb8462000585565b62000551565b9050828152602081018484840111156200040a57600080fd5b6200041784828562000836565b509392505050565b600082601f8301126200043157600080fd5b815162000443848260208601620003da565b91505092915050565b600080604083850312156200046057600080fd5b600083015167ffffffffffffffff8111156200047b57600080fd5b62000489858286016200041f565b925050602083015167ffffffffffffffff811115620004a757600080fd5b620004b5858286016200041f565b9150509250929050565b6000620004ce600c83620005b8565b91507f7a65726f206164647265737300000000000000000000000000000000000000006000830152602082019050919050565b6200050c816200081f565b82525050565b600060208201905081810360008301526200052d81620004bf565b9050919050565b60006020820190506200054b600083018462000501565b92915050565b6000604051905081810181811067ffffffffffffffff821117156200057b576200057a62000900565b5b8060405250919050565b600067ffffffffffffffff821115620005a357620005a262000900565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620005d6826200081f565b9150620005e3836200081f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200061b576200061a620008a2565b5b828201905092915050565b6000808291508390505b6001851115620006785780860481111562000650576200064f620008a2565b5b6001851615620006605780820291505b808102905062000670856200092f565b945062000630565b94509492505050565b60006200068e826200081f565b91506200069b8362000829565b9250620006ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006d2565b905092915050565b600082620006e45760019050620007b7565b81620006f45760009050620007b7565b81600181146200070d576002811462000718576200074e565b6001915050620007b7565b60ff8411156200072d576200072c620008a2565b5b8360020a915084821115620007475762000746620008a2565b5b50620007b7565b5060208310610133831016604e8410600b8410161715620007885782820a905083811115620007825762000781620008a2565b5b620007b7565b62000797848484600162000626565b92509050818404811115620007b157620007b0620008a2565b5b81810290505b9392505050565b6000620007cb826200081f565b9150620007d8836200081f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008145762000813620008a2565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b60005b838110156200085657808201518184015260208101905062000839565b8381111562000866576000848401525b50505050565b600060028204905060018216806200088557607f821691505b602082108114156200089c576200089b620008d1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160011c9050919050565b612af3806200094c6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146104c1578063f2fde38b146104f1578063f3f367561461050d578063fae36986146105175761018e565b8063a457c2d714610431578063a9059cbb14610461578063c607cde7146104915761018e565b806370a0823114610381578063715018a6146103b157806379cc6790146103bb5780638368909c146103d75780638da5cb5b146103f557806395d89b41146104135761018e565b8063395093511161014b57806342966c681161012557806342966c68146102f9578063513da948146103155780636397f7a2146103335780636ba4c138146103515761018e565b806339509351146102695780633d3728b51461029957806340908298146102c95761018e565b806306fdde0314610193578063095ea7b3146101b15780630b102d1a146101e157806318160ddd146101fd57806323b872dd1461021b578063313ce5671461024b575b600080fd5b61019b610533565b6040516101a89190612582565b60405180910390f35b6101cb60048036038101906101c69190612162565b6105c5565b6040516101d89190612567565b60405180910390f35b6101fb60048036038101906101f69190612049565b6105e3565b005b6102056106fe565b60405161021291906126e4565b60405180910390f35b610235600480360381019061023091906120d7565b610708565b6040516102429190612567565b60405180910390f35b610253610852565b60405161026091906126ff565b60405180910390f35b610283600480360381019061027e9190612162565b61085b565b6040516102909190612567565b60405180910390f35b6102b360048036038101906102ae91906121df565b610907565b6040516102c091906126e4565b60405180910390f35b6102e360048036038101906102de9190612049565b610a31565b6040516102f09190612567565b60405180910390f35b610313600480360381019061030e91906121df565b610a51565b005b61031d610a65565b60405161032a91906126e4565b60405180910390f35b61033b610a6b565b60405161034891906126e4565b60405180910390f35b61036b6004803603810190610366919061219e565b610a78565b60405161037891906126e4565b60405180910390f35b61039b60048036038101906103969190612049565b610eed565b6040516103a891906126e4565b60405180910390f35b6103b9610f36565b005b6103d560048036038101906103d09190612162565b610fbe565b005b6103df611039565b6040516103ec91906126e4565b60405180910390f35b6103fd61103f565b60405161040a919061254c565b60405180910390f35b61041b611068565b6040516104289190612582565b60405180910390f35b61044b60048036038101906104469190612162565b6110fa565b6040516104589190612567565b60405180910390f35b61047b60048036038101906104769190612162565b6111e5565b6040516104889190612567565b60405180910390f35b6104ab60048036038101906104a691906121df565b611203565b6040516104b891906126e4565b60405180910390f35b6104db60048036038101906104d6919061209b565b611382565b6040516104e891906126e4565b60405180910390f35b61050b60048036038101906105069190612049565b611409565b005b610515611501565b005b610531600480360381019061052c9190612126565b6115bc565b005b60606009805461054290612930565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90612930565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b5050505050905090565b60006105d96105d2611693565b848461169b565b6001905092915050565b6105eb611693565b73ffffffffffffffffffffffffffffffffffffffff1661060961103f565b73ffffffffffffffffffffffffffffffffffffffff161461065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065690612644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ba57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b6000610715848484611866565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610847576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107b1611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082890612664565b60405180910390fd5b6108458561083d611693565b85840361169b565b505b600190509392505050565b60006012905090565b60006108fd610868611693565b848460076000610876611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108f89190612793565b61169b565b6001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161097b91906126e4565b60206040518083038186803b15801561099357600080fd5b505afa1580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb9190612072565b73ffffffffffffffffffffffffffffffffffffffff1614156109ec57600080fd5b60008060046000858152602001908152602001600020541415610a1157600154610a26565b60046000848152602001908152602001600020545b905080915050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b610a62610a5c611693565b82611aea565b50565b60015481565b6801a055690d9db8000081565b6000806001541415610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906126a4565b60405180910390fd5b6000805b8351811015610e9557600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612208565b848281518110610ba5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511115610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be5906126c4565b60405180910390fd5b6000600182610bfd9190612793565b90505b8451811015610cdf57848181518110610c42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906125e4565b60405180910390fd5b8080610cd790612962565b915050610c00565b506000848281518110610d1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d9791906126e4565b60206040518083038186803b158015610daf57600080fd5b505afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190612072565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906126c4565b60405180910390fd5b6000610e4882611203565b905060008114610e8057610e658185611cc390919063ffffffff16565b93504260046000848152602001908152602001600020819055505b50508080610e8d90612962565b915050610ac3565b506000811415610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906125c4565b60405180910390fd5b610ee43382611cd9565b80915050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f3e611693565b73ffffffffffffffffffffffffffffffffffffffff16610f5c61103f565b73ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990612644565b60405180910390fd5b610fbc6000611e3a565b565b6000610fd183610fcc611693565b611382565b905081811015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90612664565b60405180910390fd5b61102a83611022611693565b84840361169b565b6110348383611aea565b505050565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461107790612930565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390612930565b80156110f05780601f106110c5576101008083540402835291602001916110f0565b820191906000526020600020905b8154815290600101906020018083116110d357829003601f168201915b5050505050905090565b60008060076000611109611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90612624565b60405180910390fd5b6111da6111d1611693565b8585840361169b565b600191505092915050565b60006111f96111f2611693565b8484611866565b6001905092915050565b600080600154141561121457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161128791906126e4565b60206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190612072565b73ffffffffffffffffffffffffffffffffffffffff1614156112f857600080fd5b600061130383610907565b9050600254811061131857600091505061137d565b6000600254421061132b5760025461132d565b425b90506000611374620151806113666801a055690d9db800006113588787611efe90919063ffffffff16565b611f1490919063ffffffff16565b611f2a90919063ffffffff16565b90508093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611411611693565b73ffffffffffffffffffffffffffffffffffffffff1661142f61103f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906125a4565b60405180910390fd5b6114fe81611e3a565b50565b611509611693565b73ffffffffffffffffffffffffffffffffffffffff1661152761103f565b73ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612644565b60405180910390fd5b60006001541461158c57600080fd5b60006002541461159b57600080fd5b426001819055506312cc03006001546115b49190612793565b600281905550565b6115c4611693565b73ffffffffffffffffffffffffffffffffffffffff166115e261103f565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90612644565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290612684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290612684565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161185991906126e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90612684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90612684565b60405180910390fd5b611951838383611f40565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90612604565b60405180910390fd5b818103600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6d9190612793565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad191906126e4565b60405180910390a3611ae4848484611f45565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190612684565b60405180910390fd5b611b6682600083611f40565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490612604565b60405180910390fd5b818103600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160086000828254611c459190612874565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611caa91906126e4565b60405180910390a3611cbe83600084611f45565b505050565b60008183611cd19190612793565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090612684565b60405180910390fd5b611d5560008383611f40565b8060086000828254611d679190612793565b9250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dbd9190612793565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e2291906126e4565b60405180910390a3611e3660008383611f45565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f0c9190612874565b905092915050565b60008183611f22919061281a565b905092915050565b60008183611f3891906127e9565b905092915050565b505050565b505050565b6000611f5d611f588461274b565b61271a565b90508083825260208201905082856020860282011115611f7c57600080fd5b60005b85811015611fac5781611f92888261201f565b845260208401935060208301925050600181019050611f7f565b5050509392505050565b600081359050611fc581612a78565b92915050565b600081519050611fda81612a78565b92915050565b600082601f830112611ff157600080fd5b8135612001848260208601611f4a565b91505092915050565b60008135905061201981612a8f565b92915050565b60008135905061202e81612aa6565b92915050565b60008151905061204381612aa6565b92915050565b60006020828403121561205b57600080fd5b600061206984828501611fb6565b91505092915050565b60006020828403121561208457600080fd5b600061209284828501611fcb565b91505092915050565b600080604083850312156120ae57600080fd5b60006120bc85828601611fb6565b92505060206120cd85828601611fb6565b9150509250929050565b6000806000606084860312156120ec57600080fd5b60006120fa86828701611fb6565b935050602061210b86828701611fb6565b925050604061211c8682870161201f565b9150509250925092565b6000806040838503121561213957600080fd5b600061214785828601611fb6565b92505060206121588582860161200a565b9150509250929050565b6000806040838503121561217557600080fd5b600061218385828601611fb6565b92505060206121948582860161201f565b9150509250929050565b6000602082840312156121b057600080fd5b600082013567ffffffffffffffff8111156121ca57600080fd5b6121d684828501611fe0565b91505092915050565b6000602082840312156121f157600080fd5b60006121ff8482850161201f565b91505092915050565b60006020828403121561221a57600080fd5b600061222884828501612034565b91505092915050565b61223a816128a8565b82525050565b612249816128ba565b82525050565b600061225a82612777565b6122648185612782565b93506122748185602086016128fd565b61227d81612a67565b840191505092915050565b6000612295602683612782565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122fb600483612782565b91507f7a65726f000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061233b600983612782565b91507f6475706c696361746500000000000000000000000000000000000000000000006000830152602082019050919050565b600061237b600f83612782565b91507f657863656564732062616c616e636500000000000000000000000000000000006000830152602082019050919050565b60006123bb600a83612782565b91507f62656c6f77207a65726f000000000000000000000000000000000000000000006000830152602082019050919050565b60006123fb602083612782565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061243b601183612782565b91507f6578636565647320616c6c6f77616e63650000000000000000000000000000006000830152602082019050919050565b600061247b600c83612782565b91507f7a65726f206164647265737300000000000000000000000000000000000000006000830152602082019050919050565b60006124bb600783612782565b91507f6e6f7420796574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006124fb600783612782565b91507f696e76616c6964000000000000000000000000000000000000000000000000006000830152602082019050919050565b612537816128e6565b82525050565b612546816128f0565b82525050565b60006020820190506125616000830184612231565b92915050565b600060208201905061257c6000830184612240565b92915050565b6000602082019050818103600083015261259c818461224f565b905092915050565b600060208201905081810360008301526125bd81612288565b9050919050565b600060208201905081810360008301526125dd816122ee565b9050919050565b600060208201905081810360008301526125fd8161232e565b9050919050565b6000602082019050818103600083015261261d8161236e565b9050919050565b6000602082019050818103600083015261263d816123ae565b9050919050565b6000602082019050818103600083015261265d816123ee565b9050919050565b6000602082019050818103600083015261267d8161242e565b9050919050565b6000602082019050818103600083015261269d8161246e565b9050919050565b600060208201905081810360008301526126bd816124ae565b9050919050565b600060208201905081810360008301526126dd816124ee565b9050919050565b60006020820190506126f9600083018461252e565b92915050565b6000602082019050612714600083018461253d565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561274157612740612a38565b5b8060405250919050565b600067ffffffffffffffff82111561276657612765612a38565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600061279e826128e6565b91506127a9836128e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127de576127dd6129ab565b5b828201905092915050565b60006127f4826128e6565b91506127ff836128e6565b92508261280f5761280e6129da565b5b828204905092915050565b6000612825826128e6565b9150612830836128e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612869576128686129ab565b5b828202905092915050565b600061287f826128e6565b915061288a836128e6565b92508282101561289d5761289c6129ab565b5b828203905092915050565b60006128b3826128c6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561291b578082015181840152602081019050612900565b8381111561292a576000848401525b50505050565b6000600282049050600182168061294857607f821691505b6020821081141561295c5761295b612a09565b5b50919050565b600061296d826128e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129a05761299f6129ab565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612a81816128a8565b8114612a8c57600080fd5b50565b612a98816128ba565b8114612aa357600080fd5b50565b612aaf816128e6565b8114612aba57600080fd5b5056fea264697066735822122002446a6ccc509ceff1c4cbf62b2257102f21cde6bfdcb03f3913c23b9acf862664736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044645524e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044645524e00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e146104c1578063f2fde38b146104f1578063f3f367561461050d578063fae36986146105175761018e565b8063a457c2d714610431578063a9059cbb14610461578063c607cde7146104915761018e565b806370a0823114610381578063715018a6146103b157806379cc6790146103bb5780638368909c146103d75780638da5cb5b146103f557806395d89b41146104135761018e565b8063395093511161014b57806342966c681161012557806342966c68146102f9578063513da948146103155780636397f7a2146103335780636ba4c138146103515761018e565b806339509351146102695780633d3728b51461029957806340908298146102c95761018e565b806306fdde0314610193578063095ea7b3146101b15780630b102d1a146101e157806318160ddd146101fd57806323b872dd1461021b578063313ce5671461024b575b600080fd5b61019b610533565b6040516101a89190612582565b60405180910390f35b6101cb60048036038101906101c69190612162565b6105c5565b6040516101d89190612567565b60405180910390f35b6101fb60048036038101906101f69190612049565b6105e3565b005b6102056106fe565b60405161021291906126e4565b60405180910390f35b610235600480360381019061023091906120d7565b610708565b6040516102429190612567565b60405180910390f35b610253610852565b60405161026091906126ff565b60405180910390f35b610283600480360381019061027e9190612162565b61085b565b6040516102909190612567565b60405180910390f35b6102b360048036038101906102ae91906121df565b610907565b6040516102c091906126e4565b60405180910390f35b6102e360048036038101906102de9190612049565b610a31565b6040516102f09190612567565b60405180910390f35b610313600480360381019061030e91906121df565b610a51565b005b61031d610a65565b60405161032a91906126e4565b60405180910390f35b61033b610a6b565b60405161034891906126e4565b60405180910390f35b61036b6004803603810190610366919061219e565b610a78565b60405161037891906126e4565b60405180910390f35b61039b60048036038101906103969190612049565b610eed565b6040516103a891906126e4565b60405180910390f35b6103b9610f36565b005b6103d560048036038101906103d09190612162565b610fbe565b005b6103df611039565b6040516103ec91906126e4565b60405180910390f35b6103fd61103f565b60405161040a919061254c565b60405180910390f35b61041b611068565b6040516104289190612582565b60405180910390f35b61044b60048036038101906104469190612162565b6110fa565b6040516104589190612567565b60405180910390f35b61047b60048036038101906104769190612162565b6111e5565b6040516104889190612567565b60405180910390f35b6104ab60048036038101906104a691906121df565b611203565b6040516104b891906126e4565b60405180910390f35b6104db60048036038101906104d6919061209b565b611382565b6040516104e891906126e4565b60405180910390f35b61050b60048036038101906105069190612049565b611409565b005b610515611501565b005b610531600480360381019061052c9190612126565b6115bc565b005b60606009805461054290612930565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90612930565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b5050505050905090565b60006105d96105d2611693565b848461169b565b6001905092915050565b6105eb611693565b73ffffffffffffffffffffffffffffffffffffffff1661060961103f565b73ffffffffffffffffffffffffffffffffffffffff161461065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065690612644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ba57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b6000610715848484611866565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610847576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107b1611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082890612664565b60405180910390fd5b6108458561083d611693565b85840361169b565b505b600190509392505050565b60006012905090565b60006108fd610868611693565b848460076000610876611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108f89190612793565b61169b565b6001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161097b91906126e4565b60206040518083038186803b15801561099357600080fd5b505afa1580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb9190612072565b73ffffffffffffffffffffffffffffffffffffffff1614156109ec57600080fd5b60008060046000858152602001908152602001600020541415610a1157600154610a26565b60046000848152602001908152602001600020545b905080915050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b610a62610a5c611693565b82611aea565b50565b60015481565b6801a055690d9db8000081565b6000806001541415610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906126a4565b60405180910390fd5b6000805b8351811015610e9557600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612208565b848281518110610ba5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511115610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be5906126c4565b60405180910390fd5b6000600182610bfd9190612793565b90505b8451811015610cdf57848181518110610c42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906125e4565b60405180910390fd5b8080610cd790612962565b915050610c00565b506000848281518110610d1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610d9791906126e4565b60206040518083038186803b158015610daf57600080fd5b505afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190612072565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906126c4565b60405180910390fd5b6000610e4882611203565b905060008114610e8057610e658185611cc390919063ffffffff16565b93504260046000848152602001908152602001600020819055505b50508080610e8d90612962565b915050610ac3565b506000811415610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906125c4565b60405180910390fd5b610ee43382611cd9565b80915050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f3e611693565b73ffffffffffffffffffffffffffffffffffffffff16610f5c61103f565b73ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990612644565b60405180910390fd5b610fbc6000611e3a565b565b6000610fd183610fcc611693565b611382565b905081811015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90612664565b60405180910390fd5b61102a83611022611693565b84840361169b565b6110348383611aea565b505050565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461107790612930565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390612930565b80156110f05780601f106110c5576101008083540402835291602001916110f0565b820191906000526020600020905b8154815290600101906020018083116110d357829003601f168201915b5050505050905090565b60008060076000611109611693565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90612624565b60405180910390fd5b6111da6111d1611693565b8585840361169b565b600191505092915050565b60006111f96111f2611693565b8484611866565b6001905092915050565b600080600154141561121457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161128791906126e4565b60206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190612072565b73ffffffffffffffffffffffffffffffffffffffff1614156112f857600080fd5b600061130383610907565b9050600254811061131857600091505061137d565b6000600254421061132b5760025461132d565b425b90506000611374620151806113666801a055690d9db800006113588787611efe90919063ffffffff16565b611f1490919063ffffffff16565b611f2a90919063ffffffff16565b90508093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611411611693565b73ffffffffffffffffffffffffffffffffffffffff1661142f61103f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906125a4565b60405180910390fd5b6114fe81611e3a565b50565b611509611693565b73ffffffffffffffffffffffffffffffffffffffff1661152761103f565b73ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612644565b60405180910390fd5b60006001541461158c57600080fd5b60006002541461159b57600080fd5b426001819055506312cc03006001546115b49190612793565b600281905550565b6115c4611693565b73ffffffffffffffffffffffffffffffffffffffff166115e261103f565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90612644565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290612684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290612684565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161185991906126e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90612684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90612684565b60405180910390fd5b611951838383611f40565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90612604565b60405180910390fd5b818103600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6d9190612793565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad191906126e4565b60405180910390a3611ae4848484611f45565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190612684565b60405180910390fd5b611b6682600083611f40565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490612604565b60405180910390fd5b818103600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160086000828254611c459190612874565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611caa91906126e4565b60405180910390a3611cbe83600084611f45565b505050565b60008183611cd19190612793565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090612684565b60405180910390fd5b611d5560008383611f40565b8060086000828254611d679190612793565b9250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dbd9190612793565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e2291906126e4565b60405180910390a3611e3660008383611f45565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f0c9190612874565b905092915050565b60008183611f22919061281a565b905092915050565b60008183611f3891906127e9565b905092915050565b505050565b505050565b6000611f5d611f588461274b565b61271a565b90508083825260208201905082856020860282011115611f7c57600080fd5b60005b85811015611fac5781611f92888261201f565b845260208401935060208301925050600181019050611f7f565b5050509392505050565b600081359050611fc581612a78565b92915050565b600081519050611fda81612a78565b92915050565b600082601f830112611ff157600080fd5b8135612001848260208601611f4a565b91505092915050565b60008135905061201981612a8f565b92915050565b60008135905061202e81612aa6565b92915050565b60008151905061204381612aa6565b92915050565b60006020828403121561205b57600080fd5b600061206984828501611fb6565b91505092915050565b60006020828403121561208457600080fd5b600061209284828501611fcb565b91505092915050565b600080604083850312156120ae57600080fd5b60006120bc85828601611fb6565b92505060206120cd85828601611fb6565b9150509250929050565b6000806000606084860312156120ec57600080fd5b60006120fa86828701611fb6565b935050602061210b86828701611fb6565b925050604061211c8682870161201f565b9150509250925092565b6000806040838503121561213957600080fd5b600061214785828601611fb6565b92505060206121588582860161200a565b9150509250929050565b6000806040838503121561217557600080fd5b600061218385828601611fb6565b92505060206121948582860161201f565b9150509250929050565b6000602082840312156121b057600080fd5b600082013567ffffffffffffffff8111156121ca57600080fd5b6121d684828501611fe0565b91505092915050565b6000602082840312156121f157600080fd5b60006121ff8482850161201f565b91505092915050565b60006020828403121561221a57600080fd5b600061222884828501612034565b91505092915050565b61223a816128a8565b82525050565b612249816128ba565b82525050565b600061225a82612777565b6122648185612782565b93506122748185602086016128fd565b61227d81612a67565b840191505092915050565b6000612295602683612782565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122fb600483612782565b91507f7a65726f000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061233b600983612782565b91507f6475706c696361746500000000000000000000000000000000000000000000006000830152602082019050919050565b600061237b600f83612782565b91507f657863656564732062616c616e636500000000000000000000000000000000006000830152602082019050919050565b60006123bb600a83612782565b91507f62656c6f77207a65726f000000000000000000000000000000000000000000006000830152602082019050919050565b60006123fb602083612782565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061243b601183612782565b91507f6578636565647320616c6c6f77616e63650000000000000000000000000000006000830152602082019050919050565b600061247b600c83612782565b91507f7a65726f206164647265737300000000000000000000000000000000000000006000830152602082019050919050565b60006124bb600783612782565b91507f6e6f7420796574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006124fb600783612782565b91507f696e76616c6964000000000000000000000000000000000000000000000000006000830152602082019050919050565b612537816128e6565b82525050565b612546816128f0565b82525050565b60006020820190506125616000830184612231565b92915050565b600060208201905061257c6000830184612240565b92915050565b6000602082019050818103600083015261259c818461224f565b905092915050565b600060208201905081810360008301526125bd81612288565b9050919050565b600060208201905081810360008301526125dd816122ee565b9050919050565b600060208201905081810360008301526125fd8161232e565b9050919050565b6000602082019050818103600083015261261d8161236e565b9050919050565b6000602082019050818103600083015261263d816123ae565b9050919050565b6000602082019050818103600083015261265d816123ee565b9050919050565b6000602082019050818103600083015261267d8161242e565b9050919050565b6000602082019050818103600083015261269d8161246e565b9050919050565b600060208201905081810360008301526126bd816124ae565b9050919050565b600060208201905081810360008301526126dd816124ee565b9050919050565b60006020820190506126f9600083018461252e565b92915050565b6000602082019050612714600083018461253d565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561274157612740612a38565b5b8060405250919050565b600067ffffffffffffffff82111561276657612765612a38565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600061279e826128e6565b91506127a9836128e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127de576127dd6129ab565b5b828201905092915050565b60006127f4826128e6565b91506127ff836128e6565b92508261280f5761280e6129da565b5b828204905092915050565b6000612825826128e6565b9150612830836128e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612869576128686129ab565b5b828202905092915050565b600061287f826128e6565b915061288a836128e6565b92508282101561289d5761289c6129ab565b5b828203905092915050565b60006128b3826128c6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561291b578082015181840152602081019050612900565b8381111561292a576000848401525b50505050565b6000600282049050600182168061294857607f821691505b6020821081141561295c5761295b612a09565b5b50919050565b600061296d826128e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129a05761299f6129ab565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612a81816128a8565b8114612a8c57600080fd5b50565b612a98816128ba565b8114612aa357600080fd5b50565b612aaf816128e6565b8114612aba57600080fd5b5056fea264697066735822122002446a6ccc509ceff1c4cbf62b2257102f21cde6bfdcb03f3913c23b9acf862664736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044645524e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044645524e00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenName (string): FERN
Arg [1] : tokenSymbol (string): FERN

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4645524e00000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4645524e00000000000000000000000000000000000000000000000000000000


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.