Sponsored Link:   WELL – WORKING HEALTHCARE U.S. PLATFORM - RAISED $3M IN PRE-ICO – JOIN NOW WITH 40% BONUS
Contract Overview | CommodityAdNetworkToken
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 6550 txns
Token Tracker 0x6fff3806bbac52a20e0d79bc538d527f6a22c96b
  Latest 25 txns from a total Of 6550 transactions View All

TxHash Age From To Value [TxFee]
0xf9e452f2b74f02b7d5cc88abd7a9d8d8abfc33f85c15ea077e29388238d388783 hrs 5 mins ago0x1ba91f367758c96ae1a5e355337ad2de40a57768  IN   CommodityAdNetworkToken0 Ether0.00008173
0xe4ee761f27e0c01352746c4f420b37f1c82daffb4722392c4b8ac3c3d037c0243 hrs 22 mins ago0xce37302f9b525201259c7e4573f8b0b95fae10e1  IN   CommodityAdNetworkToken0 Ether0.000608079709
0x426f525d74d8589f918670926355b57e1caf78a846b4c19757a3e574f3dc577d5 hrs 38 mins ago0x4e862ee177831c91450de08c0f5d33e27b056e03  IN   CommodityAdNetworkToken0 Ether0.000222652
0xea8001104998334d8f9cef737ab0ba76c8e156c8f0569b56127884dc73f5ae865 hrs 42 mins ago0x78566edafae7382317605c75478f4831ef058aea  IN   CommodityAdNetworkToken0 Ether0.002293089
0x7307bc432267347851a9cc768e89c3f3c95ebc85c5c8566ef1ec86378734b5ab7 hrs 38 mins ago0xfea32f8f2e3556b94d20ab6b229685d715406c91  IN   CommodityAdNetworkToken0 Ether0.000354645
0x456011b79fc06f4b30b2e55e977c598a9c87c0fad757f471749773d9057ce6f17 hrs 45 mins agocoinexchange.io  IN   CommodityAdNetworkToken0 Ether0.00141986
0xaa7c0b32572b71442b9bd29d7d19137d3d314bb98c41d82b591d9477cc8e1e9b7 hrs 57 mins ago0x2fbc3ef1906d098cbb34fca099095f9788570327  IN   CommodityAdNetworkToken0 Ether0.00167595
0xe14e70afab83a94f67cd8ab7e4f275c46f6ffb000c86908d12af663abfe4eaf98 hrs 30 mins ago0x6ec6279d442509ea7472d7e6d7fe569c0ba794fa  IN   CommodityAdNetworkToken0 Ether0.000492684
0x54373821d862e75a225019c68ccbbef7690001c3253dcfe351c5fec32d12738e8 hrs 39 mins ago0xf6e214221f5f5798fa8f082ae4461ec2333854cd  IN   CommodityAdNetworkToken0 Ether0.000222652
0x152505abe0fe5401a36441bc5e078370640c7850ed2977ce43051e81163962248 hrs 51 mins ago0x7f5f7b408ef278201ce3c6f8ef30e7e7e99db04b  IN   CommodityAdNetworkToken0 Ether0.00280285
0x7da9ee04570c882823832e7d049f53a81b7dbd2cd87a6738f398bec4873b436f8 hrs 55 mins ago0x59a5208b32e627891c389ebafc644145224006e8  IN   CommodityAdNetworkToken0 Ether0.00056692
0xffd02c3ac379ff790d783129963dd36b4518c887ae8ea5aa57669d799cbd977c10 hrs 38 mins ago0xce37302f9b525201259c7e4573f8b0b95fae10e1  IN   CommodityAdNetworkToken0 Ether0.00141858
0x1e477b2ee59c8400e2458f009edde77e537edb30e70324f08de0eb061f75f35711 hrs 19 mins ago0xc17bf813da3a0cabb0c3906c6482d73551ecb5ce  IN   CommodityAdNetworkToken0 Ether0.000491916
0x2ba275848eaf94bf9a1c0f57de189da1afad0bff3f9f835ee013fe3ec91eb0e811 hrs 39 mins ago0x32c3f4dcaed9ae7721c2294e84cbd1a56763135f  IN   CommodityAdNetworkToken0 Ether0.00141986
0xe02139b2d414f931b38f4ff89abd32c6d027a5d61ef7095138eb9ac530d13ebb1 day 1 hr ago0xe03c23519e18d64f144d2800e30e81b0065c48b5  IN   CommodityAdNetworkToken0 Ether0.001489509
0xa7d0ac1d95e2c9dd589df945fd42dd4bc9d14348b51497fe18020835c1fad8fe1 day 4 hrs ago0xe966a179e2bf02175ea7364cdc746a5aec611cc4  IN   CommodityAdNetworkToken0 Ether0.00055993
0xbfc944cff94cec8aaeda3511e7b08504e2d4096dc9e5f4cb5067d9d70ecf23dd1 day 11 hrs ago0x7cce5b1491f4fb80af1f136cbee5a6823a6aae5d  IN   CommodityAdNetworkToken0 Ether0.001616083
0xb3c89a9f5323b846746b3b4b282ed87023975d1c5eff077bb3cb07a2f3c8410f1 day 16 hrs ago0xcf1b28cf98190af63361adb105b36c8d565e3d19  IN   CommodityAdNetworkToken0 Ether0.000222652
0x2af51625105dc536af4e1effc3fbbf0e422d5cb2b551caf76fc96606bab916921 day 22 hrs ago0x790039879cde40a7d465ef9468b7552db5a05962  IN   CommodityAdNetworkToken0 Ether0.00335574
0x932ab96ea26dfb186d5b463dd488e19c108e7d0787a31bf2b99c43168d4fe3a62 days 11 mins ago0x57db86c7d70721e459e1f4aa9a177a310f5e18b2  IN   CommodityAdNetworkToken0 Ether0.005319675
0xfea3ce6aca54ecc5e829007929fcb799a3d2f3544dd54a9053462e8ab21710742 days 5 hrs ago0xa1969c4eb5e984c4faf99f93b43fd129ec2bf597  IN   CommodityAdNetworkToken0 Ether0.00055929
0x9c740d78eef0861b279ef403a90bf0e0010fa84aa68be838efa4af527a2de75e2 days 6 hrs ago0x72f95de09c3fa8971408d18ede970cdb670b41b4  IN   CommodityAdNetworkToken0 Ether0.002293089
0x12676fe4aa363838b1ee803aa9022b36408694710a0f50bb2fa7e81748746aa52 days 8 hrs ago0x546a651480c406ea1e33e45eb0c879458f6f328b  IN   CommodityAdNetworkToken0 Ether0.002293089
0x092db8e2d82c7e17ee621c00f7c5a6c5d88b33336aea19ae8cd34e54f1fb21852 days 11 hrs ago0x1cb74ef5d3cab32dbd2714e6df317cf361f1623a  IN   CommodityAdNetworkToken0 Ether0.000491148
0x5545507a10dfb7d2ce5c99d1c68e901822fbc67c00d5d826b80a988a15ddfefa2 days 11 hrs ago0xce37302f9b525201259c7e4573f8b0b95fae10e1  IN   CommodityAdNetworkToken0 Ether0.00212787
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 8 Internal Transactions

ParentTxHash Block Age From To Value
0x1fb63061248f12073065e6aa6b74e829b9a749a29852f4f804f85bc28da411c34326139143 days 54 mins ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0xb40c57235dd1de1d4fed9d56e33b1b97d66479d2141.276637906 Ether
0x6b37bbd5c22378d81392f6dc0e34eb92fc95fe00feb758f84f49bb4e22f1a6c44302257151 days 8 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0x6de44b90b364fb015ce8e4a62736845cab2129fe7.83999999999995841 Ether
0x76e17c87a45bf829ba7aeba3c3e0584912ea53668faceb8a3b43e6da8ffdbad64302228151 days 8 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0x6de44b90b364fb015ce8e4a62736845cab2129fe7.82999999999995841 Ether
0x083fb5bd7cdd96c039c9401ebdedff15130486f686f61d7bcdc3461d8adc2b704302216151 days 8 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0x6de44b90b364fb015ce8e4a62736845cab2129fe7.83999999999995841 Ether
0x84cbc5abc71c8a0553d17f703af36d7f189e2c0269efecbc67d2534ff5470c254302116151 days 9 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0x5107efc5372705eea107bb378c6dc532c7fe744d1.02999999999995841 Ether
0x8e4c6203d356df2122b9bfa4c07ca351a662ef49b6ef9d6b722ebb45f706c1554302097151 days 9 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0x5107efc5372705eea107bb378c6dc532c7fe744d1.02599999999995841 Ether
0xe2ec23d772817fd859f83d7ba342d23f3499f8c9aee178fbea80d9788c2e75864280531157 days 11 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0xb40c57235dd1de1d4fed9d56e33b1b97d66479d22,234.459742608859748454 Ether
0xbee4270359c24fce1198595f79aa7be71a58c43140d7c43a5b53fe1038e689004226408172 days 16 hrs ago0x6fff3806bbac52a20e0d79bc538d527f6a22c96b0xb40c57235dd1de1d4fed9d56e33b1b97d66479d24,892.398672530591304793 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity), DelegateCallReturnValue (low-severity) Solidity compiler bugs.

Contract Source Code Verified
Contract Name: Token
Compiler Version: v0.4.14+commit.c2215d46
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
/// auth.sol -- widely-used access control pattern for Ethereum

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).

pragma solidity ^0.4.13;

contract Authority {
    function canCall(address src, address dst, bytes4 sig) constant returns (bool);
}

contract AuthEvents {
    event LogSetAuthority (address indexed authority);
    event LogSetOwner     (address indexed owner);
    event UnauthorizedAccess (address caller, bytes4 sig);
}

contract Auth is AuthEvents {
    Authority  public  authority;
    address public owner;

    function Auth() {
        owner = msg.sender;
        LogSetOwner(msg.sender);
    }

    function setOwner(address owner_) auth {
        owner = owner_;
        LogSetOwner(owner);
    }

    function setAuthority(Authority authority_) auth {
        authority = authority_;
        LogSetAuthority(authority);
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig));
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner && authority == Authority(0)) {
            /*the owner has privileges only as long as no Authority has been defined*/
            return true;
        } else if (authority == Authority(0)) {
            UnauthorizedAccess(src, sig);
            return false;
        } else {
            return authority.canCall(src, this, sig);
        }
    }
}
/*
   Copyright 2017 DappHub, LLC

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

// Token standard API
// https://github.com/ethereum/EIPs/issues/20

contract ERC20Events {
    event Transfer( address indexed from, address indexed to, uint value);
    event Approval( address indexed owner, address indexed spender, uint value);
}

contract ERC20 is ERC20Events{
    function totalSupply() constant returns (uint supply);
    function balanceOf( address who ) constant returns (uint value);
    function allowance( address owner, address spender ) constant returns (uint _allowance);

    function transfer( address to, uint value) returns (bool ok);
    function transferFrom( address from, address to, uint value) returns (bool ok);
    function approve( address spender, uint value ) returns (bool ok);

}
/// math.sol -- mixin for inline numerical wizardry

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).

contract Math {
    
    /*
    standard uint256 functions
     */

    function add(uint256 x, uint256 y) constant internal returns (uint256 z) {
        require((z = x + y) >= x);
    }

    function sub(uint256 x, uint256 y) constant internal returns (uint256 z) {
        require((z = x - y) <= x);
    }

    function mul(uint256 x, uint256 y) constant internal returns (uint256 z) {
        z = x * y;
        require(z == 0 || z >= (x > y ? x : y));
    }

    function div(uint256 x, uint256 y) constant internal returns (uint256 z) {
        require(y > 0);
        z = x / y;
    }

    function min(uint256 x, uint256 y) constant internal returns (uint256 z) {
        return x <= y ? x : y;
    }
    function max(uint256 x, uint256 y) constant internal returns (uint256 z) {
        return x >= y ? x : y;
    }

    /*
    uint128 functions (h is for half)
     */


    function hadd(uint128 x, uint128 y) constant internal returns (uint128 z) {
        require((z = x + y) >= x);
    }

    function hsub(uint128 x, uint128 y) constant internal returns (uint128 z) {
        require((z = x - y) <= x);
    }

    function hmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
        require((z = x * y) >= x);
    }

    function hdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
        require(y > 0);
        z = x / y;
    }

    function hmin(uint128 x, uint128 y) constant internal returns (uint128 z) {
        return x <= y ? x : y;
    }
    function hmax(uint128 x, uint128 y) constant internal returns (uint128 z) {
        return x >= y ? x : y;
    }


    /*
    int256 functions
     */

    function imin(int256 x, int256 y) constant internal returns (int256 z) {
        return x <= y ? x : y;
    }
    function imax(int256 x, int256 y) constant internal returns (int256 z) {
        return x >= y ? x : y;
    }

    /*
    WAD math
     */

    uint128 constant WAD = 10 ** 18;

    function wadd(uint128 x, uint128 y) constant internal returns (uint128) {
        return hadd(x, y);
    }

    function wsub(uint128 x, uint128 y) constant internal returns (uint128) {
        return hsub(x, y);
    }

    function wmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
        z = cast((uint256(x) * y + WAD / 2) / WAD);
    }

    function wdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
        z = cast((uint256(x) * WAD + y / 2) / y);
    }

    function wmin(uint128 x, uint128 y) constant internal returns (uint128) {
        return hmin(x, y);
    }
    function wmax(uint128 x, uint128 y) constant internal returns (uint128) {
        return hmax(x, y);
    }

    /*
    RAY math
     */

    uint128 constant RAY = 10 ** 27;

    function radd(uint128 x, uint128 y) constant internal returns (uint128) {
        return hadd(x, y);
    }

    function rsub(uint128 x, uint128 y) constant internal returns (uint128) {
        return hsub(x, y);
    }

    function rmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
        z = cast((uint256(x) * y + RAY / 2) / RAY);
    }

    function rdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
        z = cast((uint256(x) * RAY + y / 2) / y);
    }

    function rpow(uint128 x, uint64 n) constant internal returns (uint128 z) {
        // This famous algorithm is called "exponentiation by squaring"
        // and calculates x^n with x as fixed-point and n as regular unsigned.
        //
        // It's O(log n), instead of O(n) for naive repeated multiplication.
        //
        // These facts are why it works:
        //
        //  If n is even, then x^n = (x^2)^(n/2).
        //  If n is odd,  then x^n = x * x^(n-1),
        //   and applying the equation for even x gives
        //    x^n = x * (x^2)^((n-1) / 2).
        //
        //  Also, EVM division is flooring and
        //    floor[(n-1) / 2] = floor[n / 2].

        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }

    function rmin(uint128 x, uint128 y) constant internal returns (uint128) {
        return hmin(x, y);
    }
    function rmax(uint128 x, uint128 y) constant internal returns (uint128) {
        return hmax(x, y);
    }

    function cast(uint256 x) constant internal returns (uint128 z) {
        require((z = uint128(x)) == x);
    }

}

contract Migrations {
  address public owner;
  uint public last_completed_migration;

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

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

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

  function upgrade(address new_address) restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}
/// note.sol -- the `note' modifier, for logging calls as events

// Copyright (C) 2017  DappHub, LLC
//
// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).


contract Note {
    event LogNote(
        bytes4   indexed sig,
        address  indexed guy,
        bytes32  indexed foo,
        bytes32  indexed bar,
        uint wad,
        bytes fax
    ) anonymous;

    modifier note {
        bytes32 foo;
        bytes32 bar;

        assembly {
        foo := calldataload(4)
        bar := calldataload(36)
        }

        LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data);

        _;
    }
}
/// stop.sol -- mixin for enable/disable functionality

// Copyright (C) 2017  DappHub, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).


contract Stoppable is Auth, Note {

    bool public stopped;

    modifier stoppable {
        require (!stopped);
        _;
    }
    function stop() auth note {
        stopped = true;
    }
    function start() auth note {
        stopped = false;
    }

}// token.sol -- ERC20 implementation with minting and burning

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).


contract Token is ERC20, Stoppable {

    bytes32 public symbol;    
    string public name; // Optional token name
    uint256 public decimals = 18; // standard token precision. override to customize
    TokenLogic public logic;

    function Token(string name_, bytes32 symbol_) {
        name = name_;
        symbol = symbol_;
    }

    function setLogic(TokenLogic logic_) auth note returns(bool){
        logic = logic_;
        return true;
    }

    function setOwner(address owner_) auth {
        uint wad = balanceOf(owner);
        logic.transfer(owner, owner_, wad);
        Transfer(owner, owner_, wad);
        logic.setOwner(owner_);
        super.setOwner(owner_);
    }


    function totalSupply() constant returns (uint256){
        return logic.totalSupply();
    }

    function balanceOf( address who ) constant returns (uint value) {
        return logic.balanceOf(who);
    }

    function allowance( address owner, address spender ) constant returns (uint _allowance) {
        return logic.allowance(owner, spender);
    }

    function transfer(address dst, uint wad) stoppable note returns (bool) {
        bool retVal = logic.transfer(msg.sender, dst, wad);
        Transfer(msg.sender, dst, wad);
        return retVal;
    }
    
    function transferFrom(address src, address dst, uint wad) stoppable note returns (bool) {
        bool retVal = logic.transferFrom(src, dst, wad);
        Transfer(src, dst, wad);
        return retVal;
    }

    function approve(address guy, uint wad) stoppable note returns (bool) {
        return logic.approve(msg.sender, guy, wad);
    }

    function push(address dst, uint128 wad) returns (bool) {
        return transfer(dst, wad);
    }

    function pull(address src, uint128 wad) returns (bool) {
        return transferFrom(src, msg.sender, wad);
    }

    function mint(uint128 wad) auth stoppable note {
        logic.mint(wad);
        Transfer(this, msg.sender, wad);
    }

    function burn(uint128 wad) auth stoppable note {
        logic.burn(msg.sender, wad);
    }

    function setName(string name_) auth {
        name = name_;
    }

    function setSymbol(bytes32 symbol_) auth {
        symbol = symbol_;
    }

    function () payable {
        require(msg.value > 0);
        uint wad = logic.handlePayment(msg.sender, msg.value);
        Transfer(this, msg.sender, wad);
    }

/*special functions for ICO*/
    function transferEth(address dst, uint wad) {
        require(msg.sender == address(logic));
        require(wad < this.balance);
        dst.transfer(wad);
    }

/*this function is called from logic to trigger the correct event upon receiving ETH*/
    function triggerTansferEvent(address src,  address dst, uint wad) {
        require(msg.sender == address(logic));
        Transfer(src, dst, wad);
    }

    function payout(address dst) auth {
        require(dst != address(0));
        dst.transfer(this.balance);
    }

}

contract TokenData is Auth {
    uint256 public supply;
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public approvals;
    address token;

    modifier tokenOnly {
        assert(msg.sender == token);
        _;
    }

    function TokenData(address token_, uint supply_, address owner_) {
        token = token_;
        supply = supply_;
        owner = owner_;
        balances[owner] = supply;
    }

    function setOwner(address owner_) tokenOnly {
        owner = owner_;
        LogSetOwner(owner);
    }

    function setToken(address token_) auth {
        token = token_;
    }

    function setSupply(uint supply_) tokenOnly {
        supply = supply_;
    }

    function setBalances(address guy, uint balance) tokenOnly {
        balances[guy] = balance;
    }

    function setApprovals(address src, address guy, uint wad) tokenOnly {
        approvals[src][guy] = wad;
    }

}/// base.sol -- basic ERC20 implementation

// Copyright (C) 2015, 2016, 2017  DappHub, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).

contract TokenLogic is ERC20Events, Math, Stoppable {

    TokenData public data;
    Token public token;
    uint public tokensPerWei=300;
    uint public icoStart=1503756000; // = Aug 26 2017 2pm GMT
    uint public icoEnd;   //1504188000 = Aug 31 2017 2pm GMT
    uint public icoSale; //the number of tokens sold during the ICO
    uint public maxIco = 90000000000000000000000000; // the maximum number of tokens sold during ICO

    address[] contributors;

    function TokenLogic(Token token_, TokenData data_, uint icoStart_, uint icoHours_) {
        require(token_ != Token(0x0));

        if(data_ == address(0x0)) {
            data = new TokenData(this, 120000000000000000000000000, msg.sender);
        } else {
            data = data_;
        }
        token = token_;
        icoStart = icoStart_;
        icoEnd = icoStart + icoHours_ * 3600;
    }

    modifier tokenOnly {
        assert(msg.sender == address(token) || msg.sender == address(this));
        _;
    }

    function contributorCount() constant returns(uint) {
        return contributors.length;
    }

    function setOwner(address owner_) tokenOnly {
        owner = owner_;
        LogSetOwner(owner);
        data.setOwner(owner);
    }

    function setToken(Token token_) auth {
        token = token_;
    }

    function setIcoStart(uint icoStart_, uint icoHours_) auth {
        icoStart = icoStart_;
        icoEnd = icoStart + icoHours_ * 3600;
    }

    function setTokensPerWei(uint tokensPerWei_) auth {
        require(tokensPerWei_ > 0);
        tokensPerWei = tokensPerWei_;
    }

    function totalSupply() constant returns (uint256) {
        return data.supply();
    }

    function balanceOf(address src) constant returns (uint256) {
        return data.balances(src);
    }

    function allowance(address src, address guy) constant returns (uint256) {
        return data.approvals(src, guy);
    }
    
    function transfer(address src, address dst, uint wad) tokenOnly returns (bool) {
        require(balanceOf(src) >= wad);
        
        data.setBalances(src, sub(data.balances(src), wad));
        data.setBalances(dst, add(data.balances(dst), wad));
        
        return true;
    }
    
    function transferFrom(address src, address dst, uint wad) tokenOnly returns (bool) {
        require(data.balances(src) >= wad);
        require(data.approvals(src, dst) >= wad);
        
        data.setApprovals(src, dst, sub(data.approvals(src, dst), wad));
        data.setBalances(src, sub(data.balances(src), wad));
        data.setBalances(dst, add(data.balances(dst), wad));
        
        return true;
    }
    
    function approve(address src, address guy, uint256 wad) tokenOnly returns (bool) {

        data.setApprovals(src, guy, wad);
        
        Approval(src, guy, wad);
        
        return true;
    }

    function mint(uint128 wad) tokenOnly {
        data.setBalances(data.owner(), add(data.balances(data.owner()), wad));
        data.setSupply(add(data.supply(), wad));
    }

    function burn(address src, uint128 wad) tokenOnly {
        data.setBalances(src, sub(data.balances(src), wad));
        data.setSupply(sub(data.supply(), wad));
    }

    function returnIcoInvestments(uint contributorIndex) auth {
        /*this can only be done after the ICO close date and if less than 20mio tokens were sold*/
        require(now > icoEnd && icoSale < 20000000000000000000000000);

        address src = contributors[contributorIndex];
        require(src != address(0));

        uint srcBalance = balanceOf(src);

        /*transfer the sent ETH amount minus a 5 finney (0.005 ETH ~ 1USD) tax to pay for Gas*/
        token.transferEth(src, sub(div(srcBalance, tokensPerWei), 5 finney));

        /*give back the tokens*/
        data.setBalances(src, sub(data.balances(src), srcBalance));
        data.setBalances(owner, add(data.balances(owner), srcBalance));
        token.triggerTansferEvent(src, owner, srcBalance);

        /*reset the address after the transfer to avoid errors*/
        contributors[contributorIndex] = address(0);
    }

    function handlePayment(address src, uint eth) tokenOnly returns (uint){
        require(eth > 0);
        /*the time stamp has to be between the start and end times of the ICO*/
        require(now >= icoStart && now <= icoEnd);
        /*no more than 90 mio tokens shall be sold in the ICO*/
        require(icoSale < maxIco);

        uint tokenAmount = mul(tokensPerWei, eth);
//first 10 hours
        if(now < icoStart + (10 * 3600)) {
            tokenAmount = tokenAmount * 125 / 100;
        }
//10 to 34 hours
        else if(now < icoStart + (34 * 3600)) {
            tokenAmount = tokenAmount * 115 / 100;
        }
//34 to 58 hours
        else if(now < icoStart + (58 * 3600)) {
            tokenAmount = tokenAmount * 105 / 100;
        }

        icoSale += tokenAmount;
        if(icoSale > maxIco) {
            uint excess = sub(icoSale, maxIco);
            tokenAmount = sub(tokenAmount, excess);
            token.transferEth(src, div(excess, tokensPerWei));
            icoSale = maxIco;
        }

        require(balanceOf(owner) >= tokenAmount);

        data.setBalances(owner, sub(data.balances(owner), tokenAmount));
        data.setBalances(src, add(data.balances(src), tokenAmount));
        contributors.push(src);

        token.triggerTansferEvent(owner, src, tokenAmount);

        return tokenAmount;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"stop","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"guy","type":"address"},{"name":"wad","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"}],"name":"payout","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint128"}],"name":"push","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"symbol_","type":"bytes32"}],"name":"setSymbol","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint128"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"value","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"logic_","type":"address"}],"name":"setLogic","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"wad","type":"uint128"}],"name":"pull","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint128"}],"name":"burn","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name_","type":"string"}],"name":"setName","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"logic","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"_allowance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transferEth","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"triggerTansferEvent","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"name_","type":"string"},{"name":"symbol_","type":"bytes32"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":true,"inputs":[{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":true,"name":"guy","type":"address"},{"indexed":true,"name":"foo","type":"bytes32"},{"indexed":true,"name":"bar","type":"bytes32"},{"indexed":false,"name":"wad","type":"uint256"},{"indexed":false,"name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"sig","type":"bytes4"}],"name":"UnauthorizedAccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052601260045534156200001557600080fd5b604051620018ff380380620018ff833981016040528080518201919060200180519150505b5b60018054600160a060020a03191633600160a060020a03169081179091557fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a25b60038280516200009b929160200190620000aa565b5060028190555b505062000154565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000ed57805160ff19168380011785556200011d565b828001600101855582156200011d579182015b828111156200011d57825182559160200191906001019062000100565b5b506200012c92915062000130565b5090565b6200015191905b808211156200012c576000815560010162000137565b5090565b90565b61179b80620001646000396000f300606060405236156101435763ffffffff60e060020a60003504166306fdde03811461020857806307da68f514610293578063095ea7b3146102a85780630b7e9c44146102de57806313af4035146102ff57806318160ddd1461032057806323b872dd14610345578063313ce567146103815780633452f51d146103a657806349e65440146103e557806369d3e20e146103fd57806370a082311461041e578063718570001461044f57806375f12b21146104825780637a9e5e4b146104a95780638402181f146104ca5780638da5cb5b1461050957806390bc16931461053857806395d89b4114610559578063a9059cbb1461057e578063be9a6555146105b4578063bf7e214f146105c9578063c47f0027146105f8578063d7dfa0dd1461064b578063dd62ed3e1461067a578063e9bb84c2146106b1578063f36d29e7146106d5575b5b60003481901161015357600080fd5b600554600160a060020a03166368ce90ac333460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156101b257600080fd5b6102c65a03f115156101c357600080fd5b50505060405180519050905033600160a060020a031630600160a060020a03166000805160206117508339815191528360405190815260200160405180910390a35b50005b341561021357600080fd5b61021b6106ff565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102585780820151818401525b60200161023f565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561029e57600080fd5b6102a661079d565b005b34156102b357600080fd5b6102ca600160a060020a036004351660243561083f565b604051901515815260200160405180910390f35b34156102e957600080fd5b6102a6600160a060020a0360043516610942565b005b341561030a57600080fd5b6102a6600160a060020a03600435166109ba565b005b341561032b57600080fd5b610333610b27565b60405190815260200160405180910390f35b341561035057600080fd5b6102ca600160a060020a0360043581169060243516604435610b91565b604051901515815260200160405180910390f35b341561038c57600080fd5b610333610cd1565b60405190815260200160405180910390f35b34156103b157600080fd5b6102ca600160a060020a03600435166001608060020a0360243516610cd7565b604051901515815260200160405180910390f35b34156103f057600080fd5b6102a6600435610cf5565b005b341561040857600080fd5b6102a66001608060020a0360043516610d20565b005b341561042957600080fd5b610333600160a060020a0360043516610e5a565b60405190815260200160405180910390f35b341561045a57600080fd5b6102ca600160a060020a0360043516610ed7565b604051901515815260200160405180910390f35b341561048d57600080fd5b6102ca610f86565b604051901515815260200160405180910390f35b34156104b457600080fd5b6102a6600160a060020a0360043516610f96565b005b34156104d557600080fd5b6102ca600160a060020a03600435166001608060020a0360243516611017565b604051901515815260200160405180910390f35b341561051457600080fd5b61051c611036565b604051600160a060020a03909116815260200160405180910390f35b341561054357600080fd5b6102a66001608060020a0360043516611045565b005b341561056457600080fd5b61033361114f565b60405190815260200160405180910390f35b341561058957600080fd5b6102ca600160a060020a0360043516602435611155565b604051901515815260200160405180910390f35b34156105bf57600080fd5b6102a6611294565b005b34156105d457600080fd5b61051c611330565b604051600160a060020a03909116815260200160405180910390f35b341561060357600080fd5b6102a660046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061133f95505050505050565b005b341561065657600080fd5b61051c611379565b604051600160a060020a03909116815260200160405180910390f35b341561068557600080fd5b610333600160a060020a0360043581169060243516611388565b60405190815260200160405180910390f35b34156106bc57600080fd5b6102a6600160a060020a036004351660243561140e565b005b34156106e057600080fd5b6102a6600160a060020a0360043581169060243516604435611475565b005b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107955780601f1061076a57610100808354040283529160200191610795565b820191906000526020600020905b81548152906001019060200180831161077857829003601f168201915b505050505081565b6107b333600035600160e060020a0319166114cb565b15156107be57600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46001805474ff0000000000000000000000000000000000000000191660a060020a1790555b5b50505b565b60015460009060a060020a900460ff161561085957600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600554600160a060020a031663e1f21c6733878760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561091b57600080fd5b6102c65a03f1151561092c57600080fd5b50505060405180519350505b5b50505b92915050565b61095833600035600160e060020a0319166114cb565b151561096357600080fd5b600160a060020a038116151561097857600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156109b557600080fd5b5b5b50565b60006109d233600035600160e060020a0319166114cb565b15156109dd57600080fd5b6001546109f290600160a060020a0316610e5a565b600554600154919250600160a060020a039081169163beabacc89116848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610a6857600080fd5b6102c65a03f11515610a7957600080fd5b50505060405180515050600154600160a060020a0380841691166000805160206117508339815191528360405190815260200160405180910390a3600554600160a060020a03166313af40358360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b0457600080fd5b6102c65a03f11515610b1557600080fd5b5050506108398261162e565b5b5b5050565b600554600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b7157600080fd5b6102c65a03f11515610b8257600080fd5b50505060405180519150505b90565b600154600090819060a060020a900460ff1615610bad57600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600554600160a060020a03166323b872dd88888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c6f57600080fd5b6102c65a03f11515610c8057600080fd5b50505060405180519050925085600160a060020a031687600160a060020a03166000805160206117508339815191528760405190815260200160405180910390a38293505b5b50505b509392505050565b60045481565b6000610cec83836001608060020a0316611155565b90505b92915050565b610d0b33600035600160e060020a0319166114cb565b1515610d1657600080fd5b60028190555b5b50565b610d3633600035600160e060020a0319166114cb565b1515610d4157600080fd5b60015460a060020a900460ff1615610d5857600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600554600160a060020a03166369d3e20e8460405160e060020a63ffffffff84160281526001608060020a039091166004820152602401600060405180830381600087803b1515610dfe57600080fd5b6102c65a03f11515610e0f57600080fd5b50505033600160a060020a031630600160a060020a0316600080516020611750833981519152856040516001608060020a03909116815260200160405180910390a35b5b50505b5b50565b600554600090600160a060020a03166370a0823183836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb557600080fd5b6102c65a03f11515610ec657600080fd5b50505060405180519150505b919050565b6000610eef33600035600160e060020a0319166114cb565b1515610efa57600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038616179055600192505b5b50505b919050565b60015460a060020a900460ff1681565b610fac33600035600160e060020a0319166114cb565b1515610fb757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a25b5b50565b6000610cec8333846001608060020a0316610b91565b90505b92915050565b600154600160a060020a031681565b61105b33600035600160e060020a0319166114cb565b151561106657600080fd5b60015460a060020a900460ff161561107d57600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600554600160a060020a0316637261e469338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001608060020a03166024820152604401600060405180830381600087803b151561113257600080fd5b6102c65a03f1151561114357600080fd5b5050505b5b50505b5b50565b60025481565b600154600090819060a060020a900460ff161561117157600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a4600554600160a060020a031663beabacc833888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561123357600080fd5b6102c65a03f1151561124457600080fd5b50505060405180519050925085600160a060020a031633600160a060020a03166000805160206117508339815191528760405190815260200160405180910390a38293505b5b50505b5092915050565b6112aa33600035600160e060020a0319166114cb565b15156112b557600080fd5b600435602435808233600160a060020a031660008035600160e060020a0319169034903660405183815260406020820181815290820183905260608201848480828437820191505094505050505060405180910390a46001805474ff0000000000000000000000000000000000000000191690555b5b50505b565b600054600160a060020a031681565b61135533600035600160e060020a0319166114cb565b151561136057600080fd5b60038180516108399291602001906116af565b505b5b50565b600554600160a060020a031681565b600554600090600160a060020a031663dd62ed3e8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156113eb57600080fd5b6102c65a03f115156113fc57600080fd5b50505060405180519150505b92915050565b60055433600160a060020a0390811691161461142957600080fd5b600160a060020a03301631811061143f57600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561083957600080fd5b5b5050565b60055433600160a060020a0390811691161461149057600080fd5b81600160a060020a031683600160a060020a03166000805160206117508339815191528360405190815260200160405180910390a35b505050565b600030600160a060020a031683600160a060020a031614156114ef5750600161093c565b600154600160a060020a0384811691161480156115155750600054600160a060020a0316155b156115225750600161093c565b600054600160a060020a0316151561158a577feb91385a0d70e44b915093d9ddfe6c8b41f2c56729431b1405f40aee5d874be78383604051600160a060020a039092168252600160e060020a03191660208201526040908101905180910390a150600061093c565b60008054600160a060020a03169063b7009613908590309086906040516020015260405160e060020a63ffffffff8616028152600160a060020a039384166004820152919092166024820152600160e060020a03199091166044820152606401602060405180830381600087803b151561160357600080fd5b6102c65a03f1151561161457600080fd5b50505060405180519050905061093c565b5b5b5b92915050565b61164433600035600160e060020a0319166114cb565b151561164f57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a25b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106116f057805160ff191683800117855561171d565b8280016001018555821561171d579182015b8281111561171d578251825591602001919060010190611702565b5b5061172a92915061172e565b5090565b610b8e91905b8082111561172a5760008155600101611734565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058202d06e9b24ac1b5012982abbebf364f7b9ef9bdbdacf7ebdd4958a13035b2abe200290000000000000000000000000000000000000000000000000000000000000040434458000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e6574776f726b00000000000000000000000000000000000000000000000000

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

-----Decoded View---------------
Found 4 constructor arguments :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 4344580000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [3] : 4e6574776f726b00000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://2d06e9b24ac1b5012982abbebf364f7b9ef9bdbdacf7ebdd4958a13035b2abe2

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.