ETH Price: $3,911.47 (+0.15%)

Contract

0xfb725BaB323927cFB20FB82BA9A1975F7D24705b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer109762212020-10-02 10:57:381536 days ago1601636258IN
0xfb725BaB...F7D24705b
0 ETH0.004038999
Transfer83102592019-08-08 13:36:191957 days ago1565271379IN
0xfb725BaB...F7D24705b
0 ETH0.000310888
Transfer77980612019-05-20 17:02:332036 days ago1558371753IN
0xfb725BaB...F7D24705b
0 ETH0.0007286418.75
Transfer75016632019-04-04 12:22:002083 days ago1554380520IN
0xfb725BaB...F7D24705b
0 ETH0.0003898910
Transfer74461752019-03-26 19:54:342091 days ago1553630074IN
0xfb725BaB...F7D24705b
0 ETH0.000186534.8
Approve72892022019-03-02 8:44:592116 days ago1551516299IN
0xfb725BaB...F7D24705b
0 ETH0.000182744
Transfer69856332018-12-31 11:54:542177 days ago1546257294IN
0xfb725BaB...F7D24705b
0 ETH0.0002392510
Transfer69689952018-12-28 16:34:142179 days ago1546014854IN
0xfb725BaB...F7D24705b
0 ETH0.000161393
Transfer69685642018-12-28 14:54:052179 days ago1546008845IN
0xfb725BaB...F7D24705b
0 ETH0.000116393
Transfer69048952018-12-17 19:29:222190 days ago1545074962IN
0xfb725BaB...F7D24705b
0 ETH0.000154276.46542883
Approve68793782018-12-13 13:59:572195 days ago1544709597IN
0xfb725BaB...F7D24705b
0 ETH0.000096072.1
Approve65507212018-10-20 14:20:262249 days ago1540045226IN
0xfb725BaB...F7D24705b
0 ETH0.0001834
Transfer65172862018-10-15 3:07:242254 days ago1539572844IN
0xfb725BaB...F7D24705b
0 ETH0.000155184
Transfer64099312018-09-27 16:02:532271 days ago1538064173IN
0xfb725BaB...F7D24705b
0 ETH0.0004274711
Transfer63262912018-09-13 21:18:262285 days ago1536873506IN
0xfb725BaB...F7D24705b
0 ETH0.0011677530
Transfer63188722018-09-12 15:38:252286 days ago1536766705IN
0xfb725BaB...F7D24705b
0 ETH0.0004294918
Transfer63188092018-09-12 15:20:562286 days ago1536765656IN
0xfb725BaB...F7D24705b
0 ETH0.0006606317
Approve63018202018-09-09 19:46:112289 days ago1536522371IN
0xfb725BaB...F7D24705b
0 ETH0.000364978
Approve63011972018-09-09 17:20:092289 days ago1536513609IN
0xfb725BaB...F7D24705b
0 ETH0.000366518
Transfer63002452018-09-09 13:18:492290 days ago1536499129IN
0xfb725BaB...F7D24705b
0 ETH0.0003046312.73312253
Approve62993412018-09-09 9:35:502290 days ago1536485750IN
0xfb725BaB...F7D24705b
0 ETH0.0003668
Transfer62993192018-09-09 9:30:312290 days ago1536485431IN
0xfb725BaB...F7D24705b
0 ETH0.0011697130.1
Transfer62992862018-09-09 9:22:082290 days ago1536484928IN
0xfb725BaB...F7D24705b
0 ETH0.0023968144.5
Transfer62881902018-09-07 12:16:492292 days ago1536322609IN
0xfb725BaB...F7D24705b
0 ETH0.00015574
Approve62876782018-09-07 10:05:532292 days ago1536314753IN
0xfb725BaB...F7D24705b
0 ETH0.000320257
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
55782982018-05-08 14:22:342414 days ago1525789354
0xfb725BaB...F7D24705b
4.713 ETH
55312092018-04-30 8:40:442422 days ago1525077644
0xfb725BaB...F7D24705b
2.84090909 ETH
55149202018-04-27 13:00:462425 days ago1524834046
0xfb725BaB...F7D24705b
0.001 ETH
55149152018-04-27 12:59:282425 days ago1524833968
0xfb725BaB...F7D24705b
0.1879919 ETH
55149102018-04-27 12:57:512425 days ago1524833871
0xfb725BaB...F7D24705b
0.18939393 ETH
55148552018-04-27 12:41:502425 days ago1524832910
0xfb725BaB...F7D24705b
0.26 ETH
55148532018-04-27 12:40:572425 days ago1524832857
0xfb725BaB...F7D24705b
0.23674242 ETH
55148462018-04-27 12:38:492425 days ago1524832729
0xfb725BaB...F7D24705b
1 ETH
55148382018-04-27 12:36:442425 days ago1524832604
0xfb725BaB...F7D24705b
0.05 ETH
55148362018-04-27 12:36:232425 days ago1524832583
0xfb725BaB...F7D24705b
2.0956 ETH
55148322018-04-27 12:35:122425 days ago1524832512
0xfb725BaB...F7D24705b
0.052 ETH
55148302018-04-27 12:34:592425 days ago1524832499
0xfb725BaB...F7D24705b
0.18939393 ETH
55148262018-04-27 12:34:382425 days ago1524832478
0xfb725BaB...F7D24705b
0.18939393 ETH
55148232018-04-27 12:33:472425 days ago1524832427
0xfb725BaB...F7D24705b
1.89393939 ETH
55148202018-04-27 12:33:092425 days ago1524832389
0xfb725BaB...F7D24705b
0.18939393 ETH
55148162018-04-27 12:32:262425 days ago1524832346
0xfb725BaB...F7D24705b
0.3 ETH
55148092018-04-27 12:30:092425 days ago1524832209
0xfb725BaB...F7D24705b
0.34090909 ETH
55148072018-04-27 12:29:442425 days ago1524832184
0xfb725BaB...F7D24705b
0.53030303 ETH
55148052018-04-27 12:29:202425 days ago1524832160
0xfb725BaB...F7D24705b
0.5 ETH
55148022018-04-27 12:28:462425 days ago1524832126
0xfb725BaB...F7D24705b
1.20616502 ETH
55148002018-04-27 12:28:042425 days ago1524832084
0xfb725BaB...F7D24705b
0.86174242 ETH
55147982018-04-27 12:27:392425 days ago1524832059
0xfb725BaB...F7D24705b
0.20833333 ETH
55147852018-04-27 12:24:452425 days ago1524831885
0xfb725BaB...F7D24705b
0.193796 ETH
55147822018-04-27 12:24:132425 days ago1524831853
0xfb725BaB...F7D24705b
0.3406 ETH
55147792018-04-27 12:23:512425 days ago1524831831
0xfb725BaB...F7D24705b
0.18939393 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoyToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.8;


/**
 * Math operations with safety checks
 * By OpenZeppelin: https://github.com/OpenZeppelin/zeppelin-solidity/contracts/SafeMath.sol
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

contract ContractReceiver {
    function tokenFallback(address _from, uint256 _value, bytes  _data) external;
}

contract Ownable {
    address public owner;
    address public ownerCandidate;
    event OwnerTransfer(address originalOwner, address currentOwner);

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

    function proposeNewOwner(address newOwner) public onlyOwner {
        require(newOwner != address(0) && newOwner != owner);
        ownerCandidate = newOwner;
    }

    function acceptOwnerTransfer() public {
        require(msg.sender == ownerCandidate);
        OwnerTransfer(owner, ownerCandidate);
        owner = ownerCandidate;
    }
}

contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

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

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

}

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 constant returns (uint256 remaining) {
    return allowed[_owner][_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
   */
  function increaseApproval (address _spender, uint _addedValue) public returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) {
    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;
  }

}


// Based in part on code by Open-Zeppelin: https://github.com/OpenZeppelin/zeppelin-solidity.git
// Based in part on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
// Smart contract for the JoyToken token & the first crowdsale
contract JoyToken is StandardToken, Ownable {
    string public constant name = "JoyToken";
    string public constant symbol = "JOY";
    uint8 public constant decimals = 18;
    address public multisig; //multisig wallet, to which all contributions will be sent

    uint256 public phase1StartBlock; //Crowdsale start block
    uint256 public phase1EndBlock; // Day 7 (estimate)
    uint256 public phase2EndBlock; // Day 13 (estimate)
    uint256 public phase3EndBlock; // Day 19 (estimate)
    uint256 public phase4EndBlock; // Day 25 (estimate)
    uint256 public phase5EndBlock; // Day 31 (estimate)
    uint256 public endBlock; //whole crowdsale end block

    uint256 public basePrice = 1818 * (10**11); // ICO token base price: ~$0.20 (estimate assuming $1100 per Eth)

    uint256 public totalSupply = 700000000 * (10**uint256(decimals)); //Token total supply: 500000000 RPX
    uint256 public presaleTokenSupply = totalSupply.mul(20).div(100); //Amount of tokens available during presale (10%)
    uint256 public crowdsaleTokenSupply = totalSupply.mul(30).div(100); //Amount of tokens available during crowdsale (50%)
    uint256 public rewardsTokenSupply = totalSupply.mul(15).div(100); //Rewards pool (VIP etc, 10%), ambassador share(3%) & ICO bounties(2%)
    uint256 public teamTokenSupply = totalSupply.mul(12).div(100); //Tokens distributed to team (12% in total, 4% vested for 12, 24 & 36 months)
    uint256 public platformTokenSupply = totalSupply.mul(23).div(100); //Token reserve for sale on platform
    uint256 public presaleTokenSold = 0; //Records the amount of tokens sold during presale
    uint256 public crowdsaleTokenSold = 0; //Records the amount of tokens sold during the crowdsale

    uint256 public phase1Cap = crowdsaleTokenSupply.mul(50).div(100);
    uint256 public phase2Cap = crowdsaleTokenSupply.mul(60).div(100);
    uint256 public phase3Cap = crowdsaleTokenSupply.mul(70).div(100);
    uint256 public phase4Cap = crowdsaleTokenSupply.mul(80).div(100);

    uint256 public transferLockup = 5760; //Lock up token transfer until ~2 days after crowdsale concludes
    uint256 public teamLockUp; 
    uint256 private teamWithdrawalCount = 0;
    uint256 public averageBlockTime = 18; //Average block time in seconds

    bool public presaleStarted = false;
    bool public presaleConcluded = false;
    bool public crowdsaleStarted = false;
    bool public crowdsaleConcluded = false;
    bool public halted = false; //Halt crowdsale in emergency

    uint256 contributionCount = 0;
    bytes32[] public contributionHashes;
    mapping (bytes32 => Contribution) private contributions;

    address public platformWithdrawalRecipient = address(0);
    bool public platformWithdrawalProposed = false;
    bool platformWithdrawn = false;
    
    address public rewardsWithdrawalRecipient = address(0);
    bool public rewardsWithdrawalProposed = false;
    bool rewardsWithdrawn = false;

    event Halt(); //Halt event
    event Unhalt(); //Unhalt event
    event Burn(address burner, uint256 amount);
    event StartPresale();
    event ConcludePresale();
    event StartCrowdsale();
    event ConcludeCrowdsale();
    event SetMultisig(address newMultisig);

    struct Contribution {
        address contributor;
        address recipient;
        uint256 ethWei;
        uint256 tokens;
        bool resolved;
        bool success;
        uint8 stage;
    }

    event ContributionReceived(bytes32 contributionHash, address contributor, address recipient,
        uint256 ethWei, uint256 pendingTokens);

    event ContributionResolved(bytes32 contributionHash, bool pass, address contributor, 
        address recipient, uint256 ethWei, uint256 tokens);


    // lockup during and after 48h of end of crowdsale
    modifier crowdsaleTransferLock() {
        require(crowdsaleStarted && block.number >= endBlock.add(transferLockup));
        _;
    }

    modifier whenNotHalted() {
        require(!halted);
        _;
    }

    //Constructor: set owner (team) address & crowdsale recipient multisig wallet address
    //Allocate reward tokens to the team wallet
  	function JoyToken(address _multisig) public {
        owner = msg.sender;
        multisig = _multisig;
        teamLockUp = dayToBlockNumber(31); // 31 days between withdrawing 1/36 of team tokens - vesting period in total is 3 years
  	}

    //Fallback function when receiving Ether. Contributors can directly send Ether to the token address during crowdsale.
    function() public payable {
        buy();
    }


    //Halt ICO in case of emergency.
    function halt() public onlyOwner {
        halted = true;
        Halt();
    }

    function unhalt() public onlyOwner {
        halted = false;
        Unhalt();
    }

    function startPresale() public onlyOwner {
        require(!presaleStarted);
        presaleStarted = true;
        StartPresale();
    }

    function concludePresale() public onlyOwner {
        require(presaleStarted && !presaleConcluded);
        presaleConcluded = true;
        //Unsold tokens in the presale are made available in the crowdsale.
        crowdsaleTokenSupply = crowdsaleTokenSupply.add(presaleTokenSupply.sub(presaleTokenSold)); 
        ConcludePresale();
    }

    // Can only be called after presale is concluded.
    function startCrowdsale() public onlyOwner {
        require(presaleConcluded && !crowdsaleStarted);
        crowdsaleStarted = true;
        phase1StartBlock = block.number;
        phase1EndBlock = phase1StartBlock.add(dayToBlockNumber(7));
        phase2EndBlock = phase1EndBlock.add(dayToBlockNumber(6));
        phase3EndBlock = phase2EndBlock.add(dayToBlockNumber(6));
        phase4EndBlock = phase3EndBlock.add(dayToBlockNumber(6));
        phase5EndBlock = phase4EndBlock.add(dayToBlockNumber(6));
        endBlock = phase5EndBlock;
        StartCrowdsale();
    }

    // Can only be called either after crowdsale time period ends, or after tokens have sold out
    function concludeCrowdsale() public onlyOwner {
        require(crowdsaleStarted && !crowdsaleOn() && !crowdsaleConcluded);
        
        crowdsaleConcluded = true;
        endBlock = block.number;
        uint256 unsold = crowdsaleTokenSupply.sub(crowdsaleTokenSold);
        
        if (unsold > 0) {
            //Burn unsold tokens
            totalSupply = totalSupply.sub(unsold);
            Burn(this, unsold);
            Transfer(this, address(0), unsold);
        }
        
        ConcludeCrowdsale();
    }

    // Make it possible for team to withdraw team tokens over 3 years
    function withdrawTeamToken(address recipient) public onlyOwner {
        require(crowdsaleStarted);
        require(teamWithdrawalCount < 36);
        require(block.number >= endBlock.add(teamLockUp.mul(teamWithdrawalCount.add(1)))); // 36-month lock-up in total, team can withdraw 1/36 of tokens each month
        
        teamWithdrawalCount++;
        uint256 tokens = teamTokenSupply.div(36); // distribute 1/36 of team tokens each month
        balances[recipient] = balances[recipient].add(tokens);
        Transfer(this, recipient, tokens);
    }
    
    // Withdrawing Platform Tokens supply
    function proposePlatformWithdrawal(address recipient) public onlyOwner {
        require(!platformWithdrawn);

        platformWithdrawalRecipient = recipient;
        platformWithdrawalProposed = true;
    }

    function cancelPlatformWithdrawal() public onlyOwner {
        require(!platformWithdrawn);
        require(platformWithdrawalProposed);

        platformWithdrawalProposed = false;
        platformWithdrawalRecipient = address(0); 
    }

    function confirmPlatformWithdrawal() public {
        require(!platformWithdrawn);
        require(platformWithdrawalProposed);
        require(msg.sender == platformWithdrawalRecipient);

        platformWithdrawn = true;
        balances[msg.sender] = balances[msg.sender].add(platformTokenSupply);

        Transfer(this, msg.sender, platformTokenSupply);
    }
    
    // Withdrawing Rewards Pool Tokens
    function proposeRewardsWithdrawal(address recipient) public onlyOwner {
        require(!rewardsWithdrawn);

        rewardsWithdrawalRecipient = recipient;
        rewardsWithdrawalProposed = true;
    }

    function cancelRewardsWithdrawal() public onlyOwner {
        require(!rewardsWithdrawn);
        require(rewardsWithdrawalProposed);

        rewardsWithdrawalProposed = false;
        rewardsWithdrawalRecipient = address(0); 
    }

    function confirmRewardsWithdrawal() public {
        require(!rewardsWithdrawn);
        require(rewardsWithdrawalProposed);
        require(msg.sender == rewardsWithdrawalRecipient);

        rewardsWithdrawn = true;
        balances[msg.sender] = balances[msg.sender].add(rewardsTokenSupply);

        Transfer(this, msg.sender, rewardsTokenSupply);
    }

    function buy() public payable {
        buyRecipient(msg.sender);
    }

    // Allow addresses to buy token for another account
    function buyRecipient(address recipient) public payable whenNotHalted {
        require(msg.value > 0);
        require(presaleOn()||crowdsaleOn()); //Contribution only allowed during presale/crowdsale
        uint256 tokens = msg.value.mul(10**uint256(decimals)).div(tokenPrice()); 
        uint8 stage = 0;

        if(presaleOn()) {
            require(presaleTokenSold.add(tokens) <= presaleTokenSupply);
            presaleTokenSold = presaleTokenSold.add(tokens);
        } else {
            require(crowdsaleTokenSold.add(tokens) <= crowdsaleTokenSupply);
            crowdsaleTokenSold = crowdsaleTokenSold.add(tokens);
            stage = 1;
        }
        contributionCount = contributionCount.add(1);
        bytes32 transactionHash = keccak256(contributionCount, msg.sender, msg.value, msg.data,
            msg.gas, block.number, tx.gasprice);
        contributions[transactionHash] = Contribution(msg.sender, recipient, msg.value, 
            tokens, false, false, stage);
        contributionHashes.push(transactionHash);
        ContributionReceived(transactionHash, msg.sender, recipient, msg.value, tokens);
    }

    //Accept a contribution if KYC passed.
    function acceptContribution(bytes32 transactionHash) public onlyOwner {
        Contribution storage c = contributions[transactionHash];
        require(!c.resolved);
        c.resolved = true;
        c.success = true;
        balances[c.recipient] = balances[c.recipient].add(c.tokens);
        assert(multisig.send(c.ethWei));
        Transfer(this, c.recipient, c.tokens);
        ContributionResolved(transactionHash, true, c.contributor, c.recipient, c.ethWei, 
            c.tokens);
    }

    //Reject a contribution if KYC failed.
    function rejectContribution(bytes32 transactionHash) public onlyOwner {
        Contribution storage c = contributions[transactionHash];
        require(!c.resolved);
        c.resolved = true;
        c.success = false;
        if (c.stage == 0) {
            presaleTokenSold = presaleTokenSold.sub(c.tokens);
        } else {
            crowdsaleTokenSold = crowdsaleTokenSold.sub(c.tokens);
        }
        assert(c.contributor.send(c.ethWei));
        ContributionResolved(transactionHash, false, c.contributor, c.recipient, c.ethWei, 
            c.tokens);
    }

    // Team manually mints tokens in case of BTC/wire-transfer contributions
    function mint(address recipient, uint256 value) public onlyOwner {
    	require(value > 0);
    	require(presaleStarted && !crowdsaleConcluded); // Minting allowed after presale started, up to crowdsale concluded (time for team to distribute tokens)

    	if (presaleOn()) {
            require(presaleTokenSold.add(value) <= presaleTokenSupply);
            presaleTokenSold = presaleTokenSold.add(value);
        } else {
            require(crowdsaleTokenSold.add(value) <= crowdsaleTokenSupply);
            crowdsaleTokenSold = crowdsaleTokenSold.add(value);
        }

        balances[recipient] = balances[recipient].add(value);
        Transfer(this, recipient, value);
    }

    //Burns the specified amount of tokens from the team wallet address
    function burn(uint256 _value) public onlyOwner returns (bool) {
        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Transfer(msg.sender, address(0), _value);
        Burn(msg.sender, _value);
        return true;
    }

    //Allow team to change the recipient multisig address
    function setMultisig(address addr) public onlyOwner {
      	require(addr != address(0));
      	multisig = addr;
        SetMultisig(addr);
    }

    //Allows Team to adjust average blocktime according to network status, 
    //in order to provide more precise timing for ICO phases & lock-up periods
    function setAverageBlockTime(uint256 newBlockTime) public onlyOwner {
        require(newBlockTime > 0);
        averageBlockTime = newBlockTime;
    }

    //Allows Team to adjust basePrice so price of the token has correct correlation to dollar
    function setBasePrice(uint256 newBasePrice) public onlyOwner {
        require(!crowdsaleStarted);
        require(newBasePrice > 0);
        basePrice = newBasePrice;
    }

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

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

    //Price of token in terms of ether.
    function tokenPrice() public constant returns(uint256) {
        uint8 p = phase();
        if (p == 0) return basePrice.mul(50).div(100); //Presale: 50% discount
        if (p == 1) return basePrice.mul(70).div(100); //ICO phase 1: 30% discount
        if (p == 2) return basePrice.mul(75).div(100); //Phase 2 :25% discount
        if (p == 3) return basePrice.mul(80).div(100); //Phase 3: 20% discount
        if (p == 4) return basePrice.mul(85).div(100); //Phase 4: 15% discount
        if (p == 5) return basePrice.mul(90).div(100); //Phase 5: 10% discount
        return basePrice;
    }

    function phase() public constant returns (uint8) {
        if (presaleOn()) return 0;
        if (crowdsaleTokenSold <= phase1Cap && block.number <= phase1EndBlock) return 1;
        if (crowdsaleTokenSold <= phase2Cap && block.number <= phase2EndBlock) return 2;
        if (crowdsaleTokenSold <= phase3Cap && block.number <= phase3EndBlock) return 3;
        if (crowdsaleTokenSold <= phase4Cap && block.number <= phase4EndBlock) return 4;
        if (crowdsaleTokenSold <= crowdsaleTokenSupply && block.number <= phase5EndBlock) return 5;
        return 6;
    }

    function presaleOn() public constant returns (bool) {
        return (presaleStarted && !presaleConcluded && presaleTokenSold < presaleTokenSupply);
    }

    function crowdsaleOn() public constant returns (bool) {
        return (crowdsaleStarted && block.number <= endBlock && crowdsaleTokenSold < crowdsaleTokenSupply);
    }

    function dayToBlockNumber(uint256 dayNum) public constant returns(uint256) {
        return dayNum.mul(86400).div(averageBlockTime); //86400 = 24*60*60 = number of seconds in a day
    }

    function getContributionFromHash(bytes32 contributionHash) public constant returns (
            address contributor,
            address recipient,
            uint256 ethWei,
            uint256 tokens,
            bool resolved,
            bool success
        ) {
        Contribution c = contributions[contributionHash];
        contributor = c.contributor;
        recipient = c.recipient;
        ethWei = c.ethWei;
        tokens = c.tokens;
        resolved = c.resolved;
        success = c.success;
    }

    function getContributionHashes() public constant returns (bytes32[]) {
        return contributionHashes;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"crowdsaleConcluded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleOn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startPresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"proposePlatformWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"buyRecipient","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"phase1StartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsWithdrawalRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleOn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmPlatformWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardsWithdrawalProposed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"averageBlockTime","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":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"withdrawTeamToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase5EndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newBlockTime","type":"uint256"}],"name":"setAverageBlockTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"platformTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getContributionHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multisig","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contributionHashes","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"phase1EndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"transactionHash","type":"bytes32"}],"name":"acceptContribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"transactionHash","type":"bytes32"}],"name":"rejectContribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase4Cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"phase2EndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnerTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"concludePresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancelRewardsWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"concludeCrowdsale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase3EndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"dayNum","type":"uint256"}],"name":"dayToBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmRewardsWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cancelPlatformWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startCrowdsale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"platformWithdrawalRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":true,"inputs":[],"name":"phase","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"proposeNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferLockup","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"phase4EndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamLockUp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platformWithdrawalProposed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase2Cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"phase3Cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardsTokenSupply","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[{"name":"newBasePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase1Cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleConcluded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"contributionHash","type":"bytes32"}],"name":"getContributionFromHash","outputs":[{"name":"contributor","type":"address"},{"name":"recipient","type":"address"},{"name":"ethWei","type":"uint256"},{"name":"tokens","type":"uint256"},{"name":"resolved","type":"bool"},{"name":"success","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setMultisig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"proposeRewardsWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_multisig","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Halt","type":"event"},{"anonymous":false,"inputs":[],"name":"Unhalt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"burner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[],"name":"StartPresale","type":"event"},{"anonymous":false,"inputs":[],"name":"ConcludePresale","type":"event"},{"anonymous":false,"inputs":[],"name":"StartCrowdsale","type":"event"},{"anonymous":false,"inputs":[],"name":"ConcludeCrowdsale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newMultisig","type":"address"}],"name":"SetMultisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributionHash","type":"bytes32"},{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"ethWei","type":"uint256"},{"indexed":false,"name":"pendingTokens","type":"uint256"}],"name":"ContributionReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributionHash","type":"bytes32"},{"indexed":false,"name":"pass","type":"bool"},{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"ethWei","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"ContributionResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"originalOwner","type":"address"},{"indexed":false,"name":"currentOwner","type":"address"}],"name":"OwnerTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","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"}]

606060405265a5589c6b9000600d55601260ff16600a0a6329b9270002600e556200006860646200004b6014600e54620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b600f55620000b4606462000097601e600e54620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b601055620001006064620000e3600f600e54620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b6011556200014c60646200012f600c600e54620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b6012556200019860646200017b6017600e54620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b60135560006014556000601555620001ee6064620001d16032601054620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b6016556200023a60646200021d603c601054620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b601755620002866064620002696046601054620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b601855620002d26064620002b56050601054620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b601955611680601a556000601c556012601d556000601e60006101000a81548160ff0219169083151502179055506000601e60016101000a81548160ff0219169083151502179055506000601e60026101000a81548160ff0219169083151502179055506000601e60036101000a81548160ff0219169083151502179055506000601e60046101000a81548160ff0219169083151502179055506000601f556000602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602260146101000a81548160ff0219169083151502179055506000602260156101000a81548160ff0219169083151502179055506000602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602360146101000a81548160ff0219169083151502179055506000602360156101000a81548160ff02191690831515021790555034156200046d57600080fd5b6040516020806200517f8339810160405280805190602001909190505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200052c601f6200058b640100000000026200366e176401000000009004565b601b8190555050620005de565b600080828402905060008414806200055c57508284828115156200055957fe5b04145b15156200056557fe5b8091505092915050565b60008082848115156200057e57fe5b0490508091505092915050565b6000620005d7601d54620005ba6201518085620005396401000000000262004498179091906401000000009004565b6200056f64010000000002620044cb179091906401000000009004565b9050919050565b614b9180620005ee6000396000f300606060405260043610610384576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062c988e81461038e57806302dd92c4146103bb57806304549d6f146103e857806304c98b2b1461041557806306fdde031461042a578063083c6323146104b8578063095ea7b3146104e15780630b3af9011461053b57806311a4c71014610574578063145538ea146105a2578063165c86df146105cb57806318160ddd1461062057806319af6f48146106495780631ad874b414610672578063207019671461069f57806321338d1b146106b4578063233dedf1146106e157806323b872dd1461070a578063313ce56714610783578063315a6d65146107b2578063335b7c13146107eb5780633736d853146108145780633fdb705b1461083757806340c10f191461086057806342966c68146108a257806344acb8da146108dd57806345a7b991146109065780634783c35b146109705780634c7b8fba146109c5578063575d462a14610a045780635ed7ca5b14610a2d5780635f504a8214610a425780636380877314610a975780636618846314610abe5780636828d54914610b18578063690c5de814610b3f5780636aa68a1514610b68578063707a7ab314610b9157806370a0823114610ba65780637ff9b59614610bf3578063809ef92f14610c1c57806386517df414610c495780638751775b14610c5e5780638863c8d514610c73578063899ecf2b14610c885780638da5cb5b14610cb15780638f2ec01214610d06578063935814a614610d3d57806395d89b4114610d5257806397ff6d1014610de0578063a39953b214610df5578063a6f2ae3a14610e0a578063a70616de14610e14578063a9059cbb14610e69578063b1c9fe6e14610ec3578063b1f8100d14610ef2578063b9b8af0b14610f2b578063c24fe21b14610f58578063c4fc3a3b14610f81578063c588415e14610faa578063c7876ea414610fd3578063c7c80f0214610ffc578063c974631b14611025578063cb3e64fd14611052578063d73dd62314611067578063d7638b73146110c1578063d8cba7a2146110ea578063da62a24614611113578063dd62ed3e1461113c578063de4b3262146111a8578063e9629d7f146111cb578063e9deb98c146111f4578063eee457f714611221578063f3283fba146112df578063f994789a14611318578063fd17f28914611351578063ff197bc31461137a575b61038c6113a3565b005b341561039957600080fd5b6103a16113ae565b604051808215151515815260200191505060405180910390f35b34156103c657600080fd5b6103ce6113c1565b604051808215151515815260200191505060405180910390f35b34156103f357600080fd5b6103fb6113f5565b604051808215151515815260200191505060405180910390f35b341561042057600080fd5b610428611408565b005b341561043557600080fd5b61043d6114c9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047d578082015181840152602081019050610462565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b6104cb611502565b6040518082815260200191505060405180910390f35b34156104ec57600080fd5b610521600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611508565b604051808215151515815260200191505060405180910390f35b341561054657600080fd5b610572600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115fa565b005b6105a0600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116d1565b005b34156105ad57600080fd5b6105b5611b12565b6040518082815260200191505060405180910390f35b34156105d657600080fd5b6105de611b18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062b57600080fd5b610633611b3e565b6040518082815260200191505060405180910390f35b341561065457600080fd5b61065c611b44565b6040518082815260200191505060405180910390f35b341561067d57600080fd5b610685611b4a565b604051808215151515815260200191505060405180910390f35b34156106aa57600080fd5b6106b2611b89565b005b34156106bf57600080fd5b6106c7611d37565b604051808215151515815260200191505060405180910390f35b34156106ec57600080fd5b6106f4611d4a565b6040518082815260200191505060405180910390f35b341561071557600080fd5b610769600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611d50565b604051808215151515815260200191505060405180910390f35b341561078e57600080fd5b610796611da3565b604051808260ff1660ff16815260200191505060405180910390f35b34156107bd57600080fd5b6107e9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611da8565b005b34156107f657600080fd5b6107fe611fa6565b6040518082815260200191505060405180910390f35b341561081f57600080fd5b6108356004808035906020019091905050611fac565b005b341561084257600080fd5b61084a612021565b6040518082815260200191505060405180910390f35b341561086b57600080fd5b6108a0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612027565b005b34156108ad57600080fd5b6108c36004808035906020019091905050612257565b604051808215151515815260200191505060405180910390f35b34156108e857600080fd5b6108f061243f565b6040518082815260200191505060405180910390f35b341561091157600080fd5b610919612445565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561095c578082015181840152602081019050610941565b505050509050019250505060405180910390f35b341561097b57600080fd5b6109836124a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109d057600080fd5b6109e660048080359060200190919050506124cd565b60405180826000191660001916815260200191505060405180910390f35b3415610a0f57600080fd5b610a176124f1565b6040518082815260200191505060405180910390f35b3415610a3857600080fd5b610a406124f7565b005b3415610a4d57600080fd5b610a5561259c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610aa257600080fd5b610abc6004808035600019169060200190919050506125c2565b005b3415610ac957600080fd5b610afe600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061297e565b604051808215151515815260200191505060405180910390f35b3415610b2357600080fd5b610b3d600480803560001916906020019091905050612c0f565b005b3415610b4a57600080fd5b610b52612ec0565b6040518082815260200191505060405180910390f35b3415610b7357600080fd5b610b7b612ec6565b6040518082815260200191505060405180910390f35b3415610b9c57600080fd5b610ba4612ecc565b005b3415610bb157600080fd5b610bdd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613068565b6040518082815260200191505060405180910390f35b3415610bfe57600080fd5b610c066130b1565b6040518082815260200191505060405180910390f35b3415610c2757600080fd5b610c2f613230565b604051808215151515815260200191505060405180910390f35b3415610c5457600080fd5b610c5c613243565b005b3415610c6957600080fd5b610c7161334d565b005b3415610c7e57600080fd5b610c8661343f565b005b3415610c9357600080fd5b610c9b613642565b6040518082815260200191505060405180910390f35b3415610cbc57600080fd5b610cc4613648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d1157600080fd5b610d27600480803590602001909190505061366e565b6040518082815260200191505060405180910390f35b3415610d4857600080fd5b610d506136a1565b005b3415610d5d57600080fd5b610d6561384f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610da5578082015181840152602081019050610d8a565b50505050905090810190601f168015610dd25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610deb57600080fd5b610df3613888565b005b3415610e0057600080fd5b610e0861397a565b005b610e126113a3565b005b3415610e1f57600080fd5b610e27613b17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e7457600080fd5b610ea9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613b3d565b604051808215151515815260200191505060405180910390f35b3415610ece57600080fd5b610ed6613b8e565b604051808260ff1660ff16815260200191505060405180910390f35b3415610efd57600080fd5b610f29600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613c62565b005b3415610f3657600080fd5b610f3e613d98565b604051808215151515815260200191505060405180910390f35b3415610f6357600080fd5b610f6b613dab565b6040518082815260200191505060405180910390f35b3415610f8c57600080fd5b610f94613db1565b6040518082815260200191505060405180910390f35b3415610fb557600080fd5b610fbd613db7565b6040518082815260200191505060405180910390f35b3415610fde57600080fd5b610fe6613dbd565b6040518082815260200191505060405180910390f35b341561100757600080fd5b61100f613dc3565b6040518082815260200191505060405180910390f35b341561103057600080fd5b611038613dc9565b604051808215151515815260200191505060405180910390f35b341561105d57600080fd5b611065613ddc565b005b341561107257600080fd5b6110a7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613e81565b604051808215151515815260200191505060405180910390f35b34156110cc57600080fd5b6110d461407d565b6040518082815260200191505060405180910390f35b34156110f557600080fd5b6110fd614083565b6040518082815260200191505060405180910390f35b341561111e57600080fd5b611126614089565b6040518082815260200191505060405180910390f35b341561114757600080fd5b611192600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061408f565b6040518082815260200191505060405180910390f35b34156111b357600080fd5b6111c96004808035906020019091905050614116565b005b34156111d657600080fd5b6111de6141a7565b6040518082815260200191505060405180910390f35b34156111ff57600080fd5b6112076141ad565b604051808215151515815260200191505060405180910390f35b341561122c57600080fd5b6112466004808035600019169060200190919050506141c0565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b34156112ea57600080fd5b611316600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050614276565b005b341561132357600080fd5b61134f600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506143b5565b005b341561135c57600080fd5b61136461448c565b6040518082815260200191505060405180910390f35b341561138557600080fd5b61138d614492565b6040518082815260200191505060405180910390f35b6113ac336116d1565b565b601e60039054906101000a900460ff1681565b6000601e60029054906101000a900460ff1680156113e15750600c544311155b80156113f05750601054601554105b905090565b601e60009054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146457600080fd5b601e60009054906101000a900460ff1615151561148057600080fd5b6001601e60006101000a81548160ff0219169083151502179055507fd1cca6fe4d5aee03a8d044728a03c4ddae5db4b5b972a6485d78a168fd6e852460405160405180910390a1565b6040805190810160405280600881526020017f4a6f79546f6b656e00000000000000000000000000000000000000000000000081525081565b600c5481565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561165657600080fd5b602260159054906101000a900460ff1615151561167257600080fd5b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602260146101000a81548160ff02191690831515021790555050565b6000806000601e60049054906101000a900460ff161515156116f257600080fd5b60003411151561170157600080fd5b611709611b4a565b8061171857506117176113c1565b5b151561172357600080fd5b61175661172e6130b1565b611748601260ff16600a0a3461449890919063ffffffff16565b6144cb90919063ffffffff16565b925060009150611764611b4a565b156117ae57600f54611781846014546144e690919063ffffffff16565b1115151561178e57600080fd5b6117a3836014546144e690919063ffffffff16565b6014819055506117f3565b6010546117c6846015546144e690919063ffffffff16565b111515156117d357600080fd5b6117e8836015546144e690919063ffffffff16565b601581905550600191505b6118096001601f546144e690919063ffffffff16565b601f81905550601f5433346000365a433a604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018686808284378201915050848152602001838152602001828152602001985050505050505050506040518091039020905060e0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020013481526020018481526020016000151581526020016000151581526020018360ff1681525060216000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff021916908360ff16021790555090505060208054806001018281611a3a9190614b00565b9160005260206000209001600083909190915090600019169055507fff0c5a4b2effdcf75368a7b8cb608675e273cbd755505bf9e1a837e9701bd89e81338634876040518086600019166000191681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150505050565b60065481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60155481565b6000601e60009054906101000a900460ff168015611b755750601e60019054906101000a900460ff16155b8015611b845750600f54601454105b905090565b602260159054906101000a900460ff16151515611ba557600080fd5b602260149054906101000a900460ff161515611bc057600080fd5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1c57600080fd5b6001602260156101000a81548160ff021916908315150217905550611c8b601354600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040518082815260200191505060405180910390a3565b602360149054906101000a900460ff1681565b601d5481565b6000601e60029054906101000a900460ff168015611d845750611d80601a54600c546144e690919063ffffffff16565b4310155b1515611d8f57600080fd5b611d9a848484614504565b90509392505050565b601281565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e0657600080fd5b601e60029054906101000a900460ff161515611e2157600080fd5b6024601c54101515611e3257600080fd5b611e70611e5f611e4e6001601c546144e690919063ffffffff16565b601b5461449890919063ffffffff16565b600c546144e690919063ffffffff16565b4310151515611e7e57600080fd5b601c60008154809291906001019190505550611ea660246012546144cb90919063ffffffff16565b9050611efa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600b5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561200857600080fd5b60008111151561201757600080fd5b80601d8190555050565b60135481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561208357600080fd5b60008111151561209257600080fd5b601e60009054906101000a900460ff1680156120bb5750601e60039054906101000a900460ff16155b15156120c657600080fd5b6120ce611b4a565b1561211857600f546120eb826014546144e690919063ffffffff16565b111515156120f857600080fd5b61210d816014546144e690919063ffffffff16565b601481905550612159565b601054612130826015546144e690919063ffffffff16565b1115151561213d57600080fd5b612152816015546144e690919063ffffffff16565b6015819055505b6121ab81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122b557600080fd5b61230782600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061235f82600e546148c390919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a37fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca53383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019050919050565b60105481565b61244d614b2c565b602080548060200260200160405190810160405280929190818152602001828054801561249d57602002820191906000526020600020905b81546000191681526020019060010190808311612485575b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6020818154811015156124dc57fe5b90600052602060002090016000915090505481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255357600080fd5b6001601e60046101000a81548160ff0219169083151502179055507fa8d1ea886eaf8bd3d113c770bf7af546123c70e235b0d036ff752d5e920a7b5660405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561262057600080fd5b60216000836000191660001916815260200190815260200160002090508060040160009054906101000a900460ff1615151561265b57600080fd5b60018160040160006101000a81548160ff02191690831515021790555060018160040160016101000a81548160ff02191690831515021790555061270f8160030154600160008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201549081150290604051600060405180830381858888f1935050505015156127d957fe5b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600301546040518082815260200191505060405180910390a37f83711c709923be4ac11f3793650dc879f27f832eb4831a15f7c7eaefecdca2608260018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600201548660030154604051808760001916600019168152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001965050505050505060405180910390a15050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115612a8f576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b23565b612aa283826148c390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c6d57600080fd5b60216000836000191660001916815260200190815260200160002090508060040160009054906101000a900460ff16151515612ca857600080fd5b60018160040160006101000a81548160ff02191690831515021790555060008160040160016101000a81548160ff02191690831515021790555060008160040160029054906101000a900460ff1660ff161415612d2357612d1881600301546014546148c390919063ffffffff16565b601481905550612d43565b612d3c81600301546015546148c390919063ffffffff16565b6015819055505b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201549081150290604051600060405180830381858888f193505050501515612da857fe5b7f83711c709923be4ac11f3793650dc879f27f832eb4831a15f7c7eaefecdca2608260008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600201548660030154604051808760001916600019168152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001965050505050505060405180910390a15050565b60195481565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f2857600080fd5b7f5327f96e1b66776c2f90adb141c8f65efa8dd259adb405009213276527cbf69a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806130bc613b8e565b905060008160ff1614156130fa576130f360646130e56032600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60018160ff1614156131365761312f60646131216046600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60028160ff1614156131725761316b606461315d604b600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60038160ff1614156131ae576131a760646131996050600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60048160ff1614156131ea576131e360646131d56055600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60058160ff1614156132265761321f6064613211605a600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b600d5491505b5090565b601e60029054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561329f57600080fd5b601e60009054906101000a900460ff1680156132c85750601e60019054906101000a900460ff16155b15156132d357600080fd5b6001601e60016101000a81548160ff021916908315150217905550613319613308601454600f546148c390919063ffffffff16565b6010546144e690919063ffffffff16565b6010819055507fb528945f9f8d6e631c43589e01dda0ae94be16ce2ed59fe5d804143fc67d6eb560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156133a957600080fd5b602360159054906101000a900460ff161515156133c557600080fd5b602360149054906101000a900460ff1615156133e057600080fd5b6000602360146101000a81548160ff0219169083151502179055506000602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561349d57600080fd5b601e60029054906101000a900460ff1680156134be57506134bc6113c1565b155b80156134d75750601e60039054906101000a900460ff16155b15156134e257600080fd5b6001601e60036101000a81548160ff02191690831515021790555043600c8190555061351b6015546010546148c390919063ffffffff16565b905060008111156136135761353b81600e546148c390919063ffffffff16565b600e819055507fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca53082604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b7f0ca69ffaa24f7585a46a230e239f637d8aab90db504f53ac8e60515d75ee065e60405160405180910390a150565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061369a601d5461368c620151808561449890919063ffffffff16565b6144cb90919063ffffffff16565b9050919050565b602360159054906101000a900460ff161515156136bd57600080fd5b602360149054906101000a900460ff1615156136d857600080fd5b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561373457600080fd5b6001602360156101000a81548160ff0219169083151502179055506137a3601154600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6011546040518082815260200191505060405180910390a3565b6040805190810160405280600381526020017f4a4f59000000000000000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156138e457600080fd5b602260159054906101000a900460ff1615151561390057600080fd5b602260149054906101000a900460ff16151561391b57600080fd5b6000602260146101000a81548160ff0219169083151502179055506000602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139d657600080fd5b601e60019054906101000a900460ff1680156139ff5750601e60029054906101000a900460ff16155b1515613a0a57600080fd5b6001601e60026101000a81548160ff02191690831515021790555043600681905550613a4a613a39600761366e565b6006546144e690919063ffffffff16565b600781905550613a6e613a5d600661366e565b6007546144e690919063ffffffff16565b600881905550613a92613a81600661366e565b6008546144e690919063ffffffff16565b600981905550613ab6613aa5600661366e565b6009546144e690919063ffffffff16565b600a81905550613ada613ac9600661366e565b600a546144e690919063ffffffff16565b600b81905550600b54600c819055507fc7a327262dbe9cd2bf3282d035e03d69a2b73561e7dcc74caa29f84ee3b9ab6d60405160405180910390a1565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60029054906101000a900460ff168015613b715750613b6d601a54600c546144e690919063ffffffff16565b4310155b1515613b7c57600080fd5b613b8683836148dc565b905092915050565b6000613b98611b4a565b15613ba65760009050613c5f565b60165460155411158015613bbc57506007544311155b15613bca5760019050613c5f565b60175460155411158015613be057506008544311155b15613bee5760029050613c5f565b60185460155411158015613c0457506009544311155b15613c125760039050613c5f565b60195460155411158015613c285750600a544311155b15613c365760049050613c5f565b60105460155411158015613c4c5750600b544311155b15613c5a5760059050613c5f565b600690505b90565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613cbe57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613d495750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515613d5457600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60049054906101000a900460ff1681565b601a5481565b600f5481565b600a5481565b600d5481565b601b5481565b602260149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3857600080fd5b6000601e60046101000a81548160ff0219169083151502179055507f6426a220e8910820230d4f2e29cc2bee7c13058ff2524cbcc4d823ba49aa2f6660405160405180910390a1565b6000613f1282600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60175481565b60185481565b60115481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561417257600080fd5b601e60029054906101000a900460ff1615151561418e57600080fd5b60008111151561419d57600080fd5b80600d8190555050565b60165481565b601e60019054906101000a900460ff1681565b600080600080600080600060216000896000191660001916815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1696508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16955080600201549450806003015493508060040160009054906101000a900460ff1692508060040160019054906101000a900460ff1691505091939550919395565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156142d257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561430e57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8921d9ed49fbcd5da840617d62bf35c34f4871caaf7bbfef6da589dd8c2c1f3881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561441157600080fd5b602360159054906101000a900460ff1615151561442d57600080fd5b80602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360146101000a81548160ff02191690831515021790555050565b60125481565b60145481565b600080828402905060008414806144b957508284828115156144b657fe5b04145b15156144c157fe5b8091505092915050565b60008082848115156144d957fe5b0490508091505092915050565b60008082840190508381101515156144fa57fe5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561454157600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561458f57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561461a57600080fd5b61466c82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061470182600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147d382600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60008282111515156148d157fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561491957600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561496757600080fd5b6149b982600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4e82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b815481835581811511614b2757818360005260206000209182019101614b269190614b40565b5b505050565b602060405190810160405280600081525090565b614b6291905b80821115614b5e576000816000905550600101614b46565b5090565b905600a165627a7a72305820b231e4c4161541ff50f2b860627aa9580972ec42043d16348d4c06c75ae55d0b00290000000000000000000000007c90992fbe7084b6531f086349187ebacec898a5

Deployed Bytecode

0x606060405260043610610384576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062c988e81461038e57806302dd92c4146103bb57806304549d6f146103e857806304c98b2b1461041557806306fdde031461042a578063083c6323146104b8578063095ea7b3146104e15780630b3af9011461053b57806311a4c71014610574578063145538ea146105a2578063165c86df146105cb57806318160ddd1461062057806319af6f48146106495780631ad874b414610672578063207019671461069f57806321338d1b146106b4578063233dedf1146106e157806323b872dd1461070a578063313ce56714610783578063315a6d65146107b2578063335b7c13146107eb5780633736d853146108145780633fdb705b1461083757806340c10f191461086057806342966c68146108a257806344acb8da146108dd57806345a7b991146109065780634783c35b146109705780634c7b8fba146109c5578063575d462a14610a045780635ed7ca5b14610a2d5780635f504a8214610a425780636380877314610a975780636618846314610abe5780636828d54914610b18578063690c5de814610b3f5780636aa68a1514610b68578063707a7ab314610b9157806370a0823114610ba65780637ff9b59614610bf3578063809ef92f14610c1c57806386517df414610c495780638751775b14610c5e5780638863c8d514610c73578063899ecf2b14610c885780638da5cb5b14610cb15780638f2ec01214610d06578063935814a614610d3d57806395d89b4114610d5257806397ff6d1014610de0578063a39953b214610df5578063a6f2ae3a14610e0a578063a70616de14610e14578063a9059cbb14610e69578063b1c9fe6e14610ec3578063b1f8100d14610ef2578063b9b8af0b14610f2b578063c24fe21b14610f58578063c4fc3a3b14610f81578063c588415e14610faa578063c7876ea414610fd3578063c7c80f0214610ffc578063c974631b14611025578063cb3e64fd14611052578063d73dd62314611067578063d7638b73146110c1578063d8cba7a2146110ea578063da62a24614611113578063dd62ed3e1461113c578063de4b3262146111a8578063e9629d7f146111cb578063e9deb98c146111f4578063eee457f714611221578063f3283fba146112df578063f994789a14611318578063fd17f28914611351578063ff197bc31461137a575b61038c6113a3565b005b341561039957600080fd5b6103a16113ae565b604051808215151515815260200191505060405180910390f35b34156103c657600080fd5b6103ce6113c1565b604051808215151515815260200191505060405180910390f35b34156103f357600080fd5b6103fb6113f5565b604051808215151515815260200191505060405180910390f35b341561042057600080fd5b610428611408565b005b341561043557600080fd5b61043d6114c9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047d578082015181840152602081019050610462565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b6104cb611502565b6040518082815260200191505060405180910390f35b34156104ec57600080fd5b610521600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611508565b604051808215151515815260200191505060405180910390f35b341561054657600080fd5b610572600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115fa565b005b6105a0600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116d1565b005b34156105ad57600080fd5b6105b5611b12565b6040518082815260200191505060405180910390f35b34156105d657600080fd5b6105de611b18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062b57600080fd5b610633611b3e565b6040518082815260200191505060405180910390f35b341561065457600080fd5b61065c611b44565b6040518082815260200191505060405180910390f35b341561067d57600080fd5b610685611b4a565b604051808215151515815260200191505060405180910390f35b34156106aa57600080fd5b6106b2611b89565b005b34156106bf57600080fd5b6106c7611d37565b604051808215151515815260200191505060405180910390f35b34156106ec57600080fd5b6106f4611d4a565b6040518082815260200191505060405180910390f35b341561071557600080fd5b610769600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611d50565b604051808215151515815260200191505060405180910390f35b341561078e57600080fd5b610796611da3565b604051808260ff1660ff16815260200191505060405180910390f35b34156107bd57600080fd5b6107e9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611da8565b005b34156107f657600080fd5b6107fe611fa6565b6040518082815260200191505060405180910390f35b341561081f57600080fd5b6108356004808035906020019091905050611fac565b005b341561084257600080fd5b61084a612021565b6040518082815260200191505060405180910390f35b341561086b57600080fd5b6108a0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612027565b005b34156108ad57600080fd5b6108c36004808035906020019091905050612257565b604051808215151515815260200191505060405180910390f35b34156108e857600080fd5b6108f061243f565b6040518082815260200191505060405180910390f35b341561091157600080fd5b610919612445565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561095c578082015181840152602081019050610941565b505050509050019250505060405180910390f35b341561097b57600080fd5b6109836124a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109d057600080fd5b6109e660048080359060200190919050506124cd565b60405180826000191660001916815260200191505060405180910390f35b3415610a0f57600080fd5b610a176124f1565b6040518082815260200191505060405180910390f35b3415610a3857600080fd5b610a406124f7565b005b3415610a4d57600080fd5b610a5561259c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610aa257600080fd5b610abc6004808035600019169060200190919050506125c2565b005b3415610ac957600080fd5b610afe600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061297e565b604051808215151515815260200191505060405180910390f35b3415610b2357600080fd5b610b3d600480803560001916906020019091905050612c0f565b005b3415610b4a57600080fd5b610b52612ec0565b6040518082815260200191505060405180910390f35b3415610b7357600080fd5b610b7b612ec6565b6040518082815260200191505060405180910390f35b3415610b9c57600080fd5b610ba4612ecc565b005b3415610bb157600080fd5b610bdd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613068565b6040518082815260200191505060405180910390f35b3415610bfe57600080fd5b610c066130b1565b6040518082815260200191505060405180910390f35b3415610c2757600080fd5b610c2f613230565b604051808215151515815260200191505060405180910390f35b3415610c5457600080fd5b610c5c613243565b005b3415610c6957600080fd5b610c7161334d565b005b3415610c7e57600080fd5b610c8661343f565b005b3415610c9357600080fd5b610c9b613642565b6040518082815260200191505060405180910390f35b3415610cbc57600080fd5b610cc4613648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d1157600080fd5b610d27600480803590602001909190505061366e565b6040518082815260200191505060405180910390f35b3415610d4857600080fd5b610d506136a1565b005b3415610d5d57600080fd5b610d6561384f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610da5578082015181840152602081019050610d8a565b50505050905090810190601f168015610dd25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610deb57600080fd5b610df3613888565b005b3415610e0057600080fd5b610e0861397a565b005b610e126113a3565b005b3415610e1f57600080fd5b610e27613b17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e7457600080fd5b610ea9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613b3d565b604051808215151515815260200191505060405180910390f35b3415610ece57600080fd5b610ed6613b8e565b604051808260ff1660ff16815260200191505060405180910390f35b3415610efd57600080fd5b610f29600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613c62565b005b3415610f3657600080fd5b610f3e613d98565b604051808215151515815260200191505060405180910390f35b3415610f6357600080fd5b610f6b613dab565b6040518082815260200191505060405180910390f35b3415610f8c57600080fd5b610f94613db1565b6040518082815260200191505060405180910390f35b3415610fb557600080fd5b610fbd613db7565b6040518082815260200191505060405180910390f35b3415610fde57600080fd5b610fe6613dbd565b6040518082815260200191505060405180910390f35b341561100757600080fd5b61100f613dc3565b6040518082815260200191505060405180910390f35b341561103057600080fd5b611038613dc9565b604051808215151515815260200191505060405180910390f35b341561105d57600080fd5b611065613ddc565b005b341561107257600080fd5b6110a7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613e81565b604051808215151515815260200191505060405180910390f35b34156110cc57600080fd5b6110d461407d565b6040518082815260200191505060405180910390f35b34156110f557600080fd5b6110fd614083565b6040518082815260200191505060405180910390f35b341561111e57600080fd5b611126614089565b6040518082815260200191505060405180910390f35b341561114757600080fd5b611192600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061408f565b6040518082815260200191505060405180910390f35b34156111b357600080fd5b6111c96004808035906020019091905050614116565b005b34156111d657600080fd5b6111de6141a7565b6040518082815260200191505060405180910390f35b34156111ff57600080fd5b6112076141ad565b604051808215151515815260200191505060405180910390f35b341561122c57600080fd5b6112466004808035600019169060200190919050506141c0565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018315151515815260200182151515158152602001965050505050505060405180910390f35b34156112ea57600080fd5b611316600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050614276565b005b341561132357600080fd5b61134f600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506143b5565b005b341561135c57600080fd5b61136461448c565b6040518082815260200191505060405180910390f35b341561138557600080fd5b61138d614492565b6040518082815260200191505060405180910390f35b6113ac336116d1565b565b601e60039054906101000a900460ff1681565b6000601e60029054906101000a900460ff1680156113e15750600c544311155b80156113f05750601054601554105b905090565b601e60009054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146457600080fd5b601e60009054906101000a900460ff1615151561148057600080fd5b6001601e60006101000a81548160ff0219169083151502179055507fd1cca6fe4d5aee03a8d044728a03c4ddae5db4b5b972a6485d78a168fd6e852460405160405180910390a1565b6040805190810160405280600881526020017f4a6f79546f6b656e00000000000000000000000000000000000000000000000081525081565b600c5481565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561165657600080fd5b602260159054906101000a900460ff1615151561167257600080fd5b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602260146101000a81548160ff02191690831515021790555050565b6000806000601e60049054906101000a900460ff161515156116f257600080fd5b60003411151561170157600080fd5b611709611b4a565b8061171857506117176113c1565b5b151561172357600080fd5b61175661172e6130b1565b611748601260ff16600a0a3461449890919063ffffffff16565b6144cb90919063ffffffff16565b925060009150611764611b4a565b156117ae57600f54611781846014546144e690919063ffffffff16565b1115151561178e57600080fd5b6117a3836014546144e690919063ffffffff16565b6014819055506117f3565b6010546117c6846015546144e690919063ffffffff16565b111515156117d357600080fd5b6117e8836015546144e690919063ffffffff16565b601581905550600191505b6118096001601f546144e690919063ffffffff16565b601f81905550601f5433346000365a433a604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018686808284378201915050848152602001838152602001828152602001985050505050505050506040518091039020905060e0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020013481526020018481526020016000151581526020016000151581526020018360ff1681525060216000836000191660001916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555060c08201518160040160026101000a81548160ff021916908360ff16021790555090505060208054806001018281611a3a9190614b00565b9160005260206000209001600083909190915090600019169055507fff0c5a4b2effdcf75368a7b8cb608675e273cbd755505bf9e1a837e9701bd89e81338634876040518086600019166000191681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150505050565b60065481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60155481565b6000601e60009054906101000a900460ff168015611b755750601e60019054906101000a900460ff16155b8015611b845750600f54601454105b905090565b602260159054906101000a900460ff16151515611ba557600080fd5b602260149054906101000a900460ff161515611bc057600080fd5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1c57600080fd5b6001602260156101000a81548160ff021916908315150217905550611c8b601354600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040518082815260200191505060405180910390a3565b602360149054906101000a900460ff1681565b601d5481565b6000601e60029054906101000a900460ff168015611d845750611d80601a54600c546144e690919063ffffffff16565b4310155b1515611d8f57600080fd5b611d9a848484614504565b90509392505050565b601281565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e0657600080fd5b601e60029054906101000a900460ff161515611e2157600080fd5b6024601c54101515611e3257600080fd5b611e70611e5f611e4e6001601c546144e690919063ffffffff16565b601b5461449890919063ffffffff16565b600c546144e690919063ffffffff16565b4310151515611e7e57600080fd5b601c60008154809291906001019190505550611ea660246012546144cb90919063ffffffff16565b9050611efa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600b5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561200857600080fd5b60008111151561201757600080fd5b80601d8190555050565b60135481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561208357600080fd5b60008111151561209257600080fd5b601e60009054906101000a900460ff1680156120bb5750601e60039054906101000a900460ff16155b15156120c657600080fd5b6120ce611b4a565b1561211857600f546120eb826014546144e690919063ffffffff16565b111515156120f857600080fd5b61210d816014546144e690919063ffffffff16565b601481905550612159565b601054612130826015546144e690919063ffffffff16565b1115151561213d57600080fd5b612152816015546144e690919063ffffffff16565b6015819055505b6121ab81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122b557600080fd5b61230782600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061235f82600e546148c390919063ffffffff16565b600e81905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a37fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca53383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019050919050565b60105481565b61244d614b2c565b602080548060200260200160405190810160405280929190818152602001828054801561249d57602002820191906000526020600020905b81546000191681526020019060010190808311612485575b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6020818154811015156124dc57fe5b90600052602060002090016000915090505481565b60075481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255357600080fd5b6001601e60046101000a81548160ff0219169083151502179055507fa8d1ea886eaf8bd3d113c770bf7af546123c70e235b0d036ff752d5e920a7b5660405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561262057600080fd5b60216000836000191660001916815260200190815260200160002090508060040160009054906101000a900460ff1615151561265b57600080fd5b60018160040160006101000a81548160ff02191690831515021790555060018160040160016101000a81548160ff02191690831515021790555061270f8160030154600160008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201549081150290604051600060405180830381858888f1935050505015156127d957fe5b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600301546040518082815260200191505060405180910390a37f83711c709923be4ac11f3793650dc879f27f832eb4831a15f7c7eaefecdca2608260018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600201548660030154604051808760001916600019168152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001965050505050505060405180910390a15050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115612a8f576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b23565b612aa283826148c390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c6d57600080fd5b60216000836000191660001916815260200190815260200160002090508060040160009054906101000a900460ff16151515612ca857600080fd5b60018160040160006101000a81548160ff02191690831515021790555060008160040160016101000a81548160ff02191690831515021790555060008160040160029054906101000a900460ff1660ff161415612d2357612d1881600301546014546148c390919063ffffffff16565b601481905550612d43565b612d3c81600301546015546148c390919063ffffffff16565b6015819055505b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201549081150290604051600060405180830381858888f193505050501515612da857fe5b7f83711c709923be4ac11f3793650dc879f27f832eb4831a15f7c7eaefecdca2608260008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600201548660030154604051808760001916600019168152602001861515151581526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001965050505050505060405180910390a15050565b60195481565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612f2857600080fd5b7f5327f96e1b66776c2f90adb141c8f65efa8dd259adb405009213276527cbf69a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806130bc613b8e565b905060008160ff1614156130fa576130f360646130e56032600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60018160ff1614156131365761312f60646131216046600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60028160ff1614156131725761316b606461315d604b600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60038160ff1614156131ae576131a760646131996050600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60048160ff1614156131ea576131e360646131d56055600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b60058160ff1614156132265761321f6064613211605a600d5461449890919063ffffffff16565b6144cb90919063ffffffff16565b915061322c565b600d5491505b5090565b601e60029054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561329f57600080fd5b601e60009054906101000a900460ff1680156132c85750601e60019054906101000a900460ff16155b15156132d357600080fd5b6001601e60016101000a81548160ff021916908315150217905550613319613308601454600f546148c390919063ffffffff16565b6010546144e690919063ffffffff16565b6010819055507fb528945f9f8d6e631c43589e01dda0ae94be16ce2ed59fe5d804143fc67d6eb560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156133a957600080fd5b602360159054906101000a900460ff161515156133c557600080fd5b602360149054906101000a900460ff1615156133e057600080fd5b6000602360146101000a81548160ff0219169083151502179055506000602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561349d57600080fd5b601e60029054906101000a900460ff1680156134be57506134bc6113c1565b155b80156134d75750601e60039054906101000a900460ff16155b15156134e257600080fd5b6001601e60036101000a81548160ff02191690831515021790555043600c8190555061351b6015546010546148c390919063ffffffff16565b905060008111156136135761353b81600e546148c390919063ffffffff16565b600e819055507fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca53082604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b7f0ca69ffaa24f7585a46a230e239f637d8aab90db504f53ac8e60515d75ee065e60405160405180910390a150565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061369a601d5461368c620151808561449890919063ffffffff16565b6144cb90919063ffffffff16565b9050919050565b602360159054906101000a900460ff161515156136bd57600080fd5b602360149054906101000a900460ff1615156136d857600080fd5b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561373457600080fd5b6001602360156101000a81548160ff0219169083151502179055506137a3601154600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6011546040518082815260200191505060405180910390a3565b6040805190810160405280600381526020017f4a4f59000000000000000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156138e457600080fd5b602260159054906101000a900460ff1615151561390057600080fd5b602260149054906101000a900460ff16151561391b57600080fd5b6000602260146101000a81548160ff0219169083151502179055506000602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139d657600080fd5b601e60019054906101000a900460ff1680156139ff5750601e60029054906101000a900460ff16155b1515613a0a57600080fd5b6001601e60026101000a81548160ff02191690831515021790555043600681905550613a4a613a39600761366e565b6006546144e690919063ffffffff16565b600781905550613a6e613a5d600661366e565b6007546144e690919063ffffffff16565b600881905550613a92613a81600661366e565b6008546144e690919063ffffffff16565b600981905550613ab6613aa5600661366e565b6009546144e690919063ffffffff16565b600a81905550613ada613ac9600661366e565b600a546144e690919063ffffffff16565b600b81905550600b54600c819055507fc7a327262dbe9cd2bf3282d035e03d69a2b73561e7dcc74caa29f84ee3b9ab6d60405160405180910390a1565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60029054906101000a900460ff168015613b715750613b6d601a54600c546144e690919063ffffffff16565b4310155b1515613b7c57600080fd5b613b8683836148dc565b905092915050565b6000613b98611b4a565b15613ba65760009050613c5f565b60165460155411158015613bbc57506007544311155b15613bca5760019050613c5f565b60175460155411158015613be057506008544311155b15613bee5760029050613c5f565b60185460155411158015613c0457506009544311155b15613c125760039050613c5f565b60195460155411158015613c285750600a544311155b15613c365760049050613c5f565b60105460155411158015613c4c5750600b544311155b15613c5a5760059050613c5f565b600690505b90565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613cbe57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613d495750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515613d5457600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60049054906101000a900460ff1681565b601a5481565b600f5481565b600a5481565b600d5481565b601b5481565b602260149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3857600080fd5b6000601e60046101000a81548160ff0219169083151502179055507f6426a220e8910820230d4f2e29cc2bee7c13058ff2524cbcc4d823ba49aa2f6660405160405180910390a1565b6000613f1282600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60175481565b60185481565b60115481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561417257600080fd5b601e60029054906101000a900460ff1615151561418e57600080fd5b60008111151561419d57600080fd5b80600d8190555050565b60165481565b601e60019054906101000a900460ff1681565b600080600080600080600060216000896000191660001916815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1696508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16955080600201549450806003015493508060040160009054906101000a900460ff1692508060040160019054906101000a900460ff1691505091939550919395565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156142d257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561430e57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8921d9ed49fbcd5da840617d62bf35c34f4871caaf7bbfef6da589dd8c2c1f3881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561441157600080fd5b602360159054906101000a900460ff1615151561442d57600080fd5b80602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602360146101000a81548160ff02191690831515021790555050565b60125481565b60145481565b600080828402905060008414806144b957508284828115156144b657fe5b04145b15156144c157fe5b8091505092915050565b60008082848115156144d957fe5b0490508091505092915050565b60008082840190508381101515156144fa57fe5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561454157600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561458f57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561461a57600080fd5b61466c82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061470182600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147d382600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60008282111515156148d157fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561491957600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561496757600080fd5b6149b982600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148c390919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4e82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144e690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b815481835581811511614b2757818360005260206000209182019101614b269190614b40565b5b505050565b602060405190810160405280600081525090565b614b6291905b80821115614b5e576000816000905550600101614b46565b5090565b905600a165627a7a72305820b231e4c4161541ff50f2b860627aa9580972ec42043d16348d4c06c75ae55d0b0029

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

0000000000000000000000007c90992fbe7084b6531f086349187ebacec898a5

-----Decoded View---------------
Arg [0] : _multisig (address): 0x7C90992FBe7084B6531f086349187EBacEC898A5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007c90992fbe7084b6531f086349187ebacec898a5


Swarm Source

bzzr://b231e4c4161541ff50f2b860627aa9580972ec42043d16348d4c06c75ae55d0b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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