ETH Price: $3,079.40 (-2.30%)

Contract

0x48599941665827f9eA5a16C3D7417A43a1ce5df4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer52445242018-03-12 22:42:212443 days ago1520894541IN
BNKtotheFuture: Deployer
1.1 ETH0.00002521.2
Transfer51091012018-02-17 22:30:482467 days ago1518906648IN
BNKtotheFuture: Deployer
10.78 ETH0.0197864800
Transfer51046692018-02-17 4:43:482467 days ago1518842628IN
BNKtotheFuture: Deployer
6.5 ETH0.0013401550
Transfer51046692018-02-17 4:43:482467 days ago1518842628IN
BNKtotheFuture: Deployer
6.5 ETH0.00005362
Transfer51046682018-02-17 4:43:412467 days ago1518842621IN
BNKtotheFuture: Deployer
1.09 ETH0.00002681
Transfer51046682018-02-17 4:43:412467 days ago1518842621IN
BNKtotheFuture: Deployer
6 ETH0.00002681
Transfer51045912018-02-17 4:23:422467 days ago1518841422IN
BNKtotheFuture: Deployer
1.2 ETH0.00002681
Transfer51044342018-02-17 3:48:282467 days ago1518839308IN
BNKtotheFuture: Deployer
4 ETH0.0026534999
Transfer51044172018-02-17 3:44:482467 days ago1518839088IN
BNKtotheFuture: Deployer
4 ETH0.00207999
Transfer51043932018-02-17 3:40:062467 days ago1518838806IN
BNKtotheFuture: Deployer
4 ETH0.00092444
Transfer51036012018-02-17 0:34:562467 days ago1518827696IN
BNKtotheFuture: Deployer
5.7 ETH0.00002681
Transfer51034252018-02-16 23:47:522467 days ago1518824872IN
BNKtotheFuture: Deployer
1.09 ETH0.000029481.1
Transfer51032252018-02-16 23:00:172467 days ago1518822017IN
BNKtotheFuture: Deployer
10 ETH0.0021442480
Transfer51031892018-02-16 22:52:402467 days ago1518821560IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031872018-02-16 22:52:222467 days ago1518821542IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031852018-02-16 22:51:482467 days ago1518821508IN
BNKtotheFuture: Deployer
2.3 ETH0.00002681
Transfer51031782018-02-16 22:51:082467 days ago1518821468IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031762018-02-16 22:50:452467 days ago1518821445IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031702018-02-16 22:50:022467 days ago1518821402IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031692018-02-16 22:49:252467 days ago1518821365IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031632018-02-16 22:47:562467 days ago1518821276IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031592018-02-16 22:47:042467 days ago1518821224IN
BNKtotheFuture: Deployer
1.2 ETH0.0005896622
Transfer51031572018-02-16 22:46:432467 days ago1518821203IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031372018-02-16 22:40:392467 days ago1518820839IN
BNKtotheFuture: Deployer
10.78865033 ETH0.0005628621
Transfer51031352018-02-16 22:40:212467 days ago1518820821IN
BNKtotheFuture: Deployer
1.1 ETH0.0005896622
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
1.1 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
3 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
1.2 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
2 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
3.2 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
2 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
1.5 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
8 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
1.13360703 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
3 ETH
51029962018-02-16 22:02:252468 days ago1518818545
BNKtotheFuture: Deployer
10.788 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
2.7 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
1.2 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
3.41 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
5 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
5 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
4.402 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
2 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
1.1 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
1.5 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
10 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
2 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
1.1 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
3.2365951 ETH
51029952018-02-16 22:02:192468 days ago1518818539
BNKtotheFuture: Deployer
10 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BftCrowdsale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-15
*/

pragma solidity ^0.4.18;


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

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


contract DetailedERC20 is ERC20 {
	string public name;
	string public symbol;
	uint8 public decimals;

	function DetailedERC20(string _name, string _symbol, uint8 _decimals) public {
		name = _name;
		symbol = _symbol;
		decimals = _decimals;
	}
}


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

	mapping(address => uint256) balances;

	/**
	* @dev transfer token for a specified address
	* @param _to The address to transfer to.
	* @param _value The amount to be transferred.
	*/
	function transfer(address _to, uint256 _value) public returns (bool) {
		require(_to != address(0));
		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;
	}

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

}

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

	mapping (address => mapping (address => uint256)) internal allowed;


	/**
	 * @dev Transfer tokens from one address to another
	 * @param _from address The address which you want to send tokens from
	 * @param _to address The address which you want to transfer to
	 * @param _value uint256 the amount of tokens to be transferred
	 */
	function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
		require(_to != address(0));
		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;
	}

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

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

	/**
	 * @dev Increase the amount of tokens that an owner allowed to a spender.
	 *
	 * approve should be called when allowed[_spender] == 0. To increment
	 * allowed value is better to use this function to avoid 2 calls (and wait until
	 * the first transaction is mined)
	 * From MonolithDAO Token.sol
	 * @param _spender The address which will spend the funds.
	 * @param _addedValue The amount of tokens to increase the allowance by.
	 */
	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;
	}

	/**
	 * @dev Decrease the amount of tokens that an owner allowed to a spender.
	 *
	 * approve should be called when allowed[_spender] == 0. To decrement
	 * allowed value is better to use this function to avoid 2 calls (and wait until
	 * the first transaction is mined)
	 * From MonolithDAO Token.sol
	 * @param _spender The address which will spend the funds.
	 * @param _subtractedValue The amount of tokens to decrease the allowance by.
	 */
	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;
	}

}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
	address public owner;


	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


	/**
	 * @dev The Ownable constructor sets the original `owner` of the contract to the sender
	 * account.
	 */
	function Ownable() public {
		owner = msg.sender;
	}


	/**
	 * @dev Throws if called by any account other than the owner.
	 */
	modifier onlyOwner() {
		require(msg.sender == owner);
		_;
	}


	/**
	 * @dev Allows the current owner to transfer control of the contract to a newOwner.
	 * @param newOwner The address to transfer ownership to.
	 */
	function transferOwnership(address newOwner) public onlyOwner {
		require(newOwner != address(0));
		OwnershipTransferred(owner, newOwner);
		owner = newOwner;
	}

}


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
	event Pause();
	event Unpause();

	bool public paused = false;


	/**
	 * @dev Modifier to make a function callable only when the contract is not paused.
	 */
	modifier whenNotPaused() {
		require(!paused);
		_;
	}

	/**
	 * @dev Modifier to make a function callable only when the contract is paused.
	 */
	modifier whenPaused() {
		require(paused);
		_;
	}

	/**
	 * @dev called by the owner to pause, triggers stopped state
	 */
	function pause() onlyOwner whenNotPaused public {
		paused = true;
		Pause();
	}

	/**
	 * @dev called by the owner to unpause, returns to normal state
	 */
	function unpause() onlyOwner whenPaused public {
		paused = false;
		Unpause();
	}
}




/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */

contract MintableToken is StandardToken, Ownable {
	event Mint(address indexed to, uint256 amount);
	event MintFinished();

	bool public mintingFinished = false;


	modifier canMint() {
		require(!mintingFinished);
		_;
	}

	/**
	 * @dev Function to mint tokens
	 * @param _to The address that will receive the minted tokens.
	 * @param _amount The amount of tokens to mint.
	 * @return A boolean that indicates if the operation was successful.
	 */
	function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
		totalSupply = totalSupply.add(_amount);
		balances[_to] = balances[_to].add(_amount);
		Mint(_to, _amount);
		Transfer(address(0), _to, _amount);
		return true;
	}

	/**
	 * @dev Function to stop minting new tokens.
	 * @return True if the operation was successful.
	 */
	function finishMinting() onlyOwner canMint public returns (bool) {
		mintingFinished = true;
		MintFinished();
		return true;
	}
}


/**
 * @title Capped token
 * @dev Mintable token with a token cap.
 */

contract CappedToken is MintableToken {

	uint256 public cap;

	function CappedToken(uint256 _cap) public {
		require(_cap > 0);
		cap = _cap;
	}

	/**
	 * @dev Function to mint tokens
	 * @param _to The address that will receive the minted tokens.
	 * @param _amount The amount of tokens to mint.
	 * @return A boolean that indicates if the operation was successful.
	 */
	function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
		require(totalSupply.add(_amount) <= cap);

		return super.mint(_to, _amount);
	}

}

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is BasicToken {

	event Burn(address indexed burner, uint256 value);

	/**
	 * @dev Burns a specific amount of tokens.
	 * @param _value The amount of token to be burned.
	 */
	function burn(uint256 _value) public {
		require(_value <= balances[msg.sender]);
		// no need to require value <= totalSupply, since that would imply the
		// sender's balance is greater than the totalSupply, which *should* be an assertion failure

		address burner = msg.sender;
		balances[burner] = balances[burner].sub(_value);
		totalSupply = totalSupply.sub(_value);
		Burn(burner, _value);
	}
}


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



/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale.
 * Crowdsales have a start and end timestamps, where investors can make
 * token purchases and the crowdsale will assign them tokens based
 * on a token per ETH rate. Funds collected are forwarded to a wallet
 * as they arrive.
 */
contract Crowdsale {
	using SafeMath for uint256;

	// The token being sold
	MintableToken public token;

	// start and end timestamps where investments are allowed (both inclusive)
	uint256 public startTime;
	uint256 public endTime;

	// address where funds are collected
	address public wallet;

	// how many token units a buyer gets per wei
	uint256 public rate;

	// amount of raised money in wei
	uint256 public weiRaised;

	/**
	 * event for token purchase logging
	 * @param purchaser who paid for the tokens
	 * @param beneficiary who got the tokens
	 * @param value weis paid for purchase
	 * @param amount amount of tokens purchased
	 */
	event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);


	function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) public {
		require(_startTime >= now);
		require(_endTime >= _startTime);
		require(_rate > 0);
		require(_wallet != address(0));

		token = createTokenContract();
		startTime = _startTime;
		endTime = _endTime;
		rate = _rate;
		wallet = _wallet;
	}

	// creates the token to be sold.
	// override this method to have crowdsale of a specific mintable token.
	function createTokenContract() internal returns (MintableToken) {
		return new MintableToken();
	}


	// fallback function can be used to buy tokens
	function () external payable {
		buyTokens(msg.sender);
	}

	// low level token purchase function
	function buyTokens(address beneficiary) public payable {
		require(beneficiary != address(0));
		require(validPurchase());

		uint256 weiAmount = msg.value;

		// calculate token amount to be created
		uint256 tokens = weiAmount.mul(rate);

		// update state
		weiRaised = weiRaised.add(weiAmount);

		token.mint(beneficiary, tokens);
		TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);

		forwardFunds();
	}

	// send ether to the fund collection wallet
	// override to create custom fund forwarding mechanisms
	function forwardFunds() internal {
		wallet.transfer(msg.value);
	}

	// @return true if the transaction can buy tokens
	function validPurchase() internal view returns (bool) {
		bool withinPeriod = now >= startTime && now <= endTime;
		bool nonZeroPurchase = msg.value != 0;
		return withinPeriod && nonZeroPurchase;
	}

	// @return true if crowdsale event has ended
	function hasEnded() public view returns (bool) {
		return now > endTime;
	}


}

/**
 * @title CappedCrowdsale
 * @dev Extension of Crowdsale with a max amount of funds raised
 */
contract CappedCrowdsale is Crowdsale {
	using SafeMath for uint256;

	uint256 public cap;

	function CappedCrowdsale(uint256 _cap) public {
		require(_cap > 0);
		cap = _cap;
	}

	// overriding Crowdsale#validPurchase to add extra cap logic
	// @return true if investors can buy at the moment
	function validPurchase() internal view returns (bool) {
		bool withinCap = weiRaised.add(msg.value) <= cap;
		return super.validPurchase() && withinCap;
	}

	// overriding Crowdsale#hasEnded to add cap logic
	// @return true if crowdsale event has ended
	function hasEnded() public view returns (bool) {
		bool capReached = weiRaised >= cap;
		return super.hasEnded() || capReached;
	}

}


/**
 * @title Pausable token
 *
 * @dev StandardToken modified with pausable transfers.
 **/

contract PausableToken is StandardToken, Pausable {

	function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
		return super.transfer(_to, _value);
	}

	function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
		return super.transferFrom(_from, _to, _value);
	}

	function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
		return super.approve(_spender, _value);
	}

	function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
		return super.increaseApproval(_spender, _addedValue);
	}

	function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
		return super.decreaseApproval(_spender, _subtractedValue);
	}
}

contract BftToken is DetailedERC20, CappedToken, BurnableToken, PausableToken {

	CappedCrowdsale public crowdsale;

	function BftToken(
		uint256 _tokenCap,
		uint8 _decimals,
		CappedCrowdsale _crowdsale
	)
	DetailedERC20("BF Token", "BFT", _decimals)
	CappedToken(_tokenCap) public {

		crowdsale = _crowdsale;
	}

	// ----------------------------------------------------------------------------------------------------------------
	// the following is the functionality to upgrade this token smart contract to a new one

	MintableToken public newToken = MintableToken(0x0);
	event LogRedeem(address beneficiary, uint256 amount);

	modifier hasUpgrade() {
		require(newToken != MintableToken(0x0));
		_;
	}

	function upgrade(MintableToken _newToken) onlyOwner public {
		newToken = _newToken;
	}

	// overriding BurnableToken#burn to make disable it for public use
	function burn(uint256 _value) public {
		revert();
		_value = _value; // to silence compiler warning
	}

	function redeem() hasUpgrade public {

		var balance = balanceOf(msg.sender);

		// burn the tokens in this token smart contract
		super.burn(balance);

		// mint tokens in the new token smart contract
		require(newToken.mint(msg.sender, balance));
		LogRedeem(msg.sender, balance);
	}

	// ----------------------------------------------------------------------------------------------------------------
	// we override the token transfer functions to block transfers before startTransfersDate timestamp

	modifier canDoTransfers() {
		require(hasCrowdsaleFinished());
		_;
	}

	function hasCrowdsaleFinished() view public returns(bool) {
		return crowdsale.hasEnded();
	}

	function transfer(address _to, uint256 _value) public canDoTransfers returns (bool) {
		return super.transfer(_to, _value);
	}

	function transferFrom(address _from, address _to, uint256 _value) public canDoTransfers returns (bool) {
		return super.transferFrom(_from, _to, _value);
	}

	function approve(address _spender, uint256 _value) public canDoTransfers returns (bool) {
		return super.approve(_spender, _value);
	}

	function increaseApproval(address _spender, uint _addedValue) public canDoTransfers returns (bool success) {
		return super.increaseApproval(_spender, _addedValue);
	}

	function decreaseApproval(address _spender, uint _subtractedValue) public canDoTransfers returns (bool success) {
		return super.decreaseApproval(_spender, _subtractedValue);
	}

	// ----------------------------------------------------------------------------------------------------------------
	// functionality to change the token ticker - in case of conflict

	function changeSymbol(string _symbol) onlyOwner public {
		symbol = _symbol;
	}

	function changeName(string _name) onlyOwner public {
		name = _name;
	}
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}

/**
 * @title TokenTimelock
 * @dev TokenTimelock is a token holder contract that will allow a
 * beneficiary to extract the tokens after a given release time
 */
contract TokenTimelock {
  using SafeERC20 for ERC20Basic;

  // ERC20 basic token contract being held
  ERC20Basic public token;

  // beneficiary of tokens after they are released
  address public beneficiary;

  // timestamp when token release is enabled
  uint256 public releaseTime;

  function TokenTimelock(ERC20Basic _token, address _beneficiary, uint256 _releaseTime) public {
    require(_releaseTime > now);
    token = _token;
    beneficiary = _beneficiary;
    releaseTime = _releaseTime;
  }

  /**
   * @notice Transfers tokens held by timelock to beneficiary.
   */
  function release() public {
    require(now >= releaseTime);

    uint256 amount = token.balanceOf(this);
    require(amount > 0);

    token.safeTransfer(beneficiary, amount);
  }
}

contract BftCrowdsale is CappedCrowdsale, Pausable {

	uint8 public constant tokenDecimals = 18;
	uint256 public constant etherInWei = 10**uint256(tokenDecimals);
	uint256 public constant tokenCap = 1000000000 * etherInWei;

	uint256 public SALE_CAP_USD;
	uint256 public BUYER_CAP_LOW_USD;
	uint256 public BUYER_CAP_HIGH_USD;

	uint256 public constant PRICE_MULTIPLIER = 100;
	uint256 public constant TOKENS_PER_USD = 10;

	uint256 public etherPrice = PRICE_MULTIPLIER;
	uint256 public buyerCapLowEther = etherInWei;
	uint256 public buyerCapHighEther = etherInWei;
	uint256 public saleHardCapEther = etherInWei;
	uint256 public mintRate = TOKENS_PER_USD;

	address public preSaleBfPlatform;
	address public company;
	address public rewardPool;
	address public shareholders;
	address public tokenSaleCosts;

	// smart contracts that will lock tokens for a pre-defined time
	TokenTimelock public companyHolding2y;
	TokenTimelock public shareholdersHolding1y;

	// address permissioned to whitelist public sale addresses
	mapping(address => bool) whitelist;

	mapping(address => bool) operators;
	event LogOperatorAdd(address newOperator);
	event LogOperatorRem(address newOperator);

	modifier onlyOperator() {
		require(operators[msg.sender]);
		_;
	}

	modifier onlyWhitelisted(address _address) {
		require(whitelist[_address]);
		_;
	}

	function BftCrowdsale(
		uint256 _startTime,
		uint256 _endTime,
		uint256 _etherPrice,
		address _wallet,

	// addresses with pre-minted tokens
		address _preSaleBfPlatform,
		address _company,
		address _rewardPool,
		address _shareholders,
		address _tokenSaleCosts,

	// owner of the whitelist function
		address _operator,
		address _admin,

		uint256 _saleCapUsd,
		uint256 _buyerCapLowUsd,
		uint256 _buyerCapHighUsd
	)
	CappedCrowdsale(saleHardCapEther)
	Crowdsale(_startTime, _endTime, mintRate, _wallet) public {

		require(_preSaleBfPlatform != address(0x0));
		require(_company != address(0x0));
		require(_rewardPool != address(0x0));
		require(_shareholders != address(0x0));
		require(_tokenSaleCosts != address(0x0));
		require(_operator != address(0x0));

		SALE_CAP_USD = _saleCapUsd;
		BUYER_CAP_LOW_USD = _buyerCapLowUsd;
		BUYER_CAP_HIGH_USD = _buyerCapHighUsd;

		preSaleBfPlatform = _preSaleBfPlatform;
		company = _company;
		rewardPool = _rewardPool;
		shareholders = _shareholders;
		tokenSaleCosts = _tokenSaleCosts;

		addOperator(_operator);
		updateEtherPrice(_etherPrice);
		createHoldings();
		preMintTokens();

		// transfer ownership the the admin multi-sig
		transferOwnership(_admin);
	}

	function updateEtherPrice(uint256 _price) onlyOwner public {
		require(_price > 0);
		require(now < startTime);

		etherPrice = _price;
		buyerCapLowEther = BUYER_CAP_LOW_USD.mul(etherInWei).mul(PRICE_MULTIPLIER).div(etherPrice);
		buyerCapHighEther = BUYER_CAP_HIGH_USD.mul(etherInWei).mul(PRICE_MULTIPLIER).div(etherPrice);
		saleHardCapEther = SALE_CAP_USD.mul(etherInWei).mul(PRICE_MULTIPLIER).div(etherPrice);
		mintRate = TOKENS_PER_USD.mul(etherPrice).div(PRICE_MULTIPLIER);

		// update vars on parent contracts
		cap = saleHardCapEther;
		rate = mintRate;
	}

	function createHoldings() internal {
		companyHolding2y = new TokenTimelock(token, company, startTime+2 years);
		shareholdersHolding1y = new TokenTimelock(token, shareholders, startTime+1 years);
	}

	function preMintTokens() internal {
		token.mint(preSaleBfPlatform, 300000000 * etherInWei);
		token.mint(companyHolding2y, 300000000 * etherInWei);
		token.mint(rewardPool, 200000000 * etherInWei);
		token.mint(shareholdersHolding1y, 100000000 * etherInWei);
		token.mint(tokenSaleCosts, 70000000 * etherInWei);
	}

	function checkSaleEnded() internal {
		// if no further purchases are possible due to lower buyer cap
		if(saleHardCapEther.sub(weiRaised) < buyerCapLowEther) {
			token.mint(rewardPool, tokenCap.sub(token.totalSupply()));
		}
	}

	// overriding CappedCrowdsale#validPurchase to add extra low/high limits logic
	// @return true if investors can buy at the moment
	function validPurchase() whenNotPaused
	internal view returns (bool) {
		bool aboveLowBuyerCap = (msg.value >= buyerCapLowEther);
		bool underMaxBuyerCap = (msg.value <= buyerCapHighEther);
		return super.validPurchase() && aboveLowBuyerCap && underMaxBuyerCap;
	}

	// overriding Crowdsale#hasEnded to add token cap logic
	// @return true if crowdsale event has ended
	function hasEnded() public view returns (bool) {
		bool tokenCapReached = token.totalSupply() == tokenCap;
		return super.hasEnded() || tokenCapReached;
	}

	function buyTokens(address beneficiary)
	onlyWhitelisted(beneficiary)
	whenNotPaused
	public payable {
		require(token.balanceOf(beneficiary)==0);
		super.buyTokens(beneficiary);
		checkSaleEnded();
	}

	// creates the token to be sold.
	// override this method to have crowdsale of a specific mintable token.
	function createTokenContract() internal returns (MintableToken) {
		return new BftToken(tokenCap, tokenDecimals, this);
	}

	function addWhitelist(address[] beneficiaries) onlyOperator public {
		for (uint i = 0; i < beneficiaries.length; i++) {
			whitelist[beneficiaries[i]] = true;
		}
	}

	function remWhitelist(address[] beneficiaries) onlyOperator public {
		for (uint i = 0; i < beneficiaries.length; i++) {
			whitelist[beneficiaries[i]] = false;
		}
	}

	function isWhitelisted(address beneficiary) view public returns(bool) {
		return whitelist[beneficiary];
	}

	function addOperator(address _operator) onlyOwner public {
		operators[_operator] = true;
		LogOperatorAdd(_operator);
	}

	function remOperator(address _operator) onlyOwner public {
		operators[_operator] = false;
		LogOperatorAdd(_operator);
	}

	function isOperator(address _operator) view public returns(bool) {
		return operators[_operator];
	}

	function transferTokenOwnership(address _newOwner) onlyOwner public {
		// only allow transfer at the end of the sale
		require(hasEnded());
		// stop the minting process on the token as we only allow the crowdsale to mint
		token.finishMinting();
		token.transferOwnership(_newOwner);
	}
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"updateEtherPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PRICE_MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyHolding2y","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiaries","type":"address[]"}],"name":"remWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferTokenOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareholders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SALE_CAP_USD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"beneficiary","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenDecimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","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":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"company","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"}],"name":"isOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleHardCapEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyerCapLowEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","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":false,"inputs":[{"name":"_operator","type":"address"}],"name":"remOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BUYER_CAP_LOW_USD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"etherPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BUYER_CAP_HIGH_USD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleCosts","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyerCapHighEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_PER_USD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"preSaleBfPlatform","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shareholdersHolding1y","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"etherInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiaries","type":"address[]"}],"name":"addWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_etherPrice","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_preSaleBfPlatform","type":"address"},{"name":"_company","type":"address"},{"name":"_rewardPool","type":"address"},{"name":"_shareholders","type":"address"},{"name":"_tokenSaleCosts","type":"address"},{"name":"_operator","type":"address"},{"name":"_admin","type":"address"},{"name":"_saleCapUsd","type":"uint256"},{"name":"_buyerCapLowUsd","type":"uint256"},{"name":"_buyerCapHighUsd","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"}],"name":"LogOperatorAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"}],"name":"LogOperatorRem","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"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":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]

60606040526007805460a060020a60ff02191690556064600b55670de0b6b3a7640000600c819055600d819055600e55600a600f5534156200004057600080fd5b6040516101c080620053c68339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051600e54600f5491935091508f908f908e42841015620000ce57600080fd5b83831015620000dc57600080fd5b60008211620000ea57600080fd5b600160a060020a03811615156200010057600080fd5b620001186401000000006200134b620002f582021704565b60008054600160a060020a0319908116600160a060020a039384161782556001969096556002949094556004929092556003805490941691161790915581116200016157600080fd5b60065560078054600160a060020a03191633600160a060020a03908116919091179091558a1615156200019357600080fd5b600160a060020a0389161515620001a957600080fd5b600160a060020a0388161515620001bf57600080fd5b600160a060020a0387161515620001d557600080fd5b600160a060020a0386161515620001eb57600080fd5b600160a060020a03851615156200020157600080fd5b60088390556009829055600a81905560108054600160a060020a0319908116600160a060020a038d8116919091179092556011805482168c84161790556012805482168b84161790556013805482168a8416179055601480549091169188169190911790556200027f8564010000000062000350810262000cb91704565b620002988c640100000000620007b7620003d082021704565b620002b0640100000000620013a66200051982021704565b620002c8640100000000620014b66200060f82021704565b620002e18464010000000062000eba6200096382021704565b505050505050505050505050505062000a67565b60006b033b2e3c9fd0803ce80000006012306200031162000a45565b92835260ff9091166020830152600160a060020a031660408083019190915260609091019051809103906000f08015156200034b57600080fd5b905090565b60075433600160a060020a039081169116146200036c57600080fd5b600160a060020a03811660009081526018602052604090819020805460ff191660011790557e3958e2aa90784f5a5cdb7acb904d5dd9810fb33835111ce7196584bbc9a63b90829051600160a060020a03909116815260200160405180910390a150565b60075433600160a060020a03908116911614620003ec57600080fd5b60008111620003fa57600080fd5b60015442106200040957600080fd5b600b8190556009546200046c90829062000457906064906200044290670de0b6b3a7640000640100000000620011c8620009f382021704565b90640100000000620011c8620009f382021704565b906401000000006200120262000a2d82021704565b600c55600b54600a54620004a5919062000457906064906200044290670de0b6b3a7640000640100000000620011c8620009f382021704565b600d55600b54600854620004de919062000457906064906200044290670de0b6b3a7640000640100000000620011c8620009f382021704565b600e55600b5462000508906064906200045790600a90640100000000620011c8620009f382021704565b600f819055600e5460065560045550565b600054601154600154600160a060020a0392831692909116906303c26700016200054262000a56565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f08015156200057a57600080fd5b60158054600160a060020a031916600160a060020a039283161790556000546013546001549183169216906301e1338001620005b562000a56565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f0801515620005ed57600080fd5b60168054600160a060020a031916600160a060020a0392909216919091179055565b60008054601054600160a060020a03918216926340c10f1992909116906af8277896582678ac00000090604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200069d57600080fd5b6102c65a03f11515620006af57600080fd5b5050506040518051505060008054601554600160a060020a03918216926340c10f1992909116906af8277896582678ac00000090604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200074757600080fd5b6102c65a03f115156200075957600080fd5b5050506040518051505060008054601254600160a060020a03918216926340c10f1992909116906aa56fa5b99019a5c800000090604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620007f157600080fd5b6102c65a03f115156200080357600080fd5b5050506040518051505060008054601654600160a060020a03918216926340c10f1992909116906a52b7d2dcc80cd2e400000090604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200089b57600080fd5b6102c65a03f11515620008ad57600080fd5b5050506040518051505060008054601454600160a060020a03918216926340c10f1992909116906a39e7139a8c08fa0600000090604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200094557600080fd5b6102c65a03f115156200095757600080fd5b50505060405180515050565b60075433600160a060020a039081169116146200097f57600080fd5b600160a060020a03811615156200099557600080fd5b600754600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360078054600160a060020a031916600160a060020a0392909216919091179055565b60008083151562000a08576000915062000a26565b5082820282848281151562000a1957fe5b041462000a2257fe5b8091505b5092915050565b600080828481151562000a3c57fe5b04949350505050565b6040516115ee8062003afd83390190565b6040516102db80620050eb83390190565b6130868062000a776000396000f300606060405260043610620002155763ffffffff60e060020a6000350416630dcec63d811462000222578063113990b8146200023b578063130d04d014620002635780631dd49cae146200029557806321e6b53d14620002e75780632c4e722e14620003095780633197cbb6146200031f578063355274ea14620003355780633723bc0e146200034b5780633994bce414620003615780633af32abf14620003775780633b97e85614620003ad5780633f4ba83a14620003d95780634042b66f14620003ef578063521eb27314620004055780635c975abb146200041b57806366666aa914620004315780636904c94d14620004475780636d70f7ae146200045d57806372a7019c146200047f578063732fe2ff146200049557806378e9792514620004ab5780638456cb5914620004c15780638da5cb5b14620004d75780638e78f0f214620004ed5780639870d7fe146200050f5780639a5eb28f14620005315780639e3079551462000547578063a24c9737146200055d578063ada06dac1462000573578063be25d0ce1462000589578063ca0dcf16146200059f578063d5356b7d14620005b5578063d73ff0db14620005cb578063d7815ba414620005e1578063dd54291b14620005f7578063e18c8cf9146200060d578063ec8ac4d81462000623578063ecb70fb71462000639578063edac985b146200064f578063f2fde38b14620006a1578063fc0c546a14620006c3575b6200022033620006d9565b005b34156200022e57600080fd5b62000220600435620007b7565b34156200024757600080fd5b62000251620008d0565b60405190815260200160405180910390f35b34156200026f57600080fd5b62000279620008d5565b604051600160a060020a03909116815260200160405180910390f35b3415620002a157600080fd5b620002206004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620008e495505050505050565b3415620002f357600080fd5b62000220600160a060020a036004351662000968565b34156200031557600080fd5b6200025162000a69565b34156200032b57600080fd5b6200025162000a6f565b34156200034157600080fd5b6200025162000a75565b34156200035757600080fd5b6200027962000a7b565b34156200036d57600080fd5b6200025162000a8a565b34156200038357600080fd5b62000399600160a060020a036004351662000a90565b604051901515815260200160405180910390f35b3415620003b957600080fd5b620003c362000aae565b60405160ff909116815260200160405180910390f35b3415620003e557600080fd5b6200022062000ab3565b3415620003fb57600080fd5b6200025162000b34565b34156200041157600080fd5b6200027962000b3a565b34156200042757600080fd5b6200039962000b49565b34156200043d57600080fd5b6200027962000b59565b34156200045357600080fd5b6200027962000b68565b34156200046957600080fd5b62000399600160a060020a036004351662000b77565b34156200048b57600080fd5b6200025162000b95565b3415620004a157600080fd5b6200025162000b9b565b3415620004b757600080fd5b6200025162000ba1565b3415620004cd57600080fd5b6200022062000ba7565b3415620004e357600080fd5b6200027962000c2d565b3415620004f957600080fd5b62000220600160a060020a036004351662000c3c565b34156200051b57600080fd5b62000220600160a060020a036004351662000cb9565b34156200053d57600080fd5b6200025162000d39565b34156200055357600080fd5b6200025162000d3f565b34156200056957600080fd5b6200025162000d45565b34156200057f57600080fd5b6200027962000d4b565b34156200059557600080fd5b6200025162000d5a565b3415620005ab57600080fd5b6200025162000d60565b3415620005c157600080fd5b6200025162000d66565b3415620005d757600080fd5b6200027962000d6b565b3415620005ed57600080fd5b6200027962000d7a565b34156200060357600080fd5b6200025162000d89565b34156200061957600080fd5b6200025162000d99565b62000220600160a060020a0360043516620006d9565b34156200064557600080fd5b6200039962000da5565b34156200065b57600080fd5b62000220600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062000e3695505050505050565b3415620006ad57600080fd5b62000220600160a060020a036004351662000eba565b3415620006cf57600080fd5b6200027962000f57565b600160a060020a038116600090815260176020526040902054819060ff1615156200070357600080fd5b60075460a060020a900460ff16156200071b57600080fd5b60008054600160a060020a0316906370a082319084906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200077757600080fd5b6102c65a03f115156200078957600080fd5b50505060405180511590506200079e57600080fd5b620007a98262000f66565b620007b3620010a6565b5050565b60075433600160a060020a03908116911614620007d357600080fd5b60008111620007e157600080fd5b6001544210620007f057600080fd5b600b8190556009546200083b9082906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b9063ffffffff620011c816565b9063ffffffff6200120216565b600c55600b54600a546200086c91906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b600d55600b546008546200089d91906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b600e55600b54620008bf906064906200082e90600a9063ffffffff620011c816565b600f819055600e5460065560045550565b606481565b601554600160a060020a031681565b600160a060020a03331660009081526018602052604081205460ff1615156200090c57600080fd5b5060005b8151811015620007b3576000601760008484815181106200092d57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000910565b60075433600160a060020a039081169116146200098457600080fd5b6200098e62000da5565b15156200099a57600080fd5b60008054600160a060020a031690637d64bcb490604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620009e457600080fd5b6102c65a03f11515620009f657600080fd5b50505060405180515050600054600160a060020a031663f2fde38b8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151562000a5157600080fd5b6102c65a03f1151562000a6357600080fd5b50505050565b60045481565b60025481565b60065481565b601354600160a060020a031681565b60085481565b600160a060020a031660009081526017602052604090205460ff1690565b601281565b60075433600160a060020a0390811691161462000acf57600080fd5b60075460a060020a900460ff16151562000ae857600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60055481565b600354600160a060020a031681565b60075460a060020a900460ff1681565b601254600160a060020a031681565b601154600160a060020a031681565b600160a060020a031660009081526018602052604090205460ff1690565b600e5481565b600c5481565b60015481565b60075433600160a060020a0390811691161462000bc357600080fd5b60075460a060020a900460ff161562000bdb57600080fd5b6007805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600754600160a060020a031681565b60075433600160a060020a0390811691161462000c5857600080fd5b600160a060020a03811660009081526018602052604090819020805460ff191690557e3958e2aa90784f5a5cdb7acb904d5dd9810fb33835111ce7196584bbc9a63b90829051600160a060020a03909116815260200160405180910390a150565b60075433600160a060020a0390811691161462000cd557600080fd5b600160a060020a03811660009081526018602052604090819020805460ff191660011790557e3958e2aa90784f5a5cdb7acb904d5dd9810fb33835111ce7196584bbc9a63b90829051600160a060020a03909116815260200160405180910390a150565b60095481565b600b5481565b600a5481565b601454600160a060020a031681565b600d5481565b600f5481565b600a81565b601054600160a060020a031681565b601654600160a060020a031681565b6b033b2e3c9fd0803ce800000081565b670de0b6b3a764000081565b6000805481906b033b2e3c9fd0803ce800000090600160a060020a03166318160ddd83604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000dfe57600080fd5b6102c65a03f1151562000e1057600080fd5b5050506040518051905014905062000e276200121a565b8062000e305750805b91505090565b600160a060020a03331660009081526018602052604081205460ff16151562000e5e57600080fd5b5060005b8151811015620007b35760016017600084848151811062000e7f57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000e62565b60075433600160a060020a0390811691161462000ed657600080fd5b600160a060020a038116151562000eec57600080fd5b600754600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b600080600160a060020a038316151562000f7f57600080fd5b62000f8962001230565b151562000f9557600080fd5b60045434925062000fae90839063ffffffff620011c816565b60055490915062000fc6908363ffffffff6200128416565b60055560008054600160a060020a0316906340c10f1990859084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200102c57600080fd5b6102c65a03f115156200103e57600080fd5b505050604051805190505082600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3620010a162001294565b505050565b600c54600554600e54620010c09163ffffffff620012c916565b1015620011c65760008054601254600160a060020a03918216926340c10f1992909116906200115c9084906318160ddd90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200112757600080fd5b6102c65a03f115156200113957600080fd5b50505060405180516b033b2e3c9fd0803ce8000000915063ffffffff620012c916565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620011a957600080fd5b6102c65a03f11515620011bb57600080fd5b505050604051805150505b565b600080831515620011dd5760009150620011fb565b50828202828482811515620011ee57fe5b0414620011f757fe5b8091505b5092915050565b60008082848115156200121157fe5b04949350505050565b60065460055460009190101562000e27620012dc565b6007546000908190819060a060020a900460ff16156200124f57600080fd5b600c543410159150600d54341115905062001269620012e4565b8015620012735750815b80156200127d5750805b9250505090565b600082820183811015620011f757fe5b600354600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515620011c657600080fd5b600082821115620012d657fe5b50900390565b600254421190565b60008060065462001301346005546200128490919063ffffffff16565b111590506200130f6200131c565b801562000e305750919050565b600080600060015442101580156200133657506002544211155b9150503415158180156200127d575092915050565b60006b033b2e3c9fd0803ce8000000601230620013676200176f565b92835260ff9091166020830152600160a060020a031660408083019190915260609091019051809103906000f0801515620013a157600080fd5b905090565b600054601154600154600160a060020a0392831692909116906303c2670001620013cf62001780565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f08015156200140757600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790556000546013546001549183169216906301e13380016200144f62001780565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f08015156200148757600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054601054600160a060020a03918216926340c10f1992909116906af8277896582678ac000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200152b57600080fd5b6102c65a03f115156200153d57600080fd5b5050506040518051505060008054601554600160a060020a03918216926340c10f1992909116906af8277896582678ac000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620015bc57600080fd5b6102c65a03f11515620015ce57600080fd5b5050506040518051505060008054601254600160a060020a03918216926340c10f1992909116906aa56fa5b99019a5c8000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200164d57600080fd5b6102c65a03f115156200165f57600080fd5b5050506040518051505060008054601654600160a060020a03918216926340c10f1992909116906a52b7d2dcc80cd2e4000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620016de57600080fd5b6102c65a03f11515620016f057600080fd5b5050506040518051505060008054601454600160a060020a03918216926340c10f1992909116906a39e7139a8c08fa06000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620011a957600080fd5b6040516115ee806200179283390190565b6040516102db8062002d8083390190560060606040526006805460a060020a60ff02191690556008805460ff1916905560098054600160a060020a031916905534156200003a57600080fd5b604051606080620015ee8339810160405280805191906020018051919060200180519150839050604080519081016040908152600882527f424620546f6b656e00000000000000000000000000000000000000000000000060208301528051908101604052600381527f42465400000000000000000000000000000000000000000000000000000000006020820152846001838051620000df92916020019062000167565b506002828051620000f592916020019062000167565b506003805460ff191660ff92909216919091179055505060068054600160a060020a03191633600160a060020a0316179055600081116200013557600080fd5b60075560088054600160a060020a039092166101000261010060a860020a0319909216919091179055506200020c9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001aa57805160ff1916838001178555620001da565b82800160010185558215620001da579182015b82811115620001da578251825591602001919060010190620001bd565b50620001e8929150620001ec565b5090565b6200020991905b80821115620001e85760008155600101620001f3565b90565b6113d2806200021c6000396000f3006060604052600436106101505763ffffffff60e060020a60003504166305d2035b811461015557806306fdde031461017c5780630900f01014610206578063095ea7b31461022757806318160ddd1461024957806323b872dd1461026e578063313ce56714610296578063355274ea146102bf5780633f4ba83a146102d257806340c10f19146102e557806342966c68146103075780635353a2d81461031d5780635c975abb1461036e578063661884631461038157806370a08231146103a35780637d64bcb4146103c25780638456cb59146103d55780638da5cb5b146103e857806395d89b41146104175780639c1e03a01461042a578063a3895fff1461043d578063a9059cbb1461048e578063be040fb0146104b0578063c42bd05a146104c3578063d02d08b2146104d6578063d73dd623146104e9578063dd62ed3e1461050b578063f2fde38b14610530575b600080fd5b341561016057600080fd5b61016861054f565b604051901515815260200160405180910390f35b341561018757600080fd5b61018f61055f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101cb5780820151838201526020016101b3565b50505050905090810190601f1680156101f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021157600080fd5b610225600160a060020a03600435166105fd565b005b341561023257600080fd5b610168600160a060020a0360043516602435610647565b341561025457600080fd5b61025c61066d565b60405190815260200160405180910390f35b341561027957600080fd5b610168600160a060020a0360043581169060243516604435610673565b34156102a157600080fd5b6102a961069b565b60405160ff909116815260200160405180910390f35b34156102ca57600080fd5b61025c6106a4565b34156102dd57600080fd5b6102256106aa565b34156102f057600080fd5b610168600160a060020a036004351660243561070e565b341561031257600080fd5b610225600435610150565b341561032857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061076e95505050505050565b341561037957600080fd5b6101686107a0565b341561038c57600080fd5b610168600160a060020a03600435166024356107a9565b34156103ae57600080fd5b61025c600160a060020a03600435166107c8565b34156103cd57600080fd5b6101686107e3565b34156103e057600080fd5b61022561086f565b34156103f357600080fd5b6103fb6108d5565b604051600160a060020a03909116815260200160405180910390f35b341561042257600080fd5b61018f6108e4565b341561043557600080fd5b6103fb61094f565b341561044857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061096395505050505050565b341561049957600080fd5b610168600160a060020a0360043516602435610991565b34156104bb57600080fd5b6102256109b0565b34156104ce57600080fd5b6103fb610aaa565b34156104e157600080fd5b610168610ab9565b34156104f457600080fd5b610168600160a060020a0360043516602435610b27565b341561051657600080fd5b61025c600160a060020a0360043581169060243516610b46565b341561053b57600080fd5b610225600160a060020a0360043516610b71565b60065460a060020a900460ff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b820191906000526020600020905b8154815290600101906020018083116105d857829003601f168201915b505050505081565b60065433600160a060020a0390811691161461061857600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000610651610ab9565b151561065c57600080fd5b6106668383610c0c565b9392505050565b60005481565b600061067d610ab9565b151561068857600080fd5b610693848484610c29565b949350505050565b60035460ff1681565b60075481565b60065433600160a060020a039081169116146106c557600080fd5b60085460ff1615156106d657600080fd5b6008805460ff191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60065460009033600160a060020a0390811691161461072c57600080fd5b60065460a060020a900460ff161561074357600080fd5b600754600054610759908463ffffffff610c4716565b111561076457600080fd5b6106668383610c56565b60065433600160a060020a0390811691161461078957600080fd5b600181805161079c92916020019061130e565b5050565b60085460ff1681565b60006107b3610ab9565b15156107be57600080fd5b6106668383610d63565b600160a060020a031660009081526004602052604090205490565b60065460009033600160a060020a0390811691161461080157600080fd5b60065460a060020a900460ff161561081857600080fd5b6006805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a15060015b90565b60065433600160a060020a0390811691161461088a57600080fd5b60085460ff161561089a57600080fd5b6008805460ff191660011790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600654600160a060020a031681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b6008546101009004600160a060020a031681565b60065433600160a060020a0390811691161461097e57600080fd5b600281805161079c92916020019061130e565b600061099b610ab9565b15156109a657600080fd5b6106668383610d80565b600954600090600160a060020a031615156109ca57600080fd5b6109d3336107c8565b90506109de81610d9d565b600954600160a060020a03166340c10f19338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a3d57600080fd5b6102c65a03f11515610a4e57600080fd5b505050604051805190501515610a6357600080fd5b7f8d15a2189c94a743df2a17c8f4cdd87250b7caa8560e57efa74a59352fcee9d23382604051600160a060020a03909216825260208201526040908101905180910390a150565b600954600160a060020a031681565b6008546000906101009004600160a060020a031663ecb70fb782604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0857600080fd5b6102c65a03f11515610b1957600080fd5b505050604051805191505090565b6000610b31610ab9565b1515610b3c57600080fd5b6106668383610e58565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b60065433600160a060020a03908116911614610b8c57600080fd5b600160a060020a0381161515610ba157600080fd5b600654600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085460009060ff1615610c1f57600080fd5b6106668383610e75565b60085460009060ff1615610c3c57600080fd5b610693848484610ee1565b60008282018381101561066657fe5b60065460009033600160a060020a03908116911614610c7457600080fd5b60065460a060020a900460ff1615610c8b57600080fd5b600054610c9e908363ffffffff610c4716565b6000908155600160a060020a038416815260046020526040902054610cc9908363ffffffff610c4716565b600160a060020a0384166000818152600460205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b60085460009060ff1615610d7657600080fd5b6106668383611063565b60085460009060ff1615610d9357600080fd5b610666838361115d565b600160a060020a033316600090815260046020526040812054821115610dc257600080fd5b5033600160a060020a038116600090815260046020526040902054610de79083611258565b600160a060020a03821660009081526004602052604081209190915554610e14908363ffffffff61125816565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b60085460009060ff1615610e6b57600080fd5b610666838361126a565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a0383161515610ef857600080fd5b600160a060020a038416600090815260046020526040902054821115610f1d57600080fd5b600160a060020a0380851660009081526005602090815260408083203390941683529290522054821115610f5057600080fd5b600160a060020a038416600090815260046020526040902054610f79908363ffffffff61125816565b600160a060020a038086166000908152600460205260408082209390935590851681522054610fae908363ffffffff610c4716565b600160a060020a03808516600090815260046020908152604080832094909455878316825260058152838220339093168252919091522054610ff6908363ffffffff61125816565b600160a060020a03808616600081815260056020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600560209081526040808320938616835292905290812054808311156110c057600160a060020a0333811660009081526005602090815260408083209388168352929052908120556110f7565b6110d0818463ffffffff61125816565b600160a060020a033381166000908152600560209081526040808320938916835292905220555b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a038316151561117457600080fd5b600160a060020a03331660009081526004602052604090205482111561119957600080fd5b600160a060020a0333166000908152600460205260409020546111c2908363ffffffff61125816565b600160a060020a0333811660009081526004602052604080822093909355908516815220546111f7908363ffffffff610c4716565b600160a060020a0380851660008181526004602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60008282111561126457fe5b50900390565b600160a060020a0333811660009081526005602090815260408083209386168352929052908120546112a2908363ffffffff610c4716565b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061134f57805160ff191683800117855561137c565b8280016001018555821561137c579182015b8281111561137c578251825591602001919060010190611361565b5061138892915061138c565b5090565b61086c91905b8082111561138857600081556001016113925600a165627a7a72305820656060475e112dce48cb3838c4edeab68282c16b24fe745eec1e6996aaf051ab00296060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a7230582042212e087512d46abd8a41e77bffcdca88dc5c13d94177a08b67de6b91d0cca90029a165627a7a723058209ef08164c4c7e8e4a9740d5827d791b57f29d8433c9e7938111ea2d70aaf6280002960606040526006805460a060020a60ff02191690556008805460ff1916905560098054600160a060020a031916905534156200003a57600080fd5b604051606080620015ee8339810160405280805191906020018051919060200180519150839050604080519081016040908152600882527f424620546f6b656e00000000000000000000000000000000000000000000000060208301528051908101604052600381527f42465400000000000000000000000000000000000000000000000000000000006020820152846001838051620000df92916020019062000167565b506002828051620000f592916020019062000167565b506003805460ff191660ff92909216919091179055505060068054600160a060020a03191633600160a060020a0316179055600081116200013557600080fd5b60075560088054600160a060020a039092166101000261010060a860020a0319909216919091179055506200020c9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001aa57805160ff1916838001178555620001da565b82800160010185558215620001da579182015b82811115620001da578251825591602001919060010190620001bd565b50620001e8929150620001ec565b5090565b6200020991905b80821115620001e85760008155600101620001f3565b90565b6113d2806200021c6000396000f3006060604052600436106101505763ffffffff60e060020a60003504166305d2035b811461015557806306fdde031461017c5780630900f01014610206578063095ea7b31461022757806318160ddd1461024957806323b872dd1461026e578063313ce56714610296578063355274ea146102bf5780633f4ba83a146102d257806340c10f19146102e557806342966c68146103075780635353a2d81461031d5780635c975abb1461036e578063661884631461038157806370a08231146103a35780637d64bcb4146103c25780638456cb59146103d55780638da5cb5b146103e857806395d89b41146104175780639c1e03a01461042a578063a3895fff1461043d578063a9059cbb1461048e578063be040fb0146104b0578063c42bd05a146104c3578063d02d08b2146104d6578063d73dd623146104e9578063dd62ed3e1461050b578063f2fde38b14610530575b600080fd5b341561016057600080fd5b61016861054f565b604051901515815260200160405180910390f35b341561018757600080fd5b61018f61055f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101cb5780820151838201526020016101b3565b50505050905090810190601f1680156101f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021157600080fd5b610225600160a060020a03600435166105fd565b005b341561023257600080fd5b610168600160a060020a0360043516602435610647565b341561025457600080fd5b61025c61066d565b60405190815260200160405180910390f35b341561027957600080fd5b610168600160a060020a0360043581169060243516604435610673565b34156102a157600080fd5b6102a961069b565b60405160ff909116815260200160405180910390f35b34156102ca57600080fd5b61025c6106a4565b34156102dd57600080fd5b6102256106aa565b34156102f057600080fd5b610168600160a060020a036004351660243561070e565b341561031257600080fd5b610225600435610150565b341561032857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061076e95505050505050565b341561037957600080fd5b6101686107a0565b341561038c57600080fd5b610168600160a060020a03600435166024356107a9565b34156103ae57600080fd5b61025c600160a060020a03600435166107c8565b34156103cd57600080fd5b6101686107e3565b34156103e057600080fd5b61022561086f565b34156103f357600080fd5b6103fb6108d5565b604051600160a060020a03909116815260200160405180910390f35b341561042257600080fd5b61018f6108e4565b341561043557600080fd5b6103fb61094f565b341561044857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061096395505050505050565b341561049957600080fd5b610168600160a060020a0360043516602435610991565b34156104bb57600080fd5b6102256109b0565b34156104ce57600080fd5b6103fb610aaa565b34156104e157600080fd5b610168610ab9565b34156104f457600080fd5b610168600160a060020a0360043516602435610b27565b341561051657600080fd5b61025c600160a060020a0360043581169060243516610b46565b341561053b57600080fd5b610225600160a060020a0360043516610b71565b60065460a060020a900460ff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b820191906000526020600020905b8154815290600101906020018083116105d857829003601f168201915b505050505081565b60065433600160a060020a0390811691161461061857600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000610651610ab9565b151561065c57600080fd5b6106668383610c0c565b9392505050565b60005481565b600061067d610ab9565b151561068857600080fd5b610693848484610c29565b949350505050565b60035460ff1681565b60075481565b60065433600160a060020a039081169116146106c557600080fd5b60085460ff1615156106d657600080fd5b6008805460ff191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60065460009033600160a060020a0390811691161461072c57600080fd5b60065460a060020a900460ff161561074357600080fd5b600754600054610759908463ffffffff610c4716565b111561076457600080fd5b6106668383610c56565b60065433600160a060020a0390811691161461078957600080fd5b600181805161079c92916020019061130e565b5050565b60085460ff1681565b60006107b3610ab9565b15156107be57600080fd5b6106668383610d63565b600160a060020a031660009081526004602052604090205490565b60065460009033600160a060020a0390811691161461080157600080fd5b60065460a060020a900460ff161561081857600080fd5b6006805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a15060015b90565b60065433600160a060020a0390811691161461088a57600080fd5b60085460ff161561089a57600080fd5b6008805460ff191660011790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600654600160a060020a031681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b6008546101009004600160a060020a031681565b60065433600160a060020a0390811691161461097e57600080fd5b600281805161079c92916020019061130e565b600061099b610ab9565b15156109a657600080fd5b6106668383610d80565b600954600090600160a060020a031615156109ca57600080fd5b6109d3336107c8565b90506109de81610d9d565b600954600160a060020a03166340c10f19338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a3d57600080fd5b6102c65a03f11515610a4e57600080fd5b505050604051805190501515610a6357600080fd5b7f8d15a2189c94a743df2a17c8f4cdd87250b7caa8560e57efa74a59352fcee9d23382604051600160a060020a03909216825260208201526040908101905180910390a150565b600954600160a060020a031681565b6008546000906101009004600160a060020a031663ecb70fb782604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0857600080fd5b6102c65a03f11515610b1957600080fd5b505050604051805191505090565b6000610b31610ab9565b1515610b3c57600080fd5b6106668383610e58565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b60065433600160a060020a03908116911614610b8c57600080fd5b600160a060020a0381161515610ba157600080fd5b600654600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085460009060ff1615610c1f57600080fd5b6106668383610e75565b60085460009060ff1615610c3c57600080fd5b610693848484610ee1565b60008282018381101561066657fe5b60065460009033600160a060020a03908116911614610c7457600080fd5b60065460a060020a900460ff1615610c8b57600080fd5b600054610c9e908363ffffffff610c4716565b6000908155600160a060020a038416815260046020526040902054610cc9908363ffffffff610c4716565b600160a060020a0384166000818152600460205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b60085460009060ff1615610d7657600080fd5b6106668383611063565b60085460009060ff1615610d9357600080fd5b610666838361115d565b600160a060020a033316600090815260046020526040812054821115610dc257600080fd5b5033600160a060020a038116600090815260046020526040902054610de79083611258565b600160a060020a03821660009081526004602052604081209190915554610e14908363ffffffff61125816565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b60085460009060ff1615610e6b57600080fd5b610666838361126a565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a0383161515610ef857600080fd5b600160a060020a038416600090815260046020526040902054821115610f1d57600080fd5b600160a060020a0380851660009081526005602090815260408083203390941683529290522054821115610f5057600080fd5b600160a060020a038416600090815260046020526040902054610f79908363ffffffff61125816565b600160a060020a038086166000908152600460205260408082209390935590851681522054610fae908363ffffffff610c4716565b600160a060020a03808516600090815260046020908152604080832094909455878316825260058152838220339093168252919091522054610ff6908363ffffffff61125816565b600160a060020a03808616600081815260056020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600560209081526040808320938616835292905290812054808311156110c057600160a060020a0333811660009081526005602090815260408083209388168352929052908120556110f7565b6110d0818463ffffffff61125816565b600160a060020a033381166000908152600560209081526040808320938916835292905220555b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a038316151561117457600080fd5b600160a060020a03331660009081526004602052604090205482111561119957600080fd5b600160a060020a0333166000908152600460205260409020546111c2908363ffffffff61125816565b600160a060020a0333811660009081526004602052604080822093909355908516815220546111f7908363ffffffff610c4716565b600160a060020a0380851660008181526004602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60008282111561126457fe5b50900390565b600160a060020a0333811660009081526005602090815260408083209386168352929052908120546112a2908363ffffffff610c4716565b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061134f57805160ff191683800117855561137c565b8280016001018555821561137c579182015b8281111561137c578251825591602001919060010190611361565b5061138892915061138c565b5090565b61086c91905b8082111561138857600081556001016113925600a165627a7a72305820656060475e112dce48cb3838c4edeab68282c16b24fe745eec1e6996aaf051ab00296060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a7230582042212e087512d46abd8a41e77bffcdca88dc5c13d94177a08b67de6b91d0cca90029000000000000000000000000000000000000000000000000000000005a875460000000000000000000000000000000000000000000000000000000005a9f0f60000000000000000000000000000000000000000000000000000000000001117000000000000000000000000087a9678952b5d7a7bd450e4695d691e574e26a89000000000000000000000000b8e6935650f490d06c7a203848f2b2118ae23e9600000000000000000000000008017a8f4e946149dc58b9153767c0481f4b4d68000000000000000000000000278407078c667153b60259e9dcaca018e741f7bc00000000000000000000000045ffeae330cfe7a9033decc30b3989e6f72ea36e000000000000000000000000cdd2204320fc58298e5c428bc4ed1bab83813efe0000000000000000000000006a08f5093bb7aaf77f06bb5ffc409c45599a442400000000000000000000000097a63ef2e255d567aa4c412e80e63b97a1b7db5900000000000000000000000000000000000000000000000000000000002dc6c000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x606060405260043610620002155763ffffffff60e060020a6000350416630dcec63d811462000222578063113990b8146200023b578063130d04d014620002635780631dd49cae146200029557806321e6b53d14620002e75780632c4e722e14620003095780633197cbb6146200031f578063355274ea14620003355780633723bc0e146200034b5780633994bce414620003615780633af32abf14620003775780633b97e85614620003ad5780633f4ba83a14620003d95780634042b66f14620003ef578063521eb27314620004055780635c975abb146200041b57806366666aa914620004315780636904c94d14620004475780636d70f7ae146200045d57806372a7019c146200047f578063732fe2ff146200049557806378e9792514620004ab5780638456cb5914620004c15780638da5cb5b14620004d75780638e78f0f214620004ed5780639870d7fe146200050f5780639a5eb28f14620005315780639e3079551462000547578063a24c9737146200055d578063ada06dac1462000573578063be25d0ce1462000589578063ca0dcf16146200059f578063d5356b7d14620005b5578063d73ff0db14620005cb578063d7815ba414620005e1578063dd54291b14620005f7578063e18c8cf9146200060d578063ec8ac4d81462000623578063ecb70fb71462000639578063edac985b146200064f578063f2fde38b14620006a1578063fc0c546a14620006c3575b6200022033620006d9565b005b34156200022e57600080fd5b62000220600435620007b7565b34156200024757600080fd5b62000251620008d0565b60405190815260200160405180910390f35b34156200026f57600080fd5b62000279620008d5565b604051600160a060020a03909116815260200160405180910390f35b3415620002a157600080fd5b620002206004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620008e495505050505050565b3415620002f357600080fd5b62000220600160a060020a036004351662000968565b34156200031557600080fd5b6200025162000a69565b34156200032b57600080fd5b6200025162000a6f565b34156200034157600080fd5b6200025162000a75565b34156200035757600080fd5b6200027962000a7b565b34156200036d57600080fd5b6200025162000a8a565b34156200038357600080fd5b62000399600160a060020a036004351662000a90565b604051901515815260200160405180910390f35b3415620003b957600080fd5b620003c362000aae565b60405160ff909116815260200160405180910390f35b3415620003e557600080fd5b6200022062000ab3565b3415620003fb57600080fd5b6200025162000b34565b34156200041157600080fd5b6200027962000b3a565b34156200042757600080fd5b6200039962000b49565b34156200043d57600080fd5b6200027962000b59565b34156200045357600080fd5b6200027962000b68565b34156200046957600080fd5b62000399600160a060020a036004351662000b77565b34156200048b57600080fd5b6200025162000b95565b3415620004a157600080fd5b6200025162000b9b565b3415620004b757600080fd5b6200025162000ba1565b3415620004cd57600080fd5b6200022062000ba7565b3415620004e357600080fd5b6200027962000c2d565b3415620004f957600080fd5b62000220600160a060020a036004351662000c3c565b34156200051b57600080fd5b62000220600160a060020a036004351662000cb9565b34156200053d57600080fd5b6200025162000d39565b34156200055357600080fd5b6200025162000d3f565b34156200056957600080fd5b6200025162000d45565b34156200057f57600080fd5b6200027962000d4b565b34156200059557600080fd5b6200025162000d5a565b3415620005ab57600080fd5b6200025162000d60565b3415620005c157600080fd5b6200025162000d66565b3415620005d757600080fd5b6200027962000d6b565b3415620005ed57600080fd5b6200027962000d7a565b34156200060357600080fd5b6200025162000d89565b34156200061957600080fd5b6200025162000d99565b62000220600160a060020a0360043516620006d9565b34156200064557600080fd5b6200039962000da5565b34156200065b57600080fd5b62000220600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062000e3695505050505050565b3415620006ad57600080fd5b62000220600160a060020a036004351662000eba565b3415620006cf57600080fd5b6200027962000f57565b600160a060020a038116600090815260176020526040902054819060ff1615156200070357600080fd5b60075460a060020a900460ff16156200071b57600080fd5b60008054600160a060020a0316906370a082319084906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200077757600080fd5b6102c65a03f115156200078957600080fd5b50505060405180511590506200079e57600080fd5b620007a98262000f66565b620007b3620010a6565b5050565b60075433600160a060020a03908116911614620007d357600080fd5b60008111620007e157600080fd5b6001544210620007f057600080fd5b600b8190556009546200083b9082906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b9063ffffffff620011c816565b9063ffffffff6200120216565b600c55600b54600a546200086c91906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b600d55600b546008546200089d91906200082e906064906200082190670de0b6b3a764000063ffffffff620011c816565b600e55600b54620008bf906064906200082e90600a9063ffffffff620011c816565b600f819055600e5460065560045550565b606481565b601554600160a060020a031681565b600160a060020a03331660009081526018602052604081205460ff1615156200090c57600080fd5b5060005b8151811015620007b3576000601760008484815181106200092d57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000910565b60075433600160a060020a039081169116146200098457600080fd5b6200098e62000da5565b15156200099a57600080fd5b60008054600160a060020a031690637d64bcb490604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620009e457600080fd5b6102c65a03f11515620009f657600080fd5b50505060405180515050600054600160a060020a031663f2fde38b8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151562000a5157600080fd5b6102c65a03f1151562000a6357600080fd5b50505050565b60045481565b60025481565b60065481565b601354600160a060020a031681565b60085481565b600160a060020a031660009081526017602052604090205460ff1690565b601281565b60075433600160a060020a0390811691161462000acf57600080fd5b60075460a060020a900460ff16151562000ae857600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60055481565b600354600160a060020a031681565b60075460a060020a900460ff1681565b601254600160a060020a031681565b601154600160a060020a031681565b600160a060020a031660009081526018602052604090205460ff1690565b600e5481565b600c5481565b60015481565b60075433600160a060020a0390811691161462000bc357600080fd5b60075460a060020a900460ff161562000bdb57600080fd5b6007805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600754600160a060020a031681565b60075433600160a060020a0390811691161462000c5857600080fd5b600160a060020a03811660009081526018602052604090819020805460ff191690557e3958e2aa90784f5a5cdb7acb904d5dd9810fb33835111ce7196584bbc9a63b90829051600160a060020a03909116815260200160405180910390a150565b60075433600160a060020a0390811691161462000cd557600080fd5b600160a060020a03811660009081526018602052604090819020805460ff191660011790557e3958e2aa90784f5a5cdb7acb904d5dd9810fb33835111ce7196584bbc9a63b90829051600160a060020a03909116815260200160405180910390a150565b60095481565b600b5481565b600a5481565b601454600160a060020a031681565b600d5481565b600f5481565b600a81565b601054600160a060020a031681565b601654600160a060020a031681565b6b033b2e3c9fd0803ce800000081565b670de0b6b3a764000081565b6000805481906b033b2e3c9fd0803ce800000090600160a060020a03166318160ddd83604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000dfe57600080fd5b6102c65a03f1151562000e1057600080fd5b5050506040518051905014905062000e276200121a565b8062000e305750805b91505090565b600160a060020a03331660009081526018602052604081205460ff16151562000e5e57600080fd5b5060005b8151811015620007b35760016017600084848151811062000e7f57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162000e62565b60075433600160a060020a0390811691161462000ed657600080fd5b600160a060020a038116151562000eec57600080fd5b600754600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b600080600160a060020a038316151562000f7f57600080fd5b62000f8962001230565b151562000f9557600080fd5b60045434925062000fae90839063ffffffff620011c816565b60055490915062000fc6908363ffffffff6200128416565b60055560008054600160a060020a0316906340c10f1990859084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200102c57600080fd5b6102c65a03f115156200103e57600080fd5b505050604051805190505082600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3620010a162001294565b505050565b600c54600554600e54620010c09163ffffffff620012c916565b1015620011c65760008054601254600160a060020a03918216926340c10f1992909116906200115c9084906318160ddd90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200112757600080fd5b6102c65a03f115156200113957600080fd5b50505060405180516b033b2e3c9fd0803ce8000000915063ffffffff620012c916565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620011a957600080fd5b6102c65a03f11515620011bb57600080fd5b505050604051805150505b565b600080831515620011dd5760009150620011fb565b50828202828482811515620011ee57fe5b0414620011f757fe5b8091505b5092915050565b60008082848115156200121157fe5b04949350505050565b60065460055460009190101562000e27620012dc565b6007546000908190819060a060020a900460ff16156200124f57600080fd5b600c543410159150600d54341115905062001269620012e4565b8015620012735750815b80156200127d5750805b9250505090565b600082820183811015620011f757fe5b600354600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515620011c657600080fd5b600082821115620012d657fe5b50900390565b600254421190565b60008060065462001301346005546200128490919063ffffffff16565b111590506200130f6200131c565b801562000e305750919050565b600080600060015442101580156200133657506002544211155b9150503415158180156200127d575092915050565b60006b033b2e3c9fd0803ce8000000601230620013676200176f565b92835260ff9091166020830152600160a060020a031660408083019190915260609091019051809103906000f0801515620013a157600080fd5b905090565b600054601154600154600160a060020a0392831692909116906303c2670001620013cf62001780565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f08015156200140757600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790556000546013546001549183169216906301e13380016200144f62001780565b600160a060020a0393841681529190921660208201526040808201929092526060019051809103906000f08015156200148757600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054601054600160a060020a03918216926340c10f1992909116906af8277896582678ac000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200152b57600080fd5b6102c65a03f115156200153d57600080fd5b5050506040518051505060008054601554600160a060020a03918216926340c10f1992909116906af8277896582678ac000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620015bc57600080fd5b6102c65a03f11515620015ce57600080fd5b5050506040518051505060008054601254600160a060020a03918216926340c10f1992909116906aa56fa5b99019a5c8000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200164d57600080fd5b6102c65a03f115156200165f57600080fd5b5050506040518051505060008054601654600160a060020a03918216926340c10f1992909116906a52b7d2dcc80cd2e4000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620016de57600080fd5b6102c65a03f11515620016f057600080fd5b5050506040518051505060008054601454600160a060020a03918216926340c10f1992909116906a39e7139a8c08fa06000000906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620011a957600080fd5b6040516115ee806200179283390190565b6040516102db8062002d8083390190560060606040526006805460a060020a60ff02191690556008805460ff1916905560098054600160a060020a031916905534156200003a57600080fd5b604051606080620015ee8339810160405280805191906020018051919060200180519150839050604080519081016040908152600882527f424620546f6b656e00000000000000000000000000000000000000000000000060208301528051908101604052600381527f42465400000000000000000000000000000000000000000000000000000000006020820152846001838051620000df92916020019062000167565b506002828051620000f592916020019062000167565b506003805460ff191660ff92909216919091179055505060068054600160a060020a03191633600160a060020a0316179055600081116200013557600080fd5b60075560088054600160a060020a039092166101000261010060a860020a0319909216919091179055506200020c9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001aa57805160ff1916838001178555620001da565b82800160010185558215620001da579182015b82811115620001da578251825591602001919060010190620001bd565b50620001e8929150620001ec565b5090565b6200020991905b80821115620001e85760008155600101620001f3565b90565b6113d2806200021c6000396000f3006060604052600436106101505763ffffffff60e060020a60003504166305d2035b811461015557806306fdde031461017c5780630900f01014610206578063095ea7b31461022757806318160ddd1461024957806323b872dd1461026e578063313ce56714610296578063355274ea146102bf5780633f4ba83a146102d257806340c10f19146102e557806342966c68146103075780635353a2d81461031d5780635c975abb1461036e578063661884631461038157806370a08231146103a35780637d64bcb4146103c25780638456cb59146103d55780638da5cb5b146103e857806395d89b41146104175780639c1e03a01461042a578063a3895fff1461043d578063a9059cbb1461048e578063be040fb0146104b0578063c42bd05a146104c3578063d02d08b2146104d6578063d73dd623146104e9578063dd62ed3e1461050b578063f2fde38b14610530575b600080fd5b341561016057600080fd5b61016861054f565b604051901515815260200160405180910390f35b341561018757600080fd5b61018f61055f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101cb5780820151838201526020016101b3565b50505050905090810190601f1680156101f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021157600080fd5b610225600160a060020a03600435166105fd565b005b341561023257600080fd5b610168600160a060020a0360043516602435610647565b341561025457600080fd5b61025c61066d565b60405190815260200160405180910390f35b341561027957600080fd5b610168600160a060020a0360043581169060243516604435610673565b34156102a157600080fd5b6102a961069b565b60405160ff909116815260200160405180910390f35b34156102ca57600080fd5b61025c6106a4565b34156102dd57600080fd5b6102256106aa565b34156102f057600080fd5b610168600160a060020a036004351660243561070e565b341561031257600080fd5b610225600435610150565b341561032857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061076e95505050505050565b341561037957600080fd5b6101686107a0565b341561038c57600080fd5b610168600160a060020a03600435166024356107a9565b34156103ae57600080fd5b61025c600160a060020a03600435166107c8565b34156103cd57600080fd5b6101686107e3565b34156103e057600080fd5b61022561086f565b34156103f357600080fd5b6103fb6108d5565b604051600160a060020a03909116815260200160405180910390f35b341561042257600080fd5b61018f6108e4565b341561043557600080fd5b6103fb61094f565b341561044857600080fd5b61022560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061096395505050505050565b341561049957600080fd5b610168600160a060020a0360043516602435610991565b34156104bb57600080fd5b6102256109b0565b34156104ce57600080fd5b6103fb610aaa565b34156104e157600080fd5b610168610ab9565b34156104f457600080fd5b610168600160a060020a0360043516602435610b27565b341561051657600080fd5b61025c600160a060020a0360043581169060243516610b46565b341561053b57600080fd5b610225600160a060020a0360043516610b71565b60065460a060020a900460ff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b820191906000526020600020905b8154815290600101906020018083116105d857829003601f168201915b505050505081565b60065433600160a060020a0390811691161461061857600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000610651610ab9565b151561065c57600080fd5b6106668383610c0c565b9392505050565b60005481565b600061067d610ab9565b151561068857600080fd5b610693848484610c29565b949350505050565b60035460ff1681565b60075481565b60065433600160a060020a039081169116146106c557600080fd5b60085460ff1615156106d657600080fd5b6008805460ff191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60065460009033600160a060020a0390811691161461072c57600080fd5b60065460a060020a900460ff161561074357600080fd5b600754600054610759908463ffffffff610c4716565b111561076457600080fd5b6106668383610c56565b60065433600160a060020a0390811691161461078957600080fd5b600181805161079c92916020019061130e565b5050565b60085460ff1681565b60006107b3610ab9565b15156107be57600080fd5b6106668383610d63565b600160a060020a031660009081526004602052604090205490565b60065460009033600160a060020a0390811691161461080157600080fd5b60065460a060020a900460ff161561081857600080fd5b6006805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a15060015b90565b60065433600160a060020a0390811691161461088a57600080fd5b60085460ff161561089a57600080fd5b6008805460ff191660011790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600654600160a060020a031681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105f55780601f106105ca576101008083540402835291602001916105f5565b6008546101009004600160a060020a031681565b60065433600160a060020a0390811691161461097e57600080fd5b600281805161079c92916020019061130e565b600061099b610ab9565b15156109a657600080fd5b6106668383610d80565b600954600090600160a060020a031615156109ca57600080fd5b6109d3336107c8565b90506109de81610d9d565b600954600160a060020a03166340c10f19338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a3d57600080fd5b6102c65a03f11515610a4e57600080fd5b505050604051805190501515610a6357600080fd5b7f8d15a2189c94a743df2a17c8f4cdd87250b7caa8560e57efa74a59352fcee9d23382604051600160a060020a03909216825260208201526040908101905180910390a150565b600954600160a060020a031681565b6008546000906101009004600160a060020a031663ecb70fb782604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b0857600080fd5b6102c65a03f11515610b1957600080fd5b505050604051805191505090565b6000610b31610ab9565b1515610b3c57600080fd5b6106668383610e58565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b60065433600160a060020a03908116911614610b8c57600080fd5b600160a060020a0381161515610ba157600080fd5b600654600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085460009060ff1615610c1f57600080fd5b6106668383610e75565b60085460009060ff1615610c3c57600080fd5b610693848484610ee1565b60008282018381101561066657fe5b60065460009033600160a060020a03908116911614610c7457600080fd5b60065460a060020a900460ff1615610c8b57600080fd5b600054610c9e908363ffffffff610c4716565b6000908155600160a060020a038416815260046020526040902054610cc9908363ffffffff610c4716565b600160a060020a0384166000818152600460205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b60085460009060ff1615610d7657600080fd5b6106668383611063565b60085460009060ff1615610d9357600080fd5b610666838361115d565b600160a060020a033316600090815260046020526040812054821115610dc257600080fd5b5033600160a060020a038116600090815260046020526040902054610de79083611258565b600160a060020a03821660009081526004602052604081209190915554610e14908363ffffffff61125816565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b60085460009060ff1615610e6b57600080fd5b610666838361126a565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a0383161515610ef857600080fd5b600160a060020a038416600090815260046020526040902054821115610f1d57600080fd5b600160a060020a0380851660009081526005602090815260408083203390941683529290522054821115610f5057600080fd5b600160a060020a038416600090815260046020526040902054610f79908363ffffffff61125816565b600160a060020a038086166000908152600460205260408082209390935590851681522054610fae908363ffffffff610c4716565b600160a060020a03808516600090815260046020908152604080832094909455878316825260058152838220339093168252919091522054610ff6908363ffffffff61125816565b600160a060020a03808616600081815260056020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600560209081526040808320938616835292905290812054808311156110c057600160a060020a0333811660009081526005602090815260408083209388168352929052908120556110f7565b6110d0818463ffffffff61125816565b600160a060020a033381166000908152600560209081526040808320938916835292905220555b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a038316151561117457600080fd5b600160a060020a03331660009081526004602052604090205482111561119957600080fd5b600160a060020a0333166000908152600460205260409020546111c2908363ffffffff61125816565b600160a060020a0333811660009081526004602052604080822093909355908516815220546111f7908363ffffffff610c4716565b600160a060020a0380851660008181526004602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60008282111561126457fe5b50900390565b600160a060020a0333811660009081526005602090815260408083209386168352929052908120546112a2908363ffffffff610c4716565b600160a060020a0333811660008181526005602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061134f57805160ff191683800117855561137c565b8280016001018555821561137c579182015b8281111561137c578251825591602001919060010190611361565b5061138892915061138c565b5090565b61086c91905b8082111561138857600081556001016113925600a165627a7a72305820656060475e112dce48cb3838c4edeab68282c16b24fe745eec1e6996aaf051ab00296060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a7230582042212e087512d46abd8a41e77bffcdca88dc5c13d94177a08b67de6b91d0cca90029a165627a7a723058209ef08164c4c7e8e4a9740d5827d791b57f29d8433c9e7938111ea2d70aaf62800029

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

000000000000000000000000000000000000000000000000000000005a875460000000000000000000000000000000000000000000000000000000005a9f0f60000000000000000000000000000000000000000000000000000000000001117000000000000000000000000087a9678952b5d7a7bd450e4695d691e574e26a89000000000000000000000000b8e6935650f490d06c7a203848f2b2118ae23e9600000000000000000000000008017a8f4e946149dc58b9153767c0481f4b4d68000000000000000000000000278407078c667153b60259e9dcaca018e741f7bc00000000000000000000000045ffeae330cfe7a9033decc30b3989e6f72ea36e000000000000000000000000cdd2204320fc58298e5c428bc4ed1bab83813efe0000000000000000000000006a08f5093bb7aaf77f06bb5ffc409c45599a442400000000000000000000000097a63ef2e255d567aa4c412e80e63b97a1b7db5900000000000000000000000000000000000000000000000000000000002dc6c000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : _startTime (uint256): 1518818400
Arg [1] : _endTime (uint256): 1520373600
Arg [2] : _etherPrice (uint256): 70000
Arg [3] : _wallet (address): 0x87a9678952B5D7A7bd450E4695d691e574E26a89
Arg [4] : _preSaleBfPlatform (address): 0xb8E6935650f490d06C7A203848f2b2118aE23E96
Arg [5] : _company (address): 0x08017a8F4E946149Dc58B9153767C0481F4B4d68
Arg [6] : _rewardPool (address): 0x278407078C667153b60259E9dCaCa018e741F7Bc
Arg [7] : _shareholders (address): 0x45fFeAE330CFe7A9033DeCc30b3989e6F72Ea36E
Arg [8] : _tokenSaleCosts (address): 0xCdD2204320FC58298E5c428bc4eD1BAB83813eFe
Arg [9] : _operator (address): 0x6A08F5093bB7aaF77f06Bb5Ffc409c45599A4424
Arg [10] : _admin (address): 0x97A63ef2e255D567Aa4c412E80e63B97a1B7db59
Arg [11] : _saleCapUsd (uint256): 3000000
Arg [12] : _buyerCapLowUsd (uint256): 1000
Arg [13] : _buyerCapHighUsd (uint256): 10000

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005a875460
Arg [1] : 000000000000000000000000000000000000000000000000000000005a9f0f60
Arg [2] : 0000000000000000000000000000000000000000000000000000000000011170
Arg [3] : 00000000000000000000000087a9678952b5d7a7bd450e4695d691e574e26a89
Arg [4] : 000000000000000000000000b8e6935650f490d06c7a203848f2b2118ae23e96
Arg [5] : 00000000000000000000000008017a8f4e946149dc58b9153767c0481f4b4d68
Arg [6] : 000000000000000000000000278407078c667153b60259e9dcaca018e741f7bc
Arg [7] : 00000000000000000000000045ffeae330cfe7a9033decc30b3989e6f72ea36e
Arg [8] : 000000000000000000000000cdd2204320fc58298e5c428bc4ed1bab83813efe
Arg [9] : 0000000000000000000000006a08f5093bb7aaf77f06bb5ffc409c45599a4424
Arg [10] : 00000000000000000000000097a63ef2e255d567aa4c412e80e63b97a1b7db59
Arg [11] : 00000000000000000000000000000000000000000000000000000000002dc6c0
Arg [12] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [13] : 0000000000000000000000000000000000000000000000000000000000002710


Swarm Source

bzzr://42212e087512d46abd8a41e77bffcdca88dc5c13d94177a08b67de6b91d0cca9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

The deployer address for BNKtotheFuture's contract.

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.