More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,533 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 14212379 | 1108 days ago | IN | 0 ETH | 0.00142076 | ||||
Transfer | 14167481 | 1115 days ago | IN | 0 ETH | 0.00157812 | ||||
Transfer | 14166690 | 1115 days ago | IN | 0 ETH | 0.00270804 | ||||
Transfer | 13663304 | 1193 days ago | IN | 0 ETH | 0.00258711 | ||||
Release Vested T... | 13546381 | 1212 days ago | IN | 0 ETH | 0.01249973 | ||||
Transfer | 13544000 | 1212 days ago | IN | 0 ETH | 0.00352083 | ||||
Transfer | 13191297 | 1267 days ago | IN | 0 ETH | 0.00201551 | ||||
Transfer | 13076888 | 1285 days ago | IN | 0 ETH | 0.0010521 | ||||
Transfer | 12819559 | 1325 days ago | IN | 0 ETH | 0.000735 | ||||
Transfer | 12819541 | 1325 days ago | IN | 0 ETH | 0.000714 | ||||
Withdraw | 12750432 | 1336 days ago | IN | 0 ETH | 0.00052131 | ||||
Release Vested T... | 12722678 | 1340 days ago | IN | 0 ETH | 0.00113588 | ||||
Withdraw | 12714245 | 1341 days ago | IN | 0 ETH | 0.00431759 | ||||
Withdraw | 12492328 | 1376 days ago | IN | 0 ETH | 0.01579792 | ||||
Withdraw | 12474375 | 1379 days ago | IN | 0 ETH | 0.007938 | ||||
Release Vested T... | 12463806 | 1380 days ago | IN | 0 ETH | 0.00608034 | ||||
Transfer | 12418293 | 1387 days ago | IN | 0 ETH | 0.003213 | ||||
Withdraw | 12399384 | 1390 days ago | IN | 0 ETH | 0.01207 | ||||
Withdraw | 12349475 | 1398 days ago | IN | 0 ETH | 0.000896 | ||||
Transfer | 12349444 | 1398 days ago | IN | 0 ETH | 0.000651 | ||||
Release Vested T... | 12318426 | 1403 days ago | IN | 0 ETH | 0.00440992 | ||||
Withdraw | 12242215 | 1414 days ago | IN | 0 ETH | 0.03127666 | ||||
Withdraw | 12237086 | 1415 days ago | IN | 0 ETH | 0.01435714 | ||||
Withdraw | 12218074 | 1418 days ago | IN | 0 ETH | 0.0074 | ||||
Transfer | 12207402 | 1420 days ago | IN | 0 ETH | 0.00231506 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12714245 | 1341 days ago | Contract Creation | 0 ETH | |||
12242215 | 1414 days ago | Contract Creation | 0 ETH | |||
12088441 | 1438 days ago | Contract Creation | 0 ETH | |||
12044282 | 1445 days ago | Contract Creation | 0 ETH | |||
12044268 | 1445 days ago | Contract Creation | 0 ETH | |||
12033555 | 1447 days ago | Contract Creation | 0 ETH | |||
11810014 | 1481 days ago | Contract Creation | 0 ETH | |||
11572232 | 1517 days ago | Contract Creation | 0 ETH | |||
11556915 | 1520 days ago | Contract Creation | 0 ETH | |||
11548474 | 1521 days ago | Contract Creation | 0 ETH | |||
11544325 | 1522 days ago | Contract Creation | 0 ETH | |||
11393182 | 1545 days ago | Contract Creation | 0 ETH | |||
10913952 | 1619 days ago | Contract Creation | 0 ETH | |||
10762194 | 1642 days ago | Contract Creation | 0 ETH | |||
10748456 | 1644 days ago | Contract Creation | 0 ETH | |||
10431182 | 1693 days ago | Contract Creation | 0 ETH | |||
9967219 | 1765 days ago | Contract Creation | 0 ETH | |||
9967197 | 1765 days ago | Contract Creation | 0 ETH | |||
9967154 | 1765 days ago | Contract Creation | 0 ETH | |||
9951168 | 1768 days ago | Contract Creation | 0 ETH | |||
9820217 | 1788 days ago | Contract Creation | 0 ETH | |||
9819814 | 1788 days ago | Contract Creation | 0 ETH | |||
9561159 | 1828 days ago | Contract Creation | 0 ETH | |||
9468345 | 1842 days ago | Contract Creation | 0 ETH | |||
9351758 | 1860 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SimpleLSTDistribution
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-09 */ pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ 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; } /** * @dev Integer division of two numbers, truncating the quotient. */ 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; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @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 ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); 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); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @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 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); } } /** * @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 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 TokenVesting * @dev A token holder contract that can release its token balance gradually like a * typical vesting scheme, with a cliff and vesting period. Optionally revocable by the * owner. */ contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); // beneficiary of tokens after they are released address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest * @param _revocable whether the vesting is revocable or not */ function TokenVesting(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. * @param token ERC20 token which is being vested */ function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); Released(unreleased); } /** * @notice Allows the owner to revoke the vesting. Tokens already vested * remain in the contract, the rest are returned to the owner. * @param token ERC20 token which is being vested */ function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); Revoked(); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param token ERC20 token which is being vested */ function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } /** * @dev Calculates the amount that has already vested. * @param token ERC20 token which is being vested */ function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (now < cliff) { return 0; } else if (now >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(now.sub(start)).div(duration); } } } contract SimplePreTGE is Ownable { bool public allocationsLocked; struct Contribution { bool hasVested; uint256 weiContributed; } mapping (address => Contribution) public contributions; function disableAllocationModificationsForEver() external onlyOwner returns(bool) { allocationsLocked = true; } function bulkReserveTokensForAddresses(address[] addrs, uint256[] weiContributions, bool[] _vestingDecisions) onlyOwner external returns(bool) { require(!allocationsLocked); require((addrs.length == weiContributions.length) && (addrs.length == _vestingDecisions.length)); for (uint i=0; i<addrs.length; i++) { contributions[addrs[i]].weiContributed = weiContributions[i]; contributions[addrs[i]].hasVested = _vestingDecisions[i]; } return true; } } contract SimpleTGE is Ownable { using SafeMath for uint256; // start and end timestamps (both inclusive) when sale is open uint256 public publicTGEStartBlockTimeStamp; uint256 public publicTGEEndBlockTimeStamp; // address where funds are collected address public fundsWallet; // amount of raised money in wei uint256 public weiRaised; // sale cap in wei uint256 public totalCapInWei; // individual cap in wei uint256 public individualCapInWei; // how long the TRS subscription is open after the TGE. uint256 public TRSOffset = 5 days; mapping (address => bool) public whitelist; address[] public contributors; struct Contribution { bool hasVested; uint256 weiContributed; } mapping (address => Contribution) public contributions; modifier whilePublicTGEIsActive() { require(block.timestamp >= publicTGEStartBlockTimeStamp && block.timestamp <= publicTGEEndBlockTimeStamp); _; } modifier isWhitelisted() { require(whitelist[msg.sender]); _; } function blacklistAddresses(address[] addrs) external onlyOwner returns(bool) { require(addrs.length <= 100); for (uint i = 0; i < addrs.length; i++) { require(addrs[i] != address(0)); whitelist[addrs[i]] = false; } return true; } function whitelistAddresses(address[] addrs) external onlyOwner returns(bool) { require(addrs.length <= 100); for (uint i = 0; i < addrs.length; i++) { require(addrs[i] != address(0)); whitelist[addrs[i]] = true; } return true; } /** * @dev Transfer all Ether held by the contract to the address specified by owner. */ function reclaimEther(address _beneficiary) external onlyOwner { _beneficiary.transfer(this.balance); } function SimpleTGE ( address _fundsWallet, uint256 _publicTGEStartBlockTimeStamp, uint256 _publicTGEEndBlockTimeStamp, uint256 _individualCapInWei, uint256 _totalCapInWei ) public { require(_publicTGEStartBlockTimeStamp >= block.timestamp); require(_publicTGEEndBlockTimeStamp > _publicTGEStartBlockTimeStamp); require(_fundsWallet != address(0)); require(_individualCapInWei > 0); require(_individualCapInWei <= _totalCapInWei); require(_totalCapInWei > 0); fundsWallet = _fundsWallet; publicTGEStartBlockTimeStamp = _publicTGEStartBlockTimeStamp; publicTGEEndBlockTimeStamp = _publicTGEEndBlockTimeStamp; individualCapInWei = _individualCapInWei; totalCapInWei = _totalCapInWei; } // allows changing the individual cap. function changeIndividualCapInWei(uint256 _individualCapInWei) onlyOwner external returns(bool) { require(_individualCapInWei > 0); require(_individualCapInWei < totalCapInWei); individualCapInWei = _individualCapInWei; return true; } // low level token purchase function function contribute(bool _vestingDecision) internal { // validations require(msg.sender != address(0)); require(msg.value != 0); require(weiRaised.add(msg.value) <= totalCapInWei); require(contributions[msg.sender].weiContributed.add(msg.value) <= individualCapInWei); // if we have not received any WEI from this address until now, then we add this address to contributors list. if (contributions[msg.sender].weiContributed == 0) { contributors.push(msg.sender); } contributions[msg.sender].weiContributed = contributions[msg.sender].weiContributed.add(msg.value); weiRaised = weiRaised.add(msg.value); contributions[msg.sender].hasVested = _vestingDecision; fundsWallet.transfer(msg.value); } function contributeAndVest() external whilePublicTGEIsActive isWhitelisted payable { contribute(true); } function contributeWithoutVesting() public whilePublicTGEIsActive isWhitelisted payable { contribute(false); } // fallback function can be used to buy tokens function () external payable { contributeWithoutVesting(); } // Vesting logic // The following cases are checked for _beneficiary's actions: function vest(bool _vestingDecision) external isWhitelisted returns(bool) { bool existingDecision = contributions[msg.sender].hasVested; require(existingDecision != _vestingDecision); require(block.timestamp >= publicTGEStartBlockTimeStamp); require(contributions[msg.sender].weiContributed > 0); // Ensure vesting cannot be done once TRS starts if (block.timestamp > publicTGEEndBlockTimeStamp) { require(block.timestamp.sub(publicTGEEndBlockTimeStamp) <= TRSOffset); } contributions[msg.sender].hasVested = _vestingDecision; return true; } } contract LendroidSupportToken is MintableToken, PausableToken { string public constant name = "Lendroid Support Token"; string public constant symbol = "LST"; uint256 public constant decimals = 18; uint256 public constant MAX_SUPPLY = 12000000000 * (10 ** uint256(decimals));// 12 billion tokens, 18 decimal places /** * @dev Constructor that pauses tradability of tokens. */ function LendroidSupportToken() public { paused = true; } /** * @dev totalSupply is set via the minting process */ function mint(address to, uint256 amount) onlyOwner public returns (bool) { require(totalSupply_ + amount <= MAX_SUPPLY); return super.mint(to, amount); } } /** * @title SimpleLSTDistribution * @dev SimpleLSTDistribution contract provides interface for the contributor to withdraw their allocations / initiate the vesting contract */ contract SimpleLSTDistribution is Ownable { using SafeMath for uint256; SimplePreTGE public SimplePreTGEContract; SimpleTGE public SimpleTGEContract; LendroidSupportToken public token; uint256 public LSTRatePerWEI = 48000; //vesting related params // bonus multiplied to every vesting contributor's allocation uint256 public vestingBonusMultiplier; uint256 public vestingBonusMultiplierPrecision = 1000000; uint256 public vestingDuration; uint256 public vestingStartTime; struct allocation { bool shouldVest; uint256 weiContributed; uint256 LSTAllocated; bool hasWithdrawn; } // maps all allocations claimed by contributors mapping (address => allocation) public allocations; // map of address to token vesting contract mapping (address => TokenVesting) public vesting; /** * event for token transfer logging * @param beneficiary who is receiving the tokens * @param tokens amount of tokens given to the beneficiary */ event LogLSTsWithdrawn(address beneficiary, uint256 tokens); /** * event for time vested token transfer logging * @param beneficiary who is receiving the time vested tokens * @param tokens amount of tokens that will be vested to the beneficiary * @param start unix timestamp at which the tokens will start vesting * @param cliff duration in seconds after start time at which vesting will start * @param duration total duration in seconds in which the tokens will be vested */ event LogTimeVestingLSTsWithdrawn(address beneficiary, uint256 tokens, uint256 start, uint256 cliff, uint256 duration); function SimpleLSTDistribution( address _SimplePreTGEAddress, address _SimpleTGEAddress, uint256 _vestingBonusMultiplier, uint256 _vestingDuration, uint256 _vestingStartTime, address _LSTAddress ) public { require(_SimplePreTGEAddress != address(0)); require(_SimpleTGEAddress != address(0)); require(_vestingBonusMultiplier >= 1000000); require(_vestingBonusMultiplier <= 10000000); require(_vestingDuration > 0); require(_vestingStartTime > block.timestamp); token = LendroidSupportToken(_LSTAddress); // token = new LendroidSupportToken(); SimplePreTGEContract = SimplePreTGE(_SimplePreTGEAddress); SimpleTGEContract = SimpleTGE(_SimpleTGEAddress); vestingBonusMultiplier = _vestingBonusMultiplier; vestingDuration = _vestingDuration; vestingStartTime = _vestingStartTime; } // member function to mint tokens to a beneficiary function mintTokens(address beneficiary, uint256 tokens) public onlyOwner { require(beneficiary != 0x0); require(tokens > 0); require(token.mint(beneficiary, tokens)); LogLSTsWithdrawn(beneficiary, tokens); } function withdraw() external { require(!allocations[msg.sender].hasWithdrawn); // make sure simpleTGE is over and the TRS subscription has ended require(block.timestamp > SimpleTGEContract.publicTGEEndBlockTimeStamp().add(SimpleTGEContract.TRSOffset())); // allocations should be locked in the pre-TGE require(SimplePreTGEContract.allocationsLocked()); // should have participated in the TGE or the pre-TGE bool _preTGEHasVested; uint256 _preTGEWeiContributed; bool _publicTGEHasVested; uint256 _publicTGEWeiContributed; (_publicTGEHasVested, _publicTGEWeiContributed) = SimpleTGEContract.contributions(msg.sender); (_preTGEHasVested, _preTGEWeiContributed) = SimplePreTGEContract.contributions(msg.sender); uint256 _totalWeiContribution = _preTGEWeiContributed.add(_publicTGEWeiContributed); require(_totalWeiContribution > 0); // the same contributor could have contributed in the pre-tge and the tge, so we add the contributions. bool _shouldVest = _preTGEHasVested || _publicTGEHasVested; allocations[msg.sender].hasWithdrawn = true; allocations[msg.sender].shouldVest = _shouldVest; allocations[msg.sender].weiContributed = _totalWeiContribution; uint256 _lstAllocated; if (!_shouldVest) { _lstAllocated = LSTRatePerWEI.mul(_totalWeiContribution); allocations[msg.sender].LSTAllocated = _lstAllocated; require(token.mint(msg.sender, _lstAllocated)); LogLSTsWithdrawn(msg.sender, _lstAllocated); } else { _lstAllocated = LSTRatePerWEI.mul(_totalWeiContribution).mul(vestingBonusMultiplier).div(vestingBonusMultiplierPrecision); allocations[msg.sender].LSTAllocated = _lstAllocated; uint256 _withdrawNow = _lstAllocated.div(10); uint256 _vestedPortion = _lstAllocated.sub(_withdrawNow); vesting[msg.sender] = new TokenVesting(msg.sender, vestingStartTime, 0, vestingDuration, false); require(token.mint(msg.sender, _withdrawNow)); LogLSTsWithdrawn(msg.sender, _withdrawNow); require(token.mint(address(vesting[msg.sender]), _vestedPortion)); LogTimeVestingLSTsWithdrawn(address(vesting[msg.sender]), _vestedPortion, vestingStartTime, 0, vestingDuration); } } // member function that can be called to release vested tokens periodically function releaseVestedTokens(address beneficiary) public { require(beneficiary != 0x0); TokenVesting tokenVesting = vesting[beneficiary]; tokenVesting.release(token); } // unpauseToken token for transfers function unpauseToken() public onlyOwner { token.unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"vestingDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingBonusMultiplierPrecision","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"allocations","outputs":[{"name":"shouldVest","type":"bool"},{"name":"weiContributed","type":"uint256"},{"name":"LSTAllocated","type":"uint256"},{"name":"hasWithdrawn","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SimpleTGEContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LSTRatePerWEI","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SimplePreTGEContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"releaseVestedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"vesting","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingBonusMultiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"tokens","type":"uint256"}],"name":"mintTokens","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":"_SimplePreTGEAddress","type":"address"},{"name":"_SimpleTGEAddress","type":"address"},{"name":"_vestingBonusMultiplier","type":"uint256"},{"name":"_vestingDuration","type":"uint256"},{"name":"_vestingStartTime","type":"uint256"},{"name":"_LSTAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogLSTsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"start","type":"uint256"},{"indexed":false,"name":"cliff","type":"uint256"},{"indexed":false,"name":"duration","type":"uint256"}],"name":"LogTimeVestingLSTsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
606060405261bb80600455620f4240600655341561001c57600080fd5b60405160c0806129ee83398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141515156100e157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561011d57600080fd5b620f4240841015151561012f57600080fd5b62989680841115151561014157600080fd5b60008311151561015057600080fd5b428211151561015e57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360058190555082600781905550816008819055505050505050506127a38061024b6000396000f3006060604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631514617e146100eb57806320ad3874146101145780633ccfd60b1461013d57806350669a031461015257806352a9039c146101675780637aaeb37c146101d15780638da5cb5b14610226578063a8660a781461027b578063cd67e55e146102a4578063ce1a70a3146102cd578063ce699a4114610322578063e388c4231461035b578063ea3d895f146103d4578063f0dda65c146103fd578063f2fde38b1461043f578063fc0c546a14610478575b600080fd5b34156100f657600080fd5b6100fe6104cd565b6040518082815260200191505060405180910390f35b341561011f57600080fd5b6101276104d3565b6040518082815260200191505060405180910390f35b341561014857600080fd5b6101506104d9565b005b341561015d57600080fd5b61016561111c565b005b341561017257600080fd5b61019e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061120e565b60405180851515151581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b34156101dc57600080fd5b6101e4611258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023157600080fd5b61023961127e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561028657600080fd5b61028e6112a3565b6040518082815260200191505060405180910390f35b34156102af57600080fd5b6102b76112a9565b6040518082815260200191505060405180910390f35b34156102d857600080fd5b6102e06112af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561032d57600080fd5b610359600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112d5565b005b341561036657600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061142e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103df57600080fd5b6103e7611461565b6040518082815260200191505060405180910390f35b341561040857600080fd5b61043d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611467565b005b341561044a57600080fd5b610476600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061164c565b005b341561048357600080fd5b61048b6117a1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60075481565b60065481565b6000806000806000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1615151561054357600080fd5b61068c600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663904de64e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156105cb57600080fd5b5af115156105d857600080fd5b50505060405180519050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663913784566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561066757600080fd5b5af1151561067457600080fd5b505050604051805190506117c790919063ffffffff16565b4211151561069957600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663306e6a1d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561071e57600080fd5b5af1151561072b57600080fd5b50505060405180519050151561074057600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342e94c90336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15156107fb57600080fd5b5af1151561080857600080fd5b505050604051805190602001805190508097508198505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342e94c90336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15156108db57600080fd5b5af115156108e857600080fd5b50505060405180519060200180519050809950819a50505061091386896117c790919063ffffffff16565b945060008511151561092457600080fd5b888061092d5750865b93506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff02191690831515021790555083600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555084600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550831515610be657610a47856004546117e590919063ffffffff16565b925082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610b5457600080fd5b5af11515610b6157600080fd5b505050604051805190501515610b7657600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a63384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1611111565b610c23600654610c15600554610c07896004546117e590919063ffffffff16565b6117e590919063ffffffff16565b61182090919063ffffffff16565b925082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610c80600a8461182090919063ffffffff16565b9150610c95828461183b90919063ffffffff16565b90503360085460006007546000610caa611854565b808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018215151515815260200195505050505050604051809103906000f0801515610d1657600080fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e5757600080fd5b5af11515610e6457600080fd5b505050604051805190501515610e7957600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a63383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561100757600080fd5b5af1151561101457600080fd5b50505060405180519050151561102957600080fd5b7f9c3ad35113623637331a6413f35eb860735281ae815d6ce70ebbb72fd5765139600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826008546000600754604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15b505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561117757600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156111fc57600080fd5b5af1151561120957600080fd5b505050565b60096020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff16141515156112fc57600080fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166319165587600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b151561141a57600080fd5b5af1151561142757600080fd5b5050505050565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c257600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141515156114e857600080fd5b6000811115156114f757600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156115bb57600080fd5b5af115156115c857600080fd5b5050506040518051905015156115dd57600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a68282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116a757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116e357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101515156117db57fe5b8091505092915050565b60008060008414156117fa5760009150611819565b828402905082848281151561180b57fe5b0414151561181557fe5b8091505b5092915050565b600080828481151561182e57fe5b0490508091505092915050565b600082821115151561184957fe5b818303905092915050565b604051610f13806118658339019056006060604052341561000f57600080fd5b60405160a080610f1383398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100cb57600080fd5b8183111515156100da57600080fd5b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548160ff0219169083151502179055508160048190555061015c838561017364010000000002610c0d179091906401000000009004565b600281905550836003819055505050505050610191565b600080828401905083811015151561018757fe5b8091505092915050565b610d73806101a06000396000f3006060604052600436106100c5576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fb5a6b4146100ca57806313d033c0146100f35780631726cbc81461011c5780631916558714610169578063384711cc146101a257806338af3eed146101ef57806374a8f10314610244578063872a78101461027d5780638da5cb5b146102aa5780639852595c146102ff578063be9a65551461034c578063f2fde38b14610375578063fa01dc06146103ae575b600080fd5b34156100d557600080fd5b6100dd6103ff565b6040518082815260200191505060405180910390f35b34156100fe57600080fd5b610106610405565b6040518082815260200191505060405180910390f35b341561012757600080fd5b610153600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061040b565b6040518082815260200191505060405180910390f35b341561017457600080fd5b6101a0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061046e565b005b34156101ad57600080fd5b6101d9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105a7565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610202610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561024f57600080fd5b61027b600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107ac565b005b341561028857600080fd5b610290610a29565b604051808215151515815260200191505060405180910390f35b34156102b557600080fd5b6102bd610a3c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561030a57600080fd5b610336600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a61565b6040518082815260200191505060405180910390f35b341561035757600080fd5b61035f610a79565b6040518082815260200191505060405180910390f35b341561038057600080fd5b6103ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a7f565b005b34156103b957600080fd5b6103e5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610bd4565b604051808215151515815260200191505060405180910390f35b60045481565b60025481565b6000610467600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610459846105a7565b610bf490919063ffffffff16565b9050919050565b60006104798261040b565b905060008111151561048a57600080fd5b6104dc81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0d90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061056c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16610c2b9092919063ffffffff16565b7ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c565816040518082815260200191505060405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561064657600080fd5b5af1151561065357600080fd5b5050506040518051905091506106b1600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610c0d90919063ffffffff16565b90506002544210156106c6576000925061077f565b6106dd600454600354610c0d90919063ffffffff16565b421015806107345750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156107415780925061077f565b61077c60045461076e61075f60035442610bf490919063ffffffff16565b84610cf190919063ffffffff16565b610d2c90919063ffffffff16565b92505b5050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561080c57600080fd5b600560009054906101000a900460ff16151561082757600080fd5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561088057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561091a57600080fd5b5af1151561092757600080fd5b50505060405180519050925061093c8461040b565b91506109518284610bf490919063ffffffff16565b90506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506109f76000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828673ffffffffffffffffffffffffffffffffffffffff16610c2b9092919063ffffffff16565b7f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee660405160405180910390a150505050565b600560009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090505481565b60035481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ada57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610b1657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000828211151515610c0257fe5b818303905092915050565b6000808284019050838110151515610c2157fe5b8091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ccd57600080fd5b5af11515610cda57600080fd5b505050604051805190501515610cec57fe5b505050565b6000806000841415610d065760009150610d25565b8284029050828482811515610d1757fe5b04141515610d2157fe5b8091505b5092915050565b6000808284811515610d3a57fe5b04905080915050929150505600a165627a7a723058208d6fd9759fe87d5f34ce24ee7529433ff48400b6a1869b2abb75f8e1755ea1cd0029a165627a7a72305820d8dc9018449117e9c1bc41e7169386cb4ea2da047333f3dc83f374b68805c8250029000000000000000000000000e3ac1eea42b1c7406731980b5bb072c4a7e95ded00000000000000000000000089e9062b160a8d499727baf544bfaf4997dc4ccf00000000000000000000000000000000000000000000000000000000003273530000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000005aa320000000000000000000000000004de2573e27e648607b50e1cfff921a33e4a34405
Deployed Bytecode
0x6060604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631514617e146100eb57806320ad3874146101145780633ccfd60b1461013d57806350669a031461015257806352a9039c146101675780637aaeb37c146101d15780638da5cb5b14610226578063a8660a781461027b578063cd67e55e146102a4578063ce1a70a3146102cd578063ce699a4114610322578063e388c4231461035b578063ea3d895f146103d4578063f0dda65c146103fd578063f2fde38b1461043f578063fc0c546a14610478575b600080fd5b34156100f657600080fd5b6100fe6104cd565b6040518082815260200191505060405180910390f35b341561011f57600080fd5b6101276104d3565b6040518082815260200191505060405180910390f35b341561014857600080fd5b6101506104d9565b005b341561015d57600080fd5b61016561111c565b005b341561017257600080fd5b61019e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061120e565b60405180851515151581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b34156101dc57600080fd5b6101e4611258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023157600080fd5b61023961127e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561028657600080fd5b61028e6112a3565b6040518082815260200191505060405180910390f35b34156102af57600080fd5b6102b76112a9565b6040518082815260200191505060405180910390f35b34156102d857600080fd5b6102e06112af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561032d57600080fd5b610359600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112d5565b005b341561036657600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061142e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103df57600080fd5b6103e7611461565b6040518082815260200191505060405180910390f35b341561040857600080fd5b61043d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611467565b005b341561044a57600080fd5b610476600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061164c565b005b341561048357600080fd5b61048b6117a1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60075481565b60065481565b6000806000806000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1615151561054357600080fd5b61068c600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663904de64e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156105cb57600080fd5b5af115156105d857600080fd5b50505060405180519050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663913784566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561066757600080fd5b5af1151561067457600080fd5b505050604051805190506117c790919063ffffffff16565b4211151561069957600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663306e6a1d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561071e57600080fd5b5af1151561072b57600080fd5b50505060405180519050151561074057600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342e94c90336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15156107fb57600080fd5b5af1151561080857600080fd5b505050604051805190602001805190508097508198505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342e94c90336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b15156108db57600080fd5b5af115156108e857600080fd5b50505060405180519060200180519050809950819a50505061091386896117c790919063ffffffff16565b945060008511151561092457600080fd5b888061092d5750865b93506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff02191690831515021790555083600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555084600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550831515610be657610a47856004546117e590919063ffffffff16565b925082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610b5457600080fd5b5af11515610b6157600080fd5b505050604051805190501515610b7657600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a63384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1611111565b610c23600654610c15600554610c07896004546117e590919063ffffffff16565b6117e590919063ffffffff16565b61182090919063ffffffff16565b925082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610c80600a8461182090919063ffffffff16565b9150610c95828461183b90919063ffffffff16565b90503360085460006007546000610caa611854565b808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018215151515815260200195505050505050604051809103906000f0801515610d1657600080fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e5757600080fd5b5af11515610e6457600080fd5b505050604051805190501515610e7957600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a63383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561100757600080fd5b5af1151561101457600080fd5b50505060405180519050151561102957600080fd5b7f9c3ad35113623637331a6413f35eb860735281ae815d6ce70ebbb72fd5765139600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826008546000600754604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15b505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561117757600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156111fc57600080fd5b5af1151561120957600080fd5b505050565b60096020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff16141515156112fc57600080fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166319165587600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b151561141a57600080fd5b5af1151561142757600080fd5b5050505050565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c257600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141515156114e857600080fd5b6000811115156114f757600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156115bb57600080fd5b5af115156115c857600080fd5b5050506040518051905015156115dd57600080fd5b7f7915a70110cc2170cd8abb125e948f69b957814287e846d82e4969c3e9dd90a68282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116a757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116e357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101515156117db57fe5b8091505092915050565b60008060008414156117fa5760009150611819565b828402905082848281151561180b57fe5b0414151561181557fe5b8091505b5092915050565b600080828481151561182e57fe5b0490508091505092915050565b600082821115151561184957fe5b818303905092915050565b604051610f13806118658339019056006060604052341561000f57600080fd5b60405160a080610f1383398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100cb57600080fd5b8183111515156100da57600080fd5b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548160ff0219169083151502179055508160048190555061015c838561017364010000000002610c0d179091906401000000009004565b600281905550836003819055505050505050610191565b600080828401905083811015151561018757fe5b8091505092915050565b610d73806101a06000396000f3006060604052600436106100c5576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630fb5a6b4146100ca57806313d033c0146100f35780631726cbc81461011c5780631916558714610169578063384711cc146101a257806338af3eed146101ef57806374a8f10314610244578063872a78101461027d5780638da5cb5b146102aa5780639852595c146102ff578063be9a65551461034c578063f2fde38b14610375578063fa01dc06146103ae575b600080fd5b34156100d557600080fd5b6100dd6103ff565b6040518082815260200191505060405180910390f35b34156100fe57600080fd5b610106610405565b6040518082815260200191505060405180910390f35b341561012757600080fd5b610153600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061040b565b6040518082815260200191505060405180910390f35b341561017457600080fd5b6101a0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061046e565b005b34156101ad57600080fd5b6101d9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105a7565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610202610786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561024f57600080fd5b61027b600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107ac565b005b341561028857600080fd5b610290610a29565b604051808215151515815260200191505060405180910390f35b34156102b557600080fd5b6102bd610a3c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561030a57600080fd5b610336600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a61565b6040518082815260200191505060405180910390f35b341561035757600080fd5b61035f610a79565b6040518082815260200191505060405180910390f35b341561038057600080fd5b6103ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a7f565b005b34156103b957600080fd5b6103e5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610bd4565b604051808215151515815260200191505060405180910390f35b60045481565b60025481565b6000610467600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610459846105a7565b610bf490919063ffffffff16565b9050919050565b60006104798261040b565b905060008111151561048a57600080fd5b6104dc81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0d90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061056c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16610c2b9092919063ffffffff16565b7ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c565816040518082815260200191505060405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561064657600080fd5b5af1151561065357600080fd5b5050506040518051905091506106b1600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610c0d90919063ffffffff16565b90506002544210156106c6576000925061077f565b6106dd600454600354610c0d90919063ffffffff16565b421015806107345750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156107415780925061077f565b61077c60045461076e61075f60035442610bf490919063ffffffff16565b84610cf190919063ffffffff16565b610d2c90919063ffffffff16565b92505b5050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561080c57600080fd5b600560009054906101000a900460ff16151561082757600080fd5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561088057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561091a57600080fd5b5af1151561092757600080fd5b50505060405180519050925061093c8461040b565b91506109518284610bf490919063ffffffff16565b90506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506109f76000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828673ffffffffffffffffffffffffffffffffffffffff16610c2b9092919063ffffffff16565b7f44825a4b2df8acb19ce4e1afba9aa850c8b65cdb7942e2078f27d0b0960efee660405160405180910390a150505050565b600560009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090505481565b60035481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ada57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610b1657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000828211151515610c0257fe5b818303905092915050565b6000808284019050838110151515610c2157fe5b8091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ccd57600080fd5b5af11515610cda57600080fd5b505050604051805190501515610cec57fe5b505050565b6000806000841415610d065760009150610d25565b8284029050828482811515610d1757fe5b04141515610d2157fe5b8091505b5092915050565b6000808284811515610d3a57fe5b04905080915050929150505600a165627a7a723058208d6fd9759fe87d5f34ce24ee7529433ff48400b6a1869b2abb75f8e1755ea1cd0029a165627a7a72305820d8dc9018449117e9c1bc41e7169386cb4ea2da047333f3dc83f374b68805c8250029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e3ac1eea42b1c7406731980b5bb072c4a7e95ded00000000000000000000000089e9062b160a8d499727baf544bfaf4997dc4ccf00000000000000000000000000000000000000000000000000000000003273530000000000000000000000000000000000000000000000000000000001e13380000000000000000000000000000000000000000000000000000000005aa320000000000000000000000000004de2573e27e648607b50e1cfff921a33e4a34405
-----Decoded View---------------
Arg [0] : _SimplePreTGEAddress (address): 0xE3Ac1Eea42b1C7406731980b5BB072C4A7e95DEd
Arg [1] : _SimpleTGEAddress (address): 0x89e9062B160a8d499727Baf544BfaF4997dC4ccf
Arg [2] : _vestingBonusMultiplier (uint256): 3306323
Arg [3] : _vestingDuration (uint256): 31536000
Arg [4] : _vestingStartTime (uint256): 1520640000
Arg [5] : _LSTAddress (address): 0x4de2573e27E648607B50e1Cfff921A33E4A34405
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000e3ac1eea42b1c7406731980b5bb072c4a7e95ded
Arg [1] : 00000000000000000000000089e9062b160a8d499727baf544bfaf4997dc4ccf
Arg [2] : 0000000000000000000000000000000000000000000000000000000000327353
Arg [3] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [4] : 000000000000000000000000000000000000000000000000000000005aa32000
Arg [5] : 0000000000000000000000004de2573e27e648607b50e1cfff921a33e4a34405
Swarm Source
bzzr://d8dc9018449117e9c1bc41e7169386cb4ea2da047333f3dc83f374b68805c825
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.