ETH Price: $3,722.58 (+3.65%)

Token

BitTorrent (BTT)
 

Overview

Max Total Supply

28,331,197.847638 BTT

Holders

160 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
14,305.48767 BTT

Value
$0.00
0xbb93c496ee28c8df03f39217682a621b764e3526
Loading...
Loading
Loading...
Loading
Loading...
Loading


 


# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20BTT

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 10: ERC20BTT.sol
pragma solidity ^0.4.18;

import "./StandardTokenWithFees.sol";
import "./Pausable.sol";
import "./BlackList.sol";

contract UpgradedStandardToken is StandardToken {
    // those methods are called by the legacy contract
    // and they must ensure msg.sender to be the contract address
    uint public _totalSupply;
    function transferByLegacy(address from, address to, uint value) public returns (bool);
    function transferFromByLegacy(address sender, address from, address spender, uint value) public returns (bool);
    function approveByLegacy(address from, address spender, uint value) public returns (bool);
    function increaseApprovalByLegacy(address from, address spender, uint addedValue) public returns (bool);
    function decreaseApprovalByLegacy(address from, address spender, uint subtractedValue) public returns (bool);
}

/**
 *    ERC20 BitTorrent Token (BTT)
 */

contract ERC20BTT is Pausable, StandardTokenWithFees, BlackList {

    address public upgradedAddress;
    bool public deprecated;

    //  The contract can be initialized with a number of tokens
    //  All the tokens are deposited to the owner address
    function ERC20BTT() public {
        _totalSupply = 0; 
        name = "BitTorrent";
        symbol = "BTT";
        decimals = 6;
        deprecated = false;
    }

    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function transfer(address _to, uint _value) public whenNotPaused returns (bool) {
        require(!isBlackListed[msg.sender]);
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferByLegacy(msg.sender, _to, _value);
        } else {
            return super.transfer(_to, _value);
        }
    }

    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function transferFrom(address _from, address _to, uint _value) public whenNotPaused returns (bool) {
        require(!isBlackListed[_from]);
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferFromByLegacy(msg.sender, _from, _to, _value);
        } else {
            return super.transferFrom(_from, _to, _value);
        }
    }

    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function balanceOf(address who) public constant returns (uint) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).balanceOf(who);
        } else {
            return super.balanceOf(who);
        }
    }

    // Allow checks of balance at time of deprecation
    function oldBalanceOf(address who) public constant returns (uint) {
        if (deprecated) {
            return super.balanceOf(who);
        }
    }

    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function approve(address _spender, uint _value) public whenNotPaused returns (bool) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).approveByLegacy(msg.sender, _spender, _value);
        } else {
            return super.approve(_spender, _value);
        }
    }

    function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).increaseApprovalByLegacy(msg.sender, _spender, _addedValue);
        } else {
            return super.increaseApproval(_spender, _addedValue);
        }
    }

    function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).decreaseApprovalByLegacy(msg.sender, _spender, _subtractedValue);
        } else {
            return super.decreaseApproval(_spender, _subtractedValue);
        }
    }

    // Forward ERC20 methods to upgraded contract if this one is deprecated
    function allowance(address _owner, address _spender) public constant returns (uint remaining) {
        if (deprecated) {
            return StandardToken(upgradedAddress).allowance(_owner, _spender);
        } else {
            return super.allowance(_owner, _spender);
        }
    }

    // deprecate current contract in favour of a new one
    function deprecate(address _upgradedAddress) public onlyOwner {
        require(_upgradedAddress != address(0));
        deprecated = true;
        upgradedAddress = _upgradedAddress;
        Deprecate(_upgradedAddress);
    }

    // deprecate current contract if favour of a new one
    function totalSupply() public constant returns (uint) {
        if (deprecated) {
            return StandardToken(upgradedAddress).totalSupply();
        } else {
            return _totalSupply;
        }
    }

    // Issue a new amount of tokens
    // these tokens are deposited into the owner address
    //
    // @param _amount Number of tokens to be issued
    function issue(uint amount) public onlyOwner {
        balances[owner] = balances[owner].add(amount);
        _totalSupply = _totalSupply.add(amount);
        Issue(amount);
        Transfer(address(0), owner, amount);
    }

    // Redeem tokens.
    // These tokens are withdrawn from the owner address
    // if the balance must be enough to cover the redeem
    // or the call will fail.
    // @param _amount Number of tokens to be issued
    function redeem(uint amount) public onlyOwner {
        _totalSupply = _totalSupply.sub(amount);
        balances[owner] = balances[owner].sub(amount);
        Redeem(amount);
        Transfer(owner, address(0), amount);
    }

    function destroyBlackFunds (address _blackListedUser) public onlyOwner {
        require(isBlackListed[_blackListedUser]);
        uint dirtyFunds = balanceOf(_blackListedUser);
        balances[_blackListedUser] = 0;
        _totalSupply = _totalSupply.sub(dirtyFunds);
        DestroyedBlackFunds(_blackListedUser, dirtyFunds);
    }

    event DestroyedBlackFunds(address indexed _blackListedUser, uint _balance);

    // Called when new token are issued
    event Issue(uint amount);

    // Called when tokens are redeemed
    event Redeem(uint amount);

    // Called when contract is deprecated
    event Deprecate(address newAddress);

}

File 1 of 10: BasicToken.sol
pragma solidity ^0.4.18;


import './SafeMath.sol';

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 */
contract ERC20Basic {
  function totalSupply() public constant returns (uint);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}

File 2 of 10: BlackList.sol
pragma solidity ^0.4.18;

import "./Ownable.sol";

contract BlackList is Ownable {

    function getBlackListStatus(address _maker) external constant returns (bool) {
        return isBlackListed[_maker];
    }

    mapping (address => bool) public isBlackListed;

    function addBlackList (address _evilUser) public onlyOwner {
        isBlackListed[_evilUser] = true;
        AddedBlackList(_evilUser);
    }

    function removeBlackList (address _clearedUser) public onlyOwner {
        isBlackListed[_clearedUser] = false;
        RemovedBlackList(_clearedUser);
    }

    event AddedBlackList(address indexed _user);

    event RemovedBlackList(address indexed _user);

}

File 4 of 10: Migrations.sol
pragma solidity ^0.4.4;
/* solhint-disable var-name-mixedcase */


contract Migrations {
    address public owner;
    uint public last_completed_migration;

    modifier restricted() {
        if (msg.sender == owner) _;
    }

    function Migrations() public {
        owner = msg.sender;
    }

    function setCompleted(uint completed) public restricted {
        last_completed_migration = completed;
    }

    function upgrade(address newAddress) public restricted {
        Migrations upgraded = Migrations(newAddress);
        upgraded.setCompleted(last_completed_migration);
    }
}

File 5 of 10: MultiSigWallet.sol
pragma solidity ^0.4.10;

/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.
/// @author Stefan George - <[email protected]>
contract MultiSigWallet {

    uint constant public MAX_OWNER_COUNT = 50;

    event Confirmation(address indexed sender, uint indexed transactionId);
    event Revocation(address indexed sender, uint indexed transactionId);
    event Submission(uint indexed transactionId);
    event Execution(uint indexed transactionId);
    event ExecutionFailure(uint indexed transactionId);
    event Deposit(address indexed sender, uint value);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint required);

    mapping (uint => Transaction) public transactions;
    mapping (uint => mapping (address => bool)) public confirmations;
    mapping (address => bool) public isOwner;
    address[] public owners;
    uint public required;
    uint public transactionCount;

    struct Transaction {
        address destination;
        uint value;
        bytes data;
        bool executed;
    }

    modifier onlyWallet() {
        if (msg.sender != address(this))
            throw;
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        if (isOwner[owner])
            throw;
        _;
    }

    modifier ownerExists(address owner) {
        if (!isOwner[owner])
            throw;
        _;
    }

    modifier transactionExists(uint transactionId) {
        if (transactions[transactionId].destination == 0)
            throw;
        _;
    }

    modifier confirmed(uint transactionId, address owner) {
        if (!confirmations[transactionId][owner])
            throw;
        _;
    }

    modifier notConfirmed(uint transactionId, address owner) {
        if (confirmations[transactionId][owner])
            throw;
        _;
    }

    modifier notExecuted(uint transactionId) {
        if (transactions[transactionId].executed)
            throw;
        _;
    }

    modifier notNull(address _address) {
        if (_address == 0)
            throw;
        _;
    }

    modifier validRequirement(uint ownerCount, uint _required) {
        if (   ownerCount > MAX_OWNER_COUNT
            || _required > ownerCount
            || _required == 0
            || ownerCount == 0)
            throw;
        _;
    }

    /// @dev Fallback function allows to deposit ether.
    function()
        payable
    {
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }

    /*
     * Public functions
     */
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    function MultiSigWallet(address[] _owners, uint _required)
        public
        validRequirement(_owners.length, _required)
    {
        for (uint i=0; i<_owners.length; i++) {
            if (isOwner[_owners[i]] || _owners[i] == 0)
                throw;
            isOwner[_owners[i]] = true;
        }
        owners = _owners;
        required = _required;
    }

    /// @dev Allows to add a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of new owner.
    function addOwner(address owner)
        public
        onlyWallet
        ownerDoesNotExist(owner)
        notNull(owner)
        validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        OwnerAddition(owner);
    }

    /// @dev Allows to remove an owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner.
    function removeOwner(address owner)
        public
        onlyWallet
        ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint i=0; i<owners.length - 1; i++)
            if (owners[i] == owner) {
                owners[i] = owners[owners.length - 1];
                break;
            }
        owners.length -= 1;
        if (required > owners.length)
            changeRequirement(owners.length);
        OwnerRemoval(owner);
    }

    /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner to be replaced.
    /// @param owner Address of new owner.
    function replaceOwner(address owner, address newOwner)
        public
        onlyWallet
        ownerExists(owner)
        ownerDoesNotExist(newOwner)
    {
        for (uint i=0; i<owners.length; i++)
            if (owners[i] == owner) {
                owners[i] = newOwner;
                break;
            }
        isOwner[owner] = false;
        isOwner[newOwner] = true;
        OwnerRemoval(owner);
        OwnerAddition(newOwner);
    }

    /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
    /// @param _required Number of required confirmations.
    function changeRequirement(uint _required)
        public
        onlyWallet
        validRequirement(owners.length, _required)
    {
        required = _required;
        RequirementChange(_required);
    }

    /// @dev Allows an owner to submit and confirm a transaction.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function submitTransaction(address destination, uint value, bytes data)
        public
        returns (uint transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /// @dev Allows an owner to confirm a transaction.
    /// @param transactionId Transaction ID.
    function confirmTransaction(uint transactionId)
        public
        ownerExists(msg.sender)
        transactionExists(transactionId)
        notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /// @dev Allows an owner to revoke a confirmation for a transaction.
    /// @param transactionId Transaction ID.
    function revokeConfirmation(uint transactionId)
        public
        ownerExists(msg.sender)
        confirmed(transactionId, msg.sender)
        notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        Revocation(msg.sender, transactionId);
    }

    /// @dev Allows anyone to execute a confirmed transaction.
    /// @param transactionId Transaction ID.
    function executeTransaction(uint transactionId)
        public
        notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            Transaction tx = transactions[transactionId];
            tx.executed = true;
            if (tx.destination.call.value(tx.value)(tx.data))
                Execution(transactionId);
            else {
                ExecutionFailure(transactionId);
                tx.executed = false;
            }
        }
    }

    /// @dev Returns the confirmation status of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Confirmation status.
    function isConfirmed(uint transactionId)
        public
        constant
        returns (bool)
    {
        uint count = 0;
        for (uint i=0; i<owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
                count += 1;
            if (count == required)
                return true;
        }
    }

    /*
     * Internal functions
     */
    /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function addTransaction(address destination, uint value, bytes data)
        internal
        notNull(destination)
        returns (uint transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
            destination: destination,
            value: value,
            data: data,
            executed: false
        });
        transactionCount += 1;
        Submission(transactionId);
    }

    /*
     * Web3 call functions
     */
    /// @dev Returns number of confirmations of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Number of confirmations.
    function getConfirmationCount(uint transactionId)
        public
        constant
        returns (uint count)
    {
        for (uint i=0; i<owners.length; i++)
            if (confirmations[transactionId][owners[i]])
                count += 1;
    }

    /// @dev Returns total number of transactions after filers are applied.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Total number of transactions after filters are applied.
    function getTransactionCount(bool pending, bool executed)
        public
        constant
        returns (uint count)
    {
        for (uint i=0; i<transactionCount; i++)
            if (   pending && !transactions[i].executed
                || executed && transactions[i].executed)
                count += 1;
    }

    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners()
        public
        constant
        returns (address[])
    {
        return owners;
    }

    /// @dev Returns array with owner addresses, which confirmed transaction.
    /// @param transactionId Transaction ID.
    /// @return Returns array of owner addresses.
    function getConfirmations(uint transactionId)
        public
        constant
        returns (address[] _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint count = 0;
        uint i;
        for (i=0; i<owners.length; i++)
            if (confirmations[transactionId][owners[i]]) {
                confirmationsTemp[count] = owners[i];
                count += 1;
            }
        _confirmations = new address[](count);
        for (i=0; i<count; i++)
            _confirmations[i] = confirmationsTemp[i];
    }

    /// @dev Returns list of transaction IDs in defined range.
    /// @param from Index start position of transaction array.
    /// @param to Index end position of transaction array.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Returns array of transaction IDs.
    function getTransactionIds(uint from, uint to, bool pending, bool executed)
        public
        constant
        returns (uint[] _transactionIds)
    {
        uint[] memory transactionIdsTemp = new uint[](transactionCount);
        uint count = 0;
        uint i;
        for (i=0; i<transactionCount; i++)
            if (   pending && !transactions[i].executed
                || executed && transactions[i].executed)
            {
                transactionIdsTemp[count] = i;
                count += 1;
            }
        _transactionIds = new uint[](to - from);
        for (i=from; i<to; i++)
            _transactionIds[i - from] = transactionIdsTemp[i];
    }
}

File 6 of 10: Ownable.sol
pragma solidity ^0.4.18;


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

File 7 of 10: Pausable.sol
pragma solidity ^0.4.18;


import "./Ownable.sol";


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

File 8 of 10: SafeMath.sol
pragma solidity ^0.4.18;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

File 9 of 10: StandardToken.sol
pragma solidity ^0.4.18;


import './BasicToken.sol';


/**
 * @title ERC20 interface
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * 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:
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

File 10 of 10: StandardTokenWithFees.sol
pragma solidity ^0.4.18;

import "./StandardToken.sol";
import "./Ownable.sol";

contract StandardTokenWithFees is StandardToken, Ownable {

  // Additional variables for use if transaction fees ever became necessary
  uint256 public basisPointsRate = 0;
  uint256 public maximumFee = 0;
  uint256 constant MAX_SETTABLE_BASIS_POINTS = 20;
  uint256 constant MAX_SETTABLE_FEE = 50;

  string public name;
  string public symbol;
  uint8 public decimals;
  uint public _totalSupply;

  uint public constant MAX_UINT = 2**256 - 1;

  function calcFee(uint _value) constant returns (uint) {
    uint fee = (_value.mul(basisPointsRate)).div(10000);
    if (fee > maximumFee) {
        fee = maximumFee;
    }
    return fee;
  }

  function transfer(address _to, uint _value) public returns (bool) {
    uint fee = calcFee(_value);
    uint sendAmount = _value.sub(fee);

    super.transfer(_to, sendAmount);
    if (fee > 0) {
      super.transfer(owner, fee);
    }
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    uint fee = calcFee(_value);
    uint sendAmount = _value.sub(fee);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(sendAmount);
    if (allowed[_from][msg.sender] < MAX_UINT) {
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    }
    Transfer(_from, _to, sendAmount);
    if (fee > 0) {
      balances[owner] = balances[owner].add(fee);
      Transfer(_from, owner, fee);
    }
    return true;
  }

  function setParams(uint newBasisPoints, uint newMaxFee) public onlyOwner {
      // Ensure transparency by hardcoding limit beyond which fees can never be added
      require(newBasisPoints < MAX_SETTABLE_BASIS_POINTS);
      require(newMaxFee < MAX_SETTABLE_FEE);

      basisPointsRate = newBasisPoints;
      maximumFee = newMaxFee.mul(uint(10)**decimals);

      Params(basisPointsRate, maximumFee);
  }

  // Called if contract ever adds fees
  event Params(uint feeBasisPoints, uint maxFee);

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"calcFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"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":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"oldBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"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"}]

60806040526002805460a060020a60ff0219169055600060038190556004553480156200002b57600080fd5b5060028054600160a060020a03191633179055600060085560408051808201909152600a8082527f426974546f7272656e740000000000000000000000000000000000000000000060209092019182526200008991600591620000f4565b506040805180820190915260038082527f42545400000000000000000000000000000000000000000000000000000000006020909201918252620000d091600691620000f4565b506007805460ff19166006179055600a805460a060020a60ff021916905562000199565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013757805160ff191683800117855562000167565b8280016001018555821562000167579182015b82811115620001675782518255916020019190600101906200014a565b506200017592915062000179565b5090565b6200019691905b8082111562000175576000815560010162000180565b90565b611a6980620001a96000396000f3006080604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101a55780630753c30c1461022f578063095ea7b3146102525780630e136b191461028a5780630ecb93c01461029f57806318160ddd146102c057806323b872dd146102e757806326976e3f14610311578063313ce56714610342578063353907141461036d5780633eaaf86b146103825780633f4ba83a1461039757806359bf1abe146103ac5780635c975abb146103cd57806366188463146103e257806370a082311461040657806375dc7d8c146104275780638456cb591461043f5780638da5cb5b1461045457806395d89b4114610469578063a9059cbb1461047e578063b7a3446c146104a2578063c0324c77146104c3578063cc872b66146104de578063d73dd623146104f6578063db006a751461051a578063dd62ed3e14610532578063dd644f7214610559578063e47d60601461056e578063e4997dc51461058f578063e5b5019a146105b0578063f2fde38b146105c5578063f3bdc228146105e6575b600080fd5b3480156101b157600080fd5b506101ba610607565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f45781810151838201526020016101dc565b50505050905090810190601f1680156102215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023b57600080fd5b50610250600160a060020a0360043516610695565b005b34801561025e57600080fd5b50610276600160a060020a0360043516602435610742565b604080519115158252519081900360200190f35b34801561029657600080fd5b50610276610829565b3480156102ab57600080fd5b50610250600160a060020a0360043516610839565b3480156102cc57600080fd5b506102d561089c565b60408051918252519081900360200190f35b3480156102f357600080fd5b50610276600160a060020a0360043581169060243516604435610958565b34801561031d57600080fd5b50610326610a6f565b60408051600160a060020a039092168252519081900360200190f35b34801561034e57600080fd5b50610357610a7e565b6040805160ff9092168252519081900360200190f35b34801561037957600080fd5b506102d5610a87565b34801561038e57600080fd5b506102d5610a8d565b3480156103a357600080fd5b50610250610a93565b3480156103b857600080fd5b50610276600160a060020a0360043516610b0b565b3480156103d957600080fd5b50610276610b2d565b3480156103ee57600080fd5b50610276600160a060020a0360043516602435610b3d565b34801561041257600080fd5b506102d5600160a060020a0360043516610be8565b34801561043357600080fd5b506102d5600435610ca8565b34801561044b57600080fd5b50610250610ce8565b34801561046057600080fd5b50610326610d65565b34801561047557600080fd5b506101ba610d74565b34801561048a57600080fd5b50610276600160a060020a0360043516602435610dcf565b3480156104ae57600080fd5b506102d5600160a060020a0360043516610e97565b3480156104cf57600080fd5b50610250600435602435610eb5565b3480156104ea57600080fd5b50610250600435610f4d565b34801561050257600080fd5b50610276600160a060020a036004351660243561102a565b34801561052657600080fd5b506102506004356110d5565b34801561053e57600080fd5b506102d5600160a060020a03600435811690602435166111b4565b34801561056557600080fd5b506102d5611243565b34801561057a57600080fd5b50610276600160a060020a0360043516611249565b34801561059b57600080fd5b50610250600160a060020a036004351661125e565b3480156105bc57600080fd5b506102d56112be565b3480156105d157600080fd5b50610250600160a060020a03600435166112c4565b3480156105f257600080fd5b50610250600160a060020a0360043516611359565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068d5780601f106106625761010080835404028352916020019161068d565b820191906000526020600020905b81548152906001019060200180831161067057829003601f168201915b505050505081565b600254600160a060020a031633146106ac57600080fd5b600160a060020a03811615156106c157600080fd5b600a805460a060020a74ff0000000000000000000000000000000000000000199091161773ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e916020908290030190a150565b60025460009060a060020a900460ff161561075c57600080fd5b600a5460a060020a900460ff161561081657600a54604080517faee92d33000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038681166024830152604482018690529151919092169163aee92d339160648083019260209291908290030181600087803b1580156107e357600080fd5b505af11580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b50519050610823565b6108208383611418565b90505b92915050565b600a5460a060020a900460ff1681565b600254600160a060020a0316331461085057600080fd5b600160a060020a038116600081815260096020526040808220805460ff19166001179055517f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc9190a250565b600a5460009060a060020a900460ff161561095057600a60009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561091d57600080fd5b505af1158015610931573d6000803e3d6000fd5b505050506040513d602081101561094757600080fd5b50519050610955565b506008545b90565b60025460009060a060020a900460ff161561097257600080fd5b600160a060020a03841660009081526009602052604090205460ff161561099857600080fd5b600a5460a060020a900460ff1615610a5a57600a54604080517f8b477adb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03878116602483015286811660448301526064820186905291519190921691638b477adb9160848083019260209291908290030181600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b50519050610a68565b610a6584848461147e565b90505b9392505050565b600a54600160a060020a031681565b60075460ff1681565b60045481565b60085481565b600254600160a060020a03163314610aaa57600080fd5b60025460a060020a900460ff161515610ac257600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600160a060020a03811660009081526009602052604090205460ff165b919050565b60025460a060020a900460ff1681565b60025460009060a060020a900460ff1615610b5757600080fd5b600a5460a060020a900460ff1615610bde57600a54604080517f6001279f000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0386811660248301526044820186905291519190921691636001279f9160648083019260209291908290030181600087803b1580156107e357600080fd5b61082083836116c1565b600a5460009060a060020a900460ff1615610c9857600a54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152915191909216916370a082319160248083019260209291908290030181600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050506040513d6020811015610c8f57600080fd5b50519050610b28565b610ca1826117b3565b9050610b28565b600080610cd2612710610cc6600354866117ce90919063ffffffff16565b9063ffffffff6117f916565b9050600454811115610823575060045492915050565b600254600160a060020a03163314610cff57600080fd5b60025460a060020a900460ff1615610d1657600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600254600160a060020a031681565b6006805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068d5780601f106106625761010080835404028352916020019161068d565b60025460009060a060020a900460ff1615610de957600080fd5b3360009081526009602052604090205460ff1615610e0657600080fd5b600a5460a060020a900460ff1615610e8d57600a54604080517f6e18980a000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0386811660248301526044820186905291519190921691636e18980a9160648083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611810565b600a5460009060a060020a900460ff1615610b2857610ca1826117b3565b600254600160a060020a03163314610ecc57600080fd5b60148210610ed957600080fd5b60328110610ee657600080fd5b6003829055600754610f0590829060ff16600a0a63ffffffff6117ce16565b600481905560035460408051918252602082019290925281517fb044a1e409eac5c48e5af22d4af52670dd1a99059537a78b31b48c6500a6354e929181900390910190a15050565b600254600160a060020a03163314610f6457600080fd5b600254600160a060020a0316600090815260208190526040902054610f8f908263ffffffff61186916565b600254600160a060020a0316600090815260208190526040902055600854610fbd908263ffffffff61186916565b6008556040805182815290517fcb8241adb0c3fdb35b70c24ce35c5eb0c17af7431c99f827d44a445ca624176a9181900360200190a1600254604080518381529051600160a060020a0390921691600091600080516020611a1e833981519152919081900360200190a350565b60025460009060a060020a900460ff161561104457600080fd5b600a5460a060020a900460ff16156110cb57600a54604080517fa9538157000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038681166024830152604482018690529151919092169163a95381579160648083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611878565b600254600160a060020a031633146110ec57600080fd5b6008546110ff908263ffffffff61191116565b600855600254600160a060020a031660009081526020819052604090205461112d908263ffffffff61191116565b600254600160a060020a03166000908152602081815260409182902092909255805183815290517f702d5967f45f6513a38ffc42d6ba9bf230bd40e8f53b16363c7eb4fd2deb9a44929181900390910190a1600254604080518381529051600092600160a060020a031691600080516020611a1e833981519152919081900360200190a350565b600a5460009060a060020a900460ff161561123957600a54604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015285811660248301529151919092169163dd62ed3e9160448083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611923565b60035481565b60096020526000908152604090205460ff1681565b600254600160a060020a0316331461127557600080fd5b600160a060020a038116600081815260096020526040808220805460ff19169055517fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c9190a250565b60001981565b600254600160a060020a031633146112db57600080fd5b600160a060020a03811615156112f057600080fd5b600254604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600090600160a060020a0316331461137357600080fd5b600160a060020a03821660009081526009602052604090205460ff16151561139a57600080fd5b6113a382610be8565b600160a060020a0383166000908152602081905260408120556008549091506113d2908263ffffffff61191116565b600855604080518281529051600160a060020a038416917f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c6919081900360200190a25050565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60008080600160a060020a038516151561149757600080fd5b600160a060020a0386166000908152602081905260409020548411156114bc57600080fd5b600160a060020a03861660009081526001602090815260408083203384529091529020548411156114ec57600080fd5b6114f584610ca8565b9150611507848363ffffffff61191116565b600160a060020a038716600090815260208190526040902054909150611533908563ffffffff61191116565b600160a060020a038088166000908152602081905260408082209390935590871681522054611568908263ffffffff61186916565b600160a060020a0380871660009081526020818152604080832094909455918916815260018252828120338252909152205460001911156115fc57600160a060020a03861660009081526001602090815260408083203384529091529020546115d7908563ffffffff61191116565b600160a060020a03871660009081526001602090815260408083203384529091529020555b84600160a060020a031686600160a060020a0316600080516020611a1e833981519152836040518082815260200191505060405180910390a360008211156116b557600254600160a060020a0316600090815260208190526040902054611669908363ffffffff61186916565b60028054600160a060020a03908116600090815260208181526040918290209490945591548251868152925190821693918a1692600080516020611a1e83398151915292908290030190a35b50600195945050505050565b336000908152600160209081526040808320600160a060020a03861684529091528120548083111561171657336000908152600160209081526040808320600160a060020a038816845290915281205561174b565b611726818463ffffffff61191116565b336000908152600160209081526040808320600160a060020a03891684529091529020555b336000818152600160209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3600191505b5092915050565b600160a060020a031660009081526020819052604090205490565b6000808315156117e157600091506117ac565b508282028284828115156117f157fe5b0414610a6857fe5b600080828481151561180757fe5b04949350505050565b600080600061181e84610ca8565b9150611830848363ffffffff61191116565b905061183c858261194e565b50600082111561185e5760025461185c90600160a060020a03168361194e565b505b506001949350505050565b600082820183811015610a6857fe5b336000908152600160209081526040808320600160a060020a03861684529091528120546118ac908363ffffffff61186916565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60008282111561191d57fe5b50900390565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a038316151561196557600080fd5b3360009081526020819052604090205482111561198157600080fd5b336000908152602081905260409020546119a1908363ffffffff61191116565b3360009081526020819052604080822092909255600160a060020a038516815220546119d3908363ffffffff61186916565b600160a060020a03841660008181526020818152604091829020939093558051858152905191923392600080516020611a1e8339815191529281900390910190a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820e9d893dd8615cd524f3a6b573ec363058fa8311914843eb4be3a171dce0bfa8b0029

Deployed Bytecode

0x6080604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146101a55780630753c30c1461022f578063095ea7b3146102525780630e136b191461028a5780630ecb93c01461029f57806318160ddd146102c057806323b872dd146102e757806326976e3f14610311578063313ce56714610342578063353907141461036d5780633eaaf86b146103825780633f4ba83a1461039757806359bf1abe146103ac5780635c975abb146103cd57806366188463146103e257806370a082311461040657806375dc7d8c146104275780638456cb591461043f5780638da5cb5b1461045457806395d89b4114610469578063a9059cbb1461047e578063b7a3446c146104a2578063c0324c77146104c3578063cc872b66146104de578063d73dd623146104f6578063db006a751461051a578063dd62ed3e14610532578063dd644f7214610559578063e47d60601461056e578063e4997dc51461058f578063e5b5019a146105b0578063f2fde38b146105c5578063f3bdc228146105e6575b600080fd5b3480156101b157600080fd5b506101ba610607565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f45781810151838201526020016101dc565b50505050905090810190601f1680156102215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023b57600080fd5b50610250600160a060020a0360043516610695565b005b34801561025e57600080fd5b50610276600160a060020a0360043516602435610742565b604080519115158252519081900360200190f35b34801561029657600080fd5b50610276610829565b3480156102ab57600080fd5b50610250600160a060020a0360043516610839565b3480156102cc57600080fd5b506102d561089c565b60408051918252519081900360200190f35b3480156102f357600080fd5b50610276600160a060020a0360043581169060243516604435610958565b34801561031d57600080fd5b50610326610a6f565b60408051600160a060020a039092168252519081900360200190f35b34801561034e57600080fd5b50610357610a7e565b6040805160ff9092168252519081900360200190f35b34801561037957600080fd5b506102d5610a87565b34801561038e57600080fd5b506102d5610a8d565b3480156103a357600080fd5b50610250610a93565b3480156103b857600080fd5b50610276600160a060020a0360043516610b0b565b3480156103d957600080fd5b50610276610b2d565b3480156103ee57600080fd5b50610276600160a060020a0360043516602435610b3d565b34801561041257600080fd5b506102d5600160a060020a0360043516610be8565b34801561043357600080fd5b506102d5600435610ca8565b34801561044b57600080fd5b50610250610ce8565b34801561046057600080fd5b50610326610d65565b34801561047557600080fd5b506101ba610d74565b34801561048a57600080fd5b50610276600160a060020a0360043516602435610dcf565b3480156104ae57600080fd5b506102d5600160a060020a0360043516610e97565b3480156104cf57600080fd5b50610250600435602435610eb5565b3480156104ea57600080fd5b50610250600435610f4d565b34801561050257600080fd5b50610276600160a060020a036004351660243561102a565b34801561052657600080fd5b506102506004356110d5565b34801561053e57600080fd5b506102d5600160a060020a03600435811690602435166111b4565b34801561056557600080fd5b506102d5611243565b34801561057a57600080fd5b50610276600160a060020a0360043516611249565b34801561059b57600080fd5b50610250600160a060020a036004351661125e565b3480156105bc57600080fd5b506102d56112be565b3480156105d157600080fd5b50610250600160a060020a03600435166112c4565b3480156105f257600080fd5b50610250600160a060020a0360043516611359565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068d5780601f106106625761010080835404028352916020019161068d565b820191906000526020600020905b81548152906001019060200180831161067057829003601f168201915b505050505081565b600254600160a060020a031633146106ac57600080fd5b600160a060020a03811615156106c157600080fd5b600a805460a060020a74ff0000000000000000000000000000000000000000199091161773ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e916020908290030190a150565b60025460009060a060020a900460ff161561075c57600080fd5b600a5460a060020a900460ff161561081657600a54604080517faee92d33000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038681166024830152604482018690529151919092169163aee92d339160648083019260209291908290030181600087803b1580156107e357600080fd5b505af11580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b50519050610823565b6108208383611418565b90505b92915050565b600a5460a060020a900460ff1681565b600254600160a060020a0316331461085057600080fd5b600160a060020a038116600081815260096020526040808220805460ff19166001179055517f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc9190a250565b600a5460009060a060020a900460ff161561095057600a60009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561091d57600080fd5b505af1158015610931573d6000803e3d6000fd5b505050506040513d602081101561094757600080fd5b50519050610955565b506008545b90565b60025460009060a060020a900460ff161561097257600080fd5b600160a060020a03841660009081526009602052604090205460ff161561099857600080fd5b600a5460a060020a900460ff1615610a5a57600a54604080517f8b477adb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03878116602483015286811660448301526064820186905291519190921691638b477adb9160848083019260209291908290030181600087803b158015610a2757600080fd5b505af1158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b50519050610a68565b610a6584848461147e565b90505b9392505050565b600a54600160a060020a031681565b60075460ff1681565b60045481565b60085481565b600254600160a060020a03163314610aaa57600080fd5b60025460a060020a900460ff161515610ac257600080fd5b6002805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600160a060020a03811660009081526009602052604090205460ff165b919050565b60025460a060020a900460ff1681565b60025460009060a060020a900460ff1615610b5757600080fd5b600a5460a060020a900460ff1615610bde57600a54604080517f6001279f000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0386811660248301526044820186905291519190921691636001279f9160648083019260209291908290030181600087803b1580156107e357600080fd5b61082083836116c1565b600a5460009060a060020a900460ff1615610c9857600a54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152915191909216916370a082319160248083019260209291908290030181600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050506040513d6020811015610c8f57600080fd5b50519050610b28565b610ca1826117b3565b9050610b28565b600080610cd2612710610cc6600354866117ce90919063ffffffff16565b9063ffffffff6117f916565b9050600454811115610823575060045492915050565b600254600160a060020a03163314610cff57600080fd5b60025460a060020a900460ff1615610d1657600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600254600160a060020a031681565b6006805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068d5780601f106106625761010080835404028352916020019161068d565b60025460009060a060020a900460ff1615610de957600080fd5b3360009081526009602052604090205460ff1615610e0657600080fd5b600a5460a060020a900460ff1615610e8d57600a54604080517f6e18980a000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0386811660248301526044820186905291519190921691636e18980a9160648083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611810565b600a5460009060a060020a900460ff1615610b2857610ca1826117b3565b600254600160a060020a03163314610ecc57600080fd5b60148210610ed957600080fd5b60328110610ee657600080fd5b6003829055600754610f0590829060ff16600a0a63ffffffff6117ce16565b600481905560035460408051918252602082019290925281517fb044a1e409eac5c48e5af22d4af52670dd1a99059537a78b31b48c6500a6354e929181900390910190a15050565b600254600160a060020a03163314610f6457600080fd5b600254600160a060020a0316600090815260208190526040902054610f8f908263ffffffff61186916565b600254600160a060020a0316600090815260208190526040902055600854610fbd908263ffffffff61186916565b6008556040805182815290517fcb8241adb0c3fdb35b70c24ce35c5eb0c17af7431c99f827d44a445ca624176a9181900360200190a1600254604080518381529051600160a060020a0390921691600091600080516020611a1e833981519152919081900360200190a350565b60025460009060a060020a900460ff161561104457600080fd5b600a5460a060020a900460ff16156110cb57600a54604080517fa9538157000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038681166024830152604482018690529151919092169163a95381579160648083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611878565b600254600160a060020a031633146110ec57600080fd5b6008546110ff908263ffffffff61191116565b600855600254600160a060020a031660009081526020819052604090205461112d908263ffffffff61191116565b600254600160a060020a03166000908152602081815260409182902092909255805183815290517f702d5967f45f6513a38ffc42d6ba9bf230bd40e8f53b16363c7eb4fd2deb9a44929181900390910190a1600254604080518381529051600092600160a060020a031691600080516020611a1e833981519152919081900360200190a350565b600a5460009060a060020a900460ff161561123957600a54604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015285811660248301529151919092169163dd62ed3e9160448083019260209291908290030181600087803b1580156107e357600080fd5b6108208383611923565b60035481565b60096020526000908152604090205460ff1681565b600254600160a060020a0316331461127557600080fd5b600160a060020a038116600081815260096020526040808220805460ff19169055517fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c9190a250565b60001981565b600254600160a060020a031633146112db57600080fd5b600160a060020a03811615156112f057600080fd5b600254604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600090600160a060020a0316331461137357600080fd5b600160a060020a03821660009081526009602052604090205460ff16151561139a57600080fd5b6113a382610be8565b600160a060020a0383166000908152602081905260408120556008549091506113d2908263ffffffff61191116565b600855604080518281529051600160a060020a038416917f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c6919081900360200190a25050565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60008080600160a060020a038516151561149757600080fd5b600160a060020a0386166000908152602081905260409020548411156114bc57600080fd5b600160a060020a03861660009081526001602090815260408083203384529091529020548411156114ec57600080fd5b6114f584610ca8565b9150611507848363ffffffff61191116565b600160a060020a038716600090815260208190526040902054909150611533908563ffffffff61191116565b600160a060020a038088166000908152602081905260408082209390935590871681522054611568908263ffffffff61186916565b600160a060020a0380871660009081526020818152604080832094909455918916815260018252828120338252909152205460001911156115fc57600160a060020a03861660009081526001602090815260408083203384529091529020546115d7908563ffffffff61191116565b600160a060020a03871660009081526001602090815260408083203384529091529020555b84600160a060020a031686600160a060020a0316600080516020611a1e833981519152836040518082815260200191505060405180910390a360008211156116b557600254600160a060020a0316600090815260208190526040902054611669908363ffffffff61186916565b60028054600160a060020a03908116600090815260208181526040918290209490945591548251868152925190821693918a1692600080516020611a1e83398151915292908290030190a35b50600195945050505050565b336000908152600160209081526040808320600160a060020a03861684529091528120548083111561171657336000908152600160209081526040808320600160a060020a038816845290915281205561174b565b611726818463ffffffff61191116565b336000908152600160209081526040808320600160a060020a03891684529091529020555b336000818152600160209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3600191505b5092915050565b600160a060020a031660009081526020819052604090205490565b6000808315156117e157600091506117ac565b508282028284828115156117f157fe5b0414610a6857fe5b600080828481151561180757fe5b04949350505050565b600080600061181e84610ca8565b9150611830848363ffffffff61191116565b905061183c858261194e565b50600082111561185e5760025461185c90600160a060020a03168361194e565b505b506001949350505050565b600082820183811015610a6857fe5b336000908152600160209081526040808320600160a060020a03861684529091528120546118ac908363ffffffff61186916565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60008282111561191d57fe5b50900390565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a038316151561196557600080fd5b3360009081526020819052604090205482111561198157600080fd5b336000908152602081905260409020546119a1908363ffffffff61191116565b3360009081526020819052604080822092909255600160a060020a038516815220546119d3908363ffffffff61186916565b600160a060020a03841660008181526020818152604091829020939093558051858152905191923392600080516020611a1e8339815191529281900390910190a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820e9d893dd8615cd524f3a6b573ec363058fa8311914843eb4be3a171dce0bfa8b0029

Deployed Bytecode Sourcemap

889:5332:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;384:18:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;384:18:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;384:18:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4237:226:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4237:226:2;-1:-1:-1;;;;;4237:226:2;;;;;;;2791:301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2791:301:2;-1:-1:-1;;;;;2791:301:2;;;;;;;;;;;;;;;;;;;;;;;;;996:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;996:22:2;;;;269:142:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;269:142:1;-1:-1:-1;;;;;269:142:1;;;;;4526:212:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4526:212:2;;;;;;;;;;;;;;;;;;;;1809:370;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1809:370:2;-1:-1:-1;;;;;1809:370:2;;;;;;;;;;;;960:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;960:30:2;;;;;;;;-1:-1:-1;;;;;960:30:2;;;;;;;;;;;;;;430:21:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;430:21:9;;;;;;;;;;;;;;;;;;;;;;;257:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;257:29:9;;;;455:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;455:24:9;;;;822:87:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;822:87:6;;;;88:122:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;88:122:1;-1:-1:-1;;;;;88:122:1;;;;;236:26:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;236:26:6;;;;3447:358:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3447:358:2;-1:-1:-1;;;;;3447:358:2;;;;;;;2261:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2261:238:2;-1:-1:-1;;;;;2261:238:2;;;;;531:192:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;531:192:9;;;;;655:85:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;655:85:6;;;;238:20:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:5;;;;406::9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;406:20:9;;;;1393:334:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1393:334:2;-1:-1:-1;;;;;1393:334:2;;;;;;;2559:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2559:150:2;-1:-1:-1;;;;;2559:150:2;;;;;1679:407:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1679:407:9;;;;;;;4896:224:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4896:224:2;;;;;3098:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3098:343:2;-1:-1:-1;;;;;3098:343:2;;;;;;;5344:226;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5344:226:2;;;;;3887:287;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3887:287:2;-1:-1:-1;;;;;3887:287:2;;;;;;;;;;219:34:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;219:34:9;;;;216:46:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;216:46:1;-1:-1:-1;;;;;216:46:1;;;;;417:157;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;417:157:1;-1:-1:-1;;;;;417:157:1;;;;;484:42:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;484:42:9;;;;834:169:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;834:169:5;-1:-1:-1;;;;;834:169:5;;;;;5576:335:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5576:335:2;-1:-1:-1;;;;;5576:335:2;;;;;384:18:9;;;;;;;;;;;;;;;-1:-1:-1;;384:18:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4237:226:2:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;-1:-1:-1;;;;;4317:30:2;;;;4309:39;;;;;;4358:10;:17;;-1:-1:-1;;;;;4358:17:2;;;;-1:-1:-1;;4385:34:2;-1:-1:-1;;;;;4385:34:2;;;;;;;;4429:27;;;;;;;;;;;;;;;;;4237:226;:::o;2791:301::-;405:6:6;;2869:4:2;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;2889:10:2;;-1:-1:-1;;;2889:10:2;;;;2885:201;;;2944:15;;2922:84;;;;;;2977:10;2922:84;;;;-1:-1:-1;;;;;2922:84:2;;;;;;;;;;;;;;;2944:15;;;;;2922:54;;:84;;;;;;;;;;;;;;2944:15;;2922:84;;;5:2:-1;;;;30:1;27;20:12;5:2;2922:84:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2922:84:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2922:84:2;;-1:-1:-1;2915:91:2;;2885:201;3044:31;3058:8;3068:6;3044:13;:31::i;:::-;3037:38;;2885:201;2791:301;;;;:::o;996:22::-;;;-1:-1:-1;;;996:22:2;;;;;:::o;269:142:1:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;-1:-1:-1;;;;;338:24:1;;;;;;:13;:24;;;;;;:31;;-1:-1:-1;;338:31:1;365:4;338:31;;;379:25;;;338:24;379:25;269:142;:::o;4526:212:2:-;4594:10;;4574:4;;-1:-1:-1;;;4594:10:2;;;;4590:142;;;4641:15;;;;;;;;;-1:-1:-1;;;;;4641:15:2;-1:-1:-1;;;;;4627:42:2;;:44;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4627:44:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4627:44:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4627:44:2;;-1:-1:-1;4620:51:2;;4590:142;-1:-1:-1;4709:12:2;;4590:142;4526:212;:::o;1809:370::-;405:6:6;;1902:4:2;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;-1:-1:-1;;;;;1927:20:2;;;;;;:13;:20;;;;;;;;1926:21;1918:30;;;;;;1962:10;;-1:-1:-1;;;1962:10:2;;;;1958:215;;;2017:15;;1995:91;;;;;;2055:10;1995:91;;;;-1:-1:-1;;;;;1995:91:2;;;;;;;;;;;;;;;;;;;;;;2017:15;;;;;1995:59;;:91;;;;;;;;;;;;;;2017:15;;1995:91;;;5:2:-1;;;;30:1;27;20:12;5:2;1995:91:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1995:91:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1995:91:2;;-1:-1:-1;1988:98:2;;1958:215;2124:38;2143:5;2150:3;2155:6;2124:18;:38::i;:::-;2117:45;;1958:215;1809:370;;;;;:::o;960:30::-;;;-1:-1:-1;;;;;960:30:2;;:::o;430:21:9:-;;;;;;:::o;257:29::-;;;;:::o;455:24::-;;;;:::o;822:87:6:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;557:6:6;;-1:-1:-1;;;557:6:6;;;;549:15;;;;;;;;875:6;:14;;-1:-1:-1;;875:14:6;;;895:9;;;;884:5;;895:9;822:87::o;88:122:1:-;-1:-1:-1;;;;;182:21:1;;159:4;182:21;;;:13;:21;;;;;;;;88:122;;;;:::o;236:26:6:-;;;-1:-1:-1;;;236:26:6;;;;;:::o;3447:358:2:-;405:6:6;;3544:4:2;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;3564:10:2;;-1:-1:-1;;;3564:10:2;;;;3560:239;;;3619:15;;3597:103;;;;;;3661:10;3597:103;;;;-1:-1:-1;;;;;3597:103:2;;;;;;;;;;;;;;;3619:15;;;;;3597:63;;:103;;;;;;;;;;;;;;3619:15;;3597:103;;;5:2:-1;;;;30:1;27;20:12;3560:239:2;3738:50;3761:8;3771:16;3738:22;:50::i;2261:238::-;2338:10;;2318:4;;-1:-1:-1;;;2338:10:2;;;;2334:159;;;2393:15;;2371:53;;;;;;-1:-1:-1;;;;;2371:53:2;;;;;;;;;2393:15;;;;;2371:48;;:53;;;;;;;;;;;;;;2393:15;;2371:53;;;5:2:-1;;;;30:1;27;20:12;5:2;2371:53:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2371:53:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2371:53:2;;-1:-1:-1;2364:60:2;;2334:159;2462:20;2478:3;2462:15;:20::i;:::-;2455:27;;;;531:192:9;579:4;591:8;602:40;636:5;603:27;614:15;;603:6;:10;;:27;;;;:::i;:::-;602:33;:40;:33;:40;:::i;:::-;591:51;;658:10;;652:3;:16;648:55;;;-1:-1:-1;686:10:9;;715:3;531:192;-1:-1:-1;;531:192:9:o;655:85:6:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;405:6:6;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;709:6;:13;;-1:-1:-1;;709:13:6;-1:-1:-1;;;709:13:6;;;728:7;;;;709:13;;728:7;655:85::o;238:20:5:-;;;-1:-1:-1;;;;;238:20:5;;:::o;406::9:-;;;;;;;;;;;;;;;-1:-1:-1;;406:20:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:334:2;405:6:6;;1467:4:2;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;1506:10:2;1492:25;;;;:13;:25;;;;;;;;1491:26;1483:35;;;;;;1532:10;;-1:-1:-1;;;1532:10:2;;;;1528:193;;;1587:15;;1565:80;;;;;;1621:10;1565:80;;;;-1:-1:-1;;;;;1565:80:2;;;;;;;;;;;;;;;1587:15;;;;;1565:55;;:80;;;;;;;;;;;;;;1587:15;;1565:80;;;5:2:-1;;;;30:1;27;20:12;1528:193:2;1683:27;1698:3;1703:6;1683:14;:27::i;2559:150::-;2639:10;;2619:4;;-1:-1:-1;;;2639:10:2;;;;2635:68;;;2672:20;2688:3;2672:15;:20::i;1679:407:9:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;335:2:9;1854:42;;1846:51;;;;;;377:2;1913:28;;1905:37;;;;;;1951:15;:32;;;2028:8;;2004:33;;:9;;2028:8;;2023:2;2018:18;2004:33;:13;:33;:::i;:::-;1991:10;:46;;;2053:15;;2046:35;;;;;;;;;;;;;;;;;;;;;;;;;;1679:407;;:::o;4896:224:2:-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;4978:5:2;;-1:-1:-1;;;;;4978:5:2;4969:8;:15;;;;;;;;;;;:27;;4989:6;4969:27;:19;:27;:::i;:::-;4960:5;;-1:-1:-1;;;;;4960:5:2;4951:8;:15;;;;;;;;;;:45;5021:12;;:24;;5038:6;5021:24;:16;:24;:::i;:::-;5006:12;:39;5055:13;;;;;;;;;;;;;;;;;5099:5;;5078:35;;;;;;;;-1:-1:-1;;;;;5099:5:2;;;;;;-1:-1:-1;;;;;;;;;;;5078:35:2;;;;;;;;;4896:224;:::o;3098:343::-;405:6:6;;3190:4:2;;-1:-1:-1;;;405:6:6;;;;404:7;396:16;;;;;;3210:10:2;;-1:-1:-1;;;3210:10:2;;;;3206:229;;;3265:15;;3243:98;;;;;;3307:10;3243:98;;;;-1:-1:-1;;;;;3243:98:2;;;;;;;;;;;;;;;3265:15;;;;;3243:63;;:98;;;;;;;;;;;;;;3265:15;;3243:98;;;5:2:-1;;;;30:1;27;20:12;3206:229:2;3379:45;3402:8;3412:11;3379:22;:45::i;5344:226::-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;5415:12:2;;:24;;5432:6;5415:24;:16;:24;:::i;:::-;5400:12;:39;5476:5;;-1:-1:-1;;;;;5476:5:2;5467:8;:15;;;;;;;;;;;:27;;5487:6;5467:27;:19;:27;:::i;:::-;5458:5;;-1:-1:-1;;;;;5458:5:2;5449:8;:15;;;;;;;;;;;;:45;;;;5504:14;;;;;;;;;;;;;;;;;;5537:5;;5528:35;;;;;;;;5552:1;;-1:-1:-1;;;;;5537:5:2;;-1:-1:-1;;;;;;;;;;;5528:35:2;;;;;;;;;5344:226;:::o;3887:287::-;3995:10;;3965:14;;-1:-1:-1;;;3995:10:2;;;;3991:177;;;4042:15;;4028:58;;;;;;-1:-1:-1;;;;;4028:58:2;;;;;;;;;;;;;;;;4042:15;;;;;4028:40;;:58;;;;;;;;;;;;;;4042:15;;4028:58;;;5:2:-1;;;;30:1;27;20:12;3991:177:2;4124:33;4140:6;4148:8;4124:15;:33::i;219:34:9:-;;;;:::o;216:46:1:-;;;;;;;;;;;;;;;:::o;417:157::-;654:5:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;-1:-1:-1;;;;;492:27:1;;522:5;492:27;;;:13;:27;;;;;;:35;;-1:-1:-1;;492:35:1;;;537:30;;;522:5;537:30;417:157;:::o;484:42:9:-;-1:-1:-1;;484:42:9;:::o;834:169:5:-;654:5;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;-1:-1:-1;;;;;910:22:5;;;;902:31;;;;;;960:5;;939:37;;-1:-1:-1;;;;;939:37:5;;;;960:5;;939:37;;960:5;;939:37;982:5;:16;;-1:-1:-1;;982:16:5;-1:-1:-1;;;;;982:16:5;;;;;;;;;;834:169::o;5576:335:2:-;654:5:5;;5707:15:2;;-1:-1:-1;;;;;654:5:5;640:10;:19;632:28;;;;;;-1:-1:-1;;;;;5665:31:2;;;;;;:13;:31;;;;;;;;5657:40;;;;;;;;5725:27;5735:16;5725:9;:27::i;:::-;-1:-1:-1;;;;;5762:26:2;;5791:1;5762:26;;;;;;;;;;:30;5817:12;;5707:45;;-1:-1:-1;5817:28:2;;5707:45;5817:28;:16;:28;:::i;:::-;5802:12;:43;5855:49;;;;;;;;-1:-1:-1;;;;;5855:49:2;;;;;;;;;;;;;5576:335;;:::o;1928:183:8:-;2015:10;1995:4;2007:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;2007:29:8;;;;;;;;;;;:38;;;2051;;;;;;;1995:4;;2007:29;;2015:10;;2051:38;;;;;;;;-1:-1:-1;2102:4:8;1928:183;;;;:::o;987:688:9:-;1069:4;;;-1:-1:-1;;;;;1089:17:9;;;;1081:26;;;;;;-1:-1:-1;;;;;1131:15:9;;:8;:15;;;;;;;;;;;1121:25;;;1113:34;;;;;;-1:-1:-1;;;;;1171:14:9;;;;;;:7;:14;;;;;;;;1186:10;1171:26;;;;;;;;1161:36;;;1153:45;;;;;;1216:15;1224:6;1216:7;:15::i;:::-;1205:26;-1:-1:-1;1255:15:9;:6;1205:26;1255:15;:10;:15;:::i;:::-;-1:-1:-1;;;;;1295:15:9;;:8;:15;;;;;;;;;;;1237:33;;-1:-1:-1;1295:27:9;;1315:6;1295:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;1277:15:9;;;:8;:15;;;;;;;;;;;:45;;;;1344:13;;;;;;;:29;;1362:10;1344:29;:17;:29;:::i;:::-;-1:-1:-1;;;;;1328:13:9;;;:8;:13;;;;;;;;;;;:45;;;;1383:14;;;;;:7;:14;;;;;1398:10;1383:26;;;;;;;-1:-1:-1;;;1379:127:9;;;-1:-1:-1;;;;;1461:14:9;;;;;;:7;:14;;;;;;;;1476:10;1461:26;;;;;;;;:38;;1492:6;1461:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;1432:14:9;;;;;;:7;:14;;;;;;;;1447:10;1432:26;;;;;;;:67;1379:127;1527:3;-1:-1:-1;;;;;1511:32:9;1520:5;-1:-1:-1;;;;;1511:32:9;-1:-1:-1;;;;;;;;;;;1532:10:9;1511:32;;;;;;;;;;;;;;;;;;1559:1;1553:3;:7;1549:105;;;1597:5;;-1:-1:-1;;;;;1597:5:9;1588:8;:15;;;;;;;;;;;:24;;1608:3;1588:24;:19;:24;:::i;:::-;1579:5;;;-1:-1:-1;;;;;1579:5:9;;;1570:8;:15;;;;;;;;;;;;:42;;;;1636:5;;1620:27;;;;;;;1636:5;;;;1620:27;;;;-1:-1:-1;;;;;;;;;;;1620:27:9;;;;;;;;1549:105;-1:-1:-1;1666:4:9;;987:688;-1:-1:-1;;;;;987:688:9:o;3057:398:8:-;3176:10;3140:4;3168:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3168:29:8;;;;;;;;;;3207:27;;;3203:164;;;3252:10;3276:1;3244:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3244:29:8;;;;;;;;;:33;3203:164;;;3330:30;:8;3343:16;3330:30;:12;:30;:::i;:::-;3306:10;3298:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3298:29:8;;;;;;;;;:62;3203:164;3381:10;3403:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3372:61:8;;3403:29;;;;;;;;;;;3372:61;;;;;;;;;3381:10;3372:61;;;;;;;;;;;3446:4;3439:11;;3057:398;;;;;;:::o;1348:107:0:-;-1:-1:-1;;;;;1434:16:0;1404:15;1434:16;;;;;;;;;;;;1348:107::o;138:173:7:-;196:7;;215:6;;211:35;;;238:1;231:8;;;;211:35;-1:-1:-1;263:5:7;;;267:1;263;:5;281;;;;;;;;:10;274:18;;;315:265;373:7;462:9;478:1;474;:5;;;;;;;;;315:265;-1:-1:-1;;;;315:265:7:o;727:256:9:-;787:4;799:8;831:15;810;818:6;810:7;:15::i;:::-;799:26;-1:-1:-1;849:15:9;:6;799:26;849:15;:10;:15;:::i;:::-;831:33;;871:31;886:3;891:10;871:14;:31::i;:::-;;918:1;912:3;:7;908:54;;;944:5;;929:26;;-1:-1:-1;;;;;944:5:9;951:3;929:14;:26::i;:::-;;908:54;-1:-1:-1;974:4:9;;727:256;-1:-1:-1;;;;727:256:9:o;698:129:7:-;756:7;783:5;;;801:6;;;;794:14;;;2796:257:8;2926:10;2874:4;2918:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;2918:29:8;;;;;;;;;;:46;;2952:11;2918:46;:33;:46;:::i;:::-;2894:10;2886:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;2886:29:8;;;;;;;;;;;;:78;;;2970:61;;;;;;2886:29;;2970:61;;;;;;;;;;;-1:-1:-1;3044:4:8;2796:257;;;;:::o;584:110:7:-;642:7;664:6;;;;657:14;;;;-1:-1:-1;684:5:7;;;584:110::o;2430:126:8:-;-1:-1:-1;;;;;2526:15:8;;;2504:7;2526:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;2430:126::o;767:379:0:-;830:4;-1:-1:-1;;;;;850:17:0;;;;842:26;;;;;;901:10;892:8;:20;;;;;;;;;;;882:30;;;874:39;;;;;;1015:10;1006:8;:20;;;;;;;;;;;:32;;1031:6;1006:32;:24;:32;:::i;:::-;992:10;983:8;:20;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;1060:13:0;;;;;;:25;;1078:6;1060:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;1044:13:0;;:8;:13;;;;;;;;;;;;:41;;;;1091:33;;;;;;;1044:13;;1100:10;;-1:-1:-1;;;;;;;;;;;1091:33:0;;;;;;;;;-1:-1:-1;1137:4:0;767:379;;;;:::o

Swarm Source

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