Token Fruit Token Polygon

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
410,000 FRUIT

Holders:
16 addresses

Transfers:
-

Contract:
0x0e05858bb158038f418ff3609d5a7b72c26e71180x0E05858bb158038f418Ff3609d5A7b72c26e7118

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FruitToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-06
*/

// SPDX-License-Identifier: MIT
/**
 * ver 1.09.06
*/

pragma solidity 0.8.4;

interface IBEP20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);
  function totalBurned() external view returns (uint256);

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

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

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

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

/*
 * @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 GSN 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 {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance. 

  function _msgSender() internal view returns (address payable) {
    return payable(msg.sender);
  }

  function _msgData() internal view returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @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) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @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 sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @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) {
    // 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 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts 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) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _admin;
    address private _partner;

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () {
    address msgSender = _msgSender();
    _owner = msgSender;
        _admin = address(0x39a73DB5A197d9229715Ed15EF2827adde1B0838);
        _partner = address(0x01d06F63518eA24808Da5A4E0997C34aF90495b4);
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view 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");
    _;
  }

    modifier onlyAdmin() {
        require(_owner == msg.sender || _admin == msg.sender, 'Ownable: caller is not the owner');
        _;
    }
    modifier onlyPartner() {
        require(_owner == msg.sender || _admin == msg.sender || _partner == msg.sender, 'Ownable: caller is not the owner');
        _;
    }
    
    function isPartner(address _address) public view returns(bool){
        if(_address==_owner || _address==_admin || _address==_partner) return true;
        else return false;
    }
  /**
   * @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 onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = 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 onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
    function transferOwnership_admin(address newOwner) public onlyOwner {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_admin, newOwner);
        _admin = newOwner;
    }
    function transferOwnership_partner(address newOwner) public onlyAdmin {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_partner, newOwner);
        _partner = newOwner;
    }
}

contract FruitToken is Context, IBEP20, Ownable {
  using SafeMath for uint256;

  mapping (address => uint256) private _balances;

  mapping (address => mapping (address => uint256)) private _allowances;

  uint256 private _totalSupply;
  uint256 private _totalBurned;
  uint8 public _decimals;
  string public _symbol;
  string public _name;

  constructor() {
    _name = "Fruit Token Polygon";
    _symbol = "FRUIT";
    _decimals = 18;
    _totalSupply = 0;
    _totalBurned = 0;
    _balances[msg.sender] = _totalSupply;

    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view override returns (address){
    return owner();
  }

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view override returns (uint8) {
    return _decimals;
  }

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view override returns (string memory) {
    return _symbol;
  }

  /**
  * @dev Returns the token name.
  */
  function name() external view override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {BEP20-totalSupply}.
   */
  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }
  function totalBurned() external view override returns (uint256) {
    return _totalBurned;
  }

  /**
   * @dev See {BEP20-balanceOf}.
   */
  function balanceOf(address account) external view override returns (uint256) {
    return _balances[account];
  }

  /**
   * @dev See {BEP20-transfer}.
   *
   * Requirements:
   *
   * - `recipient` cannot be the zero address.
   * - the caller must have a balance of at least `amount`.
   */
  function transfer(address recipient, uint256 amount) external override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  /**
   * @dev See {BEP20-allowance}.
   */
  function allowance(address owner, address spender) external view override returns (uint256) {
    return _allowances[owner][spender];
  }

  /**
   * @dev See {BEP20-approve}.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function approve(address spender, uint256 amount) external override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  /**
   * @dev See {BEP20-transferFrom}.
   *
   * Emits an {Approval} event indicating the updated allowance. This is not
   * required by the EIP. See the note at the beginning of {BEP20};
   *
   * Requirements:
   * - `sender` and `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   * - the caller must have allowance for `sender`'s tokens of at least
   * `amount`.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));
    return true;
  }

  /**
   * @dev Atomically increases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  /**
   * @dev Atomically decreases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   * - `spender` must have allowance for the caller of at least
   * `subtractedValue`.
   */
  function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));
    return true;
  }

  // @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef).
  function mint(address _to, uint256 _amount) public onlyPartner {
    _mint(_to, _amount); 
  }

  /**
   * @dev Burn `amount` tokens and decreasing the total supply.
   */
  function burn(uint256 amount) public returns (bool) {
    _burn(_msgSender(), amount);
    return true;
  }

  /**
   * @dev Moves tokens `amount` from `sender` to `recipient`.
   *
   * This is internal function is equivalent to {transfer}, and can be used to
   * e.g. implement automatic token fees, slashing mechanisms, etc.
   *
   * Emits a {Transfer} event.
   *
   * Requirements:
   *
   * - `sender` cannot be the zero address.
   * - `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   */
  function _transfer(address sender, address recipient, uint256 amount) internal {
    require(sender != address(0), "BEP20: transfer from the zero address");
    require(recipient != address(0), "BEP20: transfer to the zero address");

    _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance");
    _balances[recipient] = _balances[recipient].add(amount);
    emit Transfer(sender, recipient, amount);
  }

  /** @dev Creates `amount` tokens and assigns them to `account`, increasing
   * the total supply.
   *
   * Emits a {Transfer} event with `from` set to the zero address.
   *
   * Requirements
   *
   * - `to` cannot be the zero address.
   */
  function _mint(address account, uint256 amount) internal {
    require(account != address(0), "BEP20: mint to the zero address");

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }

  /**
   * @dev Destroys `amount` tokens from `account`, reducing the
   * total supply.
   *
   * Emits a {Transfer} event with `to` set to the zero address.
   *
   * Requirements
   *
   * - `account` cannot be the zero address.
   * - `account` must have at least `amount` tokens.
   */
  function _burn(address account, uint256 amount) internal {
    require(account != address(0), "BEP20: burn from the zero address");

    _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance");
    _totalBurned = _totalBurned.add(amount);
    emit Transfer(account, address(0), amount);
  }

  /**
   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
   *
   * This is internal function is equivalent to `approve`, and can be used to
   * e.g. set automatic allowances for certain subsystems, etc.
   *
   * Emits an {Approval} event.
   *
   * Requirements:
   *
   * - `owner` cannot be the zero address.
   * - `spender` cannot be the zero address.
   */
  function _approve(address owner, address spender, uint256 amount) internal {
    require(owner != address(0), "BEP20: approve from the zero address");
    require(spender != address(0), "BEP20: approve to the zero address");

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

  /**
   * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
   * from the caller's allowance.
   *
   * See {_burn} and {_approve}.
   */
  function _burnFrom(address account, uint256 amount) internal {
    _burn(account, amount);
    _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance"));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"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":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":[{"internalType":"bool","name":"","type":"bool"}],"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":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"_address","type":"address"}],"name":"isPartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership_admin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership_partner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50600033600080546001600160a01b0383166001600160a01b0319918216811783556001805483167339a73db5a197d9229715ed15ef2827adde1b0838179055600280549092167301d06f63518ea24808da5a4e0997c34af90495b417909155604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805180820190915260138082527f467275697420546f6b656e20506f6c79676f6e000000000000000000000000006020909201918252620000e49160099162000180565b5060408051808201909152600580825264119495525560da1b6020909201918252620001139160089162000180565b506007805460ff191660121790556000600581905560068190553380825260036020526040808320839055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001729083815260200190565b60405180910390a362000263565b8280546200018e9062000226565b90600052602060002090601f016020900481019282620001b25760008555620001fd565b82601f10620001cd57805160ff1916838001178555620001fd565b82800160010185558215620001fd579182015b82811115620001fd578251825591602001919060010190620001e0565b506200020b9291506200020f565b5090565b5b808211156200020b576000815560010162000210565b600181811c908216806200023b57607f821691505b602082108114156200025d57634e487b7160e01b600052602260045260246000fd5b50919050565b61111b80620002736000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063893d20e8116100c3578063b09f12661161007c578063b09f1266146102df578063d28d8852146102e7578063d89135cd146102ef578063dd62ed3e146102f7578063de71d28414610330578063f2fde38b1461034357600080fd5b8063893d20e8146102685780638c0f9aac1461028d5780638da5cb5b146102a057806395d89b41146102b1578063a457c2d7146102b9578063a9059cbb146102cc57600080fd5b8063395093511161011557806339509351146101e957806340c10f19146101fc57806342966c68146102115780636a81a0931461022457806370a0823114610237578063715018a61461026057600080fd5b806306fdde031461015d578063095ea7b31461017b57806318160ddd1461019e57806323b872dd146101b0578063313ce567146101c357806332424aa3146101dc575b600080fd5b610165610356565b6040516101729190610ee2565b60405180910390f35b61018e610189366004610ea1565b6103e8565b6040519015158152602001610172565b6005545b604051908152602001610172565b61018e6101be366004610e66565b6103fe565b60075460ff165b60405160ff9091168152602001610172565b6007546101ca9060ff1681565b61018e6101f7366004610ea1565b610467565b61020f61020a366004610ea1565b61049d565b005b61018e61021f366004610eca565b610508565b61020f610232366004610e1a565b61051c565b6101a2610245366004610e1a565b6001600160a01b031660009081526003602052604090205490565b61020f6105cb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610172565b61018e61029b366004610e1a565b61062d565b6000546001600160a01b0316610275565b610165610689565b61018e6102c7366004610ea1565b610698565b61018e6102da366004610ea1565b6106e7565b6101656106f4565b610165610782565b6006546101a2565b6101a2610305366004610e34565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61020f61033e366004610e1a565b61078f565b61020f610351366004610e1a565b610829565b60606009805461036590610fdf565b80601f016020809104026020016040519081016040528092919081815260200182805461039190610fdf565b80156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f533848461085f565b50600192915050565b600061040b848484610984565b61045d843361045885604051806060016040528060288152602001611031602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190610b0a565b61085f565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916103f59185906104589086610b44565b6000546001600160a01b03163314806104c057506001546001600160a01b031633145b806104d557506002546001600160a01b031633145b6104fa5760405162461bcd60e51b81526004016104f190610f7b565b60405180910390fd5b6105048282610baa565b5050565b60006105143383610c90565b506001919050565b6000546001600160a01b031633148061053f57506001546001600160a01b031633145b61055b5760405162461bcd60e51b81526004016104f190610f7b565b6001600160a01b0381166105815760405162461bcd60e51b81526004016104f190610f35565b6002546040516001600160a01b0380841692169060008051602061105983398151915290600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105f55760405162461bcd60e51b81526004016104f190610f7b565b600080546040516001600160a01b0390911690600080516020611059833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b038381169116148061065757506001546001600160a01b038381169116145b8061066f57506002546001600160a01b038381169116145b1561067c57506001919050565b506000919050565b919050565b60606008805461036590610fdf565b60006103f533846104588560405180606001604052806025815260200161109f602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190610b0a565b60006103f5338484610984565b6008805461070190610fdf565b80601f016020809104026020016040519081016040528092919081815260200182805461072d90610fdf565b801561077a5780601f1061074f5761010080835404028352916020019161077a565b820191906000526020600020905b81548152906001019060200180831161075d57829003601f168201915b505050505081565b6009805461070190610fdf565b6000546001600160a01b031633146107b95760405162461bcd60e51b81526004016104f190610f7b565b6001600160a01b0381166107df5760405162461bcd60e51b81526004016104f190610f35565b6001546040516001600160a01b0380841692169060008051602061105983398151915290600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108535760405162461bcd60e51b81526004016104f190610f7b565b61085c81610d94565b50565b6001600160a01b0383166108c15760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104f1565b6001600160a01b0382166109225760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104f1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166109e85760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104f1565b6001600160a01b038216610a4a5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104f1565b610a8781604051806060016040528060268152602001611079602691396001600160a01b0386166000908152600360205260409020549190610b0a565b6001600160a01b038085166000908152600360205260408082209390935590841681522054610ab69082610b44565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109779085815260200190565b60008184841115610b2e5760405162461bcd60e51b81526004016104f19190610ee2565b506000610b3b8486610fc8565b95945050505050565b600080610b518385610fb0565b905083811015610ba35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104f1565b9392505050565b6001600160a01b038216610c005760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104f1565b600554610c0d9082610b44565b6005556001600160a01b038216600090815260036020526040902054610c339082610b44565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c849085815260200190565b60405180910390a35050565b6001600160a01b038216610cf05760405162461bcd60e51b815260206004820152602160248201527f42455032303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104f1565b610d2d816040518060600160405280602281526020016110c4602291396001600160a01b0385166000908152600360205260409020549190610b0a565b6001600160a01b038316600090815260036020526040902055600654610d539082610b44565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c84565b6001600160a01b038116610dba5760405162461bcd60e51b81526004016104f190610f35565b600080546040516001600160a01b038085169392169160008051602061105983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461068457600080fd5b600060208284031215610e2b578081fd5b610ba382610e03565b60008060408385031215610e46578081fd5b610e4f83610e03565b9150610e5d60208401610e03565b90509250929050565b600080600060608486031215610e7a578081fd5b610e8384610e03565b9250610e9160208501610e03565b9150604084013590509250925092565b60008060408385031215610eb3578182fd5b610ebc83610e03565b946020939093013593505050565b600060208284031215610edb578081fd5b5035919050565b6000602080835283518082850152825b81811015610f0e57858101830151858201604001528201610ef2565b81811115610f1f5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115610fc357610fc361101a565b500190565b600082821015610fda57610fda61101a565b500390565b600181811c90821680610ff357607f821691505b6020821081141561101457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122046975fb87d638d2afe49ec2b53a561d0f82449fea52caf773dc5ebe78951064b64736f6c63430008040033

Deployed ByteCode Sourcemap

12628:8114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13734:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14919:153;;;;;;:::i;:::-;;:::i;:::-;;;1848:14:1;;1841:22;1823:41;;1811:2;1796:18;14919:153:0;1778:92:1;13878:96:0;13956:12;;13878:96;;;6133:25:1;;;6121:2;6106:18;13878:96:0;6088:76:1;15517:301:0;;;;;;:::i;:::-;;:::i;13444:88::-;13517:9;;;;13444:88;;;6341:4:1;6329:17;;;6311:36;;6299:2;6284:18;13444:88:0;6266:87:1;12909:22:0;;;;;;;;;16200:200;;;;;;:::i;:::-;;:::i;17224:96::-;;;;;;:::i;:::-;;:::i;:::-;;17405:110;;;;;;:::i;:::-;;:::i;12373:248::-;;;;;;:::i;:::-;;:::i;14128:115::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14219:18:0;14196:7;14219:18;;;:9;:18;;;;;;;14128:115;11428:130;;;:::i;13298:87::-;13350:7;10370:6;-1:-1:-1;;;;;10370:6:0;13298:87;;;-1:-1:-1;;;;;1639:32:1;;;1621:51;;1609:2;1594:18;13298:87:0;1576:102:1;10912:183:0;;;;;;:::i;:::-;;:::i;10309:73::-;10347:7;10370:6;-1:-1:-1;;;;;10370:6:0;10309:73;;13589:92;;;:::i;16872:251::-;;;;;;:::i;:::-;;:::i;14437:159::-;;;;;;:::i;:::-;;:::i;12936:21::-;;;:::i;12962:19::-;;;:::i;13978:96::-;14056:12;;13978:96;;14650:139;;;;;;:::i;:::-;-1:-1:-1;;;;;14756:18:0;;;14733:7;14756:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14650:139;12125:242;;;;;;:::i;:::-;;:::i;11703:103::-;;;;;;:::i;:::-;;:::i;13734:88::-;13782:13;13811:5;13804:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13734:88;:::o;14919:153::-;14996:4;15009:39;3884:10;15032:7;15041:6;15009:8;:39::i;:::-;-1:-1:-1;15062:4:0;14919:153;;;;:::o;15517:301::-;15617:4;15630:36;15640:6;15648:9;15659:6;15630:9;:36::i;:::-;15673:121;15682:6;3884:10;15704:89;15742:6;15704:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15704:19:0;;;;;;:11;:19;;;;;;;;3884:10;15704:33;;;;;;;;;;:37;:89::i;:::-;15673:8;:121::i;:::-;-1:-1:-1;15808:4:0;15517:301;;;;;:::o;16200:200::-;3884:10;16280:4;16325:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16325:34:0;;;;;;;;;;16280:4;;16293:83;;16316:7;;16325:50;;16364:10;16325:38;:50::i;17224:96::-;10773:6;;-1:-1:-1;;;;;10773:6:0;10783:10;10773:20;;:44;;-1:-1:-1;10797:6:0;;-1:-1:-1;;;;;10797:6:0;10807:10;10797:20;10773:44;:70;;;-1:-1:-1;10821:8:0;;-1:-1:-1;;;;;10821:8:0;10833:10;10821:22;10773:70;10765:115;;;;-1:-1:-1;;;10765:115:0;;;;;;;:::i;:::-;;;;;;;;;17294:19:::1;17300:3;17305:7;17294:5;:19::i;:::-;17224:96:::0;;:::o;17405:110::-;17451:4;17464:27;3884:10;17484:6;17464:5;:27::i;:::-;-1:-1:-1;17505:4:0;;17405:110;-1:-1:-1;17405:110:0:o;12373:248::-;10624:6;;-1:-1:-1;;;;;10624:6:0;10634:10;10624:20;;:44;;-1:-1:-1;10648:6:0;;-1:-1:-1;;;;;10648:6:0;10658:10;10648:20;10624:44;10616:89;;;;-1:-1:-1;;;10616:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12462:22:0;::::1;12454:73;;;;-1:-1:-1::0;;;12454:73:0::1;;;;;;;:::i;:::-;12564:8;::::0;12543:40:::1;::::0;-1:-1:-1;;;;;12543:40:0;;::::1;::::0;12564:8:::1;::::0;-1:-1:-1;;;;;;;;;;;12543:40:0;12564:8:::1;::::0;12543:40:::1;12594:8;:19:::0;;-1:-1:-1;;;;;;12594:19:0::1;-1:-1:-1::0;;;;;12594:19:0;;;::::1;::::0;;;::::1;::::0;;12373:248::o;11428:130::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;11523:1:::1;11507:6:::0;;11486:40:::1;::::0;-1:-1:-1;;;;;11507:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;11486:40:0;11523:1;;11486:40:::1;11550:1;11533:19:::0;;-1:-1:-1;;;;;;11533:19:0::1;::::0;;11428:130::o;10912:183::-;10969:4;10998:6;;-1:-1:-1;;;;;10988:16:0;;;10998:6;;10988:16;;:36;;-1:-1:-1;11018:6:0;;-1:-1:-1;;;;;11008:16:0;;;11018:6;;11008:16;10988:36;:58;;;-1:-1:-1;11038:8:0;;-1:-1:-1;;;;;11028:18:0;;;11038:8;;11028:18;10988:58;10985:102;;;-1:-1:-1;11055:4:0;;10912:183;-1:-1:-1;10912:183:0:o;10985:102::-;-1:-1:-1;11082:5:0;;10912:183;-1:-1:-1;10912:183:0:o;10985:102::-;10912:183;;;:::o;13589:92::-;13639:13;13668:7;13661:14;;;;;:::i;16872:251::-;16957:4;16970:129;3884:10;16993:7;17002:96;17041:15;17002:96;;;;;;;;;;;;;;;;;3884:10;17002:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17002:34:0;;;;;;;;;;;;:38;:96::i;14437:159::-;14517:4;14530:42;3884:10;14554:9;14565:6;14530:9;:42::i;12936:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12962:19::-;;;;;;;:::i;12125:242::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12212:22:0;::::1;12204:73;;;;-1:-1:-1::0;;;12204:73:0::1;;;;;;;:::i;:::-;12314:6;::::0;12293:38:::1;::::0;-1:-1:-1;;;;;12293:38:0;;::::1;::::0;12314:6:::1;::::0;-1:-1:-1;;;;;;;;;;;12293:38:0;12314:6:::1;::::0;12293:38:::1;12342:6;:17:::0;;-1:-1:-1;;;;;;12342:17:0::1;-1:-1:-1::0;;;;;12342:17:0;;;::::1;::::0;;;::::1;::::0;;12125:242::o;11703:103::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;11772:28:::1;11791:8;11772:18;:28::i;:::-;11703:103:::0;:::o;20025:320::-;-1:-1:-1;;;;;20115:19:0;;20107:68;;;;-1:-1:-1;;;20107:68:0;;3091:2:1;20107:68:0;;;3073:21:1;3130:2;3110:18;;;3103:30;3169:34;3149:18;;;3142:62;-1:-1:-1;;;3220:18:1;;;3213:34;3264:19;;20107:68:0;3063:226:1;20107:68:0;-1:-1:-1;;;;;20190:21:0;;20182:68;;;;-1:-1:-1;;;20182:68:0;;5786:2:1;20182:68:0;;;5768:21:1;5825:2;5805:18;;;5798:30;5864:34;5844:18;;;5837:62;-1:-1:-1;;;5915:18:1;;;5908:32;5957:19;;20182:68:0;5758:224:1;20182:68:0;-1:-1:-1;;;;;20259:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20307:32;;6133:25:1;;;20307:32:0;;6106:18:1;20307:32:0;;;;;;;;20025:320;;;:::o;17975:449::-;-1:-1:-1;;;;;18069:20:0;;18061:70;;;;-1:-1:-1;;;18061:70:0;;2685:2:1;18061:70:0;;;2667:21:1;2724:2;2704:18;;;2697:30;2763:34;2743:18;;;2736:62;-1:-1:-1;;;2814:18:1;;;2807:35;2859:19;;18061:70:0;2657:227:1;18061:70:0;-1:-1:-1;;;;;18146:23:0;;18138:71;;;;-1:-1:-1;;;18138:71:0;;4980:2:1;18138:71:0;;;4962:21:1;5019:2;4999:18;;;4992:30;5058:34;5038:18;;;5031:62;-1:-1:-1;;;5109:18:1;;;5102:33;5152:19;;18138:71:0;4952:225:1;18138:71:0;18238;18260:6;18238:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18238:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18218:17:0;;;;;;;:9;:17;;;;;;:91;;;;18339:20;;;;;;;:32;;18364:6;18339:24;:32::i;:::-;-1:-1:-1;;;;;18316:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18383:35;;;;;;;;;;18411:6;6133:25:1;;6121:2;6106:18;;6088:76;5768:178:0;5854:7;5886:12;5878:6;;;;5870:29;;;;-1:-1:-1;;;5870:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5906:9:0;5918:5;5922:1;5918;:5;:::i;:::-;5906:17;5768:178;-1:-1:-1;;;;;5768:178:0:o;4941:167::-;4999:7;;5027:5;5031:1;5027;:5;:::i;:::-;5015:17;;5052:1;5047;:6;;5039:46;;;;-1:-1:-1;;;5039:46:0;;3903:2:1;5039:46:0;;;3885:21:1;3942:2;3922:18;;;3915:30;3981:29;3961:18;;;3954:57;4028:18;;5039:46:0;3875:177:1;5039:46:0;5101:1;4941:167;-1:-1:-1;;;4941:167:0:o;18685:290::-;-1:-1:-1;;;;;18757:21:0;;18749:65;;;;-1:-1:-1;;;18749:65:0;;4259:2:1;18749:65:0;;;4241:21:1;4298:2;4278:18;;;4271:30;4337:33;4317:18;;;4310:61;4388:18;;18749:65:0;4231:181:1;18749:65:0;18838:12;;:24;;18855:6;18838:16;:24::i;:::-;18823:12;:39;-1:-1:-1;;;;;18890:18:0;;;;;;:9;:18;;;;;;:30;;18913:6;18890:22;:30::i;:::-;-1:-1:-1;;;;;18869:18:0;;;;;;:9;:18;;;;;;:51;;;;18932:37;;18869:18;;;18932:37;;;;18962:6;6133:25:1;;6121:2;6106:18;;6088:76;18932:37:0;;;;;;;;18685:290;;:::o;19283:330::-;-1:-1:-1;;;;;19355:21:0;;19347:67;;;;-1:-1:-1;;;19347:67:0;;5384:2:1;19347:67:0;;;5366:21:1;5423:2;5403:18;;;5396:30;5462:34;5442:18;;;5435:62;-1:-1:-1;;;5513:18:1;;;5506:31;5554:19;;19347:67:0;5356:223:1;19347:67:0;19444:68;19467:6;19444:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19444:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;19423:18:0;;;;;;:9;:18;;;;;:89;19534:12;;:24;;19551:6;19534:16;:24::i;:::-;19519:12;:39;19570:37;;6133:25:1;;;19596:1:0;;-1:-1:-1;;;;;19570:37:0;;;;;6121:2:1;6106:18;19570:37:0;6088:76:1;11904:215:0;-1:-1:-1;;;;;11974:22:0;;11966:73;;;;-1:-1:-1;;;11966:73:0;;;;;;;:::i;:::-;12072:6;;;12051:38;;-1:-1:-1;;;;;12051:38:0;;;;12072:6;;;-1:-1:-1;;;;;;;;;;;12051:38:0;;12096:6;:17;;-1:-1:-1;;;;;;12096:17:0;-1:-1:-1;;;;;12096:17:0;;;;;;;;;;11904:215::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;1079:6;1087;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:1:o;1280:190::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:2;;;1413:6;1405;1398:22;1360:2;-1:-1:-1;1441:23:1;;1350:120;-1:-1:-1;1350:120:1:o;1875:603::-;1987:4;2016:2;2045;2034:9;2027:21;2077:6;2071:13;2120:6;2115:2;2104:9;2100:18;2093:34;2145:4;2158:140;2172:6;2169:1;2166:13;2158:140;;;2267:14;;;2263:23;;2257:30;2233:17;;;2252:2;2229:26;2222:66;2187:10;;2158:140;;;2316:6;2313:1;2310:13;2307:2;;;2386:4;2381:2;2372:6;2361:9;2357:22;2353:31;2346:45;2307:2;-1:-1:-1;2462:2:1;2441:15;-1:-1:-1;;2437:29:1;2422:45;;;;2469:2;2418:54;;1996:482;-1:-1:-1;;;1996:482:1:o;3294:402::-;3496:2;3478:21;;;3535:2;3515:18;;;3508:30;3574:34;3569:2;3554:18;;3547:62;-1:-1:-1;;;3640:2:1;3625:18;;3618:36;3686:3;3671:19;;3468:228::o;4417:356::-;4619:2;4601:21;;;4638:18;;;4631:30;4697:34;4692:2;4677:18;;4670:62;4764:2;4749:18;;4591:182::o;6358:128::-;6398:3;6429:1;6425:6;6422:1;6419:13;6416:2;;;6435:18;;:::i;:::-;-1:-1:-1;6471:9:1;;6406:80::o;6491:125::-;6531:4;6559:1;6556;6553:8;6550:2;;;6564:18;;:::i;:::-;-1:-1:-1;6601:9:1;;6540:76::o;6621:380::-;6700:1;6696:12;;;;6743;;;6764:2;;6818:4;6810:6;6806:17;6796:27;;6764:2;6871;6863:6;6860:14;6840:18;6837:38;6834:2;;;6917:10;6912:3;6908:20;6905:1;6898:31;6952:4;6949:1;6942:15;6980:4;6977:1;6970:15;6834:2;;6676:325;;;:::o;7006:127::-;7067:10;7062:3;7058:20;7055:1;7048:31;7098:4;7095:1;7088:15;7122:4;7119:1;7112:15

Swarm Source

ipfs://46975fb87d638d2afe49ec2b53a561d0f82449fea52caf773dc5ebe78951064b
Loading