Contract 0x5934E2405AF74df7fc02AF9553B62583AE7BfffE

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xcd66e5f839a9087b49acf47291d0270f461202a438590b2ae572eec944a3b34781828402021-06-10 18:39:404 days 20 hrs ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0.001 BNB0.00044096
0x1075612ea346d60fe629461691a9b2cab82205a240958969224f5a5ed1434e1660716732021-03-28 10:28:0479 days 4 hrs ago0x205f79c1d67afe5be87cd4b205e44fdad417c867 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071774
0xd0d448ac9e3a27c0526d6d282b66fe7ff0d8cae49caa71787d79498f2f9b66ef59951472021-03-25 17:46:0081 days 21 hrs ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071833
0xba7b8fdb4a1be7d5397c8229de028a731f38f67c10bae8987636abe30296424559583652021-03-24 10:49:1183 days 4 hrs ago0xf5499e61974befc6c35ea5f86787cad6808dc31f IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071833
0xeec437de1059fdbfcfacece5a58843f01d11b7a9a8675eb86e0ba5c76af22b8559142752021-03-22 21:53:2084 days 17 hrs ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058557
0x4cc50e73d35224907e23939f1d5aeb4c016592dc80721b94731d7c70b36b1c9c58898412021-03-22 1:13:3685 days 13 hrs ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058557
0x29c09a7d9ec9ad9b9cc675b0651f6fe18dc3772dd6581d37904ccb1ce936c39558774092021-03-21 14:51:5486 days 19 mins ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058557
0xa09491943ed38daf0790d1316986729e78f49b4a289cd3b6e0ed3b46129f0ce558757042021-03-21 13:26:2086 days 1 hr ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0.001 BNB0.00088202
0x4f8652bf1c0965db032104a73c810f15422c2ded8a1dc4543667f3898a54cb2a58756892021-03-21 13:25:3586 days 1 hr ago0x1ae6912e08bb3e105a4f0a60f666376d3c7af380 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058547
0x3ab30b05a70f2bff63d7fae82897a1bf6111d43c58439fca33a21ffad2f4e54158686372021-03-21 7:32:5886 days 7 hrs ago0xf5499e61974befc6c35ea5f86787cad6808dc31f IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058547
0xcab3467afcd8ab722b12f5ece4b335a4f133476d1791b822964dd4883f62c44358087292021-03-19 5:33:2088 days 9 hrs ago0xf5499e61974befc6c35ea5f86787cad6808dc31f IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071833
0xdaba664b6c0bc26a1f78e5e61a627ad8c8ce717ac4ff90d7e34d5137e27f7fbf57589262021-03-17 12:00:2890 days 3 hrs ago0x918171ccd22e6daaaf4c96740beb4a23e9ce168b IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071774
0xf3a8142d857ebc77ff0ffa9468ceda41a77fcb9cb725c1e155b7a62ff46e795a57216172021-03-16 4:53:2891 days 10 hrs ago0x82c7d379c8d0ab47424ab0370c8e244cb8987354 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
0xab9402a89c9d663854e45347d201c0ec75f1a8209a68c1cf5c850ee22d6ac02957151182021-03-15 23:28:0191 days 15 hrs ago0x82c7d379c8d0ab47424ab0370c8e244cb8987354 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00080394
0x20e69fe71ffe37eff01f59393dbe34ce99ed3c940c0f987a8a30588352aaec3557151092021-03-15 23:27:3491 days 15 hrs ago0x82c7d379c8d0ab47424ab0370c8e244cb8987354 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe1 BNB0.0010558
0xf964bf0adbe2e98606ad9e01a615de914fa5f4ffc4c164899c6a09474f09c1d457151002021-03-15 23:27:0791 days 15 hrs ago0x3197371e3a11647861ae99c0280f9c40bf30c826 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00091277
0x2f3e2b00923ce0bc3287075d009c4ae8fb9f8d74bb60d2d8353f7cc46de9304457144832021-03-15 22:56:1691 days 16 hrs ago0x1442e55e9c849b3ee7f586b90b88d980f14d589c IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
0x1ff98e9445a13f170582796dd6f0a2457134df3982b3c9ffa8037443a3e1652657143302021-03-15 22:48:3791 days 16 hrs ago0xf4b6f3033e9e8db00934201c3eee63049b8d555a IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
0xacac63882c3a92eb24fc18eb66c746f2dbf2ed16561d30c9268c79fb1575f26057137172021-03-15 22:17:5891 days 16 hrs ago0x7767229d5c751dec19347ba1a871025a9fecbf8e IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
0x0c5f973a6279419b7951b6af1f1ec41eb7a6066463ad32985b1dc5f0d2e96a7957132382021-03-15 21:54:0191 days 17 hrs ago0x41391ccd08b2d04cb3de32404e82a0ac25e3506f IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
0x207add35ad9b0205b7d1ca0cb6d40bd03b84dd0de951f856275c9456ddcdcaae57128152021-03-15 21:32:5291 days 17 hrs ago0xd89e51c6f47bc23bbe3e1baa839983232e8d96c7 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058557
0xbbd55bb585f90d6b8dc82d3be7efaeed3b8abab1b2744c6f30830d07a76b24ea57119932021-03-15 20:51:4691 days 18 hrs ago0x2ef2958564367aaaff8434a9c1e069f0c45a5581 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071833
0x9026d585cf14f3925f827d61d640dde43ad336d99ad07fe809b6f677f65e396f57119662021-03-15 20:50:2591 days 18 hrs ago0x8e70df9b717724bd1461de633c814514c82b182b IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00058557
0xa4cb620416633210ae5a0222ea39e4489405aca0fd4bf843a91a9708ccc7ef2b57113202021-03-15 20:18:0791 days 18 hrs ago0xd1b4f18229467bb066d2c726853ea46ab6fb52b3 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00080178
0xc611ccf719d399090ef1624cbcafd2792b103f32f6b7ca8ed6af4cf2153cc6db57110232021-03-15 20:03:1691 days 19 hrs ago0x82c7d379c8d0ab47424ab0370c8e244cb8987354 IN  0x5934e2405af74df7fc02af9553b62583ae7bfffe0 BNB0.00071843
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcd66e5f839a9087b49acf47291d0270f461202a438590b2ae572eec944a3b34781828402021-06-10 18:39:404 days 20 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.00005 BNB
0x1075612ea346d60fe629461691a9b2cab82205a240958969224f5a5ed1434e1660716732021-03-28 10:28:0479 days 4 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x205f79c1d67afe5be87cd4b205e44fdad417c8670.000000000000011565 BNB
0x1075612ea346d60fe629461691a9b2cab82205a240958969224f5a5ed1434e1660716732021-03-28 10:28:0479 days 4 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c826608 wei
0xd0d448ac9e3a27c0526d6d282b66fe7ff0d8cae49caa71787d79498f2f9b66ef59951472021-03-25 17:46:0081 days 21 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x1ae6912e08bb3e105a4f0a60f666376d3c7af3800.001138721062791336 BNB
0xd0d448ac9e3a27c0526d6d282b66fe7ff0d8cae49caa71787d79498f2f9b66ef59951472021-03-25 17:46:0081 days 21 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.000059932687515333 BNB
0xba7b8fdb4a1be7d5397c8229de028a731f38f67c10bae8987636abe30296424559583652021-03-24 10:49:1183 days 4 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0xf5499e61974befc6c35ea5f86787cad6808dc31f0.000000000005557523 BNB
0xba7b8fdb4a1be7d5397c8229de028a731f38f67c10bae8987636abe30296424559583652021-03-24 10:49:1183 days 4 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.000000000000292501 BNB
0xa09491943ed38daf0790d1316986729e78f49b4a289cd3b6e0ed3b46129f0ce558757042021-03-21 13:26:2086 days 1 hr ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.00005 BNB
0xcab3467afcd8ab722b12f5ece4b335a4f133476d1791b822964dd4883f62c44358087292021-03-19 5:33:2088 days 9 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0xf5499e61974befc6c35ea5f86787cad6808dc31f0.000000000001593018 BNB
0xcab3467afcd8ab722b12f5ece4b335a4f133476d1791b822964dd4883f62c44358087292021-03-19 5:33:2088 days 9 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.000000000000083843 BNB
0xdaba664b6c0bc26a1f78e5e61a627ad8c8ce717ac4ff90d7e34d5137e27f7fbf57589262021-03-17 12:00:2890 days 3 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x918171ccd22e6daaaf4c96740beb4a23e9ce168b0.000000000001057354 BNB
0xdaba664b6c0bc26a1f78e5e61a627ad8c8ce717ac4ff90d7e34d5137e27f7fbf57589262021-03-17 12:00:2890 days 3 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.00000000000005565 BNB
0xf3a8142d857ebc77ff0ffa9468ceda41a77fcb9cb725c1e155b7a62ff46e795a57216172021-03-16 4:53:2891 days 10 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x82c7d379c8d0ab47424ab0370c8e244cb89873540.736791237300076717 BNB
0xf3a8142d857ebc77ff0ffa9468ceda41a77fcb9cb725c1e155b7a62ff46e795a57216172021-03-16 4:53:2891 days 10 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.038778486173688248 BNB
0xab9402a89c9d663854e45347d201c0ec75f1a8209a68c1cf5c850ee22d6ac02957151182021-03-15 23:28:0191 days 15 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x82c7d379c8d0ab47424ab0370c8e244cb898735410.240397482014434931 BNB
0xab9402a89c9d663854e45347d201c0ec75f1a8209a68c1cf5c850ee22d6ac02957151182021-03-15 23:28:0191 days 15 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.57953579411513497 BNB
0x20e69fe71ffe37eff01f59393dbe34ce99ed3c940c0f987a8a30588352aaec3557151092021-03-15 23:27:3491 days 15 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.05 BNB
0x20e69fe71ffe37eff01f59393dbe34ce99ed3c940c0f987a8a30588352aaec3557151092021-03-15 23:27:3491 days 15 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x82c7d379c8d0ab47424ab0370c8e244cb89873540.023921105087714993 BNB
0x20e69fe71ffe37eff01f59393dbe34ce99ed3c940c0f987a8a30588352aaec3557151092021-03-15 23:27:3491 days 15 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.001259005530932368 BNB
0x2f3e2b00923ce0bc3287075d009c4ae8fb9f8d74bb60d2d8353f7cc46de9304457144832021-03-15 22:56:1691 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x1442e55e9c849b3ee7f586b90b88d980f14d589c0.026021620929497944 BNB
0x2f3e2b00923ce0bc3287075d009c4ae8fb9f8d74bb60d2d8353f7cc46de9304457144832021-03-15 22:56:1691 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.001369558996289365 BNB
0x1ff98e9445a13f170582796dd6f0a2457134df3982b3c9ffa8037443a3e1652657143302021-03-15 22:48:3791 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0xf4b6f3033e9e8db00934201c3eee63049b8d555a0.005604501853668808 BNB
0x1ff98e9445a13f170582796dd6f0a2457134df3982b3c9ffa8037443a3e1652657143302021-03-15 22:48:3791 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.000294973781772042 BNB
0xacac63882c3a92eb24fc18eb66c746f2dbf2ed16561d30c9268c79fb1575f26057137172021-03-15 22:17:5891 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x7767229d5c751dec19347ba1a871025a9fecbf8e0.450002119804708109 BNB
0xacac63882c3a92eb24fc18eb66c746f2dbf2ed16561d30c9268c79fb1575f26057137172021-03-15 22:17:5891 days 16 hrs ago 0x5934e2405af74df7fc02af9553b62583ae7bfffe0x3197371e3a11647861ae99c0280f9c40bf30c8260.023684322094984637 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YoshiEggV4_FINAL

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, OSL-3.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-03-12
*/

pragma solidity >=0.7.0 <0.8.0;

//YoshiEgg.Finance

/*
v4 notes

Everything from v3 plus:

Buy/Sell cooldown. [To reduce fast-inflation.]
Taxing if you want to bypass these cooldowns.

*/

//v3 can still be accessed here: YoshiEgg.Finance/v3
//v2 can still be accessed here: YoshiEgg.Finance/v2
//v1 can still be accessed here: YoshiEgg.Finance/v1


contract YoshiEggV4_FINAL {
    
    uint256 public EGGS_TO_HATCH_1Dragon = 86400;

    uint256 PSN = 10000;
    uint256 PSNH = 5000;
    
    bool public activated = false;
    
    address payable public ceoAddress;
    
    uint256 public CEO_FEE = 5;
    
    uint256 public buy_cooldown  = 4 hours; //4 hours in seconds.
    uint256 public sell_cooldown = 4 hours; //4 hours in seconds.
    
    mapping (address => uint256) public iceDragons;
    mapping (address => uint256) public premiumDragons;
    mapping (address => uint256) public ultraDragon;
    
    mapping (address => uint256) public userReferralEggs;
    mapping (address => address) public referrals;
    
    mapping (address => uint256) public lastHatch;
    
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;
    
    uint256 public marketEggs;
    uint256 public contractStarted;
    
    
    bool    public canSell_canHatch = true;
    bool    public bossAlive = false;
    uint256 public bossHunger;
    uint256 public amount_until_full = 0;
    uint256 public reward = 0;
    
    
    
    //The ambassador address list.
    //These are the people that promote the game on twitter, youtube, reddit, 4chan, etc.
    //This is good for the health of the game and creates more opportunity for growth so that everyone playing benefits.
    //These Yoshis do not begin making eggs until the game is ACTIVATED via the seedMarket function, which is how the game starts.
    //The maximum allocation for each ambassador is 0.125 BNB (312 yellow yoshis).
    address public community_manager1 = 0xDBddeEe008cD513573FA67FDb85bB424F22E2853;
    
    
    constructor() {
        ceoAddress = msg.sender;
    }
    
    
    
    
    //This function was to get my testBNB back during testing.
    
    //CAREFULL OF CLONES!
    //To spot rugpulls, search codes for transfer.xx and look to see where its going!
    //THEY CAN RUGPULL IF THEY HAVE THIS: ceoAddress.transfer(getBalance());
    //I've commented this out so you can see what it looks like:
    
    /*
    function takeMoney() public {
        ceoAddress.transfer(getBalance());
    }
    */
    
    
    
    //This is so the owner of this contract can't FORCE the players into a situation where they can never sell.
    //This function can be called by anyone as it does not have a require();
    // :]
    function enableSelling() public {
        canSell_canHatch = true;
    }
    
    
    
    function spawnBoss(uint256 _bossHunger, uint256 _reward) public {
        require(bossAlive == false);          //make sure there isn't an alive boss already
        require(msg.sender == ceoAddress);    //make sure only the owner can spawn the boss
        //require(_reward <= 100);              //make sure the reward percentage can't be higher than 100%
        require(_reward > 0);                 //make sure the reward percentage can't be zero
        require(_bossHunger > 0);             //make sure the boss can't be spawned with zero HP
        
        canSell_canHatch = false;             //Make sure boss is prepped for spawn (saves a player from sell-pending and getting rekt)
        
        
        bossHunger = _bossHunger;
        amount_until_full = _bossHunger;
        reward = _reward;
    
        bossAlive = true;
    }
    
    
    //Just in case a boss is alive too long and cannot be killed.
    function killBoss() public {
        require(msg.sender == ceoAddress);
        
        bossAlive = false;
        bossHunger = 0;
        amount_until_full = 0;
        reward = 0;
        
        canSell_canHatch = true;
    }
    
    
    
    function attackBoss() public payable {
        require(bossAlive == true);
        require(amount_until_full > 0);
        require(msg.value > 0);
        require(msg.value <= 5 ether);   //prevent buys of over 5 BNB per tx.
        
        uint256 attack_amount = msg.value;
        
        if (attack_amount > amount_until_full) {
            uint256 refund_amount = SafeMath.sub(attack_amount, amount_until_full);
            attack_amount = SafeMath.sub(attack_amount, refund_amount);
            msg.sender.transfer(refund_amount);
            
            amount_until_full = 0;
            bossAlive = false;
        }
        
        canSell_canHatch = true;  //re-enable selling and hatching after the first attack is made.
                                  //This should prevent people from selling eggs while boss is pending on spawn.
        
        //If attacking bowser, sell current eggs for FULL value, not divided by 2.
        //When buying yoshis, eggs get hatched - same happens when attacking bowser - but instead we'll sell the eggs for BNB.
        sellEggsWhenAttack();
        
        
        uint256 dragons = getDragonsToBuy(attack_amount, 20);
        ultraDragon[msg.sender] += (dragons + calculatePercentage(dragons, reward));
        
        
        if (amount_until_full > 0) {
            amount_until_full = SafeMath.sub(amount_until_full, attack_amount);
        }
        
        if (amount_until_full == 0) {
            bossAlive = false;
        }
        
    }
    
    
    function getBossHunger() public view returns(uint256) {
        return bossHunger;
    }
    
    function getBossHungerLeft() public view returns(uint256) {
        return amount_until_full;
    }
    
    function getReward() public view returns(uint256) {
        return reward;
    }
    
    function getBossAlive() public view returns(bool) {
        return bossAlive;
    }
    
    
    function seedMarket() public payable {
        require(msg.sender == ceoAddress);
        require(marketEggs == 0);
        require(msg.value == 1 ether);
        
        activated = true;
        marketEggs = 8640000000;
        contractStarted = block.timestamp;
        
        ambassadorStart();
    }
    
    
    
    
    //The cooldowns...
    function getLastSellTime() public view returns(uint256) {
        return lastSell[msg.sender];
    }
    
    function getNextSellTime() public view returns(uint256) {
        return lastSell[msg.sender] + sell_cooldown;
    }
    
    
    function getLastBuyTime() public view returns(uint256) {
        return lastBuy[msg.sender];
    }
    
    function getNextBuyTime() public view returns(uint256) {
        return lastBuy[msg.sender] + buy_cooldown;
    }
    
    
    
    function getBuyTax() public view returns(uint256) {
        uint256 seconds_until_next_buy = SafeMath.sub(getNextBuyTime(), block.timestamp);
        uint256 percentage_of_cooldown = mulDiv(seconds_until_next_buy, 100, buy_cooldown);
        
        if (block.timestamp >= getNextBuyTime())
        { 
            return 0; 
        } else 
        {
            return calculatePercentage(50, percentage_of_cooldown);
        }
    }
    
    
    function getSellTax() public view returns(uint256) {
        uint256 seconds_until_next_sell = SafeMath.sub(getNextSellTime(), block.timestamp);
        uint256 percentage_of_cooldown = mulDiv(seconds_until_next_sell, 100, sell_cooldown);
        
        if (block.timestamp >= getNextSellTime())
        { 
            return 0; 
        } else 
        {
            return calculatePercentage(50, percentage_of_cooldown);
        }
    }
    
    

    //This gives the ambassador addresses their yoshis at the start of the game.
    function ambassadorStart() internal {
        require(activated);
        require(marketEggs == 8640000000);
        
        
        ultraDragon[community_manager1]  += (312*86400);    //0.125 BNB worth of yellow yoshis
        
        
        //This is to make the ambassador(s) eggs start at zero when the game starts.
        lastHatch[community_manager1] = 1615622400;  //start time (Mar 13 2021 - 8am GMT)
    }
    
    
    function getMyEggs() public view returns(uint256) {
        if (bossAlive == true) {
            return SafeMath.div(SafeMath.add(userReferralEggs[msg.sender], getEggsSinceLastHatch(msg.sender)), 2); //Cut dragoncount in half if boss is alive!
        } else {
            return SafeMath.add(userReferralEggs[msg.sender], getEggsSinceLastHatch(msg.sender));
        }
        
    }
    
    function getEggsSinceLastHatch(address adr) public view returns (uint256){
        uint256 secondsPassed = min(EGGS_TO_HATCH_1Dragon, SafeMath.sub(block.timestamp, lastHatch[adr]));

        uint256 dragonCount = SafeMath.mul(iceDragons[adr], 10);
        dragonCount = SafeMath.add(SafeMath.mul(ultraDragon[adr], 25), dragonCount);
        dragonCount = SafeMath.add(dragonCount, premiumDragons[adr]);
        return SafeMath.mul(secondsPassed, dragonCount);
    }
    
    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return a < b ? a : b;
    }
    
    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }
    
    function getMyPremiumDragons() public view returns (uint256) {
        return premiumDragons[msg.sender];
    }
    
    function getMyIceDragon() public view returns (uint256) {
        return iceDragons[msg.sender];
    }
    
    function getMyUltraDragon() public view returns (uint256) {
        return ultraDragon[msg.sender];
    }
    
    
    function getEggsToHatchDragon() public view returns (uint256) {
        uint256 timeSpent = SafeMath.sub(block.timestamp, contractStarted); 
        timeSpent = SafeMath.div(timeSpent, 3600);
        
        if (bossAlive == true) {
            return SafeMath.div(SafeMath.mul(timeSpent, 10), 2); //Cut eggs to hatch in half if boss is alive!
        } else {
            return SafeMath.mul(timeSpent, 10);
        }
        
    }
    
    function calculatePercentage(uint256 amount, uint256 percentage) public pure returns(uint256) {
        return SafeMath.div(SafeMath.mul(amount, percentage), 100);
    }
    
    function getDragonsToBuy(uint256 eth, uint256 multiplier) internal returns(uint256) {
        require(activated);
        require(block.timestamp >= 1615622400);  //mar 13 2021 - 2am GMT
        
        if (lastHatch[msg.sender] == 0) {
            lastHatch[msg.sender] = block.timestamp;
            lastSell[msg.sender] = block.timestamp - sell_cooldown;
            lastBuy[msg.sender] = block.timestamp - buy_cooldown;
        }
        
        
        uint256 eggsBought = 0;
        
        
        if (address(this).balance <= eth) {
            eggsBought = SafeMath.div(calculateEggBuy(eth, address(this).balance), multiplier);
        } else {
            eggsBought = SafeMath.div(calculateEggBuy(eth, SafeMath.sub(address(this).balance, eth)), multiplier);
        }
        

        require(eggsBought > 0);
        
        ceoAddress.transfer(calculatePercentage(eth, CEO_FEE));
        hatchEggs(msg.sender);
        return eggsBought;
    }
    
    
    function buyPremiumDrangon() public payable {
        require(activated);
        require(msg.value <= 5 ether);   //prevent buys of over 5 BNB per tx.
        
        uint256 dragons = getDragonsToBuy(msg.value, 1);
        
        
        if (getNextBuyTime() > block.timestamp)
        {
            dragons = SafeMath.sub(dragons, calculatePercentage(dragons, getBuyTax()));
        }
        
        
        premiumDragons[msg.sender] += dragons;
        
        lastBuy[msg.sender] = block.timestamp;
    }
    
    function buyIceDrangon() public payable {
        require(activated);
        require(msg.value <= 5 ether);   //prevent buys of over 5 BNB per tx.
        
        uint256 dragons = getDragonsToBuy(msg.value, 8);

        if (getNextBuyTime() > block.timestamp)
        {
            dragons = SafeMath.sub(dragons, calculatePercentage(dragons, getBuyTax()));
        }
        
        iceDragons[msg.sender] += dragons;
        
        lastBuy[msg.sender] = block.timestamp;
    }
    
    function buyUltraDrangon() public payable {
        require(activated);
        require(msg.value <= 5 ether);   //prevent buys of over 5 BNB per tx.
        
        uint256 dragons = getDragonsToBuy(msg.value, 20);

        if (getNextBuyTime() > block.timestamp)
        {
            dragons = SafeMath.sub(dragons, calculatePercentage(dragons, getBuyTax()));
        }
        
        ultraDragon[msg.sender] += dragons;
        
        lastBuy[msg.sender] = block.timestamp;
    }
    
    function hatchEggs(address ref) public {
        require(activated);
        require(canSell_canHatch == true);
        require(block.timestamp >= 1615622400);  //mar 13 2021 - 2am GMT
        
        if (ref != msg.sender) {
            referrals[msg.sender] = ref;
        }
        
        uint256 eggsProduced = getMyEggs();
        uint256 newDragon = SafeMath.div(eggsProduced, EGGS_TO_HATCH_1Dragon);
        newDragon = SafeMath.div(eggsProduced, EGGS_TO_HATCH_1Dragon);
        premiumDragons[msg.sender] = SafeMath.add(premiumDragons[msg.sender], newDragon);
        lastHatch[msg.sender] = block.timestamp;
        
        userReferralEggs[msg.sender] = 0;
        
        //send referral eggs
        userReferralEggs[referrals[msg.sender]] = SafeMath.add(userReferralEggs[referrals[msg.sender]], SafeMath.div(eggsProduced, 10));
        
        //boost market to nerf hoarding
        marketEggs = SafeMath.add(marketEggs, SafeMath.div(newDragon, 10));
    }
    
    function sellEggs() public {
        require(activated, "GAME HAS NOT STARTED");
        require(canSell_canHatch == true);
        require(block.timestamp >= 1615622400);  //mar 13 2021 - 2am GMT
        
        
        uint256 hasEggs = SafeMath.div(getMyEggs(), EGGS_TO_HATCH_1Dragon);
        uint256 ethValue = calculateEggSell(hasEggs);
        uint256 fee = calculatePercentage(ethValue, CEO_FEE);
        
        userReferralEggs[msg.sender] = 0;
        lastHatch[msg.sender] = block.timestamp;
        
        marketEggs = SafeMath.add(marketEggs, hasEggs);
        ceoAddress.transfer(fee);
        
        ethValue = SafeMath.sub(ethValue, fee);
        
        
        if (getNextSellTime() > block.timestamp)
        {
           ethValue = SafeMath.sub(ethValue, calculatePercentage(ethValue, getSellTax())); 
        }
        
        
        lastSell[msg.sender] = block.timestamp;
        
        msg.sender.transfer(ethValue);
    }
    
    
    function sellEggsWhenAttack() internal {
        require(activated);
        require(canSell_canHatch == true);
        
        uint256 hasEggs = SafeMath.div(SafeMath.mul(getMyEggs(), 2), EGGS_TO_HATCH_1Dragon);
        uint256 ethValue = calculateEggSell(hasEggs);
        uint256 fee = calculatePercentage(ethValue, CEO_FEE);
        
        userReferralEggs[msg.sender] = 0;
        lastHatch[msg.sender] = block.timestamp;
        //marketEggs = SafeMath.add(marketEggs, hasEggs);  //Prevent market from getting saturated by attacking bowser and selling eggs.
        ceoAddress.transfer(fee);
        msg.sender.transfer(SafeMath.sub(ethValue, fee));
    }
    
    
    //Trade balancing algorithm
    function calculateTrade(uint256 rt,uint256 rs, uint256 bs) public view returns(uint256){
        return SafeMath.div(SafeMath.mul(PSN, bs), SafeMath.add(PSNH, SafeMath.div(SafeMath.add(SafeMath.mul(PSN, rs), SafeMath.mul(PSNH, rt)), rt)));
    }
    
    function calculateEggSell(uint256 eggs) public view returns(uint256){
        return calculateEggSell(eggs, address(this).balance);
    }
    
    function calculateEggSell(uint256 eggs, uint256 eth) public view returns(uint256){
        return calculateTrade(eggs, marketEggs, eth);
    }
    
    
    function calculateEggBuy(uint256 eth, uint256 contractBalance) public view returns(uint256){
        return calculateTrade(eth, contractBalance, marketEggs);
    }
    
    function calculateEggBuy(uint256 eth) public view returns(uint256) {
        return calculateEggBuy(eth, address(this).balance);
    }
    
    
    function mulDiv (uint x, uint y, uint z) public pure returns (uint) {
      return
        ABDKMathQuad.toUInt (
          ABDKMathQuad.div (
            ABDKMathQuad.mul (
              ABDKMathQuad.fromUInt (x),
              ABDKMathQuad.fromUInt (y)
            ),
            ABDKMathQuad.fromUInt (z)
          )
        );
    }
    
    
}










library SafeMath {

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

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

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

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



/**
 * Smart contract library of mathematical functions operating with IEEE 754
 * quadruple-precision binary floating-point numbers (quadruple precision
 * numbers).  As long as quadruple precision numbers are 16-bytes long, they are
 * represented by bytes16 type.
 */
library ABDKMathQuad {
  /*
   * 0.
   */
  bytes16 private constant POSITIVE_ZERO = 0x00000000000000000000000000000000;

  /*
   * -0.
   */
  bytes16 private constant NEGATIVE_ZERO = 0x80000000000000000000000000000000;

  /*
   * +Infinity.
   */
  bytes16 private constant POSITIVE_INFINITY = 0x7FFF0000000000000000000000000000;

  /*
   * -Infinity.
   */
  bytes16 private constant NEGATIVE_INFINITY = 0xFFFF0000000000000000000000000000;

  /*
   * Canonical NaN value.
   */
  bytes16 private constant NaN = 0x7FFF8000000000000000000000000000;

  /**
   * Convert signed 256-bit integer number into quadruple precision number.
   *
   * @param x signed 256-bit integer number
   * @return quadruple precision number
   */
  function fromInt (int256 x) internal pure returns (bytes16) {
    if (x == 0) return bytes16 (0);
    else {
      // We rely on overflow behavior here
      uint256 result = uint256 (x > 0 ? x : -x);

      uint256 msb = msb (result);
      if (msb < 112) result <<= 112 - msb;
      else if (msb > 112) result >>= msb - 112;

      result = result & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF | 16383 + msb << 112;
      if (x < 0) result |= 0x80000000000000000000000000000000;

      return bytes16 (uint128 (result));
    }
  }

  /**
   * Convert quadruple precision number into signed 256-bit integer number
   * rounding towards zero.  Revert on overflow.
   *
   * @param x quadruple precision number
   * @return signed 256-bit integer number
   */
  function toInt (bytes16 x) internal pure returns (int256) {
    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;

    require (exponent <= 16638); // Overflow
    if (exponent < 16383) return 0; // Underflow

    uint256 result = uint256 (uint128 (x)) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
      0x10000000000000000000000000000;

    if (exponent < 16495) result >>= 16495 - exponent;
    else if (exponent > 16495) result <<= exponent - 16495;

    if (uint128 (x) >= 0x80000000000000000000000000000000) { // Negative
      require (result <= 0x8000000000000000000000000000000000000000000000000000000000000000);
      return -int256 (result); // We rely on overflow behavior here
    } else {
      require (result <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
      return int256 (result);
    }
  }

  /**
   * Convert unsigned 256-bit integer number into quadruple precision number.
   *
   * @param x unsigned 256-bit integer number
   * @return quadruple precision number
   */
  function fromUInt (uint256 x) internal pure returns (bytes16) {
    if (x == 0) return bytes16 (0);
    else {
      uint256 result = x;

      uint256 msb = msb (result);
      if (msb < 112) result <<= 112 - msb;
      else if (msb > 112) result >>= msb - 112;

      result = result & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF | 16383 + msb << 112;

      return bytes16 (uint128 (result));
    }
  }

  /**
   * Convert quadruple precision number into unsigned 256-bit integer number
   * rounding towards zero.  Revert on underflow.  Note, that negative floating
   * point numbers in range (-1.0 .. 0.0) may be converted to unsigned integer
   * without error, because they are rounded to zero.
   *
   * @param x quadruple precision number
   * @return unsigned 256-bit integer number
   */
  function toUInt (bytes16 x) internal pure returns (uint256) {
    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;

    if (exponent < 16383) return 0; // Underflow

    require (uint128 (x) < 0x80000000000000000000000000000000); // Negative

    require (exponent <= 16638); // Overflow
    uint256 result = uint256 (uint128 (x)) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
      0x10000000000000000000000000000;

    if (exponent < 16495) result >>= 16495 - exponent;
    else if (exponent > 16495) result <<= exponent - 16495;

    return result;
  }

  /**
   * Convert signed 128.128 bit fixed point number into quadruple precision
   * number.
   *
   * @param x signed 128.128 bit fixed point number
   * @return quadruple precision number
   */
  function from128x128 (int256 x) internal pure returns (bytes16) {
    if (x == 0) return bytes16 (0);
    else {
      // We rely on overflow behavior here
      uint256 result = uint256 (x > 0 ? x : -x);

      uint256 msb = msb (result);
      if (msb < 112) result <<= 112 - msb;
      else if (msb > 112) result >>= msb - 112;

      result = result & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF | 16255 + msb << 112;
      if (x < 0) result |= 0x80000000000000000000000000000000;

      return bytes16 (uint128 (result));
    }
  }

  /**
   * Convert quadruple precision number into signed 128.128 bit fixed point
   * number.  Revert on overflow.
   *
   * @param x quadruple precision number
   * @return signed 128.128 bit fixed point number
   */
  function to128x128 (bytes16 x) internal pure returns (int256) {
    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;

    require (exponent <= 16510); // Overflow
    if (exponent < 16255) return 0; // Underflow

    uint256 result = uint256 (uint128 (x)) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
      0x10000000000000000000000000000;

    if (exponent < 16367) result >>= 16367 - exponent;
    else if (exponent > 16367) result <<= exponent - 16367;

    if (uint128 (x) >= 0x80000000000000000000000000000000) { // Negative
      require (result <= 0x8000000000000000000000000000000000000000000000000000000000000000);
      return -int256 (result); // We rely on overflow behavior here
    } else {
      require (result <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
      return int256 (result);
    }
  }

  /**
   * Convert signed 64.64 bit fixed point number into quadruple precision
   * number.
   *
   * @param x signed 64.64 bit fixed point number
   * @return quadruple precision number
   */
  function from64x64 (int128 x) internal pure returns (bytes16) {
    if (x == 0) return bytes16 (0);
    else {
      // We rely on overflow behavior here
      uint256 result = uint128 (x > 0 ? x : -x);

      uint256 msb = msb (result);
      if (msb < 112) result <<= 112 - msb;
      else if (msb > 112) result >>= msb - 112;

      result = result & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF | 16319 + msb << 112;
      if (x < 0) result |= 0x80000000000000000000000000000000;

      return bytes16 (uint128 (result));
    }
  }

  /**
   * Convert quadruple precision number into signed 64.64 bit fixed point
   * number.  Revert on overflow.
   *
   * @param x quadruple precision number
   * @return signed 64.64 bit fixed point number
   */
  function to64x64 (bytes16 x) internal pure returns (int128) {
    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;

    require (exponent <= 16446); // Overflow
    if (exponent < 16319) return 0; // Underflow

    uint256 result = uint256 (uint128 (x)) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
      0x10000000000000000000000000000;

    if (exponent < 16431) result >>= 16431 - exponent;
    else if (exponent > 16431) result <<= exponent - 16431;

    if (uint128 (x) >= 0x80000000000000000000000000000000) { // Negative
      require (result <= 0x80000000000000000000000000000000);
      return -int128 (result); // We rely on overflow behavior here
    } else {
      require (result <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
      return int128 (result);
    }
  }

  /**
   * Convert octuple precision number into quadruple precision number.
   *
   * @param x octuple precision number
   * @return quadruple precision number
   */
  function fromOctuple (bytes32 x) internal pure returns (bytes16) {
    bool negative = x & 0x8000000000000000000000000000000000000000000000000000000000000000 > 0;

    uint256 exponent = uint256 (x) >> 236 & 0x7FFFF;
    uint256 significand = uint256 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    if (exponent == 0x7FFFF) {
      if (significand > 0) return NaN;
      else return negative ? NEGATIVE_INFINITY : POSITIVE_INFINITY;
    }

    if (exponent > 278526)
      return negative ? NEGATIVE_INFINITY : POSITIVE_INFINITY;
    else if (exponent < 245649)
      return negative ? NEGATIVE_ZERO : POSITIVE_ZERO;
    else if (exponent < 245761) {
      significand = (significand | 0x100000000000000000000000000000000000000000000000000000000000) >> 245885 - exponent;
      exponent = 0;
    } else {
      significand >>= 124;
      exponent -= 245760;
    }

    uint128 result = uint128 (significand | exponent << 112);
    if (negative) result |= 0x80000000000000000000000000000000;

    return bytes16 (result);
  }

  /**
   * Convert quadruple precision number into octuple precision number.
   *
   * @param x quadruple precision number
   * @return octuple precision number
   */
  function toOctuple (bytes16 x) internal pure returns (bytes32) {
    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;

    uint256 result = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    if (exponent == 0x7FFF) exponent = 0x7FFFF; // Infinity or NaN
    else if (exponent == 0) {
      if (result > 0) {
        uint256 msb = msb (result);
        result = result << 236 - msb & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        exponent = 245649 + msb;
      }
    } else {
      result <<= 124;
      exponent += 245760;
    }

    result |= exponent << 236;
    if (uint128 (x) >= 0x80000000000000000000000000000000)
      result |= 0x8000000000000000000000000000000000000000000000000000000000000000;

    return bytes32 (result);
  }

  /**
   * Convert double precision number into quadruple precision number.
   *
   * @param x double precision number
   * @return quadruple precision number
   */
  function fromDouble (bytes8 x) internal pure returns (bytes16) {
    uint256 exponent = uint64 (x) >> 52 & 0x7FF;

    uint256 result = uint64 (x) & 0xFFFFFFFFFFFFF;

    if (exponent == 0x7FF) exponent = 0x7FFF; // Infinity or NaN
    else if (exponent == 0) {
      if (result > 0) {
        uint256 msb = msb (result);
        result = result << 112 - msb & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        exponent = 15309 + msb;
      }
    } else {
      result <<= 60;
      exponent += 15360;
    }

    result |= exponent << 112;
    if (x & 0x8000000000000000 > 0)
      result |= 0x80000000000000000000000000000000;

    return bytes16 (uint128 (result));
  }

  /**
   * Convert quadruple precision number into double precision number.
   *
   * @param x quadruple precision number
   * @return double precision number
   */
  function toDouble (bytes16 x) internal pure returns (bytes8) {
    bool negative = uint128 (x) >= 0x80000000000000000000000000000000;

    uint256 exponent = uint128 (x) >> 112 & 0x7FFF;
    uint256 significand = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    if (exponent == 0x7FFF) {
      if (significand > 0) return 0x7FF8000000000000; // NaN
      else return negative ?
          bytes8 (0xFFF0000000000000) : // -Infinity
          bytes8 (0x7FF0000000000000); // Infinity
    }

    if (exponent > 17406)
      return negative ?
          bytes8 (0xFFF0000000000000) : // -Infinity
          bytes8 (0x7FF0000000000000); // Infinity
    else if (exponent < 15309)
      return negative ?
          bytes8 (0x8000000000000000) : // -0
          bytes8 (0x0000000000000000); // 0
    else if (exponent < 15361) {
      significand = (significand | 0x10000000000000000000000000000) >> 15421 - exponent;
      exponent = 0;
    } else {
      significand >>= 60;
      exponent -= 15360;
    }

    uint64 result = uint64 (significand | exponent << 52);
    if (negative) result |= 0x8000000000000000;

    return bytes8 (result);
  }

  /**
   * Test whether given quadruple precision number is NaN.
   *
   * @param x quadruple precision number
   * @return true if x is NaN, false otherwise
   */
  function isNaN (bytes16 x) internal pure returns (bool) {
    return uint128 (x) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF >
      0x7FFF0000000000000000000000000000;
  }

  /**
   * Test whether given quadruple precision number is positive or negative
   * infinity.
   *
   * @param x quadruple precision number
   * @return true if x is positive or negative infinity, false otherwise
   */
  function isInfinity (bytes16 x) internal pure returns (bool) {
    return uint128 (x) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ==
      0x7FFF0000000000000000000000000000;
  }

  /**
   * Calculate sign of x, i.e. -1 if x is negative, 0 if x if zero, and 1 if x
   * is positive.  Note that sign (-0) is zero.  Revert if x is NaN. 
   *
   * @param x quadruple precision number
   * @return sign of x
   */
  function sign (bytes16 x) internal pure returns (int8) {
    uint128 absoluteX = uint128 (x) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    require (absoluteX <= 0x7FFF0000000000000000000000000000); // Not NaN

    if (absoluteX == 0) return 0;
    else if (uint128 (x) >= 0x80000000000000000000000000000000) return -1;
    else return 1;
  }

  /**
   * Calculate sign (x - y).  Revert if either argument is NaN, or both
   * arguments are infinities of the same sign. 
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return sign (x - y)
   */
  function cmp (bytes16 x, bytes16 y) internal pure returns (int8) {
    uint128 absoluteX = uint128 (x) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    require (absoluteX <= 0x7FFF0000000000000000000000000000); // Not NaN

    uint128 absoluteY = uint128 (y) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    require (absoluteY <= 0x7FFF0000000000000000000000000000); // Not NaN

    // Not infinities of the same sign
    require (x != y || absoluteX < 0x7FFF0000000000000000000000000000);

    if (x == y) return 0;
    else {
      bool negativeX = uint128 (x) >= 0x80000000000000000000000000000000;
      bool negativeY = uint128 (y) >= 0x80000000000000000000000000000000;

      if (negativeX) {
        if (negativeY) return absoluteX > absoluteY ? -1 : int8 (1);
        else return -1; 
      } else {
        if (negativeY) return 1;
        else return absoluteX > absoluteY ? int8 (1) : -1;
      }
    }
  }

  /**
   * Test whether x equals y.  NaN, infinity, and -infinity are not equal to
   * anything. 
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return true if x equals to y, false otherwise
   */
  function eq (bytes16 x, bytes16 y) internal pure returns (bool) {
    if (x == y) {
      return uint128 (x) & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF <
        0x7FFF0000000000000000000000000000;
    } else return false;
  }

  /**
   * Calculate x + y.  Special values behave in the following way:
   *
   * NaN + x = NaN for any x.
   * Infinity + x = Infinity for any finite x.
   * -Infinity + x = -Infinity for any finite x.
   * Infinity + Infinity = Infinity.
   * -Infinity + -Infinity = -Infinity.
   * Infinity + -Infinity = -Infinity + Infinity = NaN.
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return quadruple precision number
   */
  function add (bytes16 x, bytes16 y) internal pure returns (bytes16) {
    uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
    uint256 yExponent = uint128 (y) >> 112 & 0x7FFF;

    if (xExponent == 0x7FFF) {
      if (yExponent == 0x7FFF) { 
        if (x == y) return x;
        else return NaN;
      } else return x; 
    } else if (yExponent == 0x7FFF) return y;
    else {
      bool xSign = uint128 (x) >= 0x80000000000000000000000000000000;
      uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (xExponent == 0) xExponent = 1;
      else xSignifier |= 0x10000000000000000000000000000;

      bool ySign = uint128 (y) >= 0x80000000000000000000000000000000;
      uint256 ySignifier = uint128 (y) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (yExponent == 0) yExponent = 1;
      else ySignifier |= 0x10000000000000000000000000000;

      if (xSignifier == 0) return y == NEGATIVE_ZERO ? POSITIVE_ZERO : y;
      else if (ySignifier == 0) return x == NEGATIVE_ZERO ? POSITIVE_ZERO : x;
      else {
        int256 delta = int256 (xExponent) - int256 (yExponent);
  
        if (xSign == ySign) {
          if (delta > 112) return x;
          else if (delta > 0) ySignifier >>= uint256 (delta);
          else if (delta < -112) return y;
          else if (delta < 0) {
            xSignifier >>= uint256 (-delta);
            xExponent = yExponent;
          }
  
          xSignifier += ySignifier;
  
          if (xSignifier >= 0x20000000000000000000000000000) {
            xSignifier >>= 1;
            xExponent += 1;
          }
  
          if (xExponent == 0x7FFF)
            return xSign ? NEGATIVE_INFINITY : POSITIVE_INFINITY;
          else {
            if (xSignifier < 0x10000000000000000000000000000) xExponent = 0;
            else xSignifier &= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
  
            return bytes16 (uint128 (
                (xSign ? 0x80000000000000000000000000000000 : 0) |
                (xExponent << 112) |
                xSignifier)); 
          }
        } else {
          if (delta > 0) {
            xSignifier <<= 1;
            xExponent -= 1;
          } else if (delta < 0) {
            ySignifier <<= 1;
            xExponent = yExponent - 1;
          }

          if (delta > 112) ySignifier = 1;
          else if (delta > 1) ySignifier = (ySignifier - 1 >> uint256 (delta - 1)) + 1;
          else if (delta < -112) xSignifier = 1;
          else if (delta < -1) xSignifier = (xSignifier - 1 >> uint256 (-delta - 1)) + 1;

          if (xSignifier >= ySignifier) xSignifier -= ySignifier;
          else {
            xSignifier = ySignifier - xSignifier;
            xSign = ySign;
          }

          if (xSignifier == 0)
            return POSITIVE_ZERO;

          uint256 msb = msb (xSignifier);

          if (msb == 113) {
            xSignifier = xSignifier >> 1 & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
            xExponent += 1;
          } else if (msb < 112) {
            uint256 shift = 112 - msb;
            if (xExponent > shift) {
              xSignifier = xSignifier << shift & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
              xExponent -= shift;
            } else {
              xSignifier <<= xExponent - 1;
              xExponent = 0;
            }
          } else xSignifier &= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

          if (xExponent == 0x7FFF)
            return xSign ? NEGATIVE_INFINITY : POSITIVE_INFINITY;
          else return bytes16 (uint128 (
              (xSign ? 0x80000000000000000000000000000000 : 0) |
              (xExponent << 112) |
              xSignifier));
        }
      }
    }
  }

  /**
   * Calculate x - y.  Special values behave in the following way:
   *
   * NaN - x = NaN for any x.
   * Infinity - x = Infinity for any finite x.
   * -Infinity - x = -Infinity for any finite x.
   * Infinity - -Infinity = Infinity.
   * -Infinity - Infinity = -Infinity.
   * Infinity - Infinity = -Infinity - -Infinity = NaN.
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return quadruple precision number
   */
  function sub (bytes16 x, bytes16 y) internal pure returns (bytes16) {
    return add (x, y ^ 0x80000000000000000000000000000000);
  }

  /**
   * Calculate x * y.  Special values behave in the following way:
   *
   * NaN * x = NaN for any x.
   * Infinity * x = Infinity for any finite positive x.
   * Infinity * x = -Infinity for any finite negative x.
   * -Infinity * x = -Infinity for any finite positive x.
   * -Infinity * x = Infinity for any finite negative x.
   * Infinity * 0 = NaN.
   * -Infinity * 0 = NaN.
   * Infinity * Infinity = Infinity.
   * Infinity * -Infinity = -Infinity.
   * -Infinity * Infinity = -Infinity.
   * -Infinity * -Infinity = Infinity.
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return quadruple precision number
   */
  function mul (bytes16 x, bytes16 y) internal pure returns (bytes16) {
    uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
    uint256 yExponent = uint128 (y) >> 112 & 0x7FFF;

    if (xExponent == 0x7FFF) {
      if (yExponent == 0x7FFF) {
        if (x == y) return x ^ y & 0x80000000000000000000000000000000;
        else if (x ^ y == 0x80000000000000000000000000000000) return x | y;
        else return NaN;
      } else {
        if (y & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == 0) return NaN;
        else return x ^ y & 0x80000000000000000000000000000000;
      }
    } else if (yExponent == 0x7FFF) {
        if (x & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == 0) return NaN;
        else return y ^ x & 0x80000000000000000000000000000000;
    } else {
      uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (xExponent == 0) xExponent = 1;
      else xSignifier |= 0x10000000000000000000000000000;

      uint256 ySignifier = uint128 (y) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (yExponent == 0) yExponent = 1;
      else ySignifier |= 0x10000000000000000000000000000;

      xSignifier *= ySignifier;
      if (xSignifier == 0)
        return (x ^ y) & 0x80000000000000000000000000000000 > 0 ?
            NEGATIVE_ZERO : POSITIVE_ZERO;

      xExponent += yExponent;

      uint256 msb =
        xSignifier >= 0x200000000000000000000000000000000000000000000000000000000 ? 225 :
        xSignifier >= 0x100000000000000000000000000000000000000000000000000000000 ? 224 :
        msb (xSignifier);

      if (xExponent + msb < 16496) { // Underflow
        xExponent = 0;
        xSignifier = 0;
      } else if (xExponent + msb < 16608) { // Subnormal
        if (xExponent < 16496)
          xSignifier >>= 16496 - xExponent;
        else if (xExponent > 16496)
          xSignifier <<= xExponent - 16496;
        xExponent = 0;
      } else if (xExponent + msb > 49373) {
        xExponent = 0x7FFF;
        xSignifier = 0;
      } else {
        if (msb > 112)
          xSignifier >>= msb - 112;
        else if (msb < 112)
          xSignifier <<= 112 - msb;

        xSignifier &= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

        xExponent = xExponent + msb - 16607;
      }

      return bytes16 (uint128 (uint128 ((x ^ y) & 0x80000000000000000000000000000000) |
          xExponent << 112 | xSignifier));
    }
  }

  /**
   * Calculate x / y.  Special values behave in the following way:
   *
   * NaN / x = NaN for any x.
   * x / NaN = NaN for any x.
   * Infinity / x = Infinity for any finite non-negative x.
   * Infinity / x = -Infinity for any finite negative x including -0.
   * -Infinity / x = -Infinity for any finite non-negative x.
   * -Infinity / x = Infinity for any finite negative x including -0.
   * x / Infinity = 0 for any finite non-negative x.
   * x / -Infinity = -0 for any finite non-negative x.
   * x / Infinity = -0 for any finite non-negative x including -0.
   * x / -Infinity = 0 for any finite non-negative x including -0.
   * 
   * Infinity / Infinity = NaN.
   * Infinity / -Infinity = -NaN.
   * -Infinity / Infinity = -NaN.
   * -Infinity / -Infinity = NaN.
   *
   * Division by zero behaves in the following way:
   *
   * x / 0 = Infinity for any finite positive x.
   * x / -0 = -Infinity for any finite positive x.
   * x / 0 = -Infinity for any finite negative x.
   * x / -0 = Infinity for any finite negative x.
   * 0 / 0 = NaN.
   * 0 / -0 = NaN.
   * -0 / 0 = NaN.
   * -0 / -0 = NaN.
   *
   * @param x quadruple precision number
   * @param y quadruple precision number
   * @return quadruple precision number
   */
  function div (bytes16 x, bytes16 y) internal pure returns (bytes16) {
    uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
    uint256 yExponent = uint128 (y) >> 112 & 0x7FFF;

    if (xExponent == 0x7FFF) {
      if (yExponent == 0x7FFF) return NaN;
      else return x ^ y & 0x80000000000000000000000000000000;
    } else if (yExponent == 0x7FFF) {
      if (y & 0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF != 0) return NaN;
      else return POSITIVE_ZERO | (x ^ y) & 0x80000000000000000000000000000000;
    } else if (y & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == 0) {
      if (x & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF == 0) return NaN;
      else return POSITIVE_INFINITY | (x ^ y) & 0x80000000000000000000000000000000;
    } else {
      uint256 ySignifier = uint128 (y) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (yExponent == 0) yExponent = 1;
      else ySignifier |= 0x10000000000000000000000000000;

      uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (xExponent == 0) {
        if (xSignifier != 0) {
          uint shift = 226 - msb (xSignifier);

          xSignifier <<= shift;

          xExponent = 1;
          yExponent += shift - 114;
        }
      }
      else {
        xSignifier = (xSignifier | 0x10000000000000000000000000000) << 114;
      }

      xSignifier = xSignifier / ySignifier;
      if (xSignifier == 0)
        return (x ^ y) & 0x80000000000000000000000000000000 > 0 ?
            NEGATIVE_ZERO : POSITIVE_ZERO;

      assert (xSignifier >= 0x1000000000000000000000000000);

      uint256 msb =
        xSignifier >= 0x80000000000000000000000000000 ? msb (xSignifier) :
        xSignifier >= 0x40000000000000000000000000000 ? 114 :
        xSignifier >= 0x20000000000000000000000000000 ? 113 : 112;

      if (xExponent + msb > yExponent + 16497) { // Overflow
        xExponent = 0x7FFF;
        xSignifier = 0;
      } else if (xExponent + msb + 16380  < yExponent) { // Underflow
        xExponent = 0;
        xSignifier = 0;
      } else if (xExponent + msb + 16268  < yExponent) { // Subnormal
        if (xExponent + 16380 > yExponent)
          xSignifier <<= xExponent + 16380 - yExponent;
        else if (xExponent + 16380 < yExponent)
          xSignifier >>= yExponent - xExponent - 16380;

        xExponent = 0;
      } else { // Normal
        if (msb > 112)
          xSignifier >>= msb - 112;

        xSignifier &= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

        xExponent = xExponent + msb + 16269 - yExponent;
      }

      return bytes16 (uint128 (uint128 ((x ^ y) & 0x80000000000000000000000000000000) |
          xExponent << 112 | xSignifier));
    }
  }

  /**
   * Calculate -x.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function neg (bytes16 x) internal pure returns (bytes16) {
    return x ^ 0x80000000000000000000000000000000;
  }

  /**
   * Calculate |x|.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function abs (bytes16 x) internal pure returns (bytes16) {
    return x & 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
  }

  /**
   * Calculate square root of x.  Return NaN on negative x excluding -0.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function sqrt (bytes16 x) internal pure returns (bytes16) {
    if (uint128 (x) >  0x80000000000000000000000000000000) return NaN;
    else {
      uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
      if (xExponent == 0x7FFF) return x;
      else {
        uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        if (xExponent == 0) xExponent = 1;
        else xSignifier |= 0x10000000000000000000000000000;

        if (xSignifier == 0) return POSITIVE_ZERO;

        bool oddExponent = xExponent & 0x1 == 0;
        xExponent = xExponent + 16383 >> 1;

        if (oddExponent) {
          if (xSignifier >= 0x10000000000000000000000000000)
            xSignifier <<= 113;
          else {
            uint256 msb = msb (xSignifier);
            uint256 shift = (226 - msb) & 0xFE;
            xSignifier <<= shift;
            xExponent -= shift - 112 >> 1;
          }
        } else {
          if (xSignifier >= 0x10000000000000000000000000000)
            xSignifier <<= 112;
          else {
            uint256 msb = msb (xSignifier);
            uint256 shift = (225 - msb) & 0xFE;
            xSignifier <<= shift;
            xExponent -= shift - 112 >> 1;
          }
        }

        uint256 r = 0x10000000000000000000000000000;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1;
        r = (r + xSignifier / r) >> 1; // Seven iterations should be enough
        uint256 r1 = xSignifier / r;
        if (r1 < r) r = r1;

        return bytes16 (uint128 (xExponent << 112 | r & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF));
      }
    }
  }

  /**
   * Calculate binary logarithm of x.  Return NaN on negative x excluding -0.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function log_2 (bytes16 x) internal pure returns (bytes16) {
    if (uint128 (x) > 0x80000000000000000000000000000000) return NaN;
    else if (x == 0x3FFF0000000000000000000000000000) return POSITIVE_ZERO; 
    else {
      uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
      if (xExponent == 0x7FFF) return x;
      else {
        uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        if (xExponent == 0) xExponent = 1;
        else xSignifier |= 0x10000000000000000000000000000;

        if (xSignifier == 0) return NEGATIVE_INFINITY;

        bool resultNegative;
        uint256 resultExponent = 16495;
        uint256 resultSignifier;

        if (xExponent >= 0x3FFF) {
          resultNegative = false;
          resultSignifier = xExponent - 0x3FFF;
          xSignifier <<= 15;
        } else {
          resultNegative = true;
          if (xSignifier >= 0x10000000000000000000000000000) {
            resultSignifier = 0x3FFE - xExponent;
            xSignifier <<= 15;
          } else {
            uint256 msb = msb (xSignifier);
            resultSignifier = 16493 - msb;
            xSignifier <<= 127 - msb;
          }
        }

        if (xSignifier == 0x80000000000000000000000000000000) {
          if (resultNegative) resultSignifier += 1;
          uint256 shift = 112 - msb (resultSignifier);
          resultSignifier <<= shift;
          resultExponent -= shift;
        } else {
          uint256 bb = resultNegative ? 1 : 0;
          while (resultSignifier < 0x10000000000000000000000000000) {
            resultSignifier <<= 1;
            resultExponent -= 1;
  
            xSignifier *= xSignifier;
            uint256 b = xSignifier >> 255;
            resultSignifier += b ^ bb;
            xSignifier >>= 127 + b;
          }
        }

        return bytes16 (uint128 ((resultNegative ? 0x80000000000000000000000000000000 : 0) |
            resultExponent << 112 | resultSignifier & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF));
      }
    }
  }

  /**
   * Calculate natural logarithm of x.  Return NaN on negative x excluding -0.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function ln (bytes16 x) internal pure returns (bytes16) {
    return mul (log_2 (x), 0x3FFE62E42FEFA39EF35793C7673007E5);
  }

  /**
   * Calculate 2^x.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function pow_2 (bytes16 x) internal pure returns (bytes16) {
    bool xNegative = uint128 (x) > 0x80000000000000000000000000000000;
    uint256 xExponent = uint128 (x) >> 112 & 0x7FFF;
    uint256 xSignifier = uint128 (x) & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    if (xExponent == 0x7FFF && xSignifier != 0) return NaN;
    else if (xExponent > 16397)
      return xNegative ? POSITIVE_ZERO : POSITIVE_INFINITY;
    else if (xExponent < 16255)
      return 0x3FFF0000000000000000000000000000;
    else {
      if (xExponent == 0) xExponent = 1;
      else xSignifier |= 0x10000000000000000000000000000;

      if (xExponent > 16367)
        xSignifier <<= xExponent - 16367;
      else if (xExponent < 16367)
        xSignifier >>= 16367 - xExponent;

      if (xNegative && xSignifier > 0x406E00000000000000000000000000000000)
        return POSITIVE_ZERO;

      if (!xNegative && xSignifier > 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
        return POSITIVE_INFINITY;

      uint256 resultExponent = xSignifier >> 128;
      xSignifier &= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
      if (xNegative && xSignifier != 0) {
        xSignifier = ~xSignifier;
        resultExponent += 1;
      }

      uint256 resultSignifier = 0x80000000000000000000000000000000;
      if (xSignifier & 0x80000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x16A09E667F3BCC908B2FB1366EA957D3E >> 128;
      if (xSignifier & 0x40000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1306FE0A31B7152DE8D5A46305C85EDEC >> 128;
      if (xSignifier & 0x20000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1172B83C7D517ADCDF7C8C50EB14A791F >> 128;
      if (xSignifier & 0x10000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10B5586CF9890F6298B92B71842A98363 >> 128;
      if (xSignifier & 0x8000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1059B0D31585743AE7C548EB68CA417FD >> 128;
      if (xSignifier & 0x4000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x102C9A3E778060EE6F7CACA4F7A29BDE8 >> 128;
      if (xSignifier & 0x2000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10163DA9FB33356D84A66AE336DCDFA3F >> 128;
      if (xSignifier & 0x1000000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100B1AFA5ABCBED6129AB13EC11DC9543 >> 128;
      if (xSignifier & 0x800000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10058C86DA1C09EA1FF19D294CF2F679B >> 128;
      if (xSignifier & 0x400000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1002C605E2E8CEC506D21BFC89A23A00F >> 128;
      if (xSignifier & 0x200000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100162F3904051FA128BCA9C55C31E5DF >> 128;
      if (xSignifier & 0x100000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000B175EFFDC76BA38E31671CA939725 >> 128;
      if (xSignifier & 0x80000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100058BA01FB9F96D6CACD4B180917C3D >> 128;
      if (xSignifier & 0x40000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10002C5CC37DA9491D0985C348C68E7B3 >> 128;
      if (xSignifier & 0x20000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000162E525EE054754457D5995292026 >> 128;
      if (xSignifier & 0x10000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000B17255775C040618BF4A4ADE83FC >> 128;
      if (xSignifier & 0x8000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000058B91B5BC9AE2EED81E9B7D4CFAB >> 128;
      if (xSignifier & 0x4000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100002C5C89D5EC6CA4D7C8ACC017B7C9 >> 128;
      if (xSignifier & 0x2000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000162E43F4F831060E02D839A9D16D >> 128;
      if (xSignifier & 0x1000000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000B1721BCFC99D9F890EA06911763 >> 128;
      if (xSignifier & 0x800000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000058B90CF1E6D97F9CA14DBCC1628 >> 128;
      if (xSignifier & 0x400000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000002C5C863B73F016468F6BAC5CA2B >> 128;
      if (xSignifier & 0x200000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000162E430E5A18F6119E3C02282A5 >> 128;
      if (xSignifier & 0x100000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000B1721835514B86E6D96EFD1BFE >> 128;
      if (xSignifier & 0x80000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000058B90C0B48C6BE5DF846C5B2EF >> 128;
      if (xSignifier & 0x40000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000002C5C8601CC6B9E94213C72737A >> 128;
      if (xSignifier & 0x20000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000162E42FFF037DF38AA2B219F06 >> 128;
      if (xSignifier & 0x10000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000B17217FBA9C739AA5819F44F9 >> 128;
      if (xSignifier & 0x8000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000058B90BFCDEE5ACD3C1CEDC823 >> 128;
      if (xSignifier & 0x4000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000002C5C85FE31F35A6A30DA1BE50 >> 128;
      if (xSignifier & 0x2000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000162E42FF0999CE3541B9FFFCF >> 128;
      if (xSignifier & 0x1000000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000B17217F80F4EF5AADDA45554 >> 128;
      if (xSignifier & 0x800000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000058B90BFBF8479BD5A81B51AD >> 128;
      if (xSignifier & 0x400000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000002C5C85FDF84BD62AE30A74CC >> 128;
      if (xSignifier & 0x200000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000162E42FEFB2FED257559BDAA >> 128;
      if (xSignifier & 0x100000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000B17217F7D5A7716BBA4A9AE >> 128;
      if (xSignifier & 0x80000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000058B90BFBE9DDBAC5E109CCE >> 128;
      if (xSignifier & 0x40000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000002C5C85FDF4B15DE6F17EB0D >> 128;
      if (xSignifier & 0x20000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000162E42FEFA494F1478FDE05 >> 128;
      if (xSignifier & 0x10000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000B17217F7D20CF927C8E94C >> 128;
      if (xSignifier & 0x8000000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000058B90BFBE8F71CB4E4B33D >> 128;
      if (xSignifier & 0x4000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000002C5C85FDF477B662B26945 >> 128;
      if (xSignifier & 0x2000000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000162E42FEFA3AE53369388C >> 128;
      if (xSignifier & 0x1000000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000B17217F7D1D351A389D40 >> 128;
      if (xSignifier & 0x800000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000058B90BFBE8E8B2D3D4EDE >> 128;
      if (xSignifier & 0x400000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000002C5C85FDF4741BEA6E77E >> 128;
      if (xSignifier & 0x200000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000162E42FEFA39FE95583C2 >> 128;
      if (xSignifier & 0x100000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000B17217F7D1CFB72B45E1 >> 128;
      if (xSignifier & 0x80000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000058B90BFBE8E7CC35C3F0 >> 128;
      if (xSignifier & 0x40000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000002C5C85FDF473E242EA38 >> 128;
      if (xSignifier & 0x20000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000162E42FEFA39F02B772C >> 128;
      if (xSignifier & 0x10000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000B17217F7D1CF7D83C1A >> 128;
      if (xSignifier & 0x8000000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000058B90BFBE8E7BDCBE2E >> 128;
      if (xSignifier & 0x4000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000002C5C85FDF473DEA871F >> 128;
      if (xSignifier & 0x2000000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000162E42FEFA39EF44D91 >> 128;
      if (xSignifier & 0x1000000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000B17217F7D1CF79E949 >> 128;
      if (xSignifier & 0x800000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000058B90BFBE8E7BCE544 >> 128;
      if (xSignifier & 0x400000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000002C5C85FDF473DE6ECA >> 128;
      if (xSignifier & 0x200000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000162E42FEFA39EF366F >> 128;
      if (xSignifier & 0x100000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000B17217F7D1CF79AFA >> 128;
      if (xSignifier & 0x80000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000058B90BFBE8E7BCD6D >> 128;
      if (xSignifier & 0x40000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000002C5C85FDF473DE6B2 >> 128;
      if (xSignifier & 0x20000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000162E42FEFA39EF358 >> 128;
      if (xSignifier & 0x10000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000B17217F7D1CF79AB >> 128;
      if (xSignifier & 0x8000000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000058B90BFBE8E7BCD5 >> 128;
      if (xSignifier & 0x4000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000002C5C85FDF473DE6A >> 128;
      if (xSignifier & 0x2000000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000162E42FEFA39EF34 >> 128;
      if (xSignifier & 0x1000000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000B17217F7D1CF799 >> 128;
      if (xSignifier & 0x800000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000058B90BFBE8E7BCC >> 128;
      if (xSignifier & 0x400000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000002C5C85FDF473DE5 >> 128;
      if (xSignifier & 0x200000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000162E42FEFA39EF2 >> 128;
      if (xSignifier & 0x100000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000B17217F7D1CF78 >> 128;
      if (xSignifier & 0x80000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000058B90BFBE8E7BB >> 128;
      if (xSignifier & 0x40000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000002C5C85FDF473DD >> 128;
      if (xSignifier & 0x20000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000162E42FEFA39EE >> 128;
      if (xSignifier & 0x10000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000B17217F7D1CF6 >> 128;
      if (xSignifier & 0x8000000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000058B90BFBE8E7A >> 128;
      if (xSignifier & 0x4000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000002C5C85FDF473C >> 128;
      if (xSignifier & 0x2000000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000162E42FEFA39D >> 128;
      if (xSignifier & 0x1000000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000B17217F7D1CE >> 128;
      if (xSignifier & 0x800000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000058B90BFBE8E6 >> 128;
      if (xSignifier & 0x400000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000002C5C85FDF472 >> 128;
      if (xSignifier & 0x200000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000162E42FEFA38 >> 128;
      if (xSignifier & 0x100000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000B17217F7D1B >> 128;
      if (xSignifier & 0x80000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000058B90BFBE8D >> 128;
      if (xSignifier & 0x40000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000002C5C85FDF46 >> 128;
      if (xSignifier & 0x20000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000162E42FEFA2 >> 128;
      if (xSignifier & 0x10000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000B17217F7D0 >> 128;
      if (xSignifier & 0x8000000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000058B90BFBE7 >> 128;
      if (xSignifier & 0x4000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000002C5C85FDF3 >> 128;
      if (xSignifier & 0x2000000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000162E42FEF9 >> 128;
      if (xSignifier & 0x1000000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000B17217F7C >> 128;
      if (xSignifier & 0x800000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000058B90BFBD >> 128;
      if (xSignifier & 0x400000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000002C5C85FDE >> 128;
      if (xSignifier & 0x200000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000162E42FEE >> 128;
      if (xSignifier & 0x100000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000B17217F6 >> 128;
      if (xSignifier & 0x80000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000058B90BFA >> 128;
      if (xSignifier & 0x40000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000002C5C85FC >> 128;
      if (xSignifier & 0x20000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000162E42FD >> 128;
      if (xSignifier & 0x10000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000B17217E >> 128;
      if (xSignifier & 0x8000000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000058B90BE >> 128;
      if (xSignifier & 0x4000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000002C5C85E >> 128;
      if (xSignifier & 0x2000000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000162E42E >> 128;
      if (xSignifier & 0x1000000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000B17216 >> 128;
      if (xSignifier & 0x800000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000058B90A >> 128;
      if (xSignifier & 0x400000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000002C5C84 >> 128;
      if (xSignifier & 0x200000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000162E41 >> 128;
      if (xSignifier & 0x100000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000000B1720 >> 128;
      if (xSignifier & 0x80000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000058B8F >> 128;
      if (xSignifier & 0x40000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000002C5C7 >> 128;
      if (xSignifier & 0x20000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000000162E3 >> 128;
      if (xSignifier & 0x10000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000000B171 >> 128;
      if (xSignifier & 0x8000 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000000058B8 >> 128;
      if (xSignifier & 0x4000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000002C5B >> 128;
      if (xSignifier & 0x2000 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000000162D >> 128;
      if (xSignifier & 0x1000 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000B16 >> 128;
      if (xSignifier & 0x800 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000000058A >> 128;
      if (xSignifier & 0x400 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000000002C4 >> 128;
      if (xSignifier & 0x200 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000161 >> 128;
      if (xSignifier & 0x100 > 0) resultSignifier = resultSignifier * 0x1000000000000000000000000000000B0 >> 128;
      if (xSignifier & 0x80 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000057 >> 128;
      if (xSignifier & 0x40 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000000002B >> 128;
      if (xSignifier & 0x20 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000015 >> 128;
      if (xSignifier & 0x10 > 0) resultSignifier = resultSignifier * 0x10000000000000000000000000000000A >> 128;
      if (xSignifier & 0x8 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000004 >> 128;
      if (xSignifier & 0x4 > 0) resultSignifier = resultSignifier * 0x100000000000000000000000000000001 >> 128;

      if (!xNegative) {
        resultSignifier = resultSignifier >> 15 & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        resultExponent += 0x3FFF;
      } else if (resultExponent <= 0x3FFE) {
        resultSignifier = resultSignifier >> 15 & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
        resultExponent = 0x3FFF - resultExponent;
      } else {
        resultSignifier = resultSignifier >> resultExponent - 16367;
        resultExponent = 0;
      }

      return bytes16 (uint128 (resultExponent << 112 | resultSignifier));
    }
  }

  /**
   * Calculate e^x.
   *
   * @param x quadruple precision number
   * @return quadruple precision number
   */
  function exp (bytes16 x) internal pure returns (bytes16) {
    return pow_2 (mul (x, 0x3FFF71547652B82FE1777D0FFDA0D23A));
  }

  /**
   * Get index of the most significant non-zero bit in binary representation of
   * x.  Reverts if x is zero.
   *
   * @return index of the most significant non-zero bit in binary representation
   *         of x
   */
  function msb (uint256 x) private pure returns (uint256) {
    require (x > 0);

    uint256 result = 0;

    if (x >= 0x100000000000000000000000000000000) { x >>= 128; result += 128; }
    if (x >= 0x10000000000000000) { x >>= 64; result += 64; }
    if (x >= 0x100000000) { x >>= 32; result += 32; }
    if (x >= 0x10000) { x >>= 16; result += 16; }
    if (x >= 0x100) { x >>= 8; result += 8; }
    if (x >= 0x10) { x >>= 4; result += 4; }
    if (x >= 0x4) { x >>= 2; result += 2; }
    if (x >= 0x2) result += 1; // No need to shift x anymore

    return result;
  }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CEO_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EGGS_TO_HATCH_1Dragon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amount_until_full","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"attackBoss","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"bossAlive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bossHunger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyIceDrangon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyPremiumDrangon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyUltraDrangon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buy_cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"contractBalance","type":"uint256"}],"name":"calculateEggBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eth","type":"uint256"}],"name":"calculateEggBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eggs","type":"uint256"}],"name":"calculateEggSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eggs","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"}],"name":"calculateEggSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"calculatePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rt","type":"uint256"},{"internalType":"uint256","name":"rs","type":"uint256"},{"internalType":"uint256","name":"bs","type":"uint256"}],"name":"calculateTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canSell_canHatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"community_manager1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBossAlive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBossHunger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBossHungerLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"getEggsSinceLastHatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEggsToHatchDragon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastSellTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyEggs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyIceDragon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyPremiumDragons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyUltraDragon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextSellTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ref","type":"address"}],"name":"hatchEggs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"iceDragons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBoss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastHatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketEggs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"z","type":"uint256"}],"name":"mulDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"premiumDragons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seedMarket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sellEggs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sell_cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bossHunger","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"spawnBoss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ultraDragon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userReferralEggs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052620151806000556127106001556113886002556000600360006101000a81548160ff02191690831515021790555060056004556138406005556138406006556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601355600060145573dbddeee008cd513573fa67fdb85bb424f22e2853601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100e457600080fd5b5033600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506136bc806101356000396000f3fe60806040526004361061036b5760003560e01c8063823f81b8116101c6578063c5292ed9116100f7578063d56fc03711610095578063ee688e1c1161006f578063ee688e1c14610f0b578063f6c10b5f14610f36578063f9f25ff614610f77578063fd41766914610fa25761036b565b8063d56fc03714610e50578063d7c8843b14610e7b578063e543f12e14610ee05761036b565b8063cc062b58116100d1578063cc062b5814610dd9578063d24c944514610df0578063d4f24c5b14610e1b578063d55d1fed14610e255761036b565b8063c5292ed914610d28578063c660127014610d81578063c8372a4614610dac5761036b565b80639ca423b311610164578063b85466941161013e578063b854669414610c3c578063be4a6fda14610c81578063c1adf7bc14610cac578063c1e19a1814610d115761036b565b80639ca423b314610b33578063aa9a091214610bae578063b0bc85de14610c115761036b565b80638e316327116101a05780638e31632714610a4a5780639146b38314610a9957806394e23d3614610aa357806394fd152c14610b085761036b565b8063823f81b8146109ea57806387d79f8a14610a155780638947168614610a1f5761036b565b8063333f57b3116102a05780635f496ff21161023e5780636f4ce428116102185780636f4ce428146108e057806370bdda04146109455780637292abec1461099457806377463b50146109bf5761036b565b80635f496ff21461085d578063633a0e601461088857806367bbf83e146108b35761036b565b80633d18b9121161027a5780633d18b912146107515780633ec862a81461077c57806343ce7422146107cd578063467ece79146107f85761036b565b8063333f57b3146107055780633955f0fe146107305780633c5f07cb146107475761036b565b8063228cb7331161030d578063252d723a116102e7578063252d723a146105f157806326fd84221461061c57806328cf540e146106755780632e9392bb146106da5761036b565b8063228cb733146104fe578063229824c41461052957806324dad8101461058c5761036b565b8063186601ca11610349578063186601ca146104095780631b7ccaac146104365780631f1765c21461049b5780632133e3b9146104a55761036b565b806304bec17d146103705780630a0f81681461039d57806312065fe0146103de575b600080fd5b34801561037c57600080fd5b50610385610fcd565b60405180821515815260200191505060405180910390f35b3480156103a957600080fd5b506103b2610fe4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ea57600080fd5b506103f361100a565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b5061041e611012565b60405180821515815260200191505060405180910390f35b34801561044257600080fd5b506104856004803603602081101561045957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611025565b6040518082815260200191505060405180910390f35b6104a361103d565b005b3480156104b157600080fd5b506104e8600480360360408110156104c857600080fd5b81019080803590602001909291908035906020019092919050505061113a565b6040518082815260200191505060405180910390f35b34801561050a57600080fd5b50610513611158565b6040518082815260200191505060405180910390f35b34801561053557600080fd5b506105766004803603606081101561054c57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061115e565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105db600480360360208110156105af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111b1565b6040518082815260200191505060405180910390f35b3480156105fd57600080fd5b506106066111c9565b6040518082815260200191505060405180910390f35b34801561062857600080fd5b5061065f6004803603604081101561063f57600080fd5b81019080803590602001909291908035906020019092919050505061121d565b6040518082815260200191505060405180910390f35b34801561068157600080fd5b506106c46004803603602081101561069857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611234565b6040518082815260200191505060405180910390f35b3480156106e657600080fd5b506106ef61124c565b6040518082815260200191505060405180910390f35b34801561071157600080fd5b5061071a611252565b6040518082815260200191505060405180910390f35b34801561073c57600080fd5b50610745611258565b005b61074f61150b565b005b34801561075d57600080fd5b506107666115c0565b6040518082815260200191505060405180910390f35b34801561078857600080fd5b506107cb6004803603602081101561079f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ca565b005b3480156107d957600080fd5b506107e261197a565b6040518082815260200191505060405180910390f35b34801561080457600080fd5b506108476004803603602081101561081b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a51565b6040518082815260200191505060405180910390f35b34801561086957600080fd5b50610872611a69565b6040518082815260200191505060405180910390f35b34801561089457600080fd5b5061089d611ab4565b6040518082815260200191505060405180910390f35b3480156108bf57600080fd5b506108c8611afb565b60405180821515815260200191505060405180910390f35b3480156108ec57600080fd5b5061092f6004803603602081101561090357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b0e565b6040518082815260200191505060405180910390f35b34801561095157600080fd5b5061097e6004803603602081101561096857600080fd5b8101908080359060200190929190505050611b26565b6040518082815260200191505060405180910390f35b3480156109a057600080fd5b506109a9611b39565b6040518082815260200191505060405180910390f35b3480156109cb57600080fd5b506109d4611b80565b6040518082815260200191505060405180910390f35b3480156109f657600080fd5b506109ff611bea565b6040518082815260200191505060405180910390f35b610a1d611bf4565b005b348015610a2b57600080fd5b50610a34611cf1565b6040518082815260200191505060405180910390f35b348015610a5657600080fd5b50610a8360048036036020811015610a6d57600080fd5b8101908080359060200190929190505050611d38565b6040518082815260200191505060405180910390f35b610aa1611d4b565b005b348015610aaf57600080fd5b50610af260048036036020811015610ac657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e48565b6040518082815260200191505060405180910390f35b348015610b1457600080fd5b50610b1d611e60565b6040518082815260200191505060405180910390f35b348015610b3f57600080fd5b50610b8260048036036020811015610b5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e66565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bba57600080fd5b50610bfb60048036036060811015610bd157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611e99565b6040518082815260200191505060405180910390f35b348015610c1d57600080fd5b50610c26611ed7565b6040518082815260200191505060405180910390f35b348015610c4857600080fd5b50610c7f60048036036040811015610c5f57600080fd5b810190808035906020019092919080359060200190929190505050611f2b565b005b348015610c8d57600080fd5b50610c9661200e565b6040518082815260200191505060405180910390f35b348015610cb857600080fd5b50610cfb60048036036020811015610ccf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612014565b6040518082815260200191505060405180910390f35b348015610d1d57600080fd5b50610d2661202c565b005b348015610d3457600080fd5b50610d6b60048036036040811015610d4b57600080fd5b8101908080359060200190929190803590602001909291905050506120d6565b6040518082815260200191505060405180910390f35b348015610d8d57600080fd5b50610d966120ed565b6040518082815260200191505060405180910390f35b348015610db857600080fd5b50610dc1612134565b60405180821515815260200191505060405180910390f35b348015610de557600080fd5b50610dee612147565b005b348015610dfc57600080fd5b50610e05612164565b6040518082815260200191505060405180910390f35b610e2361216a565b005b348015610e3157600080fd5b50610e3a612327565b6040518082815260200191505060405180910390f35b348015610e5c57600080fd5b50610e6561232d565b6040518082815260200191505060405180910390f35b348015610e8757600080fd5b50610eca60048036036020811015610e9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612333565b6040518082815260200191505060405180910390f35b348015610eec57600080fd5b50610ef561248d565b6040518082815260200191505060405180910390f35b348015610f1757600080fd5b50610f206124d8565b6040518082815260200191505060405180910390f35b348015610f4257600080fd5b50610f4b6124de565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f8357600080fd5b50610f8c612504565b6040518082815260200191505060405180910390f35b348015610fae57600080fd5b50610fb761250e565b6040518082815260200191505060405180910390f35b6000601160019054906101000a900460ff16905090565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600047905090565b600360009054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b600360009054906101000a900460ff1661105657600080fd5b674563918244f4000034111561106b57600080fd5b6000611078346001612555565b905042611083611a69565b11156110a6576110a38161109e836110996111c9565b61113a565b612774565b90505b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000611150611149848461278b565b60646127c2565b905092915050565b60145481565b60006111a861116f6001548461278b565b6111a360025461119e6111986111876001548a61278b565b6111936002548c61278b565b6127db565b896127c2565b6127db565b6127c2565b90509392505050565b600a6020528060005260406000206000915090505481565b6000806111dd6111d7611a69565b42612774565b905060006111ef826064600554611e99565b90506111f9611a69565b421061120a5760009250505061121a565b61121560328261113a565b925050505b90565b600061122c8383600f5461115e565b905092915050565b60076020528060005260406000206000915090505481565b600f5481565b60105481565b600360009054906101000a900460ff166112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f47414d4520484153204e4f54205354415254454400000000000000000000000081525060200191505060405180910390fd5b60011515601160009054906101000a900460ff161515146112fa57600080fd5b63604c710042101561130b57600080fd5b600061132061131861197a565b6000546127c2565b9050600061132d82611d38565b9050600061133d8260045461113a565b90506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113d4600f54846127db565b600f81905550600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611442573d6000803e3d6000fd5b5061144d8282612774565b91504261145861248d565b111561147b57611478826114738461146e611ed7565b61113a565b612774565b91505b42600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611505573d6000803e3d6000fd5b50505050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461156557600080fd5b6000600f541461157457600080fd5b670de0b6b3a7640000341461158857600080fd5b6001600360006101000a81548160ff021916908315150217905550640202fbf000600f81905550426010819055506115be6127f7565b565b6000601454905090565b600360009054906101000a900460ff166115e357600080fd5b60011515601160009054906101000a900460ff1615151461160357600080fd5b63604c710042101561161457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116c65780600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60006116d061197a565b905060006116e0826000546127c2565b90506116ee826000546127c2565b9050611739600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826127db565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118b7600a6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118b284600a6127c2565b6127db565b600a6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061196f600f5461196a83600a6127c2565b6127db565b600f81905550505050565b600060011515601160019054906101000a900460ff16151514156119fa576119f36119ec600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e733612333565b6127db565b60026127c2565b9050611a4e565b611a4b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4633612333565b6127db565b90505b90565b600c6020528060005260406000206000915090505481565b6000600554600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401905090565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601160009054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b6000611b32824761121d565b9050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600080611b8f42601054612774565b9050611b9d81610e106127c2565b905060011515601160019054906101000a900460ff1615151415611bd857611bd0611bc982600a61278b565b60026127c2565b915050611be7565b611be381600a61278b565b9150505b90565b6000601354905090565b600360009054906101000a900460ff16611c0d57600080fd5b674563918244f40000341115611c2257600080fd5b6000611c2f346008612555565b905042611c3a611a69565b1115611c5d57611c5a81611c5583611c506111c9565b61113a565b612774565b90505b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000611d4482476120d6565b9050919050565b600360009054906101000a900460ff16611d6457600080fd5b674563918244f40000341115611d7957600080fd5b6000611d86346014612555565b905042611d91611a69565b1115611db457611db181611dac83611da76111c9565b61113a565b612774565b90505b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555042600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60086020528060005260406000206000915090505481565b60065481565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ece611ec9611ebb611ead87612902565b611eb687612902565b612980565b611ec485612902565b612e15565b6132d0565b90509392505050565b600080611eeb611ee561248d565b42612774565b90506000611efd826064600654611e99565b9050611f0761248d565b4210611f1857600092505050611f28565b611f2360328261113a565b925050505b90565b60001515601160019054906101000a900460ff16151514611f4b57600080fd5b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa557600080fd5b60008111611fb257600080fd5b60008211611fbf57600080fd5b6000601160006101000a81548160ff0219169083151502179055508160128190555081601381905550806014819055506001601160016101000a81548160ff0219169083151502179055505050565b60135481565b600e6020528060005260406000206000915090505481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461208657600080fd5b6000601160016101000a81548160ff0219169083151502179055506000601281905550600060138190555060006014819055506001601160006101000a81548160ff021916908315150217905550565b60006120e583600f548461115e565b905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601160019054906101000a900460ff1681565b6001601160006101000a81548160ff021916908315150217905550565b60055481565b60011515601160019054906101000a900460ff1615151461218a57600080fd5b60006013541161219957600080fd5b600034116121a657600080fd5b674563918244f400003411156121bb57600080fd5b60003490506013548111156122525760006121d882601354612774565b90506121e48282612774565b91503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561222c573d6000803e3d6000fd5b5060006013819055506000601160016101000a81548160ff021916908315150217905550505b6001601160006101000a81548160ff0219169083151502179055506122756133ce565b6000612282826014612555565b90506122908160145461113a565b8101600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600060135411156122fc576122f560135483612774565b6013819055505b60006013541415612323576000601160016101000a81548160ff0219169083151502179055505b5050565b60005481565b60125481565b60008061238a60005461238542600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612774565b61358c565b905060006123d8600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a61278b565b905061242d612427600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601961278b565b826127db565b905061247881600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127db565b9050612484828261278b565b92505050919050565b6000600654600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401905090565b60045481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601254905090565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000600360009054906101000a900460ff1661257057600080fd5b63604c710042101561258157600080fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561269e5742600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006544203600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506005544203600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008347116126c1576126ba6126b4854761121d565b846127c2565b90506126e0565b6126dd6126d7856126d24788612774565b61121d565b846127c2565b90505b600081116126ed57600080fd5b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127358660045461113a565b9081150290604051600060405180830381858888f19350505050158015612760573d6000803e3d6000fd5b5061276a336115ca565b8091505092915050565b60008282111561278057fe5b818303905092915050565b60008083141561279e57600090506127bc565b60008284029050828482816127af57fe5b04146127b757fe5b809150505b92915050565b6000808284816127ce57fe5b0490508091505092915050565b6000808284019050838110156127ed57fe5b8091505092915050565b600360009054906101000a900460ff1661281057600080fd5b640202fbf000600f541461282357600080fd5b63019b540060096000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555063604c7100600c6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60008082141561291857600060801b905061297b565b60008290506000612928826135a5565b90506070811015612941578060700382901b9150612955565b6070811115612954576070810382901c91505b5b607081613fff01901b6dffffffffffffffffffffffffffff83161791508160801b925050505b919050565b600080617fff60708560801c6fffffffffffffffffffffffffffffffff16901c166fffffffffffffffffffffffffffffffff1690506000617fff60708560801c6fffffffffffffffffffffffffffffffff16901c166fffffffffffffffffffffffffffffffff169050617fff821415612b1757617fff811415612aa557836fffffffffffffffffffffffffffffffff1916856fffffffffffffffffffffffffffffffff19161415612a4c576f8000000000000000000000000000000060801b8416851892505050612e0f565b6f8000000000000000000000000000000060801b8486186fffffffffffffffffffffffffffffffff19161415612a885783851792505050612e0f565b6f7fff800000000000000000000000000060801b92505050612e0f565b600060801b6f7fffffffffffffffffffffffffffffff60801b85166fffffffffffffffffffffffffffffffff19161415612af6576f7fff800000000000000000000000000060801b92505050612e0f565b6f8000000000000000000000000000000060801b8416851892505050612e0f565b617fff811415612b9357600060801b6f7fffffffffffffffffffffffffffffff60801b86166fffffffffffffffffffffffffffffffff19161415612b72576f7fff800000000000000000000000000060801b92505050612e0f565b6f8000000000000000000000000000000060801b8516841892505050612e0f565b60006dffffffffffffffffffffffffffff8660801c166fffffffffffffffffffffffffffffffff1690506000831415612bcf5760019250612be4565b6e010000000000000000000000000000811790505b60006dffffffffffffffffffffffffffff8660801c166fffffffffffffffffffffffffffffffff1690506000831415612c205760019250612c35565b6e010000000000000000000000000000811790505b80820291506000821415612ca257600060801b6f8000000000000000000000000000000060801b878918166fffffffffffffffffffffffffffffffff191611612c8257600060801b612c97565b6f8000000000000000000000000000000060801b5b945050505050612e0f565b828401935060007c0200000000000000000000000000000000000000000000000000000000831015612d09577c0100000000000000000000000000000000000000000000000000000000831015612d0157612cfc836135a5565b612d04565b60e05b612d0c565b60e15b90506140708186011015612d27576000945060009250612dcf565b6140e08186011015612d6b57614070851015612d4c57846140700383901c9250612d62565b614070851115612d6157614070850383901b92505b5b60009450612dce565b61c0dd8186011115612d8557617fff945060009250612dcd565b6070811115612d9c576070810383901c9250612db0565b6070811015612daf578060700383901b92505b5b6dffffffffffffffffffffffffffff831692506140df8186010394505b5b5b82607086901b6f8000000000000000000000000000000060801b898b181660801c6fffffffffffffffffffffffffffffffff16171760801b955050505050505b92915050565b600080617fff60708560801c6fffffffffffffffffffffffffffffffff16901c166fffffffffffffffffffffffffffffffff1690506000617fff60708560801c6fffffffffffffffffffffffffffffffff16901c166fffffffffffffffffffffffffffffffff169050617fff821415612ed057617fff811415612eaf576f7fff800000000000000000000000000060801b925050506132ca565b6f8000000000000000000000000000000060801b84168518925050506132ca565b617fff811415612f4f57600060801b6dffffffffffffffffffffffffffff60801b85166fffffffffffffffffffffffffffffffff191614612f28576f7fff800000000000000000000000000060801b925050506132ca565b6f8000000000000000000000000000000060801b84861816600060801b17925050506132ca565b600060801b6f7fffffffffffffffffffffffffffffff60801b85166fffffffffffffffffffffffffffffffff1916141561300a57600060801b6f7fffffffffffffffffffffffffffffff60801b86166fffffffffffffffffffffffffffffffff19161415612fd4576f7fff800000000000000000000000000060801b925050506132ca565b6f8000000000000000000000000000000060801b848618166f7fff000000000000000000000000000060801b17925050506132ca565b60006dffffffffffffffffffffffffffff8560801c166fffffffffffffffffffffffffffffffff1690506000821415613046576001915061305b565b6e010000000000000000000000000000811790505b60006dffffffffffffffffffffffffffff8760801c166fffffffffffffffffffffffffffffffff16905060008414156130bf57600081146130ba5760006130a1826135a5565b60e20390508082901b9150600194506072810384019350505b6130d8565b60726e0100000000000000000000000000008217901b90505b8181816130e157fe5b049050600081141561314c57600060801b6f8000000000000000000000000000000060801b878918166fffffffffffffffffffffffffffffffff19161161312c57600060801b613141565b6f8000000000000000000000000000000060801b5b9450505050506132ca565b6d100000000000000000000000000081101561316457fe5b60006e0800000000000000000000000000008210156131c5576e0400000000000000000000000000008210156131ba576e0200000000000000000000000000008210156131b25760706131b5565b60715b6131bd565b60725b60ff166131cf565b6131ce826135a5565b5b9050614071840181860111156131ed57617fff94506000915061328a565b83613ffc828701011015613208576000945060009150613289565b83613f8c8287010110156132565783613ffc860111156132335783613ffc86010382901b915061324d565b83613ffc8601101561324c57613ffc8585030382901c91505b5b60009450613288565b6070811115613269576070810382901c91505b6dffffffffffffffffffffffffffff8216915083613f8d828701010394505b5b5b81607086901b6f8000000000000000000000000000000060801b898b181660801c6fffffffffffffffffffffffffffffffff16171760801b955050505050505b92915050565b600080617fff60708460801c6fffffffffffffffffffffffffffffffff16901c166fffffffffffffffffffffffffffffffff169050613fff8110156133195760009150506133c9565b6f800000000000000000000000000000008360801c6fffffffffffffffffffffffffffffffff161061334a57600080fd5b6140fe81111561335957600080fd5b60006e0100000000000000000000000000006dffffffffffffffffffffffffffff8560801c6fffffffffffffffffffffffffffffffff161617905061406f8210156133ad578161406f0381901c90506133c3565b61406f8211156133c25761406f820381901b90505b5b80925050505b919050565b600360009054906101000a900460ff166133e757600080fd5b60011515601160009054906101000a900460ff1615151461340757600080fd5b600061342661341e61341761197a565b600261278b565b6000546127c2565b9050600061343382611d38565b905060006134438260045461113a565b90506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613536573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc61355b8484612774565b9081150290604051600060405180830381858888f19350505050158015613586573d6000803e3d6000fd5b50505050565b600081831061359b578161359d565b825b905092915050565b60008082116135b357600080fd5b600070010000000000000000000000000000000083106135db57608083901c92506080810190505b6801000000000000000083106135f957604083901c92506040810190505b640100000000831061361357602083901c92506020810190505b62010000831061362b57601083901c92506010810190505b610100831061364257600883901c92506008810190505b6010831061365857600483901c92506004810190505b6004831061366e57600283901c92506002810190505b6002831061367d576001810190505b8091505091905056fea2646970667358221220c0f83e407d87fbfc54d38b71fc5eabe6642b8ee46991d119a2cd274c736a4c7f64736f6c63430007060033

Deployed ByteCode Sourcemap

370:16794:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6017:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;562:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9461:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;520:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;897:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11585:534;;;:::i;:::-;;10394:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1479:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15900:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;957:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6992:446;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16472:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;787:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1239:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1271:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14165:989;;;;;;;;;;;;;:::i;:::-;;6120:317;;;:::i;:::-;;5923:82;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13155:998;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8458:390;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1074:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6853:115;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9813:107;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1320:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1132:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16649:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9572:113;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9938:444;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5810:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12131:498;;;:::i;:::-;;6491:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16159:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12641:502;;;:::i;:::-;;840:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;714:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1016:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16803:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7456:452;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2931:864;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1436:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1183:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3880:239;;;;;;;;;;;;;:::i;:::-;;16310:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9697:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1365:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2833:74;;;;;;;;;;;;;:::i;:::-;;647:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4143:1547;;;:::i;:::-;;409:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1404:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8860:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6605:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;608:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1994:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5708:90;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6741:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6017:85;6061:4;6085:9;;;;;;;;;;;6078:16;;6017:85;:::o;562:33::-;;;;;;;;;;;;;:::o;9461:99::-;9504:7;9531:21;9524:28;;9461:99;:::o;520:29::-;;;;;;;;;;;;;:::o;897:47::-;;;;;;;;;;;;;;;;;:::o;11585:534::-;11648:9;;;;;;;;;;;11640:18;;;;;;11690:7;11677:9;:20;;11669:29;;;;;;11758:15;11776:29;11792:9;11803:1;11776:15;:29::i;:::-;11758:47;;11859:15;11840:16;:14;:16::i;:::-;:34;11836:150;;;11910:64;11923:7;11932:41;11952:7;11961:11;:9;:11::i;:::-;11932:19;:41::i;:::-;11910:12;:64::i;:::-;11900:74;;11836:150;12046:7;12016:14;:26;12031:10;12016:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;12096:15;12074:7;:19;12082:10;12074:19;;;;;;;;;;;;;;;:37;;;;11585:534;:::o;10394:171::-;10479:7;10506:51;10519:32;10532:6;10540:10;10519:12;:32::i;:::-;10553:3;10506:12;:51::i;:::-;10499:58;;10394:171;;;;:::o;1479:25::-;;;;:::o;15900:247::-;15979:7;16005:134;16018:21;16031:3;;16036:2;16018:12;:21::i;:::-;16041:97;16054:4;;16060:77;16073:59;16086:21;16099:3;;16104:2;16086:12;:21::i;:::-;16109:22;16122:4;;16128:2;16109:12;:22::i;:::-;16073:12;:59::i;:::-;16134:2;16060:12;:77::i;:::-;16041:12;:97::i;:::-;16005:12;:134::i;:::-;15998:141;;15900:247;;;;;:::o;957:52::-;;;;;;;;;;;;;;;;;:::o;6992:446::-;7033:7;7053:30;7086:47;7099:16;:14;:16::i;:::-;7117:15;7086:12;:47::i;:::-;7053:80;;7144:30;7177:49;7184:22;7208:3;7213:12;;7177:6;:49::i;:::-;7144:82;;7270:16;:14;:16::i;:::-;7251:15;:35;7247:184;;7320:1;7313:8;;;;;;7247:184;7372:47;7392:2;7396:22;7372:19;:47::i;:::-;7365:54;;;;6992:446;;:::o;16472:165::-;16555:7;16581:48;16596:3;16601:15;16618:10;;16581:14;:48::i;:::-;16574:55;;16472:165;;;;:::o;787:46::-;;;;;;;;;;;;;;;;;:::o;1239:25::-;;;;:::o;1271:30::-;;;;:::o;14165:989::-;14211:9;;;;;;;;;;;14203:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14284:4;14264:24;;:16;;;;;;;;;;;:24;;;14256:33;;;;;;14327:10;14308:15;:29;;14300:38;;;;;;14394:15;14412:48;14425:11;:9;:11::i;:::-;14438:21;;14412:12;:48::i;:::-;14394:66;;14471:16;14490:25;14507:7;14490:16;:25::i;:::-;14471:44;;14526:11;14540:38;14560:8;14570:7;;14540:19;:38::i;:::-;14526:52;;14630:1;14599:16;:28;14616:10;14599:28;;;;;;;;;;;;;;;:32;;;;14666:15;14642:9;:21;14652:10;14642:21;;;;;;;;;;;;;;;:39;;;;14715:33;14728:10;;14740:7;14715:12;:33::i;:::-;14702:10;:46;;;;14759:10;;;;;;;;;;;:19;;:24;14779:3;14759:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14815:27;14828:8;14838:3;14815:12;:27::i;:::-;14804:38;;14897:15;14877:17;:15;:17::i;:::-;:35;14873:155;;;14948:67;14961:8;14971:43;14991:8;15001:12;:10;:12::i;:::-;14971:19;:43::i;:::-;14948:12;:67::i;:::-;14937:78;;14873:155;15081:15;15058:8;:20;15067:10;15058:20;;;;;;;;;;;;;;;:38;;;;15117:10;:19;;:29;15137:8;15117:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14165:989;;;:::o;6120:317::-;6190:10;;;;;;;;;;;6176:24;;:10;:24;;;6168:33;;;;;;6234:1;6220:10;;:15;6212:24;;;;;;6268:7;6255:9;:20;6247:29;;;;;;6309:4;6297:9;;:16;;;;;;;;;;;;;;;;;;6337:10;6324;:23;;;;6376:15;6358;:33;;;;6412:17;:15;:17::i;:::-;6120:317::o;5923:82::-;5964:7;5991:6;;5984:13;;5923:82;:::o;13155:998::-;13213:9;;;;;;;;;;;13205:18;;;;;;13262:4;13242:24;;:16;;;;;;;;;;;:24;;;13234:33;;;;;;13305:10;13286:15;:29;;13278:38;;;;;;13373:10;13366:17;;:3;:17;;;13362:77;;13424:3;13400:9;:21;13410:10;13400:21;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;13362:77;13459:20;13482:11;:9;:11::i;:::-;13459:34;;13504:17;13524:49;13537:12;13551:21;;13524:12;:49::i;:::-;13504:69;;13596:49;13609:12;13623:21;;13596:12;:49::i;:::-;13584:61;;13685:51;13698:14;:26;13713:10;13698:26;;;;;;;;;;;;;;;;13726:9;13685:12;:51::i;:::-;13656:14;:26;13671:10;13656:26;;;;;;;;;;;;;;;:80;;;;13771:15;13747:9;:21;13757:10;13747:21;;;;;;;;;;;;;;;:39;;;;13838:1;13807:16;:28;13824:10;13807:28;;;;;;;;;;;;;;;:32;;;;13932:85;13945:16;:39;13962:9;:21;13972:10;13962:21;;;;;;;;;;;;;;;;;;;;;;;;;13945:39;;;;;;;;;;;;;;;;13986:30;13999:12;14013:2;13986:12;:30::i;:::-;13932:12;:85::i;:::-;13890:16;:39;13907:9;:21;13917:10;13907:21;;;;;;;;;;;;;;;;;;;;;;;;;13890:39;;;;;;;;;;;;;;;:127;;;;14092:53;14105:10;;14117:27;14130:9;14141:2;14117:12;:27::i;:::-;14092:12;:53::i;:::-;14079:10;:66;;;;13155:998;;;:::o;8458:390::-;8499:7;8536:4;8523:17;;:9;;;;;;;;;;;:17;;;8519:312;;;8564:94;8577:77;8590:16;:28;8607:10;8590:28;;;;;;;;;;;;;;;;8620:33;8642:10;8620:21;:33::i;:::-;8577:12;:77::i;:::-;8656:1;8564:12;:94::i;:::-;8557:101;;;;8519:312;8742:77;8755:16;:28;8772:10;8755:28;;;;;;;;;;;;;;;;8785:33;8807:10;8785:21;:33::i;:::-;8742:12;:77::i;:::-;8735:84;;8458:390;;:::o;1074:45::-;;;;;;;;;;;;;;;;;:::o;6853:115::-;6899:7;6948:12;;6926:7;:19;6934:10;6926:19;;;;;;;;;;;;;;;;:34;6919:41;;6853:115;:::o;9813:107::-;9862:7;9889:11;:23;9901:10;9889:23;;;;;;;;;;;;;;;;9882:30;;9813:107;:::o;1320:38::-;;;;;;;;;;;;;:::o;1132:44::-;;;;;;;;;;;;;;;;;:::o;16649:136::-;16707:7;16734:43;16750:3;16755:21;16734:15;:43::i;:::-;16727:50;;16649:136;;;:::o;9572:113::-;9624:7;9651:14;:26;9666:10;9651:26;;;;;;;;;;;;;;;;9644:33;;9572:113;:::o;9938:444::-;9991:7;10011:17;10031:46;10044:15;10061;;10031:12;:46::i;:::-;10011:66;;10101:29;10114:9;10125:4;10101:12;:29::i;:::-;10089:41;;10168:4;10155:17;;:9;;;;;;;;;;;:17;;;10151:214;;;10196:44;10209:27;10222:9;10233:2;10209:12;:27::i;:::-;10238:1;10196:12;:44::i;:::-;10189:51;;;;;10151:214;10326:27;10339:9;10350:2;10326:12;:27::i;:::-;10319:34;;;9938:444;;:::o;5810:101::-;5859:7;5886:17;;5879:24;;5810:101;:::o;12131:498::-;12190:9;;;;;;;;;;;12182:18;;;;;;12232:7;12219:9;:20;;12211:29;;;;;;12300:15;12318:29;12334:9;12345:1;12318:15;:29::i;:::-;12300:47;;12383:15;12364:16;:14;:16::i;:::-;:34;12360:150;;;12434:64;12447:7;12456:41;12476:7;12485:11;:9;:11::i;:::-;12456:19;:41::i;:::-;12434:12;:64::i;:::-;12424:74;;12360:150;12556:7;12530:10;:22;12541:10;12530:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;12606:15;12584:7;:19;12592:10;12584:19;;;;;;;;;;;;;;;:37;;;;12131:498;:::o;6491:102::-;6538:7;6565:8;:20;6574:10;6565:20;;;;;;;;;;;;;;;;6558:27;;6491:102;:::o;16159:139::-;16219:7;16245:45;16262:4;16268:21;16245:16;:45::i;:::-;16238:52;;16159:139;;;:::o;12641:502::-;12702:9;;;;;;;;;;;12694:18;;;;;;12744:7;12731:9;:20;;12723:29;;;;;;12812:15;12830:30;12846:9;12857:2;12830:15;:30::i;:::-;12812:48;;12896:15;12877:16;:14;:16::i;:::-;:34;12873:150;;;12947:64;12960:7;12969:41;12989:7;12998:11;:9;:11::i;:::-;12969:19;:41::i;:::-;12947:12;:64::i;:::-;12937:74;;12873:150;13070:7;13043:11;:23;13055:10;13043:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;13120:15;13098:7;:19;13106:10;13098:19;;;;;;;;;;;;;;;:37;;;;12641:502;:::o;840:50::-;;;;;;;;;;;;;;;;;:::o;714:38::-;;;;:::o;1016:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16803:346::-;16865:4;16896:245;16929:201;16961:116;16995:25;17018:1;16995:21;:25::i;:::-;17037;17060:1;17037:21;:25::i;:::-;16961:16;:116::i;:::-;17092:25;17115:1;17092:21;:25::i;:::-;16929:16;:201::i;:::-;16896:19;:245::i;:::-;16880:261;;16803:346;;;;;:::o;7456:452::-;7498:7;7518:31;7552:48;7565:17;:15;:17::i;:::-;7584:15;7552:12;:48::i;:::-;7518:82;;7611:30;7644:51;7651:23;7676:3;7681:13;;7644:6;:51::i;:::-;7611:84;;7739:17;:15;:17::i;:::-;7720:15;:36;7716:185;;7790:1;7783:8;;;;;;7716:185;7842:47;7862:2;7866:22;7842:19;:47::i;:::-;7835:54;;;;7456:452;;:::o;2931:864::-;3027:5;3014:18;;:9;;;;;;;;;;;:18;;;3006:27;;;;;;3121:10;;;;;;;;;;;3107:24;;:10;:24;;;3099:33;;;;;;3319:1;3309:7;:11;3301:20;;;;;;3418:1;3404:11;:15;3396:24;;;;;;3523:5;3504:16;;:24;;;;;;;;;;;;;;;;;;3674:11;3661:10;:24;;;;3716:11;3696:17;:31;;;;3747:7;3738:6;:16;;;;3783:4;3771:9;;:16;;;;;;;;;;;;;;;;;;2931:864;;:::o;1436:36::-;;;;:::o;1183:43::-;;;;;;;;;;;;;;;;;:::o;3880:239::-;3940:10;;;;;;;;;;;3926:24;;:10;:24;;;3918:33;;;;;;3984:5;3972:9;;:17;;;;;;;;;;;;;;;;;;4013:1;4000:10;:14;;;;4045:1;4025:17;:21;;;;4066:1;4057:6;:10;;;;4107:4;4088:16;;:23;;;;;;;;;;;;;;;;;;3880:239::o;16310:144::-;16383:7;16409:37;16424:4;16430:10;;16442:3;16409:14;:37::i;:::-;16402:44;;16310:144;;;;:::o;9697:104::-;9744:7;9771:10;:22;9782:10;9771:22;;;;;;;;;;;;;;;;9764:29;;9697:104;:::o;1365:32::-;;;;;;;;;;;;;:::o;2833:74::-;2895:4;2876:16;;:23;;;;;;;;;;;;;;;;;;2833:74::o;647:38::-;;;;:::o;4143:1547::-;4212:4;4199:17;;:9;;;;;;;;;;;:17;;;4191:26;;;;;;4256:1;4236:17;;:21;4228:30;;;;;;4289:1;4277:9;:13;4269:22;;;;;;4323:7;4310:9;:20;;4302:29;;;;;;4391:21;4415:9;4391:33;;4465:17;;4449:13;:33;4445:340;;;4499:21;4523:46;4536:13;4551:17;;4523:12;:46::i;:::-;4499:70;;4600:42;4613:13;4628;4600:12;:42::i;:::-;4584:58;;4657:10;:19;;:34;4677:13;4657:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4740:1;4720:17;:21;;;;4768:5;4756:9;;:17;;;;;;;;;;;;;;;;;;4445:340;;4824:4;4805:16;;:23;;;;;;;;;;;;;;;;;;5241:20;:18;:20::i;:::-;5292:15;5310:34;5326:13;5341:2;5310:15;:34::i;:::-;5292:52;;5393:36;5413:7;5422:6;;5393:19;:36::i;:::-;5383:7;:46;5355:11;:23;5367:10;5355:23;;;;;;;;;;;;;;;;:75;;;;;;;;;;;5485:1;5465:17;;:21;5461:120;;;5523:46;5536:17;;5555:13;5523:12;:46::i;:::-;5503:17;:66;;;;5461:120;5626:1;5605:17;;:22;5601:72;;;5656:5;5644:9;;:17;;;;;;;;;;;;;;;;;;5601:72;4143:1547;;:::o;409:44::-;;;;:::o;1404:25::-;;;;:::o;8860:472::-;8925:7;8944:21;8968:73;8972:21;;8995:45;9008:15;9025:9;:14;9035:3;9025:14;;;;;;;;;;;;;;;;8995:12;:45::i;:::-;8968:3;:73::i;:::-;8944:97;;9054:19;9076:33;9089:10;:15;9100:3;9089:15;;;;;;;;;;;;;;;;9106:2;9076:12;:33::i;:::-;9054:55;;9134:61;9147:34;9160:11;:16;9172:3;9160:16;;;;;;;;;;;;;;;;9178:2;9147:12;:34::i;:::-;9183:11;9134:12;:61::i;:::-;9120:75;;9220:46;9233:11;9246:14;:19;9261:3;9246:19;;;;;;;;;;;;;;;;9220:12;:46::i;:::-;9206:60;;9284:40;9297:13;9312:11;9284:12;:40::i;:::-;9277:47;;;;8860:472;;;:::o;6605:118::-;6652:7;6702:13;;6679:8;:20;6688:10;6679:20;;;;;;;;;;;;;;;;:36;6672:43;;6605:118;:::o;608:26::-;;;;:::o;1994:78::-;;;;;;;;;;;;;:::o;5708:90::-;5753:7;5780:10;;5773:17;;5708:90;:::o;6741:100::-;6787:7;6814;:19;6822:10;6814:19;;;;;;;;;;;;;;;;6807:26;;6741:100;:::o;10577:990::-;10652:7;10680:9;;;;;;;;;;;10672:18;;;;;;10728:10;10709:15;:29;;10701:38;;;;;;10814:1;10789:9;:21;10799:10;10789:21;;;;;;;;;;;;;;;;:26;10785:234;;;10856:15;10832:9;:21;10842:10;10832:21;;;;;;;;;;;;;;;:39;;;;10927:13;;10909:15;:31;10886:8;:20;10895:10;10886:20;;;;;;;;;;;;;;;:54;;;;10995:12;;10977:15;:30;10955:7;:19;10963:10;10955:19;;;;;;;;;;;;;;;:52;;;;10785:234;11049:18;11131:3;11106:21;:28;11102:277;;11164:69;11177:43;11193:3;11198:21;11177:15;:43::i;:::-;11222:10;11164:12;:69::i;:::-;11151:82;;11102:277;;;11279:88;11292:62;11308:3;11313:40;11326:21;11349:3;11313:12;:40::i;:::-;11292:15;:62::i;:::-;11356:10;11279:12;:88::i;:::-;11266:101;;11102:277;11422:1;11409:10;:14;11401:23;;;;;;11445:10;;;;;;;;;;;:19;;:54;11465:33;11485:3;11490:7;;11465:19;:33::i;:::-;11445:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11510:21;11520:10;11510:9;:21::i;:::-;11549:10;11542:17;;;10577:990;;;;:::o;17932:113::-;17990:7;18018:1;18013;:6;;18006:14;;;;18038:1;18034;:5;18027:12;;17932:113;;;;:::o;17277:180::-;17335:7;17360:1;17355;:6;17351:37;;;17379:1;17372:8;;;;17351:37;17394:9;17410:1;17406;:5;17394:17;;17434:1;17429;17425;:5;;;;;;:10;17418:18;;;;17450:1;17443:8;;;17277:180;;;;;:::o;17544:270::-;17602:7;17693:9;17709:1;17705;:5;;;;;;17693:17;;17807:1;17800:8;;;17544:270;;;;:::o;18112:133::-;18170:7;18186:9;18202:1;18198;:5;18186:17;;18222:1;18217;:6;;18210:14;;;;18238:1;18231:8;;;18112:133;;;;:::o;8010:430::-;8065:9;;;;;;;;;;;8057:18;;;;;;8108:10;8094;;:24;8086:33;;;;;;8187:9;8150:11;:31;8162:18;;;;;;;;;;;8150:31;;;;;;;;;;;;;;;;:47;;;;;;;;;;;8384:10;8352:9;:29;8362:18;;;;;;;;;;;8352:29;;;;;;;;;;;;;;;:42;;;;8010:430::o;21102:405::-;21155:7;21180:1;21175;:6;21171:331;;;21199:1;21190:11;;21183:18;;;;21171:331;21222:14;21239:1;21222:18;;21251:11;21265:12;21270:6;21265:3;:12::i;:::-;21251:26;;21296:3;21290;:9;21286:84;;;21318:3;21312;:9;21301:20;;;;;21286:84;;;21345:3;21339;:9;21335:35;;;21367:3;21361;:9;21350:20;;;;;21335:35;21286:84;21447:3;21440;21432:5;:11;:18;;21399:30;21390:6;:39;:60;21381:69;;21486:6;21468:26;;21461:33;;;;21102:405;;;;:::o;39024:2405::-;39083:7;39099:17;39140:6;39134:3;39128:1;39119:11;;:18;;;;:27;39099:47;;;;39153:17;39194:6;39188:3;39182:1;39173:11;;:18;;;;:27;39153:47;;;;39226:6;39213:9;:19;39209:2215;;;39260:6;39247:9;:19;39243:361;;;39288:1;39283:6;;;:1;:6;;;;39279:164;;;39306:34;39302:38;;:1;:38;39298:1;:42;39291:49;;;;;;39279:164;39369:34;39360:43;;39364:1;39360;:5;:43;;;;39356:87;;;39416:1;39412;:5;39405:12;;;;;;39356:87;19071:34;39440:3;;39433:10;;;;;;39243:361;39516:1;39474:43;;39478:34;39474:38;;:1;:38;:43;;;;39470:124;;;19071:34;39526:3;;39519:10;;;;;;39470:124;39560:34;39556:38;;:1;:38;39552:1;:42;39545:49;;;;;;39209:2215;39634:6;39621:9;:19;39617:1807;;;39699:1;39657:43;;39661:34;39657:38;;:1;:38;:43;;;;39653:124;;;19071:34;39709:3;;39702:10;;;;;;39653:124;39743:34;39739:38;;:1;:38;39735:1;:42;39728:49;;;;;;39617:1807;39800:18;39835:30;39830:1;39821:11;;:44;39800:65;;;;39891:1;39878:9;:14;39874:92;;;39906:1;39894:13;;39874:92;;;39935:31;39921:45;;;;39874:92;39977:18;40012:30;40007:1;39998:11;;:44;39977:65;;;;40068:1;40055:9;:14;40051:92;;;40083:1;40071:13;;40051:92;;;40112:31;40098:45;;;;40051:92;40168:10;40154:24;;;;40205:1;40191:10;:15;40187:130;;;40271:1;40224:48;;40234:34;40224:44;;40229:1;40225;:5;40224:44;:48;;;;:93;;18622:34;40304:13;;40224:93;;;18727:34;40288:13;;40224:93;40217:100;;;;;;;;40187:130;40341:9;40328:22;;;;40361:11;40398:59;40384:10;:73;;:198;;40489:59;40475:10;:73;;:107;;40566:16;40571:10;40566:3;:16::i;:::-;40475:107;;;40551:3;40475:107;40384:198;;;40460:3;40384:198;40361:221;;40615:5;40609:3;40597:9;:15;:23;40593:689;;;40658:1;40646:13;;40683:1;40670:14;;40593:689;;;40722:5;40716:3;40704:9;:15;:23;40700:582;;;40769:5;40757:9;:17;40753:148;;;40810:9;40802:5;:17;40787:32;;;;;40753:148;;;40851:5;40839:9;:17;40835:66;;;40896:5;40884:9;:17;40869:32;;;;;40835:66;40753:148;40924:1;40912:13;;40700:582;;;40963:5;40957:3;40945:9;:15;:23;40941:341;;;40993:6;40981:18;;41023:1;41010:14;;40941:341;;;41061:3;41055;:9;41051:116;;;41098:3;41092;:9;41077:24;;;;;41051:116;;;41127:3;41121;:9;41117:50;;;41164:3;41158;:9;41143:24;;;;;41117:50;41051:116;41194:30;41180:44;;;;41267:5;41261:3;41249:9;:15;:23;41237:35;;40941:341;40700:582;40593:689;41404:10;41398:3;41385:9;:16;;41336:34;41326:44;;41331:1;41327;:5;41326:44;41317:54;;:84;;;:97;41299:117;;41292:124;;;;;;;39024:2405;;;;;:::o;42722:2698::-;42781:7;42797:17;42838:6;42832:3;42826:1;42817:11;;:18;;;;:27;42797:47;;;;42851:17;42892:6;42886:3;42880:1;42871:11;;:18;;;;:27;42851:47;;;;42924:6;42911:9;:19;42907:2508;;;42958:6;42945:9;:19;42941:98;;;19071:34;42973:3;;42966:10;;;;;;42941:98;43005:34;43001:38;;:1;:38;42997:1;:42;42990:49;;;;;;42907:2508;43070:6;43057:9;:19;43053:2362;;;43133:1;43091:43;;43095:34;43091:38;;:1;:38;:43;;;;43087:140;;19071:34;43143:3;;43136:10;;;;;;43087:140;43193:34;43183:44;;43188:1;43184;:5;43183:44;18622:34;43167:13;;:60;43160:67;;;;;;43053:2362;43287:1;43245:43;;43249:34;43245:38;;:1;:38;:43;;;;43241:2174;;;43345:1;43303:43;;43307:34;43303:38;;:1;:38;:43;;;;43299:144;;;19071:34;43355:3;;43348:10;;;;;;43299:144;43409:34;43399:44;;43404:1;43400;:5;43399:44;18843:34;43379:17;;:64;43372:71;;;;;;43241:2174;43466:18;43501:30;43496:1;43487:11;;:44;43466:65;;;;43557:1;43544:9;:14;43540:92;;;43572:1;43560:13;;43540:92;;;43601:31;43587:45;;;;43540:92;43643:18;43678:30;43673:1;43664:11;;:44;43643:65;;;;43734:1;43721:9;:14;43717:321;;;43766:1;43752:10;:15;43748:181;;43782:10;43801:16;43806:10;43801:3;:16::i;:::-;43795:3;:22;43782:35;;43847:5;43832:20;;;;;43879:1;43867:13;;43914:3;43906:5;:11;43893:24;;;;43748:181;;43717:321;;;44025:3;43989:31;43976:10;:44;43975:53;;43962:66;;43717:321;44074:10;44061;:23;;;;;;44048:36;;44111:1;44097:10;:15;44093:130;;;44177:1;44130:48;;44140:34;44130:44;;44135:1;44131;:5;44130:44;:48;;;;:93;;18622:34;44210:13;;44130:93;;;18727:34;44194:13;;44130:93;44123:100;;;;;;;;44093:130;44256:30;44242:10;:44;;44234:53;;;;44298:11;44335:31;44321:10;:45;;:196;;44411:31;44397:10;:45;;:120;;44474:31;44460:10;:45;;:57;;44514:3;44460:57;;;44508:3;44460:57;44397:120;;;44445:3;44397:120;44321:196;;;;;44369:16;44374:10;44369:3;:16::i;:::-;44321:196;44298:219;;44562:5;44550:9;:17;44544:3;44532:9;:15;:35;44528:745;;;44604:6;44592:18;;44634:1;44621:14;;44528:745;;;44682:9;44673:5;44667:3;44655:9;:15;:23;:36;44651:622;;;44729:1;44717:13;;44754:1;44741:14;;44651:622;;;44802:9;44793:5;44787:3;44775:9;:15;:23;:36;44771:502;;;44861:9;44853:5;44841:9;:17;:29;44837:196;;;44918:9;44910:5;44898:9;:17;:29;44883:44;;;;;44837:196;;;44967:9;44959:5;44947:9;:17;:29;44943:90;;;45028:5;45016:9;45004;:21;:29;44989:44;;;;;44943:90;44837:196;45058:1;45046:13;;44771:502;;;45106:3;45100;:9;45096:50;;;45143:3;45137;:9;45122:24;;;;;45096:50;45173:30;45159:44;;;;45254:9;45246:5;45240:3;45228:9;:15;:23;:35;45216:47;;44771:502;44651:622;44528:745;45395:10;45389:3;45376:9;:16;;45327:34;45317:44;;45322:1;45318;:5;45317:44;45308:54;;:84;;;:97;45290:117;;45283:124;;;;;;;42722:2698;;;;;:::o;21915:558::-;21966:7;21982:16;22022:6;22016:3;22010:1;22001:11;;:18;;;;:27;21982:46;;;;22052:5;22041:8;:16;22037:30;;;22066:1;22059:8;;;;;22037:30;22112:34;22107:1;22098:11;;:48;;;22089:58;;;;;;22189:5;22177:8;:17;;22168:27;;;;;;22214:14;22295:31;22255:30;22249:1;22240:11;;22231:21;;:54;:95;22214:112;;22350:5;22339:8;:16;22335:110;;;22376:8;22368:5;:16;22357:27;;;;;22335:110;;;22411:5;22400:8;:16;22396:49;;;22440:5;22429:8;:16;22418:27;;;;;22396:49;22335:110;22461:6;22454:13;;;;21915:558;;;;:::o;15172:677::-;15230:9;;;;;;;;;;;15222:18;;;;;;15279:4;15259:24;;:16;;;;;;;;;;;:24;;;15251:33;;;;;;15305:15;15323:65;15336:28;15349:11;:9;:11::i;:::-;15362:1;15336:12;:28::i;:::-;15366:21;;15323:12;:65::i;:::-;15305:83;;15399:16;15418:25;15435:7;15418:16;:25::i;:::-;15399:44;;15454:11;15468:38;15488:8;15498:7;;15468:19;:38::i;:::-;15454:52;;15558:1;15527:16;:28;15544:10;15527:28;;;;;;;;;;;;;;;:32;;;;15594:15;15570:9;:21;15580:10;15570:21;;;;;;;;;;;;;;;:39;;;;15758:10;;;;;;;;;;;:19;;:24;15778:3;15758:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15793:10;:19;;:48;15813:27;15826:8;15836:3;15813:12;:27::i;:::-;15793:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15172:677;;;:::o;9344:105::-;9401:7;9432:1;9428;:5;:13;;9440:1;9428:13;;;9436:1;9428:13;9421:20;;9344:105;;;;:::o;69122:585::-;69169:7;69198:1;69194;:5;69185:15;;;;;;69209:14;69245:35;69240:1;:40;69236:75;;69290:3;69284:9;;;;;69305:3;69295:13;;;;69236:75;69326:19;69321:1;:24;69317:57;;69355:2;69349:8;;;;;69369:2;69359:12;;;;69317:57;69389:11;69384:1;:16;69380:49;;69410:2;69404:8;;;;;69424:2;69414:12;;;;69380:49;69444:7;69439:1;:12;69435:45;;69461:2;69455:8;;;;;69475:2;69465:12;;;;69435:45;69495:5;69490:1;:10;69486:41;;69510:1;69504:7;;;;;69523:1;69513:11;;;;69486:41;69542:4;69537:1;:9;69533:40;;69556:1;69550:7;;;;;69569:1;69559:11;;;;69533:40;69588:3;69583:1;:8;69579:39;;69601:1;69595:7;;;;;69614:1;69604:11;;;;69579:39;69633:3;69628:1;:8;69624:25;;69648:1;69638:11;;;;69624:25;69695:6;69688:13;;;69122:585;;;:::o

Swarm Source

ipfs://c0f83e407d87fbfc54d38b71fc5eabe6642b8ee46991d119a2cd274c736a4c7f
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.