Contract 0x2167fb82309cf76513e83b25123f8b0559d6b48f

 

TxHash Block Age From To Value [TxFee]
0x386628f799383aed2f09e96622148ce668944e8c95862fe1c6b6a30672cc322072247839 hrs 22 mins ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.00104664
0x5b2fee316ed6e27f6f3af8e24d42b62ec92dce50fa295c74b6128ee0308a1448722445711 hrs 23 mins ago0xdd5acf59a75de17d78d5898122aa410293152e36  IN   LionCoin0 Ether0.0011134
0xba0a84d8aa18bf5cb5e1690cdef2270a8181d2248a3e0a792da613af5c538165722391714 hrs 17 mins ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.00104664
0xcd9fb8ae4f6a2a5ea8d5d6e3a71cedc1d8a853578fd8df84b71e9a9629e7ac7b722339217 hrs 12 mins ago0x05e280fa84eaa55b341f9730165e269d8d043382  IN   LionCoin0 Ether0.001527988
0x002073f43dcb891d867684392f190a0ddf10c0e76fee19a0ad142909b827ba10722334717 hrs 24 mins ago0x3fb22f27dcbafd06a02a6b6485a0e4819d6d5040  IN   LionCoin0 Ether0.000276714
0x90495188feb35284f1b2edd8b5c0d85175a2e9e507a0bb0f0aac3debdd0e5583722284120 hrs 22 mins ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.00104664
0x19a9f4d8199a5a1b66541a1d8f8f1c0d242b86c072a131c5db565d598995604672215881 day 3 hrs ago0x2233b56797e2b8c912d492044146fdb77238a374  IN   LionCoin0 Ether0.000277098
0x5d4b0e3893f102942451bb9af6915cc18e33e1689c5677b4cb21f1c239efb37472215721 day 3 hrs ago0xb05e8ec2db7d915663d9ab567d2f86b0a4dc731b  IN   LionCoin0 Ether0.0026166
0x675d19a341c7ad290bb1d861ba8345c7af7ce0a2eba8b9c4f79f8fca22b9144072215631 day 3 hrs ago0xed5ca9f59a3b465f5a93c41798aff4cceb5f1b3c  IN   LionCoin0 Ether0.0011166
0x880a108818efb561c608dd5327db06b93455c66452278bd6b3f4af0f8efab52272215631 day 3 hrs ago0x81e9d991a0d5bb3e8802a49b9944cf35d2271481  IN   LionCoin0 Ether0.0011198
0xea24c43f74f3aabafefbfd66a81ecc2e1e7ed69092b5dcac7ecbc233d6b1ee0672215631 day 3 hrs ago0x76a90385b9de04b43d33a7c123657506df858520  IN   LionCoin0 Ether0.0011134
0x490d62000008b6c326d529b429b447e0d914f0125640e9d5a73ae4ef5a47883572213361 day 5 hrs ago0x97079c598f01269a9128cad8e2d1eb0a00b07cd3  IN   LionCoin0 Ether0.00052268
0xbeed65499e975836fb55ec69cb1712752cfe191de4fc0988c706ebba16341a5972212851 day 5 hrs ago0x107c12f680ead09ba2c06bd41a5be38ee4c86222  IN   LionCoin0 Ether0.000277098
0x1a16c6626ea0cc295643fa4b6d9ed159a1d5634b0ba158e53861b4efb4549b8b72212771 day 5 hrs ago0xf08eb21d7b73b32e1d54af2fbd2247c0d8555208  IN   LionCoin0 Ether0.000156996
0x9345c27cc85c8dcd6276508aa63d9ba0d873e6d548ae6648345d81d5e41cded472212121 day 5 hrs ago0x82bdf6fa6ab009b543d2fba4b256bc79c8361590  IN   LionCoin0 Ether0.000044792
0xc08fa3c2114e623e1be33321ccaf812e588f114daea063844330f14b58d02d6672209701 day 7 hrs ago0x82bdf6fa6ab009b543d2fba4b256bc79c8361590  IN   LionCoin0 Ether0.000074792
0x0cb738cd8e337bfa3452478a0154935a79fc275af000dada4d2612cfae597d2e72209531 day 7 hrs ago0x0c881be36c1ff10e94a9c117ab9af12ef8d11106  IN   LionCoin0 Ether0.001123
0x57091e050bc4ade443eddfe1f81df107b2b64a84d62765e42cf62df89389520372208641 day 7 hrs ago0xa28747a0e6858f23d7c7de1af9afa8e72030494c  IN   LionCoin0 Ether0.00018666
0x70b4d151f22262752bed2fc2b3c865e716fb28183559884f4a0a7c9a3f44c82b72201981 day 11 hrs ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.00104664
0x2b305cef9ea47fb79df9cd733fa74490ea89d8a1452a5eaf5142e45d4c31144e72201831 day 11 hrs ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.00074664
0xfb2fefe5b60e36d2907150171ce12291ec4847db43c671275864b40e705ce1e672199421 day 13 hrs ago0x9e9aede219c3074c9ad1e85bfa52fcf5f3cfd66e  IN   LionCoin0 Ether0.00052444
0x1c13bf0d1d8973463d46a5c195560501b7399eb4ea0bb58c397bff80c27a033972195751 day 15 hrs ago0x17e0e32e2dcc804c06d3903b28a71d82eb188bf2  IN   LionCoin0 Ether0.000648354
0x4ae848803c80bfd6488bf3f7940ddddc28f02f4b90c05b7de96af363a65c9bdb72176932 days 2 hrs ago0xe8dc44c626bccfac1f2a714999b26aeefa905975  IN   LionCoin0 Ether0.00044664
0x931e92f87fb0b2f5a0ff655782c38da2f9f09dfbe284ab182081a0b9520fd25472176622 days 2 hrs ago0xbaaf6ea2e2d472de53eea2809c3e6523fd789c33  IN   LionCoin0 Ether0.002145612
0xa5c9b581d87d5ccba85fc7347ed51c619a801231e099f7bc446dfbf8b301065672176472 days 2 hrs ago0xbaaf6ea2e2d472de53eea2809c3e6523fd789c33  IN   LionCoin0 Ether0.00095612
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: CrowdsaleToken
Compiler Version: v0.4.16+commit.d7661dd9
Optimization Enabled: Yes
Runs (Optimizer):  500


Contract Source Code
/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */


/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */






/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}



/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */









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

  function div(uint256 a, uint256 b) internal constant 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 constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

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



/**
 * @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) returns (bool) {
    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) constant returns (uint256 balance) {
    return balances[_owner];
  }

}




/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) 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 amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

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

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    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 specifing the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}



/**
 * Standard EIP-20 token with an interface marker.
 *
 * @notice Interface marker is used by crowdsale contracts to validate that addresses point a good token contract.
 *
 */
contract StandardTokenExt is StandardToken {

  /* Interface declaration */
  function isToken() public constant returns (bool weAre) {
    return true;
  }
}

/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */


/**
 * Upgrade agent interface inspired by Lunyr.
 *
 * Upgrade agent transfers tokens to a new contract.
 * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting.
 */
contract UpgradeAgent {

  uint public originalSupply;

  /** Interface marker */
  function isUpgradeAgent() public constant returns (bool) {
    return true;
  }

  function upgradeFrom(address _from, uint256 _value) public;

}


/**
 * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision.
 *
 * First envisioned by Golem and Lunyr projects.
 */
contract UpgradeableToken is StandardTokenExt {

  /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */
  address public upgradeMaster;

  /** The next contract where the tokens will be migrated. */
  UpgradeAgent public upgradeAgent;

  /** How many tokens we have upgraded by now. */
  uint256 public totalUpgraded;

  /**
   * Upgrade states.
   *
   * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun
   * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet
   * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet
   * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens
   *
   */
  enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading}

  /**
   * Somebody has upgraded some of his tokens.
   */
  event Upgrade(address indexed _from, address indexed _to, uint256 _value);

  /**
   * New upgrade agent available.
   */
  event UpgradeAgentSet(address agent);

  /**
   * Do not allow construction without upgrade master set.
   */
  function UpgradeableToken(address _upgradeMaster) {
    upgradeMaster = _upgradeMaster;
  }

  /**
   * Allow the token holder to upgrade some of their tokens to a new contract.
   */
  function upgrade(uint256 value) public {

      UpgradeState state = getUpgradeState();
      if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) {
        // Called in a bad state
        throw;
      }

      // Validate input value.
      if (value == 0) throw;

      balances[msg.sender] = balances[msg.sender].sub(value);

      // Take tokens out from circulation
      totalSupply = totalSupply.sub(value);
      totalUpgraded = totalUpgraded.add(value);

      // Upgrade agent reissues the tokens
      upgradeAgent.upgradeFrom(msg.sender, value);
      Upgrade(msg.sender, upgradeAgent, value);
  }

  /**
   * Set an upgrade agent that handles
   */
  function setUpgradeAgent(address agent) external {

      if(!canUpgrade()) {
        // The token is not yet in a state that we could think upgrading
        throw;
      }

      if (agent == 0x0) throw;
      // Only a master can designate the next agent
      if (msg.sender != upgradeMaster) throw;
      // Upgrade has already begun for an agent
      if (getUpgradeState() == UpgradeState.Upgrading) throw;

      upgradeAgent = UpgradeAgent(agent);

      // Bad interface
      if(!upgradeAgent.isUpgradeAgent()) throw;
      // Make sure that token supplies match in source and target
      if (upgradeAgent.originalSupply() != totalSupply) throw;

      UpgradeAgentSet(upgradeAgent);
  }

  /**
   * Get the state of the token upgrade.
   */
  function getUpgradeState() public constant returns(UpgradeState) {
    if(!canUpgrade()) return UpgradeState.NotAllowed;
    else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent;
    else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade;
    else return UpgradeState.Upgrading;
  }

  /**
   * Change the upgrade master.
   *
   * This allows us to set a new owner for the upgrade mechanism.
   */
  function setUpgradeMaster(address master) public {
      if (master == 0x0) throw;
      if (msg.sender != upgradeMaster) throw;
      upgradeMaster = master;
  }

  /**
   * Child contract can enable to provide the condition when the upgrade can begun.
   */
  function canUpgrade() public constant returns(bool) {
     return true;
  }

}

/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */




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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() {
    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) onlyOwner {
    require(newOwner != address(0));      
    owner = newOwner;
  }

}




/**
 * Define interface for releasing the token transfer after a successful crowdsale.
 */
contract ReleasableToken is ERC20, Ownable {

  /* The finalizer contract that allows unlift the transfer limits on this token */
  address public releaseAgent;

  /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/
  bool public released = false;

  /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */
  mapping (address => bool) public transferAgents;

  /**
   * Limit token transfer until the crowdsale is over.
   *
   */
  modifier canTransfer(address _sender) {

    if(!released) {
        if(!transferAgents[_sender]) {
            throw;
        }
    }

    _;
  }

  /**
   * Set the contract that can call release and make the token transferable.
   *
   * Design choice. Allow reset the release agent to fix fat finger mistakes.
   */
  function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public {

    // We don't do interface check here as we might want to a normal wallet address to act as a release agent
    releaseAgent = addr;
  }

  /**
   * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period.
   */
  function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public {
    transferAgents[addr] = state;
  }

  /**
   * One way function to release the tokens to the wild.
   *
   * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached).
   */
  function releaseTokenTransfer() public onlyReleaseAgent {
    released = true;
  }

  /** The function can be called only before or after the tokens have been releasesd */
  modifier inReleaseState(bool releaseState) {
    if(releaseState != released) {
        throw;
    }
    _;
  }

  /** The function can be called only by a whitelisted release agent. */
  modifier onlyReleaseAgent() {
    if(msg.sender != releaseAgent) {
        throw;
    }
    _;
  }

  function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) {
    // Call StandardToken.transfer()
   return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) {
    // Call StandardToken.transferForm()
    return super.transferFrom(_from, _to, _value);
  }

}

/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */




/**
 * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net
 *
 * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt
 */


/**
 * Safe unsigned safe math.
 *
 * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli
 *
 * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol
 *
 * Maintained here until merged to mainline zeppelin-solidity.
 *
 */
library SafeMathLib {

  function times(uint a, uint b) returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function minus(uint a, uint b) returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function plus(uint a, uint b) returns (uint) {
    uint c = a + b;
    assert(c>=a);
    return c;
  }

}



/**
 * A token that can increase its supply by another contract.
 *
 * This allows uncapped crowdsale by dynamically increasing the supply when money pours in.
 * Only mint agents, contracts whitelisted by owner, can mint new tokens.
 *
 */
contract MintableToken is StandardTokenExt, Ownable {

  using SafeMathLib for uint;

  bool public mintingFinished = false;

  /** List of agents that are allowed to create new tokens */
  mapping (address => bool) public mintAgents;

  event MintingAgentChanged(address addr, bool state);
  event Minted(address receiver, uint amount);

  /**
   * Create new tokens and allocate them to an address..
   *
   * Only callably by a crowdsale contract (mint agent).
   */
  function mint(address receiver, uint amount) onlyMintAgent canMint public {
    totalSupply = totalSupply.plus(amount);
    balances[receiver] = balances[receiver].plus(amount);

    // This will make the mint transaction apper in EtherScan.io
    // We can remove this after there is a standardized minting event
    Transfer(0, receiver, amount);
  }

  /**
   * Owner can allow a crowdsale contract to mint new tokens.
   */
  function setMintAgent(address addr, bool state) onlyOwner canMint public {
    mintAgents[addr] = state;
    MintingAgentChanged(addr, state);
  }

  modifier onlyMintAgent() {
    // Only crowdsale contracts are allowed to mint new tokens
    if(!mintAgents[msg.sender]) {
        throw;
    }
    _;
  }

  /** Make sure we are not done yet. */
  modifier canMint() {
    if(mintingFinished) throw;
    _;
  }
}



/**
 * A crowdsaled token.
 *
 * An ERC-20 token designed specifically for crowdsales with investor protection and further development path.
 *
 * - The token transfer() is disabled until the crowdsale is over
 * - The token contract gives an opt-in upgrade path to a new contract
 * - The same token can be part of several crowdsales through approve() mechanism
 * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens)
 *
 */
contract CrowdsaleToken is ReleasableToken, MintableToken, UpgradeableToken {

  /** Name and symbol were updated. */
  event UpdatedTokenInformation(string newName, string newSymbol);

  string public name;

  string public symbol;

  uint public decimals;

  /**
   * Construct the token.
   *
   * This token must be created through a team multisig wallet, so that it is owned by that wallet.
   *
   * @param _name Token name
   * @param _symbol Token symbol - should be all caps
   * @param _initialSupply How many tokens we start with
   * @param _decimals Number of decimal places
   * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends.
   */
  function CrowdsaleToken(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable)
    UpgradeableToken(msg.sender) {

    // Create any address, can be transferred
    // to team multisig via changeOwner(),
    // also remember to call setUpgradeMaster()
    owner = msg.sender;

    name = _name;
    symbol = _symbol;

    totalSupply = _initialSupply;

    decimals = _decimals;

    // Create initially all balance on the team multisig
    balances[owner] = totalSupply;

    if(totalSupply > 0) {
      Minted(owner, totalSupply);
    }

    // No more new supply allowed after the token creation
    if(!_mintable) {
      mintingFinished = true;
      if(totalSupply == 0) {
        throw; // Cannot create a token without supply and no minting
      }
    }
  }

  /**
   * When token is released to be transferable, enforce no new tokens can be created.
   */
  function releaseTokenTransfer() public onlyReleaseAgent {
    mintingFinished = true;
    super.releaseTokenTransfer();
  }

  /**
   * Allow upgrade agent functionality kick in only if the crowdsale was success.
   */
  function canUpgrade() public constant returns(bool) {
    return released && super.canUpgrade();
  }

  /**
   * Owner can update token information here.
   *
   * It is often useful to conceal the actual token association, until
   * the token operations, like central issuance or reissuance have been completed.
   *
   * This function allows the token owner to rename the token after the operations
   * have been completed and then point the audience to use the token contract.
   */
  function setTokenInformation(string _name, string _symbol) onlyOwner {
    name = _name;
    symbol = _symbol;

    UpdatedTokenInformation(name, symbol);
  }

}

Contract ABI
[{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"state","type":"bool"}],"name":"setTransferAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setReleaseAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"mintAgents","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"state","type":"bool"}],"name":"setMintAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"name":"setTokenInformation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getUpgradeState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"transferAgents","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":true,"inputs":[],"name":"released","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"canUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalUpgraded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"releaseAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"}],"name":"setUpgradeAgent","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":"isToken","outputs":[{"name":"weAre","type":"bool"}],"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":"master","type":"address"}],"name":"setUpgradeMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_initialSupply","type":"uint256"},{"name":"_decimals","type":"uint256"},{"name":"_mintable","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newName","type":"string"},{"indexed":false,"name":"newSymbol","type":"string"}],"name":"UpdatedTokenInformation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"agent","type":"address"}],"name":"UpgradeAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"MintingAgentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Minted","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"}]

Contract Creation Code
60606040526004805460a060020a60ff02191690556006805460ff1916905534156200002a57600080fd5b60405162001a9d38038062001a9d8339810160405280805182019190602001805182019190602001805191906020018051919060200180519150505b335b5b60038054600160a060020a03191633600160a060020a03161790555b60088054600160a060020a031916600160a060020a0383161790555b5060038054600160a060020a03191633600160a060020a0316179055600b858051620000d29291602001906200019a565b50600c848051620000e89291602001906200019a565b506000838155600d839055600354600160a060020a0316815260016020526040812084905583111562000169576003546000547f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a15b8015156200018d576006805460ff1916600117905560005415156200018d57600080fd5b5b5b505050505062000244565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001dd57805160ff19168380011785556200020d565b828001600101855582156200020d579182015b828111156200020d578251825591602001919060010190620001f0565b5b506200021c92915062000220565b5090565b6200024191905b808211156200021c576000815560010162000227565b5090565b90565b61184980620002546000396000f300606060405236156101885763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302f652a3811461018d57806305d2035b146101b357806306fdde03146101da578063095ea7b31461026557806318160ddd1461029b57806323b872dd146102c057806329ff4f53146102fc578063313ce5671461031d57806340c10f191461034257806342c1867b14610366578063432146751461039957806345977d03146103bf5780634eee966f146103d75780635de4ccb01461046c5780635f412d4f1461049b578063600440cb146104b057806370a08231146104df5780638444b39114610510578063867c2857146105475780638da5cb5b1461057a57806395d89b41146105a957806396132521146106345780639738968c1461065b578063a9059cbb14610682578063c752ff62146106b8578063d1f276d3146106dd578063d7e7088a1461070c578063dd62ed3e1461072d578063eefa597b14610764578063f2fde38b1461078b578063ffeb7d75146107ac575b600080fd5b341561019857600080fd5b6101b1600160a060020a036004351660243515156107cd565b005b34156101be57600080fd5b6101c661083f565b604051901515815260200160405180910390f35b34156101e557600080fd5b6101ed610848565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022a5780820151818401525b602001610211565b50505050905090810190601f1680156102575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561027057600080fd5b6101c6600160a060020a03600435166024356108e6565b604051901515815260200160405180910390f35b34156102a657600080fd5b6102ae61098d565b60405190815260200160405180910390f35b34156102cb57600080fd5b6101c6600160a060020a0360043581169060243516604435610993565b604051901515815260200160405180910390f35b341561030757600080fd5b6101b1600160a060020a03600435166109fb565b005b341561032857600080fd5b6102ae610a70565b60405190815260200160405180910390f35b341561034d57600080fd5b6101b1600160a060020a0360043516602435610a76565b005b341561037157600080fd5b6101c6600160a060020a0360043516610c4a565b604051901515815260200160405180910390f35b34156103a457600080fd5b6101b1600160a060020a03600435166024351515610c5f565b005b34156103ca57600080fd5b6101b1600435610cfe565b005b34156103e257600080fd5b6101b160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610e8395505050505050565b005b341561047757600080fd5b61047f610ff3565b604051600160a060020a03909116815260200160405180910390f35b34156104a657600080fd5b6101b1611002565b005b34156104bb57600080fd5b61047f611036565b604051600160a060020a03909116815260200160405180910390f35b34156104ea57600080fd5b6102ae600160a060020a0360043516611045565b60405190815260200160405180910390f35b341561051b57600080fd5b610523611064565b6040518082600481111561053357fe5b60ff16815260200191505060405180910390f35b341561055257600080fd5b6101c6600160a060020a03600435166110b1565b604051901515815260200160405180910390f35b341561058557600080fd5b61047f6110c6565b604051600160a060020a03909116815260200160405180910390f35b34156105b457600080fd5b6101ed6110d5565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022a5780820151818401525b602001610211565b50505050905090810190601f1680156102575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561063f57600080fd5b6101c6611173565b604051901515815260200160405180910390f35b341561066657600080fd5b6101c6611194565b604051901515815260200160405180910390f35b341561068d57600080fd5b6101c6600160a060020a03600435166024356111cb565b604051901515815260200160405180910390f35b34156106c357600080fd5b6102ae611231565b60405190815260200160405180910390f35b34156106e857600080fd5b61047f611237565b604051600160a060020a03909116815260200160405180910390f35b341561071757600080fd5b6101b1600160a060020a0360043516611246565b005b341561073857600080fd5b6102ae600160a060020a0360043581169060243516611431565b60405190815260200160405180910390f35b341561076f57600080fd5b6101c661145e565b604051901515815260200160405180910390f35b341561079657600080fd5b6101b1600160a060020a0360043516611464565b005b34156107b757600080fd5b6101b1600160a060020a03600435166114c1565b005b60035433600160a060020a039081169116146107e857600080fd5b60045460009074010000000000000000000000000000000000000000900460ff161561081357600080fd5b600160a060020a0383166000908152600560205260409020805460ff19168315151790555b5b505b5050565b60065460ff1681565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b60008115806109185750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b151561092357600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005481565b600454600090849074010000000000000000000000000000000000000000900460ff1615156109e357600160a060020a03811660009081526005602052604090205460ff1615156109e357600080fd5b5b6109ef85858561151d565b91505b5b509392505050565b60035433600160a060020a03908116911614610a1657600080fd5b60045460009074010000000000000000000000000000000000000000900460ff1615610a4157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b5b505b50565b600d5481565b600160a060020a03331660009081526007602052604090205460ff161515610a9d57600080fd5b60065460ff1615610aad57600080fd5b600054733b11ff5f6478c606d74977d1844a05a945a0b74c6366098d4f9091836000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff85160281526004810192909252602482015260440160206040518083038186803b1515610b2857600080fd5b6102c65a03f41515610b3957600080fd5b50505060405180516000908155600160a060020a03841681526001602052604080822054733b11ff5f6478c606d74977d1844a05a945a0b74c93506366098d4f92909185919051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff85160281526004810192909252602482015260440160206040518083038186803b1515610bd657600080fd5b6102c65a03f41515610be757600080fd5b5050506040518051600160a060020a03841660008181526001602052604080822093909355909250907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a35b5b5b5050565b60076020526000908152604090205460ff1681565b60035433600160a060020a03908116911614610c7a57600080fd5b60065460ff1615610c8a57600080fd5b600160a060020a03821660009081526007602052604090819020805460ff19168315151790557f4b0adf6c802794c7dde28a08a4e07131abcff3bf9603cd71f14f90bec7865efa908390839051600160a060020a039092168252151560208201526040908101905180910390a15b5b5b5050565b6000610d08611064565b905060035b816004811115610d1957fe5b1480610d31575060045b816004811115610d2f57fe5b145b1515610d3c57600080fd5b811515610d4857600080fd5b600160a060020a033316600090815260016020526040902054610d71908363ffffffff61163216565b600160a060020a03331660009081526001602052604081209190915554610d9e908363ffffffff61163216565b600055600a54610db4908363ffffffff61164916565b600a55600954600160a060020a031663753e88e533846040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610e2657600080fd5b6102c65a03f11515610e3757600080fd5b5050600954600160a060020a03908116915033167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac8460405190815260200160405180910390a35b5050565b60035433600160a060020a03908116911614610e9e57600080fd5b600b828051610eb192916020019061177d565b50600c818051610ec592916020019061177d565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb46600b600c604051604080825283546002600019610100600184161502019091160490820181905281906020820190606083019086908015610f695780601f10610f3e57610100808354040283529160200191610f69565b820191906000526020600020905b815481529060010190602001808311610f4c57829003601f168201915b5050838103825284546002600019610100600184161502019091160480825260209091019085908015610fdd5780601f10610fb257610100808354040283529160200191610fdd565b820191906000526020600020905b815481529060010190602001808311610fc057829003601f168201915b505094505050505060405180910390a15b5b5050565b600954600160a060020a031681565b60045433600160a060020a0390811691161461101d57600080fd5b6006805460ff19166001179055611032611663565b5b5b565b600854600160a060020a031681565b600160a060020a0381166000908152600160205260409020545b919050565b600061106e611194565b151561107c575060016110ab565b600954600160a060020a03161515611096575060026110ab565b600a5415156110a7575060036110ab565b5060045b5b5b5b90565b60056020526000908152604090205460ff1681565b600354600160a060020a031681565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b60045474010000000000000000000000000000000000000000900460ff1681565b60045460009074010000000000000000000000000000000000000000900460ff1680156111c457506111c461145e565b5b90505b90565b600454600090339074010000000000000000000000000000000000000000900460ff16151561121b57600160a060020a03811660009081526005602052604090205460ff16151561121b57600080fd5b5b61122684846116bd565b91505b5b5092915050565b600a5481565b600454600160a060020a031681565b61124e611194565b151561125957600080fd5b600160a060020a038116151561126e57600080fd5b60085433600160a060020a0390811691161461128957600080fd5b60045b611294611064565b600481111561129f57fe5b14156112aa57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055166361d3d7a66000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561132e57600080fd5b6102c65a03f1151561133f57600080fd5b50505060405180519050151561135457600080fd5b600080546009549091600160a060020a0390911690634b2ba0dd90604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156113bd57600080fd5b6102c65a03f115156113ce57600080fd5b505050604051805190501415156113e457600080fd5b6009547f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc90600160a060020a0316604051600160a060020a03909116815260200160405180910390a15b50565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60015b90565b60035433600160a060020a0390811691161461147f57600080fd5b600160a060020a038116151561149457600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600160a060020a03811615156114d657600080fd5b60085433600160a060020a039081169116146114f157600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152812054909190611564908463ffffffff61164916565b600160a060020a038086166000908152600160205260408082209390935590871681522054611599908463ffffffff61163216565b600160a060020a0386166000908152600160205260409020556115c2818463ffffffff61163216565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b60008282111561163e57fe5b508082035b92915050565b60008282018381101561165857fe5b8091505b5092915050565b60045433600160a060020a0390811691161461167e57600080fd5b6004805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b5b565b60015b90565b600160a060020a0333166000908152600160205260408120546116e6908363ffffffff61163216565b600160a060020a03338116600090815260016020526040808220939093559085168152205461171b908363ffffffff61164916565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106117be57805160ff19168380011785556117eb565b828001600101855582156117eb579182015b828111156117eb5782518255916020019190600101906117d0565b5b506117f89291506117fc565b5090565b6110ab91905b808211156117f85760008155600101611802565b5090565b905600a165627a7a7230582082cdca3bcebb1662a386490a23ab45c1ae1d58d8710b49d86ab02b2b54298300002900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000084c696f6e436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c494f4e00000000000000000000000000000000000000000000000000000000


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

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000000000000000000000cecb8f27f4200f3a000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 4c696f6e436f696e000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 4c494f4e00000000000000000000000000000000000000000000000000000000


   Library Used
SafeMathLib : 0x3b11ff5f6478c606d74977d1844a05a945a0b74c

   Swarm Source:
bzzr://82cdca3bcebb1662a386490a23ab45c1ae1d58d8710b49d86ab02b2b54298300
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.