ETH Price: $2,969.13 (+2.36%)
Gas: 1 Gwei

Token

Financial Data Token (XFN)
 

Overview

Max Total Supply

4,940,594.391150279768399147 XFN

Holders

230

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000007 XFN

Value
$0.00
0x050CBBcCe5Bc7d4e7831e9136Dd54151609Bb7Ce
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:
CommunityToken

Compiler Version
v0.5.9+commit.e560f70d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-17
*/

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
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.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;



/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

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

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        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 `IERC20.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(msg.sender, spender, _allowances[msg.sender][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 `IERC20.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(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        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), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _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), "ERC20: mint to the zero address");

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

     /**
     * @dev Destoys `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 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");

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

    /**
     * @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 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Destoys `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, msg.sender, _allowances[account][msg.sender].sub(amount));
    }
}

// File: openzeppelin-solidity/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: openzeppelin-solidity/contracts/access/roles/MinterRole.sol

pragma solidity ^0.5.0;


contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

// File: contracts/token/ERC20Interface.sol

pragma solidity 0.5.9;


interface ERC20Interface {
  // Standard ERC-20 interface.
  function transfer(address to, uint256 value) external returns (bool);
  function approve(address spender, uint256 value) external returns (bool);
  function transferFrom(address from, address to, uint256 value) external returns (bool);
  function totalSupply() external view returns (uint256);
  function balanceOf(address who) external view returns (uint256);
  function allowance(address owner, address spender) external view returns (uint256);
  // Extension of ERC-20 interface to support supply adjustment.
  function mint(address to, uint256 value) external returns (bool);
  function burn(address from, uint256 value) external returns (bool);
}

// File: contracts/token/ERC20Base.sol

pragma solidity 0.5.9;





/// "ERC20Base" is the standard ERC-20 implementation that allows its minter to mint tokens. Both BandToken and
/// CommunityToken extend from ERC20Base. In addition to the standard functions, the class provides `transferAndCall`
/// function, which performs a transfer and invokes the given function using the provided data. If the destination
/// contract uses "ERC20Acceptor" interface, it can verify that the caller properly sends appropriate amount of tokens.
contract ERC20Base is ERC20Interface, ERC20, MinterRole {
  string public name;
  string public symbol;
  uint8 public decimals = 18;

  constructor(string memory _name, string memory _symbol) public {
    name = _name;
    symbol = _symbol;
  }

  function transferAndCall(address to, uint256 value, bytes4 sig, bytes memory data) public returns (bool) {
    require(to != address(this));
    _transfer(msg.sender, to, value);
    (bool success,) = to.call(abi.encodePacked(sig, uint256(msg.sender), value, data));
    require(success);
    return true;
  }

  function mint(address to, uint256 value) public onlyMinter returns (bool) {
    _mint(to, value);
    return true;
  }

  function burn(address from, uint256 value) public onlyMinter returns (bool) {
    _burn(from, value);
    return true;
  }
}

// File: contracts/token/SnapshotToken.sol

pragma solidity 0.5.9;




contract SnapshotToken is ERC20Base {
  using SafeMath for uint256;

  /// IMPORTANT: votingPowers are kept as a linked list of ALL historical changes.
  /// - This allows the contract to figure out voting power of the address at any nonce `n`, by
  /// searching for the node that has the biggest nonce that is not greater than `n`.
  /// - For efficiency, nonce and power are packed into one uint256 integer, with the top 64 bits
  /// representing nonce, and the bottom 192 bits representing voting power.
  mapping (address => mapping(uint256 => uint256)) _votingPower;
  mapping (address => uint256) public votingPowerChangeCount;
  uint256 public votingPowerChangeNonce = 0;

  /// Returns user voting power at the given index, that is, as of the user's index^th voting power change
  function historicalVotingPowerAtIndex(address owner, uint256 index) public view returns (uint256) {
    require(index <= votingPowerChangeCount[owner]);
    return _votingPower[owner][index] & ((1 << 192) - 1);  // Lower 192 bits
  }

  /// Returns user voting power at the given time. Under the hood, this performs binary search
  /// to look for the largest index at which the nonce is not greater than 'nonce'.
  /// The voting power at that index is the returning value.
  function historicalVotingPowerAtNonce(address owner, uint256 nonce) public view returns (uint256) {
    require(nonce <= votingPowerChangeNonce && nonce < (1 << 64));
    uint256 start = 0;
    uint256 end = votingPowerChangeCount[owner];
    while (start < end) {
      uint256 mid = start.add(end).add(1).div(2); /// Use (start+end+1)/2 to prevent infinite loop.
      if ((_votingPower[owner][mid] >> 192) > nonce) {  /// Upper 64-bit nonce
        /// If midTime > nonce, this mid can't possibly be the answer.
        end = mid.sub(1);
      } else {
        /// Otherwise, search on the greater side, but still keep mid as a possible option.
        start = mid;
      }
    }
    return historicalVotingPowerAtIndex(owner, start);
  }

  function _transfer(address from, address to, uint256 value) internal {
    super._transfer(from, to, value);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(from);
    _changeVotingPower(to);
  }

  function _mint(address account, uint256 amount) internal {
    super._mint(account, amount);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(account);
  }

  function _burn(address account, uint256 amount) internal {
    super._burn(account, amount);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(account);
  }

  function _changeVotingPower(address account) internal {
    uint256 currentIndex = votingPowerChangeCount[account];
    uint256 newPower = balanceOf(account);
    require(newPower < (1 << 192));
    require(votingPowerChangeNonce < (1 << 64));
    currentIndex = currentIndex.add(1);
    votingPowerChangeCount[account] = currentIndex;
    _votingPower[account][currentIndex] = (votingPowerChangeNonce << 192) | newPower;
  }
}

// File: openzeppelin-solidity/contracts/math/Math.sol

pragma solidity ^0.5.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

// File: openzeppelin-solidity/contracts/access/roles/CapperRole.sol

pragma solidity ^0.5.0;


contract CapperRole {
    using Roles for Roles.Role;

    event CapperAdded(address indexed account);
    event CapperRemoved(address indexed account);

    Roles.Role private _cappers;

    constructor () internal {
        _addCapper(msg.sender);
    }

    modifier onlyCapper() {
        require(isCapper(msg.sender), "CapperRole: caller does not have the Capper role");
        _;
    }

    function isCapper(address account) public view returns (bool) {
        return _cappers.has(account);
    }

    function addCapper(address account) public onlyCapper {
        _addCapper(account);
    }

    function renounceCapper() public {
        _removeCapper(msg.sender);
    }

    function _addCapper(address account) internal {
        _cappers.add(account);
        emit CapperAdded(account);
    }

    function _removeCapper(address account) internal {
        _cappers.remove(account);
        emit CapperRemoved(account);
    }
}

// File: contracts/token/LockableToken.sol

pragma solidity 0.5.9;






/// "LockableToken" adds token locking functionality to ERC-20 smart contract. The authorized addresses (Cappers) are
/// allowed to lock tokens from any token holder to prevent token transfers up to that amount. If a token holder is
/// locked by multiple cappers, the maximum number is used as the amount of locked tokens.
contract LockableToken is ERC20Base, CapperRole {
  using SafeMath for uint256;

  event TokenLocked(address indexed locker, address indexed owner, uint256 value);
  event TokenUnlocked(address indexed locker, address indexed owner, uint256 value);

  uint256 constant NOT_FOUND = uint256(-1);

  struct TokenLock {
    address locker;
    uint256 value;
  }

  mapping (address => TokenLock[]) _locks;

  function getLockedToken(address owner) public view returns (uint256) {
    TokenLock[] storage locks = _locks[owner];
    uint256 maxLock = 0;
    for (uint256 i = 0; i < locks.length; ++i) {
      maxLock = Math.max(maxLock, locks[i].value);
    }
    return maxLock;
  }

  function getLockedTokenAt(address owner, address locker) public view returns (uint256) {
    uint256 index = _getTokenLockIndex(owner, locker);
    if (index != NOT_FOUND) return _locks[owner][index].value;
    else return 0;
  }

  function unlockedBalanceOf(address owner) public view returns (uint256) {
    return balanceOf(owner).sub(getLockedToken(owner));
  }

  function lock(address owner, uint256 value) public onlyCapper returns (bool) {
    uint256 index = _getTokenLockIndex(owner, msg.sender);
    if (index != NOT_FOUND) {
      uint256 currentLock = _locks[owner][index].value;
      require(balanceOf(owner) >= currentLock.add(value));
      _locks[owner][index].value = currentLock.add(value);
    } else {
      require(balanceOf(owner) >= value);
      _locks[owner].push(TokenLock(msg.sender, value));
    }
    emit TokenLocked(msg.sender, owner, value);
    return true;
  }

  function unlock(address owner, uint256 value) public returns (bool) {
    uint256 index = _getTokenLockIndex(owner, msg.sender);
    require(index != NOT_FOUND);
    TokenLock[] storage locks = _locks[owner];
    require(locks[index].value >= value);
    locks[index].value = locks[index].value.sub(value);
    if (locks[index].value == 0) {
      if (index != locks.length - 1) {
        locks[index] = locks[locks.length - 1];
      }
      locks.pop();
    }
    emit TokenUnlocked(msg.sender, owner, value);
    return true;
  }

  function _getTokenLockIndex(address owner, address locker) internal view returns (uint256) {
    TokenLock[] storage locks = _locks[owner];
    for (uint256 i = 0; i < locks.length; ++i) {
      if (locks[i].locker == locker) return i;
    }
    return NOT_FOUND;
  }

  function _transfer(address from, address to, uint256 value) internal {
    require(unlockedBalanceOf(from) >= value);
    super._transfer(from, to, value);
  }

  function _burn(address account, uint256 value) internal {
    require(unlockedBalanceOf(account) >= value);
    super._burn(account, value);
  }
}

// File: contracts/CommunityToken.sol

pragma solidity 0.5.9;





/// "CommunityToken" is an ERC-20 token specific for each dataset community.
contract CommunityToken is SnapshotToken, LockableToken {
  constructor(string memory name, string memory symbol) public ERC20Base(name, symbol) {}
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"value","type":"uint256"}],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCapper","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"sig","type":"bytes4"},{"name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"votingPowerChangeNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votingPowerChangeCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"getLockedToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"value","type":"uint256"}],"name":"unlock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"unlockedBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"locker","type":"address"}],"name":"getLockedTokenAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"nonce","type":"uint256"}],"name":"historicalVotingPowerAtNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"historicalVotingPowerAtIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"locker","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"locker","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"CapperAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"CapperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040526006805460ff1916601217905560006009553480156200002357600080fd5b50604051620020b7380380620020b7833981810160405260408110156200004957600080fd5b8101908080516401000000008111156200006257600080fd5b820160208101848111156200007657600080fd5b81516401000000008111828201871017156200009157600080fd5b50509291906020018051640100000000811115620000ae57600080fd5b82016020810184811115620000c257600080fd5b8151640100000000811182820187101715620000dd57600080fd5b50509291905050508181620000f8336200013f60201b60201c565b81516200010d9060049060208501906200030d565b508051620001239060059060208401906200030d565b50505062000137336200019160201b60201c565b5050620003b2565b6200015a816003620001e360201b620018a61790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620001ac81600a620001e360201b620018a61790919060201c565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b620001f882826001600160e01b036200028a16565b156200026557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620002ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620020956022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200035057805160ff191683800117855562000380565b8280016001018555821562000380579182015b828111156200038057825182559160200191906001019062000363565b506200038e92915062000392565b5090565b620003af91905b808211156200038e576000815560010162000399565b90565b611cd380620003c26000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a082311161010457806398650275116100a2578063aa271e1a11610071578063aa271e1a14610659578063cce280961461067f578063d6487031146106ab578063dd62ed3e146106d7576101cf565b806398650275146105cd5780639dc29fac146105d5578063a457c2d714610601578063a9059cbb1461062d576101cf565b80638dfbcf36116100de5780638dfbcf361461054b5780639156b37a1461057157806395d89b411461059f578063983b2d56146105a7576101cf565b806370a08231146104d35780637eee288d146104f957806384955c8814610525576101cf565b8063395645611161017157806344b6fd811161014b57806344b6fd81146104755780634a7b27e91461047d578063560ef1bf146104a35780635d5576f8146104c9576101cf565b806339564561146103575780633c4461be1461037d57806340c10f1914610449576101cf565b806323b872dd116101ad57806323b872dd146102ab578063282d3fdf146102e1578063313ce5671461030d578063395093511461032b576101cf565b806306fdde03146101d4578063095ea7b31461025157806318160ddd14610291575b600080fd5b6101dc610705565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102165781810151838201526020016101fe565b50505050905090810190601f1680156102435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610793565b604080519115158252519081900360200190f35b6102996107aa565b60408051918252519081900360200190f35b61027d600480360360608110156102c157600080fd5b506001600160a01b038135811691602081013590911690604001356107b0565b61027d600480360360408110156102f757600080fd5b506001600160a01b038135169060200135610807565b6103156109d4565b6040805160ff9092168252519081900360200190f35b61027d6004803603604081101561034157600080fd5b506001600160a01b0381351690602001356109dd565b61027d6004803603602081101561036d57600080fd5b50356001600160a01b0316610a19565b61027d6004803603608081101561039357600080fd5b6001600160a01b03823516916020810135916001600160e01b031960408301351691908101906080810160608201356401000000008111156103d457600080fd5b8201836020820111156103e657600080fd5b8035906020019184600183028401116401000000008311171561040857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a2c945050505050565b61027d6004803603604081101561045f57600080fd5b506001600160a01b038135169060200135610ba7565b610299610bf7565b6102996004803603602081101561049357600080fd5b50356001600160a01b0316610bfd565b610299600480360360208110156104b957600080fd5b50356001600160a01b0316610c0f565b6104d1610c6c565b005b610299600480360360208110156104e957600080fd5b50356001600160a01b0316610c77565b61027d6004803603604081101561050f57600080fd5b506001600160a01b038135169060200135610c92565b6102996004803603602081101561053b57600080fd5b50356001600160a01b0316610e5c565b6104d16004803603602081101561056157600080fd5b50356001600160a01b0316610e7f565b6102996004803603604081101561058757600080fd5b506001600160a01b0381358116916020013516610ecf565b6101dc610f2f565b6104d1600480360360208110156105bd57600080fd5b50356001600160a01b0316610f8a565b6104d1610fd7565b61027d600480360360408110156105eb57600080fd5b506001600160a01b038135169060200135610fe0565b61027d6004803603604081101561061757600080fd5b506001600160a01b038135169060200135611030565b61027d6004803603604081101561064357600080fd5b506001600160a01b03813516906020013561106c565b61027d6004803603602081101561066f57600080fd5b50356001600160a01b0316611079565b6102996004803603604081101561069557600080fd5b506001600160a01b03813516906020013561108c565b610299600480360360408110156106c157600080fd5b506001600160a01b038135169060200135611168565b610299600480360360408110156106ed57600080fd5b506001600160a01b03813581169160200135166111bf565b6004805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b505050505081565b60006107a03384846111ea565b5060015b92915050565b60025490565b60006107bd8484846112d6565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546107fd9186916107f8908663ffffffff6112fb16565b6111ea565b5060019392505050565b600061081233610a19565b61084d5760405162461bcd60e51b8152600401808060200182810382526030815260200180611c6f6030913960400191505060405180910390fd5b60006108598433611358565b90506000198114610912576001600160a01b0384166000908152600b6020526040812080548390811061088857fe5b90600052602060002090600202016001015490506108af84826113ce90919063ffffffff16565b6108b886610c77565b10156108c357600080fd5b6108d3818563ffffffff6113ce16565b6001600160a01b0386166000908152600b602052604090208054849081106108f757fe5b9060005260206000209060020201600101819055505061098a565b8261091c85610c77565b101561092757600080fd5b6001600160a01b038481166000908152600b602090815260408083208151808301909252338252818301888152815460018082018455928652939094209151600290930290910180546001600160a01b0319169290941691909117835590519101555b6040805184815290516001600160a01b0386169133917f991b8e8a2e2b8ff515f7045174eeb52eb4868e69c5bb4259da6146a93c77574d9181900360200190a35060019392505050565b60065460ff1681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a09185906107f8908663ffffffff6113ce16565b60006107a4600a8363ffffffff61142f16565b60006001600160a01b038516301415610a4457600080fd5b610a4f3386866112d6565b6000856001600160a01b031684336001600160a01b0316878660405160200180856001600160e01b0319166001600160e01b031916815260040184815260200183815260200182805190602001908083835b60208310610ac05780518252601f199092019160209182019101610aa1565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610b9b57600080fd5b50600195945050505050565b6000610bb233611079565b610bed5760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b6107a08383611496565b60095481565b60086020526000908152604090205481565b6001600160a01b0381166000908152600b6020526040812081805b8254811015610c6457610c5a82848381548110610c4357fe5b9060005260206000209060020201600101546114c4565b9150600101610c2a565b509392505050565b610c75336114db565b565b6001600160a01b031660009081526020819052604090205490565b600080610c9f8433611358565b9050600019811415610cb057600080fd5b6001600160a01b0384166000908152600b6020526040902080548490829084908110610cd857fe5b9060005260206000209060020201600101541015610cf557600080fd5b610d2584828481548110610d0557fe5b9060005260206000209060020201600101546112fb90919063ffffffff16565b818381548110610d3157fe5b906000526020600020906002020160010181905550808281548110610d5257fe5b90600052602060002090600202016001015460001415610e11578054600019018214610ddd57805481906000198101908110610d8a57fe5b9060005260206000209060020201818381548110610da457fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b039092169190911781556001918201549101555b80805480610de757fe5b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590555b6040805185815290516001600160a01b0387169133917f549f3836aa79a43ac740f9814586c8b7ab5e0d299ea11ac017c6d889704962ae9181900360200190a3506001949350505050565b60006107a4610e6a83610c0f565b610e7384610c77565b9063ffffffff6112fb16565b610e8833610a19565b610ec35760405162461bcd60e51b8152600401808060200182810382526030815260200180611c6f6030913960400191505060405180910390fd5b610ecc81611523565b50565b600080610edc8484611358565b90506000198114610f25576001600160a01b0384166000908152600b60205260409020805482908110610f0b57fe5b9060005260206000209060020201600101549150506107a4565b60009150506107a4565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561078b5780601f106107605761010080835404028352916020019161078b565b610f9333611079565b610fce5760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b610ecc8161156b565b610c75336115b3565b6000610feb33611079565b6110265760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b6107a083836115fb565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a09185906107f8908663ffffffff6112fb16565b60006107a03384846112d6565b60006107a460038363ffffffff61142f16565b600060095482111580156110a35750600160401b82105b6110ac57600080fd5b6001600160a01b0383166000908152600860205260408120545b8082101561115557600061110260026110f660016110ea878763ffffffff6113ce16565b9063ffffffff6113ce16565b9063ffffffff61161a16565b6001600160a01b038716600090815260076020908152604080832084845290915290205490915060c01c85101561114b5761114481600163ffffffff6112fb16565b915061114f565b8092505b506110c6565b61115f8583611168565b95945050505050565b6001600160a01b03821660009081526008602052604081205482111561118d57600080fd5b506001600160a01b0391909116600090815260076020908152604080832093835292905220546001600160c01b031690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661122f5760405162461bcd60e51b8152600401808060200182810382526024815260200180611c4b6024913960400191505060405180910390fd5b6001600160a01b0382166112745760405162461bcd60e51b8152600401808060200182810382526022815260200180611b706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b806112e084610e5c565b10156112eb57600080fd5b6112f6838383611684565b505050565b600082821115611352576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166000908152600b60205260408120815b81548110156113c257836001600160a01b031682828154811061139157fe5b60009182526020909120600290910201546001600160a01b031614156113ba5791506107a49050565b600101611372565b50600019949350505050565b600082820183811015611428576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006001600160a01b0382166114765760405162461bcd60e51b8152600401808060200182810382526022815260200180611be36022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6114a082826116b8565b6009546114b490600163ffffffff6113ce16565b6009556114c0826117a8565b5050565b6000818310156114d45781611428565b5090919050565b6114ec600a8263ffffffff61183f16565b6040516001600160a01b038216907f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b90600090a250565b611534600a8263ffffffff6118a616565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b61157c60038263ffffffff6118a616565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6115c460038263ffffffff61183f16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b8061160583610e5c565b101561161057600080fd5b6114c08282611927565b6000808211611670576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161167b57fe5b04949350505050565b61168f838383611931565b6009546116a390600163ffffffff6113ce16565b6009556116af836117a8565b6112f6826117a8565b6001600160a01b038216611713576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254611726908263ffffffff6113ce16565b6002556001600160a01b038216600090815260208190526040902054611752908263ffffffff6113ce16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116600090815260086020526040812054906117cb83610c77565b9050600160c01b81106117dd57600080fd5b600160401b600954106117ef57600080fd5b61180082600163ffffffff6113ce16565b6001600160a01b0390931660009081526008602090815260408083208690556009546007835281842096845295909152902060c09390931b1790915550565b611849828261142f565b6118845760405162461bcd60e51b8152600401808060200182810382526021815260200180611bc26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6118b0828261142f565b15611902576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6114a08282611a73565b6001600160a01b0383166119765760405162461bcd60e51b8152600401808060200182810382526025815260200180611c266025913960400191505060405180910390fd5b6001600160a01b0382166119bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180611b4d6023913960400191505060405180910390fd5b6001600160a01b0383166000908152602081905260409020546119e4908263ffffffff6112fb16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a19908263ffffffff6113ce16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401808060200182810382526021815260200180611c056021913960400191505060405180910390fd5b600254611acb908263ffffffff6112fb16565b6002556001600160a01b038216600090815260208190526040902054611af7908263ffffffff6112fb16565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a72305820b1e9c5c972b33f6667fd4e8b6cff5f01fb7ecfade013883ab7bb8bfcbe3b97f964736f6c63430005090032526f6c65733a206163636f756e7420697320746865207a65726f206164647265737300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001446696e616e6369616c204461746120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358464e0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a082311161010457806398650275116100a2578063aa271e1a11610071578063aa271e1a14610659578063cce280961461067f578063d6487031146106ab578063dd62ed3e146106d7576101cf565b806398650275146105cd5780639dc29fac146105d5578063a457c2d714610601578063a9059cbb1461062d576101cf565b80638dfbcf36116100de5780638dfbcf361461054b5780639156b37a1461057157806395d89b411461059f578063983b2d56146105a7576101cf565b806370a08231146104d35780637eee288d146104f957806384955c8814610525576101cf565b8063395645611161017157806344b6fd811161014b57806344b6fd81146104755780634a7b27e91461047d578063560ef1bf146104a35780635d5576f8146104c9576101cf565b806339564561146103575780633c4461be1461037d57806340c10f1914610449576101cf565b806323b872dd116101ad57806323b872dd146102ab578063282d3fdf146102e1578063313ce5671461030d578063395093511461032b576101cf565b806306fdde03146101d4578063095ea7b31461025157806318160ddd14610291575b600080fd5b6101dc610705565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102165781810151838201526020016101fe565b50505050905090810190601f1680156102435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610793565b604080519115158252519081900360200190f35b6102996107aa565b60408051918252519081900360200190f35b61027d600480360360608110156102c157600080fd5b506001600160a01b038135811691602081013590911690604001356107b0565b61027d600480360360408110156102f757600080fd5b506001600160a01b038135169060200135610807565b6103156109d4565b6040805160ff9092168252519081900360200190f35b61027d6004803603604081101561034157600080fd5b506001600160a01b0381351690602001356109dd565b61027d6004803603602081101561036d57600080fd5b50356001600160a01b0316610a19565b61027d6004803603608081101561039357600080fd5b6001600160a01b03823516916020810135916001600160e01b031960408301351691908101906080810160608201356401000000008111156103d457600080fd5b8201836020820111156103e657600080fd5b8035906020019184600183028401116401000000008311171561040857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a2c945050505050565b61027d6004803603604081101561045f57600080fd5b506001600160a01b038135169060200135610ba7565b610299610bf7565b6102996004803603602081101561049357600080fd5b50356001600160a01b0316610bfd565b610299600480360360208110156104b957600080fd5b50356001600160a01b0316610c0f565b6104d1610c6c565b005b610299600480360360208110156104e957600080fd5b50356001600160a01b0316610c77565b61027d6004803603604081101561050f57600080fd5b506001600160a01b038135169060200135610c92565b6102996004803603602081101561053b57600080fd5b50356001600160a01b0316610e5c565b6104d16004803603602081101561056157600080fd5b50356001600160a01b0316610e7f565b6102996004803603604081101561058757600080fd5b506001600160a01b0381358116916020013516610ecf565b6101dc610f2f565b6104d1600480360360208110156105bd57600080fd5b50356001600160a01b0316610f8a565b6104d1610fd7565b61027d600480360360408110156105eb57600080fd5b506001600160a01b038135169060200135610fe0565b61027d6004803603604081101561061757600080fd5b506001600160a01b038135169060200135611030565b61027d6004803603604081101561064357600080fd5b506001600160a01b03813516906020013561106c565b61027d6004803603602081101561066f57600080fd5b50356001600160a01b0316611079565b6102996004803603604081101561069557600080fd5b506001600160a01b03813516906020013561108c565b610299600480360360408110156106c157600080fd5b506001600160a01b038135169060200135611168565b610299600480360360408110156106ed57600080fd5b506001600160a01b03813581169160200135166111bf565b6004805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b505050505081565b60006107a03384846111ea565b5060015b92915050565b60025490565b60006107bd8484846112d6565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546107fd9186916107f8908663ffffffff6112fb16565b6111ea565b5060019392505050565b600061081233610a19565b61084d5760405162461bcd60e51b8152600401808060200182810382526030815260200180611c6f6030913960400191505060405180910390fd5b60006108598433611358565b90506000198114610912576001600160a01b0384166000908152600b6020526040812080548390811061088857fe5b90600052602060002090600202016001015490506108af84826113ce90919063ffffffff16565b6108b886610c77565b10156108c357600080fd5b6108d3818563ffffffff6113ce16565b6001600160a01b0386166000908152600b602052604090208054849081106108f757fe5b9060005260206000209060020201600101819055505061098a565b8261091c85610c77565b101561092757600080fd5b6001600160a01b038481166000908152600b602090815260408083208151808301909252338252818301888152815460018082018455928652939094209151600290930290910180546001600160a01b0319169290941691909117835590519101555b6040805184815290516001600160a01b0386169133917f991b8e8a2e2b8ff515f7045174eeb52eb4868e69c5bb4259da6146a93c77574d9181900360200190a35060019392505050565b60065460ff1681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a09185906107f8908663ffffffff6113ce16565b60006107a4600a8363ffffffff61142f16565b60006001600160a01b038516301415610a4457600080fd5b610a4f3386866112d6565b6000856001600160a01b031684336001600160a01b0316878660405160200180856001600160e01b0319166001600160e01b031916815260040184815260200183815260200182805190602001908083835b60208310610ac05780518252601f199092019160209182019101610aa1565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310610b265780518252601f199092019160209182019101610b07565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610b9b57600080fd5b50600195945050505050565b6000610bb233611079565b610bed5760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b6107a08383611496565b60095481565b60086020526000908152604090205481565b6001600160a01b0381166000908152600b6020526040812081805b8254811015610c6457610c5a82848381548110610c4357fe5b9060005260206000209060020201600101546114c4565b9150600101610c2a565b509392505050565b610c75336114db565b565b6001600160a01b031660009081526020819052604090205490565b600080610c9f8433611358565b9050600019811415610cb057600080fd5b6001600160a01b0384166000908152600b6020526040902080548490829084908110610cd857fe5b9060005260206000209060020201600101541015610cf557600080fd5b610d2584828481548110610d0557fe5b9060005260206000209060020201600101546112fb90919063ffffffff16565b818381548110610d3157fe5b906000526020600020906002020160010181905550808281548110610d5257fe5b90600052602060002090600202016001015460001415610e11578054600019018214610ddd57805481906000198101908110610d8a57fe5b9060005260206000209060020201818381548110610da457fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b039092169190911781556001918201549101555b80805480610de757fe5b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590555b6040805185815290516001600160a01b0387169133917f549f3836aa79a43ac740f9814586c8b7ab5e0d299ea11ac017c6d889704962ae9181900360200190a3506001949350505050565b60006107a4610e6a83610c0f565b610e7384610c77565b9063ffffffff6112fb16565b610e8833610a19565b610ec35760405162461bcd60e51b8152600401808060200182810382526030815260200180611c6f6030913960400191505060405180910390fd5b610ecc81611523565b50565b600080610edc8484611358565b90506000198114610f25576001600160a01b0384166000908152600b60205260409020805482908110610f0b57fe5b9060005260206000209060020201600101549150506107a4565b60009150506107a4565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561078b5780601f106107605761010080835404028352916020019161078b565b610f9333611079565b610fce5760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b610ecc8161156b565b610c75336115b3565b6000610feb33611079565b6110265760405162461bcd60e51b8152600401808060200182810382526030815260200180611b926030913960400191505060405180910390fd5b6107a083836115fb565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a09185906107f8908663ffffffff6112fb16565b60006107a03384846112d6565b60006107a460038363ffffffff61142f16565b600060095482111580156110a35750600160401b82105b6110ac57600080fd5b6001600160a01b0383166000908152600860205260408120545b8082101561115557600061110260026110f660016110ea878763ffffffff6113ce16565b9063ffffffff6113ce16565b9063ffffffff61161a16565b6001600160a01b038716600090815260076020908152604080832084845290915290205490915060c01c85101561114b5761114481600163ffffffff6112fb16565b915061114f565b8092505b506110c6565b61115f8583611168565b95945050505050565b6001600160a01b03821660009081526008602052604081205482111561118d57600080fd5b506001600160a01b0391909116600090815260076020908152604080832093835292905220546001600160c01b031690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661122f5760405162461bcd60e51b8152600401808060200182810382526024815260200180611c4b6024913960400191505060405180910390fd5b6001600160a01b0382166112745760405162461bcd60e51b8152600401808060200182810382526022815260200180611b706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b806112e084610e5c565b10156112eb57600080fd5b6112f6838383611684565b505050565b600082821115611352576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166000908152600b60205260408120815b81548110156113c257836001600160a01b031682828154811061139157fe5b60009182526020909120600290910201546001600160a01b031614156113ba5791506107a49050565b600101611372565b50600019949350505050565b600082820183811015611428576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006001600160a01b0382166114765760405162461bcd60e51b8152600401808060200182810382526022815260200180611be36022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6114a082826116b8565b6009546114b490600163ffffffff6113ce16565b6009556114c0826117a8565b5050565b6000818310156114d45781611428565b5090919050565b6114ec600a8263ffffffff61183f16565b6040516001600160a01b038216907f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b90600090a250565b611534600a8263ffffffff6118a616565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b61157c60038263ffffffff6118a616565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6115c460038263ffffffff61183f16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b8061160583610e5c565b101561161057600080fd5b6114c08282611927565b6000808211611670576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161167b57fe5b04949350505050565b61168f838383611931565b6009546116a390600163ffffffff6113ce16565b6009556116af836117a8565b6112f6826117a8565b6001600160a01b038216611713576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254611726908263ffffffff6113ce16565b6002556001600160a01b038216600090815260208190526040902054611752908263ffffffff6113ce16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116600090815260086020526040812054906117cb83610c77565b9050600160c01b81106117dd57600080fd5b600160401b600954106117ef57600080fd5b61180082600163ffffffff6113ce16565b6001600160a01b0390931660009081526008602090815260408083208690556009546007835281842096845295909152902060c09390931b1790915550565b611849828261142f565b6118845760405162461bcd60e51b8152600401808060200182810382526021815260200180611bc26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6118b0828261142f565b15611902576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6114a08282611a73565b6001600160a01b0383166119765760405162461bcd60e51b8152600401808060200182810382526025815260200180611c266025913960400191505060405180910390fd5b6001600160a01b0382166119bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180611b4d6023913960400191505060405180910390fd5b6001600160a01b0383166000908152602081905260409020546119e4908263ffffffff6112fb16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611a19908263ffffffff6113ce16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401808060200182810382526021815260200180611c056021913960400191505060405180910390fd5b600254611acb908263ffffffff6112fb16565b6002556001600160a01b038216600090815260208190526040902054611af7908263ffffffff6112fb16565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a72305820b1e9c5c972b33f6667fd4e8b6cff5f01fb7ecfade013883ab7bb8bfcbe3b97f964736f6c63430005090032

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001446696e616e6369616c204461746120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358464e0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Financial Data Token
Arg [1] : symbol (string): XFN

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 46696e616e6369616c204461746120546f6b656e000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 58464e0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

27477:151:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27477:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18202:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18202:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9118:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9118:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8141:91;;;:::i;:::-;;;;;;;;;;;;;;;;9737:256;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9737:256:0;;;;;;;;;;;;;;;;;:::i;25626:539::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25626:539:0;;;;;;;;:::i;18250:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10402:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10402:206:0;;;;;;;;:::i;23561:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23561:109:0;-1:-1:-1;;;;;23561:109:0;;:::i;18400:315::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;18400:315:0;;;;;;;;;-1:-1:-1;;;;;;18400:315:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18400:315:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18400:315:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18400:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18400:315:0;;-1:-1:-1;18400:315:0;;-1:-1:-1;;;;;18400:315:0:i;18721:121::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18721:121:0;;;;;;;;:::i;19706:41::-;;;:::i;19643:58::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19643:58:0;-1:-1:-1;;;;;19643:58:0;;:::i;24961:279::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24961:279:0;-1:-1:-1;;;;;24961:279:0;;:::i;23778:77::-;;;:::i;:::-;;8295:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8295:110:0;-1:-1:-1;;;;;8295:110:0;;:::i;26171:546::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26171:546:0;;;;;;;;:::i;25485:135::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25485:135:0;-1:-1:-1;;;;;25485:135:0;;:::i;23678:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23678:92:0;-1:-1:-1;;;;;23678:92:0;;:::i;25246:233::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25246:233:0;;;;;;;;;;:::i;18225:20::-;;;:::i;16342:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16342:92:0;-1:-1:-1;;;;;16342:92:0;;:::i;16442:77::-;;;:::i;18848:125::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18848:125:0;;;;;;;;:::i;11111:216::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11111:216:0;;;;;;;;:::i;8618:156::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8618:156:0;;;;;;;;:::i;16225:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16225:109:0;-1:-1:-1;;;;;16225:109:0;;:::i;20347:756::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20347:756:0;;;;;;;;:::i;19862:236::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19862:236:0;;;;;;;;:::i;8837:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8837:134:0;;;;;;;;;;:::i;18202:18::-;;;;;;;;;;;;;;;-1:-1:-1;;18202:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9118:148::-;9183:4;9200:36;9209:10;9221:7;9230:5;9200:8;:36::i;:::-;-1:-1:-1;9254:4:0;9118:148;;;;;:::o;8141:91::-;8212:12;;8141:91;:::o;9737:256::-;9826:4;9843:36;9853:6;9861:9;9872:6;9843:9;:36::i;:::-;-1:-1:-1;;;;;9919:19:0;;;;;;:11;:19;;;;;;;;9907:10;9919:31;;;;;;;;;9890:73;;9899:6;;9919:43;;9955:6;9919:43;:35;:43;:::i;:::-;9890:8;:73::i;:::-;-1:-1:-1;9981:4:0;9737:256;;;;;:::o;25626:539::-;25697:4;23460:20;23469:10;23460:8;:20::i;:::-;23452:81;;;;-1:-1:-1;;;23452:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25710:13;25726:37;25745:5;25752:10;25726:18;:37::i;:::-;25710:53;;-1:-1:-1;;25774:5:0;:18;25770:323;;-1:-1:-1;;;;;25825:13:0;;25803:19;25825:13;;;:6;:13;;;;;:20;;25839:5;;25825:20;;;;;;;;;;;;;;;;:26;;;25803:48;;25888:22;25904:5;25888:11;:15;;:22;;;;:::i;:::-;25868:16;25878:5;25868:9;:16::i;:::-;:42;;25860:51;;;;;;25949:22;:11;25965:5;25949:22;:15;:22;:::i;:::-;-1:-1:-1;;;;;25920:13:0;;;;;;:6;:13;;;;;:20;;25934:5;;25920:20;;;;;;;;;;;;;;;;:26;;:51;;;;25770:323;;;;26022:5;26002:16;26012:5;26002:9;:16::i;:::-;:25;;25994:34;;;;;;-1:-1:-1;;;;;26037:13:0;;;;;;;:6;:13;;;;;;;;26056:28;;;;;;;;26066:10;26056:28;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;26037:48:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26037:48:0;;;;;;;;;;;;;;;;25770:323;26104:37;;;;;;;;-1:-1:-1;;;;;26104:37:0;;;26116:10;;26104:37;;;;;;;;;-1:-1:-1;26155:4:0;;25626:539;-1:-1:-1;;;25626:539:0:o;18250:26::-;;;;;;:::o;10402:206::-;10508:10;10482:4;10529:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10529:32:0;;;;;;;;;;10482:4;;10499:79;;10520:7;;10529:48;;10566:10;10529:48;:36;:48;:::i;23561:109::-;23617:4;23641:21;:8;23654:7;23641:21;:12;:21;:::i;18400:315::-;18499:4;-1:-1:-1;;;;;18520:19:0;;18534:4;18520:19;;18512:28;;;;;;18547:32;18557:10;18569:2;18573:5;18547:9;:32::i;:::-;18587:12;18604:2;-1:-1:-1;;;;;18604:7:0;18629:3;18642:10;-1:-1:-1;;;;;18634:19:0;18655:5;18662:4;18612:55;;;;;;-1:-1:-1;;;;;18612:55:0;;-1:-1:-1;;;;;18612:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18612:55:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18612:55:0;;;18604:64;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18604:64:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18586:82:0;;;18683:7;18675:16;;;;;;-1:-1:-1;18705:4:0;;18400:315;-1:-1:-1;;;;;18400:315:0:o;18721:121::-;18789:4;16124:20;16133:10;16124:8;:20::i;:::-;16116:81;;;;-1:-1:-1;;;16116:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18802:16;18808:2;18812:5;18802;:16::i;19706:41::-;;;;:::o;19643:58::-;;;;;;;;;;;;;:::o;24961:279::-;-1:-1:-1;;;;;25065:13:0;;25021:7;25065:13;;;:6;:13;;;;;25021:7;;25111:103;25135:12;;25131:16;;25111:103;;;25173:33;25182:7;25191:5;25197:1;25191:8;;;;;;;;;;;;;;;;;;:14;;;25173:8;:33::i;:::-;25163:43;-1:-1:-1;25149:3:0;;25111:103;;;-1:-1:-1;25227:7:0;24961:279;-1:-1:-1;;;24961:279:0:o;23778:77::-;23822:25;23836:10;23822:13;:25::i;:::-;23778:77::o;8295:110::-;-1:-1:-1;;;;;8379:18:0;8352:7;8379:18;;;;;;;;;;;;8295:110::o;26171:546::-;26233:4;26246:13;26262:37;26281:5;26288:10;26262:18;:37::i;:::-;26246:53;;-1:-1:-1;;26314:5:0;:18;;26306:27;;;;;;-1:-1:-1;;;;;26368:13:0;;26340:25;26368:13;;;:6;:13;;;;;26396:12;;26418:5;;26368:13;;26402:5;;26396:12;;;;;;;;;;;;;;;;:18;;;:27;;26388:36;;;;;;26452:29;26475:5;26452;26458;26452:12;;;;;;;;;;;;;;;;;;:18;;;:22;;:29;;;;:::i;:::-;26431:5;26437;26431:12;;;;;;;;;;;;;;;;;;:18;;:50;;;;26492:5;26498;26492:12;;;;;;;;;;;;;;;;;;:18;;;26514:1;26492:23;26488:155;;;26539:12;;-1:-1:-1;;26539:16:0;26530:25;;26526:90;;26589:12;;26583:5;;-1:-1:-1;;26589:16:0;;;26583:23;;;;;;;;;;;;;;;;26568:5;26574;26568:12;;;;;;;;;;;;;;;;:38;;:12;;;;;:38;;-1:-1:-1;;;;;;26568:38:0;-1:-1:-1;;;;;26568:38:0;;;;;;;;;;;;;;;;;26526:90;26624:5;:11;;;;;;;;;;;;;;;-1:-1:-1;;26624:11:0;;;;;;;;;-1:-1:-1;;;;;;26624:11:0;;;;;;;;26488:155;26654:39;;;;;;;;-1:-1:-1;;;;;26654:39:0;;;26668:10;;26654:39;;;;;;;;;-1:-1:-1;26707:4:0;;26171:546;-1:-1:-1;;;;26171:546:0:o;25485:135::-;25548:7;25571:43;25592:21;25607:5;25592:14;:21::i;:::-;25571:16;25581:5;25571:9;:16::i;:::-;:20;:43;:20;:43;:::i;23678:92::-;23460:20;23469:10;23460:8;:20::i;:::-;23452:81;;;;-1:-1:-1;;;23452:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23743:19;23754:7;23743:10;:19::i;:::-;23678:92;:::o;25246:233::-;25324:7;25340:13;25356:33;25375:5;25382:6;25356:18;:33::i;:::-;25340:49;;-1:-1:-1;;25400:5:0;:18;25396:77;;-1:-1:-1;;;;;25427:13:0;;;;;;:6;:13;;;;;:20;;25441:5;;25427:20;;;;;;;;;;;;;;;;:26;;;25420:33;;;;;25396:77;25472:1;25465:8;;;;;18225:20;;;;;;;;;;;;;;;-1:-1:-1;;18225:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16342:92;16124:20;16133:10;16124:8;:20::i;:::-;16116:81;;;;-1:-1:-1;;;16116:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16407:19;16418:7;16407:10;:19::i;16442:77::-;16486:25;16500:10;16486:13;:25::i;18848:125::-;18918:4;16124:20;16133:10;16124:8;:20::i;:::-;16116:81;;;;-1:-1:-1;;;16116:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18931:18;18937:4;18943:5;18931;:18::i;11111:216::-;11222:10;11196:4;11243:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11243:32:0;;;;;;;;;;11196:4;;11213:84;;11234:7;;11243:53;;11280:15;11243:53;:36;:53;:::i;8618:156::-;8687:4;8704:40;8714:10;8726:9;8737:6;8704:9;:40::i;16225:109::-;16281:4;16305:21;:8;16318:7;16305:21;:12;:21;:::i;20347:756::-;20436:7;20469:22;;20460:5;:31;;:52;;;;;-1:-1:-1;;;20495:5:0;:17;20460:52;20452:61;;;;;;-1:-1:-1;;;;;20558:29:0;;20520:13;20558:29;;;:22;:29;;;;;;20594:448;20609:3;20601:5;:11;20594:448;;;20623:11;20637:28;20663:1;20637:21;20656:1;20637:14;:5;20647:3;20637:14;:9;:14;:::i;:::-;:18;:21;:18;:21;:::i;:::-;:25;:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;20729:19:0;;;;;;:12;:19;;;;;;;;:24;;;;;;;;;20623:42;;-1:-1:-1;20757:3:0;20729:31;20728:41;-1:-1:-1;20724:311:0;;;20884:10;:3;20892:1;20884:10;:7;:10;:::i;:::-;20878:16;;20724:311;;;21022:3;21014:11;;20724:311;20594:448;;;;21055:42;21084:5;21091;21055:28;:42::i;:::-;21048:49;20347:756;-1:-1:-1;;;;;20347:756:0:o;19862:236::-;-1:-1:-1;;;;;19984:29:0;;19951:7;19984:29;;;:22;:29;;;;;;19975:38;;;19967:47;;;;;;-1:-1:-1;;;;;;20028:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;-1:-1:-1;;;;;20028:45:0;;19862:236::o;8837:134::-;-1:-1:-1;;;;;8936:18:0;;;8909:7;8936:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8837:134::o;13913:335::-;-1:-1:-1;;;;;14006:19:0;;13998:68;;;;-1:-1:-1;;;13998:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14085:21:0;;14077:68;;;;-1:-1:-1;;;14077:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14158:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;14209:31;;;;;;;;;;;;;;;;;13913:335;;;:::o;27002:162::-;27113:5;27086:23;27104:4;27086:17;:23::i;:::-;:32;;27078:41;;;;;;27126:32;27142:4;27148:2;27152:5;27126:15;:32::i;:::-;27002:162;;;:::o;4256:184::-;4314:7;4347:1;4342;:6;;4334:49;;;;;-1:-1:-1;;;4334:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4406:5:0;;;4256:184::o;26723:273::-;-1:-1:-1;;;;;26849:13:0;;26805:7;26849:13;;;:6;:13;;;;;26805:7;26869:99;26893:12;;26889:16;;26869:99;;;26944:6;-1:-1:-1;;;;;26925:25:0;:5;26931:1;26925:8;;;;;;;;;;;;;;;;;;;;;:15;-1:-1:-1;;;;;26925:15:0;:25;26921:39;;;26959:1;-1:-1:-1;26952:8:0;;-1:-1:-1;26952:8:0;26921:39;26907:3;;26869:99;;;-1:-1:-1;;;24835:2:0;26723:273;-1:-1:-1;;;;26723:273:0:o;3800:181::-;3858:7;3890:5;;;3914:6;;;;3906:46;;;;;-1:-1:-1;;;3906:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3972:1;3800:181;-1:-1:-1;;;3800:181:0:o;15499:203::-;15571:4;-1:-1:-1;;;;;15596:21:0;;15588:68;;;;-1:-1:-1;;;15588:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15674:20:0;:11;:20;;;;;;;;;;;;;;;15499:203::o;21350:193::-;21414:28;21426:7;21435:6;21414:11;:28::i;:::-;21474:22;;:29;;21501:1;21474:29;:26;:29;:::i;:::-;21449:22;:54;21510:27;21529:7;21510:18;:27::i;:::-;21350:193;;:::o;22437:107::-;22495:7;22527:1;22522;:6;;:14;;22535:1;22522:14;;;-1:-1:-1;22531:1:0;;22515:21;-1:-1:-1;22437:107:0:o;23993:130::-;24053:24;:8;24069:7;24053:24;:15;:24;:::i;:::-;24093:22;;-1:-1:-1;;;;;24093:22:0;;;;;;;;23993:130;:::o;23863:122::-;23920:21;:8;23933:7;23920:21;:12;:21;:::i;:::-;23957:20;;-1:-1:-1;;;;;23957:20:0;;;;;;;;23863:122;:::o;16527:::-;16584:21;:8;16597:7;16584:21;:12;:21;:::i;:::-;16621:20;;-1:-1:-1;;;;;16621:20:0;;;;;;;;16527:122;:::o;16657:130::-;16717:24;:8;16733:7;16717:24;:15;:24;:::i;:::-;16757:22;;-1:-1:-1;;;;;16757:22:0;;;;;;;;16657:130;:::o;27170:147::-;27271:5;27241:26;27259:7;27241:17;:26::i;:::-;:35;;27233:44;;;;;;27284:27;27296:7;27305:5;27284:11;:27::i;5629:333::-;5687:7;5786:1;5782;:5;5774:44;;;;;-1:-1:-1;;;5774:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5829:9;5845:1;5841;:5;;;;;;;5629:333;-1:-1:-1;;;;5629:333:0:o;21109:235::-;21185:32;21201:4;21207:2;21211:5;21185:15;:32::i;:::-;21249:22;;:29;;21276:1;21249:29;:26;:29;:::i;:::-;21224:22;:54;21285:24;21304:4;21285:18;:24::i;:::-;21316:22;21335:2;21316:18;:22::i;12527:308::-;-1:-1:-1;;;;;12603:21:0;;12595:65;;;;;-1:-1:-1;;;12595:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12688:12;;:24;;12705:6;12688:24;:16;:24;:::i;:::-;12673:12;:39;-1:-1:-1;;;;;12744:18:0;;:9;:18;;;;;;;;;;;:30;;12767:6;12744:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;12723:18:0;;:9;:18;;;;;;;;;;;:51;;;;12790:37;;;;;;;12723:18;;:9;;12790:37;;;;;;;;;;12527:308;;:::o;21748:433::-;-1:-1:-1;;;;;21832:31:0;;21809:20;21832:31;;;:22;:31;;;;;;;21889:18;21855:7;21889:9;:18::i;:::-;21870:37;;-1:-1:-1;;;21922:8:0;:21;21914:30;;;;;;-1:-1:-1;;;21959:22:0;;:34;21951:43;;;;;;22016:19;:12;22033:1;22016:19;:16;:19;:::i;:::-;-1:-1:-1;;;;;22042:31:0;;;;;;;:22;:31;;;;;;;;:46;;;22134:22;;22095:12;:21;;;;;:35;;;;;;;;;22160:3;22134:29;;;;22133:42;22095:80;;;-1:-1:-1;21748:433:0:o;15221:183::-;15301:18;15305:4;15311:7;15301:3;:18::i;:::-;15293:64;;;;-1:-1:-1;;;15293:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15368:20:0;15391:5;15368:20;;;;;;;;;;;:28;;-1:-1:-1;;15368:28:0;;;15221:183::o;14963:178::-;15041:18;15045:4;15051:7;15041:3;:18::i;:::-;15040:19;15032:63;;;;;-1:-1:-1;;;15032:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15106:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;15106:27:0;15129:4;15106:27;;;14963:178::o;21549:193::-;21613:28;21625:7;21634:6;21613:11;:28::i;11817:429::-;-1:-1:-1;;;;;11915:20:0;;11907:70;;;;-1:-1:-1;;;11907:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11996:23:0;;11988:71;;;;-1:-1:-1;;;11988:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12092:17:0;;:9;:17;;;;;;;;;;;:29;;12114:6;12092:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;12072:17:0;;;:9;:17;;;;;;;;;;;:49;;;;12155:20;;;;;;;:32;;12180:6;12155:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;12132:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;12203:35;;;;;;;12132:20;;12203:35;;;;;;;;;;;;;11817:429;;;:::o;13167:306::-;-1:-1:-1;;;;;13242:21:0;;13234:67;;;;-1:-1:-1;;;13234:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13329:12;;:23;;13346:5;13329:23;:16;:23;:::i;:::-;13314:12;:38;-1:-1:-1;;;;;13384:18:0;;:9;:18;;;;;;;;;;;:29;;13407:5;13384:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;13363:18:0;;:9;:18;;;;;;;;;;;:50;;;;13429:36;;;;;;;13363:9;;13429:36;;;;;;;;;;;13167:306;;:::o

Swarm Source

bzzr://b1e9c5c972b33f6667fd4e8b6cff5f01fb7ecfade013883ab7bb8bfcbe3b97f9
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.