Contract 0xf70a642bd387f94380ffb90451c2c81d4eb82cbc

 

TxHash Block Age From To Value [TxFee]
0x8ad5bfd02b1197532d26ef239ab93399dc7e9d205ab485d7e3bf8c629a17cc21722190621 hrs 37 mins ago0xfc1b5411d72b8b5f95da27320aca7b7528d32c97  IN   StarbaseToken0 Ether0.00045758
0xb1b5e562e520bda49f8397f20483f8500758acc7bf635758cdefef521970728a72196891 day 10 hrs ago0xd0a56ac1e6a6fa8edd38a101c9ccfcbdc41ff23a  IN   StarbaseToken0 Ether0.000320306
0x1d0c2571cf810b69266bb2b6b6df929747713591664a5cf1c9664bb8e4bbd0d272196801 day 10 hrs ago0xd0a56ac1e6a6fa8edd38a101c9ccfcbdc41ff23a  IN   StarbaseToken0 Ether0.000411822
0x24d25adac99e2c4237d4ee325bf86aceb970168dbd8c541d265ef3b7624ce8eb72195711 day 11 hrs ago0x36d7c52df765b7b6fdcd01d71a30226321b2df34  IN   StarbaseToken0 Ether0.002919812
0x3ccb041c1d55badabcb852722f4da2b5cc0689688fe967925512dc58bddbc03c72173352 days 7 mins ago0xeb68aa2764b4a9a943658b2e61db4c902b2ebf85  IN   StarbaseToken0 Ether0.00071676
0x4b8f3acab7e17ff81d690d0a42bd26c10bdc9859413611eae5e7d01d6e36e6c772142892 days 17 hrs ago0x9d37b7e9b6a0ddef8cf39f154e736d7a9d1a0ce3  IN   StarbaseToken0 Ether0.00059602
0xda7c6d6c45e6a11da528b5e5b9858b6aac8793584d4552dd74fcf278bf7f2f4472107373 days 13 hrs ago0x41d40ed53549eb16cc983c558c575baafea8913e  IN   StarbaseToken0 Ether0.000183032
0x9e4b46fd7ddf7cda8e4b98a5eb20342d52923be4c9d5e60207815553b117e7c472105313 days 14 hrs ago0x41d40ed53549eb16cc983c558c575baafea8913e  IN   StarbaseToken0 Ether0.00018252
0x924d6c97d44e8b8f7ca37656afaf9f131aff93ecf9a71d07e39cadd80d558a7c72066584 days 12 hrs agoHitBTC_2  IN   StarbaseToken0 Ether0.0003930608
0x46745fa2be9f38505e3cf45df9196479b23790e90478478e958339c1a0e8e85572066574 days 12 hrs agoHitBTC_3  IN   StarbaseToken0 Ether0.0001161316
0x2d3c6bc7b2d7e056d28de49c4add445d88d5e3aee7dbd1e7145a768a44ffb43872064984 days 13 hrs ago0x4cf47d9730a9740f140265d46c5e0cb7e73893a6  IN   StarbaseToken0 Ether0.00089204
0xff2cac4038485fe801b49ee2b1ee83e499950f258cea2c55cd866db69283ef2572020475 days 15 hrs ago0x83adddab4f14be89753301c3501e9794fc635d5c  IN   StarbaseToken0 Ether0.000401994
0xc8c4ea358f28933f4e82f19cb6791dcfb37ef4760f0c82dc01da0b764ca7cefe72019425 days 15 hrs ago0xa44db7ef03c1c87530fe2aaba58a0b6b01d3c3e1  IN   StarbaseToken0 Ether0.001836554
0x69ac12e9af57ad262e04511e4bb74ab4427d9548fd4396a72ee4b02a55b5133471926547 days 14 hrs ago0x8df8274f15f7d25fe0bdb46e9ccacd7fcf566908  IN   StarbaseToken0 Ether0.000183544
0x6ff3b03b41b3fe25a13170304610b0fe03c33ec92c6ebef1e804a87425998aeb71926467 days 14 hrs ago0x81adf8a4c9bc34b11e4342f2434e749aeaec50f2  IN   StarbaseToken0 Ether0.000179176
0x3ee6ea0c2bbd1dc534a6961862fd289226c98c5c506ff53bbc68350708aacb55717928210 days 7 hrs ago0x36d7c52df765b7b6fdcd01d71a30226321b2df34  IN   StarbaseToken0 Ether0.005840996
0x9a37a5f5d37919be84cafb5ff35da3d486192d03a83d8ac2acf2184e08dc06eb717895410 days 9 hrs ago0x36d7c52df765b7b6fdcd01d71a30226321b2df34  IN   StarbaseToken0 Ether0.005096
0xbedd371a05e6ccbb328edd2c863a4afc08823f3bffb97c93f46c413f391a736e717892110 days 9 hrs ago0x36d7c52df765b7b6fdcd01d71a30226321b2df34  IN   StarbaseToken0 Ether0.003528
0x49bf861c8a4f5a2111b1d345bab1b5192ac9f28faefb99933e82198398b02624715286415 days 16 hrs ago0x2b790f9d722f8bab9c6ed6088581c181a06c5f62  IN   StarbaseToken0 Ether0.000401994
0x0cc1afe7823bdc4ac70dc760b2676f5092a53d002dce14aa013280016172327f714611217 days 1 hr agoHitBTC_2  IN   StarbaseToken0 Ether0.000536994
0xc9874bcebf2ed30a8acf57a9a6fe8800870b6c9cec755ad7d8a7911ac622a424714487017 days 7 hrs ago0xb3eb8abcf4000ec7e66a5cb5ee0c83a76269d969  IN   StarbaseToken0 Ether0.000356304
0x475f3b2e6ce64a384b4f50cc6b18f4b95300b66c3bde1682d9f3c6e57141706d714484817 days 8 hrs ago0xb3eb8abcf4000ec7e66a5cb5ee0c83a76269d969  IN   StarbaseToken0 Ether0.000356304
0xe3197cd2d7d86c8d21c9041793817e7f481fad84f06383087e23c030b9d1492d714441417 days 10 hrs ago0xb3eb8abcf4000ec7e66a5cb5ee0c83a76269d969  IN   StarbaseToken0 Ether0.000400842
0x4c3794bbd9d21b551254e5fd0a7142ef03ec4a27aae8c178a91ed588a86b5973714440517 days 10 hrs ago0xb3eb8abcf4000ec7e66a5cb5ee0c83a76269d969  IN   StarbaseToken0 Ether0.000400842
0xafdd789709865896468033e630db8d2951c19f46a1cdccd00fb22199ebca4a10714439017 days 10 hrs ago0xb3eb8abcf4000ec7e66a5cb5ee0c83a76269d969  IN   StarbaseToken0 Ether0.000400842
[ 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: StarbaseToken
Compiler Version: v0.4.16+commit.d7661dd9
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.13;

/**
 * @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 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) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}


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

  mapping(address => uint256) balances;

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

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

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

}

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

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @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 amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _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[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

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

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

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

}

contract AbstractStarbaseCrowdsale {
    function startDate() constant returns (uint256) {}
    function endedAt() constant returns (uint256) {}
    function isEnded() constant returns (bool);
    function totalRaisedAmountInCny() constant returns (uint256);
    function numOfPurchasedTokensOnCsBy(address purchaser) constant returns (uint256);
    function numOfPurchasedTokensOnEpBy(address purchaser) constant returns (uint256);
}

contract AbstractStarbaseMarketingCampaign {}

/// @title Token contract - ERC20 compatible Starbase token contract.
/// @author Starbase PTE. LTD. - <[email protected]>
contract StarbaseToken is StandardToken {
    /*
     *  Events
     */
    event PublicOfferingPlanDeclared(uint256 tokenCount, uint256 unlockCompanysTokensAt);
    event MvpLaunched(uint256 launchedAt);
    event LogNewFundraiser (address indexed fundraiserAddress, bool isBonaFide);
    event LogUpdateFundraiser(address indexed fundraiserAddress, bool isBonaFide);

    /*
     *  Types
     */
    struct PublicOfferingPlan {
        uint256 tokenCount;
        uint256 unlockCompanysTokensAt;
        uint256 declaredAt;
    }

    /*
     *  External contracts
     */
    AbstractStarbaseCrowdsale public starbaseCrowdsale;
    AbstractStarbaseMarketingCampaign public starbaseMarketingCampaign;

    /*
     *  Storage
     */
    address public company;
    PublicOfferingPlan[] public publicOfferingPlans;  // further crowdsales
    mapping(address => uint256) public initialEcTokenAllocation;    // Initial token allocations for Early Contributors
    uint256 public mvpLaunchedAt;  // 0 until a MVP of Starbase Platform launches
    mapping(address => bool) private fundraisers; // Fundraisers are vetted addresses that are allowed to execute functions within the contract

    /*
     *  Constants / Token meta data
     */
    string constant public name = "Starbase";  // Token name
    string constant public symbol = "STAR";  // Token symbol
    uint8 constant public decimals = 18;
    uint256 constant public initialSupply = 1000000000e18; // 1B STAR tokens
    uint256 constant public initialCompanysTokenAllocation = 750000000e18;  // 750M
    uint256 constant public initialBalanceForCrowdsale = 175000000e18;  // CS(125M)+EP(50M)
    uint256 constant public initialBalanceForMarketingCampaign = 12500000e18;   // 12.5M

    /*
     *  Modifiers
     */
    modifier onlyCrowdsaleContract() {
        assert(msg.sender == address(starbaseCrowdsale));
        _;
    }

    modifier onlyMarketingCampaignContract() {
        assert(msg.sender == address(starbaseMarketingCampaign));
        _;
    }

    modifier onlyFundraiser() {
        // Only rightful fundraiser is permitted.
        assert(isFundraiser(msg.sender));
        _;
    }

    modifier onlyBeforeCrowdsale() {
        require(starbaseCrowdsale.startDate() == 0);
        _;
    }

    modifier onlyAfterCrowdsale() {
        require(starbaseCrowdsale.isEnded());
        _;
    }

    modifier onlyPayloadSize(uint size) {
        assert(msg.data.length == size + 4);
        _;
    }

    /*
     *  Contract functions
     */

    /**
     * @dev Contract constructor function
     * @param starbaseCompanyAddr The address that will holds untransferrable tokens
     * @param starbaseCrowdsaleAddr Address of the crowdsale contract
     * @param starbaseMarketingCampaignAddr The address of the marketing campaign contract
     */

    function StarbaseToken(
        address starbaseCompanyAddr,
        address starbaseCrowdsaleAddr,
        address starbaseMarketingCampaignAddr
    ) {
        assert(
            starbaseCompanyAddr != 0 &&
            starbaseCrowdsaleAddr != 0 &&
            starbaseMarketingCampaignAddr != 0);

        starbaseCrowdsale = AbstractStarbaseCrowdsale(starbaseCrowdsaleAddr);
        starbaseMarketingCampaign = AbstractStarbaseMarketingCampaign(starbaseMarketingCampaignAddr);
        company = starbaseCompanyAddr;

        // msg.sender becomes first fundraiser
        fundraisers[msg.sender] = true;
        LogNewFundraiser(msg.sender, true);

        // Tokens for crowdsale and early purchasers
        balances[address(starbaseCrowdsale)] = initialBalanceForCrowdsale;
        Transfer(0, address(starbaseCrowdsale), initialBalanceForCrowdsale);

        // Tokens for marketing campaign supporters
        balances[address(starbaseMarketingCampaign)] = initialBalanceForMarketingCampaign;
        Transfer(0, address(starbaseMarketingCampaign), initialBalanceForMarketingCampaign);

        // Tokens for early contributors, should be allocated by function
        balances[0] = 62500000e18; // 62.5M

        // Starbase company holds untransferrable tokens initially
        balances[starbaseCompanyAddr] = initialCompanysTokenAllocation; // 750M
        Transfer(0, starbaseCompanyAddr, initialCompanysTokenAllocation);

        totalSupply = initialSupply;    // 1B
    }

    /**
     * @dev Setup function sets external contracts' addresses
     * @param starbaseCrowdsaleAddr Crowdsale contract address.
     * @param starbaseMarketingCampaignAddr Marketing campaign contract address
     */
    function setup(address starbaseCrowdsaleAddr, address starbaseMarketingCampaignAddr)
        external
        onlyFundraiser
        onlyBeforeCrowdsale
        returns (bool)
    {
        require(starbaseCrowdsaleAddr != 0 && starbaseMarketingCampaignAddr != 0);
        assert(balances[address(starbaseCrowdsale)] == initialBalanceForCrowdsale);
        assert(balances[address(starbaseMarketingCampaign)] == initialBalanceForMarketingCampaign);

        // Move the balances to the new ones
        balances[address(starbaseCrowdsale)] = 0;
        balances[address(starbaseMarketingCampaign)] = 0;
        balances[starbaseCrowdsaleAddr] = initialBalanceForCrowdsale;
        balances[starbaseMarketingCampaignAddr] = initialBalanceForMarketingCampaign;

        // Update the references
        starbaseCrowdsale = AbstractStarbaseCrowdsale(starbaseCrowdsaleAddr);
        starbaseMarketingCampaign = AbstractStarbaseMarketingCampaign(starbaseMarketingCampaignAddr);
        return true;
    }

    /*
     *  External functions
     */

    /**
     * @dev Returns number of declared public offering plans
     */
    function numOfDeclaredPublicOfferingPlans()
        external
        constant
        returns (uint256)
    {
        return publicOfferingPlans.length;
    }

    /**
     * @dev Declares a public offering plan to make company's tokens transferable
     * @param tokenCount Number of tokens to transfer.
     * @param unlockCompanysTokensAt Time of the tokens will be unlocked
     */
    function declarePublicOfferingPlan(uint256 tokenCount, uint256 unlockCompanysTokensAt)
        external
        onlyFundraiser
        onlyAfterCrowdsale
        returns (bool)
    {
        assert(tokenCount <= 100000000e18);    // shall not exceed 100M tokens
        assert(SafeMath.sub(now, starbaseCrowdsale.endedAt()) >= 180 days);   // shall not be declared for 6 months after the crowdsale ended
        assert(SafeMath.sub(unlockCompanysTokensAt, now) >= 60 days);   // tokens must be untransferable at least for 2 months

        // check if last declaration was more than 6 months ago
        if (publicOfferingPlans.length > 0) {
            uint256 lastDeclaredAt =
                publicOfferingPlans[publicOfferingPlans.length - 1].declaredAt;
            assert(SafeMath.sub(now, lastDeclaredAt) >= 180 days);
        }

        uint256 totalDeclaredTokenCount = tokenCount;
        for (uint8 i; i < publicOfferingPlans.length; i++) {
            totalDeclaredTokenCount = SafeMath.add(totalDeclaredTokenCount, publicOfferingPlans[i].tokenCount);
        }
        assert(totalDeclaredTokenCount <= initialCompanysTokenAllocation);   // shall not exceed the initial token allocation

        publicOfferingPlans.push(
            PublicOfferingPlan(tokenCount, unlockCompanysTokensAt, now));

        PublicOfferingPlanDeclared(tokenCount, unlockCompanysTokensAt);
    }

    /**
     * @dev Allocate tokens to a marketing supporter from the marketing campaign share
     * @param to Address to where tokens are allocated
     * @param value Number of tokens to transfer
     */
    function allocateToMarketingSupporter(address to, uint256 value)
        external
        onlyMarketingCampaignContract
        returns (bool)
    {
        require(to != address(0));
        return allocateFrom(address(starbaseMarketingCampaign), to, value);
    }

    /**
     * @dev Allocate tokens to an early contributor from the early contributor share
     * @param to Address to where tokens are allocated
     * @param value Number of tokens to transfer
     */
    function allocateToEarlyContributor(address to, uint256 value)
        external
        onlyFundraiser
        returns (bool)
    {
        require(to != address(0));
        initialEcTokenAllocation[to] =
            SafeMath.add(initialEcTokenAllocation[to], value);
        return allocateFrom(0, to, value);
    }

    /**
     * @dev Issue new tokens according to the STAR token inflation limits
     * @param _for Address to where tokens are allocated
     * @param value Number of tokens to issue
     */
    function issueTokens(address _for, uint256 value)
        external
        onlyFundraiser
        onlyAfterCrowdsale
        returns (bool)
    {
        require(_for != address(0));
        // check if the value under the limits
        assert(value <= numOfInflatableTokens());

        totalSupply = SafeMath.add(totalSupply, value);
        balances[_for] = SafeMath.add(balances[_for], value);
        return true;
    }

    /**
     * @dev Declares Starbase MVP has been launched
     * @param launchedAt When the MVP launched (timestamp)
     */
    function declareMvpLaunched(uint256 launchedAt)
        external
        onlyFundraiser
        onlyAfterCrowdsale
        returns (bool)
    {
        require(mvpLaunchedAt == 0); // overwriting the launch date is not permitted
        require(launchedAt <= now);
        require(starbaseCrowdsale.isEnded());

        mvpLaunchedAt = launchedAt;
        MvpLaunched(launchedAt);
        return true;
    }

    /**
     * @dev Allocate tokens to a crowdsale or early purchaser from the crowdsale share
     * @param to Address to where tokens are allocated
     * @param value Number of tokens to transfer
     */
    function allocateToCrowdsalePurchaser(address to, uint256 value)
        external
        onlyCrowdsaleContract
        onlyAfterCrowdsale
        returns (bool)
    {
        require(to != address(0));
        return allocateFrom(address(starbaseCrowdsale), to, value);
    }

    /*
     *  Public functions
     */

    /**
     * @dev Transfers sender's tokens to a given address. Returns success.
     * @param to Address of token receiver.
     * @param value Number of tokens to transfer.
     */
    function transfer(address to, uint256 value) public onlyPayloadSize(2*32) returns (bool) {
        assert(isTransferable(msg.sender, value));
        return super.transfer(to, value);
    }

    /**
     * @dev Allows third party to transfer tokens from one address to another. Returns success.
     * @param from Address from where tokens are withdrawn.
     * @param to Address to where tokens are sent.
     * @param value Number of tokens to transfer.
     */
    function transferFrom(address from, address to, uint256 value) public onlyPayloadSize(3*32) returns (bool) {
        assert(isTransferable(from, value));
        return super.transferFrom(from, to, value);
    }

    /**
     * @dev Adds fundraiser. Only called by another fundraiser.
     * @param fundraiserAddress The address in check
     */
    function addFundraiser(address fundraiserAddress) public onlyFundraiser {
        require(fundraiserAddress != address(0));
        assert(!isFundraiser(fundraiserAddress));

        fundraisers[fundraiserAddress] = true;
        LogNewFundraiser(fundraiserAddress, true);
    }

    /**
     * @dev Update fundraiser address rights.
     * @param fundraiserAddress The address to update
     * @param isBonaFide Boolean that denotes whether fundraiser is active or not.
     */
    function updateFundraiser(address fundraiserAddress, bool isBonaFide)
       public
       onlyFundraiser
       returns(bool)
    {
        assert(isFundraiser(fundraiserAddress));

        fundraisers[fundraiserAddress] = isBonaFide;
        LogUpdateFundraiser(fundraiserAddress, isBonaFide);
        return true;
    }

    /**
     * @dev Returns whether fundraiser address has rights.
     * @param fundraiserAddress The address in check
     */
    function isFundraiser(address fundraiserAddress) constant public returns(bool) {
        return fundraisers[fundraiserAddress];
    }

    /**
     * @dev Returns whether the transferring of tokens is available fundraiser.
     * @param from Address of token sender
     * @param tokenCount Number of tokens to transfer.
     */
    function isTransferable(address from, uint256 tokenCount)
        constant
        public
        returns (bool)
    {
        if (tokenCount == 0 || balances[from] < tokenCount) {
            return false;
        }

        // company's tokens may be locked up
        if (from == company) {
            if (tokenCount > numOfTransferableCompanysTokens()) {
                return false;
            }
        }

        uint256 untransferableTokenCount = 0;

        // early contributor's tokens may be locked up
        if (initialEcTokenAllocation[from] > 0) {
            untransferableTokenCount = SafeMath.add(
                untransferableTokenCount,
                numOfUntransferableEcTokens(from));
        }

        // EP and CS purchasers' tokens should be untransferable initially
        if (starbaseCrowdsale.isEnded()) {
            uint256 passedDays =
                SafeMath.sub(now, starbaseCrowdsale.endedAt()) / 86400; // 1d = 86400s
            if (passedDays < 7) {  // within a week
                // crowdsale purchasers cannot transfer their tokens for a week
                untransferableTokenCount = SafeMath.add(
                    untransferableTokenCount,
                    starbaseCrowdsale.numOfPurchasedTokensOnCsBy(from));
            }
            if (passedDays < 14) {  // within two weeks
                // early purchasers cannot transfer their tokens for two weeks
                untransferableTokenCount = SafeMath.add(
                    untransferableTokenCount,
                    starbaseCrowdsale.numOfPurchasedTokensOnEpBy(from));
            }
        }

        uint256 transferableTokenCount =
            SafeMath.sub(balances[from], untransferableTokenCount);

        if (transferableTokenCount < tokenCount) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * @dev Returns the number of transferable company's tokens
     */
    function numOfTransferableCompanysTokens() constant public returns (uint256) {
        uint256 unlockedTokens = 0;
        for (uint8 i; i < publicOfferingPlans.length; i++) {
            PublicOfferingPlan memory plan = publicOfferingPlans[i];
            if (plan.unlockCompanysTokensAt <= now) {
                unlockedTokens = SafeMath.add(unlockedTokens, plan.tokenCount);
            }
        }
        return SafeMath.sub(
            balances[company],
            initialCompanysTokenAllocation - unlockedTokens);
    }

    /**
     * @dev Returns the number of untransferable tokens of the early contributor
     * @param _for Address of early contributor to check
     */
    function numOfUntransferableEcTokens(address _for) constant public returns (uint256) {
        uint256 initialCount = initialEcTokenAllocation[_for];
        if (mvpLaunchedAt == 0) {
            return initialCount;
        }

        uint256 passedWeeks = SafeMath.sub(now, mvpLaunchedAt) / 7 days;
        if (passedWeeks <= 52) {    // a year ≈ 52 weeks
            // all tokens should be locked up for a year
            return initialCount;
        }

        // unlock 1/52 tokens every weeks after a year
        uint256 transferableTokenCount = initialCount / 52 * (passedWeeks - 52);
        if (transferableTokenCount >= initialCount) {
            return 0;
        } else {
            return SafeMath.sub(initialCount, transferableTokenCount);
        }
    }

    /**
     * @dev Returns number of tokens which can be issued according to the inflation rules
     */
    function numOfInflatableTokens() constant public returns (uint256) {
        if (starbaseCrowdsale.endedAt() == 0) {
            return 0;
        }
        uint256 passedDays = SafeMath.sub(now, starbaseCrowdsale.endedAt()) / 86400;  // 1d = 60s * 60m * 24h = 86400s
        uint256 passedYears = passedDays * 100 / 36525;    // about 365.25 days in a year
        uint256 inflatedSupply = initialSupply;
        for (uint256 i; i < passedYears; i++) {
            inflatedSupply = SafeMath.add(inflatedSupply, SafeMath.mul(inflatedSupply, 25) / 1000); // 2.5%/y = 0.025/y
        }

        uint256 remainderedDays = passedDays * 100 % 36525 / 100;
        if (remainderedDays > 0) {
            uint256 inflatableTokensOfNextYear =
                SafeMath.mul(inflatedSupply, 25) / 1000;
            inflatedSupply = SafeMath.add(inflatedSupply, SafeMath.mul(
                inflatableTokensOfNextYear, remainderedDays * 100) / 36525);
        }

        return SafeMath.sub(inflatedSupply, totalSupply);
    }

    /*
     *  Internal functions
     */

    /**
     * @dev Allocate tokens value from an address to another one. This function is only called internally.
     * @param from Address from where tokens come
     * @param to Address to where tokens are allocated
     * @param value Number of tokens to transfer
     */
    function allocateFrom(address from, address to, uint256 value) internal returns (bool) {
        assert(value > 0 && balances[from] >= value);
        balances[from] = SafeMath.sub(balances[from], value);
        balances[to] = SafeMath.add(balances[to], value);
        Transfer(from, to, value);
        return true;
    }
}

Contract ABI
[{"constant":true,"inputs":[],"name":"numOfInflatableTokens","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"allocateToCrowdsalePurchaser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numOfDeclaredPublicOfferingPlans","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"allocateToMarketingSupporter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"starbaseCrowdsaleAddr","type":"address"},{"name":"starbaseMarketingCampaignAddr","type":"address"}],"name":"setup","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starbaseMarketingCampaign","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"launchedAt","type":"uint256"}],"name":"declareMvpLaunched","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"allocateToEarlyContributor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"initialEcTokenAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"value","type":"uint256"}],"name":"issueTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numOfTransferableCompanysTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"company","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":"","type":"uint256"}],"name":"publicOfferingPlans","outputs":[{"name":"tokenCount","type":"uint256"},{"name":"unlockCompanysTokensAt","type":"uint256"},{"name":"declaredAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"fundraiserAddress","type":"address"}],"name":"isFundraiser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"from","type":"address"},{"name":"tokenCount","type":"uint256"}],"name":"isTransferable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starbaseCrowdsale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialBalanceForMarketingCampaign","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialBalanceForCrowdsale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialCompanysTokenAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"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":false,"inputs":[{"name":"fundraiserAddress","type":"address"},{"name":"isBonaFide","type":"bool"}],"name":"updateFundraiser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenCount","type":"uint256"},{"name":"unlockCompanysTokensAt","type":"uint256"}],"name":"declarePublicOfferingPlan","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mvpLaunchedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_for","type":"address"}],"name":"numOfUntransferableEcTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fundraiserAddress","type":"address"}],"name":"addFundraiser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"starbaseCompanyAddr","type":"address"},{"name":"starbaseCrowdsaleAddr","type":"address"},{"name":"starbaseMarketingCampaignAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenCount","type":"uint256"},{"indexed":false,"name":"unlockCompanysTokensAt","type":"uint256"}],"name":"PublicOfferingPlanDeclared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"launchedAt","type":"uint256"}],"name":"MvpLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fundraiserAddress","type":"address"},{"indexed":false,"name":"isBonaFide","type":"bool"}],"name":"LogNewFundraiser","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fundraiserAddress","type":"address"},{"indexed":false,"name":"isBonaFide","type":"bool"}],"name":"LogUpdateFundraiser","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
606060405234156200001057600080fd5b6040516060806200229e8339810160405280805191906020018051919060200180519150505b600160a060020a03831615801590620000575750600160a060020a03821615155b80156200006c5750600160a060020a03811615155b15156200007557fe5b60038054600160a060020a03808516600160a060020a03199283161790925560048054848416908316179055600580548684169216919091179055331660008181526009602052604090819020805460ff191660019081179091557f22b12f3851b54c6634c282f9b575540c2ad483f802ec70c4af3e08e8ae8530239151901515815260200160405180910390a260038054600160a060020a039081166000908152600160205260408082206a90c1b1025e16710f0000009081905593549092169290916000805160206200227e83398151915291905190815260200160405180910390a360048054600160a060020a039081166000908152600160205260408082206a0a56fa5b99019a5c8000009081905593549092169290916000805160206200227e83398151915291905190815260200160405180910390a360016020526a33b2e3c9fd0803ce8000007fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4955600160a060020a038316600081815260408082206b026c62ad77dc602dae000000908190556000805160206200227e833981519152915190815260200160405180910390a36b033b2e3c9fd0803ce80000006000555b5050505b612030806200024e6000396000f300606060405236156101a65763ffffffff60e060020a60003504166303771f2f81146101ab57806306fdde03146101d0578063095ea7b31461025b5780630ef5a7e014610291578063168b912d146102c757806318160ddd146102ec578063202b876a1461031157806323b872dd146103475780632d34ba7914610383578063313ce567146103bc5780633774e6f5146103e5578063378dc3dc1461041457806337918bcb146104395780633923afee1461046357806339b584b114610499578063475a9fa9146104ca5780634a418fb71461050057806366188463146105255780636904c94d1461055b57806370a082311461058a578063772ad01f146105bb5780637f7977d1146105f557806388fc65fb1461062857806389ede7841461065e57806395d89b411461068d578063a9059cbb14610718578063adbf54b71461074e578063b006de0d14610773578063c3a3954414610798578063d73dd623146107bd578063dd62ed3e146107f3578063df50a8c11461082a578063e1ab586014610862578063e1e463511461088f578063e531a9b8146108b4578063ef688df5146108e5575b600080fd5b34156101b657600080fd5b6101be610906565b60405190815260200160405180910390f35b34156101db57600080fd5b6101e3610ace565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102205780820151818401525b602001610207565b50505050905090810190601f16801561024d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026657600080fd5b61027d600160a060020a0360043516602435610b05565b604051901515815260200160405180910390f35b341561029c57600080fd5b61027d600160a060020a0360043516602435610b72565b604051901515815260200160405180910390f35b34156102d257600080fd5b6101be610c32565b60405190815260200160405180910390f35b34156102f757600080fd5b6101be610c39565b60405190815260200160405180910390f35b341561031c57600080fd5b61027d600160a060020a0360043516602435610c3f565b604051901515815260200160405180910390f35b341561035257600080fd5b61027d600160a060020a0360043581169060243516604435610c90565b604051901515815260200160405180910390f35b341561038e57600080fd5b61027d600160a060020a0360043581169060243516610cc7565b604051901515815260200160405180910390f35b34156103c757600080fd5b6103cf610e64565b60405160ff909116815260200160405180910390f35b34156103f057600080fd5b6103f8610e69565b604051600160a060020a03909116815260200160405180910390f35b341561041f57600080fd5b6101be610e78565b60405190815260200160405180910390f35b341561044457600080fd5b61027d600435610e88565b604051901515815260200160405180910390f35b341561046e57600080fd5b61027d600160a060020a0360043516602435610fd4565b604051901515815260200160405180910390f35b34156104a457600080fd5b6101be600160a060020a0360043516611050565b60405190815260200160405180910390f35b34156104d557600080fd5b61027d600160a060020a0360043516602435611062565b604051901515815260200160405180910390f35b341561050b57600080fd5b6101be611164565b60405190815260200160405180910390f35b341561053057600080fd5b61027d600160a060020a036004351660243561122e565b604051901515815260200160405180910390f35b341561056657600080fd5b6103f861132a565b604051600160a060020a03909116815260200160405180910390f35b341561059557600080fd5b6101be600160a060020a0360043516611339565b60405190815260200160405180910390f35b34156105c657600080fd5b6105d1600435611358565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561060057600080fd5b61027d600160a060020a036004351661138b565b604051901515815260200160405180910390f35b341561063357600080fd5b61027d600160a060020a03600435166024356113ad565b604051901515815260200160405180910390f35b341561066957600080fd5b6103f8611690565b604051600160a060020a03909116815260200160405180910390f35b341561069857600080fd5b6101e361169f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102205780820151818401525b602001610207565b50505050905090810190601f16801561024d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561072357600080fd5b61027d600160a060020a03600435166024356116d6565b604051901515815260200160405180910390f35b341561075957600080fd5b6101be61170b565b60405190815260200160405180910390f35b341561077e57600080fd5b6101be61171a565b60405190815260200160405180910390f35b34156107a357600080fd5b6101be611729565b60405190815260200160405180910390f35b34156107c857600080fd5b61027d600160a060020a0360043516602435611739565b604051901515815260200160405180910390f35b34156107fe57600080fd5b6101be600160a060020a03600435811690602435166117de565b60405190815260200160405180910390f35b341561083557600080fd5b61027d600160a060020a0360043516602435151561180b565b604051901515815260200160405180910390f35b341561086d57600080fd5b61027d600435602435611895565b604051901515815260200160405180910390f35b341561089a57600080fd5b6101be611b10565b60405190815260200160405180910390f35b34156108bf57600080fd5b6101be600160a060020a0360043516611b16565b60405190815260200160405180910390f35b34156108f057600080fd5b610904600160a060020a0360043516611ba3565b005b600354600090819081908190819081908190600160a060020a0316633d6a71e482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561095c57600080fd5b6102c65a03f1151561096d57600080fd5b5050506040518051151590506109865760009650610ac5565b60035462015180906109f9904290600160a060020a0316633d6a71e46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109d957600080fd5b6102c65a03f115156109ea57600080fd5b50505060405180519050611c39565b811515610a0257fe5b049550618ead606487025b0494506b033b2e3c9fd0803ce800000093505b84831015610a5757610a49846103e8610a3a876019611c50565b811515610a4357fe5b04611c7f565b93505b600190920191610a20565b6064618ead8782025b06811515610a6a57fe5b0491506000821115610ab6576103e8610a84856019611c50565b811515610a8d57fe5b049050610ab384618ead610a3a8486606402611c50565b811515610a4357fe5b04611c7f565b93505b610ac284600054611c39565b96505b50505050505090565b60408051908101604052600881527f5374617262617365000000000000000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60035460009033600160a060020a03908116911614610b8d57fe5b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bd557600080fd5b6102c65a03f11515610be657600080fd5b505050604051805190501515610bfb57600080fd5b600160a060020a0383161515610c1057600080fd5b600354610c2790600160a060020a03168484611c99565b90505b5b5b92915050565b6006545b90565b60005481565b60045460009033600160a060020a03908116911614610c5a57fe5b600160a060020a0383161515610c6f57600080fd5b600454610c2790600160a060020a03168484611c99565b90505b5b92915050565b6000606036606414610c9e57fe5b610ca885846113ad565b1515610cb057fe5b610cbb858585611d7f565b91505b5b509392505050565b6000610cd23361138b565b1515610cda57fe5b600354600160a060020a0316630b97bc866000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d2257600080fd5b6102c65a03f11515610d3357600080fd5b5050506040518051159050610d4757600080fd5b600160a060020a03831615801590610d675750600160a060020a03821615155b1515610d7257600080fd5b600354600160a060020a03166000908152600160205260409020546a90c1b1025e16710f00000014610da057fe5b600454600160a060020a03166000908152600160205260409020546a0a56fa5b99019a5c80000014610dce57fe5b5060038054600160a060020a03908116600090815260016020819052604080832083905560048054851684528184208490558785168085528285206a90c1b1025e16710f0000009055948716808552919093206a0a56fa5b99019a5c8000009055845473ffffffffffffffffffffffffffffffffffffffff1990811690941790945581549092169092179091555b5b5b92915050565b601281565b600454600160a060020a031681565b6b033b2e3c9fd0803ce800000081565b6000610e933361138b565b1515610e9b57fe5b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610ee357600080fd5b6102c65a03f11515610ef457600080fd5b505050604051805190501515610f0957600080fd5b60085415610f1657600080fd5b42821115610f2357600080fd5b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f6b57600080fd5b6102c65a03f11515610f7c57600080fd5b505050604051805190501515610f9157600080fd5b60088290557fd94b06865896e1de625324a14ebf271925fd43405351ff908ab157b6b5e46e818260405190815260200160405180910390a15060015b5b5b919050565b6000610fdf3361138b565b1515610fe757fe5b600160a060020a0383161515610ffc57600080fd5b600160a060020a03831660009081526007602052604090205461101f9083611c7f565b600160a060020a038416600090815260076020526040812091909155610c27908484611c99565b90505b5b92915050565b60076020526000908152604090205481565b600061106d3361138b565b151561107557fe5b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110bd57600080fd5b6102c65a03f115156110ce57600080fd5b5050506040518051905015156110e357600080fd5b600160a060020a03831615156110f857600080fd5b611100610906565b82111561110957fe5b61111560005483611c7f565b6000908155600160a060020a03841681526001602052604090205461113a9083611c7f565b600160a060020a03841660009081526001602081905260409091209190915590505b5b5b92915050565b6000806000611171611f82565b600092505b60065460ff831610156111f1576006805460ff841690811061119457fe5b906000526020600020906003020160005b506060604051908101604090815282548252600183015460208301908152600290930154908201529150429051116111e5576111e2838251611c7f565b92505b5b600190910190611176565b600554600160a060020a0316600090815260016020526040902054611225906b026c62ad77dc602dae000000859003611c39565b93505b50505090565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561128b57600160a060020a0333811660009081526002602090815260408083209388168352929052908120556112c2565b61129b818463ffffffff611c3916565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600554600160a060020a031681565b600160a060020a0381166000908152600160205260409020545b919050565b600680548290811061136657fe5b906000526020600020906003020160005b508054600182015460029092015490925083565b600160a060020a03811660009081526009602052604090205460ff165b919050565b60008080808415806113d75750600160a060020a0386166000908152600160205260409020548590105b156113e55760009350611686565b600554600160a060020a038781169116141561141357611403611164565b8511156114135760009350611686565b5b600160a060020a0386166000908152600760205260408120549093508390111561144d5761144a8361144588611b16565b611c7f565b92505b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561149557600080fd5b6102c65a03f115156114a657600080fd5b505050604051805190501561164a576003546201518090611528904290600160a060020a0316633d6a71e46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109d957600080fd5b6102c65a03f115156109ea57600080fd5b50505060405180519050611c39565b81151561153157fe5b04915060078210156115bf576003546115bc908490600160a060020a0316637a9601548960006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b50505060405180519050611c7f565b92505b600e82101561164a57600354611647908490600160a060020a0316634d730d518960006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b50505060405180519050611c7f565b92505b5b600160a060020a03861660009081526001602052604090205461166e9084611c39565b9050848110156116815760009350611686565b600193505b5b50505092915050565b600354600160a060020a031681565b60408051908101604052600481527f5354415200000000000000000000000000000000000000000000000000000000602082015281565b60006040366044146116e457fe5b6116ee33846113ad565b15156116f657fe5b6117008484611eab565b91505b5b5092915050565b6a0a56fa5b99019a5c80000081565b6a90c1b1025e16710f00000081565b6b026c62ad77dc602dae00000081565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611771908363ffffffff611c7f16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a35060015b92915050565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006118163361138b565b151561181e57fe5b6118278361138b565b151561182f57fe5b600160a060020a03831660008181526009602052604090819020805460ff19168515151790557f75014c5ef16a5a3d68049061808282329efbd39868b2a99a1f9427f7be622af290849051901515815260200160405180910390a25060015b5b92915050565b6000806000806118a43361138b565b15156118ac57fe5b600354600160a060020a031663a4fd6f566000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156118f457600080fd5b6102c65a03f1151561190557600080fd5b50505060405180519050151561191a57600080fd5b6a52b7d2dcc80cd2e400000086111561192f57fe5b60035462ed4e00906119a2904290600160a060020a0316633d6a71e46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109d957600080fd5b6102c65a03f115156109ea57600080fd5b50505060405180519050611c39565b10156119aa57fe5b624f1a006119b88642611c39565b10156119c057fe5b6006546000901115611a0c576006805460001981019081106119de57fe5b906000526020600020906003020160005b5060020154925062ed4e00611a044285611c39565b1015611a0c57fe5b5b8591505b60065460ff82161015611a5757611a4c8260068360ff16815481101515611a3457fe5b906000526020600020906003020160005b5054611c7f565b91505b600101611a11565b6b026c62ad77dc602dae000000821115611a6d57fe5b6006805460018101611a7f8382611fa4565b916000526020600020906003020160005b606060405190810160409081528a8252602082018a905242908201529190508151815560208201518160010155604082015181600201555050507f8a8a98fdc53b8f3144b328ef8e38a44f5a856263cdd4071f161e62d9e15e1fa9868660405191825260208201526040908101905180910390a15b5b5b50505092915050565b60085481565b600160a060020a038116600090815260076020526040812054600854829081901515611b4457829350611b9a565b62093a80611b5442600854611c39565b811515611b5d57fe5b04915060348211611b7057829350611b9a565b60331982016034845b04029050828110611b8d5760009350611b9a565b611b978382611c39565b93505b5b505050919050565b611bac3361138b565b1515611bb457fe5b600160a060020a0381161515611bc957600080fd5b611bd28161138b565b15611bd957fe5b600160a060020a03811660008181526009602052604090819020805460ff191660019081179091557f22b12f3851b54c6634c282f9b575540c2ad483f802ec70c4af3e08e8ae8530239151901515815260200160405180910390a25b5b50565b600082821115611c4557fe5b508082035b92915050565b6000828202831580611c6c5750828482811515611c6957fe5b04145b1515611c7457fe5b8091505b5092915050565b600082820183811015611c7457fe5b8091505b5092915050565b60008082118015611cc35750600160a060020a038416600090815260016020526040902054829010155b1515611ccb57fe5b600160a060020a038416600090815260016020526040902054611cee9083611c39565b600160a060020a038086166000908152600160205260408082209390935590851681522054611d1d9083611c7f565b600160a060020a03808516600081815260016020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b9392505050565b600080600160a060020a0384161515611d9757600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054611ddd908463ffffffff611c3916565b600160a060020a038087166000908152600160205260408082209390935590861681522054611e12908463ffffffff611c7f16565b600160a060020a038516600090815260016020526040902055611e3b818463ffffffff611c3916565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b6000600160a060020a0383161515611ec257600080fd5b600160a060020a033316600090815260016020526040902054611eeb908363ffffffff611c3916565b600160a060020a033381166000908152600160205260408082209390935590851681522054611f20908363ffffffff611c7f16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b6060604051908101604052806000815260200160008152602001600081525090565b815481835581811511611fd057600302816003028360005260206000209182019101611fd09190611fd6565b5b505050565b610c3691905b80821115611ffd576000808255600182018190556002820155600301611fdc565b5090565b905600a165627a7a7230582080d59bed20a206aac3d8c04eef71a72c349854b90471633196e79ea1aca9f0e40029ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000006c9e70d6682ea36ff340153d574b2c523671b107000000000000000000000000c03ab1fc46c6d01238707426c929e9eed3e7f9b3000000000000000000000000ed9d813c4a82a9d76eba8ea666a7a0ab95f7bb29


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

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000006c9e70d6682ea36ff340153d574b2c523671b107
Arg [1] : 000000000000000000000000c03ab1fc46c6d01238707426c929e9eed3e7f9b3
Arg [2] : 000000000000000000000000ed9d813c4a82a9d76eba8ea666a7a0ab95f7bb29


   Swarm Source:
bzzr://80d59bed20a206aac3d8c04eef71a72c349854b90471633196e79ea1aca9f0e4
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.