Sponsored Link:   SocialMedia.Market - The most cost effective advertising platform with 1069% ROI. Join ICO Now!
Contract Overview | GronDigitalToken
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 201 txns
Token Tracker 0x997e3adb550a85895f5becf54a2751e6df24edc8
  Latest 25 txns from a total Of 201 transactions View All

TxHash Age From To Value [TxFee]
0x1d0dfaaa9cdeec1b958cbb019587d7e880c78b405316b68b17c2f87a67afcb6f3 hrs 8 mins ago0x225be8f59297eaaf3fb351b09606e7f444eb7e0e  IN   GronDigitalToken0.12 Ether0.00364255
0x6d0c793557e8166275483e94c54f043a7af215f2dd2f54d26bea0c21f5496c7d3 hrs 27 mins ago0x89c57513d3105e272faac04496f9e09cb0cc4e61  IN   GronDigitalToken0.159 Ether0.002978855
0x784d43aa8a5869333bb07481d9c07eb392f8046eb99e1444379bb7a6062a6d666 hrs 8 mins ago0x69948c6072a8ec43bafa5e5c24dfd9922430b26d  IN   GronDigitalToken0.1 Ether0.000363275
0x2b61308a4db1b6a161625f0c767be65fe7566a6f816f3b5479942a77f142baa421 hrs 13 mins ago0x2945bc9bda9570f4909c865e54959b259917113e  IN   GronDigitalToken0.1 Ether0.0014531
0x98a0e0bb63123120b5cc1435b9115ebccc994cbfc54aca1e34ddf405fe7cc9b022 hrs 34 mins ago0xa2860bbf042c6722d8de371b015e4f8269bff641  IN   GronDigitalToken0.205 Ether0.0029062
0x667d0b6980ffcbed073d6e6c62a19ae181c62eef919487c2952cf75e9b5910401 day 1 hr ago0x7968ec9ed6a723f422f644588b129d642bf10c91  IN   GronDigitalToken0.201747009897 Ether0.000217965
0x6853e19ff643877f6a589885dc9ffeddee45e13fdd3fcb285754176405161b8d1 day 4 hrs ago0x232e37ba66e3d6d0432620438f7c18255bc7f0cb  IN   GronDigitalToken0.4 Ether0.0011531
0x03909a1891c82676d86146fbf78fa4e16a3db1279d4075b7e98daa86845cdf7d1 day 5 hrs ago0x232e37ba66e3d6d0432620438f7c18255bc7f0cb  IN   GronDigitalToken0.1 Ether0.0014531
0xe9b564ce160ed83aeda9c4f56dd0bd29b60c552fd58a35ef3d18cb78d7c2a85e1 day 5 hrs ago0x232e37ba66e3d6d0432620438f7c18255bc7f0cb  IN   GronDigitalToken0.1 Ether0.0002016
0x5ab416762c556418ca5c3df3a7e4015ed3120f01364e0566670b8752e8794d091 day 5 hrs ago0x0cc9e5695bf1b5930624ae1c7d517f80d2dd42af  IN   GronDigitalToken0.1 Ether0.0014531
0x996e041bad587c51bfaec2df993819d9b941488b201efafbb794357d0f83908e1 day 6 hrs ago0xb4d5827963dcf8926f2feed58687cc3dfaa777c6  IN   GronDigitalToken0.1 Ether0.0014531
0x01e09295b80248ba026c023c7f690528b7f31547efd429035ec0c07acf6f3ee51 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.0014531
0xe4ba1575d84da09b005b5d9c2ae77b8bc4a0e43480f71c4138811c424e79da231 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.00044
0xae6d41e0f5a53a61a671daaa699857f7c8918d0ae44adefe8ee6d0a26d3b4ace1 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.001344239847
0xe28e7fe518df864f4e66acc32017afc76250cd8a4eb2426d4629533a54ebe3a71 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.002519999948
0x75551f8d64015ba0c3de802b5a54372094035feed6ee8a6245e236cdedfa93961 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.001708559961
0xb54fd1bced869b72f442f22b6de3ac9b4595658957f88031c0d60ece6e25ebce1 day 9 hrs ago0x7d256acd35b58073489117ce6b0ef5fdca1a7a87  IN   GronDigitalToken2.95 Ether0.0005292
0x0001d5156cb1431b6df167bcea9793ed96d7f21a90b04e8825cfc123d8d8ba8e1 day 9 hrs ago0x89e4d6e6e81ee00c85449c60f940e4b17f975aa4  IN   GronDigitalToken0.117 Ether0.002978855
0x34de57950dec13d6e8c57f6863bc68a0d38cdadbe4e5624ea58081d27cce660e1 day 10 hrs ago0xc012d767b27cb47f771721d5a3064b8676b76508  IN   GronDigitalToken0.00933667 Ether0.000433
0xe202d7d0ca8c8c5d1db559714cac83675263a27c7267dc2560f406bf6f99a9791 day 15 hrs ago0xd50b7423b812359a52d4ed1b22289b9ad6d11a4a  IN   GronDigitalToken0.15 Ether0.002106995
0x5c4878a7ab7fe9fa56315d6cbb6ffb78c97bf4996b1dca319752447f93d94c281 day 16 hrs agoBinanceWallet  IN   GronDigitalToken0.7957582 Ether0.00653895
0x6706aac27026c8572df0e1fc1c48e63fb1d0210bb9e8819f243c2ddee0455a811 day 18 hrs ago0x1f4dc77116c138d4836f999cefea6785c4f81d77  IN   GronDigitalToken0.1 Ether0.002978855
0x623748848e9ed52bc6155be962010419ce055cef0c9454074c900bc312b7b4c62 days 12 mins ago0x2be38b5a72feb684527097615cb9a22054732924  IN   GronDigitalToken0.125 Ether0.00145598
0xdabfe93c2672e666ee5646aee5181f235af05e91e2702f987f3f588c7ac59f8f2 days 2 hrs ago0xf2e9022edd8cfc583b4a5db47be6f3be83255698  IN   GronDigitalToken0.1 Ether0.00421399
0xd97cb9fd3507b990f8c1b6ecddf51f55959f01ccd24ca2e3577871fd716c57c02 days 2 hrs ago0x70dcecfaef5957a8246d794bfe2ea4d0aa6fd40d  IN   GronDigitalToken0.1 Ether0.00014531
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x1d0dfaaa9cdeec1b958cbb019587d7e880c78b405316b68b17c2f87a67afcb6f51191403 hrs 8 mins ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.12 Ether
0x6d0c793557e8166275483e94c54f043a7af215f2dd2f54d26bea0c21f5496c7d51190543 hrs 27 mins ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.159 Ether
0x784d43aa8a5869333bb07481d9c07eb392f8046eb99e1444379bb7a6062a6d6651184116 hrs 8 mins ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x2b61308a4db1b6a161625f0c767be65fe7566a6f816f3b5479942a77f142baa4511466621 hrs 13 mins ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x98a0e0bb63123120b5cc1435b9115ebccc994cbfc54aca1e34ddf405fe7cc9b0511432822 hrs 34 mins ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.205 Ether
0x667d0b6980ffcbed073d6e6c62a19ae181c62eef919487c2952cf75e9b59104051135961 day 1 hr ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.201747009897 Ether
0x6853e19ff643877f6a589885dc9ffeddee45e13fdd3fcb285754176405161b8d51129011 day 4 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.4 Ether
0x03909a1891c82676d86146fbf78fa4e16a3db1279d4075b7e98daa86845cdf7d51126671 day 5 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x5ab416762c556418ca5c3df3a7e4015ed3120f01364e0566670b8752e8794d0951125071 day 5 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x996e041bad587c51bfaec2df993819d9b941488b201efafbb794357d0f83908e51124661 day 6 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x01e09295b80248ba026c023c7f690528b7f31547efd429035ec0c07acf6f3ee551116041 day 9 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248362.95 Ether
0x0001d5156cb1431b6df167bcea9793ed96d7f21a90b04e8825cfc123d8d8ba8e51115141 day 9 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.117 Ether
0xe202d7d0ca8c8c5d1db559714cac83675263a27c7267dc2560f406bf6f99a97951100721 day 15 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.15 Ether
0x5c4878a7ab7fe9fa56315d6cbb6ffb78c97bf4996b1dca319752447f93d94c2851099621 day 16 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.7957582 Ether
0x6706aac27026c8572df0e1fc1c48e63fb1d0210bb9e8819f243c2ddee0455a8151093251 day 18 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xdabfe93c2672e666ee5646aee5181f235af05e91e2702f987f3f588c7ac59f8f51073422 days 2 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xd97cb9fd3507b990f8c1b6ecddf51f55959f01ccd24ca2e3577871fd716c57c051072932 days 2 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xb6131694e774c72431f72eed0193f440b840e00c6cb62c1821311a4434c5869551067252 days 5 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xe72db8520d677a2e6bc96c37385f950d9a936f71b410b3df2a9996aa41ecb2c351064322 days 6 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x71e459f5a92f3f591b6bb5f8b27b7c98f92ffb347070925d3dc845b205cde0b351060162 days 7 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.216 Ether
0x796ed98b60d5869d6a3be5956a1a3bc6ef56e7b8e2b73a7becc3529dfb91189351040532 days 15 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248361.5 Ether
0x93057b9f717edccec081e22de229429e74530856c1060e3ddb96fdd4f685092a51030852 days 19 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x4abfff597522f240f3050dcb29c0f3cc90cb5280afdcad522be1e522695279e251020132 days 23 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248361 Ether
0xa127f22600fbfaed3a8064f9daf86195ef931ed18bc679564d6a7d11d9b8536c51012223 days 3 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248362 Ether
0xf25f2c89aa756813a91d94b6f7bd15381361085e3a71e18008cd9eb4503ce5aa50997213 days 9 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.13 Ether
[ Download CSV Export  ] 
Contract Source Code Verified
Contract Name: GRO
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity 0.4.18;

contract Token { // ERC20 standard

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract SafeMath {

  function safeMul(uint a, uint b) pure internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }
  function safeSub(uint a, uint b) pure internal returns (uint) {
    assert(b <= a);
    return a - b;
  }
  function safeAdd(uint a, uint b) pure internal returns (uint) {
    uint c = a + b;
    assert(c>=a && c>=b);
    return c;
  }
  function safeNumDigits(uint number) pure internal returns (uint8) {
    uint8 digits = 0;
    while (number != 0) {
        number /= 10;
        digits++;
    }
    return digits;
}

  // mitigate short address attack
  // thanks to https://github.com/numerai/contract/blob/c182465f82e50ced8dacb3977ec374a892f5fa8c/contracts/Safe.sol#L30-L34.
  // TODO: doublecheck implication of >= compared to ==
  modifier onlyPayloadSize(uint numWords) {
     assert(msg.data.length >= numWords * 32 + 4);
     _;
  }

}

contract StandardToken is Token, SafeMath {

    uint256 public totalSupply;

    function transfer(address _to, uint256 _value) onlyPayloadSize(2) public returns (bool success) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value && _value > 0);
        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);

        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(3) public returns (bool success) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0);
        balances[_from] = safeSub(balances[_from], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);

        return true;
    }

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

    // To change the approve amount you first have to reduce the addresses'
    //  allowance to zero by calling 'approve(_spender, 0)' if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    function approve(address _spender, uint256 _value) public onlyPayloadSize(2) returns (bool success) {
        require((_value == 0) || (allowed[msg.sender][_spender] == 0));
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        return true;
    }

    function changeApproval(address _spender, uint256 _oldValue, uint256 _newValue) public onlyPayloadSize(3) returns (bool success) {
        require(allowed[msg.sender][_spender] == _oldValue);
        allowed[msg.sender][_spender] = _newValue;
        Approval(msg.sender, _spender, _newValue);

        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

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

}

contract GRO is StandardToken {
    // FIELDS
    string public name = "Gron Digital";
    string public symbol = "GRO";
    uint256 public decimals = 18;
    string public version = "11.0";

    // Nine Hundred and Fifty million with support for 18 decimals
    uint256 public tokenCap = 950000000 * 10**18;

    // crowdsale parameters
    uint256 public fundingStartBlock;
    uint256 public fundingEndBlock;

    // vesting fields
    address public vestingContract;
    bool private vestingSet = false;

    // root control
    address public fundWallet;
    // control of liquidity and limited control of updatePrice
    address public controlWallet;
    // time to wait between controlWallet price updates
    uint256 public waitTime = 5 hours;

    // fundWallet controlled state variables
    // halted: halt buying due to emergency, tradeable: signal that GRON platform is up and running
    bool public halted = false;
    bool public tradeable = false;

    // -- totalSupply defined in StandardToken
    // -- mapping to token balances done in StandardToken

    uint256 public previousUpdateTime = 0;
    Price public currentPrice;
    uint256 public minAmount; // Minimum amount of ether to accept for GRO purchases

    // map participant address to a withdrawal request
    mapping (address => Withdrawal) public withdrawals;
    // maps previousUpdateTime to the next price
    mapping (uint256 => Price) public prices;
    // maps addresses
    mapping (address => bool) public whitelist;

    // TYPES

    struct Price { // tokensPerEth
        uint256 numerator;
    }

    struct Withdrawal {
        uint256 tokens;
        uint256 time; // time for each withdrawal is set to the previousUpdateTime
    }

    // EVENTS

    event Buy(address indexed participant, address indexed beneficiary, uint256 weiValue, uint256 amountTokens);
    event AllocatePresale(address indexed participant, uint256 amountTokens);
    event BonusAllocation(address indexed participant, string participant_addr, string txnHash, uint256 bonusTokens);
    event Mint(address indexed to, uint256 amount);
    event Whitelist(address indexed participant);
    event PriceUpdate(uint256 numerator);
    event AddLiquidity(uint256 ethAmount);
    event RemoveLiquidity(uint256 ethAmount);
    event WithdrawRequest(address indexed participant, uint256 amountTokens);
    event Withdraw(address indexed participant, uint256 amountTokens, uint256 etherAmount);

    // MODIFIERS

    modifier isTradeable { // exempt vestingContract and fundWallet to allow dev allocations
        require(tradeable || msg.sender == fundWallet || msg.sender == vestingContract);
        _;
    }

    modifier onlyWhitelist {
        require(whitelist[msg.sender]);
        _;
    }

    modifier onlyFundWallet {
        require(msg.sender == fundWallet);
        _;
    }

    modifier onlyManagingWallets {
        require(msg.sender == controlWallet || msg.sender == fundWallet);
        _;
    }

    modifier only_if_controlWallet {
        if (msg.sender == controlWallet) _;
    }
    modifier require_waited {
      require(safeSub(currentTime(), waitTime) >= previousUpdateTime);
        _;
    }
    modifier only_if_decrease (uint256 newNumerator) {
        if (newNumerator < currentPrice.numerator) _;
    }

    // CONSTRUCTOR
    function GRO() public {
        fundWallet = msg.sender;
        whitelist[fundWallet] = true;
        previousUpdateTime = currentTime();
    }

    // Called after deployment
    // Not all deployment clients support constructor arguments.
    // This function is provided for maximum compatibility. 
    function initialiseContract(address controlWalletInput, uint256 priceNumeratorInput, uint256 startBlockInput, uint256 endBlockInput) external onlyFundWallet {
      require(controlWalletInput != address(0));
      require(priceNumeratorInput > 0);
      require(endBlockInput > startBlockInput);
      controlWallet = controlWalletInput;
      whitelist[controlWallet] = true;
      currentPrice = Price(priceNumeratorInput);
      fundingStartBlock = startBlockInput;
      fundingEndBlock = endBlockInput;
      previousUpdateTime = currentTime();
      minAmount = 0.05 ether; // 500 GRO
    }

    // METHODS

    function setVestingContract(address vestingContractInput) external onlyFundWallet {
        require(vestingContractInput != address(0));
        vestingContract = vestingContractInput;
        whitelist[vestingContract] = true;
        vestingSet = true;
    }

    // allows controlWallet to update the price within a time contstraint, allows fundWallet complete control
    function updatePrice(uint256 newNumerator) external onlyManagingWallets {
        require(newNumerator > 0);
        require_limited_change(newNumerator);
        // either controlWallet command is compliant or transaction came from fundWallet
        currentPrice.numerator = newNumerator;
        // maps time to new Price (if not during ICO)
        prices[previousUpdateTime] = currentPrice;
        previousUpdateTime = currentTime();
        PriceUpdate(newNumerator);
    }

    function require_limited_change (uint256 newNumerator)
      private
      view
      only_if_controlWallet
      require_waited
      only_if_decrease(newNumerator)
    {
        uint256 percentage_diff = 0;
        percentage_diff = safeMul(newNumerator, 100) / currentPrice.numerator;
        percentage_diff = safeSub(100, percentage_diff);
        // controlWallet can only increase price by max 20% and only every waitTime
        require(percentage_diff <= 20);
    }

    function mint(address participant, uint256 amountTokens) private {
        require(vestingSet);
        // 40% of total allocated for Founders, Team incentives & Bonuses.

	// Solidity v0.4.18 - floating point is not fully supported,
	// integer division results in truncated values
	// Therefore we are multiplying out by 1000000... for
	// precision. This allows ratios values up to 0.0000x or 0.00x percent
	uint256 precision = 10**18;
	uint256 allocationRatio = safeMul(amountTokens, precision) / safeMul(570000000, precision);
        uint256 developmentAllocation = safeMul(allocationRatio, safeMul(380000000, precision)) / precision;
        // check that token cap is not exceeded
        uint256 newTokens = safeAdd(amountTokens, developmentAllocation);
        require(safeAdd(totalSupply, newTokens) <= tokenCap);
        // increase token supply, assign tokens to participant
        totalSupply = safeAdd(totalSupply, newTokens);
        balances[participant] = safeAdd(balances[participant], amountTokens);
        balances[vestingContract] = safeAdd(balances[vestingContract], developmentAllocation);

	Mint(fundWallet, newTokens);
	Transfer(fundWallet, participant, amountTokens);
	Transfer(fundWallet, vestingContract, developmentAllocation);
    }

    // amountTokens is supplied in major units, not subunits / decimal
    // units.
    function allocatePresaleTokens(
			       address participant_address,
			       string participant_str,
			       uint256 amountTokens,
			       string txnHash
			       )
      external onlyFundWallet {

      require(currentBlock() < fundingEndBlock);
      require(participant_address != address(0));
     
      uint256 bonusTokens = 0;
      uint256 totalTokens = safeMul(amountTokens, 10**18); // scale to subunit

      if (firstDigit(txnHash) == firstDigit(participant_str)) {
	  // Calculate 10% bonus
	  bonusTokens = safeMul(totalTokens, 10) / 100;
	  totalTokens = safeAdd(totalTokens, bonusTokens);
      }
        
        mint(participant_address, totalTokens);
	// Events        
        AllocatePresale(participant_address, totalTokens);
	BonusAllocation(participant_address, participant_str, txnHash, bonusTokens);
    }

    // returns the first character as a byte in a given hex string
    // address Given 0x1abcd... returns 1
    function firstDigit(string s) pure public returns(byte){
	bytes memory strBytes = bytes(s);
	return strBytes[2];
      }

    function verifyParticipant(address participant) external onlyManagingWallets {
        whitelist[participant] = true;
        Whitelist(participant);
    }

    // fallback function
    function() payable public {
      require(tx.origin == msg.sender);
      buyTo(msg.sender);
    }

    function buy() external payable {
        buyTo(msg.sender);
    }

    function buyTo(address participant) public payable {
      require(!halted);
      require(participant != address(0));
      require(msg.value >= minAmount);
      require(currentBlock() < fundingEndBlock);
      // msg.value in wei - scale to GRO
      uint256 baseAmountTokens = safeMul(msg.value, currentPrice.numerator);
      // calc lottery amount excluding potential ico bonus
      uint256 lotteryAmount = blockLottery(baseAmountTokens);
      uint256 icoAmount = safeMul(msg.value, icoNumeratorPrice());

      uint256 tokensToBuy = safeAdd(icoAmount, lotteryAmount);
      mint(participant, tokensToBuy);
      // send ether to fundWallet
      fundWallet.transfer(msg.value);
      // Events
      Buy(msg.sender, participant, msg.value, tokensToBuy);
    }

    // time based on blocknumbers, assuming a blocktime of 15s
    function icoNumeratorPrice() public constant returns (uint256) {

      if (currentBlock() < fundingStartBlock){
	return 14000;
      }
      
      uint256 icoDuration = safeSub(currentBlock(), fundingStartBlock);

      uint256 firstBlockPhase = 80640; // #blocks = 2*7*24*60*60/15 = 80640
      uint256 secondBlockPhase = 161280; // // #blocks = 4*7*24*60*60/15 = 161280
      uint256 thirdBlockPhase = 241920; // // #blocks = 6*7*24*60*60/15 = 241920

      if (icoDuration < firstBlockPhase ) {
	return  13000;	  
      } else if (icoDuration < secondBlockPhase ) { 
	return  12000;	    
      } else if (icoDuration < thirdBlockPhase ) { 
	return 11000;	    
      } else {
	return 10000;
      }
    }

    function currentBlock() private constant returns(uint256 _currentBlock) {
      return block.number;
    }

    function currentTime() private constant returns(uint256 _currentTime) {
      return now;
    }

    function blockLottery(uint256 _amountTokens) private constant returns(uint256) {
      uint256 divisor = 10;
      uint256 winning_digit = 0;
      uint256 tokenWinnings = 0;

      if (currentBlock() % divisor == winning_digit) {
	tokenWinnings = safeMul(_amountTokens, 10) / 100;
      }
      
      return tokenWinnings;	
    }

    function requestWithdrawal(uint256 amountTokensToWithdraw) external isTradeable onlyWhitelist {
      require(currentBlock() > fundingEndBlock);
        require(amountTokensToWithdraw > 0);
        address participant = msg.sender;
        require(balanceOf(participant) >= amountTokensToWithdraw);
        require(withdrawals[participant].tokens == 0); // participant cannot have outstanding withdrawals
        balances[participant] = safeSub(balances[participant], amountTokensToWithdraw);
        withdrawals[participant] = Withdrawal({tokens: amountTokensToWithdraw, time: previousUpdateTime});
        WithdrawRequest(participant, amountTokensToWithdraw);
    }

    function withdraw() external {
        address participant = msg.sender;
        uint256 tokens = withdrawals[participant].tokens;
        require(tokens > 0); // participant must have requested a withdrawal
        uint256 requestTime = withdrawals[participant].time;
        // obtain the next price that was set after the request
        Price price = prices[requestTime];
        require(price.numerator > 0); // price must have been set
        uint256 withdrawValue = tokens / price.numerator;
        // if contract ethbal > then send + transfer tokens to fundWallet, otherwise give tokens back
        withdrawals[participant].tokens = 0;
        if (this.balance >= withdrawValue) {
            enact_withdrawal_greater_equal(participant, withdrawValue, tokens);
	}
        else {
            enact_withdrawal_less(participant, withdrawValue, tokens);
	}
    }

    function enact_withdrawal_greater_equal(address participant, uint256 withdrawValue, uint256 tokens)
        private
    {
        assert(this.balance >= withdrawValue);
        balances[fundWallet] = safeAdd(balances[fundWallet], tokens);
        participant.transfer(withdrawValue);
        Withdraw(participant, tokens, withdrawValue);
    }
    function enact_withdrawal_less(address participant, uint256 withdrawValue, uint256 tokens)
        private
    {
        assert(this.balance < withdrawValue);
        balances[participant] = safeAdd(balances[participant], tokens);
        Withdraw(participant, tokens, 0); // indicate a failed withdrawal
    }

    // Returns the ether value (in wei units) for the amount of tokens
    // in subunits for decimal support, at the current GRO exchange
    // rate
    function checkWithdrawValue(uint256 amountTokensInSubunit) public constant returns (uint256 weiValue) {
        require(amountTokensInSubunit > 0);
        require(balanceOf(msg.sender) >= amountTokensInSubunit);
        uint256 withdrawValue = amountTokensInSubunit / currentPrice.numerator;
        require(this.balance >= withdrawValue);
        return withdrawValue;
    }

    // allow fundWallet or controlWallet to add ether to contract
    function addLiquidity() external onlyManagingWallets payable {
        require(msg.value > 0);
        AddLiquidity(msg.value);
    }

    // allow fundWallet to remove ether from contract
    function removeLiquidity(uint256 amount) external onlyManagingWallets {
        require(amount <= this.balance);
        fundWallet.transfer(amount);
        RemoveLiquidity(amount);
    }

    function changeFundWallet(address newFundWallet) external onlyFundWallet {
        require(newFundWallet != address(0));
        fundWallet = newFundWallet;
    }

    function changeControlWallet(address newControlWallet) external onlyFundWallet {
        require(newControlWallet != address(0));
        controlWallet = newControlWallet;
    }

    function changeWaitTime(uint256 newWaitTime) external onlyFundWallet {
        waitTime = newWaitTime;
    }

    // specified in wei
    function changeMinAmount(uint256 newMinAmount) external onlyFundWallet {
      minAmount = newMinAmount;
    }

    function updateFundingStartBlock(uint256 newFundingStartBlock) external onlyFundWallet {
      require(currentBlock() < fundingStartBlock);
        require(currentBlock() < newFundingStartBlock);
        fundingStartBlock = newFundingStartBlock;
    }

    function updateFundingEndBlock(uint256 newFundingEndBlock) external onlyFundWallet {
        require(currentBlock() < fundingEndBlock);
        require(currentBlock() < newFundingEndBlock);
        fundingEndBlock = newFundingEndBlock;
    }

    function halt() external onlyFundWallet {
        halted = true;
    }
    function unhalt() external onlyFundWallet {
        halted = false;
    }

    function enableTrading() external onlyFundWallet {
        require(currentBlock() > fundingEndBlock);
        tradeable = true;
    }

    function claimTokens(address _token) external onlyFundWallet {
        require(_token != address(0));
        Token token = Token(_token);
        uint256 balance = token.balanceOf(this);
        token.transfer(fundWallet, balance);
     }

    // prevent transfers until trading allowed
    function transfer(address _to, uint256 _value) public isTradeable returns (bool success) {
        return super.transfer(_to, _value);
    }
    function transferFrom(address _from, address _to, uint256 _value) public isTradeable returns (bool success) {
        return super.transferFrom(_from, _to, _value);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newWaitTime","type":"uint256"}],"name":"changeWaitTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"icoNumeratorPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newFundingStartBlock","type":"uint256"}],"name":"updateFundingStartBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"controlWalletInput","type":"address"},{"name":"priceNumeratorInput","type":"uint256"},{"name":"startBlockInput","type":"uint256"},{"name":"endBlockInput","type":"uint256"}],"name":"initialiseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"previousUpdateTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newControlWallet","type":"address"}],"name":"changeControlWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vestingContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"verifyParticipant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fundWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFundWallet","type":"address"}],"name":"changeFundWallet","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":false,"inputs":[{"name":"vestingContractInput","type":"address"}],"name":"setVestingContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawals","outputs":[{"name":"tokens","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"participant_address","type":"address"},{"name":"participant_str","type":"string"},{"name":"amountTokens","type":"uint256"},{"name":"txnHash","type":"string"}],"name":"allocatePresaleTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controlWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableTrading","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newNumerator","type":"uint256"}],"name":"updatePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amountTokensInSubunit","type":"uint256"}],"name":"checkWithdrawValue","outputs":[{"name":"weiValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_oldValue","type":"uint256"},{"name":"_newValue","type":"uint256"}],"name":"changeApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"removeLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentPrice","outputs":[{"name":"numerator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amountTokensToWithdraw","type":"uint256"}],"name":"requestWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"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":"","type":"uint256"}],"name":"prices","outputs":[{"name":"numerator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"s","type":"string"}],"name":"firstDigit","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"waitTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"buyTo","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tokenCap","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":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newFundingEndBlock","type":"uint256"}],"name":"updateFundingEndBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinAmount","type":"uint256"}],"name":"changeMinAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"addLiquidity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tradeable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"weiValue","type":"uint256"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"AllocatePresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"participant_addr","type":"string"},{"indexed":false,"name":"txnHash","type":"string"},{"indexed":false,"name":"bonusTokens","type":"uint256"}],"name":"BonusAllocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"numerator","type":"uint256"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"WithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"},{"indexed":false,"name":"etherAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526040805190810160405280600c81526020017f47726f6e204469676974616c0000000000000000000000000000000000000000815250600390805190602001906200005192919062000258565b506040805190810160405280600381526020017f47524f0000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000258565b5060126005556040805190810160405280600481526020017f31312e300000000000000000000000000000000000000000000000000000000081525060069080519060200190620000f292919062000258565b506b0311d253316c79d3760000006007556000600a60146101000a81548160ff021916908315150217905550614650600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600f5534156200016b57600080fd5b33600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002446200025064010000000002620039a1176401000000009004565b600f8190555062000307565b600042905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029b57805160ff1916838001178555620002cc565b82800160010185558215620002cc579182015b82811115620002cb578251825591602001919060010190620002ae565b5b509050620002db9190620002df565b5090565b6200030491905b8082111562000300576000816000905550600101620002e6565b5090565b90565b613f8780620003176000396000f30060606040526004361061025c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146102a157806306fe22121461032f578063095ea7b31461035257806318160ddd146103ac57806319476244146103d557806323b872dd146103fe578063276605bc14610477578063292636301461049a578063313ce567146104ee578063347820eb146105175780633ccfd60b1461054057806354fd4d50146105555780635a8cf571146105e35780635e6f60451461061c5780635ed7ca5b14610671578063643a769514610686578063664a1ad6146106bf5780636fb4adff1461071457806370a082311461074d578063749915691461079a5780637a9262a2146107d35780637e32716814610827578063823e569e146108915780638a8c523c146108e65780638d6cc56d146108fb5780638f11e5f91461091e57806391b43d13146109555780639281cd651461097e57806395d89b41146109e15780639b19251a14610a6f5780639b2cb5d814610ac05780639c8f9f2314610ae95780639d1b464a14610b0c5780639ee679e814610b35578063a6f2ae3a14610b58578063a9059cbb14610b62578063b9b8af0b14610bbc578063bc31c1c114610be9578063c02cc95714610c20578063cb3e64fd14610cd5578063ccca123b14610cea578063d648a64714610d13578063dcf72c1014610d3c578063dd54291b14610d6a578063dd62ed3e14610d93578063df8de3e714610dff578063e28b0d9a14610e38578063e34ffcb814610e5b578063e8078d9414610e7e578063f5ac9db614610e88575b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561029657600080fd5b61029f33610eb5565b005b34156102ac57600080fd5b6102b4611056565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f45780820151818401526020810190506102d9565b50505050905090810190601f1680156103215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561033a57600080fd5b61035060048080359060200190919050506110f4565b005b341561035d57600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061115a565b604051808215151515815260200191505060405180910390f35b34156103b757600080fd5b6103bf6112fb565b6040518082815260200191505060405180910390f35b34156103e057600080fd5b6103e8611301565b6040518082815260200191505060405180910390f35b341561040957600080fd5b61045d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061138e565b604051808215151515815260200191505060405180910390f35b341561048257600080fd5b610498600480803590602001909190505061146f565b005b34156104a557600080fd5b6104ec600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091908035906020019091905050611501565b005b34156104f957600080fd5b6105016116c0565b6040518082815260200191505060405180910390f35b341561052257600080fd5b61052a6116c6565b6040518082815260200191505060405180910390f35b341561054b57600080fd5b6105536116cc565b005b341561056057600080fd5b610568611835565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a857808201518184015260208101905061058d565b50505050905090810190601f1680156105d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105ee57600080fd5b61061a600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118d3565b005b341561062757600080fd5b61062f6119af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561067c57600080fd5b6106846119d5565b005b341561069157600080fd5b6106bd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a4e565b005b34156106ca57600080fd5b6106d2611ba0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561071f57600080fd5b61074b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611bc6565b005b341561075857600080fd5b610784600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ca2565b6040518082815260200191505060405180910390f35b34156107a557600080fd5b6107d1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ceb565b005b34156107de57600080fd5b61080a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611e5c565b604051808381526020018281526020019250505060405180910390f35b341561083257600080fd5b61088f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001919091929080359060200190919080359060200190820180359060200191909192905050611e80565b005b341561089c57600080fd5b6108a4612124565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108f157600080fd5b6108f961214a565b005b341561090657600080fd5b61091c60048080359060200190919050506121da565b005b341561092957600080fd5b61093f600480803590602001909190505061231c565b6040518082815260200191505060405180910390f35b341561096057600080fd5b610968612387565b6040518082815260200191505060405180910390f35b341561098957600080fd5b6109c7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190505061238d565b604051808215151515815260200191505060405180910390f35b34156109ec57600080fd5b6109f4612523565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a34578082015181840152602081019050610a19565b50505050905090810190601f168015610a615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610a7a57600080fd5b610aa6600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125c1565b604051808215151515815260200191505060405180910390f35b3415610acb57600080fd5b610ad36125e1565b6040518082815260200191505060405180910390f35b3415610af457600080fd5b610b0a60048080359060200190919050506125e7565b005b3415610b1757600080fd5b610b1f61275d565b6040518082815260200191505060405180910390f35b3415610b4057600080fd5b610b566004808035906020019091905050612769565b005b610b60612a6a565b005b3415610b6d57600080fd5b610ba2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612a75565b604051808215151515815260200191505060405180910390f35b3415610bc757600080fd5b610bcf612b54565b604051808215151515815260200191505060405180910390f35b3415610bf457600080fd5b610c0a6004808035906020019091905050612b67565b6040518082815260200191505060405180910390f35b3415610c2b57600080fd5b610c7b600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050612b85565b60405180827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3415610ce057600080fd5b610ce8612bf4565b005b3415610cf557600080fd5b610cfd612c6d565b6040518082815260200191505060405180910390f35b3415610d1e57600080fd5b610d26612c73565b6040518082815260200191505060405180910390f35b610d68600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610eb5565b005b3415610d7557600080fd5b610d7d612c79565b6040518082815260200191505060405180910390f35b3415610d9e57600080fd5b610de9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c7f565b6040518082815260200191505060405180910390f35b3415610e0a57600080fd5b610e36600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d06565b005b3415610e4357600080fd5b610e596004808035906020019091905050612f52565b005b3415610e6657600080fd5b610e7c6004808035906020019091905050612fe4565b005b610e8661304a565b005b3415610e9357600080fd5b610e9b613146565b604051808215151515815260200191505060405180910390f35b600080600080600e60009054906101000a900460ff16151515610ed757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515610f1357600080fd5b6011543410151515610f2457600080fd5b600954610f2f613159565b101515610f3b57600080fd5b610f4a34601060000154613161565b9350610f5584613194565b9250610f6834610f63611301565b613161565b9150610f7482846131e5565b9050610f80858261320f565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515610fe257600080fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f89f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e3484604051808381526020018281526020019250505060405180910390a35050505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561115057600080fd5b80600d8190555050565b600060026004602082020160003690501015151561117457fe5b60008314806111ff57506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b151561120a57600080fd5b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b60005481565b6000806000806000600854611314613159565b1015611324576136b09450611387565b61133761132f613159565b6008546135c1565b935062013b0092506202760091506203b10090508284101561135d576132c89450611387565b8184101561136f57612ee09450611387565b8084101561138157612af89450611387565b61271094505b5050505090565b6000600e60019054906101000a900460ff16806113f85750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806114505750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561145b57600080fd5b6114668484846135da565b90509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114cb57600080fd5b6008546114d6613159565b1015156114e257600080fd5b806114eb613159565b1015156114f757600080fd5b8060088190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561159957600080fd5b6000831115156115a857600080fd5b81811115156115b657600080fd5b83600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506020604051908101604052808481525060106000820151816000015590505081600881905550806009819055506116a66139a1565b600f8190555066b1a2bc2ec5000060118190555050505050565b60055481565b600f5481565b6000806000806000339450601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154935060008411151561172b57600080fd5b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015492506013600084815260200190815260200160002091506000826000015411151561179857600080fd5b8160000154848115156117a757fe5b0490506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550803073ffffffffffffffffffffffffffffffffffffffff16311015156118225761181d8582866139a9565b61182e565b61182d858286613b37565b5b5050505050565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118cb5780601f106118a0576101008083540402835291602001916118cb565b820191906000526020600020905b8154815290600101906020018083116118ae57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561192f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561196b57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3157600080fd5b6001600e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611af75750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611b0257600080fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167feb73900b98b6a3e2b8b01708fe544760cf570d21e7fbe5225f24e48b5b2b432e60405160405180910390a250565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c5e57600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d4757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d8357600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60146101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090508060000154908060010154905082565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611edf57600080fd5b600954611eea613159565b101515611ef657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515611f3257600080fd5b60009150611f4885670de0b6b3a7640000613161565b9050611f8587878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612b85565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611fe285858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612b85565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561203057606461201782600a613161565b81151561202057fe5b04915061202d81836131e5565b90505b61203a888261320f565b8773ffffffffffffffffffffffffffffffffffffffff167f69488271d7ab6c5d1d852b2fedbeafcee0ad158162b8c58145130bacd56bff76826040518082815260200191505060405180910390a28773ffffffffffffffffffffffffffffffffffffffff167f4df679e3cae3a2641649110128bf2d93f65fddaee12e077436767670e7b9077c8888878787604051808060200180602001848152602001838103835288888281815260200192508082843782019150508381038252868682818152602001925080828437820191505097505050505050505060405180910390a25050505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121a657600080fd5b6009546121b1613159565b1115156121bd57600080fd5b6001600e60016101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122835750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561228e57600080fd5b60008111151561229d57600080fd5b6122a681613c41565b80601060000181905550601060136000600f548152602001908152602001600020600082015481600001559050506122dc6139a1565b600f819055507fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a816040518082815260200191505060405180910390a150565b60008060008311151561232e57600080fd5b8261233833611ca2565b1015151561234557600080fd5b6010600001548381151561235557fe5b049050803073ffffffffffffffffffffffffffffffffffffffff16311015151561237e57600080fd5b80915050919050565b60095481565b60006003600460208202016000369050101515156123a757fe5b83600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561243157600080fd5b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150509392505050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125b95780601f1061258e576101008083540402835291602001916125b9565b820191906000526020600020905b81548152906001019060200180831161259c57829003601f168201915b505050505081565b60146020528060005260406000206000915054906101000a900460ff1681565b60115481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806126905750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561269b57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156126c157600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561272357600080fd5b7f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa816040518082815260200191505060405180910390a150565b60108060000154905081565b6000600e60019054906101000a900460ff16806127d35750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061282b5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561283657600080fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561288e57600080fd5b600954612899613159565b1115156128a557600080fd5b6000821115156128b457600080fd5b339050816128c182611ca2565b101515156128ce57600080fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561291f57600080fd5b612968600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135c1565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040805190810160405280838152602001600f54815250601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508073ffffffffffffffffffffffffffffffffffffffff167f17040713250ec5f668a1c39e7939900e78558350dbaff0ebef34268dfa8ea4ac836040518082815260200191505060405180910390a25050565b612a7333610eb5565b565b6000600e60019054906101000a900460ff1680612adf5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612b375750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612b4257600080fd5b612b4c8383613d0f565b905092915050565b600e60009054906101000a900460ff1681565b60136020528060005260406000206000915090508060000154905081565b6000612b8f613f47565b829050806002815181101515612ba157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c5057600080fd5b6000600e60006101000a81548160ff021916908315150217905550565b600d5481565b60085481565b60075481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d6557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612da157600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e4757600080fd5b6102c65a03f11515612e5857600080fd5b5050506040518051905090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612f3157600080fd5b6102c65a03f11515612f4257600080fd5b5050506040518051905050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fae57600080fd5b600954612fb9613159565b101515612fc557600080fd5b80612fce613159565b101515612fda57600080fd5b8060098190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561304057600080fd5b8060118190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806130f35750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156130fe57600080fd5b60003411151561310d57600080fd5b7ff53d9d58a7ff16a2e1360446f1c4b5e81a427d3efd25615be081f4003662400a346040518082815260200191505060405180910390a1565b600e60019054906101000a900460ff1681565b600043905090565b60008082840290506000841480613182575082848281151561317f57fe5b04145b151561318a57fe5b8091505092915050565b600080600080600a9250600091506000905081836131b0613159565b8115156131b957fe5b0614156131da5760646131cd86600a613161565b8115156131d657fe5b0490505b809350505050919050565b60008082840190508381101580156131fd5750828110155b151561320557fe5b8091505092915050565b600080600080600a60149054906101000a900460ff16151561323057600080fd5b670de0b6b3a764000093506132496321f9828085613161565b6132538686613161565b81151561325c57fe5b04925083613277846132726316a6570088613161565b613161565b81151561328057fe5b04915061328d85836131e5565b905060075461329e600054836131e5565b111515156132ab57600080fd5b6132b7600054826131e5565b600081905550613306600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866131e5565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b460016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131e5565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050565b60008282111515156135cf57fe5b818303905092915050565b60006003600460208202016000369050101515156135f457fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561363057600080fd5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156136fb575082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156137075750600083115b151561371257600080fd5b61375b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e7600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131e5565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b0600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b600042905090565b813073ffffffffffffffffffffffffffffffffffffffff1631101515156139cc57fe5b613a3760016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826131e5565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515613adc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688284604051808381526020018281526020019250505060405180910390a2505050565b813073ffffffffffffffffffffffffffffffffffffffff1631101515613b5957fe5b613ba2600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826131e5565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568826000604051808381526020018281526020019250505060405180910390a2505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613d0b57600f54613caf613ca76139a1565b600d546135c1565b10151515613cbc57600080fd5b81601060000154811015613d095760009150601060000154613cdf846064613161565b811515613ce857fe5b049150613cf66064836135c1565b915060148211151515613d0857600080fd5b5b505b5050565b6000600260046020820201600036905010151515613d2957fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613d6557600080fd5b82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015613db45750600083115b1515613dbf57600080fd5b613e08600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e94600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131e5565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6020604051908101604052806000815250905600a165627a7a72305820a25a6c88da760ddbc12060f0bf2469c2d4bb351efd648de8ae444f17e74f17f80029

   Swarm Source:
bzzr://a25a6c88da760ddbc12060f0bf2469c2d4bb351efd648de8ae444f17e74f17f8

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.