Contract 0x39ad1c83ceeece2551f886caef9c072763f0384f

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xaac477a91dd287f8c56a9461ccc0145b1138c642fb0a47c2d0af86e2ad70a353Withdraw205430512021-10-24 1:45:3839 mins ago0x85860e55054df6c7a4f158ec49b62175cc292f29 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.003904026
0xd489ef73a147f403149092f68191193f0a9fd6494ab969744e2ba6e8ec362c55Withdraw205405512021-10-24 0:10:462 hrs 13 mins ago0x24387c3ef7ee8258d822a1af44d38b1f0c98e1f4 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00065397
0x03890a1259d587eee63356cda0dcd967a1b28e639280f0ae67f84675832b251dWithdraw205405512021-10-24 0:10:462 hrs 13 mins ago0x83f9586b9cfa238e3558c661e10886febda2c275 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00189399
0x844ef42f836def0e77c51faf3368027186abb1ae8f3101cda56f67743c74fefeWithdraw205405502021-10-24 0:10:442 hrs 13 mins ago0x83f9586b9cfa238e3558c661e10886febda2c275 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00189399
0x4414bbfe946aaad80b61fdf8378635764d7586aa441d31b3ec0300008f9e5d3eWithdraw205362712021-10-23 21:22:175 hrs 2 mins ago0x9b9bcdc2d6b5a61f8f2130918942189e628e8f58 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00104281
0x7936ad1793ead6d159f849375b2d31471cc27805b40853647d997707ac97927aWithdraw Reward205354172021-10-23 20:50:335 hrs 34 mins ago0xb2d6231294e427352f1c73c20d00aa013256b998 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00192262
0x0dfee6f088debb6c2f76b8fadb147d893e9e9aecda68795813ecbc7dbdf90e9bWithdraw Reward205324602021-10-23 18:56:197 hrs 28 mins ago0x0dabc38b4052c66572604955fe2e08f030f74106 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.004566
0xbcf49e769a41c1c371d0e07da5780bb96804b392d29fd2ef126cf3c1756e181bWithdraw205304922021-10-23 17:40:018 hrs 44 mins ago0x2a34e4c51201980173cbcf7e99f2b73e25089cd0 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.004234478633
0x9e675d00d69eb62f3f351161e4b6d2751326a6de805f040e3954e2e4e56307d4Withdraw Reward205292152021-10-23 16:51:579 hrs 32 mins ago0xa5004f2c34f5dc83effb84582d7d4d1cfef3dbd7 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00272888
0x9aed44c89dad5dde2d551c7c032375b1367e6a00b2092e02187328506ce48bb6Unstake205244102021-10-23 13:51:2312 hrs 33 mins ago0x1dfe31d299eecaae5c3bfcb82ab4c0bb952b4831 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.001853148
0xc9029f74495c41c4dad5e2d1e0706233b0fdfabd21e841fdc118472aa897a103Withdraw Reward205243852021-10-23 13:50:3312 hrs 34 mins ago0x1dfe31d299eecaae5c3bfcb82ab4c0bb952b4831 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00204666
0xe429aab22afeb22a9b93a40033aff75b87dfb01a34890b797ca8dda4a2729aecWithdraw205237932021-10-23 13:30:1312 hrs 54 mins ago0x1dfe31d299eecaae5c3bfcb82ab4c0bb952b4831 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.002288895
0x19bc69f047c2644a160b14f269c32ac97572b67655cd02d093ac626f4afbde66Stake205237592021-10-23 13:28:2912 hrs 56 mins ago0x0397d009e8f8c520422796c706a48a65dc7f555b IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00116406
0xcee918c5da397d4949d58665a5977dcd06beb5b74eb6aa3db54ab06390d0f607Withdraw Reward205237562021-10-23 13:28:1712 hrs 56 mins ago0x3b6d17c0734b277ef7264b73753adaf930ba8f06 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00034983
0x174056fbab361ef9329199973f30b5be7a4ef18b173a594df5b2abbe00746168Withdraw205237562021-10-23 13:28:1712 hrs 56 mins ago0x3b6d17c0734b277ef7264b73753adaf930ba8f06 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.0006245899
0xf6a1aecb5b8884d139268389aeb2dba79626c1b6c9d66391b945b2ca8f111340Withdraw205220732021-10-23 12:25:2913 hrs 59 mins ago0x24387c3ef7ee8258d822a1af44d38b1f0c98e1f4 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00065397
0x9804d2ad1c15534c5a08b31b1cacb108bc832063e798f6a7b6b14fcfe737eb57Withdraw205165072021-10-23 8:45:3117 hrs 39 mins ago0x7626f002aabc4bbd96505ff9537db75c82dd07dc IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.001187625
0xe226e9c3eefc794849195f8355dbfdd20821c69de8c6a236de5b31bef82061b0Withdraw205098942021-10-23 4:01:2322 hrs 23 mins ago0x8462c854cda29cb88c58628a59158717e6efe57c IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00051619
0x925c5fa9f0f97cf62f230c13dc56668f1d8d267f4f20fba10fb395315e1c6463Unstake205096402021-10-23 3:52:3922 hrs 32 mins ago0x8462c854cda29cb88c58628a59158717e6efe57c IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00168468
0xf4ef782a24a8fca4287bd336a52fc0ef4379ee7215e96bcfcec7ae6915d2ef0dWithdraw Reward205096212021-10-23 3:51:5722 hrs 32 mins ago0x8462c854cda29cb88c58628a59158717e6efe57c IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.0022266
0x8b616a4505511d2126c12a209362b4794d0242ada1997223e4a5061b9c97e0ddWithdraw205074272021-10-23 2:27:5723 hrs 56 mins ago0x9b9bcdc2d6b5a61f8f2130918942189e628e8f58 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00104281
0x50491c77aba4305bf3ce5fd24d3a7675ffb4a1ce6859515ddd42a6abfe46a270Withdraw205074262021-10-23 2:27:5523 hrs 56 mins ago0x9b9bcdc2d6b5a61f8f2130918942189e628e8f58 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.00139575
0x1c31206d0bc791416793a1666d47f9812be14094c94153a30989969c7bc8ef47Withdraw205073932021-10-23 2:26:4923 hrs 57 mins ago0x2cb187d18ec132c75cec65f3e4b3ce3f879e1cd3 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.001445332
0xcaccda4058c4783997c443e5d660eeae0c7f3b4ec1ab0557b13af0e9e0a4da2eWithdraw205052792021-10-23 0:59:091 day 1 hr ago0x8949c7cd63ef9e6b746a8821e7205ca9039d1bcd IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.039300195
0xb0a9a9f49bd64e207e36ed111b9cb425d8262a9b58ae6f00c36e7712def04bd2Withdraw205017152021-10-22 22:28:081 day 3 hrs ago0xb2d6231294e427352f1c73c20d00aa013256b998 IN  0x39ad1c83ceeece2551f886caef9c072763f0384f0 MATIC0.009582565
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcaccda4058c4783997c443e5d660eeae0c7f3b4ec1ab0557b13af0e9e0a4da2e205052792021-10-23 0:59:091 day 1 hr ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x8949c7cd63ef9e6b746a8821e7205ca9039d1bcd0.463990745833333337 MATIC
0xb0a9a9f49bd64e207e36ed111b9cb425d8262a9b58ae6f00c36e7712def04bd2205017152021-10-22 22:28:081 day 3 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xb2d6231294e427352f1c73c20d00aa013256b9981.056009254166666663 MATIC
0xcce725bc1da43c5cdd5cfe1326d6a2c8de66b96f970dc85fb22acc064944dc3b205013662021-10-22 22:14:461 day 4 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x1f2ce24405461ecb42f68d76683bfff7770f1b920.22 MATIC
0xcce725bc1da43c5cdd5cfe1326d6a2c8de66b96f970dc85fb22acc064944dc3b205013662021-10-22 22:14:461 day 4 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xd18268d2212091b65e770c27addd5a96024442b30.06 MATIC
0xcce725bc1da43c5cdd5cfe1326d6a2c8de66b96f970dc85fb22acc064944dc3b205013662021-10-22 22:14:461 day 4 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xaff3280999431555baa4266f9d17ce7c490793720.1 MATIC
0xcce725bc1da43c5cdd5cfe1326d6a2c8de66b96f970dc85fb22acc064944dc3b205013662021-10-22 22:14:461 day 4 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x244220adf0aa433aea1d52119cc56d6394053d6f0.1 MATIC
0x70f20e5dd9110c15bed76ae8f636a286721cfcbd50b0c8699db400fb32585e0f204999932021-10-22 21:14:481 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x91e0a8b5c16e80beeb4e41f8e5b218871d46b56738.052065972222222223 MATIC
0x57fa398a724111e7d99739cca9bc5485a977ced211fddbf87e577c5ff3d9c9f0204992092021-10-22 20:43:361 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x7896ffc0b61072f275524f3b4ac97892fb56642046.307934027777777777 MATIC
0xa4dcbfeb5f27579dd02b6d09c736a1fddae3a579073f99bab3cedca025d5c511204990782021-10-22 20:39:061 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x1f2ce24405461ecb42f68d76683bfff7770f1b927.59 MATIC
0xa4dcbfeb5f27579dd02b6d09c736a1fddae3a579073f99bab3cedca025d5c511204990782021-10-22 20:39:061 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xd18268d2212091b65e770c27addd5a96024442b32.07 MATIC
0xa4dcbfeb5f27579dd02b6d09c736a1fddae3a579073f99bab3cedca025d5c511204990782021-10-22 20:39:061 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xaff3280999431555baa4266f9d17ce7c490793723.45 MATIC
0xa4dcbfeb5f27579dd02b6d09c736a1fddae3a579073f99bab3cedca025d5c511204990782021-10-22 20:39:061 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x244220adf0aa433aea1d52119cc56d6394053d6f3.45 MATIC
0x024a12cb6ee56d9db092a97ba21de8b8297d9a6e7b5eedc63f73e25ed3535a73204989302021-10-22 20:33:581 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x1f2ce24405461ecb42f68d76683bfff7770f1b924.62 MATIC
0x024a12cb6ee56d9db092a97ba21de8b8297d9a6e7b5eedc63f73e25ed3535a73204989302021-10-22 20:33:581 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xd18268d2212091b65e770c27addd5a96024442b31.26 MATIC
0x024a12cb6ee56d9db092a97ba21de8b8297d9a6e7b5eedc63f73e25ed3535a73204989302021-10-22 20:33:581 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xaff3280999431555baa4266f9d17ce7c490793722.1 MATIC
0x024a12cb6ee56d9db092a97ba21de8b8297d9a6e7b5eedc63f73e25ed3535a73204989302021-10-22 20:33:581 day 5 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x244220adf0aa433aea1d52119cc56d6394053d6f2.1 MATIC
0x39c22f141515f1528fe95b560487724e8f83941d2ac207106aa79fd3b20252da204805662021-10-22 7:58:121 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x8949c7cd63ef9e6b746a8821e7205ca9039d1bcd1.52 MATIC
0x025b3921864c4fcae2aebedc59505020323022d5695208798f5f4742d2af510e204804782021-10-22 7:54:061 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x1f2ce24405461ecb42f68d76683bfff7770f1b920.22 MATIC
0x025b3921864c4fcae2aebedc59505020323022d5695208798f5f4742d2af510e204804782021-10-22 7:54:061 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xd18268d2212091b65e770c27addd5a96024442b30.06 MATIC
0x025b3921864c4fcae2aebedc59505020323022d5695208798f5f4742d2af510e204804782021-10-22 7:54:061 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xaff3280999431555baa4266f9d17ce7c490793720.1 MATIC
0x025b3921864c4fcae2aebedc59505020323022d5695208798f5f4742d2af510e204804782021-10-22 7:54:061 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x244220adf0aa433aea1d52119cc56d6394053d6f0.1 MATIC
0x4d0a2ab13ca69267f28a6fc2de6d976932651a540c97f2a6c44c4fb5a1b31fb3204804702021-10-22 7:53:341 day 18 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xf0d09d5fcc254d4595bba762e31d0a55ff75e9a01.71095012282407408 MATIC
0x8a665c8e35f749c48fe141bdf892eb977c8f934f4a3ab62341820bfb17d48ca9204794282021-10-22 7:12:441 day 19 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xb2d6231294e427352f1c73c20d00aa013256b9982.46904987717592592 MATIC
0xec212229f66579fb052ec77fea0c9976f02d3725b845e7de7391b32296f62143204777202021-10-22 6:02:531 day 20 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0x1f2ce24405461ecb42f68d76683bfff7770f1b920.605 MATIC
0xec212229f66579fb052ec77fea0c9976f02d3725b845e7de7391b32296f62143204777202021-10-22 6:02:531 day 20 hrs ago 0x39ad1c83ceeece2551f886caef9c072763f0384f0xd18268d2212091b65e770c27addd5a96024442b30.165 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Polygonex

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-09-01
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;


library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            
            
            
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    
    function owner() public view virtual returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);

    
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IMintableToken is IERC20 {

  function mint(address _receiver, uint256 _amount) external;

}

contract Polygonex is Ownable {
    using SafeMath for uint256;

    uint256 constant public DEPOSITS_MAX = 100;
    uint256 constant public INVEST_MIN_AMOUNT = 1 ether; 
    uint256[] public REFERRAL_LEVELS_PERCENTS = [500, 700, 900, 1100, 1400, 1600, 1800, 2000];
    uint256[] public REFERRAL_LEVELS_MILESTONES = [0 ether, 6000 ether, 24000 ether, 100000 ether, 200000 ether, 600000 ether, 2000000 ether, 4000000 ether];
    uint8 constant public REFERRAL_DEPTH = 10;
    uint8 constant public REFERRAL_TURNOVER_DEPTH = 5;

    address payable constant public DEFAULT_REFERRER_ADDRESS = payable(0x1f2Ce24405461Ecb42f68D76683BFFF7770F1B92);

    
    address payable constant public MARKETING_ADDRESS = payable(0x244220aDf0Aa433aEa1d52119cc56d6394053D6f);
    uint256 constant public MARKETING_FEE = 500;
    address payable constant public PROMOTION_ADDRESS = payable(0xAFf3280999431555bAa4266F9d17Ce7c49079372);
    uint256 constant public PROMOTION_FEE = 500;
    address payable constant public LIQUIDITY_ADDRESS = payable(0xD18268D2212091B65E770c27ADdD5a96024442B3);
    uint256 constant public LIQUIDITY_FEE = 300;

    uint256 constant public BASE_PERCENT = 300; 

    
    uint256 constant public MAX_HOLD_PERCENT = 1000; 
    uint256 constant public HOLD_BONUS_PERCENT = 10; 

    
    uint256 constant public MAX_CONTRACT_PERCENT = 10000; 
    uint256 constant public CONTRACT_BALANCE_STEP = 20000 ether; 
    uint256 constant public CONTRACT_HOLD_BONUS_PERCENT = 10; 

    
    uint256 constant public MAX_DEPOSIT_PERCENT = 10000; 
    uint256 constant public USER_DEPOSITS_STEP = 2000 ether; 
    uint256 constant public VIP_BONUS_PERCENT = 10; 

    uint256 constant public TIME_STEP = 1 days;
    uint256 constant public PERCENTS_DIVIDER = 10000;

    uint256 public totalDeposits;
    uint256 public totalInvested;
    uint256 public totalWithdrawn;

    uint256 public contractPercent;

    address public tokenContractAddress;
    struct Token {
      address tokenContractAddress;
      address flipTokenContractAddress;
      uint256 rate; 
    }
    mapping (address => Token) tokens;
    mapping (address => address) flipTokens;

    struct Stake {
      uint256 amount;
      uint256 checkpoint;
      uint256 checkpointHold;
      uint256 accumulatedReward;
      uint256 withdrawnReward;
    }
    mapping (address => mapping (address => Stake)) stakes;

    
    uint256 constant public HOLD_BONUS_PERCENT_STAKE = 100; 
    uint256 constant public HOLD_BONUS_PERCENT_LIMIT = 10000; 

    
    uint256 constant public USER_DEPOSITS_STEP_STAKE = 1000 ether; 
    uint256 constant public VIP_BONUS_PERCENT_STAKE = 100; 
    uint256 constant public VIP_BONUS_PERCENT_LIMIT = 10000; 

    uint256 public MULTIPLIER = 1;

    struct Deposit {
        uint256 amount;
        uint256 withdrawn;
        uint256 refback;
        uint32 start;
    }

    struct User {
        Deposit[] deposits;
        uint32 checkpoint;
        address referrer;
        address[] referrals;
        uint256 bonus;
        uint256[REFERRAL_DEPTH] refs;
        uint256[REFERRAL_DEPTH] refsNumber;
        uint16 rbackPercent;
        uint8 refLevel;
        uint256 refTurnover;
    }

    mapping (address => User) public users;

    event Newbie(address user);
    event NewDeposit(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RefBonus(address indexed referrer, address indexed referral, uint256 indexed level, uint256 amount);
    event RefBack(address indexed referrer, address indexed referral, uint256 amount);
    event FeePayed(address indexed user, uint256 totalAmount);

    
    event Staked(address indexed user, address indexed tokenContractAddress, address indexed flipTokenContractAddress, uint256 amount);
    event Unstaked(address indexed user, address indexed tokenContractAddress, address indexed flipTokenContractAddress, uint256 amount);
    event RewardWithdrawn(address indexed user, address indexed tokenContractAddress, address indexed flipTokenContractAddress, uint256 reward);

    constructor() {
        contractPercent = getContractBalanceRate();
    }

    function invest(address referrer) public payable {
        require(!isContract(msg.sender) && msg.sender == tx.origin);

        require(msg.value >= INVEST_MIN_AMOUNT, "Minimum deposit amount is 1 MATIC");

        User storage user = users[msg.sender];

        require(user.deposits.length < DEPOSITS_MAX, "Maximum 100 deposits from address");

        uint256 marketingFee = msg.value.mul(MARKETING_FEE).div(PERCENTS_DIVIDER);
        uint256 promotionFee = msg.value.mul(PROMOTION_FEE).div(PERCENTS_DIVIDER);
        uint256 liquidityFee = msg.value.mul(LIQUIDITY_FEE).div(PERCENTS_DIVIDER);

        MARKETING_ADDRESS.transfer(marketingFee);
        PROMOTION_ADDRESS.transfer(promotionFee);
        LIQUIDITY_ADDRESS.transfer(liquidityFee);

        emit FeePayed(msg.sender, marketingFee.add(promotionFee).add(liquidityFee));

        bool isNewUser = false;
        if (user.referrer == address(0)) {
            isNewUser = true;
            if (isActive(referrer) && referrer != msg.sender) {
              user.referrer = referrer;
              users[referrer].referrals.push(msg.sender);
            } else {
              user.referrer = DEFAULT_REFERRER_ADDRESS;
            }
        }

        uint256 refbackAmount;
        if (user.referrer != address(0)) {
            bool[] memory distributedLevels = new bool[](REFERRAL_LEVELS_PERCENTS.length);

            address current = msg.sender;
            address upline = user.referrer;
            uint8 maxRefLevel = 0;
            for (uint256 i = 0; i < REFERRAL_DEPTH; i++) {
                if (upline == address(0)) {
                  break;
                }

                uint256 refPercent = 0;
                if (i == 0) {
                  refPercent = REFERRAL_LEVELS_PERCENTS[users[upline].refLevel];

                  maxRefLevel = users[upline].refLevel;
                  for (uint8 j = users[upline].refLevel; j >= 0; j--) {
                    distributedLevels[j] = true;

                    if (j == 0) {
                      break;
                    }
                  }
                } else if (users[upline].refLevel > maxRefLevel && !distributedLevels[users[upline].refLevel]) {
                  refPercent = REFERRAL_LEVELS_PERCENTS[users[upline].refLevel]
                          .sub(REFERRAL_LEVELS_PERCENTS[maxRefLevel], "Ref percent calculation error");

                  maxRefLevel = users[upline].refLevel;
                  for (uint8 j = users[upline].refLevel; j >= 0; j--) {
                    distributedLevels[j] = true;

                    if (j == 0) {
                      break;
                    }
                  }
                }

                uint256 amount = msg.value.mul(refPercent).div(PERCENTS_DIVIDER);

                if (i == 0 && users[upline].rbackPercent > 0 && amount > 0) {
                    refbackAmount = amount.mul(uint256(users[upline].rbackPercent)).div(PERCENTS_DIVIDER);
                    payable(msg.sender).transfer(refbackAmount);

                    emit RefBack(upline, msg.sender, refbackAmount);

                    amount = amount.sub(refbackAmount);
                }

                if (amount > 0) {
                    payable(upline).transfer(amount);
                    users[upline].bonus = uint256(users[upline].bonus).add(amount);

                    emit RefBonus(upline, msg.sender, i, amount);
                }

                users[upline].refs[i]++;
                if (isNewUser) {
                  users[upline].refsNumber[i]++;
                }

                current = upline;
                upline = users[upline].referrer;
            }

            upline = user.referrer;
            for (uint256 i = 0; i < REFERRAL_TURNOVER_DEPTH; i++) {
                if (upline == address(0)) {
                  break;
                }

                updateReferralLevel(upline, msg.value);

                upline = users[upline].referrer;
            }

        }

        if (user.deposits.length == 0) {
            user.checkpoint = uint32(block.timestamp);
            emit Newbie(msg.sender);
        }

        user.deposits.push(Deposit(msg.value, 0, refbackAmount, uint32(block.timestamp)));

        totalInvested = totalInvested.add(msg.value);
        totalDeposits++;

        if (contractPercent < BASE_PERCENT.add(MAX_CONTRACT_PERCENT)) {
            uint256 contractPercentNew = getContractBalanceRate();
            if (contractPercentNew > contractPercent) {
                contractPercent = contractPercentNew;
            }
        }

        emit NewDeposit(msg.sender, msg.value);

        
        if (isContract(tokenContractAddress)) {
          IMintableToken(tokenContractAddress).mint(msg.sender, msg.value.mul(tokens[tokenContractAddress].rate));
        }
    }

    function withdraw() public {
        User storage user = users[msg.sender];

        uint256 userPercentRate = getUserPercentRate(msg.sender);

        uint256 totalAmount;
        uint256 dividends;

        for (uint8 i = 0; i < user.deposits.length; i++) {

            if (uint256(user.deposits[i].withdrawn) < uint256(user.deposits[i].amount).mul(2)) {

                if (user.deposits[i].start > user.checkpoint) {

                    dividends = (uint256(user.deposits[i].amount).mul(userPercentRate).div(PERCENTS_DIVIDER))
                        .mul(block.timestamp.sub(uint256(user.deposits[i].start)))
                        .div(TIME_STEP);

                } else {

                    dividends = (uint256(user.deposits[i].amount).mul(userPercentRate).div(PERCENTS_DIVIDER))
                        .mul(block.timestamp.sub(uint256(user.checkpoint)))
                        .div(TIME_STEP);

                }

                if (uint256(user.deposits[i].withdrawn).add(dividends) > uint256(user.deposits[i].amount).mul(2)) {
                    dividends = (uint256(user.deposits[i].amount).mul(2)).sub(uint256(user.deposits[i].withdrawn));
                }

                user.deposits[i].withdrawn = uint256(user.deposits[i].withdrawn).add(dividends); 
                totalAmount = totalAmount.add(dividends);

            }
        }

        require(totalAmount > 0, "User has no dividends");

        uint256 contractBalance = address(this).balance;
        if (contractBalance < totalAmount) {
            totalAmount = contractBalance;
        }

        user.checkpoint = uint32(block.timestamp);

        payable(msg.sender).transfer(totalAmount);

        totalWithdrawn = totalWithdrawn.add(totalAmount);

        emit Withdrawn(msg.sender, totalAmount);
    }

    function setRefback(uint16 rbackPercent) public {
        require(rbackPercent <= 10000);

        User storage user = users[msg.sender];

        if (user.deposits.length > 0) {
            user.rbackPercent = rbackPercent;
        }
    }

    function getContractBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function getContractBalanceRate() public view returns (uint256) {
        uint256 contractBalance = address(this).balance;
        uint256 contractBalancePercent = BASE_PERCENT.add(
          contractBalance
            .div(CONTRACT_BALANCE_STEP)
            .mul(CONTRACT_HOLD_BONUS_PERCENT)
        );

        if (contractBalancePercent < BASE_PERCENT.add(MAX_CONTRACT_PERCENT)) {
            return contractBalancePercent;
        } else {
            return BASE_PERCENT.add(MAX_CONTRACT_PERCENT);
        }
    }

    function getUserDepositRate(address userAddress) public view returns (uint256) {
        uint256 userDepositRate;

        if (getUserAmountOfDeposits(userAddress) > 0) {
            userDepositRate = getUserTotalDeposits(userAddress).div(USER_DEPOSITS_STEP).mul(VIP_BONUS_PERCENT);

            if (userDepositRate > MAX_DEPOSIT_PERCENT) {
                userDepositRate = MAX_DEPOSIT_PERCENT;
            }
        }

        return userDepositRate;
    }

    function getUserPercentRate(address userAddress) public view returns (uint256) {
        User storage user = users[userAddress];

        if (isActive(userAddress)) {
            uint256 userDepositRate = getUserDepositRate(userAddress);

            uint256 timeMultiplier = (block.timestamp.sub(uint256(user.checkpoint))).div(TIME_STEP).mul(HOLD_BONUS_PERCENT);
            if (timeMultiplier > MAX_HOLD_PERCENT) {
                timeMultiplier = MAX_HOLD_PERCENT;
            }

            return contractPercent.add(timeMultiplier).add(userDepositRate);
        } else {
            return contractPercent;
        }
    }

    function getUserAvailable(address userAddress) public view returns (uint256) {
        User memory user = users[userAddress];

        uint256 userPercentRate = getUserPercentRate(userAddress);

        uint256 totalDividends;
        uint256 dividends;

        for (uint8 i = 0; i < user.deposits.length; i++) {

            if (uint256(user.deposits[i].withdrawn) < uint256(user.deposits[i].amount).mul(2)) {

                if (user.deposits[i].start > user.checkpoint) {

                    dividends = (uint256(user.deposits[i].amount).mul(userPercentRate).div(PERCENTS_DIVIDER))
                        .mul(block.timestamp.sub(uint256(user.deposits[i].start)))
                        .div(TIME_STEP);

                } else {

                    dividends = (uint256(user.deposits[i].amount).mul(userPercentRate).div(PERCENTS_DIVIDER))
                        .mul(block.timestamp.sub(uint256(user.checkpoint)))
                        .div(TIME_STEP);

                }

                if (uint256(user.deposits[i].withdrawn).add(dividends) > uint256(user.deposits[i].amount).mul(2)) {
                    dividends = (uint256(user.deposits[i].amount).mul(2)).sub(uint256(user.deposits[i].withdrawn));
                }

                totalDividends = totalDividends.add(dividends);
            }

        }

        return totalDividends;
    }

    function isActive(address userAddress) public view returns (bool) {
        User storage user = users[userAddress];

        return (user.deposits.length > 0) && uint256(user.deposits[user.deposits.length-1].withdrawn) < uint256(user.deposits[user.deposits.length-1].amount).mul(2);
    }

    function getUserAmountOfDeposits(address userAddress) public view returns (uint256) {
        return users[userAddress].deposits.length;
    }

    function getUserTotalDeposits(address userAddress) public view returns (uint256) {
        User storage user = users[userAddress];

        uint256 amount;

        for (uint256 i = 0; i < user.deposits.length; i++) {
            amount = amount.add(user.deposits[i].amount);
        }

        return amount;
    }

    function getUserTotalWithdrawn(address userAddress) public view returns (uint256) {
        User storage user = users[userAddress];

        uint256 amount = user.bonus;

        for (uint256 i = 0; i < user.deposits.length; i++) {
            amount = amount.add(user.deposits[i].withdrawn).add(user.deposits[i].refback);
        }

        return amount;
    }

    function getUserDeposits(address userAddress, uint256 last, uint256 first) public view
      returns (uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory) {
        User storage user = users[userAddress];

        uint256 count = first.sub(last);
        if (count > user.deposits.length) {
            count = user.deposits.length;
        }

        uint256[] memory amount = new uint256[](count);
        uint256[] memory withdrawn = new uint256[](count);
        uint256[] memory refback = new uint256[](count);
        uint256[] memory start = new uint256[](count);

        uint256 index = 0;
        for (uint256 i = first; i > last; i--) {
            amount[index] = user.deposits[i-1].amount;
            withdrawn[index] = user.deposits[i-1].withdrawn;
            refback[index] = user.deposits[i-1].refback;
            start[index] = uint256(user.deposits[i-1].start);
            index++;
        }

        return (amount, withdrawn, refback, start);
    }

    function getSiteStats() public view returns (uint256, uint256, uint256, uint256) {
        return (totalInvested, totalDeposits, address(this).balance, contractPercent);
    }

    function getUserStats(address userAddress) public view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        uint256 userPerc = getUserPercentRate(userAddress);
        uint256 userAvailable = getUserAvailable(userAddress);
        uint256 userDepsTotal = getUserTotalDeposits(userAddress);
        uint256 userDeposits = getUserAmountOfDeposits(userAddress);
        uint256 userWithdrawn = getUserTotalWithdrawn(userAddress);
        uint256 userDepositRate = getUserDepositRate(userAddress);

        return (userPerc, userAvailable, userDepsTotal, userDeposits, userWithdrawn, userDepositRate);
    }

    function getDepositsRates(address userAddress) public view returns (uint256, uint256, uint256, uint256) {
      User memory user = users[userAddress];

      uint256 holdBonusPercent = (block.timestamp.sub(uint256(user.checkpoint))).div(TIME_STEP).mul(HOLD_BONUS_PERCENT);
      if (holdBonusPercent > MAX_HOLD_PERCENT) {
          holdBonusPercent = MAX_HOLD_PERCENT;
      }

      return (
        BASE_PERCENT, 
        !isActive(userAddress) ? 0 : holdBonusPercent, 
        address(this).balance.div(CONTRACT_BALANCE_STEP).mul(CONTRACT_HOLD_BONUS_PERCENT), 
        !isActive(userAddress) ? 0 : getUserDepositRate(userAddress) 
      );
    }

    function getUserReferralsStats(address userAddress) public view
      returns (address, uint16, uint16, uint256, uint256[REFERRAL_DEPTH] memory, uint256[REFERRAL_DEPTH] memory, uint256, uint256) {
        User storage user = users[userAddress];

        return (
          user.referrer,
          user.rbackPercent,
          users[user.referrer].rbackPercent,
          user.bonus,
          user.refs,
          user.refsNumber,
          user.refLevel,
          user.refTurnover
        );
    }

    function isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    function setTokenContractAddress(address _tokenContractAddress, address _flipTokenContractAddress, uint256 _rate) external onlyOwner {
      require(_rate > 0 && _rate <= 1000, "Invalid rate value");
      require(isContract(_tokenContractAddress), "Provided address is not a token contract address");
      require(isContract(_flipTokenContractAddress), "Provided address is not a flip token contract address");

      tokenContractAddress = _tokenContractAddress;
      tokens[_tokenContractAddress] = Token(_tokenContractAddress, _flipTokenContractAddress, _rate);
      flipTokens[_flipTokenContractAddress] = _tokenContractAddress;
    }

    function updateReferralLevel(address _userAddress, uint256 _amount) private {
      users[_userAddress].refTurnover = users[_userAddress].refTurnover.add(_amount);

      for (uint8 level = uint8(REFERRAL_LEVELS_MILESTONES.length - 1); level > 0; level--) {
        if (users[_userAddress].refTurnover >= REFERRAL_LEVELS_MILESTONES[level]) {
          users[_userAddress].refLevel = level;

          break;
        }
      }
    }

    

    function getStakeVIPBonusRate(address userAddress, address flipTokenContractAddress) public view returns (uint256) {
        uint256 vipBonusRate = stakes[userAddress][flipTokenContractAddress].amount.div(USER_DEPOSITS_STEP_STAKE).mul(VIP_BONUS_PERCENT_STAKE);

        if (vipBonusRate > VIP_BONUS_PERCENT_LIMIT) {
          return VIP_BONUS_PERCENT_LIMIT;
        }

        return vipBonusRate;
    }

    function getStakeHOLDBonusRate(address userAddress, address flipTokenContractAddress) public view returns (uint256) {
        if (stakes[userAddress][flipTokenContractAddress].checkpointHold == 0) {
          return 0;
        }

        uint256 holdBonusRate = (block.timestamp.sub(stakes[userAddress][flipTokenContractAddress].checkpointHold)).div(TIME_STEP).mul(HOLD_BONUS_PERCENT_STAKE);

        if (holdBonusRate > HOLD_BONUS_PERCENT_LIMIT) {
          return HOLD_BONUS_PERCENT_LIMIT;
        }

        return holdBonusRate;
    }

    function getUserStakePercentRate(address userAddress, address flipTokenContractAddress) public view returns (uint256) {
        return getStakeVIPBonusRate(userAddress, flipTokenContractAddress)
          .add(getStakeHOLDBonusRate(userAddress, flipTokenContractAddress));
    }

    function stake(address _flipTokenContractAddress, uint256 _amount) external returns (bool) {
      require(_amount > 0, "Invalid tokens amount value");
      require(isContract(_flipTokenContractAddress), "Provided address is not a flip token contract address");

      if (!IERC20(_flipTokenContractAddress).transferFrom(msg.sender, address(this), _amount)) {
        return false;
      }

      uint256 reward = availableReward(msg.sender, _flipTokenContractAddress);
      if (reward > 0) {
        stakes[msg.sender][_flipTokenContractAddress].accumulatedReward = stakes[msg.sender][_flipTokenContractAddress].accumulatedReward.add(reward);
      }

      stakes[msg.sender][_flipTokenContractAddress].amount = stakes[msg.sender][_flipTokenContractAddress].amount.add(_amount);
      stakes[msg.sender][_flipTokenContractAddress].checkpoint = block.timestamp;
      if (stakes[msg.sender][_flipTokenContractAddress].checkpointHold == 0) {
        stakes[msg.sender][_flipTokenContractAddress].checkpointHold = block.timestamp;
      }

      emit Staked(msg.sender, flipTokens[_flipTokenContractAddress], _flipTokenContractAddress, _amount);

      return true;
    }

    function availableReward(address userAddress, address flipTokenContractAddress) public view returns (uint256) {
      uint256 userPercentRate = getUserStakePercentRate(userAddress, flipTokenContractAddress);

      return (stakes[userAddress][flipTokenContractAddress].amount
        .mul(PERCENTS_DIVIDER.add(userPercentRate)).div(PERCENTS_DIVIDER))
        .mul(MULTIPLIER)
        .mul(block.timestamp.sub(stakes[userAddress][flipTokenContractAddress].checkpoint))
        .div(TIME_STEP);
    }

    function withdrawReward(address _flipTokenContractAddress) external {
      uint256 reward = stakes[msg.sender][_flipTokenContractAddress].accumulatedReward
        .add(availableReward(msg.sender, _flipTokenContractAddress));

      if (reward > 0) {
        address _tokenContractAddress = flipTokens[_flipTokenContractAddress];

        
        if (isContract(_tokenContractAddress)) {
          stakes[msg.sender][_flipTokenContractAddress].checkpoint = block.timestamp;
          stakes[msg.sender][_flipTokenContractAddress].accumulatedReward = 0;
          stakes[msg.sender][_flipTokenContractAddress].withdrawnReward = stakes[msg.sender][_flipTokenContractAddress].withdrawnReward.add(reward);

          IMintableToken(_tokenContractAddress).mint(msg.sender, reward);

          emit RewardWithdrawn(msg.sender, _tokenContractAddress, _flipTokenContractAddress, reward);
        }
      }
    }

    function unstake(address _flipTokenContractAddress, uint256 _amount) external {
      require(_amount > 0, "Invalid tokens amount value");
      require(_amount <= stakes[msg.sender][_flipTokenContractAddress].amount, "Not enough tokens on the stake balance");
      require(isContract(_flipTokenContractAddress), "Provided address is not a flip token contract address");

      uint256 reward = availableReward(msg.sender, _flipTokenContractAddress);
      if (reward > 0) {
        stakes[msg.sender][_flipTokenContractAddress].accumulatedReward = stakes[msg.sender][_flipTokenContractAddress].accumulatedReward.add(reward);
      }

      stakes[msg.sender][_flipTokenContractAddress].amount = stakes[msg.sender][_flipTokenContractAddress].amount.sub(_amount);
      stakes[msg.sender][_flipTokenContractAddress].checkpoint = block.timestamp;
      if (stakes[msg.sender][_flipTokenContractAddress].amount > 0) {
        stakes[msg.sender][_flipTokenContractAddress].checkpointHold = block.timestamp;
      } else {
        stakes[msg.sender][_flipTokenContractAddress].checkpointHold = 0; 
      }

      require(IERC20(_flipTokenContractAddress).transfer(msg.sender, _amount));

      emit Unstaked(msg.sender, flipTokens[_flipTokenContractAddress], _flipTokenContractAddress, _amount);
    }

    function getUserStakeStats(address _userAddress, address _flipTokenContractAddress) public view
      returns (uint256, uint256, uint256, uint256, uint256)
    {
      return (
        stakes[_userAddress][_flipTokenContractAddress].amount,
        stakes[_userAddress][_flipTokenContractAddress].accumulatedReward,
        stakes[_userAddress][_flipTokenContractAddress].withdrawnReward,
        getStakeVIPBonusRate(_userAddress, _flipTokenContractAddress),
        getStakeHOLDBonusRate(_userAddress, _flipTokenContractAddress)
      );
    }

    function getUserStakeTimeCheckpoints(address _userAddress, address _flipTokenContractAddress) public view returns (uint256, uint256) {
      return (
        stakes[_userAddress][_flipTokenContractAddress].checkpoint,
        stakes[_userAddress][_flipTokenContractAddress].checkpointHold
      );
    }

    function updateMultiplier(uint256 multiplier) public onlyOwner {
      require(multiplier > 0 && multiplier <= 50, "Multiplier is out of range");

      MULTIPLIER = multiplier;
    }

    function referrals(address user) external view returns(address[] memory) {
      return users[user].referrals;
    }

    function turn() external {
      
    }

    function turnAmount() external payable {
      payable(msg.sender).transfer(msg.value);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"FeePayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Newbie","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenContractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"flipTokenContractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenContractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"flipTokenContractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenContractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"flipTokenContractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"BASE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_BALANCE_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_HOLD_BONUS_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_REFERRER_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSITS_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOLD_BONUS_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOLD_BONUS_PERCENT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOLD_BONUS_PERCENT_STAKE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVEST_MIN_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CONTRACT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_DEPOSIT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_HOLD_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTS_DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROMOTION_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROMOTION_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_DEPTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"REFERRAL_LEVELS_MILESTONES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"REFERRAL_LEVELS_PERCENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_TURNOVER_DEPTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_DEPOSITS_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_DEPOSITS_STEP_STAKE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_BONUS_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_BONUS_PERCENT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_BONUS_PERCENT_STAKE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"flipTokenContractAddress","type":"address"}],"name":"availableReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalanceRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getDepositsRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSiteStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"flipTokenContractAddress","type":"address"}],"name":"getStakeHOLDBonusRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"flipTokenContractAddress","type":"address"}],"name":"getStakeVIPBonusRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserAmountOfDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserDepositRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"last","type":"uint256"},{"internalType":"uint256","name":"first","type":"uint256"}],"name":"getUserDeposits","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserPercentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserReferralsStats","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[10]","name":"","type":"uint256[10]"},{"internalType":"uint256[10]","name":"","type":"uint256[10]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"flipTokenContractAddress","type":"address"}],"name":"getUserStakePercentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"address","name":"_flipTokenContractAddress","type":"address"}],"name":"getUserStakeStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"address","name":"_flipTokenContractAddress","type":"address"}],"name":"getUserStakeTimeCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserTotalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserTotalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"referrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rbackPercent","type":"uint16"}],"name":"setRefback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContractAddress","type":"address"},{"internalType":"address","name":"_flipTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setTokenContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_flipTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnAmount","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_flipTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"updateMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint32","name":"checkpoint","type":"uint32"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"bonus","type":"uint256"},{"internalType":"uint16","name":"rbackPercent","type":"uint16"},{"internalType":"uint8","name":"refLevel","type":"uint8"},{"internalType":"uint256","name":"refTurnover","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_flipTokenContractAddress","type":"address"}],"name":"withdrawReward","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101806040526101f460809081526102bc60a05261038460c05261044c60e0526105786101005261064061012052610708610140526107d0610160526200004b90600190600862000226565b5060408051610100810182526000815269014542ba12a337c0000060208201526905150ae84a8cdf0000009181019190915269152d02c7e14af68000006060820152692a5a058fc295ed0000006080820152697f0e10af47c1c700000060a08201526a01a784379d99db4200000060c08201526a034f086f3b33b68400000060e0820152620000df9060029060086200027c565b506001600b55348015620000f257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200013e62000147565b60065562000352565b60004781620001a26200018b600a620001778569043c33c1937564800000620001f5602090811b6200369217901c565b6200020a60201b6200369e1790919060201c565b61012c6200021860201b620036aa1790919060201c565b9050620001c261271061012c6200021860201b620036aa1790919060201c565b811015620001d05792915050565b620001ee61271061012c6200021860201b620036aa1790919060201c565b9250505090565b6000620002038284620002f7565b9392505050565b60006200020382846200031a565b6000620002038284620002dc565b8280548282559060005260206000209081019282156200026a579160200282015b828111156200026a578251829061ffff1690559160200191906001019062000247565b5062000278929150620002c5565b5090565b8280548282559060005260206000209081019282156200026a579160200282015b828111156200026a57825182906001600160581b03169055916020019190600101906200029d565b5b80821115620002785760008155600101620002c6565b60008219821115620002f257620002f26200033c565b500190565b6000826200031557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200033757620003376200033c565b500290565b634e487b7160e01b600052601160045260246000fd5b613cf480620003626000396000f3fe6080604052600436106104055760003560e01c806375c4554d11610213578063af3e212211610123578063e689c476116100ab578063f9dbe5201161007a578063f9dbe5201461096c578063fb4cb32b14610c2d578063fe26929f14610c4d578063fe758b4914610c6d578063fec259d31461040a57600080fd5b8063e689c47614610bb0578063e875df6a14610bd8578063eca082d814610bf8578063f2fde38b14610c0d57600080fd5b8063d416a580116100f2578063d416a58014610b01578063e262113e14610b77578063e4170bfc14610b93578063e4d423c714610748578063e624db841461040a57600080fd5b8063af3e212214610b01578063b86e321c14610b17578063c2a672e014610b37578063d141b7f714610b5757600080fd5b80639482e584116101a65780639f8a13d7116101755780639f8a13d7146109cc578063a87430ba146109fc578063a8aeb6c214610aab578063adc9772e14610ae1578063aef18c251461096c57600080fd5b80639482e5841461096c5780639bb57718146109815780639c291f8d146109975780639ca423b31461099f57600080fd5b806382edaf94116101e257806382edaf94146108f75780638b299903146109175780638da5cb5b146109265780638e05016e1461094457600080fd5b806375c4554d146108995780637d882097146108c15780637e3abeea146108d757806381db0fd51461074857600080fd5b806343583be41161031957806353ab431b116102a1578063651aaa4c11610270578063651aaa4c1461081357806366ffca28146108335780636aabddee146108535780636f9fb98a14610871578063715018a61461088457600080fd5b806353ab431b146107c05780635a9d21b2146107d65780635ffe6146146107f357806362f3765e146107c057600080fd5b80634c392bb5116102e85780634c392bb5146106e85780634cd906fe146107085780634d4700c8146107485780634e43603a1461075d5780635216aeec146107aa57600080fd5b806343583be41461066c578063447673081461068c5780634698b883146106a25780634b319713146106d257600080fd5b80631c00b0851161039c5780632c26347d1161036b5780632c26347d1461040a5780633251c307146105d157806332bc298c146105f857806333af22b01461060f5780633ccfd60b1461065757600080fd5b80631c00b0851461040a5780631dba5b08146105445780631fd0c2fe1461057d5780632ba285e61461059d57600080fd5b806310f65b3b116103d857806310f65b3b146104c4578063153ab9df146104e45780631b6cfc58146105045780631b9a26f01461052457600080fd5b806301c234a81461040a57806303f9c79314610433578063059f8b16146104485780630a6b784e1461045e575b600080fd5b34801561041657600080fd5b5061042061271081565b6040519081526020015b60405180910390f35b610446610441366004613812565b610c82565b005b34801561045457600080fd5b50610420600b5481565b34801561046a57600080fd5b506104af61047936600461382d565b6001600160a01b039182166000908152600a60209081526040808320939094168252919091522060018101546002909101549091565b6040805192835260208301919091520161042a565b3480156104d057600080fd5b506104206104df36600461393f565b6117c4565b3480156104f057600080fd5b506104206104ff366004613812565b6117e5565b34801561051057600080fd5b5061044661051f366004613860565b611bf2565b34801561053057600080fd5b5061042061053f366004613812565b611d7e565b34801561055057600080fd5b5060045460035460065447905b60408051948552602085019390935291830152606082015260800161042a565b34801561058957600080fd5b5061042061059836600461382d565b611e1c565b3480156105a957600080fd5b506105bd6105b8366004613812565b611ee9565b60405161042a9897969594939291906139bc565b3480156105dd57600080fd5b506105e6600581565b60405160ff909116815260200161042a565b34801561060457600080fd5b506104206201518081565b34801561061b57600080fd5b5061062f61062a36600461382d565b611fec565b604080519586526020860194909452928401919091526060830152608082015260a00161042a565b34801561066357600080fd5b50610446612050565b34801561067857600080fd5b5061055d610687366004613812565b6123bd565b34801561069857600080fd5b506104206103e881565b3480156106ae57600080fd5b506106c26106bd3660046138c6565b612643565b60405161042a9493929190613a66565b3480156106de57600080fd5b5061042060055481565b3480156106f457600080fd5b5061042061070336600461382d565b612915565b34801561071457600080fd5b5061073073d18268d2212091b65e770c27addd5a96024442b381565b6040516001600160a01b03909116815260200161042a565b34801561075457600080fd5b50610420600a81565b34801561076957600080fd5b5061077d610778366004613812565b612935565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161042a565b3480156107b657600080fd5b5061042060045481565b3480156107cc57600080fd5b5061042061012c81565b3480156107e257600080fd5b50610420683635c9adc5dea0000081565b3480156107ff57600080fd5b5061044661080e36600461393f565b6129b6565b34801561081f57600080fd5b5061042061082e36600461382d565b612a42565b34801561083f57600080fd5b5061044661084e36600461391b565b612ad6565b34801561085f57600080fd5b5061042069043c33c193756480000081565b34801561087d57600080fd5b5047610420565b34801561089057600080fd5b50610446612b17565b3480156108a557600080fd5b50610730731f2ce24405461ecb42f68d76683bfff7770f1b9281565b3480156108cd57600080fd5b5061042060035481565b3480156108e357600080fd5b506104206108f2366004613812565b612b8b565b34801561090357600080fd5b50600754610730906001600160a01b031681565b34801561092357600080fd5b50005b34801561093257600080fd5b506000546001600160a01b0316610730565b34801561095057600080fd5b5061073073aff3280999431555baa4266f9d17ce7c4907937281565b34801561097857600080fd5b50610420606481565b34801561098d57600080fd5b5061042060065481565b610446612bfb565b3480156109ab57600080fd5b506109bf6109ba366004613812565b612c2a565b60405161042a9190613a19565b3480156109d857600080fd5b506109ec6109e7366004613812565b612ca3565b604051901515815260200161042a565b348015610a0857600080fd5b50610a68610a17366004613812565b600c60205260009081526040902060018101546003820154601883015460199093015463ffffffff831693600160201b9093046001600160a01b03169261ffff8116916201000090910460ff169086565b6040805163ffffffff90971687526001600160a01b0390951660208701529385019290925261ffff16606084015260ff16608083015260a082015260c00161042a565b348015610ab757600080fd5b50610420610ac6366004613812565b6001600160a01b03166000908152600c602052604090205490565b348015610aed57600080fd5b506109ec610afc36600461389c565b612d27565b348015610b0d57600080fd5b506104206101f481565b348015610b2357600080fd5b50610446610b32366004613812565b612f87565b348015610b4357600080fd5b50610446610b5236600461389c565b61310f565b348015610b6357600080fd5b50610420610b7236600461393f565b6133ff565b348015610b8357600080fd5b50610420670de0b6b3a764000081565b348015610b9f57600080fd5b50610420686c6b935b8bbd40000081565b348015610bbc57600080fd5b5061073073244220adf0aa433aea1d52119cc56d6394053d6f81565b348015610be457600080fd5b50610420610bf3366004613812565b61340f565b348015610c0457600080fd5b506105e6600a81565b348015610c1957600080fd5b50610446610c28366004613812565b61346a565b348015610c3957600080fd5b50610420610c48366004613812565b613554565b348015610c5957600080fd5b50610420610c6836600461382d565b6135f3565b348015610c7957600080fd5b50610420613637565b333b158015610c9057503332145b610c9957600080fd5b670de0b6b3a7640000341015610d005760405162461bcd60e51b815260206004820152602160248201527f4d696e696d756d206465706f73697420616d6f756e742069732031204d4154496044820152604360f81b60648201526084015b60405180910390fd5b336000908152600c602052604090208054606411610d6a5760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d20313030206465706f736974732066726f6d206164647265736044820152607360f81b6064820152608401610cf7565b6000610d84612710610d7e346101f461369e565b90613692565b90506000610d9a612710610d7e346101f461369e565b90506000610db0612710610d7e3461012c61369e565b60405190915073244220adf0aa433aea1d52119cc56d6394053d6f9084156108fc029085906000818181858888f19350505050158015610df4573d6000803e3d6000fd5b5060405173aff3280999431555baa4266f9d17ce7c490793729083156108fc029084906000818181858888f19350505050158015610e36573d6000803e3d6000fd5b5060405173d18268d2212091b65e770c27addd5a96024442b39082156108fc029083906000818181858888f19350505050158015610e78573d6000803e3d6000fd5b50337f2899dc8c12def1caa9accb64257cf2fd9f960f21bb27a560a757eae3c2ec43c1610eaf83610ea987876136aa565b906136aa565b60405190815260200160405180910390a26001840154600090600160201b90046001600160a01b0316610f9657506001610ee886612ca3565b8015610efd57506001600160a01b0386163314155b15610f6557600180860180546001600160a01b038916600160201b8102640100000000600160c01b0319909216919091179091556000908152600c60209081526040822060020180549384018155825290200180546001600160a01b03191633179055610f96565b600185018054640100000000600160c01b031916771f2ce24405461ecb42f68d76683bfff7770f1b92000000001790555b6001850154600090600160201b90046001600160a01b0316156115945760015460009067ffffffffffffffff811115610fd157610fd1613ca8565b604051908082528060200260200182016040528015610ffa578160200160208202803683370190505b5060018801549091503390600160201b90046001600160a01b03166000805b600a811015611513576001600160a01b03831661103557611513565b6000816110fa576001600160a01b0384166000908152600c602052604090206018015460018054909162010000900460ff1690811061107657611076613c92565b60009182526020808320909101546001600160a01b0387168352600c90915260409091206018015460ff620100009091041693509050825b6001878260ff16815181106110c5576110c5613c92565b9115156020928302919091019091015260ff81166110e2576110f4565b806110ec81613c24565b9150506110ae565b5061128f565b6001600160a01b0384166000908152600c602052604090206018015460ff808516620100009092041611801561116d57506001600160a01b0384166000908152600c60205260409020601801548651879162010000900460ff1690811061116357611163613c92565b6020026020010151155b1561128f5761121c60018460ff168154811061118b5761118b613c92565b6000918252602080832090910154604080518082018252601d81527f5265662070657263656e742063616c63756c6174696f6e206572726f72000000818501526001600160a01b038a168552600c9093529092206018015460018054909160ff620100009091041690811061120257611202613c92565b90600052602060002001546136b69092919063ffffffff16565b6001600160a01b0385166000908152600c602052604090206018015462010000900460ff1693509050825b6001878260ff168151811061125e5761125e613c92565b9115156020928302919091019091015260ff811661127b5761128d565b8061128581613c24565b915050611247565b505b60006112a1612710610d7e348561369e565b9050821580156112cf57506001600160a01b0385166000908152600c602052604090206018015461ffff1615155b80156112db5750600081115b15611391576001600160a01b0385166000908152600c60205260409020601801546113139061271090610d7e90849061ffff1661369e565b604051909850339089156108fc02908a906000818181858888f19350505050158015611343573d6000803e3d6000fd5b5060405188815233906001600160a01b038716907f9ecbf25f4de0558ad0f8971a5c6f95e9607efde9c8880c8faa6b2cf7fbafcee39060200160405180910390a361138e81896136e2565b90505b801561144c576040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156113cd573d6000803e3d6000fd5b506001600160a01b0385166000908152600c60205260409020600301546113f490826136aa565b6001600160a01b0386166000818152600c6020908152604091829020600301939093555183815285923392917fd41f7e766eebcc7ff42b11ac8691bdf864db4afc0c55e71d629d54edce460d98910160405180910390a45b6001600160a01b0385166000908152600c6020526040902060040183600a811061147857611478613c92565b01805490600061148783613c41565b919050555088156114d3576001600160a01b0385166000908152600c60205260409020600e0183600a81106114be576114be613c92565b0180549060006114cd83613c41565b91905055505b50506001600160a01b038084166000908152600c6020526040902060010154939450600160201b909304909216918061150b81613c41565b915050611019565b5060018a0154600160201b90046001600160a01b0316915060005b600581101561158e576001600160a01b03831661154a5761158e565b61155483346136ee565b6001600160a01b039283166000908152600c6020526040902060010154600160201b9004909216918061158681613c41565b91505061152e565b50505050505b85546115e55760018601805463ffffffff19164263ffffffff161790556040513381527f9fd565cd14c3c391679eb0cad12a14dcf7534e9d3462bcb9b67a098a9bbbc24a9060200160405180910390a15b856000016040518060800160405280348152602001600081526020018381526020014263ffffffff16815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055505050611696346004546136aa90919063ffffffff16565b600455600380549060006116a983613c41565b909155506116bd905061012c6127106136aa565b60065410156116e45760006116d0613637565b90506006548111156116e25760068190555b505b60405134815233907f2cb77763bc1e8490c1a904905c4d74b4269919aca114464f4bb4d911e60de3649060200160405180910390a26007546001600160a01b03163b156117bb576007546001600160a01b03166000818152600860205260409020600201546340c10f1990339061175c90349061369e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156117a257600080fd5b505af11580156117b6573d6000803e3d6000fd5b505050505b50505050505050565b600281815481106117d457600080fd5b600091825260209091200154905081565b6001600160a01b0381166000908152600c6020908152604080832081518154610160948102820185019093526101408101838152859491938492849190879085015b82821015611881576000848152602090819020604080516080810182526004860290920180548352600180820154848601526002820154928401929092526003015463ffffffff1660608301529083529092019101611827565b50505090825250600182015463ffffffff8116602080840191909152600160201b9091046001600160a01b0316604080840191909152600284018054825181850281018501909352808352606090940193919290919083018282801561191057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118f2575b505050918352505060038201546020820152604080516101408101825291019060048301600a8282826020028201915b8154815260200190600101908083116119405750505091835250506040805161014081019182905260209092019190600e840190600a9082845b81548152602001906001019080831161197a575050509183525050601882015461ffff8116602083015262010000900460ff166040820152601990910154606090910152905060006119cb84611d7e565b905060008060005b84515160ff82161015611be757611a18600286600001518360ff16815181106119fe576119fe613c92565b60200260200101516000015161369e90919063ffffffff16565b8551805160ff8416908110611a2f57611a2f613c92565b6020026020010151602001511015611bd557846020015163ffffffff1685600001518260ff1681518110611a6557611a65613c92565b60200260200101516060015163ffffffff161115611af457611aed62015180610d7e611ac488600001518560ff1681518110611aa357611aa3613c92565b60200260200101516060015163ffffffff16426136e290919063ffffffff16565b611ae7612710610d7e8a8c600001518960ff16815181106119fe576119fe613c92565b9061369e565b9150611b1e565b611b1b62015180610d7e611ac4886020015163ffffffff16426136e290919063ffffffff16565b91505b611b3c600286600001518360ff16815181106119fe576119fe613c92565b611b738387600001518460ff1681518110611b5957611b59613c92565b6020026020010151602001516136aa90919063ffffffff16565b1115611bc857611bc585600001518260ff1681518110611b9557611b95613c92565b602002602001015160200151611bbf600288600001518560ff16815181106119fe576119fe613c92565b906136e2565b91505b611bd283836136aa565b92505b80611bdf81613c5c565b9150506119d3565b509095945050505050565b6000546001600160a01b03163314611c1c5760405162461bcd60e51b8152600401610cf790613b13565b600081118015611c2e57506103e88111155b611c6f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420726174652076616c756560701b6044820152606401610cf7565b823b611cd65760405162461bcd60e51b815260206004820152603060248201527f50726f76696465642061646472657373206973206e6f74206120746f6b656e2060448201526f636f6e7472616374206164647265737360801b6064820152608401610cf7565b813b611cf45760405162461bcd60e51b8152600401610cf790613b48565b600780546001600160a01b03199081166001600160a01b03958616908117909255604080516060810182528381529486166020808701828152878401968752600086815260088352848120985189548716908b161789559051600189018054871691909a161790985594516002909601959095559385526009909252919092208054909216179055565b6001600160a01b0381166000908152600c60205260408120611d9f83612ca3565b15611e12576000611daf8461340f565b6001830154909150600090611ddf90600a90611ae7906201518090610d7e90429063ffffffff908116906136e216565b90506103e8811115611df057506103e85b611e0982610ea9836006546136aa90919063ffffffff16565b95945050505050565b5050600654919050565b600080611e298484612915565b6001600160a01b038086166000908152600a6020908152604080832093881683529290522060010154909150611edf906201518090610d7e90611e6d9042906136e2565b600b54611ae79081612710610d7e611e85828b6136aa565b600a60008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e6001600160a01b03166001600160a01b031681526020019081526020016000206000015461369e90919063ffffffff16565b9150505b92915050565b600080600080611ef76137d7565b611eff6137d7565b6001600160a01b038781166000908152600c60205260408082206001810154601880830154600160201b90920490951680855283852090950154600383015460198401548551610140810196879052969788979596909561ffff808716969516946004890193600e8a01936201000090920460ff169290918590600a9082845b815481526020019060010190808311611f7f57505060408051610140810191829052949850879350600a9250905082845b815481526020019060010190808311611fb057505050505092508160ff1691509850985098509850985098509850985050919395975091939597565b6001600160a01b038281166000908152600a602090815260408083209385168352929052908120805460038201546004909201548392839283928392906120338a8a6135f3565b61203d8b8b612a42565b939b929a50909850965090945092505050565b336000818152600c602052604081209161206990611d7e565b905060008060005b845460ff821610156122d6576120b16002866000018360ff168154811061209a5761209a613c92565b60009182526020909120600490910201549061369e565b856000018260ff16815481106120c9576120c9613c92565b90600052602060002090600402016001015410156122c4576001850154855463ffffffff90911690869060ff841690811061210657612106613c92565b600091825260209091206003600490920201015463ffffffff1611156121995761219262015180610d7e612170886000018560ff168154811061214b5761214b613c92565b6000918252602090912060036004909202010154429063ffffffff908116906136e216565b611ae7612710610d7e8a8c6000018960ff168154811061209a5761209a613c92565b91506121c3565b60018501546121c0906201518090610d7e9061217090429063ffffffff908116906136e216565b91505b6121e06002866000018360ff168154811061209a5761209a613c92565b61221c83876000018460ff16815481106121fc576121fc613c92565b9060005260206000209060040201600101546136aa90919063ffffffff16565b111561226f5761226c856000018260ff168154811061223d5761223d613c92565b906000526020600020906004020160010154611bbf6002886000018560ff168154811061209a5761209a613c92565b91505b61228b82866000018360ff16815481106121fc576121fc613c92565b856000018260ff16815481106122a3576122a3613c92565b60009182526020909120600160049092020101556122c183836136aa565b92505b806122ce81613c5c565b915050612071565b506000821161231f5760405162461bcd60e51b81526020600482015260156024820152745573657220686173206e6f206469766964656e647360581b6044820152606401610cf7565b478281101561232c578092505b60018501805463ffffffff19164263ffffffff1617905560405133906108fc8515029085906000818181858888f19350505050158015612370573d6000803e3d6000fd5b5060055461237e90846136aa565b60055560405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a25050505050565b6001600160a01b0381166000908152600c6020908152604080832081518154610160948102820185019093526101408101838152859485948594859493909284928491879085015b8282101561245f576000848152602090819020604080516080810182526004860290920180548352600180820154848601526002820154928401929092526003015463ffffffff1660608301529083529092019101612405565b50505090825250600182015463ffffffff8116602080840191909152600160201b9091046001600160a01b031660408084019190915260028401805482518185028101850190935280835260609094019391929091908301828280156124ee57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124d0575b505050918352505060038201546020820152604080516101408101825291019060048301600a8282826020028201915b81548152602001906001019080831161251e5750505091835250506040805161014081019182905260209092019190600e840190600a9082845b815481526020019060010190808311612558575050509183525050601882015461ffff81166020808401919091526201000090910460ff1660408301526019909201546060909101528101519091506000906125cf90600a90611ae7906201518090610d7e90429063ffffffff908116906136e216565b90506103e88111156125e057506103e85b61012c6125ec88612ca3565b156125f757816125fa565b60005b612613600a611ae74769043c33c1937564800000613692565b61261c8a612ca3565b1561262f5761262a8a61340f565b612632565b60005b955095509550955050509193509193565b6001600160a01b0383166000908152600c602052604081206060918291829182919061266f87896136e2565b825490915081111561267f575080545b60008167ffffffffffffffff81111561269a5761269a613ca8565b6040519080825280602002602001820160405280156126c3578160200160208202803683370190505b50905060008267ffffffffffffffff8111156126e1576126e1613ca8565b60405190808252806020026020018201604052801561270a578160200160208202803683370190505b50905060008367ffffffffffffffff81111561272857612728613ca8565b604051908082528060200260200182016040528015612751578160200160208202803683370190505b50905060008467ffffffffffffffff81111561276f5761276f613ca8565b604051908082528060200260200182016040528015612798578160200160208202803683370190505b50905060008b5b8d81111561290057876127b3600183613bf6565b815481106127c3576127c3613c92565b9060005260206000209060040201600001548683815181106127e7576127e7613c92565b6020908102919091010152876127fe600183613bf6565b8154811061280e5761280e613c92565b90600052602060002090600402016001015485838151811061283257612832613c92565b602090810291909101015287612849600183613bf6565b8154811061285957612859613c92565b90600052602060002090600402016002015484838151811061287d5761287d613c92565b602090810291909101015287612894600183613bf6565b815481106128a4576128a4613c92565b6000918252602090912060036004909202010154835163ffffffff909116908490849081106128d5576128d5613c92565b6020908102919091010152816128ea81613c41565b92505080806128f890613c0d565b91505061279f565b50939d929c50909a5098509650505050505050565b600061292e6129248484612a42565b610ea985856135f3565b9392505050565b600080600080600080600061294988611d7e565b90506000612956896117e5565b905060006129638a612b8b565b905060006129868b6001600160a01b03166000908152600c602052604090205490565b905060006129938c613554565b905060006129a08d61340f565b959d949c50929a50909850965091945092505050565b6000546001600160a01b031633146129e05760405162461bcd60e51b8152600401610cf790613b13565b6000811180156129f1575060328111155b612a3d5760405162461bcd60e51b815260206004820152601a60248201527f4d756c7469706c696572206973206f7574206f662072616e67650000000000006044820152606401610cf7565b600b55565b6001600160a01b038083166000908152600a60209081526040808320938516835292905290812060020154612a7957506000611ee3565b6001600160a01b038084166000908152600a60209081526040808320938616835292905290812060020154612abf90606490611ae7906201518090610d7e9042906136e2565b905061271081111561292e57612710915050611ee3565b6127108161ffff161115612ae957600080fd5b336000908152600c60205260409020805415612b135760188101805461ffff191661ffff84161790555b5050565b6000546001600160a01b03163314612b415760405162461bcd60e51b8152600401610cf790613b13565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b0381166000908152600c6020526040812081805b8254811015612bf357612bdf836000018281548110612bc757612bc7613c92565b600091825260209091206004909102015483906136aa565b915080612beb81613c41565b915050612ba6565b509392505050565b60405133903480156108fc02916000818181858888f19350505050158015612c27573d6000803e3d6000fd5b50565b6001600160a01b0381166000908152600c6020908152604091829020600201805483518184028101840190945280845260609392830182828015612c9757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612c79575b50505050509050919050565b6001600160a01b0381166000908152600c6020526040812080541580159061292e57508054612ced906002908390612cdd90600190613bf6565b8154811061209a5761209a613c92565b81548290612cfd90600190613bf6565b81548110612d0d57612d0d613c92565b906000526020600020906004020160010154109392505050565b6000808211612d785760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420746f6b656e7320616d6f756e742076616c756500000000006044820152606401610cf7565b823b612d965760405162461bcd60e51b8152600401610cf790613b48565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd90606401602060405180830381600087803b158015612de457600080fd5b505af1158015612df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1c91906138f9565b612e2857506000611ee3565b6000612e343385611e1c565b90508015612e9557336000908152600a602090815260408083206001600160a01b0388168452909152902060030154612e6d90826136aa565b336000908152600a602090815260408083206001600160a01b03891684529091529020600301555b336000908152600a602090815260408083206001600160a01b0388168452909152902054612ec390846136aa565b336000908152600a602090815260408083206001600160a01b0389168452909152902090815542600182015560020154612f2257336000908152600a602090815260408083206001600160a01b03881684529091529020426002909101555b6001600160a01b03808516600081815260096020526040908190205490519192169033907f6e613e504dcbe267f60e295b08e0a211b63db8690d660e5ed4f864d409bb662090612f759088815260200190565b60405180910390a45060019392505050565b6000612fc3612f963384611e1c565b336000908152600a602090815260408083206001600160a01b0388168452909152902060030154906136aa565b90508015612b13576001600160a01b0382811660009081526009602052604090205416803b1561310a57336000908152600a602090815260408083206001600160a01b0387168452909152812042600182015560038101919091556004015461302c90836136aa565b336000818152600a602090815260408083206001600160a01b03898116855292529182902060049081019490945590516340c10f1960e01b815292830191909152602482018490528216906340c10f1990604401600060405180830381600087803b15801561309a57600080fd5b505af11580156130ae573d6000803e3d6000fd5b50505050826001600160a01b0316816001600160a01b0316336001600160a01b03167ff226a68f394fc92f62103b8c25167a003496cc208ebeede628ba73e76916c17a8560405161310191815260200190565b60405180910390a45b505050565b6000811161315f5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420746f6b656e7320616d6f756e742076616c756500000000006044820152606401610cf7565b336000908152600a602090815260408083206001600160a01b03861684529091529020548111156131e15760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820746f6b656e73206f6e20746865207374616b652062604482015265616c616e636560d01b6064820152608401610cf7565b813b6131ff5760405162461bcd60e51b8152600401610cf790613b48565b600061320b3384611e1c565b9050801561326c57336000908152600a602090815260408083206001600160a01b038716845290915290206003015461324490826136aa565b336000908152600a602090815260408083206001600160a01b03881684529091529020600301555b336000908152600a602090815260408083206001600160a01b038716845290915290205461329a90836136e2565b336000908152600a602090815260408083206001600160a01b0388168452909152902081815542600190910155156132fb57336000908152600a602090815260408083206001600160a01b0387168452909152902042600290910155613323565b336000908152600a602090815260408083206001600160a01b03871684529091528120600201555b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561336b57600080fd5b505af115801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906138f9565b6133ac57600080fd5b6001600160a01b03808416600081815260096020526040908190205490519192169033907fb9f634dc06666f582d41ccfbbb32947903698e0dbd4cc2a28f7c48999e044ffe906131019087815260200190565b600181815481106117d457600080fd5b6000806000613433846001600160a01b03166000908152600c602052604090205490565b1115611ee357613454600a611ae7686c6b935b8bbd400000610d7e87612b8b565b9050612710811115611ee3575061271092915050565b6000546001600160a01b031633146134945760405162461bcd60e51b8152600401610cf790613b13565b6001600160a01b0381166134f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cf7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600c602052604081206003810154825b8254811015612bf3576135df83600001828154811061359457613594613c92565b906000526020600020906004020160020154610ea98560000184815481106135be576135be613c92565b906000526020600020906004020160010154856136aa90919063ffffffff16565b9150806135eb81613c41565b915050613573565b6001600160a01b038083166000908152600a602090815260408083209385168352929052908120548190612abf90606490611ae790683635c9adc5dea00000613692565b60004781613660613657600a611ae78569043c33c1937564800000613692565b61012c906136aa565b905061367061012c6127106136aa565b81101561367d5792915050565b61368b61012c6127106136aa565b9250505090565b600061292e8284613bb5565b600061292e8284613bd7565b600061292e8284613b9d565b600081848411156136da5760405162461bcd60e51b8152600401610cf79190613abe565b505050900390565b600061292e8284613bf6565b6001600160a01b0382166000908152600c602052604090206019015461371490826136aa565b6001600160a01b0383166000908152600c602052604081206019019190915560025461374290600190613bf6565b90505b60ff81161561310a5760028160ff168154811061376457613764613c92565b60009182526020808320909101546001600160a01b0386168352600c909152604090912060190154106137c5576001600160a01b0383166000908152600c60205260409020601801805462ff000019166201000060ff841602179055505050565b806137cf81613c24565b915050613745565b604051806101400160405280600a906020820280368337509192915050565b80356001600160a01b038116811461380d57600080fd5b919050565b60006020828403121561382457600080fd5b61292e826137f6565b6000806040838503121561384057600080fd5b613849836137f6565b9150613857602084016137f6565b90509250929050565b60008060006060848603121561387557600080fd5b61387e846137f6565b925061388c602085016137f6565b9150604084013590509250925092565b600080604083850312156138af57600080fd5b6138b8836137f6565b946020939093013593505050565b6000806000606084860312156138db57600080fd5b6138e4846137f6565b95602085013595506040909401359392505050565b60006020828403121561390b57600080fd5b8151801515811461292e57600080fd5b60006020828403121561392d57600080fd5b813561ffff8116811461292e57600080fd5b60006020828403121561395157600080fd5b5035919050565b8060005b600a81101561397b57815184526020938401939091019060010161395c565b50505050565b600081518084526020808501945080840160005b838110156139b157815187529582019590820190600101613995565b509495945050505050565b6001600160a01b038916815261ffff8881166020830152871660408201526060810186905261034081016139f36080830187613958565b613a016101c0830186613958565b61030082019390935261032001529695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613a5a5783516001600160a01b031683529284019291840191600101613a35565b50909695505050505050565b608081526000613a796080830187613981565b8281036020840152613a8b8187613981565b90508281036040840152613a9f8186613981565b90508281036060840152613ab38185613981565b979650505050505050565b600060208083528351808285015260005b81811015613aeb57858101830151858201604001528201613acf565b81811115613afd576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526035908201527f50726f76696465642061646472657373206973206e6f74206120666c697020746040820152746f6b656e20636f6e7472616374206164647265737360581b606082015260800190565b60008219821115613bb057613bb0613c7c565b500190565b600082613bd257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613bf157613bf1613c7c565b500290565b600082821015613c0857613c08613c7c565b500390565b600081613c1c57613c1c613c7c565b506000190190565b600060ff821680613c3757613c37613c7c565b6000190192915050565b6000600019821415613c5557613c55613c7c565b5060010190565b600060ff821660ff811415613c7357613c73613c7c565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220d39690193a22c966c9a5f47667c4d460eaec3f9c290a3f84f09b7769f90360a864736f6c63430008070033

Deployed ByteCode Sourcemap

4595:26595:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6345:48;;;;;;;;;;;;6388:5;6345:48;;;;;11763:25:1;;;11751:2;11736:18;6345:48:0;;;;;;;;8864:4931;;;;;;:::i;:::-;;:::i;:::-;;7378:29;;;;;;;;;;;;;;;;30404:308;;;;;;;;;;-1:-1:-1;30404:308:0;;;;;:::i;:::-;-1:-1:-1;;;;;30564:20:0;;;30519:7;30564:20;;;:6;:20;;;;;;;;:47;;;;;;;;;;;:58;;;;30633:62;;;;;30564:58;;30404:308;;;;;11973:25:1;;;12029:2;12014:18;;12007:34;;;;11946:18;30404:308:0;11799:248:1;4871:152:0;;;;;;;;;;-1:-1:-1;4871:152:0;;;;;:::i;:::-;;:::i;17699:1399::-;;;;;;;;;;-1:-1:-1;17699:1399:0;;;;;:::i;:::-;;:::i;23487:650::-;;;;;;;;;;-1:-1:-1;23487:650:0;;;;;:::i;:::-;;:::i;17048:643::-;;;;;;;;;;-1:-1:-1;17048:643:0;;;;;:::i;:::-;;:::i;21294:177::-;;;;;;;;;;-1:-1:-1;21394:13:0;;21409;;21447:15;;21424:21;;21294:177;;;;12283:25:1;;;12339:2;12324:18;;12317:34;;;;12367:18;;;12360:34;12425:2;12410:18;;12403:34;12270:3;12255:19;21294:177:0;12052:391:1;27070:506:0;;;;;;;;;;-1:-1:-1;27070:506:0;;;;;:::i;:::-;;:::i;22789:514::-;;;;;;;;;;-1:-1:-1;22789:514:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;5078:49::-;;;;;;;;;;;;5126:1;5078:49;;;;;14227:4:1;14215:17;;;14197:36;;14185:2;14170:18;5078:49:0;14055:184:1;6296:42:0;;;;;;;;;;;;6332:6;6296:42;;29841:555;;;;;;;;;;-1:-1:-1;29841:555:0;;;;;:::i;:::-;;:::i;:::-;;;;12707:25:1;;;12763:2;12748:18;;12741:34;;;;12791:18;;;12784:34;;;;12849:2;12834:18;;12827:34;12892:3;12877:19;;12870:35;12694:3;12679:19;29841:555:0;12448:463:1;13803:1848:0;;;;;;;;;;;;;:::i;22119:662::-;;;;;;;;;;-1:-1:-1;22119:662:0;;;;;:::i;:::-;;:::i;5801:47::-;;;;;;;;;;;;5844:4;5801:47;;20271:1015;;;;;;;;;;-1:-1:-1;20271:1015:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6472:29::-;;;;;;;;;;;;;;;;25579:281;;;;;;;;;;-1:-1:-1;25579:281:0;;;;;:::i;:::-;;:::i;5581:103::-;;;;;;;;;;;;5641:42;5581:103;;;;;-1:-1:-1;;;;;3246:32:1;;;3228:51;;3216:2;3201:18;5581:103:0;3082:203:1;6240:46:0;;;;;;;;;;;;6284:2;6240:46;;21479:632;;;;;;;;;;-1:-1:-1;21479:632:0;;;;;:::i;:::-;;:::i;:::-;;;;13203:25:1;;;13259:2;13244:18;;13237:34;;;;13287:18;;;13280:34;;;;13345:2;13330:18;;13323:34;13388:3;13373:19;;13366:35;13432:3;13417:19;;13410:35;13190:3;13175:19;21479:632:0;12916:535:1;6437:28:0;;;;;;;;;;;;;;;;5691:43;;;;;;;;;;;;5731:3;5691:43;;7183:61;;;;;;;;;;;;7234:10;7183:61;;30720:187;;;;;;;;;;-1:-1:-1;30720:187:0;;;;;:::i;:::-;;:::i;25021:550::-;;;;;;;;;;-1:-1:-1;25021:550:0;;;;;:::i;:::-;;:::i;15659:248::-;;;;;;;;;;-1:-1:-1;15659:248:0;;;;;:::i;:::-;;:::i;5979:59::-;;;;;;;;;;;;6027:11;5979:59;;15915:107;;;;;;;;;;-1:-1:-1;15993:21:0;15915:107;;3333:148;;;;;;;;;;;;;:::i;5136:110::-;;;;;;;;;;;;5203:42;5136:110;;6402:28;;;;;;;;;;;;;;;;19558:325;;;;;;;;;;-1:-1:-1;19558:325:0;;;;;:::i;:::-;;:::i;6549:35::-;;;;;;;;;;-1:-1:-1;6549:35:0;;;;-1:-1:-1;;;;;6549:35:0;;;31041:41;;;;;;;;;;;8864:4931;3098:87;;;;;;;;;;-1:-1:-1;3144:7:0;3171:6;-1:-1:-1;;;;;3171:6:0;3098:87;;5421:103;;;;;;;;;;;;5481:42;5421:103;;7049:54;;;;;;;;;;;;7100:3;7049:54;;6510:30;;;;;;;;;;;;;;;;31090:95;;;:::i;30915:118::-;;;;;;;;;;-1:-1:-1;30915:118:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19106:292::-;;;;;;;;;;-1:-1:-1;19106:292:0;;;;;:::i;:::-;;:::i;:::-;;;6762:14:1;;6755:22;6737:41;;6725:2;6710:18;19106:292:0;6597:187:1;7884:38:0;;;;;;;;;;-1:-1:-1;7884:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7884:38:0;;;-1:-1:-1;;;;;7884:38:0;;;;;;;;;;;;;;;;;;;13765:10:1;13753:23;;;13735:42;;-1:-1:-1;;;;;13813:32:1;;;13808:2;13793:18;;13786:60;13862:18;;;13855:34;;;;13937:6;13925:19;13920:2;13905:18;;13898:47;13994:4;13982:17;13976:3;13961:19;;13954:46;13833:3;14016:19;;14009:35;13722:3;13707:19;7884:38:0;13456:594:1;19406:144:0;;;;;;;;;;-1:-1:-1;19406:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;19508:18:0;19481:7;19508:18;;;:5;:18;;;;;:34;;19406:144;25868:1194;;;;;;;;;;-1:-1:-1;25868:1194:0;;;;;:::i;:::-;;:::i;5371:43::-;;;;;;;;;;;;5411:3;5371:43;;27584:923;;;;;;;;;;-1:-1:-1;27584:923:0;;;;;:::i;:::-;;:::i;28515:1318::-;;;;;;;;;;-1:-1:-1;28515:1318:0;;;;;:::i;:::-;;:::i;4775:89::-;;;;;;;;;;-1:-1:-1;4775:89:0;;;;;:::i;:::-;;:::i;4716:51::-;;;;;;;;;;;;4760:7;4716:51;;6177:55;;;;;;;;;;;;6222:10;6177:55;;5261:103;;;;;;;;;;;;5321:42;5261:103;;16570:470;;;;;;;;;;-1:-1:-1;16570:470:0;;;;;:::i;:::-;;:::i;5030:41::-;;;;;;;;;;;;5069:2;5030:41;;3495:244;;;;;;;;;;-1:-1:-1;3495:244:0;;;;;:::i;:::-;;:::i;19891:372::-;;;;;;;;;;-1:-1:-1;19891:372:0;;;;;:::i;:::-;;:::i;24602:411::-;;;;;;;;;;-1:-1:-1;24602:411:0;;;;;:::i;:::-;;:::i;16030:532::-;;;;;;;;;;;;;:::i;8864:4931::-;8944:10;23427:17;23463:8;;;8932:50;;-1:-1:-1;8959:10:0;8973:9;8959:23;8932:50;8924:59;;;;;;4760:7;9004:9;:30;;8996:76;;;;-1:-1:-1;;;8996:76:0;;9123:2:1;8996:76:0;;;9105:21:1;9162:2;9142:18;;;9135:30;9201:34;9181:18;;;9174:62;-1:-1:-1;;;9252:18:1;;;9245:31;9293:19;;8996:76:0;;;;;;;;;9111:10;9085:17;9105;;;:5;:17;;;;;9143:20;;4706:3;-1:-1:-1;9135:81:0;;;;-1:-1:-1;;;9135:81:0;;10241:2:1;9135:81:0;;;10223:21:1;10280:2;10260:18;;;10253:30;10319:34;10299:18;;;10292:62;-1:-1:-1;;;10370:18:1;;;10363:31;10411:19;;9135:81:0;10039:397:1;9135:81:0;9229:20;9252:50;6388:5;9252:28;:9;5411:3;9252:13;:28::i;:::-;:32;;:50::i;:::-;9229:73;-1:-1:-1;9313:20:0;9336:50;6388:5;9336:28;:9;5571:3;9336:13;:28::i;:50::-;9313:73;-1:-1:-1;9397:20:0;9420:50;6388:5;9420:28;:9;5731:3;9420:13;:28::i;:50::-;9483:40;;9397:73;;-1:-1:-1;5321:42:0;;9483:40;;;;;9510:12;;9483:40;;;;9510:12;5321:42;9483:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9534:40:0;;5481:42;;9534:40;;;;;9561:12;;9534:40;;;;9561:12;5481:42;9534:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9585:40:0;;5641:42;;9585:40;;;;;9612:12;;9585:40;;;;9612:12;5641:42;9585:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9652:10:0;9643:70;9664:48;9699:12;9664:30;:12;9681;9664:16;:30::i;:::-;:34;;:48::i;:::-;9643:70;;11763:25:1;;;11751:2;11736:18;9643:70:0;;;;;;;9763:13;;;;9726:14;;-1:-1:-1;;;9763:13:0;;-1:-1:-1;;;;;9763:13:0;9759:335;;-1:-1:-1;9819:4:0;9842:18;9851:8;9842;:18::i;:::-;:44;;;;-1:-1:-1;;;;;;9864:22:0;;9876:10;9864:22;;9842:44;9838:245;;;9905:13;;;;:24;;-1:-1:-1;;;;;9905:24:0;;-1:-1:-1;;;9905:24:0;;-1:-1:-1;;;;;;9905:24:0;;;;;;;;;;-1:-1:-1;9946:15:0;;;:5;:15;;;;;;;:25;;:42;;;;;;;;;;;;;;-1:-1:-1;;;;;;9946:42:0;9977:10;9946:42;;;9838:245;;;10027:13;;;:40;;-1:-1:-1;;;;;;10027:40:0;;;;;9838:245;10142:13;;;;10106:21;;-1:-1:-1;;;10142:13:0;;-1:-1:-1;;;;;10142:13:0;:27;10138:2804;;10231:24;:31;10186;;10220:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10220:43:0;-1:-1:-1;10340:13:0;;;;10186:77;;-1:-1:-1;10298:10:0;;-1:-1:-1;;;10340:13:0;;-1:-1:-1;;;;;10340:13:0;10280:15;;10404:2201;5069:2;10424:18;;10404:2201;;;-1:-1:-1;;;;;10472:20:0;;10468:72;;10515:5;;10468:72;10560:18;10605:6;10601:1000;;-1:-1:-1;;;;;10672:13:0;;;;;;:5;:13;;;;;:22;;;10647:24;:48;;:24;;10672:22;;;;;;10647:48;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;10732:13:0;;;;:5;:13;;;;;;;:22;;;;;;;;;;-1:-1:-1;10647:48:0;-1:-1:-1;10732:22:0;10775:214;10873:4;10850:17;10868:1;10850:20;;;;;;;;;;:::i;:::-;:27;;;:20;;;;;;;;;;;:27;10906:6;;;10902:66;;10939:5;;10902:66;10822:3;;;;:::i;:::-;;;;10775:214;;;;10601:1000;;;-1:-1:-1;;;;;11018:13:0;;;;;;:5;:13;;;;;:22;;;:36;;;;:22;;;;;:36;:82;;;;-1:-1:-1;;;;;;11077:13:0;;;;;;:5;:13;;;;;:22;;;11059:41;;;;11077:22;;;;;;11059:41;;;;;;:::i;:::-;;;;;;;11058:42;11018:82;11014:587;;;11136:152;11217:24;11242:11;11217:37;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11136:152;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11161:13:0;;;;:5;:13;;;;;;:22;;;11136:24;:48;;:24;;11161:22;;;;;;;11136:48;;;;;;:::i;:::-;;;;;;;;;:80;;:152;;;;;:::i;:::-;-1:-1:-1;;;;;11325:13:0;;;;;;:5;:13;;;;;:22;;;;;;;;;-1:-1:-1;11123:165:0;-1:-1:-1;11325:22:0;11368:214;11466:4;11443:17;11461:1;11443:20;;;;;;;;;;:::i;:::-;:27;;;:20;;;;;;;;;;;:27;11499:6;;;11495:66;;11532:5;;11495:66;11415:3;;;;:::i;:::-;;;;11368:214;;;;11014:587;11621:14;11638:47;6388:5;11638:25;:9;11652:10;11638:13;:25::i;:47::-;11621:64;-1:-1:-1;11710:6:0;;:40;;;;-1:-1:-1;;;;;;11720:13:0;;11749:1;11720:13;;;:5;:13;;;;;:26;;;;;:30;;11710:40;:54;;;;;11763:1;11754:6;:10;11710:54;11706:385;;;-1:-1:-1;;;;;11824:13:0;;;;;;:5;:13;;;;;:26;;;11805:69;;6388:5;;11805:47;;:6;;11824:26;;11805:10;:47::i;:69::-;11897:43;;11789:85;;-1:-1:-1;11905:10:0;;11897:43;;;;;11789:85;;11897:43;;;;11789:85;11905:10;11897:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11970:42:0;;11763:25:1;;;11986:10:0;;-1:-1:-1;;;;;11970:42:0;;;;;11751:2:1;11736:18;11970:42:0;;;;;;;12046:25;:6;12057:13;12046:10;:25::i;:::-;12037:34;;11706:385;12115:10;;12111:245;;12150:32;;-1:-1:-1;;;;;12150:24:0;;;:32;;;;;12175:6;;12150:32;;;;12175:6;12150:24;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12235:13:0;;;;;;:5;:13;;;;;:19;;;12227:40;;12260:6;12227:32;:40::i;:::-;-1:-1:-1;;;;;12205:13:0;;;;;;:5;:13;;;;;;;;;:19;;:62;;;;12297:39;11763:25:1;;;12326:1:0;;12314:10;;12205:13;12297:39;;11736:18:1;12297:39:0;;;;;;;12111:245;-1:-1:-1;;;;;12376:13:0;;;;;;:5;:13;;;;;:18;;12395:1;12376:21;;;;;;;:::i;:::-;;:23;;;:21;:23;;;:::i;:::-;;;;;;12422:9;12418:85;;;-1:-1:-1;;;;;12454:13:0;;;;;;:5;:13;;;;;:24;;12479:1;12454:27;;;;;;;:::i;:::-;;:29;;;:27;:29;;;:::i;:::-;;;;;;12418:85;-1:-1:-1;;;;;;;12567:13:0;;;;;;;:5;:13;;;;;:22;;;12533:6;;-1:-1:-1;;;;12567:22:0;;;;;;;10444:3;;;;:::i;:::-;;;;10404:2201;;;-1:-1:-1;12630:13:0;;;;-1:-1:-1;;;12630:13:0;;-1:-1:-1;;;;;12630:13:0;;-1:-1:-1;12663:9:0;12658:271;5126:1;12678:27;;12658:271;;;-1:-1:-1;;;;;12735:20:0;;12731:72;;12778:5;;12731:72;12823:38;12843:6;12851:9;12823:19;:38::i;:::-;-1:-1:-1;;;;;12891:13:0;;;;;;;:5;:13;;;;;:22;;;-1:-1:-1;;;12891:22:0;;;;;;12707:3;;;;:::i;:::-;;;;12658:271;;;;10171:2771;;;;10138:2804;12958:20;;12954:137;;13000:15;;;:41;;-1:-1:-1;;13000:41:0;13025:15;13000:41;;;;;13061:18;;13068:10;3228:51:1;;13061:18:0;;3216:2:1;3201:18;13061::0;;;;;;;12954:137;13103:4;:13;;13122:61;;;;;;;;13130:9;13122:61;;;;13141:1;13122:61;;;;13144:13;13122:61;;;;13166:15;13122:61;;;;;13103:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13213:28;13231:9;13213:13;;:17;;:28;;;;:::i;:::-;13197:13;:44;13252:13;:15;;;:13;:15;;;:::i;:::-;;;;-1:-1:-1;13302:38:0;;-1:-1:-1;5782:3:0;5966:5;13302:16;:38::i;:::-;13284:15;;:56;13280:269;;;13357:26;13386:24;:22;:24::i;:::-;13357:53;;13450:15;;13429:18;:36;13425:113;;;13486:15;:36;;;13425:113;13342:207;13280:269;13566:33;;13589:9;11763:25:1;;13577:10:0;;13566:33;;11751:2:1;11736:18;13566:33:0;;;;;;;13637:20;;-1:-1:-1;;;;;13637:20:0;23427:17;23463:8;13622:166;;13688:20;;-1:-1:-1;;;;;13688:20:0;;13741:28;;;:6;:28;;;;;:33;;;13673:41;;13715:10;;13727:48;;:9;;:13;:48::i;:::-;13673:103;;-1:-1:-1;;;;;;13673:103:0;;;;;;;-1:-1:-1;;;;;4967:32:1;;;13673:103:0;;;4949:51:1;5016:18;;;5009:34;4922:18;;13673:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13622:166;8913:4882;;;;;;8864:4931;:::o;4871:152::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4871:152:0;:::o;17699:1399::-;-1:-1:-1;;;;;17806:18:0;;17767:7;17806:18;;;:5;:18;;;;;;;;17787:37;;;;;;;;;;;;;;;;;;;;;17767:7;;17787:37;;;;17806:18;;17787:37;17767:7;;17787:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17787:37:0;;;-1:-1:-1;17787:37:0;;;;;;;;;;;;;;;-1:-1:-1;;;17787:37:0;;;-1:-1:-1;;;;;17787:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17787:37:0;;;;;;;;;;;;;;;;-1:-1:-1;;;17787:37:0;;;-1:-1:-1;;17787:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17787:37:0;;;-1:-1:-1;;17787:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17787:37:0;;;-1:-1:-1;;17787:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17863:31:0;17882:11;17863:18;:31::i;:::-;17837:57;;17907:22;17940:17;17975:7;17970:1087;17992:13;;:20;17988:24;;;;17970:1087;;;18078:39;18115:1;18086:4;:13;;;18100:1;18086:16;;;;;;;;;;:::i;:::-;;;;;;;:23;;;18078:36;;:39;;;;:::i;:::-;18048:13;;:16;;;;;;;;;;;;:::i;:::-;;;;;;;:26;;;18040:77;18036:1008;;;18169:4;:15;;;18144:40;;:4;:13;;;18158:1;18144:16;;;;;;;;;;:::i;:::-;;;;;;;:22;;;:40;;;18140:567;;;18223:202;6332:6;18223:161;18331:52;18359:4;:13;;;18373:1;18359:16;;;;;;;;;;:::i;:::-;;;;;;;:22;;;18351:31;;18331:15;:19;;:52;;;;:::i;:::-;18224:75;6388:5;18224:53;18261:15;18232:4;:13;;;18246:1;18232:16;;;;;;;;;;:::i;18224:75::-;18223:107;;:161::i;:202::-;18211:214;;18140:567;;;18490:195;6332:6;18490:154;18598:45;18626:4;:15;;;18618:24;;18598:15;:19;;:45;;;;:::i;18490:195::-;18478:207;;18140:567;18784:39;18821:1;18792:4;:13;;;18806:1;18792:16;;;;;;;;;;:::i;18784:39::-;18731:50;18771:9;18739:4;:13;;;18753:1;18739:16;;;;;;;;;;:::i;:::-;;;;;;;:26;;;18731:39;;:50;;;;:::i;:::-;:92;18727:235;;;18860:82;18914:4;:13;;;18928:1;18914:16;;;;;;;;;;:::i;:::-;;;;;;;:26;;;18861:39;18898:1;18869:4;:13;;;18883:1;18869:16;;;;;;;;;;:::i;18861:39::-;18860:45;;:82::i;:::-;18848:94;;18727:235;18999:29;:14;19018:9;18999:18;:29::i;:::-;18982:46;;18036:1008;18014:3;;;;:::i;:::-;;;;17970:1087;;;-1:-1:-1;19076:14:0;;17699:1399;-1:-1:-1;;;;;17699:1399:0:o;23487:650::-;3144:7;3171:6;-1:-1:-1;;;;;3171:6:0;2607:10;3239:23;3231:68;;;;-1:-1:-1;;;3231:68:0;;;;;;;:::i;:::-;23645:1:::1;23637:5;:9;:26;;;;;23659:4;23650:5;:13;;23637:26;23629:57;;;::::0;-1:-1:-1;;;23629:57:0;;11472:2:1;23629:57:0::1;::::0;::::1;11454:21:1::0;11511:2;11491:18;;;11484:30;-1:-1:-1;;;11530:18:1;;;11523:48;11588:18;;23629:57:0::1;11270:342:1::0;23629:57:0::1;23427:17:::0;;23695:94:::1;;;::::0;-1:-1:-1;;;23695:94:0;;8706:2:1;23695:94:0::1;::::0;::::1;8688:21:1::0;8745:2;8725:18;;;8718:30;8784:34;8764:18;;;8757:62;-1:-1:-1;;;8835:18:1;;;8828:46;8891:19;;23695:94:0::1;8504:412:1::0;23695:94:0::1;23427:17:::0;;23798:103:::1;;;;-1:-1:-1::0;;;23798:103:0::1;;;;;;;:::i;:::-;23912:20;:44:::0;;-1:-1:-1;;;;;;23912:44:0;;::::1;-1:-1:-1::0;;;;;23912:44:0;;::::1;::::0;;::::1;::::0;;;23997:62:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;23965:29:0;;;:6:::1;:29:::0;;;;;:94;;;;;::::1;::::0;;::::1;;::::0;;;;-1:-1:-1;23965:94:0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;;;::::1;::::0;;::::1;::::0;;;;24068:37;;;:10:::1;:37:::0;;;;;;;:61;;;;::::1;;::::0;;23487:650::o;17048:643::-;-1:-1:-1;;;;;17158:18:0;;17118:7;17158:18;;;:5;:18;;;;;17193:21;17164:11;17193:8;:21::i;:::-;17189:495;;;17231:23;17257:31;17276:11;17257:18;:31::i;:::-;17359:15;;;;17231:57;;-1:-1:-1;17305:22:0;;17330:86;;5901:2;;17330:62;;6332:6;;17331:45;;:15;;17359;;;;;17331:19;:45;:::i;17330:86::-;17305:111;;5844:4;17435:14;:33;17431:107;;;-1:-1:-1;5844:4:0;17431:107;17561:56;17601:15;17561:35;17581:14;17561:15;;:19;;:35;;;;:::i;:56::-;17554:63;17048:643;-1:-1:-1;;;;;17048:643:0:o;17189:495::-;-1:-1:-1;;17657:15:0;;;17048:643;-1:-1:-1;17048:643:0:o;27070:506::-;27171:7;27189:23;27215:62;27239:11;27252:24;27215:23;:62::i;:::-;-1:-1:-1;;;;;27485:19:0;;;;;;;:6;:19;;;;;;;;:45;;;;;;;;;:56;;;27189:88;;-1:-1:-1;27295:273:0;;6332:6;;27295:248;;27465:77;;:15;;:19;:77::i;:::-;27439:10;;27295:155;;;6388:5;27296:105;27363:37;6388:5;27384:15;27363:20;:37::i;:::-;27296:6;:19;27303:11;-1:-1:-1;;;;;27296:19:0;-1:-1:-1;;;;;27296:19:0;;;;;;;;;;;;:45;27316:24;-1:-1:-1;;;;;27296:45:0;-1:-1:-1;;;;;27296:45:0;;;;;;;;;;;;:52;;;:66;;:105;;;;:::i;27295:273::-;27288:280;;;27070:506;;;;;:::o;22789:514::-;22869:7;22878:6;22886;22894:7;22903:30;;:::i;:::-;22935;;:::i;:::-;-1:-1:-1;;;;;23016:18:0;;;22967:7;23016:18;;;:5;:18;;;;;;23067:13;;;;23093:17;;;;;-1:-1:-1;;;23067:13:0;;;;;;23123:20;;;;;;:33;;;;23169:10;;;;23268:16;;;;23047:248;;;;;;;;;22967:7;;;;23016:18;;23067:13;;23093:17;;;;;23123:33;;;23067:13;23192:9;;;23214:15;;;;23242:13;;;;;;;23268:16;;23192:9;;23047:248;;23192:9;23047:248;;;;;;;;;;;;;;;;;-1:-1:-1;;23047:248:0;;;;;;;;;;;;-1:-1:-1;23047:248:0;;-1:-1:-1;23047:248:0;;-1:-1:-1;23047:248:0;-1:-1:-1;23047:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22789:514;;;;;;;;;:::o;29841:555::-;-1:-1:-1;;;;;30030:20:0;;;29953:7;30030:20;;;:6;:20;;;;;;;;:47;;;;;;;;;;;:54;;30095:65;;;;30171:63;;;;;29953:7;;;;;;;;30095:65;30245:61;30030:20;:47;30245:20;:61::i;:::-;30317:62;30339:12;30353:25;30317:21;:62::i;:::-;30012:376;;;;-1:-1:-1;30012:376:0;;-1:-1:-1;30012:376:0;-1:-1:-1;30012:376:0;;-1:-1:-1;29841:555:0;-1:-1:-1;;;29841:555:0:o;13803:1848::-;13867:10;13841:17;13861;;;:5;:17;;;;;;13917:30;;:18;:30::i;:::-;13891:56;;13960:19;13990:17;14025:7;14020:1180;14042:20;;14038:24;;;;14020:1180;;;14128:39;14165:1;14136:4;:13;;14150:1;14136:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;14128:36;:39::i;:::-;14098:4;:13;;14112:1;14098:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;14090:77;14086:1103;;;14219:15;;;;14194:16;;14219:15;;;;;:4;;14194:16;;;;;;;;;;:::i;:::-;;;;;;;;;:22;:16;;;;;:22;;;;:40;14190:567;;;14273:202;6332:6;14273:161;14381:52;14409:4;:13;;14423:1;14409:16;;;;;;;;;;:::i;:::-;;;;;;;;;:22;:16;;;;;:22;;14381:15;;14409:22;;;;;14381:19;:52;:::i;:::-;14274:75;6388:5;14274:53;14311:15;14282:4;:13;;14296:1;14282:16;;;;;;;;;;:::i;14273:202::-;14261:214;;14190:567;;;14676:15;;;;14540:195;;6332:6;;14540:154;;14648:45;;:15;;14676;;;;;14648:19;:45;:::i;14540:195::-;14528:207;;14190:567;14834:39;14871:1;14842:4;:13;;14856:1;14842:16;;;;;;;;;;:::i;14834:39::-;14781:50;14821:9;14789:4;:13;;14803:1;14789:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;14781:39;;:50;;;;:::i;:::-;:92;14777:235;;;14910:82;14964:4;:13;;14978:1;14964:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;14911:39;14948:1;14919:4;:13;;14933:1;14919:16;;;;;;;;;;:::i;14910:82::-;14898:94;;14777:235;15061:50;15101:9;15069:4;:13;;15083:1;15069:16;;;;;;;;;;:::i;15061:50::-;15032:4;:13;;15046:1;15032:16;;;;;;;;;;:::i;:::-;;;;;;;;;:26;:16;;;;;:26;:79;15145:26;:11;15161:9;15145:15;:26::i;:::-;15131:40;;14086:1103;14064:3;;;;:::i;:::-;;;;14020:1180;;;;15234:1;15220:11;:15;15212:49;;;;-1:-1:-1;;;15212:49:0;;7593:2:1;15212:49:0;;;7575:21:1;7632:2;7612:18;;;7605:30;-1:-1:-1;;;7651:18:1;;;7644:51;7712:18;;15212:49:0;7391:345:1;15212:49:0;15300:21;15336:29;;;15332:91;;;15396:15;15382:29;;15332:91;15435:15;;;:41;;-1:-1:-1;;15435:41:0;15460:15;15435:41;;;;;15489;;15497:10;;15489:41;;;;;;;-1:-1:-1;15489:41:0;-1:-1:-1;15489:41:0;;15497:10;15489:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15560:14:0;;:31;;15579:11;15560:18;:31::i;:::-;15543:14;:48;15609:34;;11763:25:1;;;15619:10:0;;15609:34;;11751:2:1;11736:18;15609:34:0;;;;;;;13830:1821;;;;;13803:1848::o;22119:662::-;-1:-1:-1;;;;;22251:18:0;;22187:7;22251:18;;;:5;:18;;;;;;;;22232:37;;;;;;;;;;;;;;;;;;;;;22187:7;;;;;;;;22232:37;22251:18;;22232:37;;22251:18;;22187:7;;22232:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22232:37:0;;;-1:-1:-1;22232:37:0;;;;;;;;;;;;;;;-1:-1:-1;;;22232:37:0;;;-1:-1:-1;;;;;22232:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22232:37:0;;;;;;;;;;;;;;;;-1:-1:-1;;;22232:37:0;;;-1:-1:-1;;22232:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22232:37:0;;;-1:-1:-1;;22232:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22232:37:0;;;-1:-1:-1;;22232:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22336:15;;;;;-1:-1:-1;;;22307:86:0;;5901:2;;22307:62;;6332:6;;22308:45;;:15;;22328:24;;;;;22308:19;:45;:::i;22307:86::-;22280:113;;5844:4;22406:16;:35;22402:99;;;-1:-1:-1;5844:4:0;22402:99;5782:3;22554:21;22563:11;22554:8;:21::i;:::-;22553:22;:45;;22582:16;22553:45;;;22578:1;22553:45;22610:81;6100:2;22610:48;:21;6027:11;22610:25;:48::i;:81::-;22704:21;22713:11;22704:8;:21::i;:::-;22703:22;:60;;22732:31;22751:11;22732:18;:31::i;:::-;22703:60;;;22728:1;22703:60;22511:262;;;;;;;;;;22119:662;;;;;:::o;20271:1015::-;-1:-1:-1;;;;;20477:18:0;;20457:17;20477:18;;;:5;:18;;;;;20374:16;;;;;;;;20477:18;20524:15;:5;20534:4;20524:9;:15::i;:::-;20562:20;;20508:31;;-1:-1:-1;20554:28:0;;20550:89;;;-1:-1:-1;20607:20:0;;20550:89;20651:23;20691:5;20677:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20677:20:0;;20651:46;;20708:26;20751:5;20737:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20737:20:0;;20708:49;;20768:24;20809:5;20795:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20795:20:0;;20768:47;;20826:22;20865:5;20851:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20851:20:0;-1:-1:-1;20826:45:0;-1:-1:-1;20884:13:0;20929:5;20912:312;20940:4;20936:1;:8;20912:312;;;20982:4;20996:3;20998:1;20996;:3;:::i;:::-;20982:18;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;20966:6;20973:5;20966:13;;;;;;;;:::i;:::-;;;;;;;;;;:41;21041:4;21055:3;21057:1;21055;:3;:::i;:::-;21041:18;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;21022:9;21032:5;21022:16;;;;;;;;:::i;:::-;;;;;;;;;;:47;21101:4;21115:3;21117:1;21115;:3;:::i;:::-;21101:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;21084:7;21092:5;21084:14;;;;;;;;:::i;:::-;;;;;;;;;;:43;21165:4;21179:3;21181:1;21179;:3;:::i;:::-;21165:18;;;;;;;;:::i;:::-;;;;;;;;;:24;:18;;;;;:24;;21142:12;;21165:24;;;;;21142:5;;21148;;21142:12;;;;;;:::i;:::-;;;;;;;;;;:48;21205:7;;;;:::i;:::-;;;;20946:3;;;;;:::i;:::-;;;;20912:312;;;-1:-1:-1;21244:6:0;;21252:9;;-1:-1:-1;21263:7:0;;-1:-1:-1;21252:9:0;-1:-1:-1;20271:1015:0;-1:-1:-1;;;;;;;20271:1015:0:o;25579:281::-;25688:7;25715:137;25791:60;25813:11;25826:24;25791:21;:60::i;:::-;25715:59;25736:11;25749:24;25715:20;:59::i;:137::-;25708:144;25579:281;-1:-1:-1;;;25579:281:0:o;21479:632::-;21543:7;21552;21561;21570;21579;21588;21608:16;21627:31;21646:11;21627:18;:31::i;:::-;21608:50;;21669:21;21693:29;21710:11;21693:16;:29::i;:::-;21669:53;;21733:21;21757:33;21778:11;21757:20;:33::i;:::-;21733:57;;21801:20;21824:36;21848:11;-1:-1:-1;;;;;19508:18:0;19481:7;19508:18;;;:5;:18;;;;;:34;;19406:144;21824:36;21801:59;;21871:21;21895:34;21917:11;21895:21;:34::i;:::-;21871:58;;21940:23;21966:31;21985:11;21966:18;:31::i;:::-;22018:8;;22028:13;;-1:-1:-1;22043:13:0;;-1:-1:-1;22058:12:0;;-1:-1:-1;22043:13:0;-1:-1:-1;22018:8:0;;-1:-1:-1;21479:632:0;-1:-1:-1;;;21479:632:0:o;30720:187::-;3144:7;3171:6;-1:-1:-1;;;;;3171:6:0;2607:10;3239:23;3231:68;;;;-1:-1:-1;;;3231:68:0;;;;;;;:::i;:::-;30813:1:::1;30800:10;:14;:34;;;;;30832:2;30818:10;:16;;30800:34;30792:73;;;::::0;-1:-1:-1;;;30792:73:0;;9886:2:1;30792:73:0::1;::::0;::::1;9868:21:1::0;9925:2;9905:18;;;9898:30;9964:28;9944:18;;;9937:56;10010:18;;30792:73:0::1;9684:350:1::0;30792:73:0::1;30876:10;:23:::0;30720:187::o;25021:550::-;-1:-1:-1;;;;;25152:19:0;;;25128:7;25152:19;;;:6;:19;;;;;;;;:45;;;;;;;;;;;:60;;;25148:104;;-1:-1:-1;25239:1:0;25232:8;;25148:104;-1:-1:-1;;;;;25309:19:0;;;25264:21;25309:19;;;:6;:19;;;;;;;;:45;;;;;;;;;;;:60;;;25288:128;;7100:3;;25288:98;;6332:6;;25289:81;;:15;;:19;:81::i;25288:128::-;25264:152;;7162:5;25433:13;:40;25429:102;;;7162:5;25488:31;;;;;15659:248;15742:5;15726:12;:21;;;;15718:30;;;;;;15787:10;15761:17;15781;;;:5;:17;;;;;15815:20;;:24;15811:89;;15856:17;;;:32;;-1:-1:-1;;15856:32:0;;;;;;;15811:89;15707:200;15659:248;:::o;3333:148::-;3144:7;3171:6;-1:-1:-1;;;;;3171:6:0;2607:10;3239:23;3231:68;;;;-1:-1:-1;;;3231:68:0;;;;;;;:::i;:::-;3440:1:::1;3424:6:::0;;3403:40:::1;::::0;-1:-1:-1;;;;;3424:6:0;;::::1;::::0;3403:40:::1;::::0;3440:1;;3403:40:::1;3471:1;3454:19:::0;;-1:-1:-1;;;;;;3454:19:0::1;::::0;;3333:148::o;19558:325::-;-1:-1:-1;;;;;19670:18:0;;19630:7;19670:18;;;:5;:18;;;;;19630:7;;19728:122;19752:20;;19748:24;;19728:122;;;19803:35;19814:4;:13;;19828:1;19814:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:23;19803:6;;:10;:35::i;:::-;19794:44;-1:-1:-1;19774:3:0;;;;:::i;:::-;;;;19728:122;;;-1:-1:-1;19869:6:0;19558:325;-1:-1:-1;;;19558:325:0:o;31090:95::-;31138:39;;31146:10;;31167:9;31138:39;;;;;;;;;31167:9;31146:10;31138:39;;;;;;;;;;;;;;;;;;;;;31090:95::o;30915:118::-;-1:-1:-1;;;;;31004:11:0;;;;;;:5;:11;;;;;;;;;:21;;30997:28;;;;;;;;;;;;;;;;;30970:16;;30997:28;;;31004:21;30997:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30997:28:0;;;;;;;;;;;;;;;;;;;;;;;30915:118;;;:::o;19106:292::-;-1:-1:-1;;;;;19203:18:0;;19166:4;19203:18;;;:5;:18;;;;;19242:20;;:24;;;;19241:149;;-1:-1:-1;19352:20:0;;19330:60;;19388:1;;19338:4;;19352:22;;19373:1;;19352:22;:::i;:::-;19338:37;;;;;;;;:::i;19330:60::-;19293:20;;19279:4;;19293:22;;19314:1;;19293:22;:::i;:::-;19279:37;;;;;;;;:::i;:::-;;;;;;;;;;;:47;;;19271:119;19234:156;19106:292;-1:-1:-1;;;19106:292:0:o;25868:1194::-;25953:4;25986:1;25976:7;:11;25968:51;;;;-1:-1:-1;;;25968:51:0;;7943:2:1;25968:51:0;;;7925:21:1;7982:2;7962:18;;;7955:30;8021:29;8001:18;;;7994:57;8068:18;;25968:51:0;7741:351:1;25968:51:0;23427:17;;26028:103;;;;-1:-1:-1;;;26028:103:0;;;;;;;:::i;:::-;26147:82;;-1:-1:-1;;;26147:82:0;;26194:10;26147:82;;;3754:34:1;26214:4:0;3804:18:1;;;3797:43;3856:18;;;3849:34;;;-1:-1:-1;;;;;26147:46:0;;;;;3689:18:1;;26147:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26142:122;;-1:-1:-1;26249:5:0;26242:12;;26142:122;26274:14;26291:54;26307:10;26319:25;26291:15;:54::i;:::-;26274:71;-1:-1:-1;26358:10:0;;26354:178;;26454:10;26447:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;26447:45:0;;;;;;;;;:63;;;:75;;26515:6;26447:67;:75::i;:::-;26388:10;26381:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;26381:45:0;;;;;;;;;:63;;:141;26354:178;26604:10;26597:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;26597:45:0;;;;;;;;;:52;:65;;26654:7;26597:56;:65::i;:::-;26549:10;26542:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;26542:45:0;;;;;;;;;:120;;;26730:15;26671:56;;;:74;26758:60;;;26754:170;;26843:10;26836:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;26836:45:0;;;;;;;;;26899:15;26836:60;;;;:78;26754:170;-1:-1:-1;;;;;26939:93:0;;;26958:37;;;;:10;:37;;;;;;;;26939:93;;;;26958:37;;26946:10;;26939:93;;;;27024:7;11763:25:1;;11751:2;11736:18;;11617:177;26939:93:0;;;;;;;;-1:-1:-1;27050:4:0;;25868:1194;-1:-1:-1;;;25868:1194:0:o;27584:923::-;27661:14;27678:133;27756:54;27772:10;27784:25;27756:15;:54::i;:::-;27685:10;27678:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;27678:45:0;;;;;;;;;:63;;;;:77;:133::i;:::-;27661:150;-1:-1:-1;27826:10:0;;27822:678;;-1:-1:-1;;;;;27881:37:0;;;27849:29;27881:37;;;:10;:37;;;;;;;23427:17;;23463:8;27941:550;;28000:10;27993:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;27993:45:0;;;;;;;;;28052:15;27993:56;;;:74;28080:63;;;:67;;;;28224:61;;;:73;;28290:6;28224:65;:73::i;:::-;28167:10;28160:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;28160:45:0;;;;;;;;;;;:61;;;;:137;;;;28312:62;;-1:-1:-1;;;28312:62:0;;;;;4949:51:1;;;;5016:18;;;5009:34;;;28312:42:0;;;;;4922:18:1;;28312:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28445:25;-1:-1:-1;;;;;28394:85:0;28422:21;-1:-1:-1;;;;;28394:85:0;28410:10;-1:-1:-1;;;;;28394:85:0;;28472:6;28394:85;;;;11763:25:1;;11751:2;11736:18;;11617:177;28394:85:0;;;;;;;;27941:550;27838:662;27652:855;27584:923;:::o;28515:1318::-;28620:1;28610:7;:11;28602:51;;;;-1:-1:-1;;;28602:51:0;;7943:2:1;28602:51:0;;;7925:21:1;7982:2;7962:18;;;7955:30;8021:29;8001:18;;;7994:57;8068:18;;28602:51:0;7741:351:1;28602:51:0;28688:10;28681:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;28681:45:0;;;;;;;;;:52;28670:63;;;28662:114;;;;-1:-1:-1;;;28662:114:0;;10643:2:1;28662:114:0;;;10625:21:1;10682:2;10662:18;;;10655:30;10721:34;10701:18;;;10694:62;-1:-1:-1;;;10772:18:1;;;10765:36;10818:19;;28662:114:0;10441:402:1;28662:114:0;23427:17;;28785:103;;;;-1:-1:-1;;;28785:103:0;;;;;;;:::i;:::-;28899:14;28916:54;28932:10;28944:25;28916:15;:54::i;:::-;28899:71;-1:-1:-1;28983:10:0;;28979:178;;29079:10;29072:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29072:45:0;;;;;;;;;:63;;;:75;;29140:6;29072:67;:75::i;:::-;29013:10;29006:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29006:45:0;;;;;;;;;:63;;:141;28979:178;29229:10;29222:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29222:45:0;;;;;;;;;:52;:65;;29279:7;29222:56;:65::i;:::-;29174:10;29167:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29167:45:0;;;;;;;;;:120;;;29355:15;29296:56;;;;:74;29383:56;29379:253;;29459:10;29452:18;;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29452:45:0;;;;;;;;;29515:15;29452:60;;;;:78;29379:253;;;29564:10;29620:1;29557:18;;;:6;:18;;;;;;;;-1:-1:-1;;;;;29557:45:0;;;;;;;;;:60;;:64;29379:253;29650:63;;-1:-1:-1;;;29650:63:0;;29693:10;29650:63;;;4949:51:1;5016:18;;;5009:34;;;-1:-1:-1;;;;;29650:42:0;;;;;4922:18:1;;29650:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29642:72;;;;;;-1:-1:-1;;;;;29730:95:0;;;29751:37;;;;:10;:37;;;;;;;;29730:95;;;;29751:37;;29739:10;;29730:95;;;;29817:7;11763:25:1;;11751:2;11736:18;;11617:177;4775:89:0;;;;;;;;;;;;16570:470;16640:7;16660:23;16739:1;16700:36;16724:11;-1:-1:-1;;;;;19508:18:0;19481:7;19508:18;;;:5;:18;;;;;:34;;19406:144;16700:36;:40;16696:302;;;16775:80;6284:2;16775:57;6222:10;16775:33;16796:11;16775:20;:33::i;:80::-;16757:98;;6164:5;16876:15;:37;16872:115;;;-1:-1:-1;6164:5:0;17017:15;16570:470;-1:-1:-1;;16570:470:0:o;3495:244::-;3144:7;3171:6;-1:-1:-1;;;;;3171:6:0;2607:10;3239:23;3231:68;;;;-1:-1:-1;;;3231:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3584:22:0;::::1;3576:73;;;::::0;-1:-1:-1;;;3576:73:0;;8299:2:1;3576:73:0::1;::::0;::::1;8281:21:1::0;8338:2;8318:18;;;8311:30;8377:34;8357:18;;;8350:62;-1:-1:-1;;;8428:18:1;;;8421:36;8474:19;;3576:73:0::1;8097:402:1::0;3576:73:0::1;3686:6;::::0;;3665:38:::1;::::0;-1:-1:-1;;;;;3665:38:0;;::::1;::::0;3686:6;::::1;::::0;3665:38:::1;::::0;::::1;3714:6;:17:::0;;-1:-1:-1;;;;;;3714:17:0::1;-1:-1:-1::0;;;;;3714:17:0;;;::::1;::::0;;;::::1;::::0;;3495:244::o;19891:372::-;-1:-1:-1;;;;;20004:18:0;;19964:7;20004:18;;;:5;:18;;;;;20052:10;;;;19964:7;20075:155;20099:20;;20095:24;;20075:155;;;20150:68;20193:4;:13;;20207:1;20193:16;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;20150:38;20161:4;:13;;20175:1;20161:16;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;;20150:6;:10;;:38;;;;:::i;:68::-;20141:77;-1:-1:-1;20121:3:0;;;;:::i;:::-;;;;20075:155;;24602:411;-1:-1:-1;;;;;24751:19:0;;;24708:7;24751:19;;;:6;:19;;;;;;;;:45;;;;;;;;;;;:52;24708:7;;24751:111;;7302:3;;24751:82;;7234:10;24751:56;:82::i;16030:532::-;16085:7;16131:21;16085:7;16196:143;16225:103;6100:2;16225:56;16131:21;6027:11;16225:33;:56::i;:103::-;5782:3;;16196:16;:143::i;:::-;16163:176;-1:-1:-1;16381:38:0;5782:3;5966:5;16381:16;:38::i;:::-;16356:22;:63;16352:203;;;16443:22;16030:532;-1:-1:-1;;16030:532:0:o;16352:203::-;16505:38;5782:3;5966:5;16505:16;:38::i;:::-;16498:45;;;;16030:532;:::o;1619:98::-;1677:7;1704:5;1708:1;1704;:5;:::i;1507:98::-;1565:7;1592:5;1596:1;1592;:5;:::i;1283:98::-;1341:7;1368:5;1372:1;1368;:5;:::i;1843:206::-;1929:7;1990:12;1982:6;;;;1974:29;;;;-1:-1:-1;;;1974:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2025:5:0;;;1843:206::o;1395:98::-;1453:7;1480:5;1484:1;1480;:5;:::i;24145:441::-;-1:-1:-1;;;;;24264:19:0;;;;;;:5;:19;;;;;:31;;;:44;;24300:7;24264:35;:44::i;:::-;-1:-1:-1;;;;;24230:19:0;;;;;;:5;:19;;;;;:31;;:78;;;;24344:26;:33;:37;;24380:1;;24344:37;:::i;:::-;24324:58;;24319:260;24384:9;;;;24319:260;;24454:26;24481:5;24454:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24419:19:0;;;;:5;:19;;;;;;;:31;;;:68;24415:155;;-1:-1:-1;;;;;24502:19:0;;;;;;:5;:19;;;;;:28;;:36;;-1:-1:-1;;24502:36:0;;;;;;;;;27838:662;27652:855;27584:923;:::o;24415:155::-;24395:7;;;;:::i;:::-;;;;24319:260;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:1:o;1240:322::-;1317:6;1325;1333;1386:2;1374:9;1365:7;1361:23;1357:32;1354:52;;;1402:1;1399;1392:12;1354:52;1425:29;1444:9;1425:29;:::i;:::-;1415:39;1501:2;1486:18;;1473:32;;-1:-1:-1;1552:2:1;1537:18;;;1524:32;;1240:322;-1:-1:-1;;;1240:322:1:o;1567:277::-;1634:6;1687:2;1675:9;1666:7;1662:23;1658:32;1655:52;;;1703:1;1700;1693:12;1655:52;1735:9;1729:16;1788:5;1781:13;1774:21;1767:5;1764:32;1754:60;;1810:1;1807;1800:12;1849:272;1907:6;1960:2;1948:9;1939:7;1935:23;1931:32;1928:52;;;1976:1;1973;1966:12;1928:52;2015:9;2002:23;2065:6;2058:5;2054:18;2047:5;2044:29;2034:57;;2087:1;2084;2077:12;2126:180;2185:6;2238:2;2226:9;2217:7;2213:23;2209:32;2206:52;;;2254:1;2251;2244:12;2206:52;-1:-1:-1;2277:23:1;;2126:180;-1:-1:-1;2126:180:1:o;2311:326::-;2404:5;2427:1;2437:194;2451:4;2448:1;2445:11;2437:194;;;2510:13;;2498:26;;2547:4;2571:12;;;;2606:15;;;;2471:1;2464:9;2437:194;;;2441:3;;2311:326;;:::o;2642:435::-;2695:3;2733:5;2727:12;2760:6;2755:3;2748:19;2786:4;2815:2;2810:3;2806:12;2799:19;;2852:2;2845:5;2841:14;2873:1;2883:169;2897:6;2894:1;2891:13;2883:169;;;2958:13;;2946:26;;2992:12;;;;3027:15;;;;2919:1;2912:9;2883:169;;;-1:-1:-1;3068:3:1;;2642:435;-1:-1:-1;;;;;2642:435:1:o;3894:876::-;-1:-1:-1;;;;;4347:32:1;;4329:51;;4399:6;4441:15;;;4436:2;4421:18;;4414:43;4493:15;;4488:2;4473:18;;4466:43;4540:2;4525:18;;4518:34;;;4316:3;4301:19;;4561:53;4609:3;4594:19;;4586:6;4561:53;:::i;:::-;4623;4671:3;4660:9;4656:19;4648:6;4623:53;:::i;:::-;4707:3;4692:19;;4685:35;;;;4751:3;4736:19;4729:35;3894:876;;-1:-1:-1;;;;;;3894:876:1:o;5054:658::-;5225:2;5277:21;;;5347:13;;5250:18;;;5369:22;;;5196:4;;5225:2;5448:15;;;;5422:2;5407:18;;;5196:4;5491:195;5505:6;5502:1;5499:13;5491:195;;;5570:13;;-1:-1:-1;;;;;5566:39:1;5554:52;;5661:15;;;;5626:12;;;;5602:1;5520:9;5491:195;;;-1:-1:-1;5703:3:1;;5054:658;-1:-1:-1;;;;;;5054:658:1:o;5717:875::-;6130:3;6119:9;6112:22;6093:4;6157:57;6209:3;6198:9;6194:19;6186:6;6157:57;:::i;:::-;6262:9;6254:6;6250:22;6245:2;6234:9;6230:18;6223:50;6296:44;6333:6;6325;6296:44;:::i;:::-;6282:58;;6388:9;6380:6;6376:22;6371:2;6360:9;6356:18;6349:50;6422:44;6459:6;6451;6422:44;:::i;:::-;6408:58;;6514:9;6506:6;6502:22;6497:2;6486:9;6482:18;6475:50;6542:44;6579:6;6571;6542:44;:::i;:::-;6534:52;5717:875;-1:-1:-1;;;;;;;5717:875:1:o;6789:597::-;6901:4;6930:2;6959;6948:9;6941:21;6991:6;6985:13;7034:6;7029:2;7018:9;7014:18;7007:34;7059:1;7069:140;7083:6;7080:1;7077:13;7069:140;;;7178:14;;;7174:23;;7168:30;7144:17;;;7163:2;7140:26;7133:66;7098:10;;7069:140;;;7227:6;7224:1;7221:13;7218:91;;;7297:1;7292:2;7283:6;7272:9;7268:22;7264:31;7257:42;7218:91;-1:-1:-1;7370:2:1;7349:15;-1:-1:-1;;7345:29:1;7330:45;;;;7377:2;7326:54;;6789:597;-1:-1:-1;;;6789:597:1:o;9323:356::-;9525:2;9507:21;;;9544:18;;;9537:30;9603:34;9598:2;9583:18;;9576:62;9670:2;9655:18;;9323:356::o;10848:417::-;11050:2;11032:21;;;11089:2;11069:18;;;11062:30;11128:34;11123:2;11108:18;;11101:62;-1:-1:-1;;;11194:2:1;11179:18;;11172:51;11255:3;11240:19;;10848:417::o;14244:128::-;14284:3;14315:1;14311:6;14308:1;14305:13;14302:39;;;14321:18;;:::i;:::-;-1:-1:-1;14357:9:1;;14244:128::o;14377:217::-;14417:1;14443;14433:132;;14487:10;14482:3;14478:20;14475:1;14468:31;14522:4;14519:1;14512:15;14550:4;14547:1;14540:15;14433:132;-1:-1:-1;14579:9:1;;14377:217::o;14599:168::-;14639:7;14705:1;14701;14697:6;14693:14;14690:1;14687:21;14682:1;14675:9;14668:17;14664:45;14661:71;;;14712:18;;:::i;:::-;-1:-1:-1;14752:9:1;;14599:168::o;14772:125::-;14812:4;14840:1;14837;14834:8;14831:34;;;14845:18;;:::i;:::-;-1:-1:-1;14882:9:1;;14772:125::o;14902:136::-;14941:3;14969:5;14959:39;;14978:18;;:::i;:::-;-1:-1:-1;;;15014:18:1;;14902:136::o;15043:178::-;15080:3;15124:4;15117:5;15113:16;15148:7;15138:41;;15159:18;;:::i;:::-;-1:-1:-1;;15195:20:1;;15043:178;-1:-1:-1;;15043:178:1:o;15226:135::-;15265:3;-1:-1:-1;;15286:17:1;;15283:43;;;15306:18;;:::i;:::-;-1:-1:-1;15353:1:1;15342:13;;15226:135::o;15366:175::-;15403:3;15447:4;15440:5;15436:16;15476:4;15467:7;15464:17;15461:43;;;15484:18;;:::i;:::-;15533:1;15520:15;;15366:175;-1:-1:-1;;15366:175:1:o;15546:127::-;15607:10;15602:3;15598:20;15595:1;15588:31;15638:4;15635:1;15628:15;15662:4;15659:1;15652:15;15678:127;15739:10;15734:3;15730:20;15727:1;15720:31;15770:4;15767:1;15760:15;15794:4;15791:1;15784:15;15810:127;15871:10;15866:3;15862:20;15859:1;15852:31;15902:4;15899:1;15892:15;15926:4;15923:1;15916:15

Swarm Source

ipfs://d39690193a22c966c9a5f47667c4d460eaec3f9c290a3f84f09b7769f90360a8
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.