ETH Price: $1,937.17 (-2.33%)
 

Overview

ETH Balance

0.000244331474598766 ETH

Eth Value

$0.47 (@ $1,937.17/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Register98436792020-04-10 9:18:222152 days ago1586510302IN
0xa4e5FB80...C73aDec1b
0.01 ETH0.001190677
Withdraw74050122019-03-20 9:47:072539 days ago1553075227IN
0xa4e5FB80...C73aDec1b
0 ETH0.000068061
Withdraw69628012018-12-27 15:29:422621 days ago1545924582IN
0xa4e5FB80...C73aDec1b
0 ETH0.000212264
Withdraw69554062018-12-26 9:19:102623 days ago1545815950IN
0xa4e5FB80...C73aDec1b
0 ETH0.000106132
Claim68499152018-12-08 17:38:382640 days ago1544290718IN
0xa4e5FB80...C73aDec1b
0 ETH0.000252654
Withdraw68499102018-12-08 17:36:332640 days ago1544290593IN
0xa4e5FB80...C73aDec1b
0 ETH0.000212264
Withdraw67083012018-11-15 9:40:132664 days ago1542274813IN
0xa4e5FB80...C73aDec1b
0 ETH0.000133233.5
Claim67082992018-11-15 9:39:372664 days ago1542274777IN
0xa4e5FB80...C73aDec1b
0 ETH0.000374566
Withdraw64200702018-09-29 7:58:222711 days ago1538207902IN
0xa4e5FB80...C73aDec1b
0 ETH0.0006203411.69
Withdraw64018992018-09-26 8:15:322714 days ago1537949732IN
0xa4e5FB80...C73aDec1b
0 ETH0.000342599
Withdraw64018952018-09-26 8:14:102714 days ago1537949650IN
0xa4e5FB80...C73aDec1b
0 ETH0.000477599
Claim64018942018-09-26 8:13:562714 days ago1537949636IN
0xa4e5FB80...C73aDec1b
0 ETH0.000568469
Withdraw63959162018-09-25 8:48:162715 days ago1537865296IN
0xa4e5FB80...C73aDec1b
0 ETH0.0003296.2
Claim63958702018-09-25 8:38:372715 days ago1537864717IN
0xa4e5FB80...C73aDec1b
0 ETH0.00037016.3
Claim63958252018-09-25 8:29:282715 days ago1537864168IN
0xa4e5FB80...C73aDec1b
0 ETH0.000898986.5
Buy Xid63537662018-09-18 9:56:272722 days ago1537264587IN
0xa4e5FB80...C73aDec1b
0.00296893 ETH0.001931596
Buy Xname63261542018-09-13 20:46:582726 days ago1536871618IN
0xa4e5FB80...C73aDec1b
0.01962546 ETH0.001044614.5
Buy Xname63253532018-09-13 17:32:532726 days ago1536859973IN
0xa4e5FB80...C73aDec1b
0.0237493 ETH0.001778365.7
Buy Xname63199522018-09-12 19:59:502727 days ago1536782390IN
0xa4e5FB80...C73aDec1b
0.02943542 ETH0.001203285.2
Register63186112018-09-12 14:33:012727 days ago1536762781IN
0xa4e5FB80...C73aDec1b
0.01 ETH0.00068794.2
Buy Xname63185672018-09-12 14:23:432727 days ago1536762223IN
0xa4e5FB80...C73aDec1b
0.03805218 ETH0.001771066.2
Buy Xname63185602018-09-12 14:22:262727 days ago1536762146IN
0xa4e5FB80...C73aDec1b
0.04218982 ETH0.001570755.5
Register63185422018-09-12 14:18:392727 days ago1536761919IN
0xa4e5FB80...C73aDec1b
0.01 ETH0.000818945
Register63184442018-09-12 13:55:252727 days ago1536760525IN
0xa4e5FB80...C73aDec1b
0.01 ETH0.000819045
Register63184412018-09-12 13:54:382727 days ago1536760478IN
0xa4e5FB80...C73aDec1b
0.01 ETH0.000728434.4
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-98436792020-04-10 9:18:222152 days ago1586510302
0xa4e5FB80...C73aDec1b
0.01 ETH
-74050122019-03-20 9:47:072539 days ago1553075227
0xa4e5FB80...C73aDec1b
0.01973877 ETH
-69628012018-12-27 15:29:422621 days ago1545924582
0xa4e5FB80...C73aDec1b
0.00448719 ETH
-69554062018-12-26 9:19:102623 days ago1545815950
0xa4e5FB80...C73aDec1b
0.04115938 ETH
-68499152018-12-08 17:38:382640 days ago1544290718
0xa4e5FB80...C73aDec1b
0.11096765 ETH
-68499102018-12-08 17:36:332640 days ago1544290593
0xa4e5FB80...C73aDec1b
0.01415853 ETH
Transfer67083012018-11-15 9:40:132664 days ago1542274813
0xa4e5FB80...C73aDec1b
0.00814284 ETH
Transfer67082992018-11-15 9:39:372664 days ago1542274777
0xa4e5FB80...C73aDec1b
0.11165946 ETH
Transfer64200702018-09-29 7:58:222711 days ago1538207902
0xa4e5FB80...C73aDec1b
0.00944028 ETH
Transfer64018992018-09-26 8:15:322714 days ago1537949732
0xa4e5FB80...C73aDec1b
0.00545043 ETH
Transfer64018952018-09-26 8:14:102714 days ago1537949650
0xa4e5FB80...C73aDec1b
0.00808239 ETH
Transfer64018942018-09-26 8:13:562714 days ago1537949636
0xa4e5FB80...C73aDec1b
0.11097106 ETH
Transfer63959162018-09-25 8:48:162715 days ago1537865296
0xa4e5FB80...C73aDec1b
0.01133141 ETH
Transfer63958702018-09-25 8:38:372715 days ago1537864717
0xa4e5FB80...C73aDec1b
0.11165833 ETH
Transfer63537662018-09-18 9:56:272722 days ago1537264587
0xa4e5FB80...C73aDec1b
0.00035627 ETH
Transfer63537662018-09-18 9:56:272722 days ago1537264587
0xa4e5FB80...C73aDec1b
0.00017813 ETH
Transfer63261542018-09-13 20:46:582726 days ago1536871618
0xa4e5FB80...C73aDec1b
0.00235505 ETH
Transfer63261542018-09-13 20:46:582726 days ago1536871618
0xa4e5FB80...C73aDec1b
0.00117752 ETH
Transfer63253532018-09-13 17:32:532726 days ago1536859973
0xa4e5FB80...C73aDec1b
0.00284991 ETH
Transfer63253532018-09-13 17:32:532726 days ago1536859973
0xa4e5FB80...C73aDec1b
0.00142495 ETH
Transfer63199522018-09-12 19:59:502727 days ago1536782390
0xa4e5FB80...C73aDec1b
0.00353225 ETH
Transfer63199522018-09-12 19:59:502727 days ago1536782390
0xa4e5FB80...C73aDec1b
0.00176612 ETH
Transfer63186112018-09-12 14:33:012727 days ago1536762781
0xa4e5FB80...C73aDec1b
0.01 ETH
Transfer63185672018-09-12 14:23:432727 days ago1536762223
0xa4e5FB80...C73aDec1b
0.00456626 ETH
Transfer63185672018-09-12 14:23:432727 days ago1536762223
0xa4e5FB80...C73aDec1b
0.00228313 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FoMoInsurance

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-09-12
*/

pragma solidity ^0.4.24;


contract FoMoInsurance {
    using SafeMath for *;
    using NameFilter for string;
    using F3DKeysCalcLong for uint256;


    //*********
    // STRUCTS
    //*********
    struct Player {
        uint256 id;     // player id
        bytes32 name;   // player name
        uint256 gen;    // general vault
        uint256 aff;    // affiliate vault
        bool isAgent;   // referral activated
        uint256 eth;    // eth player has added to round
        uint256 keys;   // keys
        uint256 units;  // uints of insurance
        uint256 plyrLastSeen; // last day player played
        uint256 mask;   // player mask
        uint256 level;
        uint256 accumulatedAff;
    }


    //***************
    // EXTERNAL DATA
    //***************
    FoMo3Dlong constant private FoMoLong = FoMo3Dlong(0xA62142888ABa8370742bE823c1782D17A0389Da1);
    DiviesInterface constant private Divies = DiviesInterface(0x93B2dbDd3F242EED7D7c7180c5A4Eddc4BaAE3E7);
    address constant private community = address(0xe853A139b87dD816f052A60Ef646Fd89f7964545);
    uint256 public end;
    bool public ended;


    //******************
    // GLOBAL VARIABLES
    //******************
    mapping(address => mapping(uint256 => uint256)) public unitToExpirePlayer;
    mapping(uint256 => uint256) public unitToExpire; // unit of insurance due at day x

    uint256 public issuedInsurance; // all issued insurance
    uint256 public ethOfKey;        // virtual eth of bought keys
    uint256 public keys;            // totalSupply of key
    uint256 public pot;             // eth gonna pay to beneficiary
    uint256 public today;           // today's date
    uint256 public _now;            // current time
    uint256 public mask;            // global mask
    uint256 public agents;          // number of agent

    // player data
    mapping(address => Player) public player; // player data
    mapping(uint256 => address) public agentxID_; // return agent address by id
    mapping(bytes32 => address) public agentxName_; // return agent address by name

    // constant parameters
    uint256 constant maxInsurePeriod = 100;
    uint256 constant thisRoundIndex = 2;
    uint256 constant maxLevel = 10;

    // rate of buying x day insurance
    uint256[101] public rate =
    [0,
    1000000000000000000,
    1990000000000000000,
    2970100000000000000,
    3940399000000000000,
    4900995010000000000,
    5851985059900000000,
    6793465209301000000,
    7725530557207990000,
    8648275251635910100,
    9561792499119550999,
    10466174574128355489,
    11361512828387071934,
    12247897700103201215,
    13125418723102169203,
    13994164535871147511,
    14854222890512436036,
    15705680661607311676,
    16548623854991238559,
    17383137616441326173,
    18209306240276912911,
    19027213177874143782,
    19836941046095402344,
    20638571635634448321,
    21432185919278103838,
    22217864060085322800,
    22995685419484469572,
    23765728565289624876,
    24528071279636728627,
    25282790566840361341,
    26029962661171957728,
    26769663034560238151,
    27501966404214635769,
    28226946740172489411,
    28944677272770764517,
    29655230500043056872,
    30358678195042626303,
    31055091413092200040,
    31744540498961278040,
    32427095093971665260,
    33102824143031948607,
    33771795901601629121,
    34434077942585612830,
    35089737163159756702,
    35738839791528159135,
    36381451393612877544,
    37017636879676748769,
    37647460510879981281,
    38270985905771181468,
    38888276046713469653,
    39499393286246334956,
    40104399353383871606,
    40703355359850032890,
    41296321806251532561,
    41883358588189017235,
    42464525002307127063,
    43039879752284055792,
    43609480954761215234,
    44173386145213603082,
    44731652283761467051,
    45284335760923852380,
    45831492403314613856,
    46373177479281467717,
    46909445704488653040,
    47440351247443766510,
    47965947734969328845,
    48486288257619635557,
    49001425375043439201,
    49511411121293004809,
    50016297010080074761,
    50516134039979274013,
    51010972699579481273,
    51500862972583686460,
    51985854342857849595,
    52465995799429271099,
    52941335841434978388,
    53411922483020628604,
    53877803258190422318,
    54339025225608518095,
    54795634973352432914,
    55247678623618908585,
    55695201837382719499,
    56138249819008892304,
    56576867320818803381,
    57011098647610615347,
    57440987661134509194,
    57866577784523164102,
    58287912006677932461,
    58705032886611153136,
    59117982557745041605,
    59526802732167591189,
    59931534704845915277,
    60332219357797456124,
    60728897164219481563,
    61121608192577286747,
    61510392110651513880,
    61895288189544998741,
    62276335307649548754,
    62653571954573053266,
    63027036235027322733,
    63396765872677049506];

    // threshold of agent upgrade
    uint256[10] public requirement =
    [0,
    73890560989306501,
    200855369231876674,
    545981500331442382,
    1484131591025766010,
    4034287934927351160,
    10966331584284585813,
    29809579870417282259,
    81030839275753838749,
    220264657948067161559];


    //******************
    // EVENT
    //******************
    event UPGRADE (address indexed agent, uint256 level);
    event BUYINSURANCE(address indexed buyer, uint256 indexed start, uint256 unit,  uint256 date);


    //******************
    // MODIFIER
    //******************
    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;

        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }


    /**
     * @dev Constructor
     * @notice Initialize the time
     */
    constructor() public {
        _now = now;
        today = _now / 1 days;
    }

    /**
     * @dev Ticker
     * @notice It is called everytime when a player interacts with this contract
     * @return true is Fomo3D is ended, false otherwise
     */
    function tick() internal returns(bool) {
        if (_now != now) {
            _now = now;
            uint256 _today; // the current day as soon as ticker is called

            //check if fomo3D ends
            (,,end, ended,,,,,,,,) = FoMoLong.round_(thisRoundIndex);
            if (!ended) {
                _today = _now / 1 days;
            }
            else {
                _today = end / 1 days;
            }

            // calculate the outdated issuedInsurance
            while (today < _today) {
                issuedInsurance = issuedInsurance.sub(unitToExpire[today]);
                today += 1;
            }
        }
        return ended;
    }

    /**
     * @dev Register
     * @notice Register a name by a human player
     */
    function register(string _nameString) external payable isHuman() {
        bytes32 _name = _nameString.nameFilter();
        address _agent = msg.sender;
        require(msg.value >= 10000000000000000);
        require(agentxName_[_name] == address(0));

        if(!player[_agent].isAgent){
            agents += 1;
            player[_agent].isAgent = true;
            player[_agent].id = agents;
            player[_agent].level = 1;
            agentxID_[agents] = _agent;
        }
        // set name active for the player
        player[_agent].name = _name;
        agentxName_[_name] = _agent;

        if(!community.send(msg.value)){
            pot = pot.add(msg.value);
        }
    }

    /**
     * @dev Upgrade
     * @notice Upgrade when a player's affiliate bonus meet the promotion
     */
    function upgrade() external isHuman(){
        address _agent = msg.sender;
        require(player[_agent].isAgent);
        require(player[_agent].level < maxLevel);

        if(player[_agent].accumulatedAff >= requirement[player[_agent].level]){
            player[_agent].level = (1).add(player[_agent].level);
            emit UPGRADE(_agent,player[_agent].level);
        }
    }

    /**
     * @dev Buy, using address for referral
     */
    function buyXaddr(address _agent, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        // validate agent
        if(!player[_agent].isAgent){
            _agent = address(0);
        }

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    function buyXid(uint256 _agentId, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        address _agent = agentxID_[_agentId];

        // validate agent
        if(!player[_agent].isAgent){
            _agent = address(0);
        }

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    function buyXname(bytes32 _agentName, uint256 _date)
        isHuman()
        public
        payable
    {
        // ticker
        if(tick()){
            msg.sender.transfer(msg.value);
            return;
        }

        address _agent = agentxName_[_agentName];

        // validate agent
        if(!player[_agent].isAgent){
            _agent = address(0);
        }

        buyCore(msg.sender, msg.value, _date, _agent);
    }

    /**
     * @dev Core part of buying
     */
    function buyCore(address _buyer, uint256 _eth, uint256 _date, address _agent) internal {

        updatePlayerUnit(_buyer);
        
        require(_eth >= 1000000000, "pocket lint: not a valid currency");

        if(_date > maxInsurePeriod){
            _date = maxInsurePeriod;
        }
        uint256 _rate = rate[_date] + 1000000000000000000;
        uint256 ethToBuyKey = _eth.mul(1000000000000000000) / _rate;
        //-- ethToBuyKey is a virtual amount used to represent the eth player paid for buying keys, which is usually different from _eth

        // get value of keys and insurances can be bought
        uint256 _key = ethOfKey.keysRec(ethToBuyKey);
        uint256 _unit = (_date == 0)? 0: _key;
        uint256 newDate = today + _date - 1;


        // update global data
        ethOfKey = ethOfKey.add(ethToBuyKey);
        keys = keys.add(_key);
        unitToExpire[newDate] = unitToExpire[newDate].add(_unit);
        issuedInsurance = issuedInsurance.add(_unit);

        // update player data
        player[_buyer].eth = player[_buyer].eth.add(_eth);
        player[_buyer].keys = player[_buyer].keys.add(_key);
        player[_buyer].units = player[_buyer].units.add(_unit);
        unitToExpirePlayer[_buyer][newDate] = unitToExpirePlayer[_buyer][newDate].add(_unit);

        distributeEx(_eth, _agent);
        distributeIn(_buyer, _eth, _key);
        emit BUYINSURANCE(_buyer, today, _unit, _date);
    }

    /**
     * @dev Update player's units of insurance
     */
    function updatePlayerUnit(address _player) internal {
        uint256 _today = player[_player].plyrLastSeen;
        uint256 expiredUnit = 0;
        if(_today != 0){
            while(_today < today){
                expiredUnit = expiredUnit.add(unitToExpirePlayer[_player][_today]);
                _today += 1;
            }
            player[_player].units = player[_player].units.sub(expiredUnit);
        }
        player[_player].plyrLastSeen = today;
    }

    /**
     * @dev Distribute to the external
     */
    function distributeEx(uint256 _eth, address _agent) internal {
        uint256 ex = _eth / 4 ;
        uint256 affRate;
        if(player[_agent].isAgent){
            affRate = player[_agent].level.add(6);
        }
        uint256 _aff = _eth.mul(affRate) / 100;
        if (_aff > 0) {
            player[_agent].aff = player[_agent].aff.add(_aff);
            player[_agent].accumulatedAff = player[_agent].accumulatedAff.add(_aff);
        }
        ex = ex.sub(_aff);
        uint256 _com = ex / 3;
        uint256 _p3d = ex.sub(_com);

        if(!community.send(_com)){
            pot = pot.add(_com);
        }
        Divies.deposit.value(_p3d)();
    }

    /**
     * @dev Distribute to the internal
     */
    function distributeIn(address _buyer, uint256 _eth, uint256 _keys) internal {
        uint256 _gen = _eth.mul(3) / 20;

        // update eth balance (eth = eth - (com share + aff share + p3d share))
        _eth = _eth.sub(_eth / 4);

        // calculate pot
        uint256 _pot = _eth.sub(_gen);

        // distribute gen share (that's what updateMasks() does) and adjust
        // balances for dust.
        uint256 _dust = updateMasks(_buyer, _gen, _keys);
        if (_dust > 0)
            _gen = _gen.sub(_dust);

        // add eth to pot
        pot = pot.add(_dust).add(_pot);
    }

    function updateMasks(address  _player, uint256 _gen, uint256 _keys)
        private
        returns(uint256)
    {
        /* MASKING NOTES
            earnings masks are a tricky thing for people to wrap their minds around.
            the basic thing to understand here is we're going to have a global
            tracker based on profit per share for each round, that increases in
            relevant proportion to the increase in share supply.

            the player will have an additional mask that basically says "based
            on the global mask, my shares, and how much i've already withdrawn,
            how much is still owed to me?"
        */

        // calculate profit per key & global mask based on this buy:  (dust goes to pot)
        uint256 _ppt = _gen.mul(1000000000000000000) / keys;
        mask = mask.add(_ppt);

        // calculate player earning from their own buy (only based on the keys
        // they just bought). & update player earnings mask
        uint256 _pearn = (_ppt.mul(_keys)) / 1000000000000000000;
        player[_player].mask = (((mask.mul(_keys)) / 1000000000000000000).sub(_pearn)).add(player[_player].mask);

        // calculate & return dust
        return(_gen.sub( _ppt.mul(keys) / 1000000000000000000));
    }

    /**
     * @dev Submit a claim from the beneficiary
     */
    function claim() isHuman() public {
        require(tick());
        address beneficiary = msg.sender;
        updatePlayerUnit(beneficiary);
        uint256 amount = pot.mul(player[beneficiary].units) / issuedInsurance;
        player[beneficiary].units = 0;
        beneficiary.transfer(amount);
    }

    /**
     * @dev Withdraw dividends and aff
     */
    function withdraw() isHuman() public {
        // setup temp var for player eth
        uint256 _eth;

        // get their earnings
        _eth = withdrawEarnings(msg.sender);

        // gib moni
        if (_eth > 0)
            msg.sender.transfer(_eth);
    }

    function withdrawEarnings(address _player)
        private
        returns(uint256)
    {
        // update gen vault
        updateGenVault(_player);

        // from vaults
        uint256 _earnings = player[_player].gen.add(player[_player].aff);
        if (_earnings > 0) {
            player[_player].gen = 0;
            player[_player].aff = 0;
        }

        return(_earnings);
    }

    function updateGenVault(address _player)
        private
    {
        uint256 _earnings = calcUnMaskedEarnings(_player);
        if (_earnings > 0) {
            // put in gen vault
            player[_player].gen = _earnings.add(player[_player].gen);
            // zero out their earnings by updating mask
            player[_player].mask = _earnings.add(player[_player].mask);
        }
    }

    function calcUnMaskedEarnings(address _player)
        private
        view
        returns(uint256)
    {
        return(  (mask.mul(player[_player].keys) / 1000000000000000000).sub(player[_player].mask)  );
    }

    /**
     * @dev Return the price buyer will pay for next 1 individual key.
     * @return Price for next key bought (in wei format)
     */
    function getBuyPrice() public view returns(uint256) {
        return(keys.add(1000000000000000000).ethRec(1000000000000000000));
    }

    /**
     * @dev Get the units of insurance of player
     * @return Amount of existing units of insurance
     */
    function getCurrentUnit(address _player) public view returns(uint256) {
        uint256 _unit = player[_player].units;
        uint256 _today = player[_player].plyrLastSeen;
        uint256 expiredUnit = 0;
        if(_today != 0){
            while(_today < today){
                expiredUnit = expiredUnit.add(unitToExpirePlayer[_player][_today]);
                _today += 1;
            }

        }
        return( _unit == 0 ? 0 : _unit.sub(expiredUnit));
    }

    /**
     * @dev Get the list of units of insurace going to expire of a player
     * @return List of units of insurance going to expire from a player
     */
    function getExpiringUnitListPlayer(address _player)
        public
        view
        returns(uint256[maxInsurePeriod] expiringUnitList)
    {
        for(uint256 i=0; i<maxInsurePeriod; i++) {
            expiringUnitList[i] = unitToExpirePlayer[_player][today+i];
        }
        return(expiringUnitList);
    }

    /**
     * @dev Get the list of units of insurace going to expire
     * @return List of units of insurance going to expire
     */
    function getExpiringUnitList()
        public
        view
        returns(uint256[maxInsurePeriod] expiringUnitList)
    {
        for(uint256 i=0; i<maxInsurePeriod; i++){
            expiringUnitList[i] = unitToExpire[today+i];
        }
        return(expiringUnitList);
    }
}

contract FoMo3Dlong {
//==============================================================================
//     _| _ _|_ _    _ _ _|_    _   .
//    (_|(_| | (_|  _\(/_ | |_||_)  .  (data used to store game info that changes)
//=============================|================================================
    uint256 public rID_;    // round id number / total rounds that have happened
//****************
// ROUND DATA
//****************
    mapping (uint256 => F3Ddatasets.Round) public round_;
}

interface DiviesInterface {
    function deposit() external payable;
}

library F3DKeysCalcLong {
    using SafeMath for *;
    /**
     * @dev calculates number of keys received given X eth
     * @param _curEth current amount of eth in contract
     * @param _newEth eth being spent
     * @return amount of ticket purchased
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }

    /**
     * @dev calculates amount of eth received if you sold X keys
     * @param _curKeys current amount of keys that exist
     * @param _sellKeys amount of keys you wish to sell
     * @return amount of eth received
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev calculates how many keys would exist with given an amount of eth
     * @param _eth eth "in contract"
     * @return number of keys that would exist
     */
    function keys(uint256 _eth)
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }

    /**
     * @dev calculates how much eth would be in contract given a number of keys
     * @param _keys number of keys "in contract"
     * @return eth that would exists
     */
    function eth(uint256 _keys)
        internal
        pure
        returns(uint256)
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

library F3Ddatasets {
    struct Round {
        uint256 plyr;   // pID of player in lead
        uint256 team;   // tID of team in lead
        uint256 end;    // time ends/ended
        bool ended;     // has round end function been ran
        uint256 strt;   // time round started
        uint256 keys;   // keys
        uint256 eth;    // total eth in
        uint256 pot;    // eth to pot (during round) / final amount paid to winner (after round ends)
        uint256 mask;   // global mask
        uint256 ico;    // total eth sent in during ICO phase
        uint256 icoGen; // total eth for gen during ICO phase
        uint256 icoAvg; // average key price for ICO phase
    }
}

library NameFilter {
    /**
     * @dev filters name strings
     * -converts uppercase to lower case.
     * -makes sure it does not start/end with a space
     * -makes sure it does not contain multiple spaces in a row
     * -cannot be only numbers
     * -cannot start with 0x
     * -restricts characters to A-Z, a-z, 0-9, and space.
     * @return reprocessed string in bytes32 format
     */
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;

        //sorry limited to 32 characters
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // make sure it doesnt start with or end with space
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }

        // create a bool to track if we have a non number character
        bool _hasNonNumber;

        // convert & check
        for (uint256 i = 0; i < _length; i++)
        {
            // if its uppercase A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // convert to lower case a-z
                _temp[i] = byte(uint(_temp[i]) + 32);

                // we have a non number
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // require character is a space
                    _temp[i] == 0x20 ||
                    // OR lowercase a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // or 0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // make sure theres not 2x spaces in a row
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");

                // see if we have a character other than a number
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;
            }
        }

        require(_hasNonNumber == true, "string cannot be only numbers");

        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

library SafeMath {
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }

    /**
     * @dev gives square root of given x.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y)
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }

    /**
     * @dev gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }

    /**
     * @dev x to the power of y
     */
    function pwr(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mask","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"agentxName_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unitToExpirePlayer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"keys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getExpiringUnitList","outputs":[{"name":"expiringUnitList","type":"uint256[100]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issuedInsurance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"}],"name":"getExpiringUnitListPlayer","outputs":[{"name":"expiringUnitList","type":"uint256[100]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"player","outputs":[{"name":"id","type":"uint256"},{"name":"name","type":"bytes32"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"isAgent","type":"bool"},{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"units","type":"uint256"},{"name":"plyrLastSeen","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"level","type":"uint256"},{"name":"accumulatedAff","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"agents","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"}],"name":"getCurrentUnit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"requirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_agentId","type":"uint256"},{"name":"_date","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_agent","type":"address"},{"name":"_date","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_agentName","type":"bytes32"},{"name":"_date","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"unitToExpire","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_now","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethOfKey","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"today","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"agentxID_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"end","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"}],"name":"register","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"agent","type":"address"},{"indexed":false,"name":"level","type":"uint256"}],"name":"UPGRADE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"start","type":"uint256"},{"indexed":false,"name":"unit","type":"uint256"},{"indexed":false,"name":"date","type":"uint256"}],"name":"BUYINSURANCE","type":"event"}]

6080604052610ca060405190810160405280600068ffffffffffffffffff168152602001670de0b6b3a764000068ffffffffffffffffff168152602001671b9de674df07000068ffffffffffffffffff168152602001672937ea36b763400068ffffffffffffffffff1681526020016736af1c036c4df00068ffffffffffffffffff168152602001674403d4feb903140068ffffffffffffffffff1681526020016751366d68263b870068ffffffffffffffffff168152602001675e473c9d525c5f4068ffffffffffffffffff168152602001676b36991c33cecef068ffffffffffffffffff168152602001677804d885558f75d468ffffffffffffffffff1681526020016784b24f9e0e03f21768ffffffffffffffffff16815260200167913f5252b02558a168ffffffffffffffffff168152602001679dac33b8b70e17be68ffffffffffffffffff16815260200167a9f94610ebf9a1bf68ffffffffffffffffff16815260200167b626dac986c4187368ffffffffffffffffff16815260200167c235428048f80df768ffffffffffffffffff16815260200167ce24cd0493784b4468ffffffffffffffffff16815260200167d9f5c95976d3693c68ffffffffffffffffff16815260200167e5a885b7be4ee59f68ffffffffffffffffff16815260200167f13d4f8ff5b73a5d68ffffffffffffffffff16815260200167fcb4738c6a025b0f68ffffffffffffffffff1681526020016801080e3d9324d1da2668ffffffffffffffffff1681526020016801134af8c7e2e1d56868ffffffffffffffffff16815260200168011e6aef8e0571a7c168ffffffffffffffffff1681526020016801296e6b8a7eb33d1e68ffffffffffffffffff16815260200168013455b5a5b94dc43068ffffffffffffffffff16815260200168013f21160d7b00594468ffffffffffffffffff168152602001680149d0d436c271252c68ffffffffffffffffff1681526020016801546536dfa0354b3368ffffffffffffffffff16815260200168015ede84110b1de17d68ffffffffffffffffff1681526020016801693d0120afd60fe068ffffffffffffffffff16815260200168017380f2b2bbde524768ffffffffffffffffff16815260200168017daa9cbba3f0bcf968ffffffffffffffffff168152602001680187ba4281e5da02c368ffffffffffffffffff168152602001680191b0269fc5d2dee568ffffffffffffffffff16815260200168019b8c8b05076566e868ffffffffffffffffff1681526020016801a54fb0f8a1e9aaff68ffffffffffffffffff1681526020016801aef9d91a70a4ee6868ffffffffffffffffff1681526020016801b88b4364de96a45868ffffffffffffffffff1681526020016801c2042f2e8dfe416c68ffffffffffffffffff1681526020016801cb64db2bfba4d53f68ffffffffffffffffff1681526020016801d4ad85711df543c168ffffffffffffffffff1681526020016801ddde6b72ffedda1e68ffffffffffffffffff1681526020016801e6f7ca0957f5df9e68ffffffffffffffffff1681526020016801eff9dd701aa1a79f68ffffffffffffffffff1681526020016801f8e4e149096f8ee868ffffffffffffffffff168152602001680201b9109d3d8833e168ffffffffffffffffff16815260200168020a76a5deae8c1ee168ffffffffffffffffff1681526020016802131ddae9b578f59c68ffffffffffffffffff16815260200168021baee9068bb03ad568ffffffffffffffffff1681526020016802242a08eac62981ec68ffffffffffffffffff16815260200168022c8f72baccd9e47668ffffffffffffffffff168152602001680234df5e0b4e5a6efa68ffffffffffffffffff16815260200168023d1a01e2afd7211168ffffffffffffffffff1681526020016802453f94ba7950049368ffffffffffffffffff16815260200168024d504c80be35c71768ffffffffffffffffff1681526020016802554c5e99826b28f068ffffffffffffffffff16815260200168025d33ffe01bb47d0268ffffffffffffffffff1681526020016802650764a88f9e5d0a68ffffffffffffffffff16815260200168026cc6c0c0ede49eab68ffffffffffffffffff168152602001680274724772a7627e5c68ffffffffffffffffff16815260200168027c0a2b83e194de6068ffffffffffffffffff1681526020016802838e9f38c6b7614568ffffffffffffffffff16815260200168028affd454d28510f068ffffffffffffffffff1681526020016802925dfc1c1ba52cee68ffffffffffffffffff168152602001680299a9475499cca4cd68ffffffffffffffffff1681526020016802a0e1e647689cad6568ffffffffffffffffff1681526020016802a80808c20746ca6168ffffffffffffffffff1681526020016802af1bde1794fe900968ffffffffffffffffff1681526020016802b61d95220a414c0968ffffffffffffffffff1681526020016802bd0d5c436efbaf1d68ffffffffffffffffff1681526020016802c3eb61670d957cb968ffffffffffffffffff1681526020016802cab7d202a2eb313c68ffffffffffffffffff1681526020016802d172db178b3d7afb68ffffffffffffffffff1681526020016802d81ca933ec1e4e3b68ffffffffffffffffff1681526020016802deb56873db63485468ffffffffffffffffff1681526020016802e53d44828325027c68ffffffffffffffffff1681526020016802ebb4689b42d2e12e68ffffffffffffffffff1681526020016802f21aff8acd62d9cf68ffffffffffffffffff1681526020016802f87133b044a4951268ffffffffffffffffff1681526020016802feb72efe51bf41a968ffffffffffffffffff168152602001680304ed1afc3ae1580b68ffffffffffffffffff16815260200168030b1320c6f6297d9068ffffffffffffffffff16815260200168031129691239cfa2b568ffffffffffffffffff168152602001680317301c298995663368ffffffffffffffffff16815260200168031d2761f14184b48a68ffffffffffffffffff1681526020016803230f61e79e0389c668ffffffffffffffffff168152602001680328e84325c143a9ad68ffffffffffffffffff16815260200168032eb22c60b61510f068ffffffffffffffffff1681526020016803346d43ea7021d0c568ffffffffffffffffff16815260200168033a19afb2c999f51568ffffffffffffffffff16815260200168033fb795487e56048d68ffffffffffffffffff1681526020016803454719da247698fc68ffffffffffffffffff16815260200168034ac8623722877ddb68ffffffffffffffffff1681526020016803503b92d0a32cb25b68ffffffffffffffffff168152602001680355a0cfba865f9c1868ffffffffffffffffff16815260200168035af83cac5042a75568ffffffffffffffffff16815260200168036041fd02159181d268ffffffffffffffffff1681526020016803657e33bd65b40d5268ffffffffffffffffff16815260200168036aad0386327a176d68ffffffffffffffffff16815260200168036fce8eabb585d4a268ffffffffffffffffff16815250600f90606562000a4792919062000b8f565b5061014060405190810160405280600068ffffffffffffffffff1681526020016701068312e0059e8568ffffffffffffffffff1681526020016702c994e4e64bc24268ffffffffffffffffff168152602001670793b7482530c0ce68ffffffffffffffffff168152602001671498b1d19b06ae7a68ffffffffffffffffff1681526020016737fcab8092fd2d7868ffffffffffffffffff1681526020016798303c794a6def5568ffffffffffffffffff16815260200168019db0e6f447db64d368ffffffffffffffffff168152602001680464875f006314189d68ffffffffffffffffff168152602001680bf0c943643f76e5d768ffffffffffffffffff16815250607490600a62000b5b92919062000be1565b5034801562000b6957600080fd5b50426009819055506201518060095481151562000b8257fe5b0460088190555062000c5b565b826065810192821562000bce579160200282015b8281111562000bcd578251829068ffffffffffffffffff1690559160200191906001019062000ba3565b5b50905062000bdd919062000c33565b5090565b82600a810192821562000c20579160200282015b8281111562000c1f578251829068ffffffffffffffffff1690559160200191906001019062000bf5565b5b50905062000c2f919062000c33565b5090565b62000c5891905b8082111562000c5457600081600090555060010162000c3a565b5090565b90565b613fa98062000c6b6000396000f30060806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063018a25e81461016f578063116134ee1461019a57806312fa6feb146101c557806317604f71146101f4578063274806e014610265578063307540f6146102c65780633ccfd60b146102f15780633ef7c68714610308578063402e912f1461035b578063489b3fee146103865780634ba2363a146104055780634c54e1b5146104305780634e71d92d146104e057806358516661146104f7578063729fc61314610522578063757b0884146105795780638f38f309146105ba57806398a0871d146105e4578063a65b37a114610624578063aaaadb5814610652578063b3bb8cd414610693578063b510e42c146106be578063b74e452b146106e9578063d55ec69714610714578063d93be4331461072b578063e7ee6ad614610798578063efbe1c1c146107d9578063f2c298be14610804575b600080fd5b34801561017b57600080fd5b50610184610832565b6040518082815260200191505060405180910390f35b3480156101a657600080fd5b506101af610870565b6040518082815260200191505060405180910390f35b3480156101d157600080fd5b506101da610876565b604051808215151515815260200191505060405180910390f35b34801561020057600080fd5b506102236004803603810190808035600019169060200190929190505050610889565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027157600080fd5b506102b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108bc565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102db6108e1565b6040518082815260200191505060405180910390f35b3480156102fd57600080fd5b506103066108e7565b005b34801561031457600080fd5b5061031d6109cc565b6040518082606460200280838360005b8381101561034857808201518184015260208101905061032d565b5050505090500191505060405180910390f35b34801561036757600080fd5b50610370610a26565b6040518082815260200191505060405180910390f35b34801561039257600080fd5b506103c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2c565b6040518082606460200280838360005b838110156103f25780820151818401526020810190506103d7565b5050505090500191505060405180910390f35b34801561041157600080fd5b5061041a610ac5565b6040518082815260200191505060405180910390f35b34801561043c57600080fd5b50610471600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610acb565b604051808d81526020018c600019166000191681526020018b81526020018a8152602001891515151581526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b3480156104ec57600080fd5b506104f5610b38565b005b34801561050357600080fd5b5061050c610cd7565b6040518082815260200191505060405180910390f35b34801561052e57600080fd5b50610563600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cdd565b6040518082815260200191505060405180910390f35b34801561058557600080fd5b506105a460048036038101908080359060200190929190505050610e24565b6040518082815260200191505060405180910390f35b6105e26004803603810190808035906020019092919080359060200190929190505050610e3e565b005b610622600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc0565b005b610650600480360381019080803560001916906020019092919080359060200190929190505050611109565b005b34801561065e57600080fd5b5061067d60048036038101908080359060200190929190505050611293565b6040518082815260200191505060405180910390f35b34801561069f57600080fd5b506106a86112ab565b6040518082815260200191505060405180910390f35b3480156106ca57600080fd5b506106d36112b1565b6040518082815260200191505060405180910390f35b3480156106f557600080fd5b506106fe6112b7565b6040518082815260200191505060405180910390f35b34801561072057600080fd5b506107296112bd565b005b34801561073757600080fd5b50610756600480360381019080803590602001909291905050506115bf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a457600080fd5b506107c3600480360381019080803590602001909291905050506115f2565b6040518082815260200191505060405180910390f35b3480156107e557600080fd5b506107ee61160c565b6040518082815260200191505060405180910390f35b610830600480360381019080803590602001908201803590602001919091929391929390505050611612565b005b600061086b670de0b6b3a764000061085d670de0b6b3a7640000600654611a2390919063ffffffff16565b611aab90919063ffffffff16565b905090565b600a5481565b600160009054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052816000526040600020602052806000526040600020600091509150505481565b60065481565b6000806000339150813b905060008114151561096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b61097433611aea565b925060008311156109c7573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156109c5573d6000803e3d6000fd5b505b505050565b6109d4613f59565b60008090505b6064811015610a1f576003600082600854018152602001908152602001600020548282606481101515610a0957fe5b60200201818152505080806001019150506109da565b8191505090565b60045481565b610a34613f59565b60008090505b6064811015610abc57600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082600854018152602001908152602001600020548282606481101515610aa657fe5b6020020181815250508080600101915050610a3a565b81915050919050565b60075481565b600c6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b015490508c565b600080600080339150813b9050600081141515610bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b610bc5611c32565b1515610bd057600080fd5b339350610bdc84611e81565b600454610c36600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015460075461203c90919063ffffffff16565b811515610c3f57fe5b0492506000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055508373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610cd0573d6000803e3d6000fd5b5050505050565b600b5481565b600080600080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549250600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154915060009050600082141515610df7575b600854821015610df657610de9600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205482611a2390919063ffffffff16565b9050600182019150610d7c565b5b60008314610e1757610e1281846120e090919063ffffffff16565b610e1a565b60005b9350505050919050565b607481600a81101515610e3357fe5b016000915090505481565b6000806000339150813b9050600081141515610ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b610eca611c32565b15610f1b573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f15573d6000803e3d6000fd5b50610fb9565b600d600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff161515610fac57600092505b610fb833348686612165565b5b5050505050565b600080339150813b9050600081141515611042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b61104a611c32565b1561109b573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611095573d6000803e3d6000fd5b50611103565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615156110f657600093505b61110233348587612165565b5b50505050565b6000806000339150813b905060008114151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b611195611c32565b156111e6573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156111e0573d6000803e3d6000fd5b5061128c565b600e6000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561127f57600092505b61128b33348686612165565b5b5050505050565b60036020528060005260406000206000915090505481565b60095481565b60055481565b60085481565b6000806000339150813b9050600081141515611341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b339250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561139f57600080fd5b600a600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01541015156113f057600080fd5b6074600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154600a8110151561144157fe5b0154600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b01541015156115ba576114e3600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01546001611a2390919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01819055508273ffffffffffffffffffffffffffffffffffffffff167f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd4372600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01546040518082815260200191505060405180910390a25b505050565b600d6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f8160658110151561160157fe5b016000915090505481565b60005481565b600080600080339150813b9050600081141515611697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6116d286868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061262e565b9350339250662386f26fc1000034101515156116ed57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e6000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561176357600080fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561190b576001600b600082825401925050819055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff021916908315150217905550600b54600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a018190555082600d6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101816000191690555082600e6000866000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e853a139b87dd816f052a60ef646fd89f796454573ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515611a1b57611a1434600754611a2390919063ffffffff16565b6007819055505b505050505050565b60008183019050828110151515611aa2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d61746820616464206661696c65640000000000000000000000000081525060200191505060405180910390fd5b80905092915050565b6000611ae2611acb611ac684866120e090919063ffffffff16565b6135b0565b611ad4856135b0565b6120e090919063ffffffff16565b905092915050565b600080611af683613643565b611b8d600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611a2390919063ffffffff16565b90506000811115611c29576000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b80915050919050565b60008042600954141515611e6b574260098190555073a62142888aba8370742be823c1782d17a0389da173ffffffffffffffffffffffffffffffffffffffff166324c33d3360026040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061018060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b505050506040513d610180811015611cf757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192939495969798999a509091929394959697989950909192939495965090919293949550909192939450909192935090919250909150905050600080600160008491906101000a81548160ff02191690831515021790555083919050555050600160009054906101000a900460ff161515611e055762015180600954811515611dfd57fe5b049050611e19565b62015180600054811515611e1557fe5b0490505b5b806008541015611e6a57611e4e600360006008548152602001908152602001600020546004546120e090919063ffffffff16565b6004819055506001600860008282540192505081905550611e1a565b5b600160009054906101000a900460ff1691505090565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154915060009050600082141515611fee575b600854821015611f5257611f45600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205482611a2390919063ffffffff16565b9050600182019150611ed8565b611fa781600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701546120e090919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055505b600854600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080181905550505050565b60008083141561204f57600090506120da565b818302905081838281151561206057fe5b041415156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d617468206d756c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8090505b92915050565b600082821115151561215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d61746820737562206661696c65640000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600080600080600061217689611e81565b633b9aca008810151515612218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6381526020017f790000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b606487111561222657606496505b670de0b6b3a7640000600f8860658110151561223e57fe5b01540194508461225f670de0b6b3a76400008a61203c90919063ffffffff16565b81151561226857fe5b0493506122808460055461379490919063ffffffff16565b9250600087146122905782612293565b60005b9150600187600854010390506122b484600554611a2390919063ffffffff16565b6005819055506122cf83600654611a2390919063ffffffff16565b6006819055506122fb826003600084815260200190815260200160002054611a2390919063ffffffff16565b600360008381526020019081526020016000208190555061232782600454611a2390919063ffffffff16565b60048190555061238288600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061241d83600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506124b882600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555061256182600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054611a2390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506125bf88876137d3565b6125ca898985613b37565b6008548973ffffffffffffffffffffffffffffffffffffffff167f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0848a604051808381526020018281526020019250505060405180910390a3505050505050505050565b6000606060008060008086945084519350602084111580156126505750600084115b15156126ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f737472696e67206d757374206265206265747765656e203120616e642033322081526020017f636861726163746572730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60207f01000000000000000000000000000000000000000000000000000000000000000285600081518110151561271d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614158015612838575060207f01000000000000000000000000000000000000000000000000000000000000000285600186038151811015156127c857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f737472696e672063616e6e6f74207374617274206f7220656e6420776974682081526020017f737061636500000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60307f01000000000000000000000000000000000000000000000000000000000000000285600081518110151561290557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415612ba55760787f0100000000000000000000000000000000000000000000000000000000000000028560018151811015156129ab57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151515612a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f737472696e672063616e6e6f742073746172742077697468203078000000000081525060200191505060405180910390fd5b60587f010000000000000000000000000000000000000000000000000000000000000002856001815181101515612ac157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151515612ba4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f737472696e672063616e6e6f742073746172742077697468203058000000000081525060200191505060405180910390fd5b5b600091505b838210156135205760407f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612be457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916118015612cfa5750605b7f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612c8b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b15612df55760208583815181101515612d0f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004017f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612dae57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600015158315151415612df057600192505b613513565b60207f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612e2757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fe4575060607f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612ecd57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916118015612fe35750607b7f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612f7457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b5b806131335750602f7f010000000000000000000000000000000000000000000000000000000000000002858381518110151561301c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161180156131325750603a7f01000000000000000000000000000000000000000000000000000000000000000285838151811015156130c357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b5b15156131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f737472696e6720636f6e7461696e7320696e76616c696420636861726163746581526020017f727300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60207f01000000000000000000000000000000000000000000000000000000000000000285838151811015156131ff57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156133b15760207f01000000000000000000000000000000000000000000000000000000000000000285600184018151811015156132a757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697681526020017f652073706163657300000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b60001515831515148015613508575060307f01000000000000000000000000000000000000000000000000000000000000000285838151811015156133f257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161080613507575060397f010000000000000000000000000000000000000000000000000000000000000002858381518110151561349857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916115b5b1561351257600192505b5b8180600101925050612baa565b6001151583151514151561359c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737472696e672063616e6e6f74206265206f6e6c79206e756d6265727300000081525060200191505060405180910390fd5b602085015190508095505050505050919050565b60006135c3670de0b6b3a7640000613bf5565b61363260026135fb6135e6670de0b6b3a76400008761203c90919063ffffffff16565b65886c8f67307061203c90919063ffffffff16565b81151561360457fe5b0461362461361186613bf5565b6304a817c861203c90919063ffffffff16565b611a2390919063ffffffff16565b81151561363b57fe5b049050919050565b600061364e82613c08565b90506000811115613790576136ae600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015482611a2390919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613749600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015482611a2390919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600901819055505b5050565b60006137cb6137a284613ccf565b6137bd6137b88587611a2390919063ffffffff16565b613ccf565b6120e090919063ffffffff16565b905092915050565b60008060008060006004878115156137e757fe5b049450600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615613898576138956006600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154611a2390919063ffffffff16565b93505b60646138ad858961203c90919063ffffffff16565b8115156138b657fe5b04925060008311156139f95761391783600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506139b283600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b0154611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b01819055505b613a0c83866120e090919063ffffffff16565b9450600385811515613a1a57fe5b049150613a3082866120e090919063ffffffff16565b905073e853a139b87dd816f052a60ef646fd89f796454573ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515613a9d57613a9682600754611a2390919063ffffffff16565b6007819055505b7393b2dbdd3f242eed7d7c7180c5a4eddc4baae3e773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015613b1557600080fd5b505af1158015613b29573d6000803e3d6000fd5b505050505050505050505050565b60008060006014613b5260038761203c90919063ffffffff16565b811515613b5b57fe5b049250613b7d600486811515613b6d57fe5b04866120e090919063ffffffff16565b9450613b9283866120e090919063ffffffff16565b9150613b9f868486613d75565b90506000811115613bc057613bbd81846120e090919063ffffffff16565b92505b613be782613bd983600754611a2390919063ffffffff16565b611a2390919063ffffffff16565b600781905550505050505050565b6000613c01828361203c565b9050919050565b6000613cc8600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154670de0b6b3a7640000613cb0600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154600a5461203c90919063ffffffff16565b811515613cb957fe5b046120e090919063ffffffff16565b9050919050565b60006309502f90613d646d03b2a1d15167e7c5699bfde00000613d56613d517a0dac7055469777a6122ee4310dd6c14410500f2904840000000000613d436b01027e72f1f1281308800000613d35670de0b6b3a76400008b61203c90919063ffffffff16565b61203c90919063ffffffff16565b611a2390919063ffffffff16565b613f00565b6120e090919063ffffffff16565b811515613d6d57fe5b049050919050565b6000806000600654613d98670de0b6b3a76400008761203c90919063ffffffff16565b811515613da157fe5b049150613db982600a54611a2390919063ffffffff16565b600a81905550670de0b6b3a7640000613ddb858461203c90919063ffffffff16565b811515613de457fe5b049050613e75600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154613e6783670de0b6b3a7640000613e4f89600a5461203c90919063ffffffff16565b811515613e5857fe5b046120e090919063ffffffff16565b611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090181905550613ef5670de0b6b3a7640000613edc6006548561203c90919063ffffffff16565b811515613ee557fe5b04866120e090919063ffffffff16565b925050509392505050565b6000806002613f10846001611a23565b811515613f1957fe5b0490508291505b81811015613f53578091506002613f428285811515613f3b57fe5b0483611a23565b811515613f4b57fe5b049050613f20565b50919050565b610c80604051908101604052806064906020820280388339808201915050905050905600a165627a7a72305820e9c4be2df65f0917683a00ef0f245ef0fb4370a9508e0237f6cd91529cf3a0a00029

Deployed Bytecode

0x60806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063018a25e81461016f578063116134ee1461019a57806312fa6feb146101c557806317604f71146101f4578063274806e014610265578063307540f6146102c65780633ccfd60b146102f15780633ef7c68714610308578063402e912f1461035b578063489b3fee146103865780634ba2363a146104055780634c54e1b5146104305780634e71d92d146104e057806358516661146104f7578063729fc61314610522578063757b0884146105795780638f38f309146105ba57806398a0871d146105e4578063a65b37a114610624578063aaaadb5814610652578063b3bb8cd414610693578063b510e42c146106be578063b74e452b146106e9578063d55ec69714610714578063d93be4331461072b578063e7ee6ad614610798578063efbe1c1c146107d9578063f2c298be14610804575b600080fd5b34801561017b57600080fd5b50610184610832565b6040518082815260200191505060405180910390f35b3480156101a657600080fd5b506101af610870565b6040518082815260200191505060405180910390f35b3480156101d157600080fd5b506101da610876565b604051808215151515815260200191505060405180910390f35b34801561020057600080fd5b506102236004803603810190808035600019169060200190929190505050610889565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027157600080fd5b506102b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108bc565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102db6108e1565b6040518082815260200191505060405180910390f35b3480156102fd57600080fd5b506103066108e7565b005b34801561031457600080fd5b5061031d6109cc565b6040518082606460200280838360005b8381101561034857808201518184015260208101905061032d565b5050505090500191505060405180910390f35b34801561036757600080fd5b50610370610a26565b6040518082815260200191505060405180910390f35b34801561039257600080fd5b506103c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2c565b6040518082606460200280838360005b838110156103f25780820151818401526020810190506103d7565b5050505090500191505060405180910390f35b34801561041157600080fd5b5061041a610ac5565b6040518082815260200191505060405180910390f35b34801561043c57600080fd5b50610471600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610acb565b604051808d81526020018c600019166000191681526020018b81526020018a8152602001891515151581526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019c5050505050505050505050505060405180910390f35b3480156104ec57600080fd5b506104f5610b38565b005b34801561050357600080fd5b5061050c610cd7565b6040518082815260200191505060405180910390f35b34801561052e57600080fd5b50610563600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cdd565b6040518082815260200191505060405180910390f35b34801561058557600080fd5b506105a460048036038101908080359060200190929190505050610e24565b6040518082815260200191505060405180910390f35b6105e26004803603810190808035906020019092919080359060200190929190505050610e3e565b005b610622600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc0565b005b610650600480360381019080803560001916906020019092919080359060200190929190505050611109565b005b34801561065e57600080fd5b5061067d60048036038101908080359060200190929190505050611293565b6040518082815260200191505060405180910390f35b34801561069f57600080fd5b506106a86112ab565b6040518082815260200191505060405180910390f35b3480156106ca57600080fd5b506106d36112b1565b6040518082815260200191505060405180910390f35b3480156106f557600080fd5b506106fe6112b7565b6040518082815260200191505060405180910390f35b34801561072057600080fd5b506107296112bd565b005b34801561073757600080fd5b50610756600480360381019080803590602001909291905050506115bf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a457600080fd5b506107c3600480360381019080803590602001909291905050506115f2565b6040518082815260200191505060405180910390f35b3480156107e557600080fd5b506107ee61160c565b6040518082815260200191505060405180910390f35b610830600480360381019080803590602001908201803590602001919091929391929390505050611612565b005b600061086b670de0b6b3a764000061085d670de0b6b3a7640000600654611a2390919063ffffffff16565b611aab90919063ffffffff16565b905090565b600a5481565b600160009054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052816000526040600020602052806000526040600020600091509150505481565b60065481565b6000806000339150813b905060008114151561096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b61097433611aea565b925060008311156109c7573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156109c5573d6000803e3d6000fd5b505b505050565b6109d4613f59565b60008090505b6064811015610a1f576003600082600854018152602001908152602001600020548282606481101515610a0957fe5b60200201818152505080806001019150506109da565b8191505090565b60045481565b610a34613f59565b60008090505b6064811015610abc57600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082600854018152602001908152602001600020548282606481101515610aa657fe5b6020020181815250508080600101915050610a3a565b81915050919050565b60075481565b600c6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b015490508c565b600080600080339150813b9050600081141515610bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b610bc5611c32565b1515610bd057600080fd5b339350610bdc84611e81565b600454610c36600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015460075461203c90919063ffffffff16565b811515610c3f57fe5b0492506000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055508373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610cd0573d6000803e3d6000fd5b5050505050565b600b5481565b600080600080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549250600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154915060009050600082141515610df7575b600854821015610df657610de9600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205482611a2390919063ffffffff16565b9050600182019150610d7c565b5b60008314610e1757610e1281846120e090919063ffffffff16565b610e1a565b60005b9350505050919050565b607481600a81101515610e3357fe5b016000915090505481565b6000806000339150813b9050600081141515610ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b610eca611c32565b15610f1b573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f15573d6000803e3d6000fd5b50610fb9565b600d600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff161515610fac57600092505b610fb833348686612165565b5b5050505050565b600080339150813b9050600081141515611042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b61104a611c32565b1561109b573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611095573d6000803e3d6000fd5b50611103565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615156110f657600093505b61110233348587612165565b5b50505050565b6000806000339150813b905060008114151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b611195611c32565b156111e6573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156111e0573d6000803e3d6000fd5b5061128c565b600e6000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561127f57600092505b61128b33348686612165565b5b5050505050565b60036020528060005260406000206000915090505481565b60095481565b60055481565b60085481565b6000806000339150813b9050600081141515611341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b339250600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561139f57600080fd5b600a600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01541015156113f057600080fd5b6074600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154600a8110151561144157fe5b0154600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b01541015156115ba576114e3600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01546001611a2390919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01819055508273ffffffffffffffffffffffffffffffffffffffff167f082e58bd2e7f7268b36ef0ce2331f7bfd29c08979529cbe85f06375fcecd4372600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a01546040518082815260200191505060405180910390a25b505050565b600d6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f8160658110151561160157fe5b016000915090505481565b60005481565b600080600080339150813b9050600081141515611697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6116d286868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061262e565b9350339250662386f26fc1000034101515156116ed57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e6000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561176357600080fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16151561190b576001600b600082825401925050819055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff021916908315150217905550600b54600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a018190555082600d6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101816000191690555082600e6000866000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e853a139b87dd816f052a60ef646fd89f796454573ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515611a1b57611a1434600754611a2390919063ffffffff16565b6007819055505b505050505050565b60008183019050828110151515611aa2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d61746820616464206661696c65640000000000000000000000000081525060200191505060405180910390fd5b80905092915050565b6000611ae2611acb611ac684866120e090919063ffffffff16565b6135b0565b611ad4856135b0565b6120e090919063ffffffff16565b905092915050565b600080611af683613643565b611b8d600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611a2390919063ffffffff16565b90506000811115611c29576000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b80915050919050565b60008042600954141515611e6b574260098190555073a62142888aba8370742be823c1782d17a0389da173ffffffffffffffffffffffffffffffffffffffff166324c33d3360026040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505061018060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b505050506040513d610180811015611cf757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192939495969798999a509091929394959697989950909192939495965090919293949550909192939450909192935090919250909150905050600080600160008491906101000a81548160ff02191690831515021790555083919050555050600160009054906101000a900460ff161515611e055762015180600954811515611dfd57fe5b049050611e19565b62015180600054811515611e1557fe5b0490505b5b806008541015611e6a57611e4e600360006008548152602001908152602001600020546004546120e090919063ffffffff16565b6004819055506001600860008282540192505081905550611e1a565b5b600160009054906101000a900460ff1691505090565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154915060009050600082141515611fee575b600854821015611f5257611f45600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205482611a2390919063ffffffff16565b9050600182019150611ed8565b611fa781600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701546120e090919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055505b600854600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080181905550505050565b60008083141561204f57600090506120da565b818302905081838281151561206057fe5b041415156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d617468206d756c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8090505b92915050565b600082821115151561215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f536166654d61746820737562206661696c65640000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600080600080600061217689611e81565b633b9aca008810151515612218576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6381526020017f790000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b606487111561222657606496505b670de0b6b3a7640000600f8860658110151561223e57fe5b01540194508461225f670de0b6b3a76400008a61203c90919063ffffffff16565b81151561226857fe5b0493506122808460055461379490919063ffffffff16565b9250600087146122905782612293565b60005b9150600187600854010390506122b484600554611a2390919063ffffffff16565b6005819055506122cf83600654611a2390919063ffffffff16565b6006819055506122fb826003600084815260200190815260200160002054611a2390919063ffffffff16565b600360008381526020019081526020016000208190555061232782600454611a2390919063ffffffff16565b60048190555061238288600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061241d83600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506124b882600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154611a2390919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555061256182600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054611a2390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055506125bf88876137d3565b6125ca898985613b37565b6008548973ffffffffffffffffffffffffffffffffffffffff167f4b9622a7ffcb20551847f4dd71b5b98c4267e10d7d338a6c7fb7b26d45d854e0848a604051808381526020018281526020019250505060405180910390a3505050505050505050565b6000606060008060008086945084519350602084111580156126505750600084115b15156126ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f737472696e67206d757374206265206265747765656e203120616e642033322081526020017f636861726163746572730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60207f01000000000000000000000000000000000000000000000000000000000000000285600081518110151561271d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614158015612838575060207f01000000000000000000000000000000000000000000000000000000000000000285600186038151811015156127c857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f737472696e672063616e6e6f74207374617274206f7220656e6420776974682081526020017f737061636500000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60307f01000000000000000000000000000000000000000000000000000000000000000285600081518110151561290557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415612ba55760787f0100000000000000000000000000000000000000000000000000000000000000028560018151811015156129ab57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151515612a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f737472696e672063616e6e6f742073746172742077697468203078000000000081525060200191505060405180910390fd5b60587f010000000000000000000000000000000000000000000000000000000000000002856001815181101515612ac157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614151515612ba4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f737472696e672063616e6e6f742073746172742077697468203058000000000081525060200191505060405180910390fd5b5b600091505b838210156135205760407f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612be457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916118015612cfa5750605b7f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612c8b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b15612df55760208583815181101515612d0f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004017f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612dae57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600015158315151415612df057600192505b613513565b60207f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612e2757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fe4575060607f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612ecd57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916118015612fe35750607b7f0100000000000000000000000000000000000000000000000000000000000000028583815181101515612f7457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b5b806131335750602f7f010000000000000000000000000000000000000000000000000000000000000002858381518110151561301c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161180156131325750603a7f01000000000000000000000000000000000000000000000000000000000000000285838151811015156130c357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916105b5b15156131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f737472696e6720636f6e7461696e7320696e76616c696420636861726163746581526020017f727300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60207f01000000000000000000000000000000000000000000000000000000000000000285838151811015156131ff57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156133b15760207f01000000000000000000000000000000000000000000000000000000000000000285600184018151811015156132a757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697681526020017f652073706163657300000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b60001515831515148015613508575060307f01000000000000000000000000000000000000000000000000000000000000000285838151811015156133f257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161080613507575060397f010000000000000000000000000000000000000000000000000000000000000002858381518110151561349857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916115b5b1561351257600192505b5b8180600101925050612baa565b6001151583151514151561359c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737472696e672063616e6e6f74206265206f6e6c79206e756d6265727300000081525060200191505060405180910390fd5b602085015190508095505050505050919050565b60006135c3670de0b6b3a7640000613bf5565b61363260026135fb6135e6670de0b6b3a76400008761203c90919063ffffffff16565b65886c8f67307061203c90919063ffffffff16565b81151561360457fe5b0461362461361186613bf5565b6304a817c861203c90919063ffffffff16565b611a2390919063ffffffff16565b81151561363b57fe5b049050919050565b600061364e82613c08565b90506000811115613790576136ae600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015482611a2390919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550613749600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206009015482611a2390919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600901819055505b5050565b60006137cb6137a284613ccf565b6137bd6137b88587611a2390919063ffffffff16565b613ccf565b6120e090919063ffffffff16565b905092915050565b60008060008060006004878115156137e757fe5b049450600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615613898576138956006600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a0154611a2390919063ffffffff16565b93505b60646138ad858961203c90919063ffffffff16565b8115156138b657fe5b04925060008311156139f95761391783600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506139b283600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b0154611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b01819055505b613a0c83866120e090919063ffffffff16565b9450600385811515613a1a57fe5b049150613a3082866120e090919063ffffffff16565b905073e853a139b87dd816f052a60ef646fd89f796454573ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515613a9d57613a9682600754611a2390919063ffffffff16565b6007819055505b7393b2dbdd3f242eed7d7c7180c5a4eddc4baae3e773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015613b1557600080fd5b505af1158015613b29573d6000803e3d6000fd5b505050505050505050505050565b60008060006014613b5260038761203c90919063ffffffff16565b811515613b5b57fe5b049250613b7d600486811515613b6d57fe5b04866120e090919063ffffffff16565b9450613b9283866120e090919063ffffffff16565b9150613b9f868486613d75565b90506000811115613bc057613bbd81846120e090919063ffffffff16565b92505b613be782613bd983600754611a2390919063ffffffff16565b611a2390919063ffffffff16565b600781905550505050505050565b6000613c01828361203c565b9050919050565b6000613cc8600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154670de0b6b3a7640000613cb0600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154600a5461203c90919063ffffffff16565b811515613cb957fe5b046120e090919063ffffffff16565b9050919050565b60006309502f90613d646d03b2a1d15167e7c5699bfde00000613d56613d517a0dac7055469777a6122ee4310dd6c14410500f2904840000000000613d436b01027e72f1f1281308800000613d35670de0b6b3a76400008b61203c90919063ffffffff16565b61203c90919063ffffffff16565b611a2390919063ffffffff16565b613f00565b6120e090919063ffffffff16565b811515613d6d57fe5b049050919050565b6000806000600654613d98670de0b6b3a76400008761203c90919063ffffffff16565b811515613da157fe5b049150613db982600a54611a2390919063ffffffff16565b600a81905550670de0b6b3a7640000613ddb858461203c90919063ffffffff16565b811515613de457fe5b049050613e75600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154613e6783670de0b6b3a7640000613e4f89600a5461203c90919063ffffffff16565b811515613e5857fe5b046120e090919063ffffffff16565b611a2390919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090181905550613ef5670de0b6b3a7640000613edc6006548561203c90919063ffffffff16565b811515613ee557fe5b04866120e090919063ffffffff16565b925050509392505050565b6000806002613f10846001611a23565b811515613f1957fe5b0490508291505b81811015613f53578091506002613f428285811515613f3b57fe5b0483611a23565b811515613f4b57fe5b049050613f20565b50919050565b610c80604051908101604052806064906020820280388339808201915050905050905600a165627a7a72305820e9c4be2df65f0917683a00ef0f245ef0fb4370a9508e0237f6cd91529cf3a0a00029

Swarm Source

bzzr://e9c4be2df65f0917683a00ef0f245ef0fb4370a9508e0237f6cd91529cf3a0a0

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.