ETH Price: $2,491.49 (-1.28%)

Contract

0xC3b643bb85318B6a0e1B46c30365AdAcDF9469C2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer103586382020-06-29 4:38:521524 days ago1593405532IN
0xC3b643bb...cDF9469C2
0.2 ETH0.0031535
Transfer102319292020-06-09 14:03:551544 days ago1591711435IN
0xC3b643bb...cDF9469C2
0.00205 ETH0.00069333
Transfer78562212019-05-29 18:51:431921 days ago1559155903IN
0xC3b643bb...cDF9469C2
0.25 ETH0.030414944
Transfer66313922018-11-02 19:20:442129 days ago1541186444IN
0xC3b643bb...cDF9469C2
0.001 ETH0.000055442.64
Transfer62889112018-09-07 15:10:182185 days ago1536333018IN
0xC3b643bb...cDF9469C2
0.25 ETH0.00151260
Transfer50092982018-02-01 3:30:132404 days ago1517455813IN
0xC3b643bb...cDF9469C2
0.24 ETH0.0003197212.6875
Transfer46140802017-11-24 16:16:202472 days ago1511540180IN
0xC3b643bb...cDF9469C2
0.0016 ETH0.00050420
Transfer46140702017-11-24 16:14:102472 days ago1511540050IN
0xC3b643bb...cDF9469C2
0.002 ETH0.001086
Transfer38128262017-06-03 7:37:572646 days ago1496475477IN
0xC3b643bb...cDF9469C2
0.221 ETH0.0037821
Execute Emergenc...30484612017-01-23 10:25:122777 days ago1485167112IN
0xC3b643bb...cDF9469C2
0 ETH0.0010101541
Vote Emergency W...30289152017-01-20 4:43:532780 days ago1484887433IN
0xC3b643bb...cDF9469C2
0 ETH0.0018391741
Propose Emergenc...30289072017-01-20 4:42:062780 days ago1484887326IN
0xC3b643bb...cDF9469C2
0 ETH0.0029018941
Stop Contract30288982017-01-20 4:39:382780 days ago1484887178IN
0xC3b643bb...cDF9469C2
0 ETH0.0011477541
Vote Emergency W...30104132017-01-17 3:30:262784 days ago1484623826IN
0xC3b643bb...cDF9469C2
0 ETH0.0012341
New Investor30103692017-01-17 3:21:062784 days ago1484623266IN
0xC3b643bb...cDF9469C2
1 ETH0.0051855541
__callback30064032017-01-16 11:38:432784 days ago1484566723IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30063892017-01-16 11:34:342784 days ago1484566474IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30063242017-01-16 11:19:122784 days ago1484565552IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30063212017-01-16 11:17:552784 days ago1484565475IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30063152017-01-16 11:16:352784 days ago1484565395IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30062892017-01-16 11:11:072784 days ago1484565067IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30062762017-01-16 11:08:322784 days ago1484564912IN
0xC3b643bb...cDF9469C2
0 ETH0.0015421620
__callback30062762017-01-16 11:08:322784 days ago1484564912IN
0xC3b643bb...cDF9469C2
0 ETH0.001518420
__callback30062702017-01-16 11:06:092784 days ago1484564769IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
__callback30062672017-01-16 11:05:302784 days ago1484564730IN
0xC3b643bb...cDF9469C2
0 ETH0.0015434420
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
30484612017-01-23 10:25:122777 days ago1485167112
0xC3b643bb...cDF9469C2
2.35023967 ETH
30064032017-01-16 11:38:432784 days ago1484566723
0xC3b643bb...cDF9469C2
0.69255991 ETH
30063892017-01-16 11:34:342784 days ago1484566474
0xC3b643bb...cDF9469C2
0.69255991 ETH
30063242017-01-16 11:19:122784 days ago1484565552
0xC3b643bb...cDF9469C2
0.49255991 ETH
30063212017-01-16 11:17:552784 days ago1484565475
0xC3b643bb...cDF9469C2
0.21355991 ETH
30063152017-01-16 11:16:352784 days ago1484565395
0xC3b643bb...cDF9469C2
0.49048741 ETH
30062892017-01-16 11:11:072784 days ago1484565067
0xC3b643bb...cDF9469C2
0.39255991 ETH
30062762017-01-16 11:08:322784 days ago1484564912
0xC3b643bb...cDF9469C2
0.49255991 ETH
30062762017-01-16 11:08:322784 days ago1484564912
0xC3b643bb...cDF9469C2
0.49255991 ETH
30062702017-01-16 11:06:092784 days ago1484564769
0xC3b643bb...cDF9469C2
0.59255991 ETH
30062672017-01-16 11:05:302784 days ago1484564730
0xC3b643bb...cDF9469C2
0.22155991 ETH
30062652017-01-16 11:04:352784 days ago1484564675
0xC3b643bb...cDF9469C2
0.69048741 ETH
30062602017-01-16 11:03:002784 days ago1484564580
0xC3b643bb...cDF9469C2
0.65048741 ETH
30062532017-01-16 11:02:072784 days ago1484564527
0xC3b643bb...cDF9469C2
0.49255991 ETH
30062512017-01-16 11:01:312784 days ago1484564491
0xC3b643bb...cDF9469C2
0.69048741 ETH
30062242017-01-16 10:57:012784 days ago1484564221
0xC3b643bb...cDF9469C2
0.49255991 ETH
30062192017-01-16 10:55:252784 days ago1484564125
0xC3b643bb...cDF9469C2
0.49048741 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.00110994 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.22087901 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.00491301 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.97768948 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.11299928 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
22.48685816 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
0.02947807 ETH
29400812017-01-05 13:07:292795 days ago1483621649
0xC3b643bb...cDF9469C2
5.86613691 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Dice

Compiler Version
v0.4.6+commit.2dabbdf0

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2016-12-12
*/

pragma solidity ^0.4.0;

// <ORACLIZE_API>
/*
Copyright (c) 2015-2016 Oraclize SRL
Copyright (c) 2016 Oraclize LTD



Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:



The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0

contract OraclizeI {
    address public cbAddress;
    function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id);
    function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id);
    function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id);
    function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id);
    function getPrice(string _datasource) returns (uint _dsprice);
    function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice);
    function useCoupon(string _coupon);
    function setProofType(byte _proofType);
    function setConfig(bytes32 _config);
    function setCustomGasPrice(uint _gasPrice);
}
contract OraclizeAddrResolverI {
    function getAddress() returns (address _addr);
}
contract usingOraclize {
    uint constant day = 60*60*24;
    uint constant week = 60*60*24*7;
    uint constant month = 60*60*24*30;
    byte constant proofType_NONE = 0x00;
    byte constant proofType_TLSNotary = 0x10;
    byte constant proofStorage_IPFS = 0x01;
    uint8 constant networkID_auto = 0;
    uint8 constant networkID_mainnet = 1;
    uint8 constant networkID_testnet = 2;
    uint8 constant networkID_morden = 2;
    uint8 constant networkID_consensys = 161;

    OraclizeAddrResolverI OAR;
    
    OraclizeI oraclize;
    modifier oraclizeAPI {
        if(address(OAR)==0) oraclize_setNetwork(networkID_auto);
        oraclize = OraclizeI(OAR.getAddress());
        _;
    }
    modifier coupon(string code){
        oraclize = OraclizeI(OAR.getAddress());
        oraclize.useCoupon(code);
        _;
    }

    function oraclize_setNetwork(uint8 networkID) internal returns(bool){
        if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ //mainnet
            OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed);
            return true;
        }
        if (getCodeSize(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1)>0){ //ropsten testnet
            OAR = OraclizeAddrResolverI(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1);
            return true;
        }
        if (getCodeSize(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa)>0){ //browser-solidity
            OAR = OraclizeAddrResolverI(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa);
            return true;
        }
        return false;
    }
    
    function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(0, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(timestamp, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(0, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_cbAddress() oraclizeAPI internal returns (address){
        return oraclize.cbAddress();
    }
    function oraclize_setProof(byte proofP) oraclizeAPI internal {
        return oraclize.setProofType(proofP);
    }
    function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
        return oraclize.setCustomGasPrice(gasPrice);
    }    
    function oraclize_setConfig(bytes32 config) oraclizeAPI internal {
        return oraclize.setConfig(config);
    }

    function getCodeSize(address _addr) constant internal returns(uint _size) {
        assembly {
            _size := extcodesize(_addr)
        }
    }


    function parseAddr(string _a) internal returns (address){
        bytes memory tmp = bytes(_a);
        uint160 iaddr = 0;
        uint160 b1;
        uint160 b2;
        for (uint i=2; i<2+2*20; i+=2){
            iaddr *= 256;
            b1 = uint160(tmp[i]);
            b2 = uint160(tmp[i+1]);
            if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87;
            else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48;
            if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
            else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
            iaddr += (b1*16+b2);
        }
        return address(iaddr);
    }


    function strCompare(string _a, string _b) internal returns (int) {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        for (uint i = 0; i < minLength; i ++)
            if (a[i] < b[i])
                return -1;
            else if (a[i] > b[i])
                return 1;
        if (a.length < b.length)
            return -1;
        else if (a.length > b.length)
            return 1;
        else
            return 0;
   } 

    function indexOf(string _haystack, string _needle) internal returns (int)
    {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if(h.length < 1 || n.length < 1 || (n.length > h.length)) 
            return -1;
        else if(h.length > (2**128 -1))
            return -1;                                  
        else
        {
            uint subindex = 0;
            for (uint i = 0; i < h.length; i ++)
            {
                if (h[i] == n[0])
                {
                    subindex = 1;
                    while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex])
                    {
                        subindex++;
                    }   
                    if(subindex == n.length)
                        return int(i);
                }
            }
            return -1;
        }   
    }

    function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }
    
    function strConcat(string _a, string _b, string _c, string _d) internal returns (string) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string _a, string _b, string _c) internal returns (string) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string _a, string _b) internal returns (string) {
        return strConcat(_a, _b, "", "", "");
    }

    // parseInt
    function parseInt(string _a) internal returns (uint) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string _a, uint _b) internal returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                   if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }
    
    function uint2str(uint i) internal returns (string){
        if (i == 0) return "0";
        uint j = i;
        uint len;
        while (j != 0){
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (i != 0){
            bstr[k--] = byte(48 + i % 10);
            i /= 10;
        }
        return string(bstr);
    }
    
    

}
// </ORACLIZE_API>

contract Dice is usingOraclize {

    uint constant pwin = 1000; //probability of winning (10000 = 100%)
    uint constant edge = 190; //edge percentage (10000 = 100%)
    uint constant maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%)
    uint constant minBet = 200 finney;
    uint constant maxInvestors = 10; //maximum number of investors
    uint constant houseEdge = 25; //edge percentage (10000 = 100%)
    uint constant divestFee = 50; //divest fee percentage (10000 = 100%)
    uint constant emergencyWithdrawalRatio = 10; //ratio percentage (100 = 100%)

    uint safeGas = 2300;
    uint constant ORACLIZE_GAS_LIMIT = 175000;
    uint constant INVALID_BET_MARKER = 99999;
    uint constant EMERGENCY_TIMEOUT = 3 days;

    struct Investor {
        address investorAddress;
        uint amountInvested;
        bool votedForEmergencyWithdrawal;
    }

    struct Bet {
        address playerAddress;
        uint amountBet;
        uint numberRolled;
    }

    struct WithdrawalProposal {
        address toAddress;
        uint atTime;
    }

    //Starting at 1
    mapping(address => uint) public investorIDs;
    mapping(uint => Investor) public investors;
    uint public numInvestors = 0;

    uint public invested = 0;

    address public owner;
    address public houseAddress;
    bool public isStopped;

    WithdrawalProposal public proposedWithdrawal;

    mapping (bytes32 => Bet) public bets;
    bytes32[] public betsKeys;

    uint public investorsProfit = 0;
    uint public investorsLosses = 0;
    bool profitDistributed;

    event LOG_NewBet(address playerAddress, uint amount);
    event LOG_BetWon(address playerAddress, uint numberRolled, uint amountWon);
    event LOG_BetLost(address playerAddress, uint numberRolled);
    event LOG_EmergencyWithdrawalProposed();
    event LOG_EmergencyWithdrawalFailed(address withdrawalAddress);
    event LOG_EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn);
    event LOG_FailedSend(address receiver, uint amount);
    event LOG_ZeroSend();
    event LOG_InvestorEntrance(address investor, uint amount);
    event LOG_InvestorCapitalUpdate(address investor, int amount);
    event LOG_InvestorExit(address investor, uint amount);
    event LOG_ContractStopped();
    event LOG_ContractResumed();
    event LOG_OwnerAddressChanged(address oldAddr, address newOwnerAddress);
    event LOG_HouseAddressChanged(address oldAddr, address newHouseAddress);
    event LOG_GasLimitChanged(uint oldGasLimit, uint newGasLimit);
    event LOG_EmergencyAutoStop();
    event LOG_EmergencyWithdrawalVote(address investor, bool vote);
    event LOG_ValueIsTooBig();
    event LOG_SuccessfulSend(address addr, uint amount);

    function Dice() {
        oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
        owner = msg.sender;
        houseAddress = msg.sender;
    }

    //SECTION I: MODIFIERS AND HELPER FUNCTIONS

    //MODIFIERS

    modifier onlyIfNotStopped {
        if (isStopped) throw;
        _;
    }

    modifier onlyIfStopped {
        if (!isStopped) throw;
        _;
    }

    modifier onlyInvestors {
        if (investorIDs[msg.sender] == 0) throw;
        _;
    }

    modifier onlyNotInvestors {
        if (investorIDs[msg.sender] != 0) throw;
        _;
    }

    modifier onlyOwner {
        if (owner != msg.sender) throw;
        _;
    }

    modifier onlyOraclize {
        if (msg.sender != oraclize_cbAddress()) throw;
        _;
    }

    modifier onlyMoreThanMinInvestment {
        if (msg.value <= getMinInvestment()) throw;
        _;
    }

    modifier onlyMoreThanZero {
        if (msg.value == 0) throw;
        _;
    }

    modifier onlyIfBetExist(bytes32 myid) {
        if(bets[myid].playerAddress == address(0x0)) throw;
        _;
    }

    modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) {
        if ((((bets[myid].amountBet * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)  && (bets[myid].amountBet >= minBet)) {
             _;
        }
        else {
            bets[myid].numberRolled = INVALID_BET_MARKER;
            safeSend(bets[myid].playerAddress, bets[myid].amountBet);
            return;
        }
    }

    modifier onlyIfValidRoll(bytes32 myid, string result) {
        uint numberRolled = parseInt(result);
        if ((numberRolled < 1 || numberRolled > 10000) && bets[myid].numberRolled == 0) {
            bets[myid].numberRolled = INVALID_BET_MARKER;
            safeSend(bets[myid].playerAddress, bets[myid].amountBet);
            return;
        }
        _;
    }

    modifier onlyWinningBets(uint numberRolled) {
        if (numberRolled - 1 < pwin) {
            _;
        }
    }

    modifier onlyLosingBets(uint numberRolled) {
        if (numberRolled - 1 >= pwin) {
            _;
        }
    }

    modifier onlyAfterProposed {
        if (proposedWithdrawal.toAddress == 0) throw;
        _;
    }

    modifier onlyIfProfitNotDistributed {
        if (!profitDistributed) {
            _;
        }
    }

    modifier onlyIfValidGas(uint newGasLimit) {
        if (ORACLIZE_GAS_LIMIT + newGasLimit < ORACLIZE_GAS_LIMIT) throw;
        if (newGasLimit < 25000) throw;
        _;
    }

    modifier onlyIfNotProcessed(bytes32 myid) {
        if (bets[myid].numberRolled > 0) throw;
        _;
    }

    modifier onlyIfEmergencyTimeOutHasPassed {
        if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw;
        _;
    }

    modifier investorsInvariant {
        _;
        if (numInvestors > maxInvestors) throw;
    }

    //CONSTANT HELPER FUNCTIONS

    function getBankroll()
        constant
        returns(uint) {

        if ((invested < investorsProfit) ||
            (invested + investorsProfit < invested) ||
            (invested + investorsProfit < investorsLosses)) {
            return 0;
        }
        else {
            return invested + investorsProfit - investorsLosses;
        }
    }

    function getMinInvestment()
        constant
        returns(uint) {

        if (numInvestors == maxInvestors) {
            uint investorID = searchSmallestInvestor();
            return getBalance(investors[investorID].investorAddress);
        }
        else {
            return 0;
        }
    }

    function getStatus()
        constant
        returns(uint, uint, uint, uint, uint, uint, uint, uint) {

        uint bankroll = getBankroll();
        uint minInvestment = getMinInvestment();
        return (bankroll, pwin, edge, maxWin, minBet, (investorsProfit - investorsLosses), minInvestment, betsKeys.length);
    }

    function getBet(uint id)
        constant
        returns(address, uint, uint) {

        if (id < betsKeys.length) {
            bytes32 betKey = betsKeys[id];
            return (bets[betKey].playerAddress, bets[betKey].amountBet, bets[betKey].numberRolled);
        }
    }

    function numBets()
        constant
        returns(uint) {

        return betsKeys.length;
    }

    function getMinBetAmount()
        constant
        returns(uint) {

        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        return oraclizeFee + minBet;
    }

    function getMaxBetAmount()
        constant
        returns(uint) {

        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        uint betValue =  (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin));
        return betValue + oraclizeFee;
    }

    function getLossesShare(address currentInvestor)
        constant
        returns (uint) {

        return investors[investorIDs[currentInvestor]].amountInvested * (investorsLosses) / invested;
    }

    function getProfitShare(address currentInvestor)
        constant
        returns (uint) {

        return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested;
    }

    function getBalance(address currentInvestor)
        constant
        returns (uint) {

        uint invested = investors[investorIDs[currentInvestor]].amountInvested;
        uint profit = getProfitShare(currentInvestor);
        uint losses = getLossesShare(currentInvestor);

        if ((invested + profit < profit) ||
            (invested + profit < invested) ||
            (invested + profit < losses))
            return 0;
        else
            return invested + profit - losses;
    }

    function searchSmallestInvestor()
        constant
        returns(uint) {

        uint investorID = 1;
        for (uint i = 1; i <= numInvestors; i++) {
            if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) {
                investorID = i;
            }
        }

        return investorID;
    }

    function changeOraclizeProofType(byte _proofType)
        onlyOwner {

        if (_proofType == 0x00) throw;
        oraclize_setProof( _proofType |  proofStorage_IPFS );
    }

    function changeOraclizeConfig(bytes32 _config)
        onlyOwner {

        oraclize_setConfig(_config);
    }

    // PRIVATE HELPERS FUNCTION

    function safeSend(address addr, uint value)
        private {

        if (value == 0) {
            LOG_ZeroSend();
            return;
        }

        if (this.balance < value) {
            LOG_ValueIsTooBig();
            return;
        }

        if (!(addr.call.gas(safeGas).value(value)())) {
            LOG_FailedSend(addr, value);
            if (addr != houseAddress) {
                //Forward to house address all change
                if (!(houseAddress.call.gas(safeGas).value(value)())) LOG_FailedSend(houseAddress, value);
            }
        }

        LOG_SuccessfulSend(addr,value);
    }

    function addInvestorAtID(uint id)
        private {

        investorIDs[msg.sender] = id;
        investors[id].investorAddress = msg.sender;
        investors[id].amountInvested = msg.value;
        invested += msg.value;

        LOG_InvestorEntrance(msg.sender, msg.value);
    }

    function profitDistribution()
        private
        onlyIfProfitNotDistributed {

        uint copyInvested;

        for (uint i = 1; i <= numInvestors; i++) {
            address currentInvestor = investors[i].investorAddress;
            uint profitOfInvestor = getProfitShare(currentInvestor);
            uint lossesOfInvestor = getLossesShare(currentInvestor);
            //Check for overflow and underflow
            if ((investors[i].amountInvested + profitOfInvestor >= investors[i].amountInvested) &&
                (investors[i].amountInvested + profitOfInvestor >= lossesOfInvestor))  {
                investors[i].amountInvested += profitOfInvestor - lossesOfInvestor;
                LOG_InvestorCapitalUpdate(currentInvestor, (int) (profitOfInvestor - lossesOfInvestor));
            }
            else {
                isStopped = true;
                LOG_EmergencyAutoStop();
            }

            if (copyInvested + investors[i].amountInvested >= copyInvested)
                copyInvested += investors[i].amountInvested;
        }

        delete investorsProfit;
        delete investorsLosses;
        invested = copyInvested;

        profitDistributed = true;
    }

    // SECTION II: BET & BET PROCESSING

    function()
        payable {

        bet();
    }

    function bet()
        payable
        onlyIfNotStopped {

        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        if (oraclizeFee >= msg.value) throw;
        uint betValue = msg.value - oraclizeFee;
        if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) {
            LOG_NewBet(msg.sender, betValue);
            bytes32 myid =
                oraclize_query(
                    "nested",
                    "[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\"jsonrpc\":\"2.0\",\"method\":\"generateSignedIntegers\",\"params\":{\"apiKey\":${[decrypt] BLY3bF2NWtUYMqKj+13fIJ+rR4IzmlNAP9UM1nmbCiivwFXmm3lU86zjsIldadlHwkH9H8ephiQ/FNgEraMknyVhlceoT1WgJv3h1iP87fRK34yqARHV8p/qKoYG1RE1lJ6IKI1oUvDqCfllxkf+u9vvWN188fs=},\"n\":1,\"min\":1,\"max\":10000${[identity] \"}\"},\"id\":1${[identity] \"}\"}']",
                    ORACLIZE_GAS_LIMIT + safeGas
                );
            bets[myid] = Bet(msg.sender, betValue, 0);
            betsKeys.push(myid);
        }
        else {
            throw;
        }
    }

    function __callback(bytes32 myid, string result, bytes proof)
        onlyOraclize
        onlyIfBetExist(myid)
        onlyIfNotProcessed(myid)
        onlyIfValidRoll(myid, result)
        onlyIfBetSizeIsStillCorrect(myid)  {

        uint numberRolled = parseInt(result);
        bets[myid].numberRolled = numberRolled;
        isWinningBet(bets[myid], numberRolled);
        isLosingBet(bets[myid], numberRolled);
        delete profitDistributed;
    }

    function isWinningBet(Bet thisBet, uint numberRolled)
        private
        onlyWinningBets(numberRolled) {

        uint winAmount = (thisBet.amountBet * (10000 - edge)) / pwin;
        LOG_BetWon(thisBet.playerAddress, numberRolled, winAmount);
        safeSend(thisBet.playerAddress, winAmount);

        //Check for overflow and underflow
        if ((investorsLosses + winAmount < investorsLosses) ||
            (investorsLosses + winAmount < thisBet.amountBet)) {
                throw;
            }

        investorsLosses += winAmount - thisBet.amountBet;
    }

    function isLosingBet(Bet thisBet, uint numberRolled)
        private
        onlyLosingBets(numberRolled) {

        LOG_BetLost(thisBet.playerAddress, numberRolled);
        safeSend(thisBet.playerAddress, 1);

        //Check for overflow and underflow
        if ((investorsProfit + thisBet.amountBet < investorsProfit) ||
            (investorsProfit + thisBet.amountBet < thisBet.amountBet) ||
            (thisBet.amountBet == 1)) {
                throw;
            }

        uint totalProfit = investorsProfit + (thisBet.amountBet - 1); //added based on audit feedback
        investorsProfit += (thisBet.amountBet - 1)*(10000 - houseEdge)/10000;
        uint houseProfit = totalProfit - investorsProfit; //changed based on audit feedback
        safeSend(houseAddress, houseProfit);
    }

    //SECTION III: INVEST & DIVEST

    function increaseInvestment()
        payable
        onlyIfNotStopped
        onlyMoreThanZero
        onlyInvestors  {

        profitDistribution();
        investors[investorIDs[msg.sender]].amountInvested += msg.value;
        invested += msg.value;
    }

    function newInvestor()
        payable
        onlyIfNotStopped
        onlyMoreThanZero
        onlyNotInvestors
        onlyMoreThanMinInvestment
        investorsInvariant {

        profitDistribution();

        if (numInvestors == maxInvestors) {
            uint smallestInvestorID = searchSmallestInvestor();
            divest(investors[smallestInvestorID].investorAddress);
        }

        numInvestors++;
        addInvestorAtID(numInvestors);
    }

    function divest()
        onlyInvestors {

        divest(msg.sender);
    }


    function divest(address currentInvestor)
        private
        investorsInvariant {

        profitDistribution();
        uint currentID = investorIDs[currentInvestor];
        uint amountToReturn = getBalance(currentInvestor);

        if ((invested >= investors[currentID].amountInvested)) {
            invested -= investors[currentID].amountInvested;
            uint divestFeeAmount =  (amountToReturn*divestFee)/10000;
            amountToReturn -= divestFeeAmount;

            delete investors[currentID];
            delete investorIDs[currentInvestor];

            //Reorder investors
            if (currentID != numInvestors) {
                // Get last investor
                Investor lastInvestor = investors[numInvestors];
                //Set last investor ID to investorID of divesting account
                investorIDs[lastInvestor.investorAddress] = currentID;
                //Copy investor at the new position in the mapping
                investors[currentID] = lastInvestor;
                //Delete old position in the mappping
                delete investors[numInvestors];
            }

            numInvestors--;
            safeSend(currentInvestor, amountToReturn);
            safeSend(houseAddress, divestFeeAmount);
            LOG_InvestorExit(currentInvestor, amountToReturn);
        } else {
            isStopped = true;
            LOG_EmergencyAutoStop();
        }
    }

    function forceDivestOfAllInvestors()
        onlyOwner {

        uint copyNumInvestors = numInvestors;
        for (uint i = 1; i <= copyNumInvestors; i++) {
            divest(investors[1].investorAddress);
        }
    }

    /*
    The owner can use this function to force the exit of an investor from the
    contract during an emergency withdrawal in the following situations:
        - Unresponsive investor
        - Investor demanding to be paid in other to vote, the facto-blackmailing
        other investors
    */
    function forceDivestOfOneInvestor(address currentInvestor)
        onlyOwner
        onlyIfStopped {

        divest(currentInvestor);
        //Resets emergency withdrawal proposal. Investors must vote again
        delete proposedWithdrawal;
    }

    //SECTION IV: CONTRACT MANAGEMENT

    function stopContract()
        onlyOwner {

        isStopped = true;
        LOG_ContractStopped();
    }

    function resumeContract()
        onlyOwner {

        isStopped = false;
        LOG_ContractResumed();
    }

    function changeHouseAddress(address newHouse)
        onlyOwner {

        if (newHouse == address(0x0)) throw; //changed based on audit feedback
        houseAddress = newHouse;
        LOG_HouseAddressChanged(houseAddress, newHouse);
    }

    function changeOwnerAddress(address newOwner)
        onlyOwner {

        if (newOwner == address(0x0)) throw;
        owner = newOwner;
        LOG_OwnerAddressChanged(owner, newOwner);
    }

    function changeGasLimitOfSafeSend(uint newGasLimit)
        onlyOwner
        onlyIfValidGas(newGasLimit) {

        safeGas = newGasLimit;
        LOG_GasLimitChanged(safeGas, newGasLimit);
    }

    //SECTION V: EMERGENCY WITHDRAWAL

    function voteEmergencyWithdrawal(bool vote)
        onlyInvestors
        onlyAfterProposed
        onlyIfStopped {

        investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote;
        LOG_EmergencyWithdrawalVote(msg.sender, vote);
    }

    function proposeEmergencyWithdrawal(address withdrawalAddress)
        onlyIfStopped
        onlyOwner {

        //Resets previous votes
        for (uint i = 1; i <= numInvestors; i++) {
            delete investors[i].votedForEmergencyWithdrawal;
        }

        proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now);
        LOG_EmergencyWithdrawalProposed();
    }

    function executeEmergencyWithdrawal()
        onlyOwner
        onlyAfterProposed
        onlyIfStopped
        onlyIfEmergencyTimeOutHasPassed {

        uint numOfVotesInFavour;
        uint amountToWithdraw = this.balance;

        for (uint i = 1; i <= numInvestors; i++) {
            if (investors[i].votedForEmergencyWithdrawal == true) {
                numOfVotesInFavour++;
                delete investors[i].votedForEmergencyWithdrawal;
            }
        }

        if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) {
            if (!proposedWithdrawal.toAddress.send(amountToWithdraw)) {
                LOG_EmergencyWithdrawalFailed(proposedWithdrawal.toAddress);
            }
            else {
                LOG_EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdraw);
            }
        }
        else {
            throw;
        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"divest","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBankroll","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"bet","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getProfitShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"stopContract","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numInvestors","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getLossesShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"vote","type":"bool"}],"name":"voteEmergencyWithdrawal","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newHouse","type":"address"}],"name":"changeHouseAddress","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"forceDivestOfAllInvestors","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isStopped","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"investorAddress","type":"address"},{"name":"amountInvested","type":"uint256"},{"name":"votedForEmergencyWithdrawal","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"searchSmallestInvestor","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"withdrawalAddress","type":"address"}],"name":"proposeEmergencyWithdrawal","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getStatus","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_proofType","type":"bytes1"}],"name":"changeOraclizeProofType","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"forceDivestOfOneInvestor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"proposedWithdrawal","outputs":[{"name":"toAddress","type":"address"},{"name":"atTime","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getMaxBetAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"investorsLosses","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"investorsProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"investorIDs","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"betsKeys","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getMinInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getMinBetAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwnerAddress","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"increaseInvestment","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[],"name":"resumeContract","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"bets","outputs":[{"name":"playerAddress","type":"address"},{"name":"amountBet","type":"uint256"},{"name":"numberRolled","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"invested","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newGasLimit","type":"uint256"}],"name":"changeGasLimitOfSafeSend","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_config","type":"bytes32"}],"name":"changeOraclizeConfig","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numBets","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"executeEmergencyWithdrawal","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"newInvestor","outputs":[],"payable":true,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LOG_NewBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numberRolled","type":"uint256"},{"indexed":false,"name":"amountWon","type":"uint256"}],"name":"LOG_BetWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numberRolled","type":"uint256"}],"name":"LOG_BetLost","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_EmergencyWithdrawalProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawalAddress","type":"address"}],"name":"LOG_EmergencyWithdrawalFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawalAddress","type":"address"},{"indexed":false,"name":"amountWithdrawn","type":"uint256"}],"name":"LOG_EmergencyWithdrawalSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LOG_FailedSend","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_ZeroSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LOG_InvestorEntrance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"amount","type":"int256"}],"name":"LOG_InvestorCapitalUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LOG_InvestorExit","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_ContractStopped","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_ContractResumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldAddr","type":"address"},{"indexed":false,"name":"newOwnerAddress","type":"address"}],"name":"LOG_OwnerAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldAddr","type":"address"},{"indexed":false,"name":"newHouseAddress","type":"address"}],"name":"LOG_HouseAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldGasLimit","type":"uint256"},{"indexed":false,"name":"newGasLimit","type":"uint256"}],"name":"LOG_GasLimitChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_EmergencyAutoStop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"vote","type":"bool"}],"name":"LOG_EmergencyWithdrawalVote","type":"event"},{"anonymous":false,"inputs":[],"name":"LOG_ValueIsTooBig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LOG_SuccessfulSend","type":"event"}]

60606040526108fc600255600060055560006006556000600d556000600e553462000000575b6200005e7f1100000000000000000000000000000000000000000000000000000000000000640100000000620023a76200009882021704565b600780546c0100000000000000000000000033810204600160a060020a031991821681179092556008805490911690911790555b6200033f565b600054600160a060020a03161515620000c757620000c56000640100000000620027fc620001fe82021704565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc4831600060405160200152604051817c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b15620000005760325a03f1156200000057505060408051805160018054600160a060020a0319166c010000000000000000000000009283029290920491909117908190557f688dcfd70000000000000000000000000000000000000000000000000000000082527fff00000000000000000000000000000000000000000000000000000000000000851660048301529151600160a060020a03909216925063688dcfd791602480830192600092919082900301818387803b15620000005760325a03f11562000000575050505b5b50565b6000806200022e731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062002a4b6200033782021704565b111562000264575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed179055600162000332565b60006200029373c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062002a4b6200033782021704565b1115620002c9575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf1179055600162000332565b6000620002f87351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062002a4b6200033782021704565b11156200032e575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa179055600162000332565b5060005b919050565b803b5b919050565b612bdc806200034e6000396000f3606060405236156101cc5760e060020a6000350463058aace181146101dd578063061e494f146101ec5780630d1fce421461022457806311610c2514610243578063116c6eab1461024d57806312253a6c1461026f578063132ae5e91461027e5780631514ea541461029d578063187a62d5146102bf5780631efb17ee146102d1578063232523e8146102e357806338bbfa50146102f25780633f683b6a146103855780633feb5f2b146103a657806340a49a96146103e05780634671e65e146103ff5780634e69d560146104115780635125796a1461045f57806351404cbe14610471578063518496b214610483578063550ed1f0146104b35780636128a4f3146104d257806366aee0fc146104f15780636be80de71461051057806371d0ed0514610532578063724ae9d01461055457806382a5285d1461057357806385eac05f146105925780638da5cb5b146105a4578063a4beffa7146105cd578063c4bc5da5146105d7578063c902c3ae146105e6578063cafb22021461061e578063d21d79501461063d578063d7cee31e1461064f578063da0bba7b14610678578063df06f9061461068a578063f4993bbd146106a9578063f8b2cb4f146106b8578063fb099c84146106da575b6101db5b6101d86106e4565b5b565b005b34610000576101db6109a7565b005b34610000576101fc6004356109d8565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b3461000057610231610a42565b60408051918252519081900360200190f35b6101db6106e4565b005b3461000057610231600435610a8f565b60408051918252519081900360200190f35b34610000576101db610ad1565b005b3461000057610231610b2f565b60408051918252519081900360200190f35b3461000057610231600435610b35565b60408051918252519081900360200190f35b34610000576101db600435610b77565b005b34610000576101db600435610c44565b005b34610000576101db610cda565b005b346100005760408051602060046024803582810135601f81018590048502860185019096528585526101db958335959394604494939290920191819084018382808284375050604080516020601f89358b01803591820183900483028401830190945280835297999881019791965091820194509250829150840183828082843750949650610d5695505050505050565b005b3461000057610392610f8e565b604080519115158252519081900360200190f35b34610000576103b6600435610f9e565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b3461000057610231610fcc565b60408051918252519081900360200190f35b34610000576101db600435611039565b005b346100005761041e6110fe565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34610000576101db600435611161565b005b34610000576101db6004356111a6565b005b34610000576104906111fd565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3461000057610231611212565b60408051918252519081900360200190f35b346100005761023161131c565b60408051918252519081900360200190f35b3461000057610231611322565b60408051918252519081900360200190f35b3461000057610231600435611328565b60408051918252519081900360200190f35b346100005761023160043561133a565b60408051918252519081900360200190f35b346100005761023161135b565b60408051918252519081900360200190f35b34610000576102316113af565b60408051918252519081900360200190f35b34610000576101db6004356114a0565b005b34610000576105b1611536565b60408051600160a060020a039092168252519081900360200190f35b6101db611545565b005b34610000576101db6115d4565b005b34610000576101fc60043561162c565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b3461000057610231611657565b60408051918252519081900360200190f35b34610000576101db60043561165d565b005b34610000576105b16116e4565b60408051600160a060020a039092168252519081900360200190f35b34610000576101db6004356116f3565b005b346100005761023161171c565b60408051918252519081900360200190f35b34610000576101db611723565b005b34610000576102316004356118cb565b60408051918252519081900360200190f35b6101db61194c565b005b600060006000600860149054906101000a900460ff161561070457610000565b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f115610000575050604051519350503483106107f857610000565b8234039150612710610808610a42565b606402811561000057046103e861226a8402041115801561083157506702c68af0bb1400008210155b1561099b5760408051600160a060020a03331681526020810184905281517fa39417f926ed806b475d2cd74083819551616e7fdb3f5bb7abf8e893eae244b4929181900390910190a16108e1604060405190810160405280600681526020017f6e657374656400000000000000000000000000000000000000000000000000008152602001506101c0604051908101604052806101898152602001612a5361018991396002546202ab9801611a15565b6040805160608101825233815260208082018681526000838501818152868252600b9093529390932091518254600160a060020a031916606060020a9182029190910417825591516001808301919091559151600290910155600c805491820180825592935091828183801582901161097f5760008381526020902061097f9181019083015b8082111561097b5760008155600101610967565b5090565b5b505050916000526020600020900160005b50829055506109a0565b610000565b5b5b505050565b600160a060020a03331660009081526003602052604090205415156109cb57610000565b6101d833611cf1565b5b5b565b6000600060006000600c80549050851015610a3957600c85815481101561000057906000526020600020900160005b50546000818152600b6020526040902080546001820154600290920154600160a060020a039091169650909450925090505b5b509193909250565b6000600d546006541080610a5b5750600654600d548101105b80610a6d5750600e54600d5460065401105b15610a7e57506000610a8b56610a8b565b50600e54600d5460065401035b5b90565b600654600d54600160a060020a03831660009081526003602090815260408083205483526004909152812060010154909291028115610000570490505b919050565b60075433600160a060020a03908116911614610aec57610000565b6008805460a060020a60ff02191660a060020a1790556040517f3bb54b4ced112fe0d4fa7efd42b29a0a9036fde6e206de4290c4ff02d2dc2c5c90600090a15b5b565b60055481565b600654600e54600160a060020a03831660009081526003602090815260408083205483526004909152812060010154909291028115610000570490505b919050565b600160a060020a0333166000908152600360205260409020541515610b9b57610000565b600954600160a060020a03161515610bb257610000565b60085460a060020a900460ff161515610bca57610000565b33600160a060020a031660008181526003602090815260408083205483526004825291829020600201805460ff191660f860020a8681020417905581519283528315159083015280517fea22ee15de9c385abeff072b23d6e0de5ebda8c59098f5585f45e82b9faa57629281900390910190a15b5b5b5b50565b60075433600160a060020a03908116911614610c5f57610000565b600160a060020a0381161515610c7457610000565b60088054600160a060020a031916606060020a83810204179081905560408051600160a060020a039283168152918316602083015280517fb750ac854b12114073b8c76dcfe5fb889b30db5d3d60e07abc8ae66c349d7a689281900390910190a15b5b50565b600754600090819033600160a060020a03908116911614610cfa57610000565b505060055460015b818111610d5057600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554610d4790600160a060020a0316611cf1565b5b600101610d02565b5b5b5050565b6000610d60611f1d565b600160a060020a031633600160a060020a0316141515610d7f57610000565b6000848152600b60205260409020548490600160a060020a03161515610da457610000565b6000858152600b60205260408120600201548691901115610dc457610000565b85856000610dd182612036565b90506001811080610de3575061271081115b8015610dfe57506000838152600b6020526040902060020154155b15610e3a576000838152600b602052604090206201869f60028201558054600190910154610e3591600160a060020a03169061204b565b610f80565b88612710610e46610a42565b6064028115610000576000838152600b6020526040902060010154919004906103e89061226a020411158015610e9657506000818152600b60205260409020600101546702c68af0bb1400009010155b15610f4a57610ea489612036565b60008b8152600b60209081526040918290206002810184905582516060810184528154600160a060020a0316815260019091015491810191909152908101829052909750610ef290886121ff565b60008a8152600b602090815260409182902082516060810184528154600160a060020a031681526001820154928101929092526002015491810191909152610f3a90886122bc565b600f805460ff191690555b610f7c565b6000818152600b602052604090206201869f60028201558054600190910154610f4591600160a060020a03169061204b565b5b5b505b5050505b505b505b50505050565b60085460a060020a900460ff1681565b600460205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b60006001805b600554811161103057600082815260046020526040902054610ffc90600160a060020a03166118cb565b60008281526004602052604090205461101d90600160a060020a03166118cb565b1015611027578091505b5b600101610fd2565b8192505b505090565b60085460009060a060020a900460ff16151561105457610000565b60075433600160a060020a0390811691161461106f57610000565b5060015b600554811161109e576000818152600460205260409020600201805460ff191690555b600101611073565b60408051808201825283815242602090910181905260098054600160a060020a031916606060020a80870204179055600a55517f6c0eb56f121418f16eaebbe01cb2694897b8578b3b1c549e634a1b7753ed2d8b90600090a15b5b5b5050565b600060006000600060006000600060006000600061111a610a42565b915061112461135b565b600e54600d54600c54949c506103e89b5060be9a50606499506702c68af0bb14000098500395509350909150889050825b50509091929394959697565b60075433600160a060020a0390811691161461117c57610000565b600160f860020a03198116151561119257610000565b610c3e60f860020a82176123a7565b5b5b50565b60075433600160a060020a039081169116146111c157610000565b60085460a060020a900460ff1615156111d957610000565b6111e281611cf1565b60098054600160a060020a03191690556000600a555b5b5b50565b600954600a54600160a060020a039091169082565b60008054604080516020908101849052815160e060020a6338cc4831028152915184938493600160a060020a03909116926338cc48319260048084019382900301818787803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f1156100005750506040515192506305404ca090506103e8611304610a42565b6064020281156100005704905081810192505b505090565b600e5481565b600d5481565b60036020526000908152604090205481565b600c81815481101561000057906000526020600020900160005b5054905081565b60006000600a60055414156113a157611372610fcc565b60008181526004602052604090205490915061139690600160a060020a03166118cb565b915061097b5661097b565b6000915061097b565b5b5090565b60008054604080516020908101849052815160e060020a6338cc483102815291518493600160a060020a0316926338cc483192600480830193919282900301818787803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f115610000575050604051516702c68af0bb140000810193509150505b5090565b60075433600160a060020a039081169116146114bb57610000565b600160a060020a03811615156114d057610000565b60078054600160a060020a031916606060020a83810204179081905560408051600160a060020a039283168152918316602083015280517f4f67fe223bca69f22bf24552638f3c95bfb9e9763c4a33a3aa67a46484d81c2b9281900390910190a15b5b50565b600754600160a060020a031681565b60085460a060020a900460ff161561155c57610000565b34151561156857610000565b600160a060020a033316600090815260036020526040902054151561158c57610000565b6115946124be565b600160a060020a0333166000908152600360209081526040808320548352600490915290206001018054349081019091556006805490910190555b5b5b5b565b60075433600160a060020a039081169116146115ef57610000565b6008805460a060020a60ff02191690556040517fadf8f79dd508a8e1881e3cca67a5af02a21f971925c3a6a6cb8fc165d07e346390600090a15b5b565b600b60205260009081526040902080546001820154600290920154600160a060020a03909116919083565b60065481565b60075433600160a060020a0390811691161461167857610000565b806202ab98816202ab9801101561168e57610000565b6161a881101561169d57610000565b6002829055604080518381526020810184905281517fb5e4ece1f96cc168fddcead7ee209f969a93607238c585767ea80fad5fe884b2929181900390910190a15b5b505b50565b600854600160a060020a031681565b60075433600160a060020a0390811691161461170e57610000565b610c3e81612659565b5b5b50565b600c545b90565b6007546000908190819033600160a060020a0390811691161461174557610000565b600954600160a060020a0316151561175c57610000565b60085460a060020a900460ff16151561177457610000565b426203f48060096001015401111561178b57610000565b5050600160a060020a0330163160015b60055481116117ec5760008181526004602052604090206002015460ff161515600114156117e3576000818152600460205260409020600201805460ff191690556001909201915b5b60010161179b565b600554606490600a0204831061099b57600954604051600160a060020a039091169083156108fc029084906000818181858888f19350505050151561186f5760095460408051600160a060020a039092168252517f0fd1ed783bf9505e3fc2545a18e022b8bd048d240d98a3c959646ccebd569b399181900360200190a16118b7565b60095460408051600160a060020a0390921682526020820184905280517fe0376e740df28d6cbdef46880b37136bc75e027766e3295d4af8a44c557ae7329281900390910190a15b6109a0565b610000565b5b5b5b5b5b505050565b600160a060020a0381166000908152600360209081526040808320548352600490915281206001015481806118ff85610a8f565b915061190a85610b35565b905081828401108061191d575082828401105b80611929575080828401105b1561193b576000935061194356611943565b808284010393505b5b505050919050565b60085460009060a060020a900460ff161561196657610000565b34151561197257610000565b600160a060020a0333166000908152600360205260409020541561199557610000565b61199d61135b565b34116119a857610000565b6119b06124be565b600a60055414156119e7576119c3610fcc565b6000818152600460205260409020549091506119e790600160a060020a0316611cf1565b5b60058054600101908190556119fc90612767565b5b600a6005541115610c3e57610000565b5b5b5b5b5b50565b600080548190600160a060020a03161515611a3657611a3460006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f1156100005750505060405180519060200150600160006101000a815481600160a060020a030219169083606060020a908102040217905550600160009054906101000a9004600160a060020a0316600160a060020a0316632ef3accc86856000604051602001526040518360e060020a02815260040180806020018381526020018281038252848181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611b665780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b156100005760325a03f11561000057505060405151915050670de0b6b3a76400003a840201811115611baf5760009150611ce8565b600160009054906101000a9004600160a060020a0316600160a060020a031663c51be90f8260008888886000604051602001526040518660e060020a0281526004018085815260200180602001806020018481526020018381038352868181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611c5e5780820380516001836020036101000a031916815260200191505b508381038252858181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611cb75780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b156100005761235a5a03f11561000057505060405151935050505b5b509392505050565b6000600060006000611d016124be565b600160a060020a0385166000908152600360205260409020549350611d25856118cb565b6000858152600460205260409020600101546006549194509010611ec4576000848152600460209081526040808320600181018054600680549190910390558154600160a060020a0319168255849055600201805460ff19169055600160a060020a038816835260039091528120556005546127106032850204938490039392508414611e5157506005805460009081526004602081815260408084208054600160a060020a039081168652600384528286208a90558986529390925280842082548154606060020a91909516810204600160a060020a031994851617815560018084015482820155600280850154928101805460f860020a60ff90951685029490940460ff199485161790559654865291852080549094168455908301939093559201805490911690555b60058054600019019055611e65858461204b565b600854611e7b90600160a060020a03168361204b565b60408051600160a060020a03871681526020810185905281517f3026a12843449d7e7377f8932a40bdb5d1b1125efbfbe147132016f8beac0f34929181900390910190a1611f04565b6008805460a060020a60ff02191660a060020a1790556040517f52e578ad17dc8fe0ff456fdf1f81516f7d29eb85fff301475a3a29d0e84bb31a90600090a15b5b600a6005541115610f8657610000565b5b5050505050565b60008054600160a060020a03161515611f3c57611f3a60006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190556000602092830181905283517fc281d19e0000000000000000000000000000000000000000000000000000000081529351600160a060020a03909216945063c281d19e936004808201949392918390030190829087803b156100005760325a03f115610000575050604051519150505b5b90565b6000612043826000612900565b90505b919050565b801515612080576040517f4763e3feef50167ae1957a20ba2b75b5f4093062392e81d5e351b709b1d8261f90600090a1610d50565b8030600160a060020a03163110156120c0576040517f504b0ae89b95779262e99243870eb936180a8c33b444f17f01807c40a20c7aa790600090a1610d50565b600254604051600160a060020a038416919083906000818181858888f1935050505015156121b45760408051600160a060020a03841681526020810183905281517f949201d78c50a6b453f7068ed19a5c7d74aaa07c12cadfd3855357a0b0f47405929181900390910190a1600854600160a060020a038381169116146121b457600854600254604051600160a060020a039092169183906000818181858888f1935050505015156121b45760085460408051600160a060020a0390921682526020820183905280517f949201d78c50a6b453f7068ed19a5c7d74aaa07c12cadfd3855357a0b0f474059281900390910190a15b5b5b60408051600160a060020a03841681526020810183905281517fc7e416c5685d8971558840f05c5e63e02575b29997d8da6b9ba44dc10da6a370929181900390910190a15b5050565b6000816103e8600182031015610f885760208401516103e890612652020491507fa5acb022726d980b249ddc212f4992ad87f28c093550232fcc48bd8af803f2d5846000015184846040518084600160a060020a03168152602001838152602001828152602001935050505060405180910390a1835161227f908361204b565b600e5482810110806122985750836020015182600e5401105b156122a257610000565b6020840151600e805491840390910190555b5b5b50505050565b600080826103e8600019820110610f8657845160408051600160a060020a0390921682526020820186905280517ff6db2bace4ac8277384553ad9603d045220a91fb2448ab6130d7a6f044f9a8cf9281900390910190a1845161232090600161204b565b600d5460208601518101108061233d57506020850151600d548101105b8061234c575084602001516001145b1561235657610000565b6020850151600d5481016000199081019450612710916126f7910102600d80549290910491909101908190556008549084039250610f8690600160a060020a03168361204b565b5b5b5b5050505050565b600054600160a060020a031615156123c5576123c360006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190557f688dcfd7000000000000000000000000000000000000000000000000000000008252600160f860020a0319851660048301529151600160a060020a03909216925063688dcfd791602480830192600092919082900301818387803b156100005760325a03f115610000575050505b5b50565b600f54600090819081908190819060ff161515610f8657600193505b600554841161263357600084815260046020526040902054600160a060020a0316925061250683610a8f565b915061251183610b35565b6000858152600460205260409020600101549091508281011080159061254b57506000848152600460205260409020600101548201819010155b156125b45760008481526004602090815260409182902060010180548486039081019091558251600160a060020a03871681529182015281517f8ff49347da9034aab52b79ac6b2ba8cf17d221516834af5e5fa04bef1df4d7cd929181900390910190a16125f4565b6008805460a060020a60ff02191660a060020a1790556040517f52e578ad17dc8fe0ff456fdf1f81516f7d29eb85fff301475a3a29d0e84bb31a90600090a15b60008481526004602052604090206001015485018590106126275760008481526004602052604090206001015494909401935b5b6001909301926124da565b6000600d819055600e556006859055600f805460ff191660011790555b5b5b5050505050565b600054600160a060020a031615156126775761267560006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190557fe8a5282d000000000000000000000000000000000000000000000000000000008252600482018590529151600160a060020a03909216925063e8a5282d91602480830192600092919082900301818387803b156100005760325a03f115610000575050505b5b50565b33600160a060020a038116600081815260036020908152604080832086905585835260048252918290208054600160a060020a031916606060020a958602959095049490941784553460019094018490556006805485019055815192835282019290925281517fa4a46f45c9996c78320ae470714f930acba653b022fddec1735c1400209780e4929181900390910190a15b50565b6000600061281d731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed612a4b565b1115612851575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610acc565b600061287073c03a2615d5efaf5f49f60b7bb6583eaec212fdf1612a4b565b11156128a4575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610acc565b60006128c37351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa612a4b565b11156128f7575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610acc565b5060005b919050565b6040805160208101909152600090819052828180805b8351811015612a2b57603060f860020a02848281518110156100005790602001015160f860020a900460f860020a02600160f860020a0319161015801561298b5750603960f860020a02848281518110156100005790602001015160f860020a900460f860020a02600160f860020a03191611155b156129e65781156129ae578515156129a657612a2b566129ae565b600019909501945b5b600a830292506030848281518110156100005790602001015160f860020a900460f860020a0260f860020a90040383019250612a21565b838181518110156100005790602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a021415612a2157600191505b5b5b600101612916565b6000861115612a3d5785600a0a830292505b8294505b5050505092915050565b803b5b919050565b55524c5d205b276a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e30272c20275c6e7b226a736f6e727063223a22322e30222c226d6574686f64223a2267656e65726174655369676e6564496e746567657273222c22706172616d73223a7b226170694b6579223a247b5b646563727970745d20424c59336246324e577455594d714b6a2b313366494a2b725234497a6d6c4e415039554d316e6d62436969767746586d6d336c5538367a6a73496c6461646c48776b4839483865706869512f464e674572614d6b6e7956686c63656f543157674a763368316950383766524b333479714152485638702f714b6f5947315245316c4a36494b49316f5576447143666c6c786b662b75397676574e31383866733d7d2c226e223a312c226d696e223a312c226d6178223a3130303030247b5b6964656e746974795d20227d227d2c226964223a31247b5b6964656e746974795d20227d227d275d

Deployed Bytecode

0x606060405236156101cc5760e060020a6000350463058aace181146101dd578063061e494f146101ec5780630d1fce421461022457806311610c2514610243578063116c6eab1461024d57806312253a6c1461026f578063132ae5e91461027e5780631514ea541461029d578063187a62d5146102bf5780631efb17ee146102d1578063232523e8146102e357806338bbfa50146102f25780633f683b6a146103855780633feb5f2b146103a657806340a49a96146103e05780634671e65e146103ff5780634e69d560146104115780635125796a1461045f57806351404cbe14610471578063518496b214610483578063550ed1f0146104b35780636128a4f3146104d257806366aee0fc146104f15780636be80de71461051057806371d0ed0514610532578063724ae9d01461055457806382a5285d1461057357806385eac05f146105925780638da5cb5b146105a4578063a4beffa7146105cd578063c4bc5da5146105d7578063c902c3ae146105e6578063cafb22021461061e578063d21d79501461063d578063d7cee31e1461064f578063da0bba7b14610678578063df06f9061461068a578063f4993bbd146106a9578063f8b2cb4f146106b8578063fb099c84146106da575b6101db5b6101d86106e4565b5b565b005b34610000576101db6109a7565b005b34610000576101fc6004356109d8565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b3461000057610231610a42565b60408051918252519081900360200190f35b6101db6106e4565b005b3461000057610231600435610a8f565b60408051918252519081900360200190f35b34610000576101db610ad1565b005b3461000057610231610b2f565b60408051918252519081900360200190f35b3461000057610231600435610b35565b60408051918252519081900360200190f35b34610000576101db600435610b77565b005b34610000576101db600435610c44565b005b34610000576101db610cda565b005b346100005760408051602060046024803582810135601f81018590048502860185019096528585526101db958335959394604494939290920191819084018382808284375050604080516020601f89358b01803591820183900483028401830190945280835297999881019791965091820194509250829150840183828082843750949650610d5695505050505050565b005b3461000057610392610f8e565b604080519115158252519081900360200190f35b34610000576103b6600435610f9e565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b3461000057610231610fcc565b60408051918252519081900360200190f35b34610000576101db600435611039565b005b346100005761041e6110fe565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34610000576101db600435611161565b005b34610000576101db6004356111a6565b005b34610000576104906111fd565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3461000057610231611212565b60408051918252519081900360200190f35b346100005761023161131c565b60408051918252519081900360200190f35b3461000057610231611322565b60408051918252519081900360200190f35b3461000057610231600435611328565b60408051918252519081900360200190f35b346100005761023160043561133a565b60408051918252519081900360200190f35b346100005761023161135b565b60408051918252519081900360200190f35b34610000576102316113af565b60408051918252519081900360200190f35b34610000576101db6004356114a0565b005b34610000576105b1611536565b60408051600160a060020a039092168252519081900360200190f35b6101db611545565b005b34610000576101db6115d4565b005b34610000576101fc60043561162c565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b3461000057610231611657565b60408051918252519081900360200190f35b34610000576101db60043561165d565b005b34610000576105b16116e4565b60408051600160a060020a039092168252519081900360200190f35b34610000576101db6004356116f3565b005b346100005761023161171c565b60408051918252519081900360200190f35b34610000576101db611723565b005b34610000576102316004356118cb565b60408051918252519081900360200190f35b6101db61194c565b005b600060006000600860149054906101000a900460ff161561070457610000565b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f115610000575050604051519350503483106107f857610000565b8234039150612710610808610a42565b606402811561000057046103e861226a8402041115801561083157506702c68af0bb1400008210155b1561099b5760408051600160a060020a03331681526020810184905281517fa39417f926ed806b475d2cd74083819551616e7fdb3f5bb7abf8e893eae244b4929181900390910190a16108e1604060405190810160405280600681526020017f6e657374656400000000000000000000000000000000000000000000000000008152602001506101c0604051908101604052806101898152602001612a5361018991396002546202ab9801611a15565b6040805160608101825233815260208082018681526000838501818152868252600b9093529390932091518254600160a060020a031916606060020a9182029190910417825591516001808301919091559151600290910155600c805491820180825592935091828183801582901161097f5760008381526020902061097f9181019083015b8082111561097b5760008155600101610967565b5090565b5b505050916000526020600020900160005b50829055506109a0565b610000565b5b5b505050565b600160a060020a03331660009081526003602052604090205415156109cb57610000565b6101d833611cf1565b5b5b565b6000600060006000600c80549050851015610a3957600c85815481101561000057906000526020600020900160005b50546000818152600b6020526040902080546001820154600290920154600160a060020a039091169650909450925090505b5b509193909250565b6000600d546006541080610a5b5750600654600d548101105b80610a6d5750600e54600d5460065401105b15610a7e57506000610a8b56610a8b565b50600e54600d5460065401035b5b90565b600654600d54600160a060020a03831660009081526003602090815260408083205483526004909152812060010154909291028115610000570490505b919050565b60075433600160a060020a03908116911614610aec57610000565b6008805460a060020a60ff02191660a060020a1790556040517f3bb54b4ced112fe0d4fa7efd42b29a0a9036fde6e206de4290c4ff02d2dc2c5c90600090a15b5b565b60055481565b600654600e54600160a060020a03831660009081526003602090815260408083205483526004909152812060010154909291028115610000570490505b919050565b600160a060020a0333166000908152600360205260409020541515610b9b57610000565b600954600160a060020a03161515610bb257610000565b60085460a060020a900460ff161515610bca57610000565b33600160a060020a031660008181526003602090815260408083205483526004825291829020600201805460ff191660f860020a8681020417905581519283528315159083015280517fea22ee15de9c385abeff072b23d6e0de5ebda8c59098f5585f45e82b9faa57629281900390910190a15b5b5b5b50565b60075433600160a060020a03908116911614610c5f57610000565b600160a060020a0381161515610c7457610000565b60088054600160a060020a031916606060020a83810204179081905560408051600160a060020a039283168152918316602083015280517fb750ac854b12114073b8c76dcfe5fb889b30db5d3d60e07abc8ae66c349d7a689281900390910190a15b5b50565b600754600090819033600160a060020a03908116911614610cfa57610000565b505060055460015b818111610d5057600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554610d4790600160a060020a0316611cf1565b5b600101610d02565b5b5b5050565b6000610d60611f1d565b600160a060020a031633600160a060020a0316141515610d7f57610000565b6000848152600b60205260409020548490600160a060020a03161515610da457610000565b6000858152600b60205260408120600201548691901115610dc457610000565b85856000610dd182612036565b90506001811080610de3575061271081115b8015610dfe57506000838152600b6020526040902060020154155b15610e3a576000838152600b602052604090206201869f60028201558054600190910154610e3591600160a060020a03169061204b565b610f80565b88612710610e46610a42565b6064028115610000576000838152600b6020526040902060010154919004906103e89061226a020411158015610e9657506000818152600b60205260409020600101546702c68af0bb1400009010155b15610f4a57610ea489612036565b60008b8152600b60209081526040918290206002810184905582516060810184528154600160a060020a0316815260019091015491810191909152908101829052909750610ef290886121ff565b60008a8152600b602090815260409182902082516060810184528154600160a060020a031681526001820154928101929092526002015491810191909152610f3a90886122bc565b600f805460ff191690555b610f7c565b6000818152600b602052604090206201869f60028201558054600190910154610f4591600160a060020a03169061204b565b5b5b505b5050505b505b505b50505050565b60085460a060020a900460ff1681565b600460205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b60006001805b600554811161103057600082815260046020526040902054610ffc90600160a060020a03166118cb565b60008281526004602052604090205461101d90600160a060020a03166118cb565b1015611027578091505b5b600101610fd2565b8192505b505090565b60085460009060a060020a900460ff16151561105457610000565b60075433600160a060020a0390811691161461106f57610000565b5060015b600554811161109e576000818152600460205260409020600201805460ff191690555b600101611073565b60408051808201825283815242602090910181905260098054600160a060020a031916606060020a80870204179055600a55517f6c0eb56f121418f16eaebbe01cb2694897b8578b3b1c549e634a1b7753ed2d8b90600090a15b5b5b5050565b600060006000600060006000600060006000600061111a610a42565b915061112461135b565b600e54600d54600c54949c506103e89b5060be9a50606499506702c68af0bb14000098500395509350909150889050825b50509091929394959697565b60075433600160a060020a0390811691161461117c57610000565b600160f860020a03198116151561119257610000565b610c3e60f860020a82176123a7565b5b5b50565b60075433600160a060020a039081169116146111c157610000565b60085460a060020a900460ff1615156111d957610000565b6111e281611cf1565b60098054600160a060020a03191690556000600a555b5b5b50565b600954600a54600160a060020a039091169082565b60008054604080516020908101849052815160e060020a6338cc4831028152915184938493600160a060020a03909116926338cc48319260048084019382900301818787803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f1156100005750506040515192506305404ca090506103e8611304610a42565b6064020281156100005704905081810192505b505090565b600e5481565b600d5481565b60036020526000908152604090205481565b600c81815481101561000057906000526020600020900160005b5054905081565b60006000600a60055414156113a157611372610fcc565b60008181526004602052604090205490915061139690600160a060020a03166118cb565b915061097b5661097b565b6000915061097b565b5b5090565b60008054604080516020908101849052815160e060020a6338cc483102815291518493600160a060020a0316926338cc483192600480830193919282900301818787803b156100005760325a03f11561000057505060408051805160025460006020938401819052845160e260020a630bbceb330281526202ab989092016024830152600482018590526003604483015260ea60020a621554930260648301529351600160a060020a039092169450632ef3accc9360848083019493928390030190829087803b156100005760325a03f115610000575050604051516702c68af0bb140000810193509150505b5090565b60075433600160a060020a039081169116146114bb57610000565b600160a060020a03811615156114d057610000565b60078054600160a060020a031916606060020a83810204179081905560408051600160a060020a039283168152918316602083015280517f4f67fe223bca69f22bf24552638f3c95bfb9e9763c4a33a3aa67a46484d81c2b9281900390910190a15b5b50565b600754600160a060020a031681565b60085460a060020a900460ff161561155c57610000565b34151561156857610000565b600160a060020a033316600090815260036020526040902054151561158c57610000565b6115946124be565b600160a060020a0333166000908152600360209081526040808320548352600490915290206001018054349081019091556006805490910190555b5b5b5b565b60075433600160a060020a039081169116146115ef57610000565b6008805460a060020a60ff02191690556040517fadf8f79dd508a8e1881e3cca67a5af02a21f971925c3a6a6cb8fc165d07e346390600090a15b5b565b600b60205260009081526040902080546001820154600290920154600160a060020a03909116919083565b60065481565b60075433600160a060020a0390811691161461167857610000565b806202ab98816202ab9801101561168e57610000565b6161a881101561169d57610000565b6002829055604080518381526020810184905281517fb5e4ece1f96cc168fddcead7ee209f969a93607238c585767ea80fad5fe884b2929181900390910190a15b5b505b50565b600854600160a060020a031681565b60075433600160a060020a0390811691161461170e57610000565b610c3e81612659565b5b5b50565b600c545b90565b6007546000908190819033600160a060020a0390811691161461174557610000565b600954600160a060020a0316151561175c57610000565b60085460a060020a900460ff16151561177457610000565b426203f48060096001015401111561178b57610000565b5050600160a060020a0330163160015b60055481116117ec5760008181526004602052604090206002015460ff161515600114156117e3576000818152600460205260409020600201805460ff191690556001909201915b5b60010161179b565b600554606490600a0204831061099b57600954604051600160a060020a039091169083156108fc029084906000818181858888f19350505050151561186f5760095460408051600160a060020a039092168252517f0fd1ed783bf9505e3fc2545a18e022b8bd048d240d98a3c959646ccebd569b399181900360200190a16118b7565b60095460408051600160a060020a0390921682526020820184905280517fe0376e740df28d6cbdef46880b37136bc75e027766e3295d4af8a44c557ae7329281900390910190a15b6109a0565b610000565b5b5b5b5b5b505050565b600160a060020a0381166000908152600360209081526040808320548352600490915281206001015481806118ff85610a8f565b915061190a85610b35565b905081828401108061191d575082828401105b80611929575080828401105b1561193b576000935061194356611943565b808284010393505b5b505050919050565b60085460009060a060020a900460ff161561196657610000565b34151561197257610000565b600160a060020a0333166000908152600360205260409020541561199557610000565b61199d61135b565b34116119a857610000565b6119b06124be565b600a60055414156119e7576119c3610fcc565b6000818152600460205260409020549091506119e790600160a060020a0316611cf1565b5b60058054600101908190556119fc90612767565b5b600a6005541115610c3e57610000565b5b5b5b5b5b50565b600080548190600160a060020a03161515611a3657611a3460006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f1156100005750505060405180519060200150600160006101000a815481600160a060020a030219169083606060020a908102040217905550600160009054906101000a9004600160a060020a0316600160a060020a0316632ef3accc86856000604051602001526040518360e060020a02815260040180806020018381526020018281038252848181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611b665780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b156100005760325a03f11561000057505060405151915050670de0b6b3a76400003a840201811115611baf5760009150611ce8565b600160009054906101000a9004600160a060020a0316600160a060020a031663c51be90f8260008888886000604051602001526040518660e060020a0281526004018085815260200180602001806020018481526020018381038352868181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611c5e5780820380516001836020036101000a031916815260200191505b508381038252858181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015611cb75780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b156100005761235a5a03f11561000057505060405151935050505b5b509392505050565b6000600060006000611d016124be565b600160a060020a0385166000908152600360205260409020549350611d25856118cb565b6000858152600460205260409020600101546006549194509010611ec4576000848152600460209081526040808320600181018054600680549190910390558154600160a060020a0319168255849055600201805460ff19169055600160a060020a038816835260039091528120556005546127106032850204938490039392508414611e5157506005805460009081526004602081815260408084208054600160a060020a039081168652600384528286208a90558986529390925280842082548154606060020a91909516810204600160a060020a031994851617815560018084015482820155600280850154928101805460f860020a60ff90951685029490940460ff199485161790559654865291852080549094168455908301939093559201805490911690555b60058054600019019055611e65858461204b565b600854611e7b90600160a060020a03168361204b565b60408051600160a060020a03871681526020810185905281517f3026a12843449d7e7377f8932a40bdb5d1b1125efbfbe147132016f8beac0f34929181900390910190a1611f04565b6008805460a060020a60ff02191660a060020a1790556040517f52e578ad17dc8fe0ff456fdf1f81516f7d29eb85fff301475a3a29d0e84bb31a90600090a15b5b600a6005541115610f8657610000565b5b5050505050565b60008054600160a060020a03161515611f3c57611f3a60006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190556000602092830181905283517fc281d19e0000000000000000000000000000000000000000000000000000000081529351600160a060020a03909216945063c281d19e936004808201949392918390030190829087803b156100005760325a03f115610000575050604051519150505b5b90565b6000612043826000612900565b90505b919050565b801515612080576040517f4763e3feef50167ae1957a20ba2b75b5f4093062392e81d5e351b709b1d8261f90600090a1610d50565b8030600160a060020a03163110156120c0576040517f504b0ae89b95779262e99243870eb936180a8c33b444f17f01807c40a20c7aa790600090a1610d50565b600254604051600160a060020a038416919083906000818181858888f1935050505015156121b45760408051600160a060020a03841681526020810183905281517f949201d78c50a6b453f7068ed19a5c7d74aaa07c12cadfd3855357a0b0f47405929181900390910190a1600854600160a060020a038381169116146121b457600854600254604051600160a060020a039092169183906000818181858888f1935050505015156121b45760085460408051600160a060020a0390921682526020820183905280517f949201d78c50a6b453f7068ed19a5c7d74aaa07c12cadfd3855357a0b0f474059281900390910190a15b5b5b60408051600160a060020a03841681526020810183905281517fc7e416c5685d8971558840f05c5e63e02575b29997d8da6b9ba44dc10da6a370929181900390910190a15b5050565b6000816103e8600182031015610f885760208401516103e890612652020491507fa5acb022726d980b249ddc212f4992ad87f28c093550232fcc48bd8af803f2d5846000015184846040518084600160a060020a03168152602001838152602001828152602001935050505060405180910390a1835161227f908361204b565b600e5482810110806122985750836020015182600e5401105b156122a257610000565b6020840151600e805491840390910190555b5b5b50505050565b600080826103e8600019820110610f8657845160408051600160a060020a0390921682526020820186905280517ff6db2bace4ac8277384553ad9603d045220a91fb2448ab6130d7a6f044f9a8cf9281900390910190a1845161232090600161204b565b600d5460208601518101108061233d57506020850151600d548101105b8061234c575084602001516001145b1561235657610000565b6020850151600d5481016000199081019450612710916126f7910102600d80549290910491909101908190556008549084039250610f8690600160a060020a03168361204b565b5b5b5b5050505050565b600054600160a060020a031615156123c5576123c360006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190557f688dcfd7000000000000000000000000000000000000000000000000000000008252600160f860020a0319851660048301529151600160a060020a03909216925063688dcfd791602480830192600092919082900301818387803b156100005760325a03f115610000575050505b5b50565b600f54600090819081908190819060ff161515610f8657600193505b600554841161263357600084815260046020526040902054600160a060020a0316925061250683610a8f565b915061251183610b35565b6000858152600460205260409020600101549091508281011080159061254b57506000848152600460205260409020600101548201819010155b156125b45760008481526004602090815260409182902060010180548486039081019091558251600160a060020a03871681529182015281517f8ff49347da9034aab52b79ac6b2ba8cf17d221516834af5e5fa04bef1df4d7cd929181900390910190a16125f4565b6008805460a060020a60ff02191660a060020a1790556040517f52e578ad17dc8fe0ff456fdf1f81516f7d29eb85fff301475a3a29d0e84bb31a90600090a15b60008481526004602052604090206001015485018590106126275760008481526004602052604090206001015494909401935b5b6001909301926124da565b6000600d819055600e556006859055600f805460ff191660011790555b5b5b5050505050565b600054600160a060020a031615156126775761267560006127fc565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518160e060020a028152600401809050602060405180830381600087803b156100005760325a03f11561000057505060408051805160018054600160a060020a031916606060020a9283029290920491909117908190557fe8a5282d000000000000000000000000000000000000000000000000000000008252600482018590529151600160a060020a03909216925063e8a5282d91602480830192600092919082900301818387803b156100005760325a03f115610000575050505b5b50565b33600160a060020a038116600081815260036020908152604080832086905585835260048252918290208054600160a060020a031916606060020a958602959095049490941784553460019094018490556006805485019055815192835282019290925281517fa4a46f45c9996c78320ae470714f930acba653b022fddec1735c1400209780e4929181900390910190a15b50565b6000600061281d731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed612a4b565b1115612851575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610acc565b600061287073c03a2615d5efaf5f49f60b7bb6583eaec212fdf1612a4b565b11156128a4575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610acc565b60006128c37351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa612a4b565b11156128f7575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610acc565b5060005b919050565b6040805160208101909152600090819052828180805b8351811015612a2b57603060f860020a02848281518110156100005790602001015160f860020a900460f860020a02600160f860020a0319161015801561298b5750603960f860020a02848281518110156100005790602001015160f860020a900460f860020a02600160f860020a03191611155b156129e65781156129ae578515156129a657612a2b566129ae565b600019909501945b5b600a830292506030848281518110156100005790602001015160f860020a900460f860020a0260f860020a90040383019250612a21565b838181518110156100005790602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a021415612a2157600191505b5b5b600101612916565b6000861115612a3d5785600a0a830292505b8294505b5050505092915050565b803b5b919050565b55524c5d205b276a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e30272c20275c6e7b226a736f6e727063223a22322e30222c226d6574686f64223a2267656e65726174655369676e6564496e746567657273222c22706172616d73223a7b226170694b6579223a247b5b646563727970745d20424c59336246324e577455594d714b6a2b313366494a2b725234497a6d6c4e415039554d316e6d62436969767746586d6d336c5538367a6a73496c6461646c48776b4839483865706869512f464e674572614d6b6e7956686c63656f543157674a763368316950383766524b333479714152485638702f714b6f5947315245316c4a36494b49316f5576447143666c6c786b662b75397676574e31383866733d7d2c226e223a312c226d696e223a312c226d6178223a3130303030247b5b6964656e746974795d20227d227d2c226964223a31247b5b6964656e746974795d20227d227d275d

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.