ETH Price: $1,862.11 (-13.22%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Foreign Purchase55745332018-05-07 22:41:372831 days ago1525732897IN
0xFDcEe7A3...E67E865DD
0 ETH0.001286550
Foreign Purchase55745262018-05-07 22:39:492831 days ago1525732789IN
0xFDcEe7A3...E67E865DD
0 ETH0.001286550
Withdraw Funding55745232018-05-07 22:38:322831 days ago1525732712IN
0xFDcEe7A3...E67E865DD
0 ETH0.0015203550
Transfer55687372018-05-06 22:50:392832 days ago1525647039IN
0xFDcEe7A3...E67E865DD
4.539 ETH0.000090991
Transfer55687262018-05-06 22:48:102832 days ago1525646890IN
0xFDcEe7A3...E67E865DD
1.01 ETH0.0037308741
Transfer55687182018-05-06 22:46:162832 days ago1525646776IN
0xFDcEe7A3...E67E865DD
0.275 ETH0.000100091.1
Transfer55686922018-05-06 22:38:282832 days ago1525646308IN
0xFDcEe7A3...E67E865DD
1.34 ETH0.0019109321
Transfer55686432018-05-06 22:25:232832 days ago1525645523IN
0xFDcEe7A3...E67E865DD
0.24 ETH0.0045498550
Transfer55686322018-05-06 22:22:022832 days ago1525645322IN
0xFDcEe7A3...E67E865DD
0.251 ETH0.004250
Transfer55685892018-05-06 22:08:532832 days ago1525644533IN
0xFDcEe7A3...E67E865DD
22 ETH0.0030498550
Transfer55685012018-05-06 21:46:452832 days ago1525643205IN
0xFDcEe7A3...E67E865DD
0.25 ETH0.0005270610
Transfer55684922018-05-06 21:43:362832 days ago1525643016IN
0xFDcEe7A3...E67E865DD
0.25 ETH0.000105412
Transfer55681882018-05-06 20:34:542832 days ago1525638894IN
0xFDcEe7A3...E67E865DD
0.5 ETH0.0019109321
Foreign Purchase55681652018-05-06 20:29:242832 days ago1525638564IN
0xFDcEe7A3...E67E865DD
0 ETH0.004664750
Foreign Purchase55681352018-05-06 20:20:562832 days ago1525638056IN
0xFDcEe7A3...E67E865DD
0 ETH0.004603450
Foreign Purchase55681312018-05-06 20:19:132832 days ago1525637953IN
0xFDcEe7A3...E67E865DD
0 ETH0.004591950
Foreign Purchase55681272018-05-06 20:17:082832 days ago1525637828IN
0xFDcEe7A3...E67E865DD
0 ETH0.004603450
Foreign Purchase55681112018-05-06 20:13:132832 days ago1525637593IN
0xFDcEe7A3...E67E865DD
0 ETH0.0046418550
Foreign Purchase55681042018-05-06 20:10:172832 days ago1525637417IN
0xFDcEe7A3...E67E865DD
0 ETH0.0018521420
Transfer55674952018-05-06 17:44:192832 days ago1525628659IN
0xFDcEe7A3...E67E865DD
11.73 ETH0.0021885424.05074534
Transfer55673942018-05-06 17:18:122832 days ago1525627092IN
0xFDcEe7A3...E67E865DD
0.3 ETH0.000090991
Transfer55672932018-05-06 16:52:102832 days ago1525625530IN
0xFDcEe7A3...E67E865DD
2 ETH0.0037308741
Foreign Purchase55665952018-05-06 14:04:522832 days ago1525615492IN
0xFDcEe7A3...E67E865DD
0 ETH0.0015658820
Transfer55665732018-05-06 14:01:532832 days ago1525615313IN
0xFDcEe7A3...E67E865DD
0.1 ETH0.0000422
Transfer55663892018-05-06 13:18:132832 days ago1525612693IN
0xFDcEe7A3...E67E865DD
0.01 ETH0.002232100
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer55745232018-05-07 22:38:322831 days ago1525732712
0xFDcEe7A3...E67E865DD
207.47788237 ETH
Transfer55639852018-05-06 3:09:082832 days ago1525576148
0xFDcEe7A3...E67E865DD
0.02 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xCdF35C3F...5ff6f2dB1
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
GenericCrowdsale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-18
*/

pragma solidity ^0.4.18;

library SafeMath {
  function mul(uint a, uint b) internal pure returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

  function max64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a < b ? a : b;
  }
}


contract ERC223 {
  uint public totalSupply;
  function balanceOf(address who) public view returns (uint);
  
  function name() public view returns (string _name);
  function symbol() public view returns (string _symbol);
  function decimals() public view returns (uint8 _decimals);
  function totalSupply() public view returns (uint256 _supply);

  function transfer(address to, uint value) public returns (bool ok);
  function transfer(address to, uint value, bytes data) public returns (bool ok);
  function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok);
  
  event Transfer(address indexed from, address indexed to, uint value);
}

contract ContractReceiver {
     
    struct TKN {
        address sender;
        uint value;
        bytes data;
        bytes4 sig;
    }
    
    
    function tokenFallback(address _from, uint _value, bytes _data) public pure {
      TKN memory tkn;
      tkn.sender = _from;
      tkn.value = _value;
      tkn.data = _data;
      uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24);
      tkn.sig = bytes4(u);
      
      /* tkn variable is analogue of msg variable of Ether transaction
      *  tkn.sender is person who initiated this token transaction   (analogue of msg.sender)
      *  tkn.value the number of tokens that were sent   (analogue of msg.value)
      *  tkn.data is data of token transaction   (analogue of msg.data)
      *  tkn.sig is 4 bytes signature of function
      *  if data of token transaction is a function execution
      */
    }
}

contract StandardToken is ERC223 {
    using SafeMath for uint;

    //user token balances
    mapping (address => uint) balances;
    //token transer permissions
    mapping (address => mapping (address => uint)) allowed;

    // Function that is called when a user or another contract wants to transfer funds .
    function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) {
        if(isContract(_to)) {
            if (balanceOf(msg.sender) < _value) revert();
            balances[msg.sender] = balanceOf(msg.sender).sub(_value);
            balances[_to] = balanceOf(_to).add(_value);
            assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data));
            Transfer(msg.sender, _to, _value);
            return true;
        }
        else {
            return transferToAddress(_to, _value);
        }
    }
    

    // Function that is called when a user or another contract wants to transfer funds .
    function transfer(address _to, uint _value, bytes _data) public returns (bool success) {
          
        if(isContract(_to)) {
            return transferToContract(_to, _value, _data);
        }
        else {
            return transferToAddress(_to, _value);
        }
    }
      
    // Standard function transfer similar to ERC20 transfer with no _data .
    // Added due to backwards compatibility reasons .
    function transfer(address _to, uint _value) public returns (bool success) {
          
        //standard function transfer similar to ERC20 transfer with no _data
        //added due to backwards compatibility reasons
        bytes memory empty;
        if(isContract(_to)) {
            return transferToContract(_to, _value, empty);
        }
        else {
            return transferToAddress(_to, _value);
        }
    }

    //assemble the given address bytecode. If bytecode exists then the _addr is a contract.
    function isContract(address _addr) private view returns (bool is_contract) {
        uint length;
        assembly {
            //retrieve the size of the code on target address, this needs assembly
            length := extcodesize(_addr)
        }
        return (length > 0);
    }

    //function that is called when transaction target is an address
    function transferToAddress(address _to, uint _value) private returns (bool success) {
        if (balanceOf(msg.sender) < _value) revert();
        balances[msg.sender] = balanceOf(msg.sender).sub(_value);
        balances[_to] = balanceOf(_to).add(_value);
        Transfer(msg.sender, _to, _value);
        return true;
    }
      
      //function that is called when transaction target is a contract
      function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) {
        if (balanceOf(msg.sender) < _value) revert();
        balances[msg.sender] = balanceOf(msg.sender).sub(_value);
        balances[_to] = balanceOf(_to).add(_value);
        ContractReceiver receiver = ContractReceiver(_to);
        receiver.tokenFallback(msg.sender, _value, _data);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    /**
     * Token transfer from from to _to (permission needed)
     */
    function transferFrom(
        address _from, 
        address _to,
        uint _value
    ) 
        public 
        returns (bool)
    {
        if (balanceOf(_from) < _value && allowance(_from, msg.sender) < _value) revert();

        bytes memory empty;
        balances[_to] = balanceOf(_to).add(_value);
        balances[_from] = balanceOf(_from).sub(_value);
        allowed[_from][msg.sender] = allowance(_from, msg.sender).sub(_value);
        if (isContract(_to)) {
            ContractReceiver receiver = ContractReceiver(_to);
            receiver.tokenFallback(msg.sender, _value, empty);
        }
        Transfer(_from, _to, _value);
        return true;
    }

    /**
     * Increase permission for transfer
     */
    function increaseApproval(
        address spender,
        uint value
    )
        public
        returns (bool) 
    {
        allowed[msg.sender][spender] = allowed[msg.sender][spender].add(value);
        return true;
    }

    /**
     * Decrease permission for transfer
     */
    function decreaseApproval(
        address spender,
        uint value
    )
        public
        returns (bool) 
    {
        allowed[msg.sender][spender] = allowed[msg.sender][spender].add(value);
        return true;
    }

    /**
     * User token balance
     */
    function balanceOf(
        address owner
    ) 
        public 
        constant 
        returns (uint) 
    {
        return balances[owner];
    }

    /**
     * User transfer permission
     */
    function allowance(
        address owner, 
        address spender
    )
        public
        constant
        returns (uint remaining)
    {
        return allowed[owner][spender];
    }
}

contract MyDFSToken is StandardToken {

    string public name = "MyDFS Token";
    uint8 public decimals = 6;
    string public symbol = "MyDFS";
    string public version = 'H1.0';
    uint256 public totalSupply;

    function () external {
        revert();
    } 

    function MyDFSToken() public {
        totalSupply = 125 * 1e12;
        balances[msg.sender] = totalSupply;
    }

    // Function to access name of token .
    function name() public view returns (string _name) {
        return name;
    }
    // Function to access symbol of token .
    function symbol() public view returns (string _symbol) {
        return symbol;
    }
    // Function to access decimals of token .
    function decimals() public view returns (uint8 _decimals) {
        return decimals;
    }
    // Function to access total supply of tokens .
    function totalSupply() public view returns (uint256 _totalSupply) {
        return totalSupply;
    }
}

contract Ownable {
    address public owner;
    address public newOwnerCandidate;

    event OwnershipRequested(address indexed _by, address indexed _to);
    event OwnershipTransferred(address indexed _from, address indexed _to);

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

    modifier onlyOwner() { require(msg.sender == owner); _;}

    /// Proposes to transfer control of the contract to a newOwnerCandidate.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    function transferOwnership(address _newOwnerCandidate) external onlyOwner {
        require(_newOwnerCandidate != address(0));

        newOwnerCandidate = _newOwnerCandidate;

        OwnershipRequested(msg.sender, newOwnerCandidate);
    }

    /// Accept ownership transfer. This method needs to be called by the perviously proposed owner.
    function acceptOwnership() external {
        if (msg.sender == newOwnerCandidate) {
            owner = newOwnerCandidate;
            newOwnerCandidate = address(0);

            OwnershipTransferred(owner, newOwnerCandidate);
        }
    }
}

contract DevTokensHolder is Ownable {
    using SafeMath for uint256;

    uint256 collectedTokens;
    GenericCrowdsale crowdsale;
    MyDFSToken token;

    event ClaimedTokens(address token, uint256 amount);
    event TokensWithdrawn(address holder, uint256 amount);
    event Debug(uint256 amount);

    function DevTokensHolder(address _crowdsale, address _token, address _owner) public {
        crowdsale = GenericCrowdsale(_crowdsale);
        token = MyDFSToken(_token);
        owner = _owner;
    }

    function tokenFallback(
        address _from, 
        uint _value, 
        bytes _data
    ) 
        public 
        view 
    {
        require(_from == owner || _from == address(crowdsale));
        require(_value > 0 || _data.length > 0);
    }

    /// @notice The Dev (Owner) will call this method to extract the tokens
    function collectTokens() public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        uint256 total = collectedTokens.add(balance);

        uint256 finalizedTime = crowdsale.finishTime();
        require(finalizedTime > 0 && getTime() > finalizedTime.add(14 days));

        uint256 canExtract = total.mul(getTime().sub(finalizedTime)).div(months(12));
        canExtract = canExtract.sub(collectedTokens);

        if (canExtract > balance) {
            canExtract = balance;
        }

        collectedTokens = collectedTokens.add(canExtract);
        require(token.transfer(owner, canExtract));
        TokensWithdrawn(owner, canExtract);
    }

    function months(uint256 m) internal pure returns (uint256) {
        return m.mul(30 days);
    }

    function getTime() internal view returns (uint256) {
        return now;
    }

    //////////
    // Safety Methods
    //////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) public onlyOwner {
        require(_token != address(token));
        if (_token == 0x0) {
            owner.transfer(this.balance);
            return;
        }

        token = MyDFSToken(_token);
        uint256 balance = token.balanceOf(this);
        token.transfer(owner, balance);
        ClaimedTokens(_token, balance);
    }
}

contract AdvisorsTokensHolder is Ownable {
    using SafeMath for uint256;

    GenericCrowdsale crowdsale;
    MyDFSToken token;

    event ClaimedTokens(address token, uint256 amount);
    event TokensWithdrawn(address holder, uint256 amount);

    function AdvisorsTokensHolder(address _crowdsale, address _token, address _owner) public {
        crowdsale = GenericCrowdsale(_crowdsale);
        token = MyDFSToken(_token);
        owner = _owner;
    }

    function tokenFallback(
        address _from, 
        uint _value, 
        bytes _data
    ) 
        public 
        view 
    {
        require(_from == owner || _from == address(crowdsale));
        require(_value > 0 || _data.length > 0);
    }

    /// @notice The Dev (Owner) will call this method to extract the tokens
    function collectTokens() public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0);

        uint256 finalizedTime = crowdsale.finishTime();
        require(finalizedTime > 0 && getTime() > finalizedTime.add(14 days));

        require(token.transfer(owner, balance));
        TokensWithdrawn(owner, balance);
    }

    function getTime() internal view returns (uint256) {
        return now;
    }

    //////////
    // Safety Methods
    //////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) public onlyOwner {
        require(_token != address(token));
        if (_token == 0x0) {
            owner.transfer(this.balance);
            return;
        }

        token = MyDFSToken(_token);
        uint256 balance = token.balanceOf(this);
        token.transfer(owner, balance);
        ClaimedTokens(_token, balance);
    }
}

contract GenericCrowdsale is Ownable {
    using SafeMath for uint256;

    //Crowrdsale states
    enum State { Initialized, PreIco, PreIcoFinished, Ico, IcoFinished}

    struct Discount {
        uint256 amount;
        uint256 value;
    }

    //ether trasfered to
    address public beneficiary;
    //Crowrdsale state
    State public state;
    //Hard goal in Wei
    uint public hardFundingGoal;
    //soft goal in Wei
    uint public softFundingGoal;
    //gathered Ether amount in Wei
    uint public amountRaised;
    //ICO/PreICO start timestamp in seconds
    uint public started;
    //Crowdsale finish time
    uint public finishTime;
    //price for 1 token in Wei
    uint public price;
    //minimum purchase value in Wei
    uint public minPurchase;
    //Token cantract
    ERC223 public tokenReward;
    //Wei balances for refund if ICO failed
    mapping(address => uint256) public balances;

    //Emergency stop sell
    bool emergencyPaused = false;
    //Soft cap reached
    bool softCapReached = false;
    //dev holder
    DevTokensHolder public devTokensHolder;
    //advisors holder
    AdvisorsTokensHolder public advisorsTokensHolder;
    
    //Disconts
    Discount[] public discounts;

    //price overhead for next stages
    uint8[2] public preIcoTokenPrice = [70,75];
    //price overhead for next stages
    uint8[4] public icoTokenPrice = [100,120,125,130];

    event TokenPurchased(address investor, uint sum, uint tokensCount, uint discountTokens);
    event PreIcoLimitReached(uint totalAmountRaised);
    event SoftGoalReached(uint totalAmountRaised);
    event HardGoalReached(uint totalAmountRaised);
    event Debug(uint num);

    //Sale is active
    modifier sellActive() { 
        require(
            !emergencyPaused 
            && (state == State.PreIco || state == State.Ico)
            && amountRaised < hardFundingGoal
        );
    _; }
    //Soft cap not reached
    modifier goalNotReached() { require(state == State.IcoFinished && amountRaised < softFundingGoal); _; }

    /**
     * Constrctor function
     */
    function GenericCrowdsale(
        address ifSuccessfulSendTo,
        address addressOfTokenUsedAsReward
    ) public {
        require(ifSuccessfulSendTo != address(0) 
            && addressOfTokenUsedAsReward != address(0));
        beneficiary = ifSuccessfulSendTo;
        tokenReward = ERC223(addressOfTokenUsedAsReward);
        state = State.Initialized;
    }

    function tokenFallback(
        address _from, 
        uint _value, 
        bytes _data
    ) 
        public 
        view 
    {
        require(_from == owner);
        require(_value > 0 || _data.length > 0);
    }

    /**
     * Start PreICO
     */
    function preIco(
        uint hardFundingGoalInEthers,
        uint minPurchaseInFinney,
        uint costOfEachToken,
        uint256[] discountEthers,
        uint256[] discountValues
    ) 
        external 
        onlyOwner 
    {
        require(hardFundingGoalInEthers > 0
            && costOfEachToken > 0
            && state == State.Initialized
            && discountEthers.length == discountValues.length);

        hardFundingGoal = hardFundingGoalInEthers.mul(1 ether);
        minPurchase = minPurchaseInFinney.mul(1 finney);
        price = costOfEachToken;
        initDiscounts(discountEthers, discountValues);
        state = State.PreIco;
        started = now;
    }

    /**
     * Start ICO
     */
    function ico(
        uint softFundingGoalInEthers,
        uint hardFundingGoalInEthers,
        uint minPurchaseInFinney,
        uint costOfEachToken,
        uint256[] discountEthers,
        uint256[] discountValues
    ) 
        external
        onlyOwner
    {
        require(softFundingGoalInEthers > 0
            && hardFundingGoalInEthers > 0
            && hardFundingGoalInEthers > softFundingGoalInEthers
            && costOfEachToken > 0
            && state < State.Ico
            && discountEthers.length == discountValues.length);

        softFundingGoal = softFundingGoalInEthers.mul(1 ether);
        hardFundingGoal = hardFundingGoalInEthers.mul(1 ether);
        minPurchase = minPurchaseInFinney.mul(1 finney);
        price = costOfEachToken;
        delete discounts;
        initDiscounts(discountEthers, discountValues);
        state = State.Ico;
        started = now;
    }

    /**
     * Finish ICO / PreICO
     */
    function finishSale() external onlyOwner {
        require(state == State.PreIco || state == State.Ico);
        
        if (state == State.PreIco)
            state = State.PreIcoFinished;
        else
            state = State.IcoFinished;
    }

    /**
     * Admin can pause token sell
     */
    function emergencyPause() external onlyOwner {
        emergencyPaused = true;
    }

    /**
     * Admin can unpause token sell
     */
    function emergencyUnpause() external onlyOwner {
        emergencyPaused = false;
    }

    /**
     * Transfer dev tokens to vesting wallet
     */
    function sendDevTokens() external onlyOwner returns(address) {
        require(successed());

        devTokensHolder = new DevTokensHolder(address(this), address(tokenReward), owner);
        tokenReward.transfer(address(devTokensHolder), 12500 * 1e9);
        return address(devTokensHolder);
    }

    /**
     * Transfer dev tokens to vesting wallet
     */
    function sendAdvisorsTokens() external onlyOwner returns(address) {
        require(successed());

        advisorsTokensHolder = new AdvisorsTokensHolder(address(this), address(tokenReward), owner);
        tokenReward.transfer(address(advisorsTokensHolder), 12500 * 1e9);
        return address(advisorsTokensHolder);
    }

    /**
     * Admin can withdraw ether beneficiary address
     */
    function withdrawFunding() external onlyOwner {
        require((state == State.PreIco || successed()));
        beneficiary.transfer(this.balance);
    }

    /**
     * Different coins purchase
     */
    function foreignPurchase(address user, uint256 amount)
        external
        onlyOwner
        sellActive
    {
        buyTokens(user, amount);
        checkGoals();
    }

    /**
     * Claim refund ether in soft goal not reached 
     */
    function claimRefund() 
        external 
        goalNotReached 
    {
        uint256 amount = balances[msg.sender];
        balances[msg.sender] = 0;
        if (amount > 0){
            if (!msg.sender.send(amount)) {
                balances[msg.sender] = amount;
            }
        }
    }

    /**
     * Payment transaction
     */
    function () 
        external 
        payable 
        sellActive
    {
        require(msg.value > 0);
        require(msg.value >= minPurchase);
        uint amount = msg.value;
        if (amount > hardFundingGoal.sub(amountRaised)) {
            uint availableAmount = hardFundingGoal.sub(amountRaised);
            msg.sender.transfer(amount.sub(availableAmount));
            amount = availableAmount;
        }

        buyTokens(msg.sender,  amount);
        checkGoals();
    }

    /**
     * Transfer tokens to user
     */
    function buyTokens(
        address user,
        uint256 amount
    ) internal {
        require(amount <= hardFundingGoal.sub(amountRaised));

        uint256 passedSeconds = getTime().sub(started);
        uint256 week = 0;
        if (passedSeconds >= 604800){
            week = passedSeconds.div(604800);
        }
        Debug(week);

        uint256 tokenPrice;
        if (state == State.Ico){
            uint256 cup = amountRaised.mul(4).div(hardFundingGoal);
            if (cup > week)
                week = cup;
            if (week >= 4)
                 week = 3;
            tokenPrice = price.mul(icoTokenPrice[week]).div(100);
        } else {
            if (week >= 2)
                 week = 1;
            tokenPrice = price.mul(preIcoTokenPrice[week]).div(100);
        }

        Debug(tokenPrice);

        uint256 count = amount.div(tokenPrice);
        uint256 discount = getDiscountOf(amount);
        uint256 discountBonus = discount.mul(count).div(100);
        count = count.add(discountBonus);
        count = ceilTokens(count);

        require(tokenReward.transfer(user, count));
        balances[user] = balances[user].add(amount);
        amountRaised = amountRaised.add(amount);
        TokenPurchased(user, amount, count, discountBonus);
    }

    /**
     * Define distount percents for different token amounts
     */
    function ceilTokens(
        uint256 num
    ) 
        public
        pure
        returns(uint256) 
    {
        uint256 part = num % 1000000;
        return part > 0 ? num.div(1000000).mul(1000000) + 1000000 : num;
    }

    /**
     * ICO is finished successfully
     */
    function successed() 
        public 
        view 
        returns(bool) 
    {
        return state == State.IcoFinished && amountRaised >= softFundingGoal;
    }

    /**
     * Define distount percents for different token amounts
     */
    function initDiscounts(
        uint256[] discountEthers,
        uint256[] discountValues
    ) internal {
        for (uint256 i = 0; i < discountEthers.length; i++) {
            discounts.push(Discount(discountEthers[i].mul(1 ether), discountValues[i]));
        }
    }

    /**
     * Get discount percent for number of tokens
     */
    function getDiscountOf(
        uint256 _amount
    )
        public
        view
        returns (uint256)
    {
        if (discounts.length > 0)
            for (uint256 i = 0; i < discounts.length; i++) {
                if (_amount >= discounts[i].amount) {
                    return discounts[i].value;
                }
            }
        return 0;
    }

    /**
     * Check ICO goals achievement
     */
    function checkGoals() internal {
        if (state == State.PreIco) {
            if (amountRaised >= hardFundingGoal) {
                PreIcoLimitReached(amountRaised);
                state = State.PreIcoFinished;
            }
        } else {
            if (!softCapReached && amountRaised >= softFundingGoal){
                softCapReached = true;
                SoftGoalReached(amountRaised);
            }
            if (amountRaised >= hardFundingGoal) {
                finishTime = now;
                HardGoalReached(amountRaised);
                state = State.IcoFinished;
            }
        }
    }

    function getTime() internal view returns (uint) {
        return now;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"started","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"hardFundingGoalInEthers","type":"uint256"},{"name":"minPurchaseInFinney","type":"uint256"},{"name":"costOfEachToken","type":"uint256"},{"name":"discountEthers","type":"uint256[]"},{"name":"discountValues","type":"uint256[]"}],"name":"preIco","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"num","type":"uint256"}],"name":"ceilTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"softFundingGoalInEthers","type":"uint256"},{"name":"hardFundingGoalInEthers","type":"uint256"},{"name":"minPurchaseInFinney","type":"uint256"},{"name":"costOfEachToken","type":"uint256"},{"name":"discountEthers","type":"uint256[]"},{"name":"discountValues","type":"uint256[]"}],"name":"ico","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawFunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"preIcoTokenPrice","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"icoTokenPrice","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"emergencyUnpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"emergencyPause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amount","type":"uint256"}],"name":"foreignPurchase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finishTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devTokensHolder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorsTokensHolder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendAdvisorsTokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"successed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"discounts","outputs":[{"name":"amount","type":"uint256"},{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"getDiscountOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sendDevTokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardFundingGoal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softFundingGoal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"sum","type":"uint256"},{"indexed":false,"name":"tokensCount","type":"uint256"},{"indexed":false,"name":"discountTokens","type":"uint256"}],"name":"TokenPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"totalAmountRaised","type":"uint256"}],"name":"PreIcoLimitReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"totalAmountRaised","type":"uint256"}],"name":"SoftGoalReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"totalAmountRaised","type":"uint256"}],"name":"HardGoalReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"num","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

0x60606040908152600c805461ffff19169055805190810160405260468152604b60208201526200003490600f9060026200011b565b50608060405190810160409081526064825260786020830152607d90820152608260608201526200006a9060109060046200011b565b5034156200007757600080fd5b60405160408062002aaa833981016040528080519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925083161580159150620000d05750600160a060020a03811615155b1515620000dc57600080fd5b60028054600a8054600160a060020a0319908116600160a060020a039586161790915560a060020a60ff021991169390921692909217169055620001d9565b600183019183908215620001a35791602002820160005b838211156200017257835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262000132565b8015620001a15782816101000a81549060ff021916905560010160208160000104928301926001030262000172565b505b50620001b1929150620001b5565b5090565b620001d691905b80821115620001b157805460ff19168155600101620001bc565b90565b6128c180620001e96000396000f3006060604052600436106101925763ffffffff60e060020a6000350416631f2698ab81146102aa5780632005db6d146102cf57806327e235e314610307578063285da5a9146103265780632bd579fc1461033c57806330b9af981461037657806333b5b62e1461038957806338af3eed1461039c5780634839ac30146103cb578063497d42f3146103f75780634a4e3bd51461040d57806351858e27146104205780635908984b146104335780635958611e1461045557806359be9cc0146104685780636e66f6e91461047b57806378e7058e1461048e57806379ba5097146104a15780637b3e5e7b146104b45780638da5cb5b146104c75780638f86f5ea146104da57806399b6f5a1146104ed578063a035b1fe14610500578063a19b549314610513578063b5545a3c1461053a578063bae6a6901461054d578063c0ee0b8a1461057b578063c118a9de146105e0578063c19d93fb146105f6578063c306cb901461062d578063cea10af714610640578063d091b55014610653578063dae392ee14610666578063f2fde38b14610679575b600c54600090819060ff161580156101e25750600160025460a060020a900460ff1660048111156101bf57fe5b14806101e25750600360025460a060020a900460ff1660048111156101e057fe5b145b80156101f15750600354600554105b15156101fc57600080fd5b6000341161020957600080fd5b60095434101561021857600080fd5b6005546003543493506102309163ffffffff61069816565b8211156102945760055460035461024c9163ffffffff61069816565b9050600160a060020a0333166108fc61026b848463ffffffff61069816565b9081150290604051600060405180830381858888f19350505050151561029057600080fd5b8091505b61029e33836106aa565b6102a66109e0565b5050005b34156102b557600080fd5b6102bd610b2f565b60405190815260200160405180910390f35b34156102da57600080fd5b6103056004803590602480359160443591606435808201929081013591608435908101910135610b35565b005b341561031257600080fd5b6102bd600160a060020a0360043516610c5b565b341561033157600080fd5b6102bd600435610c6d565b341561034757600080fd5b61030560048035906024803591604435916064359160843580830192908201359160a435918201910135610cb4565b341561038157600080fd5b610305610e2b565b341561039457600080fd5b6102bd610eb3565b34156103a757600080fd5b6103af610eb9565b604051600160a060020a03909116815260200160405180910390f35b34156103d657600080fd5b6103e1600435610ec8565b60405160ff909116815260200160405180910390f35b341561040257600080fd5b6103e1600435610eef565b341561041857600080fd5b610305610efc565b341561042b57600080fd5b610305610f23565b341561043e57600080fd5b610305600160a060020a0360043516602435610f4d565b341561046057600080fd5b6102bd610fe3565b341561047357600080fd5b6103af610fe9565b341561048657600080fd5b6103af610ffe565b341561049957600080fd5b6103af61100d565b34156104ac57600080fd5b61030561101c565b34156104bf57600080fd5b6102bd61109a565b34156104d257600080fd5b6103af6110a0565b34156104e557600080fd5b6103056110af565b34156104f857600080fd5b6103af61116a565b341561050b57600080fd5b6102bd6112a9565b341561051e57600080fd5b6105266112af565b604051901515815260200160405180910390f35b341561054557600080fd5b6103056112e1565b341561055857600080fd5b61056360043561138a565b60405191825260208201526040908101905180910390f35b341561058657600080fd5b61030560048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506113b695505050505050565b34156105eb57600080fd5b6102bd6004356113f0565b341561060157600080fd5b61060961146c565b6040518082600481111561061957fe5b60ff16815260200191505060405180910390f35b341561063857600080fd5b6103af61147c565b341561064b57600080fd5b6102bd6115cf565b341561065e57600080fd5b6103af6115d5565b341561067157600080fd5b6102bd6115e4565b341561068457600080fd5b610305600160a060020a03600435166115ea565b6000828211156106a457fe5b50900390565b60008060008060008060006106cc60055460035461069890919063ffffffff16565b8811156106d857600080fd5b6106f26006546106e661167d565b9063ffffffff61069816565b96506000955062093a808710610718576107158762093a8063ffffffff61168116565b95505b7f8a36f5a234186d446e36a7df36ace663a05a580d9bea2dd899c6dd76a075d5fa8660405190815260200160405180910390a1600360025460a060020a900460ff16600481111561076557fe5b14156107ed57610793600354610787600460055461169890919063ffffffff16565b9063ffffffff61168116565b9350858411156107a1578395505b600486106107ae57600395505b6107e66064610787601089600481106107c357fe5b6020808204909201546008549260ff92066101000a90041663ffffffff61169816565b9450610812565b600286106107fa57600195505b61080f6064610787600f89600281106107c357fe5b94505b7f8a36f5a234186d446e36a7df36ace663a05a580d9bea2dd899c6dd76a075d5fa8560405190815260200160405180910390a1610855888663ffffffff61168116565b9250610860886113f0565b91506108776064610787848663ffffffff61169816565b9050610889838263ffffffff6116c316565b925061089483610c6d565b600a54909350600160a060020a031663a9059cbb8a8560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108f657600080fd5b6102c65a03f1151561090757600080fd5b50505060405180519050151561091c57600080fd5b600160a060020a0389166000908152600b6020526040902054610945908963ffffffff6116c316565b600160a060020a038a166000908152600b6020526040902055600554610971908963ffffffff6116c316565b6005557f2b0c4dfbf2e34a2292e9110d6ea90d7c78f54b3aebe3974d2db7197308f21ff8898985846040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a1505050505050505050565b600160025460a060020a900460ff1660048111156109fa57fe5b1415610a625760035460055410610a5d577ff90a42045b12aef1cf33ae920628357639512bb8d1a943f2a8dda7d0b8088c2060055460405190815260200160405180910390a160028054819060a060020a60ff02191660a060020a825b02179055505b610b2d565b600c54610100900460ff16158015610a7e575060045460055410155b15610ac957600c805461ff0019166101001790556005547f50c73740b6808484aba715b361644d9e478fabf4cbddf8e122992ca9b71444119060405190815260200160405180910390a15b60035460055410610b2d57426007556005547fa1f724757cf717a688dc12d91540a30b9e166a778344d628ffe6b30f8e88bde29060405190815260200160405180910390a1600280546004919060a060020a60ff02191660a060020a835b02179055505b565b60065481565b60005433600160a060020a03908116911614610b5057600080fd5b600087118015610b605750600085115b8015610b835750600060025460a060020a900460ff166004811115610b8157fe5b145b8015610b8e57508281145b1515610b9957600080fd5b610bb187670de0b6b3a764000063ffffffff61169816565b600355610bcb8666038d7ea4c6800063ffffffff61169816565b6009556008859055610c388484806020808202016040519081016040528093929190818152602001838360200280828437820191505050505050838380806020026020016040519081016040528093929190818152602001838360200280828437506116d2945050505050565b50506002805460a060020a60ff02191660a060020a179055505042600655505050565b600b6020526000908152604090205481565b6000620f42408206818111610c825782610cab565b610ca5620f4240610c99858263ffffffff61168116565b9063ffffffff61169816565b620f4240015b91505b50919050565b60005433600160a060020a03908116911614610ccf57600080fd5b600088118015610cdf5750600087115b8015610cea57508787115b8015610cf65750600085115b8015610d195750600360025460a060020a900460ff166004811115610d1757fe5b105b8015610d2457508281145b1515610d2f57600080fd5b610d4788670de0b6b3a764000063ffffffff61169816565b600455610d6287670de0b6b3a764000063ffffffff61169816565b600355610d7c8666038d7ea4c6800063ffffffff61169816565b6009556008859055610d90600e6000611775565b610df6848480806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050838380806020026020016040519081016040528093929190818152602001838360200280828437506116d2945050505050565b50506002805460a060020a60ff0219167403000000000000000000000000000000000000000017905550504260065550505050565b60005433600160a060020a03908116911614610e4657600080fd5b600160025460a060020a900460ff166004811115610e6057fe5b1480610e6f5750610e6f6112af565b1515610e7a57600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610b2d57600080fd5b60095481565b600254600160a060020a031681565b600f8160028110610ed557fe5b60209182820401919006915054906101000a900460ff1681565b60108160048110610ed557fe5b60005433600160a060020a03908116911614610f1757600080fd5b600c805460ff19169055565b60005433600160a060020a03908116911614610f3e57600080fd5b600c805460ff19166001179055565b60005433600160a060020a03908116911614610f6857600080fd5b600c5460ff16158015610fb35750600160025460a060020a900460ff166004811115610f9057fe5b1480610fb35750600360025460a060020a900460ff166004811115610fb157fe5b145b8015610fc25750600354600554105b1515610fcd57600080fd5b610fd782826106aa565b610fdf6109e0565b5050565b60075481565b600c54620100009004600160a060020a031681565b600a54600160a060020a031681565b600d54600160a060020a031681565b60015433600160a060020a0390811691161415610b2d576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60055481565b600054600160a060020a031681565b60005433600160a060020a039081169116146110ca57600080fd5b600160025460a060020a900460ff1660048111156110e457fe5b14806111075750600360025460a060020a900460ff16600481111561110557fe5b145b151561111257600080fd5b600160025460a060020a900460ff16600481111561112c57fe5b141561114d5760028054819060a060020a60ff02191660a060020a82610a57565b600280546004919060a060020a60ff02191660a060020a83610b27565b6000805433600160a060020a0390811691161461118657600080fd5b61118e6112af565b151561119957600080fd5b600a546000543091600160a060020a0390811691166111b6611796565b600160a060020a039384168152918316602083015290911660408083019190915260609091019051809103906000f08015156111f157600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790819055600a5482169163a9059cbb9116650b5e620f480060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561127c57600080fd5b6102c65a03f1151561128d57600080fd5b50505060405180515050600d54600160a060020a031690505b90565b60085481565b6000600460025460a060020a900460ff1660048111156112cb57fe5b1480156112dc575060045460055410155b905090565b6000600460025460a060020a900460ff1660048111156112fd57fe5b14801561130d5750600454600554105b151561131857600080fd5b50600160a060020a0333166000908152600b602052604081208054908290559081111561138757600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561138757600160a060020a0333166000908152600b602052604090208190555b50565b600e80548290811061139857fe5b60009182526020909120600290910201805460019091015490915082565b600054600160a060020a038481169116146113d057600080fd5b60008211806113e0575060008151115b15156113eb57600080fd5b505050565b6000806000600e805490501115611463575060005b600e5481101561146357600e80548290811061141d57fe5b6000918252602090912060029091020154831061145b57600e80548290811061144257fe5b9060005260206000209060020201600101549150610cae565b600101611405565b50600092915050565b60025460a060020a900460ff1681565b6000805433600160a060020a0390811691161461149857600080fd5b6114a06112af565b15156114ab57600080fd5b600a546000543091600160a060020a0390811691166114c86117a6565b600160a060020a039384168152918316602083015290911660408083019190915260609091019051809103906000f080151561150357600080fd5b600c805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0393841681029190911791829055600a5483169263a9059cbb929190910416650b5e620f480060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561159d57600080fd5b6102c65a03f115156115ae57600080fd5b50505060405180515050600c54620100009004600160a060020a0316919050565b60035481565b600154600160a060020a031681565b60045481565b60005433600160a060020a0390811691161461160557600080fd5b600160a060020a038116151561161a57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b4290565b600080828481151561168f57fe5b04949350505050565b60008282028315806116b457508284828115156116b157fe5b04145b15156116bc57fe5b9392505050565b6000828201838110156116bc57fe5b60005b82518110156113eb57600e8054600181016116f083826117b6565b916000526020600020906002020160006040805190810160405280611739670de0b6b3a764000089888151811061172357fe5b906020019060200201519063ffffffff61169816565b815260200186868151811061174a57fe5b9060200190602002015190529190508151815560208201516001918201559290920191506116d59050565b508054600082556002029060005260206000209081019061138791906117de565b6040516107d08061180383390190565b6040516108c380611fd383390190565b8154818355818115116113eb576002028160020283600052602060002091820191016113eb91905b6112a691905b808211156117fe57600080825560018201556002016117e4565b509056006060604052341561000f57600080fd5b6040516060806107d08339810160405280805191906020018051919060200180516000805460028054600160a060020a0319908116600160a060020a03998a16179091556003805482169789169790971790965585163387161790941694169390931782555061074a9150819061008690396000f3006060604052600436106100695763ffffffff60e060020a60003504166379ba5097811461006e5780638433acd1146100835780638da5cb5b14610096578063c0ee0b8a146100c5578063d091b5501461012a578063df8de3e71461013d578063f2fde38b1461015c575b600080fd5b341561007957600080fd5b61008161017b565b005b341561008e57600080fd5b6100816101fa565b34156100a157600080fd5b6100a9610413565b604051600160a060020a03909116815260200160405180910390f35b34156100d057600080fd5b61008160048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061042295505050505050565b341561013557600080fd5b6100a9610476565b341561014857600080fd5b610081600160a060020a0360043516610485565b341561016757600080fd5b610081600160a060020a0360043516610671565b60015433600160a060020a03908116911614156101f8576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b565b60008054819033600160a060020a0390811691161461021857600080fd5b600354600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561027157600080fd5b6102c65a03f1151561028257600080fd5b50505060405180519250506000821161029a57600080fd5b600254600160a060020a0316635958611e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156102e257600080fd5b6102c65a03f115156102f357600080fd5b5050506040518051915050600081118015610326575061031c816212750063ffffffff61070416565b61032461071a565b115b151561033157600080fd5b60035460008054600160a060020a039283169263a9059cbb9291169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561039957600080fd5b6102c65a03f115156103aa57600080fd5b5050506040518051905015156103bf57600080fd5b6000547f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b90600160a060020a031683604051600160a060020a03909216825260208201526040908101905180910390a15050565b600054600160a060020a031681565b600054600160a060020a038481169116148061044b5750600254600160a060020a038481169116145b151561045657600080fd5b6000821180610466575060008151115b151561047157600080fd5b505050565b600154600160a060020a031681565b6000805433600160a060020a039081169116146104a157600080fd5b600354600160a060020a03838116911614156104bc57600080fd5b600160a060020a038216151561050a57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561050557600080fd5b61066d565b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561058657600080fd5b6102c65a03f1151561059757600080fd5b505050604051805160035460008054929450600160a060020a03918216935063a9059cbb929091169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561060c57600080fd5b6102c65a03f1151561061d57600080fd5b50505060405180519050507fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078282604051600160a060020a03909216825260208201526040908101905180910390a15b5050565b60005433600160a060020a0390811691161461068c57600080fd5b600160a060020a03811615156106a157600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60008282018381101561071357fe5b9392505050565b42905600a165627a7a723058202eddf85802f8e6b9b462965facd98422aa29e435715fb614f3084de33a7c512300296060604052341561000f57600080fd5b6040516060806108c38339810160405280805191906020018051919060200180516000805460038054600160a060020a0319908116600160a060020a03998a16179091556004805482169789169790971790965585163387161790941694169390931782555061083d9150819061008690396000f3006060604052600436106100695763ffffffff60e060020a60003504166379ba5097811461006e5780638433acd1146100835780638da5cb5b14610096578063c0ee0b8a146100c5578063d091b5501461012a578063df8de3e71461013d578063f2fde38b1461015c575b600080fd5b341561007957600080fd5b61008161017b565b005b341561008e57600080fd5b6100816101fa565b34156100a157600080fd5b6100a961049e565b604051600160a060020a03909116815260200160405180910390f35b34156100d057600080fd5b61008160048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104ad95505050505050565b341561013557600080fd5b6100a9610501565b341561014857600080fd5b610081600160a060020a0360043516610510565b341561016757600080fd5b610081600160a060020a03600435166106fc565b60015433600160a060020a03908116911614156101f8576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b565b6000805481908190819033600160a060020a0390811691161461021c57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561027557600080fd5b6102c65a03f1151561028657600080fd5b50505060405180516002549095506102a591508563ffffffff61078f16565b600354909350600160a060020a0316635958611e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156102f057600080fd5b6102c65a03f1151561030157600080fd5b5050506040518051925050600082118015610334575061032a826212750063ffffffff61078f16565b6103326107a5565b115b151561033f57600080fd5b61038061034c600c6107a9565b6103746103678561035b6107a5565b9063ffffffff6107c416565b869063ffffffff6107d616565b9063ffffffff6107fa16565b9050610397600254826107c490919063ffffffff16565b9050838111156103a45750825b6002546103b7908263ffffffff61078f16565b60025560045460008054600160a060020a039283169263a9059cbb9291169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561042257600080fd5b6102c65a03f1151561043357600080fd5b50505060405180519050151561044857600080fd5b6000547f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b90600160a060020a031682604051600160a060020a03909216825260208201526040908101905180910390a150505050565b600054600160a060020a031681565b600054600160a060020a03848116911614806104d65750600354600160a060020a038481169116145b15156104e157600080fd5b60008211806104f1575060008151115b15156104fc57600080fd5b505050565b600154600160a060020a031681565b6000805433600160a060020a0390811691161461052c57600080fd5b600454600160a060020a038381169116141561054757600080fd5b600160a060020a038216151561059557600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561059057600080fd5b6106f8565b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561061157600080fd5b6102c65a03f1151561062257600080fd5b505050604051805160045460008054929450600160a060020a03918216935063a9059cbb929091169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561069757600080fd5b6102c65a03f115156106a857600080fd5b50505060405180519050507fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078282604051600160a060020a03909216825260208201526040908101905180910390a15b5050565b60005433600160a060020a0390811691161461071757600080fd5b600160a060020a038116151561072c57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60008282018381101561079e57fe5b9392505050565b4290565b60006107be8262278d0063ffffffff6107d616565b92915050565b6000828211156107d057fe5b50900390565b60008282028315806107f257508284828115156107ef57fe5b04145b151561079e57fe5b600080828481151561080857fe5b049493505050505600a165627a7a72305820cfbfbcb071eb8a5ab42661258cda33235ad5b855ae0669786bd8e97fe62049f40029a165627a7a72305820e3c85b6dfa4c20ae31317cbe8254281d393ba5c1d99f409078fb9254c6551ebf00290000000000000000000000007c1d56a4cc68440c124ab04cbd917fa869097f63000000000000000000000000d184b10ee51be2c6bf45214b048f311a15296cae

Deployed Bytecode

0x6060604052600436106101925763ffffffff60e060020a6000350416631f2698ab81146102aa5780632005db6d146102cf57806327e235e314610307578063285da5a9146103265780632bd579fc1461033c57806330b9af981461037657806333b5b62e1461038957806338af3eed1461039c5780634839ac30146103cb578063497d42f3146103f75780634a4e3bd51461040d57806351858e27146104205780635908984b146104335780635958611e1461045557806359be9cc0146104685780636e66f6e91461047b57806378e7058e1461048e57806379ba5097146104a15780637b3e5e7b146104b45780638da5cb5b146104c75780638f86f5ea146104da57806399b6f5a1146104ed578063a035b1fe14610500578063a19b549314610513578063b5545a3c1461053a578063bae6a6901461054d578063c0ee0b8a1461057b578063c118a9de146105e0578063c19d93fb146105f6578063c306cb901461062d578063cea10af714610640578063d091b55014610653578063dae392ee14610666578063f2fde38b14610679575b600c54600090819060ff161580156101e25750600160025460a060020a900460ff1660048111156101bf57fe5b14806101e25750600360025460a060020a900460ff1660048111156101e057fe5b145b80156101f15750600354600554105b15156101fc57600080fd5b6000341161020957600080fd5b60095434101561021857600080fd5b6005546003543493506102309163ffffffff61069816565b8211156102945760055460035461024c9163ffffffff61069816565b9050600160a060020a0333166108fc61026b848463ffffffff61069816565b9081150290604051600060405180830381858888f19350505050151561029057600080fd5b8091505b61029e33836106aa565b6102a66109e0565b5050005b34156102b557600080fd5b6102bd610b2f565b60405190815260200160405180910390f35b34156102da57600080fd5b6103056004803590602480359160443591606435808201929081013591608435908101910135610b35565b005b341561031257600080fd5b6102bd600160a060020a0360043516610c5b565b341561033157600080fd5b6102bd600435610c6d565b341561034757600080fd5b61030560048035906024803591604435916064359160843580830192908201359160a435918201910135610cb4565b341561038157600080fd5b610305610e2b565b341561039457600080fd5b6102bd610eb3565b34156103a757600080fd5b6103af610eb9565b604051600160a060020a03909116815260200160405180910390f35b34156103d657600080fd5b6103e1600435610ec8565b60405160ff909116815260200160405180910390f35b341561040257600080fd5b6103e1600435610eef565b341561041857600080fd5b610305610efc565b341561042b57600080fd5b610305610f23565b341561043e57600080fd5b610305600160a060020a0360043516602435610f4d565b341561046057600080fd5b6102bd610fe3565b341561047357600080fd5b6103af610fe9565b341561048657600080fd5b6103af610ffe565b341561049957600080fd5b6103af61100d565b34156104ac57600080fd5b61030561101c565b34156104bf57600080fd5b6102bd61109a565b34156104d257600080fd5b6103af6110a0565b34156104e557600080fd5b6103056110af565b34156104f857600080fd5b6103af61116a565b341561050b57600080fd5b6102bd6112a9565b341561051e57600080fd5b6105266112af565b604051901515815260200160405180910390f35b341561054557600080fd5b6103056112e1565b341561055857600080fd5b61056360043561138a565b60405191825260208201526040908101905180910390f35b341561058657600080fd5b61030560048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506113b695505050505050565b34156105eb57600080fd5b6102bd6004356113f0565b341561060157600080fd5b61060961146c565b6040518082600481111561061957fe5b60ff16815260200191505060405180910390f35b341561063857600080fd5b6103af61147c565b341561064b57600080fd5b6102bd6115cf565b341561065e57600080fd5b6103af6115d5565b341561067157600080fd5b6102bd6115e4565b341561068457600080fd5b610305600160a060020a03600435166115ea565b6000828211156106a457fe5b50900390565b60008060008060008060006106cc60055460035461069890919063ffffffff16565b8811156106d857600080fd5b6106f26006546106e661167d565b9063ffffffff61069816565b96506000955062093a808710610718576107158762093a8063ffffffff61168116565b95505b7f8a36f5a234186d446e36a7df36ace663a05a580d9bea2dd899c6dd76a075d5fa8660405190815260200160405180910390a1600360025460a060020a900460ff16600481111561076557fe5b14156107ed57610793600354610787600460055461169890919063ffffffff16565b9063ffffffff61168116565b9350858411156107a1578395505b600486106107ae57600395505b6107e66064610787601089600481106107c357fe5b6020808204909201546008549260ff92066101000a90041663ffffffff61169816565b9450610812565b600286106107fa57600195505b61080f6064610787600f89600281106107c357fe5b94505b7f8a36f5a234186d446e36a7df36ace663a05a580d9bea2dd899c6dd76a075d5fa8560405190815260200160405180910390a1610855888663ffffffff61168116565b9250610860886113f0565b91506108776064610787848663ffffffff61169816565b9050610889838263ffffffff6116c316565b925061089483610c6d565b600a54909350600160a060020a031663a9059cbb8a8560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108f657600080fd5b6102c65a03f1151561090757600080fd5b50505060405180519050151561091c57600080fd5b600160a060020a0389166000908152600b6020526040902054610945908963ffffffff6116c316565b600160a060020a038a166000908152600b6020526040902055600554610971908963ffffffff6116c316565b6005557f2b0c4dfbf2e34a2292e9110d6ea90d7c78f54b3aebe3974d2db7197308f21ff8898985846040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a1505050505050505050565b600160025460a060020a900460ff1660048111156109fa57fe5b1415610a625760035460055410610a5d577ff90a42045b12aef1cf33ae920628357639512bb8d1a943f2a8dda7d0b8088c2060055460405190815260200160405180910390a160028054819060a060020a60ff02191660a060020a825b02179055505b610b2d565b600c54610100900460ff16158015610a7e575060045460055410155b15610ac957600c805461ff0019166101001790556005547f50c73740b6808484aba715b361644d9e478fabf4cbddf8e122992ca9b71444119060405190815260200160405180910390a15b60035460055410610b2d57426007556005547fa1f724757cf717a688dc12d91540a30b9e166a778344d628ffe6b30f8e88bde29060405190815260200160405180910390a1600280546004919060a060020a60ff02191660a060020a835b02179055505b565b60065481565b60005433600160a060020a03908116911614610b5057600080fd5b600087118015610b605750600085115b8015610b835750600060025460a060020a900460ff166004811115610b8157fe5b145b8015610b8e57508281145b1515610b9957600080fd5b610bb187670de0b6b3a764000063ffffffff61169816565b600355610bcb8666038d7ea4c6800063ffffffff61169816565b6009556008859055610c388484806020808202016040519081016040528093929190818152602001838360200280828437820191505050505050838380806020026020016040519081016040528093929190818152602001838360200280828437506116d2945050505050565b50506002805460a060020a60ff02191660a060020a179055505042600655505050565b600b6020526000908152604090205481565b6000620f42408206818111610c825782610cab565b610ca5620f4240610c99858263ffffffff61168116565b9063ffffffff61169816565b620f4240015b91505b50919050565b60005433600160a060020a03908116911614610ccf57600080fd5b600088118015610cdf5750600087115b8015610cea57508787115b8015610cf65750600085115b8015610d195750600360025460a060020a900460ff166004811115610d1757fe5b105b8015610d2457508281145b1515610d2f57600080fd5b610d4788670de0b6b3a764000063ffffffff61169816565b600455610d6287670de0b6b3a764000063ffffffff61169816565b600355610d7c8666038d7ea4c6800063ffffffff61169816565b6009556008859055610d90600e6000611775565b610df6848480806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050838380806020026020016040519081016040528093929190818152602001838360200280828437506116d2945050505050565b50506002805460a060020a60ff0219167403000000000000000000000000000000000000000017905550504260065550505050565b60005433600160a060020a03908116911614610e4657600080fd5b600160025460a060020a900460ff166004811115610e6057fe5b1480610e6f5750610e6f6112af565b1515610e7a57600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610b2d57600080fd5b60095481565b600254600160a060020a031681565b600f8160028110610ed557fe5b60209182820401919006915054906101000a900460ff1681565b60108160048110610ed557fe5b60005433600160a060020a03908116911614610f1757600080fd5b600c805460ff19169055565b60005433600160a060020a03908116911614610f3e57600080fd5b600c805460ff19166001179055565b60005433600160a060020a03908116911614610f6857600080fd5b600c5460ff16158015610fb35750600160025460a060020a900460ff166004811115610f9057fe5b1480610fb35750600360025460a060020a900460ff166004811115610fb157fe5b145b8015610fc25750600354600554105b1515610fcd57600080fd5b610fd782826106aa565b610fdf6109e0565b5050565b60075481565b600c54620100009004600160a060020a031681565b600a54600160a060020a031681565b600d54600160a060020a031681565b60015433600160a060020a0390811691161415610b2d576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60055481565b600054600160a060020a031681565b60005433600160a060020a039081169116146110ca57600080fd5b600160025460a060020a900460ff1660048111156110e457fe5b14806111075750600360025460a060020a900460ff16600481111561110557fe5b145b151561111257600080fd5b600160025460a060020a900460ff16600481111561112c57fe5b141561114d5760028054819060a060020a60ff02191660a060020a82610a57565b600280546004919060a060020a60ff02191660a060020a83610b27565b6000805433600160a060020a0390811691161461118657600080fd5b61118e6112af565b151561119957600080fd5b600a546000543091600160a060020a0390811691166111b6611796565b600160a060020a039384168152918316602083015290911660408083019190915260609091019051809103906000f08015156111f157600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790819055600a5482169163a9059cbb9116650b5e620f480060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561127c57600080fd5b6102c65a03f1151561128d57600080fd5b50505060405180515050600d54600160a060020a031690505b90565b60085481565b6000600460025460a060020a900460ff1660048111156112cb57fe5b1480156112dc575060045460055410155b905090565b6000600460025460a060020a900460ff1660048111156112fd57fe5b14801561130d5750600454600554105b151561131857600080fd5b50600160a060020a0333166000908152600b602052604081208054908290559081111561138757600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561138757600160a060020a0333166000908152600b602052604090208190555b50565b600e80548290811061139857fe5b60009182526020909120600290910201805460019091015490915082565b600054600160a060020a038481169116146113d057600080fd5b60008211806113e0575060008151115b15156113eb57600080fd5b505050565b6000806000600e805490501115611463575060005b600e5481101561146357600e80548290811061141d57fe5b6000918252602090912060029091020154831061145b57600e80548290811061144257fe5b9060005260206000209060020201600101549150610cae565b600101611405565b50600092915050565b60025460a060020a900460ff1681565b6000805433600160a060020a0390811691161461149857600080fd5b6114a06112af565b15156114ab57600080fd5b600a546000543091600160a060020a0390811691166114c86117a6565b600160a060020a039384168152918316602083015290911660408083019190915260609091019051809103906000f080151561150357600080fd5b600c805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0393841681029190911791829055600a5483169263a9059cbb929190910416650b5e620f480060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561159d57600080fd5b6102c65a03f115156115ae57600080fd5b50505060405180515050600c54620100009004600160a060020a0316919050565b60035481565b600154600160a060020a031681565b60045481565b60005433600160a060020a0390811691161461160557600080fd5b600160a060020a038116151561161a57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b4290565b600080828481151561168f57fe5b04949350505050565b60008282028315806116b457508284828115156116b157fe5b04145b15156116bc57fe5b9392505050565b6000828201838110156116bc57fe5b60005b82518110156113eb57600e8054600181016116f083826117b6565b916000526020600020906002020160006040805190810160405280611739670de0b6b3a764000089888151811061172357fe5b906020019060200201519063ffffffff61169816565b815260200186868151811061174a57fe5b9060200190602002015190529190508151815560208201516001918201559290920191506116d59050565b508054600082556002029060005260206000209081019061138791906117de565b6040516107d08061180383390190565b6040516108c380611fd383390190565b8154818355818115116113eb576002028160020283600052602060002091820191016113eb91905b6112a691905b808211156117fe57600080825560018201556002016117e4565b509056006060604052341561000f57600080fd5b6040516060806107d08339810160405280805191906020018051919060200180516000805460028054600160a060020a0319908116600160a060020a03998a16179091556003805482169789169790971790965585163387161790941694169390931782555061074a9150819061008690396000f3006060604052600436106100695763ffffffff60e060020a60003504166379ba5097811461006e5780638433acd1146100835780638da5cb5b14610096578063c0ee0b8a146100c5578063d091b5501461012a578063df8de3e71461013d578063f2fde38b1461015c575b600080fd5b341561007957600080fd5b61008161017b565b005b341561008e57600080fd5b6100816101fa565b34156100a157600080fd5b6100a9610413565b604051600160a060020a03909116815260200160405180910390f35b34156100d057600080fd5b61008160048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061042295505050505050565b341561013557600080fd5b6100a9610476565b341561014857600080fd5b610081600160a060020a0360043516610485565b341561016757600080fd5b610081600160a060020a0360043516610671565b60015433600160a060020a03908116911614156101f8576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b565b60008054819033600160a060020a0390811691161461021857600080fd5b600354600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561027157600080fd5b6102c65a03f1151561028257600080fd5b50505060405180519250506000821161029a57600080fd5b600254600160a060020a0316635958611e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156102e257600080fd5b6102c65a03f115156102f357600080fd5b5050506040518051915050600081118015610326575061031c816212750063ffffffff61070416565b61032461071a565b115b151561033157600080fd5b60035460008054600160a060020a039283169263a9059cbb9291169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561039957600080fd5b6102c65a03f115156103aa57600080fd5b5050506040518051905015156103bf57600080fd5b6000547f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b90600160a060020a031683604051600160a060020a03909216825260208201526040908101905180910390a15050565b600054600160a060020a031681565b600054600160a060020a038481169116148061044b5750600254600160a060020a038481169116145b151561045657600080fd5b6000821180610466575060008151115b151561047157600080fd5b505050565b600154600160a060020a031681565b6000805433600160a060020a039081169116146104a157600080fd5b600354600160a060020a03838116911614156104bc57600080fd5b600160a060020a038216151561050a57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561050557600080fd5b61066d565b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561058657600080fd5b6102c65a03f1151561059757600080fd5b505050604051805160035460008054929450600160a060020a03918216935063a9059cbb929091169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561060c57600080fd5b6102c65a03f1151561061d57600080fd5b50505060405180519050507fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078282604051600160a060020a03909216825260208201526040908101905180910390a15b5050565b60005433600160a060020a0390811691161461068c57600080fd5b600160a060020a03811615156106a157600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60008282018381101561071357fe5b9392505050565b42905600a165627a7a723058202eddf85802f8e6b9b462965facd98422aa29e435715fb614f3084de33a7c512300296060604052341561000f57600080fd5b6040516060806108c38339810160405280805191906020018051919060200180516000805460038054600160a060020a0319908116600160a060020a03998a16179091556004805482169789169790971790965585163387161790941694169390931782555061083d9150819061008690396000f3006060604052600436106100695763ffffffff60e060020a60003504166379ba5097811461006e5780638433acd1146100835780638da5cb5b14610096578063c0ee0b8a146100c5578063d091b5501461012a578063df8de3e71461013d578063f2fde38b1461015c575b600080fd5b341561007957600080fd5b61008161017b565b005b341561008e57600080fd5b6100816101fa565b34156100a157600080fd5b6100a961049e565b604051600160a060020a03909116815260200160405180910390f35b34156100d057600080fd5b61008160048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104ad95505050505050565b341561013557600080fd5b6100a9610501565b341561014857600080fd5b610081600160a060020a0360043516610510565b341561016757600080fd5b610081600160a060020a03600435166106fc565b60015433600160a060020a03908116911614156101f8576001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff19928316178084559190931690935591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b565b6000805481908190819033600160a060020a0390811691161461021c57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561027557600080fd5b6102c65a03f1151561028657600080fd5b50505060405180516002549095506102a591508563ffffffff61078f16565b600354909350600160a060020a0316635958611e6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156102f057600080fd5b6102c65a03f1151561030157600080fd5b5050506040518051925050600082118015610334575061032a826212750063ffffffff61078f16565b6103326107a5565b115b151561033f57600080fd5b61038061034c600c6107a9565b6103746103678561035b6107a5565b9063ffffffff6107c416565b869063ffffffff6107d616565b9063ffffffff6107fa16565b9050610397600254826107c490919063ffffffff16565b9050838111156103a45750825b6002546103b7908263ffffffff61078f16565b60025560045460008054600160a060020a039283169263a9059cbb9291169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561042257600080fd5b6102c65a03f1151561043357600080fd5b50505060405180519050151561044857600080fd5b6000547f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b90600160a060020a031682604051600160a060020a03909216825260208201526040908101905180910390a150505050565b600054600160a060020a031681565b600054600160a060020a03848116911614806104d65750600354600160a060020a038481169116145b15156104e157600080fd5b60008211806104f1575060008151115b15156104fc57600080fd5b505050565b600154600160a060020a031681565b6000805433600160a060020a0390811691161461052c57600080fd5b600454600160a060020a038381169116141561054757600080fd5b600160a060020a038216151561059557600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561059057600080fd5b6106f8565b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561061157600080fd5b6102c65a03f1151561062257600080fd5b505050604051805160045460008054929450600160a060020a03918216935063a9059cbb929091169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561069757600080fd5b6102c65a03f115156106a857600080fd5b50505060405180519050507fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078282604051600160a060020a03909216825260208201526040908101905180910390a15b5050565b60005433600160a060020a0390811691161461071757600080fd5b600160a060020a038116151561072c57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60008282018381101561079e57fe5b9392505050565b4290565b60006107be8262278d0063ffffffff6107d616565b92915050565b6000828211156107d057fe5b50900390565b60008282028315806107f257508284828115156107ef57fe5b04145b151561079e57fe5b600080828481151561080857fe5b049493505050505600a165627a7a72305820cfbfbcb071eb8a5ab42661258cda33235ad5b855ae0669786bd8e97fe62049f40029a165627a7a72305820e3c85b6dfa4c20ae31317cbe8254281d393ba5c1d99f409078fb9254c6551ebf0029

Swarm Source

bzzr://e3c85b6dfa4c20ae31317cbe8254281d393ba5c1d99f409078fb9254c6551ebf

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.