ETH Price: $2,508.79 (-4.83%)

Token

Experty (EXY)
 

Overview

Max Total Supply

79,404,563.976510606 EXY

Holders

17,139 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00031898297330693 EXY

Value
$0.00
0x7c5089f094b4019e39ac03a0fe57505c21809623
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Experty token contract has migrated to 0xDecade1c6Bf2cD9fb89aFad73e4a519C867adcF5.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ExyToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.19;

contract ERC223ReceivingContract {
  function tokenFallback(address _from, uint256 _value, bytes _data) public;
}

contract ERC223Token {
  using SafeMath for uint256;

  // token constants
  string public name;
  bytes32 public symbol;
  uint8 public decimals;
  uint256 public totalSupply;

  // token balances
  mapping(address => uint256) public balanceOf;
  // token spending allowance, used by transferFrom(), for compliance with ERC20
  mapping (address => mapping(address => uint256)) internal allowances;

  // Function that is called when a user or another contract wants to transfer funds.
  function transfer(address to, uint256 value, bytes data) public returns (bool) {
    require(balanceOf[msg.sender] >= value);
    uint256 codeLength;

    assembly {
      // Retrieve the size of the code on target address, this needs assembly .
      codeLength := extcodesize(to)
    }

    balanceOf[msg.sender] -= value;  // underflow checked by require() above
    balanceOf[to] = balanceOf[to].add(value);
    if (codeLength > 0) {
      ERC223ReceivingContract receiver = ERC223ReceivingContract(to);
      receiver.tokenFallback(msg.sender, value, data);
    }
    ERC223Transfer(msg.sender, to, value, data);
    return true;
  }

  // Standard function transfer similar to ERC20 transfer with no _data.
  // Added due to backwards compatibility reasons.
  function transfer(address to, uint256 value) public returns (bool) {
    require(balanceOf[msg.sender] >= value);
    uint256 codeLength;
    bytes memory empty;

    assembly {
      // Retrieve the size of the code on target address, this needs assembly.
      codeLength := extcodesize(to)
    }

    balanceOf[msg.sender] -= value;  // underflow checked by require() above
    balanceOf[to] = balanceOf[to].add(value);
    if (codeLength > 0) {
      ERC223ReceivingContract receiver = ERC223ReceivingContract(to);
      receiver.tokenFallback(msg.sender, value, empty);
    }
    ERC223Transfer(msg.sender, to, value, empty);
    // ERC20 compatible event:
    Transfer(msg.sender, to, value);
    return true;
  }

  // Send _value tokens to _to from _from on the condition it is approved by _from.
  // Added for full compliance with ERC20
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    require(_to != address(0));
    require(_value <= balanceOf[_from]);
    require(_value <= allowances[_from][msg.sender]);
    bytes memory empty;

    balanceOf[_from] = balanceOf[_from] -= _value;
    allowances[_from][msg.sender] -= _value;
    balanceOf[_to] = balanceOf[_to].add(_value);

    // No need to call tokenFallback(), cause this is ERC20's solution to the same problem
    // tokenFallback solves in ERC223. Just fire the ERC223 event for logs consistency.
    ERC223Transfer(_from, _to, _value, empty);
    Transfer(_from, _to, _value);
    return true;
  }

  // Allow _spender to withdraw from your account, multiple times, up to the _value amount.
  // If this function is called again it overwrites the current allowance with _value.
  function approve(address _spender, uint256 _value) public returns (bool success) {
    allowances[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  // Returns the amount which _spender is still allowed to withdraw from _owner
  function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
    return allowances[_owner][_spender];
  }

  event ERC223Transfer(address indexed from, address indexed to, uint256 value, bytes indexed data);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed from, address indexed spender, uint256 value);
}

contract ERC223MintableToken is ERC223Token {
  uint256 public circulatingSupply;
  function mint(address to, uint256 value) internal returns (bool) {
    uint256 codeLength;

    assembly {
      // Retrieve the size of the code on target address, this needs assembly .
      codeLength := extcodesize(to)
    }

    circulatingSupply += value;

    balanceOf[to] += value;  // No safe math needed, won't exceed totalSupply.
    if (codeLength > 0) {
      ERC223ReceivingContract receiver = ERC223ReceivingContract(to);
      bytes memory empty;
      receiver.tokenFallback(msg.sender, value, empty);
    }
    Mint(to, value);
    return true;
  }

  event Mint(address indexed to, uint256 value);
}

contract ERC20Token {
  function balanceOf(address owner) public view returns (uint256 balance);
  function transfer(address to, uint256 tokens) public returns (bool success);
}

contract Ownable {
  address public owner;
  /**
   * @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);
    _;
  }

}

contract BountyTokenAllocation is Ownable {

  // This contract describes how the bounty tokens are allocated.
  // After a bounty allocation was proposed by a signatory, another
  // signatory must accept this allocation.

  // Total amount of remaining tokens to be distributed
  uint256 public remainingBountyTokens;

  // Addresses which have a bounty allocation, in order of proposals
  address[] public allocationAddressList;

  // Possible split states: Proposed, Approved, Rejected
  // Proposed is the initial state.
  // Both Approved and Rejected are final states.
  // The only possible transitions are:
  // Proposed => Approved
  // Proposed => Rejected

  // keep map here of bounty proposals
  mapping (address => Types.StructBountyAllocation) public bountyOf;

  /**
   * Bounty token allocation constructor.
   *
   * @param _remainingBountyTokens Total number of bounty tokens that will be
   *                               allocated.
   */
  function BountyTokenAllocation(uint256 _remainingBountyTokens) Ownable() public {
    remainingBountyTokens = _remainingBountyTokens;
  }

  /**
   * Propose a bounty transfer
   *
   * @param _dest Address of bounty reciepent
   * @param _amount Amount of tokens he will receive
   */
  function proposeBountyTransfer(address _dest, uint256 _amount) public onlyOwner {
    require(_amount > 0);
    require(_amount <= remainingBountyTokens);
     // we can't overwrite existing proposal
     // but we can overwrite rejected proposal with new values
    require(bountyOf[_dest].proposalAddress == 0x0 || bountyOf[_dest].bountyState == Types.BountyState.Rejected);

    if (bountyOf[_dest].bountyState != Types.BountyState.Rejected) {
      allocationAddressList.push(_dest);
    }

    remainingBountyTokens = SafeMath.sub(remainingBountyTokens, _amount);
    bountyOf[_dest] = Types.StructBountyAllocation({
      amount: _amount,
      proposalAddress: msg.sender,
      bountyState: Types.BountyState.Proposed
    });
  }

  /**
   * Approves a bounty transfer
   *
   * @param _dest Address of bounty reciepent
   * @return amount of tokens which we approved
   */
  function approveBountyTransfer(address _approverAddress, address _dest) public onlyOwner returns (uint256) {
    require(bountyOf[_dest].bountyState == Types.BountyState.Proposed);
    require(bountyOf[_dest].proposalAddress != _approverAddress);

    bountyOf[_dest].bountyState = Types.BountyState.Approved;
    return bountyOf[_dest].amount;
  }

  /**
   * Rejects a bounty transfer
   *
   * @param _dest Address of bounty reciepent for whom we are rejecting bounty transfer
   */
  function rejectBountyTransfer(address _dest) public onlyOwner {
    var tmp = bountyOf[_dest];
    require(tmp.bountyState == Types.BountyState.Proposed);

    bountyOf[_dest].bountyState = Types.BountyState.Rejected;
    remainingBountyTokens = remainingBountyTokens + bountyOf[_dest].amount;
  }

}

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

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

contract SignatoryOwnable {
  mapping (address => bool) public IS_SIGNATORY;

  function SignatoryOwnable(address signatory0, address signatory1, address signatory2) internal {
    IS_SIGNATORY[signatory0] = true;
    IS_SIGNATORY[signatory1] = true;
    IS_SIGNATORY[signatory2] = true;
  }

  modifier onlySignatory() {
    require(IS_SIGNATORY[msg.sender]);
    _;
  }
}

contract SignatoryPausable is SignatoryOwnable {
  bool public paused;  // == false by default
  address public pauseProposer;  // == 0x0 (no proposal) by default

  function SignatoryPausable(address signatory0, address signatory1, address signatory2)
      SignatoryOwnable(signatory0, signatory1, signatory2)
      internal {}

  modifier whenPaused(bool status) {
    require(paused == status);
    _;
  }

  /**
   * @dev First signatory consent for contract pause state change.
   */
  function proposePauseChange(bool status) onlySignatory whenPaused(!status) public {
    require(pauseProposer == 0x0);  // require there's no pending proposal already
    pauseProposer = msg.sender;
  }

  /**
   * @dev Second signatory consent for contract pause state change, triggers the change.
   */
  function approvePauseChange(bool status) onlySignatory whenPaused(!status) public {
    require(pauseProposer != 0x0);  // require that a change was already proposed
    require(pauseProposer != msg.sender);  // approver must be different than proposer
    pauseProposer = 0x0;
    paused = status;
    LogPause(paused);
  }

  /**
   * @dev Reject pause status change proposal.
   * Can also be called by the proposer, to cancel his proposal.
   */
  function rejectPauseChange(bool status) onlySignatory whenPaused(!status) public {
    pauseProposer = 0x0;
  }

  event LogPause(bool status);
}

contract ExyToken is ERC223MintableToken, SignatoryPausable {
  using SafeMath for uint256;

  VestingAllocation private partnerTokensAllocation;
  VestingAllocation private companyTokensAllocation;
  BountyTokenAllocation private bountyTokensAllocation;

  /*
   * ICO TOKENS
   * 33% (including SEED TOKENS)
   *
   * Ico tokens are sent to the ICO_TOKEN_ADDRESS immediately
   * after ExyToken initialization
   */
  uint256 private constant ICO_TOKENS = 14503506112248500000000000;
  address private constant ICO_TOKENS_ADDRESS = 0x97c967524d1eacAEb375d4269bE4171581a289C7;
  /*
   * SEED TOKENS
   * 33% (including ICO TOKENS)
   *
   * Seed tokens are sent to the SEED_TOKENS_ADDRESS immediately
   * after ExyToken initialization
   */
  uint256 private constant SEED_TOKENS = 11700000000000000000000000;
  address private constant SEED_TOKENS_ADDRESS = 0x7C32c7649aA1335271aF00cd4280f87166474778;

  /*
   * COMPANY TOKENS
   * 33%
   *
   * Company tokens are being distrubited in 36 months
   * Total tokens = COMPANY_TOKENS_PER_PERIOD * COMPANY_PERIODS
   */
  uint256 private constant COMPANY_TOKENS_PER_PERIOD = 727875169784680000000000;
  uint256 private constant COMPANY_PERIODS = 36;
  uint256 private constant MINUTES_IN_COMPANY_PERIOD = 60 * 24 * 365 / 12;

  /*
   * PARTNER TOKENS
   * 30%
   *
   * Partner tokens are available after 18 months
   * Total tokens = PARTNER_TOKENS_PER_PERIOD * PARTNER_PERIODS
   */
  uint256 private constant PARTNER_TOKENS_PER_PERIOD = 23821369192953200000000000;
  uint256 private constant PARTNER_PERIODS = 1;
  uint256 private constant MINUTES_IN_PARTNER_PERIOD = MINUTES_IN_COMPANY_PERIOD * 18; // MINUTES_IN_COMPANY_PERIOD equals one month (see declaration of MINUTES_IN_COMPANY_PERIOD constant)

  /*
   * BOUNTY TOKENS
   * 3%
   *
   * Bounty tokens can be sent immediately after initialization
   */
  uint256 private constant BOUNTY_TOKENS = 2382136919295320000000000;

  /*
   * MARKETING COST TOKENS
   * 1%
   *
   * Tokens are sent to the MARKETING_COST_ADDRESS immediately
   * after ExyToken initialization
   */
  uint256 private constant MARKETING_COST_TOKENS = 794045639765106000000000;
  address private constant MARKETING_COST_ADDRESS = 0xF133ef3BE68128c9Af16F5aF8F8707f7A7A51452;

  uint256 public INIT_DATE;

  string public constant name = "Experty Token";
  bytes32 public constant symbol = "EXY";
  uint8 public constant decimals = 18;
  uint256 public constant totalSupply = (
    COMPANY_TOKENS_PER_PERIOD * COMPANY_PERIODS +
    PARTNER_TOKENS_PER_PERIOD * PARTNER_PERIODS +
    BOUNTY_TOKENS + MARKETING_COST_TOKENS +
    ICO_TOKENS + SEED_TOKENS);

  /**
   * ExyToken contructor.
   *
   * Exy token contains allocations of:
   * - partnerTokensAllocation
   * - companyTokensAllocation
   * - bountyTokensAllocation
   *
   * param signatory0 Address of first signatory.
   * param signatory1 Address of second signatory.
   * param signatory2 Address of third signatory.
   *
   */
  function ExyToken(address signatory0, address signatory1, address signatory2)
      SignatoryPausable(signatory0, signatory1, signatory2)
      public {

    // NOTE: the contract is safe as long as this assignment is not changed nor updated.
    // If, in the future, INIT_DATE could have a different value, calculations using its value
    // should most likely use SafeMath.
    INIT_DATE = block.timestamp;

    companyTokensAllocation = new VestingAllocation(
      COMPANY_TOKENS_PER_PERIOD,
      COMPANY_PERIODS,
      MINUTES_IN_COMPANY_PERIOD,
      INIT_DATE);

    partnerTokensAllocation = new VestingAllocation(
      PARTNER_TOKENS_PER_PERIOD,
      PARTNER_PERIODS,
      MINUTES_IN_PARTNER_PERIOD,
      INIT_DATE);

    bountyTokensAllocation = new BountyTokenAllocation(
      BOUNTY_TOKENS
    );

    // minting marketing cost tokens
    mint(MARKETING_COST_ADDRESS, MARKETING_COST_TOKENS);

    // minting ICO tokens
    mint(ICO_TOKENS_ADDRESS, ICO_TOKENS);
    // minting SEED tokens
    mint(SEED_TOKENS_ADDRESS, SEED_TOKENS);
  }

  /**
   * Transfer ERC20 tokens out of this contract, to avoid them being stuck here forever.
   * Only one signatory decision needed, to minimize contract size since this is a rare case.
   */
  function erc20TokenTransfer(address _tokenAddr, address _dest) public onlySignatory {
    ERC20Token token = ERC20Token(_tokenAddr);
    token.transfer(_dest, token.balanceOf(address(this)));
  }

  /**
   * Adds a proposition of a company token split to companyTokensAllocation
   */
  function proposeCompanyAllocation(address _dest, uint256 _tokensPerPeriod) public onlySignatory onlyPayloadSize(2 * 32) {
    companyTokensAllocation.proposeAllocation(msg.sender, _dest, _tokensPerPeriod);
  }

  /**
   * Approves a proposition of a company token split
   */
  function approveCompanyAllocation(address _dest) public onlySignatory {
    companyTokensAllocation.approveAllocation(msg.sender, _dest);
  }

  /**
   * Rejects a proposition of a company token split.
   * it can reject only not approved method
   */
  function rejectCompanyAllocation(address _dest) public onlySignatory {
    companyTokensAllocation.rejectAllocation(_dest);
  }

  /**
   * Return number of remaining company tokens allocations
   * @return Length of company allocations per period
   */
  function getRemainingCompanyTokensAllocation() public view returns (uint256) {
    return companyTokensAllocation.remainingTokensPerPeriod();
  }

  /**
   * Given the index of the company allocation in allocationAddressList
   * we find its reciepent address and return struct with informations
   * about this allocation
   *
   * @param nr Index of allocation in allocationAddressList
   * @return Information about company alloction
   */
  function getCompanyAllocation(uint256 nr) public view returns (uint256, address, uint256, Types.AllocationState, address) {
    address recipientAddress = companyTokensAllocation.allocationAddressList(nr);
    var (tokensPerPeriod, proposalAddress, claimedPeriods, allocationState) = companyTokensAllocation.allocationOf(recipientAddress);
    return (tokensPerPeriod, proposalAddress, claimedPeriods, allocationState, recipientAddress);
  }

  /**
   * Adds a proposition of a partner token split to companyTokensAllocation
   */
  function proposePartnerAllocation(address _dest, uint256 _tokensPerPeriod) public onlySignatory onlyPayloadSize(2 * 32) {
    partnerTokensAllocation.proposeAllocation(msg.sender, _dest, _tokensPerPeriod);
  }

  /**
   * Approves a proposition of a partner token split
   */
  function approvePartnerAllocation(address _dest) public onlySignatory {
    partnerTokensAllocation.approveAllocation(msg.sender, _dest);
  }

  /**
   * Rejects a proposition of a partner token split.
   * it can reject only not approved method
   */
  function rejectPartnerAllocation(address _dest) public onlySignatory {
    partnerTokensAllocation.rejectAllocation(_dest);
  }

  /**
   * Return number of remaining partner tokens allocations
   * @return Length of partner allocations per period
   */
  function getRemainingPartnerTokensAllocation() public view returns (uint256) {
    return partnerTokensAllocation.remainingTokensPerPeriod();
  }

  /**
   * Given the index of the partner allocation in allocationAddressList
   * we find its reciepent address and return struct with informations
   * about this allocation
   *
   * @param nr Index of allocation in allocationAddressList
   * @return Information about partner alloction
   */
  function getPartnerAllocation(uint256 nr) public view returns (uint256, address, uint256, Types.AllocationState, address) {
    address recipientAddress = partnerTokensAllocation.allocationAddressList(nr);
    var (tokensPerPeriod, proposalAddress, claimedPeriods, allocationState) = partnerTokensAllocation.allocationOf(recipientAddress);
    return (tokensPerPeriod, proposalAddress, claimedPeriods, allocationState, recipientAddress);
  }

  function proposeBountyTransfer(address _dest, uint256 _amount) public onlySignatory onlyPayloadSize(2 * 32) {
    bountyTokensAllocation.proposeBountyTransfer(_dest, _amount);
  }

  /**
   * Approves a bounty transfer and mint tokens
   *
   * @param _dest Address of the bounty reciepent to whom we should mint token
   */
  function approveBountyTransfer(address _dest) public onlySignatory {
    uint256 tokensToMint = bountyTokensAllocation.approveBountyTransfer(msg.sender, _dest);
    mint(_dest, tokensToMint);
  }

  /**
   * Rejects a proposition of a bounty token.
   * it can reject only not approved method
   */
  function rejectBountyTransfer(address _dest) public onlySignatory {
    bountyTokensAllocation.rejectBountyTransfer(_dest);
  }

  function getBountyTransfers(uint256 nr) public view returns (uint256, address, Types.BountyState, address) {
    address recipientAddress = bountyTokensAllocation.allocationAddressList(nr);
    var (amount, proposalAddress, bountyState) = bountyTokensAllocation.bountyOf(recipientAddress);
    return (amount, proposalAddress, bountyState, recipientAddress);
  }

  /**
   * Return number of remaining bounty tokens allocations
   * @return Length of company allocations
   */
  function getRemainingBountyTokens() public view returns (uint256) {
    return bountyTokensAllocation.remainingBountyTokens();
  }

  function claimTokens() public {
    mint(
      msg.sender,
      partnerTokensAllocation.claimTokens(msg.sender) +
      companyTokensAllocation.claimTokens(msg.sender)
    );
  }

  /**
   * Override the transfer and mint functions to respect pause state.
   */
  function transfer(address to, uint256 value, bytes data) public whenPaused(false) returns (bool) {
    return super.transfer(to, value, data);
  }

  function transfer(address to, uint256 value) public whenPaused(false) returns (bool) {
    return super.transfer(to, value);
  }

  function mint(address to, uint256 value) internal whenPaused(false) returns (bool) {
    if (circulatingSupply.add(value) > totalSupply) {
      paused = true;  // emergency pause, this should never happen!
      return false;
    }
    return super.mint(to, value);
  }

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

}

contract Types {

  // Possible split states: Proposed, Approved, Rejected
  // Proposed is the initial state.
  // Both Approved and Rejected are final states.
  // The only possible transitions are:
  // Proposed => Approved
  // Proposed => Rejected
  enum AllocationState {
    Proposed,
    Approved,
    Rejected
  }

  // Structure used for storing company and partner allocations
  struct StructVestingAllocation {
    // How many tokens per period we want to pass
    uint256 tokensPerPeriod;
    // By whom was this split proposed. Another signatory must approve too
    address proposerAddress;
    // How many times did we release tokens
    uint256 claimedPeriods;
    // State of actual split.
    AllocationState allocationState;
  }

  enum BountyState {
    Proposed, // 0
    Approved, // 1
    Rejected  // 2
  }

  struct StructBountyAllocation {
    // How many tokens send him or her
    uint256 amount;
    // By whom was this allocation proposed
    address proposalAddress;
    // State of actual split.
    BountyState bountyState;
  }
}

contract VestingAllocation is Ownable {

  // This contract describes how the tokens are being released in time

  // Addresses which have a vesting allocation, in order of proposals
  address[] public allocationAddressList;

  // How many distributions periods there are
  uint256 public periods;
  // How long is one interval
  uint256 public minutesInPeriod;
  // Total amount of remaining tokens to be distributed
  uint256 public remainingTokensPerPeriod;
  // Total amount of all tokens
  uint256 public totalSupply;
  // Inital timestamp
  uint256 public initTimestamp;

  // For each address we can add exactly one possible split.
  // If we try to add another proposal on existing address it will be rejected
  mapping (address => Types.StructVestingAllocation) public allocationOf;

  /**
   * VestingAllocation contructor.
   * RemainingTokensPerPeriod variable which represents
   * the remaining amount of tokens to be distributed
   *
   */
  function VestingAllocation(uint256 _tokensPerPeriod, uint256 _periods, uint256 _minutesInPeriod, uint256 _initalTimestamp) Ownable() public {
    totalSupply = _tokensPerPeriod * _periods;
    periods = _periods;
    minutesInPeriod = _minutesInPeriod;
    remainingTokensPerPeriod = _tokensPerPeriod;
    initTimestamp = _initalTimestamp;
  }

  /**
   * Propose split method adds proposal to the splits Array.
   *
   * @param _dest              - address of the new receiver
   * @param _tokensPerPeriod   - how many tokens we are giving to dest
   */
  function proposeAllocation(address _proposerAddress, address _dest, uint256 _tokensPerPeriod) public onlyOwner {
    require(_tokensPerPeriod > 0);
    require(_tokensPerPeriod <= remainingTokensPerPeriod);
    // In solidity there is no "exist" method on a map key.
    // We can't overwrite existing proposal, so we are checking if it is the default value (0x0)
    // Add `allocationOf[_dest].allocationState == Types.AllocationState.Rejected` for possibility to overwrite rejected allocation
    require(allocationOf[_dest].proposerAddress == 0x0 || allocationOf[_dest].allocationState == Types.AllocationState.Rejected);

    if (allocationOf[_dest].allocationState != Types.AllocationState.Rejected) {
      allocationAddressList.push(_dest);
    }

    remainingTokensPerPeriod = remainingTokensPerPeriod - _tokensPerPeriod;
    allocationOf[_dest] = Types.StructVestingAllocation({
      tokensPerPeriod: _tokensPerPeriod,
      allocationState: Types.AllocationState.Proposed,
      proposerAddress: _proposerAddress,
      claimedPeriods: 0
    });
  }

  /**
   * Approves the split allocation, so it can be claimed after periods
   *
   * @param _address - address for the split
   */
  function approveAllocation(address _approverAddress, address _address) public onlyOwner {
    require(allocationOf[_address].allocationState == Types.AllocationState.Proposed);
    require(allocationOf[_address].proposerAddress != _approverAddress);
    allocationOf[_address].allocationState = Types.AllocationState.Approved;
  }

 /**
   * Rejects the split allocation
   *
   * @param _address - address for the split to be rejected
   */
  function rejectAllocation(address _address) public onlyOwner {
    var tmp = allocationOf[_address];
    require(tmp.allocationState == Types.AllocationState.Proposed);
    allocationOf[_address].allocationState = Types.AllocationState.Rejected;
    remainingTokensPerPeriod = remainingTokensPerPeriod + tmp.tokensPerPeriod;
  }

  function claimTokens(address _address) public returns (uint256) {
    Types.StructVestingAllocation storage alloc = allocationOf[_address];
    if (alloc.allocationState == Types.AllocationState.Approved) {
      uint256 periodsElapsed = SafeMath.min((block.timestamp - initTimestamp) / (minutesInPeriod * 1 minutes), periods);
      uint256 tokens = (periodsElapsed - alloc.claimedPeriods) * alloc.tokensPerPeriod;
      alloc.claimedPeriods = periodsElapsed;
      return tokens;
    }
    return 0;
  }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"nr","type":"uint256"}],"name":"getCompanyAllocation","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint8"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseProposer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRemainingCompanyTokensAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"IS_SIGNATORY","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"approveBountyTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRemainingPartnerTokensAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"rejectCompanyAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRemainingBountyTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"},{"name":"_amount","type":"uint256"}],"name":"proposeBountyTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"approvePartnerAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"},{"name":"_tokensPerPeriod","type":"uint256"}],"name":"proposeCompanyAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"circulatingSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"rejectPartnerAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"},{"name":"_tokensPerPeriod","type":"uint256"}],"name":"proposePartnerAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"},{"name":"_dest","type":"address"}],"name":"erc20TokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INIT_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"rejectBountyTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"status","type":"bool"}],"name":"proposePauseChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dest","type":"address"}],"name":"approveCompanyAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"status","type":"bool"}],"name":"approvePauseChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"nr","type":"uint256"}],"name":"getPartnerAllocation","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint8"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nr","type":"uint256"}],"name":"getBountyTransfers","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint8"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"status","type":"bool"}],"name":"rejectPauseChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"signatory0","type":"address"},{"name":"signatory1","type":"address"},{"name":"signatory2","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"LogPause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"data","type":"bytes"}],"name":"ERC223Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

606060405234156200001057600080fd5b604051606080620030b7833981016040528080519190602001805191906020018051600160a060020a038581166000908152600760205260408082208054600160ff1991821681179092558885168452828420805482168317905593851683529120805490921617905542600c819055909250699a223128273caee01000915060249061ab1890620000a16200049d565b80858152602001848152602001838152602001828152602001945050505050604051809103906000f0801515620000d757600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055600c546a13b45f02f38fca758a600090600190620c07b090620001196200049d565b80858152602001848152602001838152602001828152602001945050505050604051809103906000f08015156200014f57600080fd5b60098054600160a060020a031916600160a060020a03929092169190911790556a01f86fe6b1f4c77227700062000185620004ae565b908152602001604051809103906000f0801515620001a257600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055620001fa73f133ef3be68128c9af16f5af8f8707f7a7a5145269a8254ce5fc4253a5f4006401000000006200027881026200178e1704565b50620002347397c967524d1eacaeb375d4269be4171581a289c76a0bff3ca44b8d4a971a08006401000000006200178e6200027882021704565b506200026e737c32c7649aa1335271af00cd4280f871664747786a09ad924559f742a88000006401000000006200178e6200027882021704565b50505050620004d1565b600854600090819060ff16156200028e57600080fd5b6006546a41ae9209d689ea12740c0090620002b8908564010000000062001778620002fa82021704565b1115620002d6576008805460ff1916600117905560009150620002f3565b620002f0848464010000000062001c6d6200031182021704565b91505b5092915050565b6000828201838110156200030a57fe5b9392505050565b600080600062000320620004bf565b6006805486019055600160a060020a0386166000908152600460205260408120805487019055863b9350831115620004545785915081600160a060020a031663c0ee0b8a3387846040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620003ef578082015183820152602001620003d5565b50505050905090810190601f1680156200041d5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15156200043e57600080fd5b6102c65a03f115156200045057600080fd5b5050505b85600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858660405190815260200160405180910390a250600195945050505050565b60405161076e80620022f783390190565b6040516106528062002a6583390190565b60206040519081016040526000815290565b611e1680620004e16000396000f30060606040526004361061019c5763ffffffff60e060020a60003504166224eb4b81146101a157806305763ff71461021357806306fdde0314610242578063095ea7b3146102cc5780630d032623146103025780630d65e3e71461032757806318160ddd1461034657806323b872dd14610359578063257ef52214610381578063313ce567146103a257806344f96b36146103cb57806348c54b9d146103de5780634a7e00de146103f1578063552a41a3146104105780635c975abb14610423578063639bd0bf146104365780636da246ac1461045857806370a08231146104775780638c0e299a146104965780639358928b146104b8578063950f9813146104cb57806395d89b41146104ea578063a47fcc7c146104fd578063a9059cbb1461051f578063b07ee0d214610541578063b642d58f14610566578063be0f27cf14610579578063be45fd6214610598578063c06fff76146105fd578063ce158ba214610615578063da26c24114610634578063dc5b87cf1461064c578063dd62ed3e14610662578063e78d630614610687578063e981c803146106f1575b600080fd5b34156101ac57600080fd5b6101b7600435610709565b604051858152600160a060020a038516602082015260408101849052606081018360028111156101e357fe5b60ff16815260200182600160a060020a0316600160a060020a031681526020019550505050505060405180910390f35b341561021e57600080fd5b610226610837565b604051600160a060020a03909116815260200160405180910390f35b341561024d57600080fd5b61025561084b565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610291578082015183820152602001610279565b50505050905090810190601f1680156102be5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757600080fd5b6102ee600160a060020a0360043516602435610882565b604051901515815260200160405180910390f35b341561030d57600080fd5b6103156108ee565b60405190815260200160405180910390f35b341561033257600080fd5b6102ee600160a060020a0360043516610957565b341561035157600080fd5b61031561096c565b341561036457600080fd5b6102ee600160a060020a036004358116906024351660443561097b565b341561038c57600080fd5b6103a0600160a060020a0360043516610b57565b005b34156103ad57600080fd5b6103b5610c0b565b60405160ff909116815260200160405180910390f35b34156103d657600080fd5b610315610c10565b34156103e957600080fd5b6103a0610c5a565b34156103fc57600080fd5b6103a0600160a060020a0360043516610d52565b341561041b57600080fd5b610315610de0565b341561042e57600080fd5b6102ee610e2a565b341561044157600080fd5b6103a0600160a060020a0360043516602435610e33565b341561046357600080fd5b6103a0600160a060020a0360043516610ed5565b341561048257600080fd5b610315600160a060020a0360043516610f54565b34156104a157600080fd5b6103a0600160a060020a0360043516602435610f66565b34156104c357600080fd5b610315610ffc565b34156104d657600080fd5b6103a0600160a060020a0360043516611002565b34156104f557600080fd5b610315611079565b341561050857600080fd5b6103a0600160a060020a036004351660243561109d565b341561052a57600080fd5b6102ee600160a060020a0360043516602435611133565b341561054c57600080fd5b6103a0600160a060020a036004358116906024351661115c565b341561057157600080fd5b61031561126a565b341561058457600080fd5b6103a0600160a060020a0360043516611270565b34156105a357600080fd5b6102ee60048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506112e795505050505050565b341561060857600080fd5b6103a06004351515611310565b341561062057600080fd5b6103a0600160a060020a0360043516611399565b341561063f57600080fd5b6103a06004351515611418565b341561065757600080fd5b6101b76004356114f2565b341561066d57600080fd5b610315600160a060020a03600435811690602435166115dc565b341561069257600080fd5b61069d600435611607565b604051848152600160a060020a0384166020820152604081018360028111156106c257fe5b60ff16815260200182600160a060020a0316600160a060020a0316815260200194505050505060405180910390f35b34156106fc57600080fd5b6103a06004351515611719565b600080600080600080600080600080600a60009054906101000a9004600160a060020a0316600160a060020a0316634f22bcf88c60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561077c57600080fd5b6102c65a03f1151561078d57600080fd5b5050506040518051600a54909650600160a060020a0316905063a4f82f278660006040516080015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401608060405180830381600087803b15156107f357600080fd5b6102c65a03f1151561080457600080fd5b5050506040518051906020018051906020018051906020018051939f929e50909c50919a50959850949650505050505050565b6008546101009004600160a060020a031681565b60408051908101604052600d81527f4578706572747920546f6b656e00000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600a54600090600160a060020a0316636db6626882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b6102c65a03f1151561094957600080fd5b505050604051805191505090565b60076020526000908152604090205460ff1681565b6a41ae9209d689ea12740c0081565b6000610985611dd8565b600160a060020a038416151561099a57600080fd5b600160a060020a0385166000908152600460205260409020548311156109bf57600080fd5b600160a060020a03808616600090815260056020908152604080832033909416835292905220548311156109f257600080fd5b600160a060020a038086166000908152600460208181526040808420805489900390556005825280842033861685528252808420805489900390559388168352522054610a45908463ffffffff61177816565b600160a060020a03851660009081526004602052604090819020919091558190518082805190602001908083835b60208310610a925780518252601f199092019160209182019101610a73565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902084600160a060020a031686600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18660405190815260200160405180910390a483600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405190815260200160405180910390a3506001949350505050565b600160a060020a03331660009081526007602052604081205460ff161515610b7e57600080fd5b600b54600160a060020a031663849a7337338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610bdf57600080fd5b6102c65a03f11515610bf057600080fd5b505050604051805190509050610c06828261178e565b505050565b601281565b600954600090600160a060020a0316636db6626882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b600a54610d4f903390600160a060020a031663df8de3e78260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb957600080fd5b6102c65a03f11515610cca57600080fd5b5050506040518051600954909150600160a060020a031663df8de3e73360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2e57600080fd5b6102c65a03f11515610d3f57600080fd5b505050604051805190500161178e565b50565b600160a060020a03331660009081526007602052604090205460ff161515610d7957600080fd5b600a54600160a060020a031663bd9521788260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b6102c65a03f11515610dda57600080fd5b50505050565b600b54600090600160a060020a03166378f8eea882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b60085460ff1681565b600160a060020a03331660009081526007602052604090205460ff161515610e5a57600080fd5b604036604414610e6657fe5b600b54600160a060020a031663639bd0bf848460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610ebc57600080fd5b6102c65a03f11515610ecd57600080fd5b505050505050565b600160a060020a03331660009081526007602052604090205460ff161515610efc57600080fd5b600954600160a060020a0316631a62c928338360405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401600060405180830381600087803b1515610dc957600080fd5b60046020526000908152604090205481565b600160a060020a03331660009081526007602052604090205460ff161515610f8d57600080fd5b604036604414610f9957fe5b600a54600160a060020a03166339b8e0ff33858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ebc57600080fd5b60065481565b600160a060020a03331660009081526007602052604090205460ff16151561102957600080fd5b600954600160a060020a031663bd9521788260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b7f455859000000000000000000000000000000000000000000000000000000000081565b600160a060020a03331660009081526007602052604090205460ff1615156110c457600080fd5b6040366044146110d057fe5b600954600160a060020a03166339b8e0ff33858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ebc57600080fd5b600854600090819060ff161561114857600080fd5b61115284846117e9565b91505b5092915050565b600160a060020a03331660009081526007602052604081205460ff16151561118357600080fd5b5081600160a060020a03811663a9059cbb83826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e357600080fd5b6102c65a03f115156111f457600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561124a57600080fd5b6102c65a03f1151561125b57600080fd5b50505060405180515050505050565b600c5481565b600160a060020a03331660009081526007602052604090205460ff16151561129757600080fd5b600b54600160a060020a031663be0f27cf8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b600854600090819060ff16156112fc57600080fd5b611307858585611a52565b95945050505050565b600160a060020a03331660009081526007602052604090205460ff16151561133757600080fd5b60085481159060ff161515811461134d57600080fd5b6008546101009004600160a060020a03161561136857600080fd5b50506008805474ffffffffffffffffffffffffffffffffffffffff00191661010033600160a060020a031602179055565b600160a060020a03331660009081526007602052604090205460ff1615156113c057600080fd5b600a54600160a060020a0316631a62c928338360405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401600060405180830381600087803b1515610dc957600080fd5b600160a060020a03331660009081526007602052604090205460ff16151561143f57600080fd5b60085481159060ff161515811461145557600080fd5b6008546101009004600160a060020a0316151561147157600080fd5b60085433600160a060020a0390811661010090920416141561149257600080fd5b6008805474ffffffffffffffffffffffffffffffffffffffffff191683151517908190557fdd7221e8fae38eadd917726db6aa1477e63320aea2609f225f90fe8bb2ff60109060ff16604051901515815260200160405180910390a15050565b600080600080600080600080600080600960009054906101000a9004600160a060020a0316600160a060020a0316634f22bcf88c60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561156557600080fd5b6102c65a03f1151561157657600080fd5b5050506040518051600954909650600160a060020a0316905063a4f82f278660006040516080015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401608060405180830381600087803b15156107f357600080fd5b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600b546000908190819081908190819081908190600160a060020a0316634f22bcf88a836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561166857600080fd5b6102c65a03f1151561167957600080fd5b5050506040518051600b54909550600160a060020a0316905063944129438560006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156116df57600080fd5b6102c65a03f115156116f057600080fd5b5050506040518051906020018051906020018051929c919b509199509497509395505050505050565b600160a060020a03331660009081526007602052604090205460ff16151561174057600080fd5b60085481159060ff161515811461175657600080fd5b50506008805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60008282018381101561178757fe5b9392505050565b600854600090819060ff16156117a357600080fd5b6006546a41ae9209d689ea12740c00906117c3908563ffffffff61177816565b11156117df576008805460ff1916600117905560009150611155565b6111528484611c6d565b6000806117f4611dd8565b600160a060020a0333166000908152600460205260408120548590101561181a57600080fd5b600160a060020a033381166000908152600460205260408082208054899003905591881681522054863b9350611856908663ffffffff61177816565b600160a060020a03871660009081526004602052604081209190915583111561195c575084600160a060020a03811663c0ee0b8a3387856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118fa5780820151838201526020016118e2565b50505050905090810190601f1680156119275780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b151561194757600080fd5b6102c65a03f1151561195857600080fd5b5050505b816040518082805190602001908083835b6020831061198c5780518252601f19909201916020918201910161196d565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902086600160a060020a031633600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18860405190815260200160405180910390a485600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405190815260200160405180910390a350600195945050505050565b600160a060020a0333166000908152600460205260408120548190819085901015611a7c57600080fd5b600160a060020a033381166000908152600460205260408082208054899003905591881681522054863b9250611ab8908663ffffffff61177816565b600160a060020a038716600090815260046020526040812091909155821115611bbe575084600160a060020a03811663c0ee0b8a3387876040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611b5c578082015183820152602001611b44565b50505050905090810190601f168015611b895780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515611ba957600080fd5b6102c65a03f11515611bba57600080fd5b5050505b836040518082805190602001908083835b60208310611bee5780518252601f199092019160209182019101611bcf565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902086600160a060020a031633600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18860405190815260200160405180910390a450600195945050505050565b6000806000611c7a611dd8565b6006805486019055600160a060020a0386166000908152600460205260408120805487019055863b9350831115611d8f5785915081600160a060020a031663c0ee0b8a3387846040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d2d578082015183820152602001611d15565b50505050905090810190601f168015611d5a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515611d7a57600080fd5b6102c65a03f11515611d8b57600080fd5b5050505b85600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858660405190815260200160405180910390a250600195945050505050565b602060405190810160405260008152905600a165627a7a72305820c6b5b93f81635d029ed4e4d7909447c00dc112261f92251ee46c94f78b20b9a800296060604052341561000f57600080fd5b60405160808061076e8339810160405280805191906020018051919060200180519190602001805160008054600160a060020a033316600160a060020a031990911617905585850260055560029490945550506003556004919091556006556106f18061007d6000396000f3006060604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166318160ddd81146100be5780631a62c928146100e35780631d81564d1461010a57806339b8e0ff1461011d5780634f22bcf8146101455780636db66268146101775780637358c57a1461018a5780638da5cb5b1461019d578063a4caeb42146101b0578063a4f82f27146101c3578063bd95217814610225578063df8de3e714610244575b600080fd5b34156100c957600080fd5b6100d1610263565b60405190815260200160405180910390f35b34156100ee57600080fd5b610108600160a060020a0360043581169060243516610269565b005b341561011557600080fd5b6100d161030d565b341561012857600080fd5b610108600160a060020a0360043581169060243516604435610313565b341561015057600080fd5b61015b6004356104e0565b604051600160a060020a03909116815260200160405180910390f35b341561018257600080fd5b6100d1610508565b341561019557600080fd5b6100d161050e565b34156101a857600080fd5b61015b610514565b34156101bb57600080fd5b6100d1610523565b34156101ce57600080fd5b6101e2600160a060020a0360043516610529565b604051848152600160a060020a0384166020820152604081018390526060810182600281111561020e57fe5b60ff16815260200194505050505060405180910390f35b341561023057600080fd5b610108600160a060020a036004351661055d565b341561024f57600080fd5b6100d1600160a060020a03600435166105e4565b60055481565b60005433600160a060020a0390811691161461028457600080fd5b600160a060020a03811660009081526007602052604081206003015460ff1660028111156102ae57fe5b146102b857600080fd5b600160a060020a03818116600090815260076020526040902060010154811690831614156102e557600080fd5b600160a060020a03166000908152600760205260409020600301805460ff1916600117905550565b60035481565b60005433600160a060020a0390811691161461032e57600080fd5b6000811161033b57600080fd5b60045481111561034a57600080fd5b600160a060020a0380831660009081526007602052604090206001015416158061039d57506002600160a060020a03831660009081526007602052604090206003015460ff16600281111561039b57fe5b145b15156103a857600080fd5b6002600160a060020a03831660009081526007602052604090206003015460ff1660028111156103d457fe5b1461041d57600180548082016103ea838261067b565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b60048054829003905560806040519081016040528082815260200184600160a060020a03168152602001600081526020016000600281111561045b57fe5b9052600160a060020a038316600090815260076020526040902081518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015160038201805460ff191660018360028111156104d457fe5b02179055505050505050565b60018054829081106104ee57fe5b600091825260209091200154600160a060020a0316905081565b60045481565b60065481565b600054600160a060020a031681565b60025481565b60076020526000908152604090208054600182015460028301546003909301549192600160a060020a039091169160ff1684565b6000805433600160a060020a0390811691161461057957600080fd5b50600160a060020a038116600090815260076020526040812090600382015460ff1660028111156105a657fe5b146105b057600080fd5b600160a060020a03919091166000908152600760205260409020600301805460ff1916600217905554600480549091019055565b600160a060020a038116600090815260076020526040812081806001600384015460ff16600281111561061357fe5b141561065457610639600354603c02600654420381151561063057fe5b04600254610661565b83546002850180549083905582030294509150839050610659565b600093505b505050919050565b600081831115610672575080610675565b50815b92915050565b81548183558181151161069f5760008381526020902061069f9181019083016106a4565b505050565b6106c291905b808211156106be57600081556001016106aa565b5090565b905600a165627a7a7230582098f4aa036a07afc49c1cdca7c1daeeba5b99596f6e2175d4df232036057b00fa00296060604052341561000f57600080fd5b6040516020806106528339810160405280805160008054600160a060020a033316600160a060020a031990911617905560015550506105ff806100536000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634f22bcf88114610087578063639bd0bf146100b957806378f8eea8146100dd578063849a7337146101025780638da5cb5b14610127578063944129431461013a578063be0f27cf14610194575b600080fd5b341561009257600080fd5b61009d6004356101b3565b604051600160a060020a03909116815260200160405180910390f35b34156100c457600080fd5b6100db600160a060020a03600435166024356101db565b005b34156100e857600080fd5b6100f06103b7565b60405190815260200160405180910390f35b341561010d57600080fd5b6100f0600160a060020a03600435811690602435166103bd565b341561013257600080fd5b61009d610487565b341561014557600080fd5b610159600160a060020a0360043516610496565b604051838152600160a060020a03831660208201526040810182600281111561017e57fe5b60ff168152602001935050505060405180910390f35b341561019f57600080fd5b6100db600160a060020a03600435166104c4565b60028054829081106101c157fe5b600091825260209091200154600160a060020a0316905081565b60005433600160a060020a039081169116146101f657600080fd5b6000811161020357600080fd5b60015481111561021257600080fd5b600160a060020a0380831660009081526003602052604090206001015416158061026c57506002600160a060020a03831660009081526003602052604090206001015460a060020a900460ff16600281111561026a57fe5b145b151561027757600080fd5b6002600160a060020a03831660009081526003602052604090206001015460a060020a900460ff1660028111156102aa57fe5b146102f45760028054600181016102c18382610589565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b61030060015482610577565b60015560606040519081016040908152828252600160a060020a0333166020830152810160009052600160a060020a038316600090815260036020526040902081518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055604082015160018201805474ff0000000000000000000000000000000000000000191660a060020a8360028111156103ac57fe5b021790555050505050565b60015481565b6000805433600160a060020a039081169116146103d957600080fd5b6000600160a060020a03831660009081526003602052604090206001015460a060020a900460ff16600281111561040c57fe5b1461041657600080fd5b600160a060020a038281166000908152600360205260409020600101548116908416141561044357600080fd5b50600160a060020a0316600090815260036020526040902060018101805474ff0000000000000000000000000000000000000000191660a060020a17905554919050565b600054600160a060020a031681565b60036020526000908152604090208054600190910154600160a060020a0381169060a060020a900460ff1683565b6000805433600160a060020a039081169116146104e057600080fd5b50600160a060020a038116600090815260036020526040812090600182015460a060020a900460ff16600281111561051457fe5b1461051e57600080fd5b50600160a060020a031660009081526003602052604090206001808201805474ff000000000000000000000000000000000000000019167402000000000000000000000000000000000000000017905590548154019055565b60008282111561058357fe5b50900390565b8154818355818115116105ad576000838152602090206105ad9181019083016105b2565b505050565b6105d091905b808211156105cc57600081556001016105b8565b5090565b905600a165627a7a723058209c53a624ae4e2d22f18dc10dbac24e88d2c34de152b4565caceb293417674b3900290000000000000000000000009cd60f46bbde61dc8ce5c19877359feb68b2b6f200000000000000000000000051d6598b8461adf43676f8b58e070532fabadc95000000000000000000000000fc93b345a3df3f622684dc84ad34d98300e2f2a6

Deployed Bytecode

0x60606040526004361061019c5763ffffffff60e060020a60003504166224eb4b81146101a157806305763ff71461021357806306fdde0314610242578063095ea7b3146102cc5780630d032623146103025780630d65e3e71461032757806318160ddd1461034657806323b872dd14610359578063257ef52214610381578063313ce567146103a257806344f96b36146103cb57806348c54b9d146103de5780634a7e00de146103f1578063552a41a3146104105780635c975abb14610423578063639bd0bf146104365780636da246ac1461045857806370a08231146104775780638c0e299a146104965780639358928b146104b8578063950f9813146104cb57806395d89b41146104ea578063a47fcc7c146104fd578063a9059cbb1461051f578063b07ee0d214610541578063b642d58f14610566578063be0f27cf14610579578063be45fd6214610598578063c06fff76146105fd578063ce158ba214610615578063da26c24114610634578063dc5b87cf1461064c578063dd62ed3e14610662578063e78d630614610687578063e981c803146106f1575b600080fd5b34156101ac57600080fd5b6101b7600435610709565b604051858152600160a060020a038516602082015260408101849052606081018360028111156101e357fe5b60ff16815260200182600160a060020a0316600160a060020a031681526020019550505050505060405180910390f35b341561021e57600080fd5b610226610837565b604051600160a060020a03909116815260200160405180910390f35b341561024d57600080fd5b61025561084b565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610291578082015183820152602001610279565b50505050905090810190601f1680156102be5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757600080fd5b6102ee600160a060020a0360043516602435610882565b604051901515815260200160405180910390f35b341561030d57600080fd5b6103156108ee565b60405190815260200160405180910390f35b341561033257600080fd5b6102ee600160a060020a0360043516610957565b341561035157600080fd5b61031561096c565b341561036457600080fd5b6102ee600160a060020a036004358116906024351660443561097b565b341561038c57600080fd5b6103a0600160a060020a0360043516610b57565b005b34156103ad57600080fd5b6103b5610c0b565b60405160ff909116815260200160405180910390f35b34156103d657600080fd5b610315610c10565b34156103e957600080fd5b6103a0610c5a565b34156103fc57600080fd5b6103a0600160a060020a0360043516610d52565b341561041b57600080fd5b610315610de0565b341561042e57600080fd5b6102ee610e2a565b341561044157600080fd5b6103a0600160a060020a0360043516602435610e33565b341561046357600080fd5b6103a0600160a060020a0360043516610ed5565b341561048257600080fd5b610315600160a060020a0360043516610f54565b34156104a157600080fd5b6103a0600160a060020a0360043516602435610f66565b34156104c357600080fd5b610315610ffc565b34156104d657600080fd5b6103a0600160a060020a0360043516611002565b34156104f557600080fd5b610315611079565b341561050857600080fd5b6103a0600160a060020a036004351660243561109d565b341561052a57600080fd5b6102ee600160a060020a0360043516602435611133565b341561054c57600080fd5b6103a0600160a060020a036004358116906024351661115c565b341561057157600080fd5b61031561126a565b341561058457600080fd5b6103a0600160a060020a0360043516611270565b34156105a357600080fd5b6102ee60048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506112e795505050505050565b341561060857600080fd5b6103a06004351515611310565b341561062057600080fd5b6103a0600160a060020a0360043516611399565b341561063f57600080fd5b6103a06004351515611418565b341561065757600080fd5b6101b76004356114f2565b341561066d57600080fd5b610315600160a060020a03600435811690602435166115dc565b341561069257600080fd5b61069d600435611607565b604051848152600160a060020a0384166020820152604081018360028111156106c257fe5b60ff16815260200182600160a060020a0316600160a060020a0316815260200194505050505060405180910390f35b34156106fc57600080fd5b6103a06004351515611719565b600080600080600080600080600080600a60009054906101000a9004600160a060020a0316600160a060020a0316634f22bcf88c60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561077c57600080fd5b6102c65a03f1151561078d57600080fd5b5050506040518051600a54909650600160a060020a0316905063a4f82f278660006040516080015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401608060405180830381600087803b15156107f357600080fd5b6102c65a03f1151561080457600080fd5b5050506040518051906020018051906020018051906020018051939f929e50909c50919a50959850949650505050505050565b6008546101009004600160a060020a031681565b60408051908101604052600d81527f4578706572747920546f6b656e00000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600a54600090600160a060020a0316636db6626882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b6102c65a03f1151561094957600080fd5b505050604051805191505090565b60076020526000908152604090205460ff1681565b6a41ae9209d689ea12740c0081565b6000610985611dd8565b600160a060020a038416151561099a57600080fd5b600160a060020a0385166000908152600460205260409020548311156109bf57600080fd5b600160a060020a03808616600090815260056020908152604080832033909416835292905220548311156109f257600080fd5b600160a060020a038086166000908152600460208181526040808420805489900390556005825280842033861685528252808420805489900390559388168352522054610a45908463ffffffff61177816565b600160a060020a03851660009081526004602052604090819020919091558190518082805190602001908083835b60208310610a925780518252601f199092019160209182019101610a73565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902084600160a060020a031686600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18660405190815260200160405180910390a483600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405190815260200160405180910390a3506001949350505050565b600160a060020a03331660009081526007602052604081205460ff161515610b7e57600080fd5b600b54600160a060020a031663849a7337338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610bdf57600080fd5b6102c65a03f11515610bf057600080fd5b505050604051805190509050610c06828261178e565b505050565b601281565b600954600090600160a060020a0316636db6626882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b600a54610d4f903390600160a060020a031663df8de3e78260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cb957600080fd5b6102c65a03f11515610cca57600080fd5b5050506040518051600954909150600160a060020a031663df8de3e73360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2e57600080fd5b6102c65a03f11515610d3f57600080fd5b505050604051805190500161178e565b50565b600160a060020a03331660009081526007602052604090205460ff161515610d7957600080fd5b600a54600160a060020a031663bd9521788260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b6102c65a03f11515610dda57600080fd5b50505050565b600b54600090600160a060020a03166378f8eea882604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561093857600080fd5b60085460ff1681565b600160a060020a03331660009081526007602052604090205460ff161515610e5a57600080fd5b604036604414610e6657fe5b600b54600160a060020a031663639bd0bf848460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610ebc57600080fd5b6102c65a03f11515610ecd57600080fd5b505050505050565b600160a060020a03331660009081526007602052604090205460ff161515610efc57600080fd5b600954600160a060020a0316631a62c928338360405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401600060405180830381600087803b1515610dc957600080fd5b60046020526000908152604090205481565b600160a060020a03331660009081526007602052604090205460ff161515610f8d57600080fd5b604036604414610f9957fe5b600a54600160a060020a03166339b8e0ff33858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ebc57600080fd5b60065481565b600160a060020a03331660009081526007602052604090205460ff16151561102957600080fd5b600954600160a060020a031663bd9521788260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b7f455859000000000000000000000000000000000000000000000000000000000081565b600160a060020a03331660009081526007602052604090205460ff1615156110c457600080fd5b6040366044146110d057fe5b600954600160a060020a03166339b8e0ff33858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ebc57600080fd5b600854600090819060ff161561114857600080fd5b61115284846117e9565b91505b5092915050565b600160a060020a03331660009081526007602052604081205460ff16151561118357600080fd5b5081600160a060020a03811663a9059cbb83826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e357600080fd5b6102c65a03f115156111f457600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561124a57600080fd5b6102c65a03f1151561125b57600080fd5b50505060405180515050505050565b600c5481565b600160a060020a03331660009081526007602052604090205460ff16151561129757600080fd5b600b54600160a060020a031663be0f27cf8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610dc957600080fd5b600854600090819060ff16156112fc57600080fd5b611307858585611a52565b95945050505050565b600160a060020a03331660009081526007602052604090205460ff16151561133757600080fd5b60085481159060ff161515811461134d57600080fd5b6008546101009004600160a060020a03161561136857600080fd5b50506008805474ffffffffffffffffffffffffffffffffffffffff00191661010033600160a060020a031602179055565b600160a060020a03331660009081526007602052604090205460ff1615156113c057600080fd5b600a54600160a060020a0316631a62c928338360405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401600060405180830381600087803b1515610dc957600080fd5b600160a060020a03331660009081526007602052604090205460ff16151561143f57600080fd5b60085481159060ff161515811461145557600080fd5b6008546101009004600160a060020a0316151561147157600080fd5b60085433600160a060020a0390811661010090920416141561149257600080fd5b6008805474ffffffffffffffffffffffffffffffffffffffffff191683151517908190557fdd7221e8fae38eadd917726db6aa1477e63320aea2609f225f90fe8bb2ff60109060ff16604051901515815260200160405180910390a15050565b600080600080600080600080600080600960009054906101000a9004600160a060020a0316600160a060020a0316634f22bcf88c60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561156557600080fd5b6102c65a03f1151561157657600080fd5b5050506040518051600954909650600160a060020a0316905063a4f82f278660006040516080015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401608060405180830381600087803b15156107f357600080fd5b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600b546000908190819081908190819081908190600160a060020a0316634f22bcf88a836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561166857600080fd5b6102c65a03f1151561167957600080fd5b5050506040518051600b54909550600160a060020a0316905063944129438560006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156116df57600080fd5b6102c65a03f115156116f057600080fd5b5050506040518051906020018051906020018051929c919b509199509497509395505050505050565b600160a060020a03331660009081526007602052604090205460ff16151561174057600080fd5b60085481159060ff161515811461175657600080fd5b50506008805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60008282018381101561178757fe5b9392505050565b600854600090819060ff16156117a357600080fd5b6006546a41ae9209d689ea12740c00906117c3908563ffffffff61177816565b11156117df576008805460ff1916600117905560009150611155565b6111528484611c6d565b6000806117f4611dd8565b600160a060020a0333166000908152600460205260408120548590101561181a57600080fd5b600160a060020a033381166000908152600460205260408082208054899003905591881681522054863b9350611856908663ffffffff61177816565b600160a060020a03871660009081526004602052604081209190915583111561195c575084600160a060020a03811663c0ee0b8a3387856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118fa5780820151838201526020016118e2565b50505050905090810190601f1680156119275780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b151561194757600080fd5b6102c65a03f1151561195857600080fd5b5050505b816040518082805190602001908083835b6020831061198c5780518252601f19909201916020918201910161196d565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902086600160a060020a031633600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18860405190815260200160405180910390a485600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405190815260200160405180910390a350600195945050505050565b600160a060020a0333166000908152600460205260408120548190819085901015611a7c57600080fd5b600160a060020a033381166000908152600460205260408082208054899003905591881681522054863b9250611ab8908663ffffffff61177816565b600160a060020a038716600090815260046020526040812091909155821115611bbe575084600160a060020a03811663c0ee0b8a3387876040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611b5c578082015183820152602001611b44565b50505050905090810190601f168015611b895780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515611ba957600080fd5b6102c65a03f11515611bba57600080fd5b5050505b836040518082805190602001908083835b60208310611bee5780518252601f199092019160209182019101611bcf565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051809103902086600160a060020a031633600160a060020a03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd18860405190815260200160405180910390a450600195945050505050565b6000806000611c7a611dd8565b6006805486019055600160a060020a0386166000908152600460205260408120805487019055863b9350831115611d8f5785915081600160a060020a031663c0ee0b8a3387846040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d2d578082015183820152602001611d15565b50505050905090810190601f168015611d5a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515611d7a57600080fd5b6102c65a03f11515611d8b57600080fd5b5050505b85600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858660405190815260200160405180910390a250600195945050505050565b602060405190810160405260008152905600a165627a7a72305820c6b5b93f81635d029ed4e4d7909447c00dc112261f92251ee46c94f78b20b9a80029

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

0000000000000000000000009cd60f46bbde61dc8ce5c19877359feb68b2b6f200000000000000000000000051d6598b8461adf43676f8b58e070532fabadc95000000000000000000000000fc93b345a3df3f622684dc84ad34d98300e2f2a6

-----Decoded View---------------
Arg [0] : signatory0 (address): 0x9CD60F46bBde61Dc8cE5c19877359FEb68b2b6f2
Arg [1] : signatory1 (address): 0x51D6598b8461ADF43676f8b58e070532faBAdc95
Arg [2] : signatory2 (address): 0xfc93b345a3df3f622684Dc84ad34d98300e2f2a6

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009cd60f46bbde61dc8ce5c19877359feb68b2b6f2
Arg [1] : 00000000000000000000000051d6598b8461adf43676f8b58e070532fabadc95
Arg [2] : 000000000000000000000000fc93b345a3df3f622684dc84ad34d98300e2f2a6


Swarm Source

bzzr://9c53a624ae4e2d22f18dc10dbac24e88d2c34de152b4565caceb293417674b39
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.