ETH Price: $3,415.85 (+3.01%)

Contract

0x78F7eF08b4583F9866D8a98A9f2D9B64d9c02380
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer50778672018-02-12 16:29:492506 days ago1518452989IN
0x78F7eF08...4d9c02380
1.001 ETH0.00086141
Redeem48965492018-01-12 14:44:482537 days ago1515768288IN
0x78F7eF08...4d9c02380
0 ETH0.0009847741
Redeem48962392018-01-12 13:18:052537 days ago1515763085IN
0x78F7eF08...4d9c02380
0 ETH0.0009607640
Redeem48961912018-01-12 13:06:582537 days ago1515762418IN
0x78F7eF08...4d9c02380
0 ETH0.0009607640
Finish48936462018-01-12 1:41:562538 days ago1515721316IN
0x78F7eF08...4d9c02380
0 ETH0.0152769690
Register Alt Pur...48936182018-01-12 1:34:552538 days ago1515720895IN
0x78F7eF08...4d9c02380
0 ETH0.0086302480
Whitelist48936082018-01-12 1:30:492538 days ago1515720649IN
0x78F7eF08...4d9c02380
0 ETH0.0045978480
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.004803240
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.004803240
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.004803240
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.0048006440
Register Alt Pur...48934782018-01-12 0:56:502538 days ago1515718610IN
0x78F7eF08...4d9c02380
0 ETH0.004803240
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
48936462018-01-12 1:41:562538 days ago1515721316
0x78F7eF08...4d9c02380
3 ETH
48680902018-01-07 8:43:412542 days ago1515314621
0x78F7eF08...4d9c02380
22,422.17627807 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
48644612018-01-06 16:43:192543 days ago1515256999
0x78F7eF08...4d9c02380
2 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TelcoinSale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-12-11
*/

pragma solidity 0.4.18;


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

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

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

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


contract Telcoin {
    using SafeMath for uint256;

    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, uint _value);

    string public constant name = "Telcoin";
    string public constant symbol = "TEL";
    uint8 public constant decimals = 2;

    /// The ERC20 total fixed supply of tokens.
    uint256 public constant totalSupply = 100000000000 * (10 ** uint256(decimals));

    /// Account balances.
    mapping(address => uint256) balances;

    /// The transfer allowances.
    mapping (address => mapping (address => uint256)) internal allowed;

    /// The initial distributor is responsible for allocating the supply
    /// into the various pools described in the whitepaper. This can be
    /// verified later from the event log.
    function Telcoin(address _distributor) public {
        balances[_distributor] = totalSupply;
        Transfer(0x0, _distributor, totalSupply);
    }

    /// ERC20 balanceOf().
    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }

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

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

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

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

    /// ERC20 approve(). Comes with the standard caveat that an approval
    /// meant to limit spending may actually allow more to be spent due to
    /// unfortunate ordering of transactions. For safety, this method
    /// should only be called if the current allowance is 0. Alternatively,
    /// non-ERC20 increaseApproval() and decreaseApproval() can be used.
    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    /// ERC20 allowance().
    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
    }

    /// Not officially ERC20. Allows an allowance to be increased safely.
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /// Not officially ERC20. Allows an allowance to be decreased safely.
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }
}


contract TelcoinSaleToken {
    using SafeMath for uint256;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event Mint(address indexed to, uint256 amount);
    event MintFinished();
    event Redeem(address indexed beneficiary, uint256 sacrificedValue, uint256 grantedValue);
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// The owner of the contract.
    address public owner;

    /// The total number of minted tokens, excluding destroyed tokens.
    uint256 public totalSupply;

    /// The token balance and released amount of each address.
    mapping(address => uint256) balances;
    mapping(address => uint256) redeemed;

    /// Whether the token is still mintable.
    bool public mintingFinished = false;

    /// Redeemable telcoin.
    Telcoin telcoin;
    uint256 public totalRedeemed;

    /// Vesting period.
    uint256 vestingStart;
    uint256 vestingDuration;

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

    function TelcoinSaleToken(
        Telcoin _telcoin,
        uint256 _vestingStart,
        uint256 _vestingDuration
    )
        public
    {
        owner = msg.sender;
        telcoin = _telcoin;
        vestingStart = _vestingStart;
        vestingDuration = _vestingDuration;
    }

    function finishMinting() onlyOwner public returns (bool) {
        require(!mintingFinished);

        mintingFinished = true;
        MintFinished();

        return true;
    }

    function mint(address _to, uint256 _amount) onlyOwner public returns (bool) {
        require(_to != 0x0);
        require(!mintingFinished);
        require(_amount > 0);

        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Mint(_to, _amount);
        Transfer(0x0, _to, _amount);

        return true;
    }

    function redeemMany(address[] _beneficiaries) public {
        for (uint256 i = 0; i < _beneficiaries.length; i++) {
            redeem(_beneficiaries[i]);
        }
    }

    function redeem(address _beneficiary) public returns (uint256) {
        require(mintingFinished);
        require(_beneficiary != 0x0);

        uint256 balance = redeemableBalance(_beneficiary);
        if (balance == 0) {
            return 0;
        }

        uint256 totalDistributable = telcoin.balanceOf(this).add(totalRedeemed);

        // Avoid loss of precision by multiplying and later dividing by
        // a large value.
        uint256 amount = balance.mul(10 ** 18).div(totalSupply).mul(totalDistributable).div(10 ** 18);

        balances[_beneficiary] = balances[_beneficiary].sub(balance);
        redeemed[_beneficiary] = redeemed[_beneficiary].add(balance);
        balances[telcoin] = balances[telcoin].add(balance);
        totalRedeemed = totalRedeemed.add(amount);

        Transfer(_beneficiary, telcoin, balance);
        Redeem(_beneficiary, balance, amount);

        telcoin.transfer(_beneficiary, amount);

        return amount;
    }

    function transferOwnership(address _to) onlyOwner public {
        require(_to != address(0));
        OwnershipTransferred(owner, _to);
        owner = _to;
    }

    function balanceOf(address _owner) public constant returns (uint256) {
        return balances[_owner];
    }

    function redeemableBalance(address _beneficiary) public constant returns (uint256) {
        return vestedBalance(_beneficiary).sub(redeemed[_beneficiary]);
    }

    function vestedBalance(address _beneficiary) public constant returns (uint256) {
        uint256 currentBalance = balances[_beneficiary];
        uint256 totalBalance = currentBalance.add(redeemed[_beneficiary]);

        if (now < vestingStart) {
            return 0;
        }

        if (now >= vestingStart.add(vestingDuration)) {
            return totalBalance;
        }

        return totalBalance.mul(now.sub(vestingStart)).div(vestingDuration);
    }
}


contract TelcoinSale {
    using SafeMath for uint256;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event WalletChanged(address indexed previousWallet, address indexed newWallet);
    event TokenPurchase(
        address indexed purchaser,
        address indexed beneficiary,
        uint256 value,
        uint256 amount,
        uint256 bonusAmount
    );
    event TokenAltPurchase(
        address indexed purchaser,
        address indexed beneficiary,
        uint256 value,
        uint256 amount,
        uint256 bonusAmount,
        string symbol,
        string transactionId
    );
    event Pause();
    event Unpause();
    event Withdrawal(address indexed wallet, uint256 weiAmount);
    event Extended(uint256 until);
    event Finalized();
    event Refunding();
    event Refunded(address indexed beneficiary, uint256 weiAmount);
    event Whitelisted(
        address indexed participant,
        uint256 minWeiAmount,
        uint256 maxWeiAmount,
        uint32 bonusRate
    );
    event CapFlexed(uint32 flex);

    /// The owner of the contract.
    address public owner;

    /// The temporary token we're selling. Sale tokens can be converted
    /// immediately upon successful completion of the sale. Bonus tokens
    /// are on a separate vesting schedule.
    TelcoinSaleToken public saleToken;
    TelcoinSaleToken public bonusToken;

    /// The token we'll convert to after the sale ends.
    Telcoin public telcoin;

    /// The minimum and maximum goals to reach. If the soft cap is not reached
    /// by the end of the sale, the contract will enter refund mode. If the
    /// hard cap is reached, the contract can be finished early.
    ///
    /// Due to our actual soft cap being tied to USD and the assumption that
    /// the value of Ether will continue to increase during the ICO, we
    /// implement a fixed minimum softcap that accounts for a 2.5x value
    /// increase. The capFlex is a scale factor that allows us to scale the
    /// caps above the fixed minimum values. Initially the scale factor will
    /// be set so that our effective soft cap is ~10M USD.
    uint256 public softCap;
    uint256 public hardCap;
    uint32 public capFlex;

    /// The sale period.
    uint256 public startTime;
    uint256 public endTime;
    uint256 public timeExtension;

    /// The numnber of tokens to mint per wei.
    uint256 public rate;

    /// The total number of wei raised. Note that the contract's balance may
    /// differ from this value if someone has decided to forcefully send us
    /// ether.
    uint256 public weiRaised;

    /// The wallet that will receive the contract's balance once the sale
    /// finishes and the soft cap is reached.
    address public wallet;

    /// The list of addresses that are allowed to participate in the sale,
    /// up to what amount, and any special rate they may have, provided
    /// that they do in fact participate with at least the minimum value
    /// they agreed to.
    mapping(address => uint256) public whitelistedMin;
    mapping(address => uint256) public whitelistedMax;
    mapping(address => uint32) public bonusRates;

    /// The amount of wei and wei equivalents invested by each investor.
    mapping(address => uint256) public deposited;
    mapping(address => uint256) public altDeposited;

    /// An enumerable list of investors.
    address[] public investors;

    /// Whether the sale is paused.
    bool public paused = false;

    /// Whether the sale has finished, and when.
    bool public finished = false;
    uint256 public finishedAt;

    /// Whether we're accepting refunds.
    bool public refunding = false;

    /// The total number of wei refunded.
    uint256 public weiRefunded;

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

    modifier saleOpen() {
        require(!finished);
        require(!paused);
        require(now >= startTime);
        require(now <= endTime + timeExtension);
        _;
    }

    function TelcoinSale(
        uint256 _softCap,
        uint256 _hardCap,
        uint32 _capFlex,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _rate,
        address _wallet,
        Telcoin _telcoin,
        uint256 _bonusVestingStart,
        uint256 _bonusVestingDuration
    )
        public
        payable
    {
        require(msg.value > 0);
        require(_softCap > 0);
        require(_hardCap >= _softCap);
        require(_startTime >= now);
        require(_endTime >= _startTime);
        require(_rate > 0);
        require(_wallet != 0x0);

        owner = msg.sender;
        softCap = _softCap;
        hardCap = _hardCap;
        capFlex = _capFlex;
        startTime = _startTime;
        endTime = _endTime;
        rate = _rate;
        wallet = _wallet;
        telcoin = _telcoin;

        saleToken = new TelcoinSaleToken(telcoin, 0, 0);
        bonusToken = new TelcoinSaleToken(
            telcoin,
            _bonusVestingStart,
            _bonusVestingDuration
        );

        wallet.transfer(msg.value);
    }

    function () public payable {
        buyTokens(msg.sender);
    }

    function buyTokens(address _beneficiary) saleOpen public payable {
        require(_beneficiary != address(0));

        uint256 weiAmount = msg.value;
        require(weiAmount > 0);
        require(weiRaised.add(weiAmount) <= hardCap);

        uint256 totalPrior = totalDeposited(_beneficiary);
        uint256 totalAfter = totalPrior.add(weiAmount);
        require(totalAfter <= whitelistedMax[_beneficiary]);

        uint256 saleTokens;
        uint256 bonusTokens;

        (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, weiAmount);

        uint256 newDeposited = deposited[_beneficiary].add(weiAmount);
        deposited[_beneficiary] = newDeposited;
        investors.push(_beneficiary);

        weiRaised = weiRaised.add(weiAmount);

        saleToken.mint(_beneficiary, saleTokens);
        if (bonusTokens > 0) {
            bonusToken.mint(_beneficiary, bonusTokens);
        }

        TokenPurchase(
            msg.sender,
            _beneficiary,
            weiAmount,
            saleTokens,
            bonusTokens
        );
    }

    function changeWallet(address _wallet) onlyOwner public payable {
        require(_wallet != 0x0);
        require(msg.value > 0);

        WalletChanged(wallet, _wallet);
        wallet = _wallet;

        wallet.transfer(msg.value);
    }

    function extendTime(uint256 _timeExtension) onlyOwner public {
        require(!finished);
        require(now < endTime + timeExtension);
        require(_timeExtension > 0);

        timeExtension = timeExtension.add(_timeExtension);
        require(timeExtension <= 7 days);

        Extended(endTime.add(timeExtension));
    }

    function finish() onlyOwner public {
        require(!finished);
        require(hardCapReached() || now > endTime + timeExtension);

        finished = true;
        finishedAt = now;
        saleToken.finishMinting();
        bonusToken.finishMinting();

        uint256 distributableCoins = telcoin.balanceOf(this);

        if (softCapReached()) {
            uint256 saleTokens = saleToken.totalSupply();
            uint256 bonusTokens = bonusToken.totalSupply();
            uint256 totalTokens = saleTokens.add(bonusTokens);

            // Avoid loss of precision by multiplying and later dividing by
            // a large value.
            uint256 bonusPortion = bonusTokens.mul(10 ** 18).div(totalTokens).mul(distributableCoins).div(10 ** 18);
            uint256 salePortion = distributableCoins.sub(bonusPortion);

            saleToken.transferOwnership(owner);
            bonusToken.transferOwnership(owner);

            telcoin.transfer(saleToken, salePortion);
            telcoin.transfer(bonusToken, bonusPortion);

            withdraw();
        } else {
            refunding = true;
            telcoin.transfer(wallet, distributableCoins);
            Refunding();
        }

        Finalized();
    }

    function pause() onlyOwner public {
        require(!paused);
        paused = true;
        Pause();
    }

    function refundMany(address[] _investors) public {
        for (uint256 i = 0; i < _investors.length; i++) {
            refund(_investors[i]);
        }
    }

    function refund(address _investor) public {
        require(finished);
        require(refunding);
        require(deposited[_investor] > 0);

        uint256 weiAmount = deposited[_investor];
        deposited[_investor] = 0;
        weiRefunded = weiRefunded.add(weiAmount);
        Refunded(_investor, weiAmount);

        _investor.transfer(weiAmount);
    }

    function registerAltPurchase(
        address _beneficiary,
        string _symbol,
        string _transactionId,
        uint256 _weiAmount
    )
        saleOpen
        onlyOwner
        public
    {
        require(_beneficiary != address(0));
        require(totalDeposited(_beneficiary).add(_weiAmount) <= whitelistedMax[_beneficiary]);

        uint256 saleTokens;
        uint256 bonusTokens;

        (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, _weiAmount);

        uint256 newAltDeposited = altDeposited[_beneficiary].add(_weiAmount);
        altDeposited[_beneficiary] = newAltDeposited;
        investors.push(_beneficiary);

        weiRaised = weiRaised.add(_weiAmount);

        saleToken.mint(_beneficiary, saleTokens);
        if (bonusTokens > 0) {
            bonusToken.mint(_beneficiary, bonusTokens);
        }

        TokenAltPurchase(
            msg.sender,
            _beneficiary,
            _weiAmount,
            saleTokens,
            bonusTokens,
            _symbol,
            _transactionId
        );
    }

    function transferOwnership(address _to) onlyOwner public {
        require(_to != address(0));
        OwnershipTransferred(owner, _to);
        owner = _to;
    }

    function unpause() onlyOwner public {
        require(paused);
        paused = false;
        Unpause();
    }

    function updateCapFlex(uint32 _capFlex) onlyOwner public {
        require(!finished);
        capFlex = _capFlex;
        CapFlexed(capFlex);
    }

    function whitelistMany(
        address[] _participants,
        uint256 _minWeiAmount,
        uint256 _maxWeiAmount,
        uint32 _bonusRate
    )
        onlyOwner
        public
    {
        for (uint256 i = 0; i < _participants.length; i++) {
            whitelist(
                _participants[i],
                _minWeiAmount,
                _maxWeiAmount,
                _bonusRate
            );
        }
    }

    function whitelist(
        address _participant,
        uint256 _minWeiAmount,
        uint256 _maxWeiAmount,
        uint32 _bonusRate
    )
        onlyOwner
        public
    {
        require(_participant != 0x0);
        require(_bonusRate <= 400);

        whitelistedMin[_participant] = _minWeiAmount;
        whitelistedMax[_participant] = _maxWeiAmount;
        bonusRates[_participant] = _bonusRate;
        Whitelisted(
            _participant,
            _minWeiAmount,
            _maxWeiAmount,
            _bonusRate
        );
    }

    function withdraw() onlyOwner public {
        require(softCapReached() || (finished && now > finishedAt + 14 days));

        uint256 weiAmount = this.balance;

        if (weiAmount > 0) {
            wallet.transfer(weiAmount);
            Withdrawal(wallet, weiAmount);
        }
    }

    function hardCapReached() public constant returns (bool) {
        return weiRaised >= hardCap.mul(1000 + capFlex).div(1000);
    }

    function tokensForPurchase(
        address _beneficiary,
        uint256 _weiAmount
    )
        public
        constant
        returns (uint256, uint256)
    {
        uint256 baseTokens = _weiAmount.mul(rate);
        uint256 totalPrior = totalDeposited(_beneficiary);
        uint256 totalAfter = totalPrior.add(_weiAmount);

        // Has the beneficiary passed the assigned minimum purchase level?
        if (totalAfter < whitelistedMin[_beneficiary]) {
            return (baseTokens, 0);
        }

        uint32 bonusRate = bonusRates[_beneficiary];
        uint256 baseBonus = baseTokens.mul(1000 + bonusRate).div(1000).sub(baseTokens);

        // Do we pass the minimum purchase level with this purchase?
        if (totalPrior < whitelistedMin[_beneficiary]) {
            uint256 balancePrior = totalPrior.mul(rate);
            uint256 accumulatedBonus = balancePrior.mul(1000 + bonusRate).div(1000).sub(balancePrior);
            return (baseTokens, accumulatedBonus.add(baseBonus));
        }

        return (baseTokens, baseBonus);
    }

    function totalDeposited(address _investor) public constant returns (uint256) {
        return deposited[_investor].add(altDeposited[_investor]);
    }

    function softCapReached() public constant returns (bool) {
        return weiRaised >= softCap.mul(1000 + capFlex).div(1000);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"timeExtension","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_weiAmount","type":"uint256"}],"name":"tokensForPurchase","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCapReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"},{"name":"_minWeiAmount","type":"uint256"},{"name":"_maxWeiAmount","type":"uint256"},{"name":"_bonusRate","type":"uint32"}],"name":"whitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonusToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finishedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusRates","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"totalDeposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"telcoin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRefunded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_capFlex","type":"uint32"}],"name":"updateCapFlex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"},{"name":"_minWeiAmount","type":"uint256"},{"name":"_maxWeiAmount","type":"uint256"},{"name":"_bonusRate","type":"uint32"}],"name":"whitelistMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_symbol","type":"string"},{"name":"_transactionId","type":"string"},{"name":"_weiAmount","type":"uint256"}],"name":"registerAltPurchase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardCapReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"changeWallet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_timeExtension","type":"uint256"}],"name":"extendTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"deposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investors","type":"address[]"}],"name":"refundMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"capFlex","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refunding","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"altDeposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"}],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_softCap","type":"uint256"},{"name":"_hardCap","type":"uint256"},{"name":"_capFlex","type":"uint32"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_rate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_telcoin","type":"address"},{"name":"_bonusVestingStart","type":"uint256"},{"name":"_bonusVestingDuration","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousWallet","type":"address"},{"indexed":true,"name":"newWallet","type":"address"}],"name":"WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"bonusAmount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"bonusAmount","type":"uint256"},{"indexed":false,"name":"symbol","type":"string"},{"indexed":false,"name":"transactionId","type":"string"}],"name":"TokenAltPurchase","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"wallet","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"until","type":"uint256"}],"name":"Extended","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"Refunding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"minWeiAmount","type":"uint256"},{"indexed":false,"name":"maxWeiAmount","type":"uint256"},{"indexed":false,"name":"bonusRate","type":"uint32"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"flex","type":"uint32"}],"name":"CapFlexed","type":"event"}]

60606040526000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055506000601560006101000a81548160ff0219169083151502179055506040516101408062004a4183398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050600034111515620000d457600080fd5b60008a111515620000e457600080fd5b898910151515620000f457600080fd5b4287101515156200010457600080fd5b8686101515156200011457600080fd5b6000851115156200012457600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff16141515156200014b57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550896004819055508860058190555087600660006101000a81548163ffffffff021916908363ffffffff160217905550866007819055508560088190555084600a8190555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806200028162000459565b808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050604051809103906000f0801515620002dc57600080fd5b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682826200034b62000459565b808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050604051809103906000f0801515620003a657600080fd5b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156200044957600080fd5b505050505050505050506200046a565b60405161119f80620038a283390190565b613428806200047a6000396000f300606060405260043610610204576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063143551e41461020f5780631514bc48146102385780632b9edee9146102955780632c4e722e146102c25780633197cbb6146102eb5780633ccfd60b146103145780633e3926e4146103295780633f4ba83a146103835780633feb5f2b146103985780634042b66f146103fb57806341d4a1ab1461042457806347d54bff1461047957806349d94871146104a25780635155287a146104fb578063521eb27314610548578063530554811461059d5780635482d88e146105ea5780635c975abb1461063f5780635da89ac01461066c578063710c67051461069557806378e97925146106be5780637fd13532146106e7578063844d65c5146107625780638456cb59146107af5780638da5cb5b146107c4578063906a26e01461081957806390e50ba7146108425780639762f8021461090a57806398b9a2dc14610937578063a27aebbc14610965578063bef4876b14610988578063cb13cddb146109b5578063cee829ea14610a02578063d56b288914610a5c578063dd34c9a314610a71578063e985e36714610aa6578063ec8ac4d814610afb578063f2fde38b14610b29578063f43e98c714610b62578063f614299014610b8f578063fa89401a14610bdc578063fb86a40414610c15575b61020d33610c3e565b005b341561021a57600080fd5b610222611107565b6040518082815260200191505060405180910390f35b341561024357600080fd5b610278600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061110d565b604051808381526020018281526020019250505060405180910390f35b34156102a057600080fd5b6102a8611314565b604051808215151515815260200191505060405180910390f35b34156102cd57600080fd5b6102d5611365565b6040518082815260200191505060405180910390f35b34156102f657600080fd5b6102fe61136b565b6040518082815260200191505060405180910390f35b341561031f57600080fd5b610327611371565b005b341561033457600080fd5b610381600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803563ffffffff16906020019091905050611503565b005b341561038e57600080fd5b6103966116f1565b005b34156103a357600080fd5b6103b960048080359060200190919050506117b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561040657600080fd5b61040e6117ef565b6040518082815260200191505060405180910390f35b341561042f57600080fd5b6104376117f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048457600080fd5b61048c61181b565b6040518082815260200191505060405180910390f35b34156104ad57600080fd5b6104d9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611821565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561050657600080fd5b610532600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611844565b6040518082815260200191505060405180910390f35b341561055357600080fd5b61055b61185c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105a857600080fd5b6105d4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611882565b6040518082815260200191505060405180910390f35b34156105f557600080fd5b6105fd61191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561064a57600080fd5b610652611942565b604051808215151515815260200191505060405180910390f35b341561067757600080fd5b61067f611955565b6040518082815260200191505060405180910390f35b34156106a057600080fd5b6106bc600480803563ffffffff1690602001909190505061195b565b005b34156106c957600080fd5b6106d1611a4b565b6040518082815260200191505060405180910390f35b34156106f257600080fd5b61076060048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001909190803590602001909190803563ffffffff16906020019091905050611a51565b005b341561076d57600080fd5b610799600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611af3565b6040518082815260200191505060405180910390f35b34156107ba57600080fd5b6107c2611b0b565b005b34156107cf57600080fd5b6107d7611bcb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561082457600080fd5b61082c611bf0565b6040518082815260200191505060405180910390f35b341561084d57600080fd5b610908600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050611bf6565b005b341561091557600080fd5b61091d6121b4565b604051808215151515815260200191505060405180910390f35b610963600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612205565b005b341561097057600080fd5b61098660048080359060200190919050506123b7565b005b341561099357600080fd5b61099b6124d0565b604051808215151515815260200191505060405180910390f35b34156109c057600080fd5b6109ec600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506124e3565b6040518082815260200191505060405180910390f35b3415610a0d57600080fd5b610a5a6004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506124fb565b005b3415610a6757600080fd5b610a6f61253b565b005b3415610a7c57600080fd5b610a84612faa565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610ab157600080fd5b610ab9612fc0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b27600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c3e565b005b3415610b3457600080fd5b610b60600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612fe6565b005b3415610b6d57600080fd5b610b7561313b565b604051808215151515815260200191505060405180910390f35b3415610b9a57600080fd5b610bc6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061314e565b6040518082815260200191505060405180910390f35b3415610be757600080fd5b610c13600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613166565b005b3415610c2057600080fd5b610c28613320565b6040518082815260200191505060405180910390f35b600080600080600080601360019054906101000a900460ff16151515610c6357600080fd5b601360009054906101000a900460ff16151515610c7f57600080fd5b6007544210151515610c9057600080fd5b600954600854014211151515610ca557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610ce157600080fd5b349550600086111515610cf357600080fd5b600554610d0b87600b5461332690919063ffffffff16565b11151515610d1857600080fd5b610d2187611882565b9450610d36868661332690919063ffffffff16565b9350600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411151515610d8657600080fd5b610d90878761110d565b8093508194505050610dea86601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b905080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060128054806001018281610e4491906133ab565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610ea886600b5461332690919063ffffffff16565b600b81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610f7b57600080fd5b6102c65a03f11515610f8c57600080fd5b5050506040518051905050600082111561108a57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561106d57600080fd5b6102c65a03f1151561107e57600080fd5b50505060405180519050505b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e88868660405180848152602001838152602001828152602001935050505060405180910390a350505050505050565b60095481565b6000806000806000806000806000611130600a548b61334490919063ffffffff16565b965061113b8b611882565b95506111508a8761332690919063ffffffff16565b9450600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548510156111a85786600080905098509850611306565b600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16935061123d8761122f6103e8611221886103e80163ffffffff168c61334490919063ffffffff16565b61337790919063ffffffff16565b61339290919063ffffffff16565b9250600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548610156112ff5761129b600a548761334490919063ffffffff16565b91506112e0826112d26103e86112c4886103e80163ffffffff168761334490919063ffffffff16565b61337790919063ffffffff16565b61339290919063ffffffff16565b9050866112f6848361332690919063ffffffff16565b98509850611306565b8683985098505b505050505050509250929050565b600061135b6103e861134d600660009054906101000a900463ffffffff166103e80163ffffffff1660045461334490919063ffffffff16565b61337790919063ffffffff16565b600b541015905090565b600a5481565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ce57600080fd5b6113d6611314565b806113ff5750601360019054906101000a900460ff1680156113fe5750621275006014540142115b5b151561140a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16319050600081111561150057600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561148f57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a25b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155e57600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff161415151561158457600080fd5b6101908163ffffffff161115151561159b57600080fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f348378d001a3415ea7735219f65dfd8b280dea9b77ba19ba1fa47d5fe5c9618d848484604051808481526020018381526020018263ffffffff1663ffffffff168152602001935050505060405180910390a250505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c57600080fd5b601360009054906101000a900460ff16151561176757600080fd5b6000601360006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6012818154811015156117bf57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b600d6020528060005260406000206000915090505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611915601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b9050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119b657600080fd5b601360019054906101000a900460ff161515156119d257600080fd5b80600660006101000a81548163ffffffff021916908363ffffffff1602179055507f7cbf2bdce868ab572ec276ff0bb1074b2b14e049c221bc3099d9100fd180e69f600660009054906101000a900463ffffffff16604051808263ffffffff1663ffffffff16815260200191505060405180910390a150565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611aae57600080fd5b600090505b8451811015611aec57611adf8582815181101515611acd57fe5b90602001906020020151858585611503565b8080600101915050611ab3565b5050505050565b600e6020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b6657600080fd5b601360009054906101000a900460ff16151515611b8257600080fd5b6001601360006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6000806000601360019054906101000a900460ff16151515611c1757600080fd5b601360009054906101000a900460ff16151515611c3357600080fd5b6007544210151515611c4457600080fd5b600954600854014211151515611c5957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cb457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515611cf057600080fd5b600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d4b85611d3d8a611882565b61332690919063ffffffff16565b11151515611d5857600080fd5b611d62878561110d565b8093508194505050611dbc84601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b905080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060128054806001018281611e1691906133ab565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611e7a84600b5461332690919063ffffffff16565b600b81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611f4d57600080fd5b6102c65a03f11515611f5e57600080fd5b5050506040518051905050600082111561205c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561203f57600080fd5b6102c65a03f1151561205057600080fd5b50505060405180519050505b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f673441db3a5fb97b2e1f9feeec16535dcc14d69ea59b26b98ca2bdb31e7e50588686868b8b604051808681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156121065780820151818401526020810190506120eb565b50505050905090810190601f1680156121335780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561216c578082015181840152602081019050612151565b50505050905090810190601f1680156121995780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a350505050505050565b60006121fb6103e86121ed600660009054906101000a900463ffffffff166103e80163ffffffff1660055461334490919063ffffffff16565b61337790919063ffffffff16565b600b541015905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561226057600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561228657600080fd5b60003411151561229557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f64cbbd34f3faebfd04eff088ae5832f6d254dbb81820b0055e9d85c534aa700d60405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156123b457600080fd5b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561241257600080fd5b601360019054906101000a900460ff1615151561242e57600080fd5b600954600854014210151561244257600080fd5b60008111151561245157600080fd5b6124668160095461332690919063ffffffff16565b60098190555062093a806009541115151561248057600080fd5b7f1c73e1d0cd5dc5067743dac22cf396dbbdde644cc51e2af8e0142666c67b29a96124b860095460085461332690919063ffffffff16565b6040518082815260200191505060405180910390a150565b601360019054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b60008090505b81518110156125375761252a828281518110151561251b57fe5b90602001906020020151613166565b8080600101915050612501565b5050565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561259f57600080fd5b601360019054906101000a900460ff161515156125bb57600080fd5b6125c36121b4565b806125d357506009546008540142115b15156125de57600080fd5b6001601360016101000a81548160ff02191690831515021790555042601481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561268e57600080fd5b6102c65a03f1151561269f57600080fd5b5050506040518051905050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561273857600080fd5b6102c65a03f1151561274957600080fd5b5050506040518051905050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561281957600080fd5b6102c65a03f1151561282a57600080fd5b50505060405180519050955061283e611314565b15612e2357600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156128d157600080fd5b6102c65a03f115156128e257600080fd5b505050604051805190509450600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561297c57600080fd5b6102c65a03f1151561298d57600080fd5b5050506040518051905093506129ac848661332690919063ffffffff16565b9250612a07670de0b6b3a76400006129f9886129eb876129dd670de0b6b3a76400008b61334490919063ffffffff16565b61337790919063ffffffff16565b61334490919063ffffffff16565b61337790919063ffffffff16565b9150612a1c828761339290919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515612afb57600080fd5b6102c65a03f11515612b0c57600080fd5b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515612bec57600080fd5b6102c65a03f11515612bfd57600080fd5b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612cef57600080fd5b6102c65a03f11515612d0057600080fd5b5050506040518051905050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612dfa57600080fd5b6102c65a03f11515612e0b57600080fd5b5050506040518051905050612e1e611371565b612f76565b6001601560006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612f2d57600080fd5b6102c65a03f11515612f3e57600080fd5b50505060405180519050507f669a43b03ba463851f494386ef35ad910676134dbe92b542ccba1789cca9dd3860405160405180910390a15b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1505050505050565b600660009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561304157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561307d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b6000601360019054906101000a900460ff16151561318357600080fd5b601560009054906101000a900460ff16151561319e57600080fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156131ec57600080fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132888160165461332690919063ffffffff16565b6016819055508173ffffffffffffffffffffffffffffffffffffffff167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561331c57600080fd5b5050565b60055481565b600080828401905083811015151561333a57fe5b8091505092915050565b60008082840290506000841480613365575082848281151561336257fe5b04145b151561336d57fe5b8091505092915050565b600080828481151561338557fe5b0490508091505092915050565b60008282111515156133a057fe5b818303905092915050565b8154818355818115116133d2578183600052602060002091820191016133d191906133d7565b5b505050565b6133f991905b808211156133f55760008160009055506001016133dd565b5090565b905600a165627a7a723058209eaba96f705107864590743b6c475ae35833cb8fe713dd1c46a60672fa514f85002960606040526000600460006101000a81548160ff021916908315150217905550341561002a57600080fd5b60405160608061119f83398101604052808051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600681905550806007819055505050506110a6806100f96000396000f3006060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b146100bf57806318160ddd146100ec57806340c10f191461011557806370a082311461016f5780637d64bcb4146101bc5780638da5cb5b146101e95780639114557e1461023e57806395a2251f1461028b578063a0641288146102d8578063b8216ea814610325578063f2fde38b1461037f578063f35dad40146103b8575b600080fd5b34156100ca57600080fd5b6100d26103e1565b604051808215151515815260200191505060405180910390f35b34156100f757600080fd5b6100ff6103f4565b6040518082815260200191505060405180910390f35b341561012057600080fd5b610155600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506103fa565b604051808215151515815260200191505060405180910390f35b341561017a57600080fd5b6101a6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610600565b6040518082815260200191505060405180910390f35b34156101c757600080fd5b6101cf610649565b604051808215151515815260200191505060405180910390f35b34156101f457600080fd5b6101fc610710565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561024957600080fd5b610275600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610735565b6040518082815260200191505060405180910390f35b341561029657600080fd5b6102c2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061084f565b6040518082815260200191505060405180910390f35b34156102e357600080fd5b61030f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610df6565b6040518082815260200191505060405180910390f35b341561033057600080fd5b61037d600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610e59565b005b341561038a57600080fd5b6103b6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e9a565b005b34156103c357600080fd5b6103cb610fef565b6040518082815260200191505060405180910390f35b600460009054906101000a900460ff1681565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561045757600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff161415151561047d57600080fd5b600460009054906101000a900460ff1615151561049957600080fd5b6000821115156104a857600080fd5b6104bd82600154610ff590919063ffffffff16565b60018190555061051582600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff590919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106a657600080fd5b600460009054906101000a900460ff161515156106c257600080fd5b6001600460006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506107ce600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610ff590919063ffffffff16565b90506006544210156107e35760009250610848565b6107fa600754600654610ff590919063ffffffff16565b4210151561080a57809250610848565b6108456007546108376108286006544261101390919063ffffffff16565b8461102c90919063ffffffff16565b61105f90919063ffffffff16565b92505b5050919050565b600080600080600460009054906101000a900460ff16151561087057600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff161415151561089657600080fd5b61089f85610df6565b925060008314156108b35760009350610dee565b6109a7600554600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561097e57600080fd5b6102c65a03f1151561098f57600080fd5b50505060405180519050610ff590919063ffffffff16565b9150610a04670de0b6b3a76400006109f6846109e86001546109da670de0b6b3a76400008a61102c90919063ffffffff16565b61105f90919063ffffffff16565b61102c90919063ffffffff16565b61105f90919063ffffffff16565b9050610a5883600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461101390919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610aed83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff590919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ba48360026000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff590919063ffffffff16565b60026000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c1e81600554610ff590919063ffffffff16565b600581905550600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38473ffffffffffffffffffffffffffffffffffffffff167fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9298483604051808381526020018281526020019250505060405180910390a2600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610dce57600080fd5b6102c65a03f11515610ddf57600080fd5b50505060405180519050508093505b505050919050565b6000610e52600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4484610735565b61101390919063ffffffff16565b9050919050565b60008090505b8151811015610e9657610e888282815181101515610e7957fe5b9060200190602002015161084f565b508080600101915050610e5f565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ef557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610f3157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b600080828401905083811015151561100957fe5b8091505092915050565b600082821115151561102157fe5b818303905092915050565b6000808284029050600084148061104d575082848281151561104a57fe5b04145b151561105557fe5b8091505092915050565b600080828481151561106d57fe5b04905080915050929150505600a165627a7a723058202a9920dea4a50d68c299d33a2363b9333f701856167da6c4862260c0496c3fa300290000000000000000000000000000000000000000000001e7e4171bf4d3a000000000000000000000000000000000000000000000000004c3ba39c5e41110000000000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000005a2ee3c0000000000000000000000000000000000000000000000000000000005a80a0c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008322c7e7c14b57ff85947f28381421692a1cf26700000000000000000000000085e076361cc813a908ff672f9bad1541474402b2000000000000000000000000000000000000000000000000000000005a81f2400000000000000000000000000000000000000000000000000000000000ed4e00

Deployed Bytecode

0x606060405260043610610204576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063143551e41461020f5780631514bc48146102385780632b9edee9146102955780632c4e722e146102c25780633197cbb6146102eb5780633ccfd60b146103145780633e3926e4146103295780633f4ba83a146103835780633feb5f2b146103985780634042b66f146103fb57806341d4a1ab1461042457806347d54bff1461047957806349d94871146104a25780635155287a146104fb578063521eb27314610548578063530554811461059d5780635482d88e146105ea5780635c975abb1461063f5780635da89ac01461066c578063710c67051461069557806378e97925146106be5780637fd13532146106e7578063844d65c5146107625780638456cb59146107af5780638da5cb5b146107c4578063906a26e01461081957806390e50ba7146108425780639762f8021461090a57806398b9a2dc14610937578063a27aebbc14610965578063bef4876b14610988578063cb13cddb146109b5578063cee829ea14610a02578063d56b288914610a5c578063dd34c9a314610a71578063e985e36714610aa6578063ec8ac4d814610afb578063f2fde38b14610b29578063f43e98c714610b62578063f614299014610b8f578063fa89401a14610bdc578063fb86a40414610c15575b61020d33610c3e565b005b341561021a57600080fd5b610222611107565b6040518082815260200191505060405180910390f35b341561024357600080fd5b610278600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061110d565b604051808381526020018281526020019250505060405180910390f35b34156102a057600080fd5b6102a8611314565b604051808215151515815260200191505060405180910390f35b34156102cd57600080fd5b6102d5611365565b6040518082815260200191505060405180910390f35b34156102f657600080fd5b6102fe61136b565b6040518082815260200191505060405180910390f35b341561031f57600080fd5b610327611371565b005b341561033457600080fd5b610381600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803563ffffffff16906020019091905050611503565b005b341561038e57600080fd5b6103966116f1565b005b34156103a357600080fd5b6103b960048080359060200190919050506117b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561040657600080fd5b61040e6117ef565b6040518082815260200191505060405180910390f35b341561042f57600080fd5b6104376117f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048457600080fd5b61048c61181b565b6040518082815260200191505060405180910390f35b34156104ad57600080fd5b6104d9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611821565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561050657600080fd5b610532600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611844565b6040518082815260200191505060405180910390f35b341561055357600080fd5b61055b61185c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105a857600080fd5b6105d4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611882565b6040518082815260200191505060405180910390f35b34156105f557600080fd5b6105fd61191c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561064a57600080fd5b610652611942565b604051808215151515815260200191505060405180910390f35b341561067757600080fd5b61067f611955565b6040518082815260200191505060405180910390f35b34156106a057600080fd5b6106bc600480803563ffffffff1690602001909190505061195b565b005b34156106c957600080fd5b6106d1611a4b565b6040518082815260200191505060405180910390f35b34156106f257600080fd5b61076060048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001909190803590602001909190803563ffffffff16906020019091905050611a51565b005b341561076d57600080fd5b610799600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611af3565b6040518082815260200191505060405180910390f35b34156107ba57600080fd5b6107c2611b0b565b005b34156107cf57600080fd5b6107d7611bcb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561082457600080fd5b61082c611bf0565b6040518082815260200191505060405180910390f35b341561084d57600080fd5b610908600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050611bf6565b005b341561091557600080fd5b61091d6121b4565b604051808215151515815260200191505060405180910390f35b610963600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612205565b005b341561097057600080fd5b61098660048080359060200190919050506123b7565b005b341561099357600080fd5b61099b6124d0565b604051808215151515815260200191505060405180910390f35b34156109c057600080fd5b6109ec600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506124e3565b6040518082815260200191505060405180910390f35b3415610a0d57600080fd5b610a5a6004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506124fb565b005b3415610a6757600080fd5b610a6f61253b565b005b3415610a7c57600080fd5b610a84612faa565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610ab157600080fd5b610ab9612fc0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b27600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c3e565b005b3415610b3457600080fd5b610b60600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612fe6565b005b3415610b6d57600080fd5b610b7561313b565b604051808215151515815260200191505060405180910390f35b3415610b9a57600080fd5b610bc6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061314e565b6040518082815260200191505060405180910390f35b3415610be757600080fd5b610c13600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613166565b005b3415610c2057600080fd5b610c28613320565b6040518082815260200191505060405180910390f35b600080600080600080601360019054906101000a900460ff16151515610c6357600080fd5b601360009054906101000a900460ff16151515610c7f57600080fd5b6007544210151515610c9057600080fd5b600954600854014211151515610ca557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515610ce157600080fd5b349550600086111515610cf357600080fd5b600554610d0b87600b5461332690919063ffffffff16565b11151515610d1857600080fd5b610d2187611882565b9450610d36868661332690919063ffffffff16565b9350600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411151515610d8657600080fd5b610d90878761110d565b8093508194505050610dea86601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b905080601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060128054806001018281610e4491906133ab565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610ea886600b5461332690919063ffffffff16565b600b81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610f7b57600080fd5b6102c65a03f11515610f8c57600080fd5b5050506040518051905050600082111561108a57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561106d57600080fd5b6102c65a03f1151561107e57600080fd5b50505060405180519050505b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e88868660405180848152602001838152602001828152602001935050505060405180910390a350505050505050565b60095481565b6000806000806000806000806000611130600a548b61334490919063ffffffff16565b965061113b8b611882565b95506111508a8761332690919063ffffffff16565b9450600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548510156111a85786600080905098509850611306565b600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16935061123d8761122f6103e8611221886103e80163ffffffff168c61334490919063ffffffff16565b61337790919063ffffffff16565b61339290919063ffffffff16565b9250600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548610156112ff5761129b600a548761334490919063ffffffff16565b91506112e0826112d26103e86112c4886103e80163ffffffff168761334490919063ffffffff16565b61337790919063ffffffff16565b61339290919063ffffffff16565b9050866112f6848361332690919063ffffffff16565b98509850611306565b8683985098505b505050505050509250929050565b600061135b6103e861134d600660009054906101000a900463ffffffff166103e80163ffffffff1660045461334490919063ffffffff16565b61337790919063ffffffff16565b600b541015905090565b600a5481565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ce57600080fd5b6113d6611314565b806113ff5750601360019054906101000a900460ff1680156113fe5750621275006014540142115b5b151561140a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16319050600081111561150057600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561148f57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a25b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155e57600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff161415151561158457600080fd5b6101908163ffffffff161115151561159b57600080fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f348378d001a3415ea7735219f65dfd8b280dea9b77ba19ba1fa47d5fe5c9618d848484604051808481526020018381526020018263ffffffff1663ffffffff168152602001935050505060405180910390a250505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c57600080fd5b601360009054906101000a900460ff16151561176757600080fd5b6000601360006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6012818154811015156117bf57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b600d6020528060005260406000206000915090505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611915601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b9050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119b657600080fd5b601360019054906101000a900460ff161515156119d257600080fd5b80600660006101000a81548163ffffffff021916908363ffffffff1602179055507f7cbf2bdce868ab572ec276ff0bb1074b2b14e049c221bc3099d9100fd180e69f600660009054906101000a900463ffffffff16604051808263ffffffff1663ffffffff16815260200191505060405180910390a150565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611aae57600080fd5b600090505b8451811015611aec57611adf8582815181101515611acd57fe5b90602001906020020151858585611503565b8080600101915050611ab3565b5050505050565b600e6020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b6657600080fd5b601360009054906101000a900460ff16151515611b8257600080fd5b6001601360006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6000806000601360019054906101000a900460ff16151515611c1757600080fd5b601360009054906101000a900460ff16151515611c3357600080fd5b6007544210151515611c4457600080fd5b600954600854014211151515611c5957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cb457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614151515611cf057600080fd5b600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d4b85611d3d8a611882565b61332690919063ffffffff16565b11151515611d5857600080fd5b611d62878561110d565b8093508194505050611dbc84601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332690919063ffffffff16565b905080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060128054806001018281611e1691906133ab565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611e7a84600b5461332690919063ffffffff16565b600b81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611f4d57600080fd5b6102c65a03f11515611f5e57600080fd5b5050506040518051905050600082111561205c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561203f57600080fd5b6102c65a03f1151561205057600080fd5b50505060405180519050505b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f673441db3a5fb97b2e1f9feeec16535dcc14d69ea59b26b98ca2bdb31e7e50588686868b8b604051808681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156121065780820151818401526020810190506120eb565b50505050905090810190601f1680156121335780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561216c578082015181840152602081019050612151565b50505050905090810190601f1680156121995780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a350505050505050565b60006121fb6103e86121ed600660009054906101000a900463ffffffff166103e80163ffffffff1660055461334490919063ffffffff16565b61337790919063ffffffff16565b600b541015905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561226057600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561228657600080fd5b60003411151561229557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f64cbbd34f3faebfd04eff088ae5832f6d254dbb81820b0055e9d85c534aa700d60405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156123b457600080fd5b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561241257600080fd5b601360019054906101000a900460ff1615151561242e57600080fd5b600954600854014210151561244257600080fd5b60008111151561245157600080fd5b6124668160095461332690919063ffffffff16565b60098190555062093a806009541115151561248057600080fd5b7f1c73e1d0cd5dc5067743dac22cf396dbbdde644cc51e2af8e0142666c67b29a96124b860095460085461332690919063ffffffff16565b6040518082815260200191505060405180910390a150565b601360019054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b60008090505b81518110156125375761252a828281518110151561251b57fe5b90602001906020020151613166565b8080600101915050612501565b5050565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561259f57600080fd5b601360019054906101000a900460ff161515156125bb57600080fd5b6125c36121b4565b806125d357506009546008540142115b15156125de57600080fd5b6001601360016101000a81548160ff02191690831515021790555042601481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561268e57600080fd5b6102c65a03f1151561269f57600080fd5b5050506040518051905050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561273857600080fd5b6102c65a03f1151561274957600080fd5b5050506040518051905050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561281957600080fd5b6102c65a03f1151561282a57600080fd5b50505060405180519050955061283e611314565b15612e2357600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156128d157600080fd5b6102c65a03f115156128e257600080fd5b505050604051805190509450600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561297c57600080fd5b6102c65a03f1151561298d57600080fd5b5050506040518051905093506129ac848661332690919063ffffffff16565b9250612a07670de0b6b3a76400006129f9886129eb876129dd670de0b6b3a76400008b61334490919063ffffffff16565b61337790919063ffffffff16565b61334490919063ffffffff16565b61337790919063ffffffff16565b9150612a1c828761339290919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515612afb57600080fd5b6102c65a03f11515612b0c57600080fd5b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515612bec57600080fd5b6102c65a03f11515612bfd57600080fd5b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612cef57600080fd5b6102c65a03f11515612d0057600080fd5b5050506040518051905050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612dfa57600080fd5b6102c65a03f11515612e0b57600080fd5b5050506040518051905050612e1e611371565b612f76565b6001601560006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612f2d57600080fd5b6102c65a03f11515612f3e57600080fd5b50505060405180519050507f669a43b03ba463851f494386ef35ad910676134dbe92b542ccba1789cca9dd3860405160405180910390a15b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1505050505050565b600660009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561304157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561307d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900460ff1681565b60116020528060005260406000206000915090505481565b6000601360019054906101000a900460ff16151561318357600080fd5b601560009054906101000a900460ff16151561319e57600080fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156131ec57600080fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132888160165461332690919063ffffffff16565b6016819055508173ffffffffffffffffffffffffffffffffffffffff167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651826040518082815260200191505060405180910390a28173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561331c57600080fd5b5050565b60055481565b600080828401905083811015151561333a57fe5b8091505092915050565b60008082840290506000841480613365575082848281151561336257fe5b04145b151561336d57fe5b8091505092915050565b600080828481151561338557fe5b0490508091505092915050565b60008282111515156133a057fe5b818303905092915050565b8154818355818115116133d2578183600052602060002091820191016133d191906133d7565b5b505050565b6133f991905b808211156133f55760008160009055506001016133dd565b5090565b905600a165627a7a723058209eaba96f705107864590743b6c475ae35833cb8fe713dd1c46a60672fa514f850029

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

0000000000000000000000000000000000000000000001e7e4171bf4d3a000000000000000000000000000000000000000000000000004c3ba39c5e41110000000000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000005a2ee3c0000000000000000000000000000000000000000000000000000000005a80a0c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008322c7e7c14b57ff85947f28381421692a1cf26700000000000000000000000085e076361cc813a908ff672f9bad1541474402b2000000000000000000000000000000000000000000000000000000005a81f2400000000000000000000000000000000000000000000000000000000000ed4e00

-----Decoded View---------------
Arg [0] : _softCap (uint256): 9000000000000000000000
Arg [1] : _hardCap (uint256): 22500000000000000000000
Arg [2] : _capFlex (uint32): 1500
Arg [3] : _startTime (uint256): 1513022400
Arg [4] : _endTime (uint256): 1518379200
Arg [5] : _rate (uint256): 1
Arg [6] : _wallet (address): 0x8322C7E7C14B57Ff85947F28381421692A1cF267
Arg [7] : _telcoin (address): 0x85e076361cc813A908Ff672F9BAd1541474402b2
Arg [8] : _bonusVestingStart (uint256): 1518465600
Arg [9] : _bonusVestingDuration (uint256): 15552000

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000001e7e4171bf4d3a00000
Arg [1] : 0000000000000000000000000000000000000000000004c3ba39c5e411100000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [3] : 000000000000000000000000000000000000000000000000000000005a2ee3c0
Arg [4] : 000000000000000000000000000000000000000000000000000000005a80a0c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000008322c7e7c14b57ff85947f28381421692a1cf267
Arg [7] : 00000000000000000000000085e076361cc813a908ff672f9bad1541474402b2
Arg [8] : 000000000000000000000000000000000000000000000000000000005a81f240
Arg [9] : 0000000000000000000000000000000000000000000000000000000000ed4e00


Swarm Source

bzzr://2a9920dea4a50d68c299d33a2363b9333f701856167da6c4862260c0496c3fa3

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.