ETH Price: $3,162.02 (-1.00%)
 
Transaction Hash
Method
Block
From
To
Distribute Profi...118357672021-02-11 14:14:191446 days ago1613052859IN
0xDfC328c1...c10e0CdA3
0 ETH0.01452192140
Change Token Set...118356982021-02-11 13:59:011446 days ago1613051941IN
0xDfC328c1...c10e0CdA3
0 ETH0.00187905109.00000134
Emergency Fix Ga...114848682020-12-19 16:45:421500 days ago1608396342IN
0xDfC328c1...c10e0CdA3
0 ETH0.0009330
Emergency Fix Ga...114848582020-12-19 16:43:201500 days ago1608396200IN
0xDfC328c1...c10e0CdA3
0 ETH0.0012440
Emergency Fix Ga...114848492020-12-19 16:41:361500 days ago1608396096IN
0xDfC328c1...c10e0CdA3
0 ETH0.0009630
Emergency Fix Ga...110870192020-10-19 14:35:541561 days ago1603118154IN
0xDfC328c1...c10e0CdA3
0 ETH0.0016260
Place Bet110577142020-10-15 2:35:241565 days ago1602729324IN
0xDfC328c1...c10e0CdA3
0.01 ETH0.0064715241.00000145
Place Bet110209872020-10-09 11:29:051571 days ago1602242945IN
0xDfC328c1...c10e0CdA3
0.08 ETH0.0138227575.003
Place Bet107092652020-08-22 9:36:291619 days ago1598088989IN
0xDfC328c1...c10e0CdA3
0.01 ETH0.0124214480
Place Bet107092372020-08-22 9:30:441619 days ago1598088644IN
0xDfC328c1...c10e0CdA3
0.01 ETH0.0175324880
Place Bet104907872020-07-19 15:28:021653 days ago1595172482IN
0xDfC328c1...c10e0CdA3
0.06 ETH0.0105396459
Place Bet104069882020-07-06 16:35:171666 days ago1594053317IN
0xDfC328c1...c10e0CdA3
0.21 ETH0.0109101251
Process Games103994862020-07-05 12:52:201667 days ago1593953540IN
0xDfC328c1...c10e0CdA3
0 ETH0.0012428535
Process Games103994802020-07-05 12:50:471667 days ago1593953447IN
0xDfC328c1...c10e0CdA3
0 ETH0.0012428535
Process Games103994722020-07-05 12:48:531667 days ago1593953333IN
0xDfC328c1...c10e0CdA3
0 ETH0.0012073434
Process Games103994672020-07-05 12:47:031667 days ago1593953223IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011718333
Process Games103994622020-07-05 12:45:291667 days ago1593953129IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011363232
Process Games103994552020-07-05 12:43:521667 days ago1593953032IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011363232
Process Games103994492020-07-05 12:42:431667 days ago1593952963IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011363232
Process Games103994372020-07-05 12:40:251667 days ago1593952825IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011359631.99
Process Games103994322020-07-05 12:39:171667 days ago1593952757IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011008131
Process Games103994302020-07-05 12:38:221667 days ago1593952702IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011008131
Process Games103994172020-07-05 12:35:111667 days ago1593952511IN
0xDfC328c1...c10e0CdA3
0 ETH0.0011008131
Process Games103994102020-07-05 12:33:151667 days ago1593952395IN
0xDfC328c1...c10e0CdA3
0 ETH0.001065330
Process Games103994022020-07-05 12:31:541667 days ago1593952314IN
0xDfC328c1...c10e0CdA3
0 ETH0.001065330
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
118357672021-02-11 14:14:191446 days ago1613052859
0xDfC328c1...c10e0CdA3
24.18 ETH
103927552020-07-04 11:44:341668 days ago1593863074
0xDfC328c1...c10e0CdA3
3.04 ETH
103927122020-07-04 11:35:541668 days ago1593862554
0xDfC328c1...c10e0CdA3
2.28 ETH
103926452020-07-04 11:19:331668 days ago1593861573
0xDfC328c1...c10e0CdA3
1.16 ETH
103926212020-07-04 11:13:311668 days ago1593861211
0xDfC328c1...c10e0CdA3
0.4 ETH
103918202020-07-04 8:19:521668 days ago1593850792
0xDfC328c1...c10e0CdA3
0.52 ETH
103917942020-07-04 8:14:311668 days ago1593850471
0xDfC328c1...c10e0CdA3
0.7 ETH
103917592020-07-04 8:09:061668 days ago1593850146
0xDfC328c1...c10e0CdA3
1.02 ETH
103821132020-07-02 20:26:341670 days ago1593721594
0xDfC328c1...c10e0CdA3
2.16 ETH
103820822020-07-02 20:19:411670 days ago1593721181
0xDfC328c1...c10e0CdA3
0.52 ETH
103820602020-07-02 20:15:411670 days ago1593720941
0xDfC328c1...c10e0CdA3
0.52 ETH
103820072020-07-02 20:05:471670 days ago1593720347
0xDfC328c1...c10e0CdA3
0.52 ETH
103764962020-07-01 23:21:161671 days ago1593645676
0xDfC328c1...c10e0CdA3
0.18 ETH
103750452020-07-01 18:04:071671 days ago1593626647
0xDfC328c1...c10e0CdA3
0.4 ETH
103696712020-06-30 21:49:521672 days ago1593553792
0xDfC328c1...c10e0CdA3
2.28 ETH
103696392020-06-30 21:43:091672 days ago1593553389
0xDfC328c1...c10e0CdA3
2.16 ETH
103696122020-06-30 21:36:461672 days ago1593553006
0xDfC328c1...c10e0CdA3
2.64 ETH
103695732020-06-30 21:27:281672 days ago1593552448
0xDfC328c1...c10e0CdA3
1.62 ETH
103685252020-06-30 17:38:241672 days ago1593538704
0xDfC328c1...c10e0CdA3
0.54 ETH
103684342020-06-30 17:17:261672 days ago1593537446
0xDfC328c1...c10e0CdA3
0.2 ETH
103684302020-06-30 17:16:421672 days ago1593537402
0xDfC328c1...c10e0CdA3
0.2 ETH
103651552020-06-30 5:06:231672 days ago1593493583
0xDfC328c1...c10e0CdA3
0.2 ETH
103651312020-06-30 5:01:421672 days ago1593493302
0xDfC328c1...c10e0CdA3
0.2 ETH
103651162020-06-30 4:58:371672 days ago1593493117
0xDfC328c1...c10e0CdA3
0.3 ETH
103650612020-06-30 4:47:151672 days ago1593492435
0xDfC328c1...c10e0CdA3
0.2 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SmartRoulette

Compiler Version
v0.4.8+commit.60cc1668

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-04-07
*/

pragma solidity ^0.4.8;

contract WinMatrix
 {
   function getCoeff(uint16 n) external returns (uint256);
   function getBetsProcessed() external constant returns (uint16);
 }

contract SmartRouletteToken 
{
   function emission(address player, address partner, uint256 value_bet, uint256 coef_player, uint256 coef_partner) external returns(uint256, uint8);
   function isOperationBlocked() external constant returns (bool);
}

contract SmartAffiliate 
{   
   function getAffiliateInfo(address player) external constant returns(address affiliate, uint16 coef_affiliate, uint16 coef_player);
}

/*
** User interface for SmartRoulette https://smartroulette.io
*/
contract SmartRoulette
{
  address developer;
  address operator;

  // Wait BlockDelay blocks before generate random number
  uint8 BlockDelay;

  // Maximum bet value for game (one credit is currentMaxBet/256)
  uint256 currentMaxBet;    

  // maximum games count per block
  uint64 maxGamblesPerBlock;
        
  // Enable\disable to place new bets
  bool ContractState;

  // table with winner coefficients
  WinMatrix winMatrix;

  SmartRouletteToken smartToken;

  address public profitDistributionContract;

  SmartAffiliate smartAffiliateContract;

  uint16 constant maxTypeBets = 157;
  
  // Default coef for token emission (if SmartAffiliate contract is not setup)
  uint16 CoefPlayerEmission;   
  // 
  mapping (uint8 => uint8) private minCreditsOnBet;
  mapping (uint8 => uint8) private maxCreditsOnBet;

  struct GameInfo
  {
       address player;
       uint256 blockNumber;
       uint8 wheelResult;
       uint256 bets;
       bytes32 values;
       bytes32 values2;
  } 
       
  GameInfo[] private gambles;

   enum GameStatus {Success, Skipped, Stop}

   enum BetTypes{number0, number1,number2,number3,number4,number5,number6,number7,number8,number9,
     number10,number11,number12,number13,number14,number15,number16,number17,number18,number19,number20,number21,
     number22,number23,number24,number25,number26,number27,number28,number29,number30,number31,number32,number33,
     number34,number35,number36, red, black, odd, even, dozen1,dozen2,dozen3, column1,column2,column3, low,high,
     pair_01, pair_02, pair_03, pair_12, pair_23, pair_36, pair_25, pair_14, pair_45, pair_56, pair_69, pair_58, pair_47,
     pair_78, pair_89, pair_912, pair_811, pair_710, pair_1011, pair_1112, pair_1215, pair_1518, pair_1617, pair_1718, pair_1720,
     pair_1619, pair_1922, pair_2023, pair_2124, pair_2223, pair_2324, pair_2528, pair_2629, pair_2730, pair_2829, pair_2930, pair_1114,
     pair_1013, pair_1314, pair_1415, pair_1316, pair_1417, pair_1821, pair_1920, pair_2021, pair_2225, pair_2326, pair_2427, pair_2526,
     pair_2627, pair_2831, pair_2932, pair_3033, pair_3132, pair_3233, pair_3134, pair_3235, pair_3336, pair_3435, pair_3536, corner_0_1_2_3,
     corner_1_2_5_4, corner_2_3_6_5, corner_4_5_8_7, corner_5_6_9_8, corner_7_8_11_10, corner_8_9_12_11, corner_10_11_14_13, corner_11_12_15_14,
     corner_13_14_17_16, corner_14_15_18_17, corner_16_17_20_19, corner_17_18_21_20, corner_19_20_23_22, corner_20_21_24_23, corner_22_23_26_25,
     corner_23_24_27_26, corner_25_26_29_28, corner_26_27_30_29, corner_28_29_32_31, corner_29_30_33_32, corner_31_32_35_34, corner_32_33_36_35,
     three_0_2_3, three_0_1_2, three_1_2_3, three_4_5_6, three_7_8_9, three_10_11_12, three_13_14_15, three_16_17_18, three_19_20_21, three_22_23_24,
     three_25_26_27, three_28_29_30, three_31_32_33, three_34_35_36, six_1_2_3_4_5_6, six_4_5_6_7_8_9, six_7_8_9_10_11_12, six_10_11_12_13_14_15,
     six_13_14_15_16_17_18, six_16_17_18_19_20_21, six_19_20_21_22_23_24, six_22_23_24_25_26_27, six_25_26_27_28_29_30, six_28_29_30_31_32_33,
     six_31_32_33_34_35_36}
   

   function SmartRoulette() internal
   {        
        developer  = msg.sender;
        operator   = msg.sender;
        
        winMatrix = WinMatrix(0x073D6621E9150bFf9d1D450caAd3c790b6F071F2);
        if (winMatrix.getBetsProcessed() != maxTypeBets) throw;
        
        smartToken = SmartRouletteToken(0xcced5b8288086be8c38e23567e684c3740be4d48);

        currentMaxBet = 2560 finney; // 2.56 ether
        BlockDelay = 1;        
        maxGamblesPerBlock = 5;        
        ContractState  = true;  
        bankrolLimit = 277 ether;
        profitLimit  = 50 ether;
        CoefPlayerEmission = 100; // default 1%
   }

   function changeSettings(uint256 newMaxBet, uint8 newBlockDelay) public onlyDeveloper 
   {             
      BlockDelay = newBlockDelay;
      // rounds to 2 digts
      newMaxBet = newMaxBet / 2560000000000000000 * 2560000000000000000;  
      if (newMaxBet != currentMaxBet) 
      {
        currentMaxBet = newMaxBet;
        SettingsChanged();
      }
   }

   uint256 bankrolLimit;
   uint256 profitLimit;
   uint256 lastDistributedProfit;
   uint256 lastDateDistributedProfit;
   
   function getDistributeProfitsInfo() public constant returns (uint256 lastProfit, uint256 lastDate)
   {
      lastProfit = lastDistributedProfit;
      lastDate = lastDateDistributedProfit;
   }

   function setProfitDistributionContract(address contractAddress) onlyDeveloper
   {
      if (profitDistributionContract > 0) throw;
      profitDistributionContract = contractAddress;
   }

   function setSmartAffiliateContract(address contractAddress) onlyDeveloper
   {
      if (address(smartAffiliateContract) > 0) throw;
      smartAffiliateContract = SmartAffiliate(contractAddress);
   }

   function distributeProfits(uint256 gasValue) onlyDeveloperOrOperator
   {
      if (profitDistributionContract > 0 && this.balance >= (bankrolLimit+profitLimit))
      {
         uint256 diff = this.balance - bankrolLimit;
         if (address(profitDistributionContract).call.gas(gasValue).value(diff)() == false) throw;
         lastDistributedProfit = diff;
         lastDateDistributedProfit = block.timestamp;
      }      
   }

   function getTokenSettings() public constant returns(uint16 Coef_player, uint256 BankrolLimit, uint256 ProfitLimit)
   {
      Coef_player = CoefPlayerEmission;      
      BankrolLimit = bankrolLimit;
      ProfitLimit = profitLimit;
   }

   function changeTokenSettings(uint16 newCoef_player, uint256 newBankrolLimit, uint256 newProfitLimit) onlyDeveloper
   {
      CoefPlayerEmission  = newCoef_player;      
      bankrolLimit = newBankrolLimit;
      profitLimit  = newProfitLimit;
   }

   function changeMinBet(uint8[157] value) onlyDeveloper
   {
     // value[i] == 0 means skip this value
     // value[i] == 255 means value will be 0
     // Raw mapping minCreditsOnBet changes from 0 to 254, 
     // when compare with real bet we add +1, so min credits changes from 1 to 255
     for(var i=0;i<157;i++) 
     {
        if (value[i] > 0) 
        {
           if (value[i] == 255)
             minCreditsOnBet[i] = 0;     
           else  
             minCreditsOnBet[i] = value[i];
        }
     }
     SettingsChanged();
   }

   function changeMaxBet(uint8[157] value) onlyDeveloper
   {
     // value[i] == 0 means skip this value
     // value[i] == 255 means value will be 0
     // Raw mapping maxCreditsOnBet hold values that reduce max bet from 255 to 0     
     // If we want to calculate real max bet value we should do: 256 - maxCreditsOnBet[i]
     // example: if mapping holds 0 it means, that max bet will be 256 - 0 = 256
     //          if mapping holds 50 it means, that max bet will be 256 - 50 = 206 
     for(var i=0;i<157;i++) 
     {
       if (value[i] > 0) 
       {
          if (value[i] == 255)
             maxCreditsOnBet[i] = 0;     
           else  
             maxCreditsOnBet[i] = 255 - value[i];              
       }
     }
     SettingsChanged();
   }
   
   function deleteContract() onlyDeveloper  
   {
        suicide(msg.sender);
   }

   // bit from 0 to 255
   function isBitSet(uint256 data, uint8 bit) private constant returns (bool ret)
   {
       assembly {
            ret := iszero(iszero(and(data, exp(2,bit))))
        }
        return ret;
   }

   // unique combination of bet and wheelResult, used for access to WinMatrix
   function getIndex(uint16 bet, uint16 wheelResult) private constant returns (uint16)
   {
      return (bet+1)*256 + (wheelResult+1);
   }

   // n form 1 <= to <= 32
   function getBetValue(bytes32 values, uint8 n, uint8 nBit) private constant returns (uint256)
   {
        // bet in credits (1..256) 
        uint256 bet = uint256(values[32 - n]) + 1;

        if (bet < uint256(minCreditsOnBet[nBit]+1)) throw;   //default: bet < 0+1
        if (bet > uint256(256-maxCreditsOnBet[nBit])) throw; //default: bet > 256-0      

        return currentMaxBet * bet / 256;        
   }

   // n - number player bet
   // nBit - betIndex
   function getBetValueByGamble(GameInfo memory gamble, uint8 n, uint8 nBit) private constant returns (uint256) 
   {
      if (n <= 32) return getBetValue(gamble.values , n, nBit);
      if (n <= 64) return getBetValue(gamble.values2, n - 32, nBit);
      // there are 64 maximum unique bets (positions) in one game
      throw;
   }
  
   function totalGames() constant returns (uint256)
   {
       return gambles.length;
   }
   
   function getSettings() constant returns(uint256 maxBet, uint256 oneCredit, uint8[157] _minCreditsOnBet, uint8[157] _maxCreditsOnBet, uint8 blockDelay, bool contractState)
    {
        maxBet    = currentMaxBet;
        oneCredit = currentMaxBet / 256; 
        blockDelay = BlockDelay;      
        for(var i = 0;i < maxTypeBets;i++)  
        {
          _minCreditsOnBet[i] = minCreditsOnBet[i] + 1;
          _maxCreditsOnBet[i] = 255 - maxCreditsOnBet[i];
        }     
        contractState        = ContractState;
    }
   
    modifier onlyDeveloper() 
    {
       if (msg.sender != developer) throw;
       _;
    }

    modifier onlyDeveloperOrOperator() 
    {
       if (msg.sender != developer && msg.sender != operator) throw;
       _;
    }

   function disableBetting_only_Dev()
    onlyDeveloperOrOperator
    {
        ContractState=false;
    }


    function changeOperator(address newOperator) onlyDeveloper
    {
       operator = newOperator;
    }

    function enableBetting_only_Dev()
    onlyDeveloperOrOperator
    {
        ContractState=true;

    }

    event PlayerBet(uint256 gambleId, uint256 playerTokens);
    event EndGame(address player, uint8 result, uint256 gambleId);
    event SettingsChanged();
    event ErrorLog(address player, string message);
    event GasLog(string msg, uint256 level, uint256 gas);

   function totalBetValue(GameInfo memory g) private constant returns (uint256)
   {              
       uint256 totalBetsValue = 0; 
       uint8 nPlayerBetNo = 0;
       uint8 betsCount = uint8(bytes32(g.bets)[0]);

       for(uint8 i = 0; i < maxTypeBets;i++) 
        if (isBitSet(g.bets, i))
        {
          totalBetsValue += getBetValueByGamble(g, nPlayerBetNo+1, i);
          nPlayerBetNo++;

          if (betsCount == 1) break;
          betsCount--;          
        }

       return totalBetsValue;
   }

   function totalBetCount(GameInfo memory g) private constant returns (uint256)
   {              
       uint256 totalBets = 0; 
       for(uint8 i=0; i < maxTypeBets;i++) 
        if (isBitSet(g.bets, i)) totalBets++;          
       return totalBets;   
   }

   function placeBet(uint256 bets, bytes32 values1,bytes32 values2) public payable
   {
       if (ContractState == false)
       {
         ErrorLog(msg.sender, "ContractDisabled");
         if (msg.sender.send(msg.value) == false) throw;
         return;
       }

       var gamblesLength = gambles.length;

       if (gamblesLength > 0)
       {
          uint8 gamblesCountInCurrentBlock = 0;
          for(var i = gamblesLength - 1;i > 0; i--)
          {
            if (gambles[i].blockNumber == block.number) 
            {
               if (gambles[i].player == msg.sender)
               {
                   ErrorLog(msg.sender, "Play twice the same block");
                   if (msg.sender.send(msg.value) == false) throw;
                   return;
               }

               gamblesCountInCurrentBlock++;
               if (gamblesCountInCurrentBlock >= maxGamblesPerBlock)
               {
                  ErrorLog(msg.sender, "maxGamblesPerBlock");
                  if (msg.sender.send(msg.value) == false) throw;
                  return;
               }
            }
            else
            {
               break;
            }
          }
       }
       
       var _currentMaxBet = currentMaxBet;

       if (msg.value < _currentMaxBet/256 || bets == 0)
       {
          ErrorLog(msg.sender, "Wrong bet value");
          if (msg.sender.send(msg.value) == false) throw;
          return;
       }

       if (msg.value > _currentMaxBet)
       {
          ErrorLog(msg.sender, "Limit for table");
          if (msg.sender.send(msg.value) == false) throw;
          return;
       }

       GameInfo memory g = GameInfo(msg.sender, block.number, 37, bets, values1,values2);

       if (totalBetValue(g) != msg.value)
       {
          ErrorLog(msg.sender, "Wrong bet value");
          if (msg.sender.send(msg.value) == false) throw;
          return;
       }       

       address affiliate = 0;
       uint16 coef_affiliate = 0;
       uint16 coef_player;
       if (address(smartAffiliateContract) > 0)
       {        
         (affiliate, coef_affiliate, coef_player) = smartAffiliateContract.getAffiliateInfo(msg.sender);   
       }
       else
       {
         coef_player = CoefPlayerEmission;
       }

       uint256 playerTokens;
       uint8 errorCodeEmission;
       
       (playerTokens, errorCodeEmission) = smartToken.emission(msg.sender, affiliate, msg.value, coef_player, coef_affiliate);
       if (errorCodeEmission != 0)
       {
          if (errorCodeEmission == 1) 
            ErrorLog(msg.sender, "token operations stopped");
          else if (errorCodeEmission == 2) 
            ErrorLog(msg.sender, "contract is not in a games list");
          else if (errorCodeEmission == 3) 
            ErrorLog(msg.sender, "incorect player address");
          else if (errorCodeEmission == 4) 
            ErrorLog(msg.sender, "incorect value bet");
          else if (errorCodeEmission == 5) 
            ErrorLog(msg.sender, "incorect Coefficient emissions");
          
          if (msg.sender.send(msg.value) == false) throw;
          return;
       }

       gambles.push(g);

       PlayerBet(gamblesLength, playerTokens); 
   }

    function Invest() payable onlyDeveloper
    {      
    }

    function GetGameIndexesToProcess() public constant returns (uint256[64] gameIndexes)
    {           
      uint8 index = 0;
      for(int256 i = int256(gambles.length) - 1;i >= 0;i--)
      {      
         GameInfo memory g = gambles[uint256(i)];
         if (block.number - g.blockNumber >= 256) break;

         if (g.wheelResult == 37 && block.number >= g.blockNumber + BlockDelay)
         { 
            gameIndexes[index++] = uint256(i + 1);
         }
      }      
    }

    uint256 lastBlockGamesProcessed;

    function ProcessGames(uint256[] gameIndexes, bool simulate) 
    {
      if (!simulate)
      {
         if (lastBlockGamesProcessed == block.number)  return;
         lastBlockGamesProcessed = block.number;
      }

      uint8 delay = BlockDelay;
      uint256 length = gameIndexes.length;
      bool success = false;
      for(uint256 i = 0;i < length;i++)
      {      
         if (ProcessGame(gameIndexes[i], delay) == GameStatus.Success) success = true;         
      }      
      if (simulate && !success) throw;
    }
    
    function ProcessGameExt(uint256 index) public returns (GameStatus)
    {
      return ProcessGame(index, BlockDelay);
    }

    function ProcessGame(uint256 index, uint256 delay) private returns (GameStatus)
    {            
      GameInfo memory g = gambles[index];
      if (block.number - g.blockNumber >= 256) return GameStatus.Stop;

      if (g.wheelResult == 37 && block.number > g.blockNumber + delay)
      {            
         gambles[index].wheelResult = getRandomNumber(g.player, g.blockNumber);
                 
         uint256 playerWinnings = getGameResult(gambles[index]);
         if (playerWinnings > 0) 
         {
            if (g.player.send(playerWinnings) == false) throw;
         }

         EndGame(g.player, gambles[index].wheelResult, index);
         return GameStatus.Success;
      }

      return GameStatus.Skipped;
    }

    function getRandomNumber(address player, uint256 playerblock) private returns(uint8 wheelResult)
    {
        // block.blockhash - hash of the given block - only works for 256 most recent blocks excluding current
        bytes32 blockHash = block.blockhash(playerblock+BlockDelay); 
        
        if (blockHash==0) 
        {
          ErrorLog(msg.sender, "Cannot generate random number");
          wheelResult = 200;
        }
        else
        {
          bytes32 shaPlayer = sha3(player, blockHash);
    
          wheelResult = uint8(uint256(shaPlayer)%37);
        }    
    }

    function calculateRandomNumberByBlockhash(uint256 blockHash, address player) public constant returns (uint8 wheelResult) 
    { 
          bytes32 shaPlayer = sha3(player, blockHash);
    
          wheelResult = uint8(uint256(shaPlayer)%37);
    }

    function emergencyFixGameResult(uint64 gambleId, uint256 blockHash) onlyDeveloperOrOperator
    {
      // Probably this function will never be called, but
      // if game was not spinned in 256 blocks then block.blockhash will returns always 0 and 
      // we should fix this manually (you can check result with public function calculateRandomNumberByBlockhash)
      GameInfo memory gamble = gambles[gambleId];
      if (gamble.wheelResult != 200) throw;

      gambles[gambleId].wheelResult = calculateRandomNumberByBlockhash(blockHash, gamble.player);      

      uint256 playerWinnings = getGameResult(gambles[gambleId]);
      if (playerWinnings > 0)
      {
        if (gamble.player.send(playerWinnings) == false) throw;
      }      

      EndGame(gamble.player, gamble.wheelResult, gambleId);
    }


    function preliminaryGameResult(uint64 gambleIndex) constant returns (uint64 gambleId, address player, uint256 blockNumber, uint256 totalWin, uint8 wheelResult, uint256 bets, uint256 values1, uint256 values2, uint256 nTotalBetValue, uint256 nTotalBetCount) 
    { 
      GameInfo memory g = gambles[uint256(gambleIndex)];
      
      if (g.wheelResult == 37 && block.number > g.blockNumber + BlockDelay)
      {
         gambles[gambleIndex].wheelResult = getRandomNumber(g.player, g.blockNumber);
         return getGame(gambleIndex);
      }
      throw;      
    }

    // Preliminary game result before real transaction is mined
    function calcRandomNumberAndGetPreliminaryGameResult(uint256 blockHash, uint64 gambleIndex) constant returns (uint64 gambleId, address player, uint256 blockNumber, uint256 totalWin, uint8 wheelResult, uint256 bets, uint256 values1, uint256 values2, uint256 nTotalBetValue, uint256 nTotalBetCount)
    { 
      GameInfo memory g = gambles[uint256(gambleIndex)];      
      g.wheelResult = calculateRandomNumberByBlockhash(blockHash, g.player);      

      gambleId = gambleIndex;
      player = g.player;
      wheelResult = g.wheelResult;      
      totalWin = getGameResult(g);
      blockNumber = g.blockNumber;              
      nTotalBetValue = totalBetValue(g);
      nTotalBetCount = totalBetCount(g);
      bets = g.bets;
      values1 = uint256(g.values);
      values2 = uint256(g.values2);     
    }

    function getGameResult(GameInfo memory game) private constant returns (uint256 totalWin) 
    {
        totalWin = 0;
        uint8 nPlayerBetNo = 0;
        // we sent count bets at last byte 
        uint8 betsCount = uint8(bytes32(game.bets)[0]); 
        for(uint8 i=0; i<maxTypeBets; i++)
        {                      
            if (isBitSet(game.bets, i))
            {              
              var winMul = winMatrix.getCoeff(getIndex(i, game.wheelResult)); // get win coef
              if (winMul > 0) winMul++; // + return player bet
              totalWin += winMul * getBetValueByGamble(game, nPlayerBetNo+1,i);
              nPlayerBetNo++; 

              if (betsCount == 1) break;
              betsCount--;
            }
        }        
    }

    function getGame(uint64 index) constant returns (uint64 gambleId, address player, uint256 blockNumber, uint256 totalWin, uint8 wheelResult, uint256 bets, uint256 values1, uint256 values2, uint256 nTotalBetValue, uint256 nTotalBetCount) 
    {
        gambleId = index;
        player = gambles[index].player;
        totalWin = getGameResult(gambles[index]);
        blockNumber = gambles[index].blockNumber;        
        wheelResult = gambles[index].wheelResult;
        nTotalBetValue = totalBetValue(gambles[index]);
        nTotalBetCount = totalBetCount(gambles[index]);
        bets = gambles[index].bets;
        values1 = uint256(gambles[index].values);
        values2 = uint256(gambles[index].values2);        
    }

   function() 
   {
      throw;
   }
   

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"changeOperator","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint8[157]"}],"name":"changeMinBet","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint8[157]"}],"name":"changeMaxBet","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gambleId","type":"uint64"},{"name":"blockHash","type":"uint256"}],"name":"emergencyFixGameResult","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"bets","type":"uint256"},{"name":"values1","type":"bytes32"},{"name":"values2","type":"bytes32"}],"name":"placeBet","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"getTokenSettings","outputs":[{"name":"Coef_player","type":"uint16"},{"name":"BankrolLimit","type":"uint256"},{"name":"ProfitLimit","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalGames","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getDistributeProfitsInfo","outputs":[{"name":"lastProfit","type":"uint256"},{"name":"lastDate","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newCoef_player","type":"uint16"},{"name":"newBankrolLimit","type":"uint256"},{"name":"newProfitLimit","type":"uint256"}],"name":"changeTokenSettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint64"}],"name":"getGame","outputs":[{"name":"gambleId","type":"uint64"},{"name":"player","type":"address"},{"name":"blockNumber","type":"uint256"},{"name":"totalWin","type":"uint256"},{"name":"wheelResult","type":"uint8"},{"name":"bets","type":"uint256"},{"name":"values1","type":"uint256"},{"name":"values2","type":"uint256"},{"name":"nTotalBetValue","type":"uint256"},{"name":"nTotalBetCount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"contractAddress","type":"address"}],"name":"setSmartAffiliateContract","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"disableBetting_only_Dev","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deleteContract","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameIndexes","type":"uint256[]"},{"name":"simulate","type":"bool"}],"name":"ProcessGames","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"enableBetting_only_Dev","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getSettings","outputs":[{"name":"maxBet","type":"uint256"},{"name":"oneCredit","type":"uint256"},{"name":"_minCreditsOnBet","type":"uint8[157]"},{"name":"_maxCreditsOnBet","type":"uint8[157]"},{"name":"blockDelay","type":"uint8"},{"name":"contractState","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"profitDistributionContract","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"ProcessGameExt","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"blockHash","type":"uint256"},{"name":"player","type":"address"}],"name":"calculateRandomNumberByBlockhash","outputs":[{"name":"wheelResult","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gasValue","type":"uint256"}],"name":"distributeProfits","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"blockHash","type":"uint256"},{"name":"gambleIndex","type":"uint64"}],"name":"calcRandomNumberAndGetPreliminaryGameResult","outputs":[{"name":"gambleId","type":"uint64"},{"name":"player","type":"address"},{"name":"blockNumber","type":"uint256"},{"name":"totalWin","type":"uint256"},{"name":"wheelResult","type":"uint8"},{"name":"bets","type":"uint256"},{"name":"values1","type":"uint256"},{"name":"values2","type":"uint256"},{"name":"nTotalBetValue","type":"uint256"},{"name":"nTotalBetCount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"Invest","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"newMaxBet","type":"uint256"},{"name":"newBlockDelay","type":"uint8"}],"name":"changeSettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"GetGameIndexesToProcess","outputs":[{"name":"gameIndexes","type":"uint256[64]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"contractAddress","type":"address"}],"name":"setProfitDistributionContract","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"gambleIndex","type":"uint64"}],"name":"preliminaryGameResult","outputs":[{"name":"gambleId","type":"uint64"},{"name":"player","type":"address"},{"name":"blockNumber","type":"uint256"},{"name":"totalWin","type":"uint256"},{"name":"wheelResult","type":"uint8"},{"name":"bets","type":"uint256"},{"name":"values1","type":"uint256"},{"name":"values2","type":"uint256"},{"name":"nTotalBetValue","type":"uint256"},{"name":"nTotalBetCount","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":false,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gambleId","type":"uint256"},{"indexed":false,"name":"playerTokens","type":"uint256"}],"name":"PlayerBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"result","type":"uint8"},{"indexed":false,"name":"gambleId","type":"uint256"}],"name":"EndGame","type":"event"},{"anonymous":false,"inputs":[],"name":"SettingsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"message","type":"string"}],"name":"ErrorLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"level","type":"uint256"},{"indexed":false,"name":"gas","type":"uint256"}],"name":"GasLog","type":"event"}]

606060405234610000575b60008054600160a060020a03338116600160a060020a0319928316811784556001805490931617909155600380547c073d6621e9150bff9d1d450caad3c790b6f071f2000000000000000000604860020a60e860020a0319909116179081905560408051602090810185905281517f9eb9dd3b0000000000000000000000000000000000000000000000000000000081529151609d95690100000000000000000090940490941693639eb9dd3b936004808501948390030190829087803b156100005760325a03f1156100005750506040515161ffff169190911490506100f057610000565b60048054600160a060020a03191673cced5b8288086be8c38e23567e684c3740be4d48179055672386f26fc10000006002556001805460a060020a60ff0219167401000000000000000000000000000000000000000017905560038054604060020a60ff02196001604060020a03199091166005171668010000000000000000179055680f0425b0641f340000600a556802b5e3af16b1880000600b55600680547464000000000000000000000000000000000000000060a060020a61ffff02199091161790555b5b6127d380620001c96000396000f300606060405236156101385763ffffffff60e060020a60003504166306394c9b811461014a5780630672cce3146101655780630e6b5823146101a05780630f590c36146101db578063257bcd6a146101fa578063267127ec1461020d5780632c4e591b1461023d57806338f77d691461025c5780633aa5f4f714610282578063490419031461029e57806353c845261461031d578063580bdf3c146103385780635a58cd4c14610347578063665bcc3214610356578063750cae6a146103ac57806385b4bb53146103bb578063864329251461045c57806389abeb19146104855780638f4fb958146104b65780639a969768146104e8578063bd02e4f6146104fa578063c08199611461057c578063ce89a2a214610586578063d02528e61461059e578063eb5904c0146105e9578063fe73e3ec14610604575b34610000576101485b610000565b565b005b3461000057610148600160a060020a0360043516610683565b005b3461000057604080516113a0818101909252610148916004916113a4918390609d908390839080828437509395506106be945050505050565b005b3461000057604080516113a0818101909252610148916004916113a4918390609d908390839080828437509395506107c3945050505050565b005b346100005761014867ffffffffffffffff600435166024356108bf565b005b610148600435602435604435610b20565b005b346100005761021a611516565b6040805161ffff9094168452602084019290925282820152519081900360600190f35b346100005761024a611532565b60408051918252519081900360200190f35b3461000057610269611539565b6040805192835260208301919091528051918290030190f35b346100005761014861ffff60043516602435604435611544565b005b34610000576102b867ffffffffffffffff6004351661159b565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b3461000057610148600160a060020a036004351661186c565b005b34610000576101486118c2565b005b3461000057610148611910565b005b346100005761014860048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965050505091351515915061193a9050565b005b34610000576101486119dc565b005b34610000576103c8611a35565b6040805187815260208101879052908101856113a08083835b80518252602083111561040157601f1990920191602091820191016103e1565b505050919091019050846113a08083835b80518252602083111561043257601f199092019160209182019101610412565b50505060ff9095169190940190815291151560208301525060408051918290030195509350505050f35b3461000057610469611b3e565b60408051600160a060020a039092168252519081900360200190f35b3461000057610495600435611b4d565b6040518082600281116100005760ff16815260200191505060405180910390f35b34610000576104d2600435600160a060020a0360243516611b70565b6040805160ff9092168252519081900360200190f35b3461000057610148600435611bb2565b005b34610000576102b860043567ffffffffffffffff60243516611c6b565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b610148611daf565b005b346100005761014860043560ff60243516611dce565b005b34610000576105ab611e61565b60405180826108008083835b8051825260208311156105d757601f1990920191602091820191016105b7565b50505090500191505060405180910390f35b3461000057610148600160a060020a0360043516611faa565b005b34610000576102b867ffffffffffffffff60043516612000565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b60005433600160a060020a0390811691161461069e57610000565b60018054600160a060020a031916600160a060020a0383161790555b5b50565b6000805433600160a060020a039081169116146106da57610000565b5060005b609d8160ff161015610794576000828260ff16609d81101561000057602002015160ff16111561078a57818160ff16609d81101561000057602002015160ff1660ff14156107455760ff81166000908152600760205260409020805460ff1916905561078a565b818160ff16609d811015610000576020020151600760008360ff1660ff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b5b5b6001016106de565b6040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5050565b6000805433600160a060020a039081169116146107df57610000565b5060005b609d8160ff161015610794576000828260ff16609d81101561000057602002015160ff16111561088657818160ff16609d81101561000057602002015160ff1660ff141561084a5760ff81166000908152600860205260409020805460ff19169055610886565b818160ff16609d811015610000576020908102919091015160ff838116600090815260089093526040909220805460ff19169183039092161790555b5b5b6001016107e3565b6040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052815490919033600160a060020a03908116911614801590610920575060015433600160a060020a03908116911614155b1561092a57610000565b60098467ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff16918101829052600383015460608201526004830154608082015260059092015460a083015290925060c8146109af57610000565b6109bd838360000151611b70565b60098567ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060020160006101000a81548160ff021916908360ff160217905550610a7f60098567ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b90506000811115610abe578151604051600160a060020a039091169082156108fc029083906000818181858888f115159350610abe9250505057610000565b5b81516040808401518151600160a060020a03909316835260ff16602083015267ffffffffffffffff861682820152517f38a332eb3aa0f3c1f4139e60234dbd0ad329da0a423413df4ca5936f2f733d819181900360600190a15b5b50505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052600354829182918291908290819081908190819068010000000000000000900460ff161515610c0c5760408051600160a060020a0333168152602081018290526010818301527f436f6e747261637444697361626c656400000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b600954995060008a1115610de6576000985060018a0397505b6000881115610de65743600989815481101561000057906000526020600020906006020160005b50600101541415610dd45733600160a060020a0316600989815481101561000057906000526020600020906006020160005b5054600160a060020a03161415610d215760408051600160a060020a0333168152602081018290526019818301527f506c6179207477696365207468652073616d6520626c6f636b00000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b60035460019099019867ffffffffffffffff1660ff8a1610610dcf5760408051600160a060020a0333168152602081018290526012818301527f6d617847616d626c6573506572426c6f636b0000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b610dd9565b610de6565b5b60001990970196610c25565b5b60025496506101008704341080610dfc57508c155b15610e935760408051600160a060020a033316815260208101829052600f818301527f57726f6e67206265742076616c75650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b86341115610f2d5760408051600160a060020a033316815260208101829052600f818301527f4c696d697420666f72207461626c650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b6040805160c081018252600160a060020a0333168152436020820152602591810191909152606081018e9052608081018d905260a081018c9052955034610f7387612299565b1461100a5760408051600160a060020a033316815260208101829052600f818301527f57726f6e67206265742076616c75650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b60065460009550859450600160a060020a0316849011156110ba57600654604080516000606091820181905282517f7a8df1b9000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519390941693637a8df1b9936024808301949391928390030190829087803b156100005760325a03f11561000057505060408051805160208201519190920151919750955093506110cb9050565b60065460a060020a900461ffff1692505b6004805460408051600090820181905281517f0f762cfe000000000000000000000000000000000000000000000000000000008152600160a060020a0333811695820195909552898516602482015234604482015261ffff88811660648301528916608482015282519490931693630f762cfe9360a48082019493918390030190829087803b156100005760325a03f115610000575050604051805160209091015190935091505060ff8116156113d7578060ff16600114156111ea5760408051600160a060020a0333168152602081018290526018818301527f746f6b656e206f7065726174696f6e732073746f707065640000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600214156112585760408051600160a060020a033316815260208101829052601f818301527f636f6e7472616374206973206e6f7420696e20612067616d6573206c69737400606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600314156112c65760408051600160a060020a0333168152602081018290526017818301527f696e636f7265637420706c617965722061646472657373000000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600414156113345760408051600160a060020a0333168152602081018290526012818301527f696e636f726563742076616c7565206265740000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff166005141561139e5760408051600160a060020a033316815260208101829052601e818301527f696e636f7265637420436f656666696369656e7420656d697373696f6e730000606082015290516000805160206127888339815191529181900360800190a15b5b5b5b5b604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b600980548060010182818154818355818115116114535760060281600602836000526020600020918201910161145391905b8082111561144f578054600160a060020a031916815560006001820181905560028201805460ff1916905560038201819055600482018190556005820155600601611409565b5090565b5b505050916000526020600020906006020160005b5087518154600160a060020a031916600160a060020a0390911617815560208089015160018301556040808a015160028401805460ff191660ff90921691909117905560608a0151600384015560808a0151600484015560a08a015160059093019290925581518d815290810185905281517f8a0f1e52443beebd562effb53b94f903320af76cbdca2deb2d2bf01cf119d6dc93509081900390910190a15b50505050505050505050505050565b600654600a54600b5460a060020a90920461ffff16915b909192565b6009545b90565b600c54600d545b9091565b60005433600160a060020a0390811691161461155f57610000565b6006805475ffff0000000000000000000000000000000000000000191660a060020a61ffff861602179055600a829055600b8190555b5b505050565b60006000600060006000600060006000600060008a995060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b505460098054600160a060020a039092169a506116699167ffffffffffffffff8e169081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b965060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060010154975060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b50600201546009805460ff909216975061174d9167ffffffffffffffff8e169081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a0820152612299565b91506117ce60098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a0820152612316565b905060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060030154945060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506004015460019004935060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506005015492505b9193959799509193959799565b60005433600160a060020a0390811691161461188757610000565b6006546000600160a060020a0390911611156118a257610000565b60068054600160a060020a031916600160a060020a0383161790555b5b50565b60005433600160a060020a039081169116148015906118f0575060015433600160a060020a03908116911614155b156118fa57610000565b6003805468ff0000000000000000191690555b5b565b60005433600160a060020a0390811691161461192b57610000565b33600160a060020a0316ff5b5b565b600060006000600084151561195d5743600e541415611958576119d3565b43600e555b5050600154845160a060020a90910460ff16925090506000805b828110156119be5760006119a28783815181101561000057906020019060200201518660ff16612355565b600281116100005714156119b557600191505b5b600101611977565b8480156119c9575081155b156119d357610000565b5b505050505050565b60005433600160a060020a03908116911614801590611a0a575060015433600160a060020a03908116911614155b15611a1457610000565b6003805468ff00000000000000001916680100000000000000001790555b5b565b600060006113a060405190810160405280609d905b600081526000199091019060200181611a4a575050604080516113a08101909152609d815b600081526000199091019060200181611a6f5750506002546001549094506101008504935060a060020a900460ff166000805b609d60ff82161015611b205760ff808216600081815260076020526040902054909116600101908690609d8110156100005760ff92831660209182029290920191909152828216600081815260089092526040909120548216909103908590609d8110156100005760ff90921660209290920201525b600101611aa2565b60035468010000000000000000900460ff1691505b50909192939495565b600554600160a060020a031681565b600154600090611b6890839060a060020a900460ff16612355565b90505b919050565b604080516c01000000000000000000000000600160a060020a0384160281526014810184905290519081900360340190206000906025810691505b5092915050565b6000805433600160a060020a03908116911614801590611be1575060015433600160a060020a03908116911614155b15611beb57610000565b6005546000600160a060020a03909116118015611c185750600b54600a540130600160a060020a03163110155b156107be5750600a54600554604051600160a060020a033081163193909303929190911690839083906000818181858888f115159350611c5b9250505057610000565b600c81905542600d555b5b5b5050565b600060006000600060006000600060006000600060c0604051908101604052806000600160a060020a0316815260200160008152602001600060ff16815260200160008152602001600060001916815260200160006000191681525060098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a031680825260018401546020830152600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a0830152909150611d4d908e90611b70565b60ff166040820181905281518d9c509a509650611d698161217f565b975080602001519850611d7b81612299565b9250611d8681612316565b6060820151608083015160a08401519198509650945091505b509295989b9194979a5092959850565b60005433600160a060020a0390811691161461014657610000565b5b5b565b60005433600160a060020a03908116911614611de957610000565b6001805474ff0000000000000000000000000000000000000000191660a060020a60ff841602179055600254672386f26fc1000000928390049092029182146107be5760028290556040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5b5050565b604080516108008101825290815b6000815260200190600190039081611e6f5750506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260095460001901905b60008212611fa357600982815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a03168152600183015460208201819052600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a0830152909150610100439190910310611f4957611fa3565b806040015160ff166025148015611f735750600154602082015160a060020a90910460ff16014310155b15611f965781600101848480600101955060ff1660408110156100005760200201525b5b60001990910190611ebd565b5b50505090565b60005433600160a060020a03908116911614611fc557610000565b6005546000600160a060020a039091161115611fe057610000565b60058054600160a060020a031916600160a060020a0383161790555b5b50565b600060006000600060006000600060006000600060c0604051908101604052806000600160a060020a0316815260200160008152602001600060ff16815260200160008152602001600060001916815260200160006000191681525060098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff16918101829052600383015460608201526004830154608082015260059092015460a083015290915060251480156120f65750600154602082015160a060020a90910460ff160143115b156101415761210d816000015182602001516125bc565b60098d67ffffffffffffffff16815481101561000057906000526020600020906006020160005b50600201805460ff191660ff929092169190911790556121538c61159b565b9a509a509a509a509a509a509a509a509a509a50612171565b610000565b509193959799509193959799565b6060810151600090819060f860020a90821a81020481805b609d60ff8316101561228f576121b186606001518361267f565b1561228357600360099054906101000a9004600160a060020a0316600160a060020a03166303ee8f086121ee8460ff16896040015160ff1661268f565b6000604051602001526040518263ffffffff1660e060020a028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b156100005760325a03f115610000575050604051519150506000811115612251576001015b61225f8685600101846126a7565b8102949094019360019384019360ff8416141561227b5761228f565b600019909201915b5b600190910190612197565b5b50505050919050565b60608101516000908190819060f860020a90821a810204815b609d60ff82161015612309576122cc86606001518261267f565b15612300576122df8684600101836126a7565b9093019260019283019260ff831614156122f857612309565b600019909101905b5b6001016122b2565b8394505b50505050919050565b600080805b609d60ff8216101561234a5761233584606001518261267f565b15612341576001909101905b5b60010161231b565b8192505b5050919050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260098054839190869081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a03168152600183015460208201819052600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a083015290925061010043919091031061241257600292506125b4565b816040015160ff16602514801561242e57508382602001510143115b156125af57612445826000015183602001516125bc565b600986815481101561000057906000526020600020906006020160005b5060020160006101000a81548160ff021916908360ff1602179055506124f3600986815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b90506000811115612532578151604051600160a060020a039091169082156108fc029083906000818181858888f1151593506125329250505057610000565b5b7f38a332eb3aa0f3c1f4139e60234dbd0ad329da0a423413df4ca5936f2f733d818260000151600987815481101561000057906000526020600020906006020160005b506002015460408051600160a060020a03909316835260ff9091166020830152818101889052519081900360600190a1600092506125b4565b600192505b505092915050565b60015460009060a060020a900460ff168201408181151561263d5760408051600160a060020a033316815260208101829052601d818301527f43616e6e6f742067656e65726174652072616e646f6d206e756d626572000000606082015290516000805160206127888339815191529181900360800190a160c892506125b4565b50604080516c01000000000000000000000000600160a060020a0387160281526014810183905290519081900360340190206025810692505b5b505092915050565b600281900a821615155b92915050565b60008160010183600101610100020190505b92915050565b6000602060ff8416116126ca576126c3846080015184846126fa565b90506126f3565b604060ff841611610141576126c38460a0015160208503846126fa565b90506126f3565b610000565b9392505050565b60006000848460200360ff1660208110156100005760ff808616600090815260076020526040902054600160f860020a9490931a84029390930482019350918216011681101561274957610000565b60ff838116600090815260086020526040902054166101000361ffff1681111561277257610000565b6002546101009082020491505b50939250505056003811264a3dc641fd8e586a867055d4058a1592a7d5d8c41027c42b03a762c7eba165627a7a72305820a3eb481f3a7d35ecb53e1767d0cc54c5bca56b7fe092f961faaf7e8194858d8b0029

Deployed Bytecode

0x606060405236156101385763ffffffff60e060020a60003504166306394c9b811461014a5780630672cce3146101655780630e6b5823146101a05780630f590c36146101db578063257bcd6a146101fa578063267127ec1461020d5780632c4e591b1461023d57806338f77d691461025c5780633aa5f4f714610282578063490419031461029e57806353c845261461031d578063580bdf3c146103385780635a58cd4c14610347578063665bcc3214610356578063750cae6a146103ac57806385b4bb53146103bb578063864329251461045c57806389abeb19146104855780638f4fb958146104b65780639a969768146104e8578063bd02e4f6146104fa578063c08199611461057c578063ce89a2a214610586578063d02528e61461059e578063eb5904c0146105e9578063fe73e3ec14610604575b34610000576101485b610000565b565b005b3461000057610148600160a060020a0360043516610683565b005b3461000057604080516113a0818101909252610148916004916113a4918390609d908390839080828437509395506106be945050505050565b005b3461000057604080516113a0818101909252610148916004916113a4918390609d908390839080828437509395506107c3945050505050565b005b346100005761014867ffffffffffffffff600435166024356108bf565b005b610148600435602435604435610b20565b005b346100005761021a611516565b6040805161ffff9094168452602084019290925282820152519081900360600190f35b346100005761024a611532565b60408051918252519081900360200190f35b3461000057610269611539565b6040805192835260208301919091528051918290030190f35b346100005761014861ffff60043516602435604435611544565b005b34610000576102b867ffffffffffffffff6004351661159b565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b3461000057610148600160a060020a036004351661186c565b005b34610000576101486118c2565b005b3461000057610148611910565b005b346100005761014860048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965050505091351515915061193a9050565b005b34610000576101486119dc565b005b34610000576103c8611a35565b6040805187815260208101879052908101856113a08083835b80518252602083111561040157601f1990920191602091820191016103e1565b505050919091019050846113a08083835b80518252602083111561043257601f199092019160209182019101610412565b50505060ff9095169190940190815291151560208301525060408051918290030195509350505050f35b3461000057610469611b3e565b60408051600160a060020a039092168252519081900360200190f35b3461000057610495600435611b4d565b6040518082600281116100005760ff16815260200191505060405180910390f35b34610000576104d2600435600160a060020a0360243516611b70565b6040805160ff9092168252519081900360200190f35b3461000057610148600435611bb2565b005b34610000576102b860043567ffffffffffffffff60243516611c6b565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b610148611daf565b005b346100005761014860043560ff60243516611dce565b005b34610000576105ab611e61565b60405180826108008083835b8051825260208311156105d757601f1990920191602091820191016105b7565b50505090500191505060405180910390f35b3461000057610148600160a060020a0360043516611faa565b005b34610000576102b867ffffffffffffffff60043516612000565b6040805167ffffffffffffffff909b168b52600160a060020a0390991660208b015289890197909752606089019590955260ff909316608088015260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b60005433600160a060020a0390811691161461069e57610000565b60018054600160a060020a031916600160a060020a0383161790555b5b50565b6000805433600160a060020a039081169116146106da57610000565b5060005b609d8160ff161015610794576000828260ff16609d81101561000057602002015160ff16111561078a57818160ff16609d81101561000057602002015160ff1660ff14156107455760ff81166000908152600760205260409020805460ff1916905561078a565b818160ff16609d811015610000576020020151600760008360ff1660ff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b5b5b6001016106de565b6040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5050565b6000805433600160a060020a039081169116146107df57610000565b5060005b609d8160ff161015610794576000828260ff16609d81101561000057602002015160ff16111561088657818160ff16609d81101561000057602002015160ff1660ff141561084a5760ff81166000908152600860205260409020805460ff19169055610886565b818160ff16609d811015610000576020908102919091015160ff838116600090815260089093526040909220805460ff19169183039092161790555b5b5b6001016107e3565b6040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052815490919033600160a060020a03908116911614801590610920575060015433600160a060020a03908116911614155b1561092a57610000565b60098467ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff16918101829052600383015460608201526004830154608082015260059092015460a083015290925060c8146109af57610000565b6109bd838360000151611b70565b60098567ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060020160006101000a81548160ff021916908360ff160217905550610a7f60098567ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b90506000811115610abe578151604051600160a060020a039091169082156108fc029083906000818181858888f115159350610abe9250505057610000565b5b81516040808401518151600160a060020a03909316835260ff16602083015267ffffffffffffffff861682820152517f38a332eb3aa0f3c1f4139e60234dbd0ad329da0a423413df4ca5936f2f733d819181900360600190a15b5b50505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052600354829182918291908290819081908190819068010000000000000000900460ff161515610c0c5760408051600160a060020a0333168152602081018290526010818301527f436f6e747261637444697361626c656400000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b600954995060008a1115610de6576000985060018a0397505b6000881115610de65743600989815481101561000057906000526020600020906006020160005b50600101541415610dd45733600160a060020a0316600989815481101561000057906000526020600020906006020160005b5054600160a060020a03161415610d215760408051600160a060020a0333168152602081018290526019818301527f506c6179207477696365207468652073616d6520626c6f636b00000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b60035460019099019867ffffffffffffffff1660ff8a1610610dcf5760408051600160a060020a0333168152602081018290526012818301527f6d617847616d626c6573506572426c6f636b0000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b610dd9565b610de6565b5b60001990970196610c25565b5b60025496506101008704341080610dfc57508c155b15610e935760408051600160a060020a033316815260208101829052600f818301527f57726f6e67206265742076616c75650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b86341115610f2d5760408051600160a060020a033316815260208101829052600f818301527f4c696d697420666f72207461626c650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b6040805160c081018252600160a060020a0333168152436020820152602591810191909152606081018e9052608081018d905260a081018c9052955034610f7387612299565b1461100a5760408051600160a060020a033316815260208101829052600f818301527f57726f6e67206265742076616c75650000000000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a1604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b60065460009550859450600160a060020a0316849011156110ba57600654604080516000606091820181905282517f7a8df1b9000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015293519390941693637a8df1b9936024808301949391928390030190829087803b156100005760325a03f11561000057505060408051805160208201519190920151919750955093506110cb9050565b60065460a060020a900461ffff1692505b6004805460408051600090820181905281517f0f762cfe000000000000000000000000000000000000000000000000000000008152600160a060020a0333811695820195909552898516602482015234604482015261ffff88811660648301528916608482015282519490931693630f762cfe9360a48082019493918390030190829087803b156100005760325a03f115610000575050604051805160209091015190935091505060ff8116156113d7578060ff16600114156111ea5760408051600160a060020a0333168152602081018290526018818301527f746f6b656e206f7065726174696f6e732073746f707065640000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600214156112585760408051600160a060020a033316815260208101829052601f818301527f636f6e7472616374206973206e6f7420696e20612067616d6573206c69737400606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600314156112c65760408051600160a060020a0333168152602081018290526017818301527f696e636f7265637420706c617965722061646472657373000000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff16600414156113345760408051600160a060020a0333168152602081018290526012818301527f696e636f726563742076616c7565206265740000000000000000000000000000606082015290516000805160206127888339815191529181900360800190a161139e565b8060ff166005141561139e5760408051600160a060020a033316815260208101829052601e818301527f696e636f7265637420436f656666696369656e7420656d697373696f6e730000606082015290516000805160206127888339815191529181900360800190a15b5b5b5b5b604051600160a060020a033316903480156108fc02916000818181858888f115159350610c079250505057610000565b611507565b600980548060010182818154818355818115116114535760060281600602836000526020600020918201910161145391905b8082111561144f578054600160a060020a031916815560006001820181905560028201805460ff1916905560038201819055600482018190556005820155600601611409565b5090565b5b505050916000526020600020906006020160005b5087518154600160a060020a031916600160a060020a0390911617815560208089015160018301556040808a015160028401805460ff191660ff90921691909117905560608a0151600384015560808a0151600484015560a08a015160059093019290925581518d815290810185905281517f8a0f1e52443beebd562effb53b94f903320af76cbdca2deb2d2bf01cf119d6dc93509081900390910190a15b50505050505050505050505050565b600654600a54600b5460a060020a90920461ffff16915b909192565b6009545b90565b600c54600d545b9091565b60005433600160a060020a0390811691161461155f57610000565b6006805475ffff0000000000000000000000000000000000000000191660a060020a61ffff861602179055600a829055600b8190555b5b505050565b60006000600060006000600060006000600060008a995060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b505460098054600160a060020a039092169a506116699167ffffffffffffffff8e169081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b965060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060010154975060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b50600201546009805460ff909216975061174d9167ffffffffffffffff8e169081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a0820152612299565b91506117ce60098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a0820152612316565b905060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b5060030154945060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506004015460019004935060098b67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506005015492505b9193959799509193959799565b60005433600160a060020a0390811691161461188757610000565b6006546000600160a060020a0390911611156118a257610000565b60068054600160a060020a031916600160a060020a0383161790555b5b50565b60005433600160a060020a039081169116148015906118f0575060015433600160a060020a03908116911614155b156118fa57610000565b6003805468ff0000000000000000191690555b5b565b60005433600160a060020a0390811691161461192b57610000565b33600160a060020a0316ff5b5b565b600060006000600084151561195d5743600e541415611958576119d3565b43600e555b5050600154845160a060020a90910460ff16925090506000805b828110156119be5760006119a28783815181101561000057906020019060200201518660ff16612355565b600281116100005714156119b557600191505b5b600101611977565b8480156119c9575081155b156119d357610000565b5b505050505050565b60005433600160a060020a03908116911614801590611a0a575060015433600160a060020a03908116911614155b15611a1457610000565b6003805468ff00000000000000001916680100000000000000001790555b5b565b600060006113a060405190810160405280609d905b600081526000199091019060200181611a4a575050604080516113a08101909152609d815b600081526000199091019060200181611a6f5750506002546001549094506101008504935060a060020a900460ff166000805b609d60ff82161015611b205760ff808216600081815260076020526040902054909116600101908690609d8110156100005760ff92831660209182029290920191909152828216600081815260089092526040909120548216909103908590609d8110156100005760ff90921660209290920201525b600101611aa2565b60035468010000000000000000900460ff1691505b50909192939495565b600554600160a060020a031681565b600154600090611b6890839060a060020a900460ff16612355565b90505b919050565b604080516c01000000000000000000000000600160a060020a0384160281526014810184905290519081900360340190206000906025810691505b5092915050565b6000805433600160a060020a03908116911614801590611be1575060015433600160a060020a03908116911614155b15611beb57610000565b6005546000600160a060020a03909116118015611c185750600b54600a540130600160a060020a03163110155b156107be5750600a54600554604051600160a060020a033081163193909303929190911690839083906000818181858888f115159350611c5b9250505057610000565b600c81905542600d555b5b5b5050565b600060006000600060006000600060006000600060c0604051908101604052806000600160a060020a0316815260200160008152602001600060ff16815260200160008152602001600060001916815260200160006000191681525060098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a031680825260018401546020830152600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a0830152909150611d4d908e90611b70565b60ff166040820181905281518d9c509a509650611d698161217f565b975080602001519850611d7b81612299565b9250611d8681612316565b6060820151608083015160a08401519198509650945091505b509295989b9194979a5092959850565b60005433600160a060020a0390811691161461014657610000565b5b5b565b60005433600160a060020a03908116911614611de957610000565b6001805474ff0000000000000000000000000000000000000000191660a060020a60ff841602179055600254672386f26fc1000000928390049092029182146107be5760028290556040517f85a52584e2a604db198ab2f447cba2fc038a972048381c24b40219ef7a83df7090600090a15b5b5b5050565b604080516108008101825290815b6000815260200190600190039081611e6f5750506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260095460001901905b60008212611fa357600982815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a03168152600183015460208201819052600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a0830152909150610100439190910310611f4957611fa3565b806040015160ff166025148015611f735750600154602082015160a060020a90910460ff16014310155b15611f965781600101848480600101955060ff1660408110156100005760200201525b5b60001990910190611ebd565b5b50505090565b60005433600160a060020a03908116911614611fc557610000565b6005546000600160a060020a039091161115611fe057610000565b60058054600160a060020a031916600160a060020a0383161790555b5b50565b600060006000600060006000600060006000600060c0604051908101604052806000600160a060020a0316815260200160008152602001600060ff16815260200160008152602001600060001916815260200160006000191681525060098c67ffffffffffffffff16815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff16918101829052600383015460608201526004830154608082015260059092015460a083015290915060251480156120f65750600154602082015160a060020a90910460ff160143115b156101415761210d816000015182602001516125bc565b60098d67ffffffffffffffff16815481101561000057906000526020600020906006020160005b50600201805460ff191660ff929092169190911790556121538c61159b565b9a509a509a509a509a509a509a509a509a509a50612171565b610000565b509193959799509193959799565b6060810151600090819060f860020a90821a81020481805b609d60ff8316101561228f576121b186606001518361267f565b1561228357600360099054906101000a9004600160a060020a0316600160a060020a03166303ee8f086121ee8460ff16896040015160ff1661268f565b6000604051602001526040518263ffffffff1660e060020a028152600401808261ffff1661ffff168152602001915050602060405180830381600087803b156100005760325a03f115610000575050604051519150506000811115612251576001015b61225f8685600101846126a7565b8102949094019360019384019360ff8416141561227b5761228f565b600019909201915b5b600190910190612197565b5b50505050919050565b60608101516000908190819060f860020a90821a810204815b609d60ff82161015612309576122cc86606001518261267f565b15612300576122df8684600101836126a7565b9093019260019283019260ff831614156122f857612309565b600019909101905b5b6001016122b2565b8394505b50505050919050565b600080805b609d60ff8216101561234a5761233584606001518261267f565b15612341576001909101905b5b60010161231b565b8192505b5050919050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260098054839190869081101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a03168152600183015460208201819052600284015460ff1692820192909252600383015460608201526004830154608082015260059092015460a083015290925061010043919091031061241257600292506125b4565b816040015160ff16602514801561242e57508382602001510143115b156125af57612445826000015183602001516125bc565b600986815481101561000057906000526020600020906006020160005b5060020160006101000a81548160ff021916908360ff1602179055506124f3600986815481101561000057906000526020600020906006020160005b506040805160c0810182528254600160a060020a0316815260018301546020820152600283015460ff1691810191909152600382015460608201526004820154608082015260059091015460a082015261217f565b90506000811115612532578151604051600160a060020a039091169082156108fc029083906000818181858888f1151593506125329250505057610000565b5b7f38a332eb3aa0f3c1f4139e60234dbd0ad329da0a423413df4ca5936f2f733d818260000151600987815481101561000057906000526020600020906006020160005b506002015460408051600160a060020a03909316835260ff9091166020830152818101889052519081900360600190a1600092506125b4565b600192505b505092915050565b60015460009060a060020a900460ff168201408181151561263d5760408051600160a060020a033316815260208101829052601d818301527f43616e6e6f742067656e65726174652072616e646f6d206e756d626572000000606082015290516000805160206127888339815191529181900360800190a160c892506125b4565b50604080516c01000000000000000000000000600160a060020a0387160281526014810183905290519081900360340190206025810692505b5b505092915050565b600281900a821615155b92915050565b60008160010183600101610100020190505b92915050565b6000602060ff8416116126ca576126c3846080015184846126fa565b90506126f3565b604060ff841611610141576126c38460a0015160208503846126fa565b90506126f3565b610000565b9392505050565b60006000848460200360ff1660208110156100005760ff808616600090815260076020526040902054600160f860020a9490931a84029390930482019350918216011681101561274957610000565b60ff838116600090815260086020526040902054166101000361ffff1681111561277257610000565b6002546101009082020491505b50939250505056003811264a3dc641fd8e586a867055d4058a1592a7d5d8c41027c42b03a762c7eba165627a7a72305820a3eb481f3a7d35ecb53e1767d0cc54c5bca56b7fe092f961faaf7e8194858d8b0029

Swarm Source

bzzr://a3eb481f3a7d35ecb53e1767d0cc54c5bca56b7fe092f961faaf7e8194858d8b

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.