Contract 0x668c82f9d909fb069e03c15c890f861e6c4b275f 3

 

Contract Overview

Balance:
4,019.961002647602673513 MATIC

MATIC Value:
$3,650.53 (@ $0.91/MATIC)
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x847119d58d84e85e2da09e2c1b9fda3b8d5dc2332b9f4d197f22dca4b2e1f301Enter Lobby363865132022-12-03 19:42:351 hr 48 mins ago0xdf8c176a690d9b65592d4cb2cea6075c8e35af66 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f11 MATIC0.005046600565 40.00000448
0xcaf652af0f10a94fd565452446aac15e6c1b7c376d120238e96012be8849ec3dEnter Stake363864812022-12-03 19:41:271 hr 49 mins ago0xdf8c176a690d9b65592d4cb2cea6075c8e35af66 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.019696326388 40.000012973
0x47ce36f6e8d91aef22b6e35d5959a3666a45439e575a38ffd00173f302e1a45cEnd Stake363864062022-12-03 19:38:531 hr 52 mins ago0xdf8c176a690d9b65592d4cb2cea6075c8e35af66 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.005391162662 40.000019757
0x368d83204dae20374c0ffa7624a014b2e6bb9db8b8359693c1ee07092180cdc6Exit Lobby363861282022-12-03 19:29:212 hrs 1 min ago0xdf8c176a690d9b65592d4cb2cea6075c8e35af66 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.003433136627 40.024909679
0x7385a985a4465fe70c6bc1002313a615b798ea5708538f175177f9d49f0a785eEnter Stake363847172022-12-03 18:36:012 hrs 55 mins ago0x6f48294f2ce8eb0c379a3dab4eeb74028b30a16a IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.016388874408 40.441193156
0xb40faa8b41fd0efd92f2f2282ba67591c02dd3086a7bbbeb1451114bd7ac13c0Cancel Sell Stak...363812172022-12-03 16:24:195 hrs 6 mins ago0xc147995c7b32c0482279cf2ba08a4304c32450c9 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.001015608878 40.94206555
0xb85bb20eba84a2bfed75ad879e133efe8b2399d81eb51009aacb1f9c60490b3dEnter Stake363808242022-12-03 16:10:355 hrs 20 mins ago0x6a9b72cd106c1d92609aa8bc72fa3182694a626f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.009418322345 35.824460619
0x4bae53cdbd40b9ddf9f2903195ed7027c9814c576122e4669b71c5708e1a4841Enter Stake363700752022-12-03 9:53:0411 hrs 37 mins ago0x296de92a5452b365bdbd8a1e0603daaceb6e30b2 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.06045531787 60.500209026
0x36177753609875012d3e178af519774ffa369e7e3866cb6269f0433b0f810347End Stake363695212022-12-03 9:33:5911 hrs 57 mins ago0x296de92a5452b365bdbd8a1e0603daaceb6e30b2 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.011457363725 30.11964859
0xc39eaf9128d0ec57257cc2c9e4719fb4f0fd59e8bd44fc3413ad282301c74056End Stake363690902022-12-03 9:19:1312 hrs 11 mins ago0x296de92a5452b365bdbd8a1e0603daaceb6e30b2 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.028001544029 74.555670123
0xacd2194b9cfacce241c9ed16b9b9e683396bc422c9eaf55a6d2c60d0aafa6bf8Enter Stake363647632022-12-03 6:38:3614 hrs 52 mins ago0x337165e9af3b82562ecd626a0296fde0f1f63066 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.009698909912 30.351965628
0xce2ceac93ea18bb432ee429b909c2267be02dc98d41883be7188a0f6a9d9068dEnd Stake363647372022-12-03 6:37:4414 hrs 53 mins ago0x337165e9af3b82562ecd626a0296fde0f1f63066 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.004108036699 30.479798036
0x2837bf2f13661fe2ea954b97551f3584a7a69a9227a9ac4b31657f2f7d19b0dfEnter Lobby363636092022-12-03 5:56:4815 hrs 34 mins ago0x9654f31b2c2d145a9d00b49e813fe6712974bc03 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f9 MATIC0.007317915263 58.002736603
0xb19588a7227c603d6abf3d9d54406b1ed9e5f000a81bcf504c1515f5593fce10Enter Stake363635832022-12-03 5:55:5215 hrs 35 mins ago0x9654f31b2c2d145a9d00b49e813fe6712974bc03 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.024636931262 58.232598391
0x48105bdddd3821f680e7f5b2b7de1430416727bcdaa8a6f634ec349e894743d1Exit Lobby363635082022-12-03 5:53:1815 hrs 37 mins ago0x9654f31b2c2d145a9d00b49e813fe6712974bc03 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.005012173061 58.433961657
0x3a363e79680859a0d56ff532e5972e06bea50fe4010d6ab73b62e37ba69ff10cEnd Stake363615202022-12-03 4:40:4016 hrs 50 mins ago0xccea08e88dddb75a786df9caf30ef20c3c3be535 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.007880590608 30.004495039
0x920f6cdfe47b65b758319777e0a5ddd07b6f1324d2a0124352b1609f06a5578bCancel Sell Stak...363614182022-12-03 4:37:1216 hrs 53 mins ago0xccea08e88dddb75a786df9caf30ef20c3c3be535 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.000745484349 30.038050984
0x4444d960547652e3ae7cfb057666a771959b45efea3e4e7681a29ff04e581667Enter Stake363588162022-12-03 3:03:2518 hrs 27 mins ago0x93fdc7672c9f15c39cc94808eb54ed79d628f1dc IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.015330063531 30.000006911
0x5d3850092fe3bad9629b7196b2b45e66518123093b4003e664ca4cd15bd1b8f3End Stake363586982022-12-03 2:59:2118 hrs 31 mins ago0x93fdc7672c9f15c39cc94808eb54ed79d628f1dc IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.007879410736 30.000002804
0x54964875262e2087d63dda8cc46d2bda628d88f46b3e027825b4c7196bad5b67End Stake363556082022-12-03 1:06:1220 hrs 24 mins ago0x28fb9c422f96b8d80b3a58011286acd25549abb3 IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.007392637966 30.106814443
0xbc6753192117847a7896a4aefa92909b063cdc417d508903c49a252b2b708a94Enter Lobby363552732022-12-03 0:54:4220 hrs 36 mins ago0x6a9b72cd106c1d92609aa8bc72fa3182694a626f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f20 MATIC0.004076815734 30.399270254
0x6065689177e826a13ce047f845f3958b71fc9cb11bab65834cd8a2849b918d8eEnd Stake363552402022-12-03 0:53:3220 hrs 37 mins ago0x6a9b72cd106c1d92609aa8bc72fa3182694a626f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.004925248737 30.494819164
0x25bee5f5fc9fb2f1e3636fcf5ff5497b94eb8838e108a21e488726efa4d4a8c4Enter Stake363537952022-12-03 0:03:5421 hrs 27 mins ago0xefbd2c4355ca73a236062d2650e503ba0f443d5f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.028259970769 72.752473406
0x8a714010324df025baa26918a8ebf25275d6e9fdc7cd98db81a30dc885bd30f9End Stake363536822022-12-03 0:00:0021 hrs 31 mins ago0xefbd2c4355ca73a236062d2650e503ba0f443d5f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.005199495995 30.001650222
0xbae456fa4987731c7b989763ac0d3a4c516de6b7536d8e30c8f9f302de62011fEnd Stake363536172022-12-02 23:57:4621 hrs 33 mins ago0xefbd2c4355ca73a236062d2650e503ba0f443d5f IN  0x668c82f9d909fb069e03c15c890f861e6c4b275f0 MATIC0.005199757622 30.003159842
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x47ce36f6e8d91aef22b6e35d5959a3666a45439e575a38ffd00173f302e1a45c363864062022-12-03 19:38:531 hr 52 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xdf8c176a690d9b65592d4cb2cea6075c8e35af6611.515606886706664731 MATIC
0x36177753609875012d3e178af519774ffa369e7e3866cb6269f0433b0f810347363695212022-12-03 9:33:5911 hrs 57 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x296de92a5452b365bdbd8a1e0603daaceb6e30b20.336583160780380782 MATIC
0xc39eaf9128d0ec57257cc2c9e4719fb4f0fd59e8bd44fc3413ad282301c74056363690902022-12-03 9:19:1312 hrs 11 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x296de92a5452b365bdbd8a1e0603daaceb6e30b20.33382743654068354 MATIC
0xce2ceac93ea18bb432ee429b909c2267be02dc98d41883be7188a0f6a9d9068d363647372022-12-03 6:37:4414 hrs 53 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x337165e9af3b82562ecd626a0296fde0f1f630663.622407585717588368 MATIC
0x3a363e79680859a0d56ff532e5972e06bea50fe4010d6ab73b62e37ba69ff10c363615202022-12-03 4:40:4016 hrs 50 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xccea08e88dddb75a786df9caf30ef20c3c3be5350.315105611137827935 MATIC
0x5d3850092fe3bad9629b7196b2b45e66518123093b4003e664ca4cd15bd1b8f3363586982022-12-03 2:59:2118 hrs 31 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x93fdc7672c9f15c39cc94808eb54ed79d628f1dc1.817814205878591932 MATIC
0x54964875262e2087d63dda8cc46d2bda628d88f46b3e027825b4c7196bad5b67363556082022-12-03 1:06:1220 hrs 24 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x28fb9c422f96b8d80b3a58011286acd25549abb327.486079684620615505 MATIC
0x6065689177e826a13ce047f845f3958b71fc9cb11bab65834cd8a2849b918d8e363552402022-12-03 0:53:3220 hrs 37 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x6a9b72cd106c1d92609aa8bc72fa3182694a626f8.663894132427912935 MATIC
0x8a714010324df025baa26918a8ebf25275d6e9fdc7cd98db81a30dc885bd30f9363536822022-12-03 0:00:0021 hrs 31 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xefbd2c4355ca73a236062d2650e503ba0f443d5f9.479163814360304352 MATIC
0xbae456fa4987731c7b989763ac0d3a4c516de6b7536d8e30c8f9f302de62011f363536172022-12-02 23:57:4621 hrs 33 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xefbd2c4355ca73a236062d2650e503ba0f443d5f7.831677511327091058 MATIC
0x4a483d0d20d86cec7c526c5c35eef8670c78ccc483852a40713d563da6b88301363517182022-12-02 22:52:2622 hrs 38 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x1ebf59d1ad7c220c569a70fd636b4ce42f8bd0102.066757739408364686 MATIC
0x44fa20fbd3753c69aaefc4a0754a8508a56e5c21e416569d4b12e9cf2263a8f4363509362022-12-02 22:25:3423 hrs 5 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xe84a06d203ff299dcd29b8fd56bdaaf6e828ec3a0.7 MATIC
0x44fa20fbd3753c69aaefc4a0754a8508a56e5c21e416569d4b12e9cf2263a8f4363509362022-12-02 22:25:3423 hrs 5 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x57d5e99fd2e02b014fa67bed55bedb10322b123f0.7 MATIC
0x44fa20fbd3753c69aaefc4a0754a8508a56e5c21e416569d4b12e9cf2263a8f4363509362022-12-02 22:25:3423 hrs 5 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x7db1a2f972652020e8664005b6119f21a64c39b80.7 MATIC
0x44fa20fbd3753c69aaefc4a0754a8508a56e5c21e416569d4b12e9cf2263a8f4363509362022-12-02 22:25:3423 hrs 5 mins ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x57d5e99fd2e02b014fa67bed55bedb10322b123f0.7 MATIC
0x9cce707b88a4ffb4c515548373fd10db21bbdb5cd50bed5ed38f91b536de1f67363410622022-12-02 16:24:391 day 5 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xf2337df84f13bc4236fc021afe64f536d7da47864.86624519318653102 MATIC
0xa66f2bf0ae9f5c25aea2c16aa8808abc7912e4889c02360f288103ee4168a401363323932022-12-02 11:10:311 day 10 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xdf8c176a690d9b65592d4cb2cea6075c8e35af6611.058182342663163308 MATIC
0x6f04cf7699a7679cb598fd395e693400c6127cd6efc47df548eba6079e4cf0ac363302892022-12-02 9:52:031 day 11 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x4a25960c0de94537f4a0f9b04f418d421b47673340.762320493131973972 MATIC
0xbc41f8542f47e5ef8ff775140debc8d82850e058b2d39fb9ced091387b8897ec363302612022-12-02 9:51:071 day 11 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x4a25960c0de94537f4a0f9b04f418d421b47673325.640240557110135468 MATIC
0x996dfcf1c6db82a29b7dc0cb86a6b1b882b87bde8e94bfa992424ff53fba2d6c363280032022-12-02 8:31:231 day 12 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x57a34af3e29aa3339977b522414ec473397c2b8a5.74342810337356062 MATIC
0x8a49c916081d8532b918787960f86cd3d1c035c1fea1ad6ed181a3e5ee22bf57363260662022-12-02 7:18:151 day 14 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x4ef3f62f6c68e95d1a1f69ff39c590c4bf5173685.087866583124484552 MATIC
0x7d53eccb31fa49dee507cbe532b4d71c781ab4202ee7f6836137c15345833e96363236712022-12-02 5:53:471 day 15 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x40e623e91795596afddac195558f71db7b69bc160.234649684031291021 MATIC
0x1a57ccb94c1c2aeb698b7ce528ee2c352ee4c70b1800fdce14b99a16587efb22363196632022-12-02 3:35:441 day 17 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0x59d43258ad1a3784275f92d68a404e1347b559831.879476605087520153 MATIC
0x5b34d9b80472d67d6631215e49e48cf898a9b647dccc9f27da1edac63af4e83d363194492022-12-02 3:28:241 day 18 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xbc04da5ed4d2f24338f2dcb0a3ef835066d92d050.534026851899376528 MATIC
0xd4f8d84e80b94ebfd5fe323639b101cfa1f4f5f6cbb44d68fd29d78fbabd6638363153142022-12-02 1:03:281 day 20 hrs ago 0x668c82f9d909fb069e03c15c890f861e6c4b275f0xee528c22905b07fa54a320363c7adb605940bd8d18.801274354077603375 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Demountain

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-08-05
*/

/*██████  ███████ ███    ███  ██████  ██    ██ ███    ██ ████████  █████  ██ ███    ██       
██   ██ ██      ████  ████ ██    ██ ██    ██ ████   ██    ██    ██   ██ ██ ████   ██       
██   ██ █████   ██ ████ ██ ██    ██ ██    ██ ██ ██  ██    ██    ███████ ██ ██ ██  ██       
██   ██ ██      ██  ██  ██ ██    ██ ██    ██ ██  ██ ██    ██    ██   ██ ██ ██  ██ ██       
██████  ███████ ██      ██  ██████   ██████  ██   ████    ██    ██   ██ ██ ██   ████       
   ___                     _         __    __       
  / _ |   ___  _______    (_)__ ____/ /_  / /  __ __
 / __ |  / _ \/ __/ _ \  / / -_) __/ __/ / _ \/ // /
/_/_|_| / .__/_/  \___/_/ /\__/\__/\__/ /_.__/\_, / 
  / _ \/_/ ________ _|___/ ___  __ _____  / //___/  
 / ___/ _ `/ __/ _ `/  ' \/ _ \/ // / _ \/ __/      
/_/___\_,_/_/  \_,_/_/_/_/\___/\_,_/_//_/\__/       
  / __(_)__  ___ ____  _______                      
 / _// / _ \/ _ `/ _ \/ __/ -_)                     
/_/ /_/_//_/\_,_/_//_/\__/\__/                      
                                                    */
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

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

    function transfer(address to, 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 from,
        address to,
        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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata, ReentrancyGuard {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name = "DeMountain";
    string private _symbol = "MOUNT";

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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;
        }
    }
}

contract Demountain is ERC20, Ownable {
    event UserStake(
        address indexed addr,
        uint256 timestamp,
        uint256 rawAmount,
        uint256 duration
    );

    event UserStakeCollect(
        address indexed addr,
        uint256 timestamp,
        uint256 rawAmount
    );

    event UserLobby(address indexed addr, uint256 timestamp, uint256 rawAmount);

    event UserLobbyCollect(
        address indexed addr,
        uint256 timestamp,
        uint256 rawAmount
    );

    event stake_sell_request(
        address indexed addr,
        uint256 timestamp,
        uint256 price,
        uint256 rawAmount,
        uint256 stakeId
    );

    event stake_loan_request(
        address indexed addr,
        uint256 timestamp,
        uint256 rawAmount,
        uint256 duration,
        uint256 stakeId
    );

    event stake_lend(address indexed addr, uint256 timestamp, uint256 stakeId);

    event day_lobby_entry(uint256 timestamp, uint256 day, uint256 value);

    event lottery_winner(
        address indexed addr,
        uint256 amount,
        uint256 timestamp,
        uint256 lastRecord
    );

    event stake_sold(
        address indexed addr,
        address indexed addr_2,
        uint256 timestamp,
        uint256 amount,
        uint256 stakeId
    );

    constructor() {
        _mint(msg.sender, 3000000 * 1e18); // 3M goes for day 1 users of the old contract and their refs reward
    }

    /* Address of flush accs */
    address payable public paramountTeamAddr1 =
        payable(0x1Ffe3eEA7e5d30Bc5B7c333A1e6290Ab95eb26D7); // 2%
    address payable public paramountTeamAddr2 =
        payable(0x1Ffe3eEA7e5d30Bc5B7c333A1e6290Ab95eb26D7); // 2%
    address payable public paramountTeamAddr3 =
        payable(0x1Ffe3eEA7e5d30Bc5B7c333A1e6290Ab95eb26D7); // 2%
    address payable public paramountTeamAddr4 =
        payable(0x1Ffe3eEA7e5d30Bc5B7c333A1e6290Ab95eb26D7); // 2%

    /* last amount of lobby pool that are minted daily to be distributed between lobby participants which starts from 3 mil */
    uint256 public lastLobbyPool = 3000000 * 1e18;

    /* % from every day's lobby entry dedicated to paramount team, marketing and buy back */
    uint256 internal constant paramountTeamPercentage = 8;

    /* Every day's lobby pool is % lower than previous day's */
    uint256 internal constant lobby_pool_decrease_percentage = 5;

    /* % of every day's lobby entry to be pooled as divs */
    uint256 public percentOfLobbyToBePooled = 90;

    /* The ratio num for calculating stakes bonus tokens */
    uint256 internal constant bonus_calc_ratio = 128;

    /* Max staking days */
    uint256 internal constant max_stake_days = 300;

    /* Ref bonus NR*/
    uint256 internal constant ref_bonus_NR = 3;

    /* Refered person bonus NR*/
    uint256 internal constant ref_bonus_NRR = 15;

    /* dividends pool caps at 60 days, meaning that the lobby entery of days > 60 will only devide for next 60 days and no more */
    uint256 internal constant dividendsPoolCapDays = 60;

    /* Loaning feature is paused? */
    bool public loaningIsPaused = false;

    /* Stake selling feature is paused? */
    bool public stakeSellingIsPaused = false;

    /* virtual Entering feature is paused? */
    bool public virtualBalanceEnteringIsPaused = false;

    /* ------------------ for the sake of UI statistics ------------------ */
    // lobby memebrs overall data
    struct memberLobby_overallData {
        uint256 overall_collectedTokens;
        uint256 overall_lobbyEnteries;
        uint256 overall_stakedTokens;
        uint256 overall_collectedDivs;
    }
    // new map for every user's overall data
    mapping(address => memberLobby_overallData)
        public mapMemberLobby_overallData;
    // total lobby entry
    uint256 public overall_lobbyEntry;
    // total staked tokens
    uint256 public overall_stakedTokens;
    // total lobby token collected
    uint256 public overall_collectedTokens;
    // total stake divs collected
    uint256 public overall_collectedDivs;
    // total bonus token collected
    uint256 public overall_collectedBonusTokens;
    // total referrer bonus paid to an address
    mapping(address => uint256) public referrerBonusesPaid;
    // total referrer user by an address
    mapping(address => uint256) public referrerUsers;
    // counting unique (unique for every day only) lobby enteries for each day
    mapping(uint256 => uint256) public usersCountDaily;
    // counting unique (unique for every day only) users
    uint256 public usersCount = 0;
    /* Total ever entered as stake tokens */
    uint256 public saveTotalToken;
    /* ------------------ for the sake of UI statistics ------------------ */

    /* lobby memebrs data */
    struct memberLobby {
        uint256 extraVirtualTokens;
        uint256 memberLobbyValue;
        uint256 memberLobbyEntryDay;
        bool hasCollected;
        address referrer;
    }

    /* new map for every entry (users are allowed to enter multiple times a day) */
    mapping(address => mapping(uint256 => memberLobby)) public mapMemberLobby;

    /* day's total lobby entry */
    mapping(uint256 => uint256) public lobbyEntry;

    /* User stakes struct */
    struct memberStake {
        address userAddress;
        uint256 tokenValue;
        uint256 startDay;
        uint256 endDay;
        uint256 stakeId;
        uint256 price; // use: sell stake
        uint256 loansReturnAmount; // total of the loans return amount that have been taken on this stake
        bool stakeCollected;
        bool stake_hasSold; // stake been sold ?
        bool stake_forSell; // currently asking to sell stake ?
        bool stake_hasLoan; // is there an active loan on stake ?
        bool stake_forLoan; // currently asking for a loan on the stake ?
    }

    /* A map for each user */
    mapping(address => mapping(uint256 => memberStake)) public mapMemberStake;

    /* Total active tokens in stake for a day */
    mapping(uint256 => uint256) public daysActiveInStakeTokens;
    mapping(uint256 => uint256) public daysActiveInStakeTokensIncrese;
    mapping(uint256 => uint256) public daysActiveInStakeTokensDecrase;

    function switchLoaningStatus() external onlyOwner {
        if (loaningIsPaused == true) {
            loaningIsPaused = false;
        } else if (loaningIsPaused == false) {
            loaningIsPaused = true;
        }
    }

    function switchVirtualBalanceEntering() external onlyOwner {
        if (virtualBalanceEnteringIsPaused == true) {
            virtualBalanceEnteringIsPaused = false;
        } else if (virtualBalanceEnteringIsPaused == false) {
            virtualBalanceEnteringIsPaused = true;
        }
    }

    function switchStakeSellingStatus() external onlyOwner {
        if (stakeSellingIsPaused == true) {
            stakeSellingIsPaused = false;
        } else if (stakeSellingIsPaused == false) {
            stakeSellingIsPaused = true;
        }
    }

    function flushLottyPool() external onlyOwner nonReentrant {
        paramountTeamAddr1.transfer(lottery_Pool / 2);
        paramountTeamAddr2.transfer(lottery_Pool / 2);
    }

    function launch() external onlyOwner nonReentrant {
        require(!launched,"Already launched");
        LAUNCH_TIME = block.timestamp - 1 days;
        launched = true;
    }

    function changeTeam1Address(address payable adr) external onlyOwner {
        paramountTeamAddr1 = adr;
    }

    function changeTeam2Address(address payable adr) external onlyOwner {
        paramountTeamAddr2 = adr;
    }

    function changeTeam3Address(address payable adr) external onlyOwner {
        paramountTeamAddr3 = adr;
    }

    function changeTeam4Address(address payable adr) external onlyOwner {
        paramountTeamAddr4 = adr;
    }

    function flushdevShareOfStakeSells() external onlyOwner nonReentrant {
        require(devShareOfStakeSellsAndLoanFee > 0, "Zero balance");
        paramountTeamAddr1.transfer(devShareOfStakeSellsAndLoanFee / 2);
        paramountTeamAddr2.transfer(devShareOfStakeSellsAndLoanFee / 2);
        devShareOfStakeSellsAndLoanFee = 0;
    }

    /* Time of contract launch */
    uint256 LAUNCH_TIME;
    bool launched;
    uint256 currentDay;

    function _clcDay() public view returns (uint256) {
        return (block.timestamp - LAUNCH_TIME) / 1 days;
    }

    function _updateDaily() public {
        // this is true once a day
        if (currentDay != _clcDay()) {
            if (currentDay < dividendsPoolCapDays) {
                for (
                    uint256 _day = currentDay + 1;
                    _day <= currentDay * 2;
                    _day++
                ) {
                    dayBNBPool[_day] +=
                        (lobbyEntry[currentDay] * percentOfLobbyToBePooled) /
                        (currentDay * 100);
                }
            } else {
                for (
                    uint256 _day = currentDay + 1;
                    _day <= currentDay + dividendsPoolCapDays;
                    _day++
                ) {
                    dayBNBPool[_day] +=
                        (lobbyEntry[currentDay] * percentOfLobbyToBePooled) /
                        (dividendsPoolCapDays * 100);
                }
            }

            currentDay = _clcDay();
            _updateLobbyPool();
            _sendDevShare();

            // 0.5% of lobby entry of each day goes to lottery_Pool
            checkForLotteryWinner();
            lottery_Pool += (lobbyEntry[currentDay - 1] * 5) / 1000;

            lottery_topBuy_today = 0;

            emit day_lobby_entry(
                block.timestamp,
                currentDay,
                lobbyEntry[currentDay - 1]
            );
        }
    }

    /* Every day's lobby pool reduces by a % */
    function _updateLobbyPool() internal {
        lastLobbyPool -= ((lastLobbyPool * lobby_pool_decrease_percentage) /
            1000);
    }

    /* Gets called once a day and withdraws paramount team's share for the privious day of lobby */
    function _sendDevShare() internal nonReentrant {
        require(currentDay > 0, "Day 0");

        uint256 paramountTeamShare = (lobbyEntry[currentDay - 1] *
            paramountTeamPercentage) / 100;
        paramountTeamAddr1.transfer(paramountTeamShare / 4);
        paramountTeamAddr2.transfer(paramountTeamShare / 4);
        paramountTeamAddr3.transfer(paramountTeamShare / 4);
        paramountTeamAddr4.transfer(paramountTeamShare / 4);
    }

    /**
     * @dev User enters lobby with all of his finished stake divs and receives 10% extra virtual coins
     * @param referrerAddr address of referring user (optional; 0x0 for no referrer)
     * @param stakeId id of the target stake
     */
    function virtualBalanceEnteringLobby(address referrerAddr, uint256 stakeId)
        external
        nonReentrant
    {
        require(virtualBalanceEnteringIsPaused == false, "Paused");
        require(
            mapMemberStake[msg.sender][stakeId].endDay <= currentDay,
            "Wait for end time"
        );

        DoEndStake(stakeId, true);

        uint256 profit = calcStakeCollecting(msg.sender, stakeId);

        // enter lobby with 10% extra virtual BNB
        DoEnterLobby(
            referrerAddr,
            profit + ((profit * 10) / 100),
            ((profit * 10) / 100)
        );
    }

    /*
     * @dev External function for entering the auction lobby for the current day
     * @param referrerAddr address of referring user (optional; 0x0 for no referrer)
     * @param amount amount of Matic entrying to lobby
     */
    function EnterLobby(address referrerAddr) external payable {
        require(launched,"Wait for the launch");
        // transfer Matic from user wallet if stake profits have already sent to user
        DoEnterLobby(referrerAddr, msg.value, 0);
    }

    /**
     * @dev entering the auction lobby for the current day
     * @param referrerAddr address of referring user (optional; 0x0 for no referrer)
     * @param amount amount of Matic entrying to lobby
     * @param virtualExtraAmount the virtual amount of tokens
     */
    function DoEnterLobby(
        address referrerAddr,
        uint256 amount,
        uint256 virtualExtraAmount
    ) internal {
        uint256 rawAmount = amount;
        require(currentDay > 0, "Day 0");
        require(rawAmount > 0, "Amount can't be 0");

        _updateDaily();

        if (rawAmount >= lottery_topBuy_today) {
            // new top buyer
            lottery_topBuy_today = rawAmount;
            lottery_topBuyer_today = msg.sender;
        }

        if (mapMemberLobby[msg.sender][currentDay].memberLobbyValue == 0) {
            usersCount++;
            usersCountDaily[currentDay]++;
        }

        // raw amount is added by 10% virtual extra, since we don't want that 10% to be in the dividends calculation we remove it
        if (virtualExtraAmount > 0) {
            mapMemberLobby_overallData[msg.sender]
                .overall_lobbyEnteries += (rawAmount - virtualExtraAmount);
            lobbyEntry[currentDay] += (rawAmount - virtualExtraAmount);
            overall_lobbyEntry += (rawAmount - virtualExtraAmount);

            mapMemberLobby[msg.sender][currentDay]
                .extraVirtualTokens += virtualExtraAmount;
        } else {
            mapMemberLobby_overallData[msg.sender]
                .overall_lobbyEnteries += rawAmount;
            lobbyEntry[currentDay] += rawAmount;
            overall_lobbyEntry += rawAmount;
        }

        mapMemberLobby[msg.sender][currentDay].memberLobbyValue += rawAmount;
        mapMemberLobby[msg.sender][currentDay].memberLobbyEntryDay = currentDay;
        mapMemberLobby[msg.sender][currentDay].hasCollected = false;

        if (referrerAddr != msg.sender) {
            /* No Self-referred */
            mapMemberLobby[msg.sender][currentDay].referrer = referrerAddr;
        } else {
            mapMemberLobby[msg.sender][currentDay].referrer = address(0);
        }

        emit UserLobby(msg.sender, block.timestamp, rawAmount);
    }

    /**
     * @dev External function for leaving the lobby / collecting the tokens
     * @param targetDay Target day of lobby to collect
     */
    function ExitLobby(uint256 targetDay) external {
        require(
            mapMemberLobby[msg.sender][targetDay].hasCollected == false,
            "Already collected"
        );
        _updateDaily();
        require(targetDay < currentDay, "Wait for day end");

        uint256 tokensToPay = _clcTokenValue(msg.sender, targetDay);

        _mint(msg.sender, tokensToPay);
        mapMemberLobby[msg.sender][targetDay].hasCollected = true;

        overall_collectedTokens += tokensToPay;
        mapMemberLobby_overallData[msg.sender]
            .overall_collectedTokens += tokensToPay;

        address referrerAddress = mapMemberLobby[msg.sender][targetDay]
            .referrer;
        if (referrerAddress != address(0)) {
            /* there is a referrer, pay their % ref bonus of tokens */
            uint256 refBonus = (tokensToPay * ref_bonus_NR) / 100;
            referrerUsers[referrerAddress]++;

            _mint(referrerAddress, refBonus);
            referrerBonusesPaid[referrerAddress] += refBonus;

            /* pay the referred user bonus */
            _mint(msg.sender, (tokensToPay * ref_bonus_NRR) / 1000);
        }

        emit UserLobbyCollect(msg.sender, block.timestamp, tokensToPay);
    }

    /**
     * @dev Calculating user's share from lobby based on their entry value
     * @param _Day The lobby day
     */
    function _clcTokenValue(address _address, uint256 _Day)
        public
        view
        returns (uint256)
    {
        require(_Day != 0, "Day 0");
        uint256 _tokenVlaue;
        uint256 entryDay = mapMemberLobby[_address][_Day].memberLobbyEntryDay;

        if (entryDay != 0 && entryDay < currentDay) {
            _tokenVlaue =
                (lastLobbyPool *
                    mapMemberLobby[_address][_Day].memberLobbyValue) /
                lobbyEntry[entryDay];
        } else {
            _tokenVlaue = 0;
        }

        return _tokenVlaue;
    }

    mapping(uint256 => uint256) public dayBNBPool;
    mapping(uint256 => uint256) public enterytokenMath;
    mapping(uint256 => uint256) public totalTokensInActiveStake;

    /**
     * @dev External function for users to create a stake
     * @param amount Amount of Mount tokens to stake
     * @param stakingDays Stake duration in days
     */

    function EnterStake(uint256 amount, uint256 stakingDays) external {
        require(stakingDays >= 1, "Can't be 0");
        require(
            stakingDays <= max_stake_days,
            "Days greater than max duration"
        );
        require(balanceOf(msg.sender) >= amount, "Not enough balance");

        _updateDaily();
        uint256 stakeId = calcStakeCount(msg.sender);

        overall_stakedTokens += amount;
        mapMemberLobby_overallData[msg.sender].overall_stakedTokens += amount;

        mapMemberStake[msg.sender][stakeId].stakeId = stakeId;
        mapMemberStake[msg.sender][stakeId].userAddress = msg.sender;
        mapMemberStake[msg.sender][stakeId].tokenValue = amount;
        mapMemberStake[msg.sender][stakeId].startDay = currentDay + 1;
        mapMemberStake[msg.sender][stakeId].endDay =
            currentDay +
            1 +
            stakingDays;
        mapMemberStake[msg.sender][stakeId].stakeCollected = false;
        mapMemberStake[msg.sender][stakeId].stake_hasSold = false;
        mapMemberStake[msg.sender][stakeId].stake_hasLoan = false;
        mapMemberStake[msg.sender][stakeId].stake_forSell = false;
        mapMemberStake[msg.sender][stakeId].stake_forLoan = false;
        // stake calcs for days: X >= startDay && X < endDay
        // startDay included / endDay not included

        for (uint256 i = currentDay + 1; i <= currentDay + stakingDays; i++) {
            totalTokensInActiveStake[i] += amount;
        }

        saveTotalToken += amount;
        daysActiveInStakeTokensIncrese[currentDay + 1] += amount;
        daysActiveInStakeTokensDecrase[currentDay + stakingDays + 1] += amount;

        /* On stake Mount tokens get burned */
        _burn(msg.sender, amount);

        emit UserStake(msg.sender, block.timestamp, amount, stakingDays);
    }

    /**
     * @dev Counting user's stakes to be usead as stake id for a new stake
     * @param _address address of the user
     */
    function calcStakeCount(address _address) public view returns (uint256) {
        uint256 stakeCount = 0;

        for (
            uint256 i = 0;
            mapMemberStake[_address][i].userAddress == _address;
            i++
        ) {
            stakeCount += 1;
        }

        return (stakeCount);
    }

    /**
     * @dev External function for collecting a stake
     * @param stakeId Id of the target stake
     */
    function EndStake(uint256 stakeId) external nonReentrant {
        DoEndStake(stakeId, false);
    }

    /**
     * @dev Collecting a stake
     * @param stakeId Id of the target stake
     * @param doNotSendDivs do or not do sent the stake's divs to the user (used when re entring the lobby using the stake's divs)
     */
    function DoEndStake(uint256 stakeId, bool doNotSendDivs) internal {
        require(
            mapMemberStake[msg.sender][stakeId].endDay <= currentDay,
            "Wait for end time"
        );
        require(
            mapMemberStake[msg.sender][stakeId].userAddress == msg.sender,
            "Unauthorized"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stakeCollected == false,
            "Already collected"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasSold == false,
            "Already sold"
        );

        _updateDaily();

        /* if the stake is for sell, set it false since it's collected */
        mapMemberStake[msg.sender][stakeId].stake_forSell = false;
        mapMemberStake[msg.sender][stakeId].stake_forLoan = false;

        /* clc BNB divs */
        uint256 profit = calcStakeCollecting(msg.sender, stakeId);
        overall_collectedDivs += profit;
        mapMemberLobby_overallData[msg.sender].overall_collectedDivs += profit;

        mapMemberStake[msg.sender][stakeId].stakeCollected = true;

        if (doNotSendDivs == true) {} else {
            payable(msg.sender).transfer(profit);
        }

        /* if the stake has loan on it automatically pay the lender and finish the loan */
        if (mapMemberStake[msg.sender][stakeId].stake_hasLoan == true) {
            updateFinishedLoan(
                mapRequestingLoans[msg.sender][stakeId].lenderAddress,
                msg.sender,
                mapRequestingLoans[msg.sender][stakeId].lenderLendId,
                stakeId
            );
        }

        uint256 stakeReturn = mapMemberStake[msg.sender][stakeId].tokenValue;

        /* Pay the bonus token and stake return, if any, to the staker */
        if (stakeReturn != 0) {
            uint256 bonusAmount = calcBonusToken(
                mapMemberStake[msg.sender][stakeId].endDay -
                    mapMemberStake[msg.sender][stakeId].startDay,
                stakeReturn
            );

            overall_collectedBonusTokens += bonusAmount;

            _mint(msg.sender, stakeReturn + bonusAmount);
        }

        emit UserStakeCollect(msg.sender, block.timestamp, profit);
    }

    /**
     * @dev Calculating a stakes BNB divs payout value by looping through each day of it
     * @param _address User address
     * @param _stakeId Id of the target stake
     */
    function calcStakeCollecting(address _address, uint256 _stakeId)
        public
        view
        returns (uint256)
    {
        uint256 userDivs;
        uint256 _endDay = mapMemberStake[_address][_stakeId].endDay;
        uint256 _startDay = mapMemberStake[_address][_stakeId].startDay;
        uint256 _stakeValue = mapMemberStake[_address][_stakeId].tokenValue;

        for (
            uint256 _day = _startDay;
            _day < _endDay && _day < currentDay;
            _day++
        ) {
            userDivs +=
                (dayBNBPool[_day] * _stakeValue) /
                totalTokensInActiveStake[_day];
        }

        return (userDivs -
            mapMemberStake[_address][_stakeId].loansReturnAmount);
    }

    /**
     * @dev Calculating a stakes Bonus Mount tokens based on stake duration and stake amount
     * @param StakeDuration The stake's days
     * @param StakeAmount The stake's Mount tokens amount
     */
    function calcBonusToken(uint256 StakeDuration, uint256 StakeAmount)
        public
        pure
        returns (uint256)
    {
        require(
            StakeDuration <= max_stake_days,
            "Days greater than max duration"
        );

        uint256 _bonusAmount = StakeAmount *
            ((StakeDuration**2) * bonus_calc_ratio);
        return _bonusAmount / 1e7;
    }

    /**
     * @dev calculating user dividends for a specific day
     */

    uint256 public devShareOfStakeSellsAndLoanFee;
    uint256 public totalStakesSold;
    uint256 public totalTradeAmount;

    /* withdrawable funds for the stake seller address */
    mapping(address => uint256) public soldStakeFunds;
    mapping(address => uint256) public totalStakeTradeAmount;

    /* sell Stake requests data */

    struct SellStakeData {
        address userAddress;
        uint256 stakeId;
    }

    uint256 public sellStakeRequestCount;
    mapping(uint256 => SellStakeData) public sellStakeRequests;

    /**
     * @dev User putting up their stake for sell or user changing the previously setted sell price of their stake
     * @param stakeId stake id
     * @param price sell price for the stake
     */
    function sellStakeRequest(uint256 stakeId, uint256 price) external {
        _updateDaily();

        require(stakeSellingIsPaused == false, "Paused");
        require(
            mapMemberStake[msg.sender][stakeId].userAddress == msg.sender,
            "Unauthorized"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasLoan == false,
            "Stake has loan"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasSold == false,
            "Stake has been sold"
        );
        require(
            mapMemberStake[msg.sender][stakeId].endDay > currentDay,
            "Stake ended"
        );

        /* if stake is for loan, remove it from loan requests */
        if (mapMemberStake[msg.sender][stakeId].stake_forLoan == true) {
            cancelStakeLoanRequest(stakeId);
        }

        require(
            mapMemberStake[msg.sender][stakeId].stake_forLoan == false,
            "Stake has active loan"
        );

        mapMemberStake[msg.sender][stakeId].stake_forSell = true;
        mapMemberStake[msg.sender][stakeId].price = price;

        sellStakeRequests[sellStakeRequestCount].userAddress = msg.sender;
        sellStakeRequests[sellStakeRequestCount].stakeId = stakeId;
        sellStakeRequestCount++;

        emit stake_sell_request(
            msg.sender,
            block.timestamp,
            price,
            mapMemberStake[msg.sender][stakeId].tokenValue,
            stakeId
        );
    }

    /**
     * @dev A user buying a stake
     * @param sellerAddress stake seller address (current stake owner address)
     * @param stakeId stake id
     */
    function buyStakeRequest(address sellerAddress, uint256 stakeId)
        external
        payable
    {
        _updateDaily();

        require(stakeSellingIsPaused == false, "Paused");
        require(
            mapMemberStake[sellerAddress][stakeId].userAddress != msg.sender,
            "no self buy"
        );
        require(
            mapMemberStake[sellerAddress][stakeId].userAddress == sellerAddress,
            "Unauthorized"
        );
        require(
            mapMemberStake[sellerAddress][stakeId].stake_hasSold == false,
            "Stake has been sold"
        );
        require(
            mapMemberStake[sellerAddress][stakeId].stake_forSell == true,
            "Stake is not for sell"
        );
        uint256 priceP = msg.value;
        require(
            mapMemberStake[sellerAddress][stakeId].price == priceP,
            "Not enough funds"
        );
        require(
            mapMemberStake[sellerAddress][stakeId].endDay > currentDay,
            "Stake ended"
        );

        lobbyEntry[currentDay] +=
            (mapMemberStake[sellerAddress][stakeId].price * 8) /
            100;
        devShareOfStakeSellsAndLoanFee +=
            (mapMemberStake[sellerAddress][stakeId].price * 2) /
            100;
        soldStakeFunds[sellerAddress] +=
            (mapMemberStake[sellerAddress][stakeId].price * 90) /
            100;

        /* setting data for the old owner */
        mapMemberStake[sellerAddress][stakeId].stake_hasSold = true;
        mapMemberStake[sellerAddress][stakeId].stake_forSell = false;
        mapMemberStake[sellerAddress][stakeId].stakeCollected = true;

        totalStakeTradeAmount[msg.sender] += priceP;
        totalStakeTradeAmount[sellerAddress] += priceP;

        totalStakesSold += 1;
        totalTradeAmount += priceP;

        /* new stake & stake ID for the new stake owner (the stake buyer) */
        uint256 newStakeId = calcStakeCount(msg.sender);
        mapMemberStake[msg.sender][newStakeId].userAddress = msg.sender;
        mapMemberStake[msg.sender][newStakeId].tokenValue = mapMemberStake[
            sellerAddress
        ][stakeId].tokenValue;
        mapMemberStake[msg.sender][newStakeId].startDay = mapMemberStake[
            sellerAddress
        ][stakeId].startDay;
        mapMemberStake[msg.sender][newStakeId].endDay = mapMemberStake[
            sellerAddress
        ][stakeId].endDay;
        mapMemberStake[msg.sender][newStakeId]
            .loansReturnAmount = mapMemberStake[sellerAddress][stakeId]
            .loansReturnAmount;
        mapMemberStake[msg.sender][newStakeId].stakeId = newStakeId;
        mapMemberStake[msg.sender][newStakeId].stakeCollected = false;
        mapMemberStake[msg.sender][newStakeId].stake_hasSold = false;
        mapMemberStake[msg.sender][newStakeId].stake_hasLoan = false;
        mapMemberStake[msg.sender][newStakeId].stake_forSell = false;
        mapMemberStake[msg.sender][newStakeId].stake_forLoan = false;
        mapMemberStake[msg.sender][newStakeId].price = 0;

        emit stake_sold(
            sellerAddress,
            msg.sender,
            block.timestamp,
            priceP,
            stakeId
        );
    }

    /**
     * @dev User asking to withdraw their funds from their sold stake
     */
    function withdrawSoldStakeFunds() external nonReentrant {
        require(soldStakeFunds[msg.sender] > 0, "No funds to withdraw");

        uint256 toBeSend = soldStakeFunds[msg.sender];
        soldStakeFunds[msg.sender] = 0;

        payable(msg.sender).transfer(toBeSend);
    }

    struct loanRequest {
        address loanerAddress; // address
        address lenderAddress; // address (sets after loan request accepted by a lender)
        uint256 stakeId; // id of the stakes that is being loaned on
        uint256 lenderLendId; // id of the lends that a lender has given out (sets after loan request accepted by a lender)
        uint256 loanAmount; // requesting loan BNB amount
        uint256 returnAmount; // requesting loan BNB return amount
        uint256 duration; // duration of loan (days)
        uint256 lend_startDay; // lend start day (sets after loan request accepted by a lender)
        uint256 lend_endDay; // lend end day (sets after loan request accepted by a lender)
        bool hasLoan;
        bool loanIsPaid; // gets true after loan due date is reached and loan is paid
    }

    struct lendInfo {
        address lenderAddress;
        address loanerAddress;
        uint256 lenderLendId;
        uint256 loanAmount;
        uint256 returnAmount;
        uint256 endDay;
        bool loanIsPaid;
    }

    struct lendStakeData {
        address userAddress;
        uint256 stakeId;
    }

    /* withdrawable funds for the loaner address */
    mapping(address => uint256) public LoanedFunds;
    mapping(address => uint256) public LendedFunds;

    uint256 public totalLoanedAmount;
    uint256 public totalLoanedCount;

    /* lend Stake requests data */
    uint256 public lendStakeRequestCount;
    mapping(uint256 => lendStakeData) public lendStakeRequests;

    mapping(address => mapping(uint256 => loanRequest))
        public mapRequestingLoans;
    mapping(address => mapping(uint256 => lendInfo)) public mapLenderInfo;
    mapping(address => uint256) public lendersPaidAmount; // total amounts of paid to lender

    /**
     * @dev User submiting a loan request on their stake or changing the previously setted loan request data
     * @param stakeId stake id
     * @param loanAmount amount of requesting BNB loan
     * @param returnAmount amount of BNB loan return
     * @param loanDuration duration of requesting loan
     */
    function getLoanOnStake(
        uint256 stakeId,
        uint256 loanAmount,
        uint256 returnAmount,
        uint256 loanDuration
    ) external {
        _updateDaily();

        require(loaningIsPaused == false, "Paused");
        require(
            loanAmount < returnAmount,
            "Loan return must be higher than loan amount"
        );
        require(loanDuration >= 4, "Lowest loan duration is 4 days");
        require(
            mapMemberStake[msg.sender][stakeId].userAddress == msg.sender,
            "Unauthorized"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasLoan == false,
            "Stake has an active loan on it"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasSold == false,
            "Stake has been sold"
        );
        require(
            mapMemberStake[msg.sender][stakeId].endDay - loanDuration >
                currentDay,
            "Invalid duration"
        );

        /* calc stake divs */
        uint256 stakeDivs = calcStakeCollecting(msg.sender, stakeId);

        /* max amount of possible stake return can not be higher than stake's divs */
        require(
            returnAmount <= stakeDivs,
            "Return amount greater than Dividends"
        );

        /* if stake is for sell, remove it from sell requests */
        if (mapMemberStake[msg.sender][stakeId].stake_forSell == true) {
            cancelSellStakeRequest(stakeId);
        }

        require(
            mapMemberStake[msg.sender][stakeId].stake_forSell == false,
            "Stake for sale"
        );

        mapMemberStake[msg.sender][stakeId].stake_forLoan = true;

        /* data of the requesting loan */
        mapRequestingLoans[msg.sender][stakeId].loanerAddress = msg.sender;
        mapRequestingLoans[msg.sender][stakeId].stakeId = stakeId;
        mapRequestingLoans[msg.sender][stakeId].loanAmount = loanAmount;
        mapRequestingLoans[msg.sender][stakeId].returnAmount = returnAmount;
        mapRequestingLoans[msg.sender][stakeId].duration = loanDuration;
        mapRequestingLoans[msg.sender][stakeId].loanIsPaid = false;

        lendStakeRequests[lendStakeRequestCount].userAddress = msg.sender;
        lendStakeRequests[lendStakeRequestCount].stakeId = stakeId;
        lendStakeRequestCount++;

        emit stake_loan_request(
            msg.sender,
            block.timestamp,
            loanAmount,
            loanDuration,
            stakeId
        );
    }

    /**
     * @dev Canceling loan request
     * @param stakeId stake id
     */
    function cancelStakeLoanRequest(uint256 stakeId) public {
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasLoan == false,
            "Stake has loan"
        );
        mapMemberStake[msg.sender][stakeId].stake_forLoan = false;
    }

    /**
     * @dev User asking to their stake's sell request
     */
    function cancelSellStakeRequest(uint256 stakeId) public {
        require(
            mapMemberStake[msg.sender][stakeId].userAddress == msg.sender,
            "Unauthorized"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_forSell == true,
            "Stake not for sell"
        );
        require(
            mapMemberStake[msg.sender][stakeId].stake_hasSold == false,
            "Stake sold"
        );

        mapMemberStake[msg.sender][stakeId].stake_forSell = false;
    }

    /*
     * @dev User filling loan request (lending)
     * @param loanerAddress address of loaner aka the person who is requesting for loan
     * @param stakeId stake id
     * @param amount lend amount that is tranfered to the contract
     */
    function lendOnStake(address loanerAddress, uint256 stakeId)
        external
        payable
        nonReentrant
    {
        _updateDaily();

        require(loaningIsPaused == false, "Paused");
        require(
            mapMemberStake[loanerAddress][stakeId].userAddress != msg.sender,
            "no self lend"
        );
        require(
            mapMemberStake[loanerAddress][stakeId].stake_hasLoan == false,
            "Stake has an active loan on it"
        );
        require(
            mapMemberStake[loanerAddress][stakeId].stake_forLoan == true,
            "Stake is not requesting a loan"
        );
        require(
            mapMemberStake[loanerAddress][stakeId].stake_hasSold == false,
            "Stake is sold"
        );
        require(
            mapMemberStake[loanerAddress][stakeId].endDay > currentDay,
            "Stake duration is finished"
        );

        uint256 loanAmount = mapRequestingLoans[loanerAddress][stakeId]
            .loanAmount;
        uint256 returnAmount = mapRequestingLoans[loanerAddress][stakeId]
            .returnAmount;
        uint256 rawAmount = msg.value;

        require(
            rawAmount == mapRequestingLoans[loanerAddress][stakeId].loanAmount,
            "Invalid amount"
        );

        uint256 theLoanFee = (rawAmount * 2) / 100;
        devShareOfStakeSellsAndLoanFee += theLoanFee / 2;
        lobbyEntry[currentDay] += theLoanFee / 2;

        mapMemberStake[loanerAddress][stakeId]
            .loansReturnAmount += returnAmount;
        mapMemberStake[loanerAddress][stakeId].stake_hasLoan = true;
        mapMemberStake[loanerAddress][stakeId].stake_forLoan = false;

        uint256 lenderLendId = clcLenderLendId(msg.sender);

        mapRequestingLoans[loanerAddress][stakeId].hasLoan = true;
        mapRequestingLoans[loanerAddress][stakeId].loanIsPaid = false;
        mapRequestingLoans[loanerAddress][stakeId].lenderAddress = msg.sender;
        mapRequestingLoans[loanerAddress][stakeId].lenderLendId = lenderLendId;
        mapRequestingLoans[loanerAddress][stakeId].lend_startDay =
            currentDay +
            1;
        mapRequestingLoans[loanerAddress][stakeId].lend_endDay =
            currentDay +
            1 +
            mapRequestingLoans[loanerAddress][stakeId].duration;

        mapLenderInfo[msg.sender][lenderLendId].lenderAddress = msg.sender;
        mapLenderInfo[msg.sender][lenderLendId].loanerAddress = loanerAddress;
        mapLenderInfo[msg.sender][lenderLendId].lenderLendId = lenderLendId; // not same with the stake id on "mapRequestingLoans"
        mapLenderInfo[msg.sender][lenderLendId].loanAmount = loanAmount;
        mapLenderInfo[msg.sender][lenderLendId].returnAmount = returnAmount;
        mapLenderInfo[msg.sender][lenderLendId].endDay = mapRequestingLoans[
            loanerAddress
        ][stakeId].lend_endDay;

        LoanedFunds[loanerAddress] += (rawAmount * 98) / 100;
        LendedFunds[mapRequestingLoans[loanerAddress][stakeId].lenderAddress] +=
            (rawAmount * 98) /
            100;
        totalLoanedAmount += (rawAmount * 98) / 100;
        totalLoanedCount += 1;

        emit stake_lend(msg.sender, block.timestamp, lenderLendId);
    }

    /**
     * @dev User asking to withdraw their loaned funds
     */
    function withdrawLoanedFunds() external nonReentrant {
        require(LoanedFunds[msg.sender] > 0, "No funds to withdraw");

        uint256 toBeSend = LoanedFunds[msg.sender];
        LoanedFunds[msg.sender] = 0;

        payable(msg.sender).transfer(toBeSend);
    }

    /**
     * @dev returns a unique id for the lend by lopping through the user's lends and counting them
     * @param _address the lender user address
     */
    function clcLenderLendId(address _address) public view returns (uint256) {
        uint256 stakeCount = 0;

        for (
            uint256 i = 0;
            mapLenderInfo[_address][i].lenderAddress == _address;
            i++
        ) {
            stakeCount += 1;
        }

        return stakeCount;
    }

    /* 
        after a loan's due date is reached there is no automatic way in contract to pay the lender and set the lend data as finished (for the sake of performance and gas)
        so either the lender user calls the "collectLendReturn" function or the loaner user automatically call the  "updateFinishedLoan" function by trying to collect their stake 
    */

    /**
     * @dev Lender requesting to collect their return amount from their finished lend
     * @param stakeId id of a loaner's stake for that the loaner requested a loan and received a lend
     * @param lenderLendId id of the lends that a lender has given out (different from stakeId)
     */
    function collectLendReturn(uint256 stakeId, uint256 lenderLendId)
        external
        nonReentrant
    {
        updateFinishedLoan(
            msg.sender,
            mapLenderInfo[msg.sender][lenderLendId].loanerAddress,
            lenderLendId,
            stakeId
        );
    }

    /**
     * @dev Checks if the loan on loaner's stake is finished
     * @param lenderAddress lender address
     * @param loanerAddress loaner address
     * @param lenderLendId id of the lends that a lender has given out (different from stakeId)
     * @param stakeId id of a loaner's stake for that the loaner requested a loan and received a lend
     */
    function updateFinishedLoan(
        address lenderAddress,
        address loanerAddress,
        uint256 lenderLendId,
        uint256 stakeId
    ) internal {
        _updateDaily();

        require(
            mapMemberStake[loanerAddress][stakeId].stake_hasLoan == true,
            "Stake does not have an active loan on it"
        );
        require(
            currentDay >=
                mapRequestingLoans[loanerAddress][stakeId].lend_endDay,
            "Due date not yet reached"
        );
        require(
            mapLenderInfo[lenderAddress][lenderLendId].loanIsPaid == false,
            "Loan has been paid"
        );
        require(
            mapRequestingLoans[loanerAddress][stakeId].loanIsPaid == false,
            "Loan has been paid"
        );
        require(
            mapRequestingLoans[loanerAddress][stakeId].hasLoan == true,
            "Stake doesn't have active loan"
        );
        require(
            mapRequestingLoans[loanerAddress][stakeId].lenderAddress ==
                lenderAddress,
            "Unauthorized"
        );
        require(
            mapRequestingLoans[loanerAddress][stakeId].lenderLendId ==
                lenderLendId,
            "Id not matched"
        );

        mapMemberStake[loanerAddress][stakeId].stake_hasLoan = false;
        mapLenderInfo[lenderAddress][lenderLendId].loanIsPaid = true;
        mapRequestingLoans[loanerAddress][stakeId].hasLoan = false;
        mapRequestingLoans[loanerAddress][stakeId].loanIsPaid = true;

        uint256 toBePaid = mapRequestingLoans[loanerAddress][stakeId]
            .returnAmount;
        lendersPaidAmount[lenderAddress] += toBePaid;

        mapRequestingLoans[loanerAddress][stakeId].returnAmount = 0;

        payable(lenderAddress).transfer(toBePaid);
    }

    /* Lottery data */
    uint256 public lottery_topBuy_today;
    address public lottery_topBuyer_today;
    uint256 public lottery_topBuy_latest;
    uint256 public lottery_Pool;

    /**
     * @dev Runs once a day and checks for lottry winner
     */
    function checkForLotteryWinner() internal nonReentrant {
        if (lottery_topBuy_today > lottery_topBuy_latest) {
            // we have a winner
            // 30% of the pool goes to the winner

            lottery_topBuy_latest = lottery_topBuy_today;

            if (currentDay >= 7) {
                payable(lottery_topBuyer_today).transfer(
                    ((lottery_Pool * 30) / 100)
                );
                lottery_Pool = (lottery_Pool * 70) / 100;

                emit lottery_winner(
                    lottery_topBuyer_today,
                    ((lottery_Pool * 30) / 100),
                    block.timestamp,
                    lottery_topBuy_latest
                );
            }
        } else {
            // no winner, reducing the record by 2.5%
            lottery_topBuy_latest -= (lottery_topBuy_latest * 25) / 1000;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"UserLobby","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"UserLobbyCollect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"UserStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"UserStakeCollect","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"day_lobby_entry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRecord","type":"uint256"}],"name":"lottery_winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"stake_lend","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"stake_loan_request","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rawAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"stake_sell_request","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"addr_2","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"stake_sold","type":"event"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"EndStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrerAddr","type":"address"}],"name":"EnterLobby","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakingDays","type":"uint256"}],"name":"EnterStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetDay","type":"uint256"}],"name":"ExitLobby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LendedFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LoanedFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_clcDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_Day","type":"uint256"}],"name":"_clcTokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_updateDaily","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sellerAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"buyStakeRequest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"StakeDuration","type":"uint256"},{"internalType":"uint256","name":"StakeAmount","type":"uint256"}],"name":"calcBonusToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_stakeId","type":"uint256"}],"name":"calcStakeCollecting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"calcStakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"cancelSellStakeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"cancelStakeLoanRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"changeTeam1Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"changeTeam2Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"changeTeam3Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"changeTeam4Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"clcLenderLendId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"lenderLendId","type":"uint256"}],"name":"collectLendReturn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dayBNBPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"daysActiveInStakeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"daysActiveInStakeTokensDecrase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"daysActiveInStakeTokensIncrese","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devShareOfStakeSellsAndLoanFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"enterytokenMath","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flushLottyPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flushdevShareOfStakeSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"loanDuration","type":"uint256"}],"name":"getLoanOnStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLobbyPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"loanerAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"lendOnStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lendStakeRequestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lendStakeRequests","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lendersPaidAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loaningIsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lobbyEntry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottery_Pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottery_topBuy_latest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottery_topBuy_today","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottery_topBuyer_today","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapLenderInfo","outputs":[{"internalType":"address","name":"lenderAddress","type":"address"},{"internalType":"address","name":"loanerAddress","type":"address"},{"internalType":"uint256","name":"lenderLendId","type":"uint256"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"endDay","type":"uint256"},{"internalType":"bool","name":"loanIsPaid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapMemberLobby","outputs":[{"internalType":"uint256","name":"extraVirtualTokens","type":"uint256"},{"internalType":"uint256","name":"memberLobbyValue","type":"uint256"},{"internalType":"uint256","name":"memberLobbyEntryDay","type":"uint256"},{"internalType":"bool","name":"hasCollected","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapMemberLobby_overallData","outputs":[{"internalType":"uint256","name":"overall_collectedTokens","type":"uint256"},{"internalType":"uint256","name":"overall_lobbyEnteries","type":"uint256"},{"internalType":"uint256","name":"overall_stakedTokens","type":"uint256"},{"internalType":"uint256","name":"overall_collectedDivs","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapMemberStake","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"tokenValue","type":"uint256"},{"internalType":"uint256","name":"startDay","type":"uint256"},{"internalType":"uint256","name":"endDay","type":"uint256"},{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"loansReturnAmount","type":"uint256"},{"internalType":"bool","name":"stakeCollected","type":"bool"},{"internalType":"bool","name":"stake_hasSold","type":"bool"},{"internalType":"bool","name":"stake_forSell","type":"bool"},{"internalType":"bool","name":"stake_hasLoan","type":"bool"},{"internalType":"bool","name":"stake_forLoan","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapRequestingLoans","outputs":[{"internalType":"address","name":"loanerAddress","type":"address"},{"internalType":"address","name":"lenderAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"lenderLendId","type":"uint256"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"lend_startDay","type":"uint256"},{"internalType":"uint256","name":"lend_endDay","type":"uint256"},{"internalType":"bool","name":"hasLoan","type":"bool"},{"internalType":"bool","name":"loanIsPaid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overall_collectedBonusTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overall_collectedDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overall_collectedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overall_lobbyEntry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overall_stakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paramountTeamAddr1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paramountTeamAddr2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paramountTeamAddr3","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paramountTeamAddr4","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentOfLobbyToBePooled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrerBonusesPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrerUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveTotalToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"sellStakeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellStakeRequestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellStakeRequests","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"soldStakeFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeSellingIsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchLoaningStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchStakeSellingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchVirtualBalanceEntering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLoanedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLoanedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalStakeTradeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakesSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTokensInActiveStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTradeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usersCountDaily","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"virtualBalanceEnteringIsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrerAddr","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"virtualBalanceEnteringLobby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLoanedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawSoldStakeFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600a6080819052692232a6b7bab73a30b4b760b11b60a09081526200002d91600491906200023f565b50604080518082019091526005808252641353d5539560da1b60209092019182526200005a91816200023f565b5060078054731ffe3eea7e5d30bc5b7c333a1e6290ab95eb26d76001600160a01b031991821681179092556008805482168317905560098054821683179055600a805490911690911790556a027b46536c66c8e3000000600b55605a600c55600d805462ffffff191690556000601755348015620000d757600080fd5b506001600055620000e83362000105565b620000ff336a027b46536c66c8e300000062000157565b62000349565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001b25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060036000828254620001c69190620002e5565b90915550506001600160a01b03821660009081526001602052604081208054839290620001f5908490620002e5565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200024d906200030c565b90600052602060002090601f016020900481019282620002715760008555620002bc565b82601f106200028c57805160ff1916838001178555620002bc565b82800160010185558215620002bc579182015b82811115620002bc5782518255916020019190600101906200029f565b50620002ca929150620002ce565b5090565b5b80821115620002ca5760008155600101620002cf565b600082198211156200030757634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200032157607f821691505b602082108114156200034357634e487b7160e01b600052602260045260246000fd5b50919050565b6156a080620003596000396000f3fe60806040526004361061050d5760003560e01c80637bdece6911610297578063acccdef711610165578063dd01c17c116100cc578063e95b385b11610085578063e95b385b14611309578063f2fde38b1461131e578063f35a61c91461133e578063f44a4d561461136b578063f63d783114611398578063f8591b2d146113b857600080fd5b8063dd01c17c14611246578063dd55127314611273578063dd62ed3e14611293578063e057b61b146112b3578063e5c2e9db146112d3578063e686b994146112e957600080fd5b8063cbcedb5f1161011e578063cbcedb5f1461118b578063ccff6168146111b8578063d5e44638146111ce578063d991d8aa146111ee578063dc1a448c14611204578063dc39fabd1461121957600080fd5b8063acccdef714610fac578063ad9713d714610fd9578063b3e6efac14611006578063b4eb861314611111578063b76c934114611131578063be6b98321461115e57600080fd5b80639cccbd6c11610209578063a88a0025116101c2578063a88a002514610ef6578063a9059cbb14610f16578063a9e1506a14610f36578063a9f1959514610f56578063aadb44cd14610f76578063ab69a73514610f8c57600080fd5b80639cccbd6c14610e685780639dbac83314610e7e578063a41d177014610e94578063a457c2d714610eaa578063a6234d0f14610eca578063a7469f7c14610ee057600080fd5b80638a80f1a31161025b5780638a80f1a314610d395780638da5cb5b14610ded57806391dbf26a14610e0b57806394dc5fba14610e2057806395d89b4114610e33578063960b6fb014610e4857600080fd5b80637bdece6914610be9578063819bd33c14610bfc57806382cf058e14610c1257806384f61fa414610d0457806386897ff414610d1957600080fd5b806339509351116103df57806352b86b3a11610346578063680b753b116102ff578063680b753b14610b1b5780636822ce8614610b3b578063695f1dcf14610b685780636ba13a8214610b8857806370a0823114610b9e578063715018a614610bd457600080fd5b806352b86b3a14610a5057806356a4604014610a70578063572db2c814610a855780635b8e8c6414610ab25780635ea2e45814610ac557806365fb717314610adb57600080fd5b80634a74740c116103985780634a74740c146109645780634b05fd89146109795780634b9feb0c146109995780634c74291a146109fb5780634f1b88ae14610a1b5780634f7eb90914610a3157600080fd5b806339509351146108415780633c3d62af146108615780633da083ab1461088157806340a6f1ab1461089b5780634367815d146108b1578063472029321461094457600080fd5b806316b8a357116104835780632940b6dd1161043c5780632940b6dd146107975780632b4dfe8c146107b75780632e55034f146107cd57806330aa7ec2146107e3578063313ce567146107f857806338c0f4b61461081457600080fd5b806316b8a357146106ea57806318160ddd146107175780631e5fca631461072c5780631ea9ab751461074157806323b872dd1461075757806326df5add1461077757600080fd5b806307283166116104d557806307283166146105e3578063095ea7b3146106105780630b19fd42146106405780630ba5ded6146106565780630bde3e4d1461066b578063135c81131461068b57600080fd5b806301339c211461051257806301c8d3a81461052957806301df709d14610569578063058cc74b146105a157806306fdde03146105c1575b600080fd5b34801561051e57600080fd5b506105276113ce565b005b34801561053557600080fd5b506105566105443660046151fc565b601c6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561057557600080fd5b50600954610589906001600160a01b031681565b6040516001600160a01b039091168152602001610560565b3480156105ad57600080fd5b506105276105bc3660046151fc565b611494565b3480156105cd57600080fd5b506105d6611524565b6040516105609190615215565b3480156105ef57600080fd5b506105566105fe3660046151fc565b60166020526000908152604090205481565b34801561061c57600080fd5b5061063061062b36600461527f565b6115b6565b6040519015158152602001610560565b34801561064c57600080fd5b5061055660385481565b34801561066257600080fd5b506105276115d0565b34801561067757600080fd5b506105276106863660046152ab565b611694565b34801561069757600080fd5b506106cb6106a63660046151fc565b602b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b039093168352602083019190915201610560565b3480156106f657600080fd5b506105566107053660046152ab565b60286020526000908152604090205481565b34801561072357600080fd5b50600354610556565b34801561073857600080fd5b506105276116e0565b34801561074d57600080fd5b50610556600b5481565b34801561076357600080fd5b506106306107723660046152cf565b6117cf565b34801561078357600080fd5b506105276107923660046152ab565b6117f3565b3480156107a357600080fd5b50603654610589906001600160a01b031681565b3480156107c357600080fd5b5061055660185481565b3480156107d957600080fd5b5061055660355481565b3480156107ef57600080fd5b5061052761183f565b34801561080457600080fd5b5060405160128152602001610560565b34801561082057600080fd5b5061055661082f3660046151fc565b601a6020526000908152604090205481565b34801561084d57600080fd5b5061063061085c36600461527f565b6118b1565b34801561086d57600080fd5b5061052761087c366004615310565b6118d3565b34801561088d57600080fd5b50600d546106309060ff1681565b3480156108a757600080fd5b5061055660275481565b3480156108bd57600080fd5b506109116108cc36600461527f565b601960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff81169061010090046001600160a01b031685565b60408051958652602086019490945292840191909152151560608301526001600160a01b0316608082015260a001610560565b34801561095057600080fd5b5061052761095f3660046151fc565b61192f565b34801561097057600080fd5b50610527611a65565b34801561098557600080fd5b506105276109943660046152ab565b611b20565b3480156109a557600080fd5b506109db6109b43660046152ab565b600e6020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610560565b348015610a0757600080fd5b50610556610a163660046152ab565b611b6c565b348015610a2757600080fd5b5061055660125481565b348015610a3d57600080fd5b50600d5461063090610100900460ff1681565b348015610a5c57600080fd5b50610527610a6b366004615310565b611bc5565b348015610a7c57600080fd5b50610527611eee565b348015610a9157600080fd5b50610556610aa03660046151fc565b60236020526000908152604090205481565b610527610ac036600461527f565b612021565b348015610ad157600080fd5b5061055660135481565b348015610ae757600080fd5b506106cb610af63660046151fc565b603160205260009081526040902080546001909101546001600160a01b039091169082565b348015610b2757600080fd5b50600854610589906001600160a01b031681565b348015610b4757600080fd5b50610556610b563660046152ab565b60296020526000908152604090205481565b348015610b7457600080fd5b50600a54610589906001600160a01b031681565b348015610b9457600080fd5b5061055660175481565b348015610baa57600080fd5b50610556610bb93660046152ab565b6001600160a01b031660009081526001602052604090205490565b348015610be057600080fd5b5061052761266e565b610527610bf736600461527f565b6126a2565b348015610c0857600080fd5b50610556602e5481565b348015610c1e57600080fd5b50610ca2610c2d36600461527f565b603260209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b0398891699979098169795969495939492939192909160ff808216916101009004168b565b604080516001600160a01b039c8d1681529b909a1660208c0152988a01979097526060890195909552608088019390935260a087019190915260c086015260e08501526101008401521515610120830152151561014082015261016001610560565b348015610d1057600080fd5b50610527612bcd565b348015610d2557600080fd5b50610556610d34366004615310565b612c2c565b348015610d4557600080fd5b50610dab610d5436600461527f565b603360209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460058601546006909601546001600160a01b0395861696959094169492939192909160ff1687565b604080516001600160a01b039889168152979096166020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610560565b348015610df957600080fd5b506006546001600160a01b0316610589565b348015610e1757600080fd5b50610556612cba565b610527610e2e3660046152ab565b612cdd565b348015610e3f57600080fd5b506105d6612d34565b348015610e5457600080fd5b50610527610e633660046152ab565b612d43565b348015610e7457600080fd5b5061055660255481565b348015610e8a57600080fd5b50610556602f5481565b348015610ea057600080fd5b50610556600f5481565b348015610eb657600080fd5b50610630610ec536600461527f565b612d8f565b348015610ed657600080fd5b5061055660305481565b348015610eec57600080fd5b50610556602a5481565b348015610f0257600080fd5b50610527610f113660046151fc565b612e0a565b348015610f2257600080fd5b50610630610f3136600461527f565b61303d565b348015610f4257600080fd5b50610556610f5136600461527f565b61304b565b348015610f6257600080fd5b50610527610f7136600461527f565b613103565b348015610f8257600080fd5b50610556600c5481565b348015610f9857600080fd5b50600754610589906001600160a01b031681565b348015610fb857600080fd5b50610556610fc73660046151fc565b601e6020526000908152604090205481565b348015610fe557600080fd5b50610556610ff43660046152ab565b60346020526000908152604090205481565b34801561101257600080fd5b506110a461102136600461527f565b601b602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909160ff80821691610100810482169162010000820481169163010000008104821691640100000000909104168c565b604080516001600160a01b03909d168d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c0870152151560e0860152151561010085015215156101208401521515610140830152151561016082015261018001610560565b34801561111d57600080fd5b5061052761112c3660046151fc565b61321b565b34801561113d57600080fd5b5061055661114c3660046151fc565b601d6020526000908152604090205481565b34801561116a57600080fd5b506105566111793660046152ab565b602d6020526000908152604090205481565b34801561119757600080fd5b506105566111a63660046152ab565b60156020526000908152604090205481565b3480156111c457600080fd5b5061055660265481565b3480156111da57600080fd5b50600d546106309062010000900460ff1681565b3480156111fa57600080fd5b5061055660375481565b34801561121057600080fd5b50610527613251565b34801561122557600080fd5b506105566112343660046152ab565b602c6020526000908152604090205481565b34801561125257600080fd5b506105566112613660046152ab565b60146020526000908152604090205481565b34801561127f57600080fd5b5061052761128e366004615310565b6132be565b34801561129f57600080fd5b506105566112ae366004615332565b6135b5565b3480156112bf57600080fd5b506105276112ce36600461536b565b6135e0565b3480156112df57600080fd5b5061055660115481565b3480156112f557600080fd5b5061055661130436600461527f565b613a34565b34801561131557600080fd5b50610527613b0c565b34801561132a57600080fd5b506105276113393660046152ab565b613d42565b34801561134a57600080fd5b506105566113593660046151fc565b60246020526000908152604090205481565b34801561137757600080fd5b506105566113863660046151fc565b60226020526000908152604090205481565b3480156113a457600080fd5b506105566113b33660046152ab565b613dda565b3480156113c457600080fd5b5061055660105481565b6006546001600160a01b031633146114015760405162461bcd60e51b81526004016113f89061539d565b60405180910390fd5b600260005414156114245760405162461bcd60e51b81526004016113f8906153d2565b600260005560205460ff161561146f5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016113f8565b61147c620151804261541f565b601f556020805460ff19166001908117909155600055565b336000908152601b602090815260408083208484529091529020600701546301000000900460ff16156114fa5760405162461bcd60e51b815260206004820152600e60248201526d29ba30b5b2903430b9903637b0b760911b60448201526064016113f8565b336000908152601b6020908152604080832093835292905220600701805464ff0000000019169055565b60606004805461153390615436565b80601f016020809104026020016040519081016040528092919081815260200182805461155f90615436565b80156115ac5780601f10611581576101008083540402835291602001916115ac565b820191906000526020600020905b81548152906001019060200180831161158f57829003601f168201915b5050505050905090565b6000336115c4818585613e2c565b60019150505b92915050565b600260005414156115f35760405162461bcd60e51b81526004016113f8906153d2565b60026000908155338152602c602052604090205461164a5760405162461bcd60e51b81526020600482015260146024820152734e6f2066756e647320746f20776974686472617760601b60448201526064016113f8565b336000818152602c6020526040808220805490839055905190929183156108fc02918491818181858888f1935050505015801561168b573d6000803e3d6000fd5b50506001600055565b6006546001600160a01b031633146116be5760405162461bcd60e51b81526004016113f89061539d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461170a5760405162461bcd60e51b81526004016113f89061539d565b6002600054141561172d5760405162461bcd60e51b81526004016113f8906153d2565b600260008190556007546038546001600160a01b03909116916108fc916117549190615471565b6040518115909202916000818181858888f1935050505015801561177c573d6000803e3d6000fd5b506008546038546001600160a01b03909116906108fc9061179f90600290615471565b6040518115909202916000818181858888f193505050501580156117c7573d6000803e3d6000fd5b506001600055565b6000336117dd858285613f51565b6117e8858585613fcb565b506001949350505050565b6006546001600160a01b0316331461181d5760405162461bcd60e51b81526004016113f89061539d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146118695760405162461bcd60e51b81526004016113f89061539d565b600d5462010000900460ff1615156001141561188d57600d805462ff000019169055565b600d5462010000900460ff166118af57600d805462ff00001916620100001790555b565b6000336115c48185856118c483836135b5565b6118ce9190615493565b613e2c565b600260005414156118f65760405162461bcd60e51b81526004016113f8906153d2565b60026000908155338082526033602090815260408084208585529091529091206001015461168b91906001600160a01b03168385614199565b336000818152601b602090815260408083208584529091529020546001600160a01b0316146119705760405162461bcd60e51b81526004016113f8906154ab565b336000908152601b6020908152604080832084845290915290206007015462010000900460ff1615156001146119dd5760405162461bcd60e51b815260206004820152601260248201527114dd185ad9481b9bdd08199bdc881cd95b1b60721b60448201526064016113f8565b336000908152601b60209081526040808320848452909152902060070154610100900460ff1615611a3d5760405162461bcd60e51b815260206004820152600a60248201526914dd185ad9481cdbdb1960b21b60448201526064016113f8565b336000908152601b6020908152604080832093835292905220600701805462ff000019169055565b60026000541415611a885760405162461bcd60e51b81526004016113f8906153d2565b6002600090815533815260286020526040902054611adf5760405162461bcd60e51b81526020600482015260146024820152734e6f2066756e647320746f20776974686472617760601b60448201526064016113f8565b33600081815260286020526040808220805490839055905190929183156108fc02918491818181858888f1935050505015801561168b573d6000803e3d6000fd5b6006546001600160a01b03163314611b4a5760405162461bcd60e51b81526004016113f89061539d565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b6001600160a01b0380851660008181526033602090815260408083208684529091529020549091161415611bbe57611baa600183615493565b915080611bb6816154d1565b915050611b71565b5092915050565b6001811015611c035760405162461bcd60e51b815260206004820152600a602482015269043616e277420626520360b41b60448201526064016113f8565b61012c811115611c555760405162461bcd60e51b815260206004820152601e60248201527f446179732067726561746572207468616e206d6178206475726174696f6e000060448201526064016113f8565b33600090815260016020526040902054821115611ca95760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b60448201526064016113f8565b611cb1613b0c565b6000611cbc33613dda565b90508260106000828254611cd09190615493565b9091555050336000908152600e602052604081206002018054859290611cf7908490615493565b9091555050336000818152601b6020908152604080832085845290915290206004810183905580546001600160a01b03191690911781556001908101849055602154611d4291615493565b336000908152601b602090815260408083208584529091529020600201556021548290611d70906001615493565b611d7a9190615493565b336000908152601b60209081526040808320858452909152812060038101929092556007909101805464ffffffffff19169055602154611dbb906001615493565b90505b82602154611dcc9190615493565b8111611e085760008181526024602052604081208054869290611df0908490615493565b90915550819050611e00816154d1565b915050611dbe565b508260186000828254611e1b9190615493565b9250508190555082601d60006021546001611e369190615493565b81526020019081526020016000206000828254611e539190615493565b9250508190555082601e600084602154611e6d9190615493565b611e78906001615493565b81526020019081526020016000206000828254611e959190615493565b90915550611ea5905033846145af565b604080514281526020810185905290810183905233907f445b6299c386d845a282565eba224a183ae1062133e1b062b35d93f855fd59bd906060015b60405180910390a2505050565b6006546001600160a01b03163314611f185760405162461bcd60e51b81526004016113f89061539d565b60026000541415611f3b5760405162461bcd60e51b81526004016113f8906153d2565b6002600055602554611f7e5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2062616c616e636560a01b60448201526064016113f8565b6007546025546001600160a01b03909116906108fc90611fa090600290615471565b6040518115909202916000818181858888f19350505050158015611fc8573d6000803e3d6000fd5b506008546025546001600160a01b03909116906108fc90611feb90600290615471565b6040518115909202916000818181858888f19350505050158015612013573d6000803e3d6000fd5b506000602581905560019055565b600260005414156120445760405162461bcd60e51b81526004016113f8906153d2565b6002600055612051613b0c565b600d5460ff16156120745760405162461bcd60e51b81526004016113f8906154ec565b6001600160a01b038281166000908152601b60209081526040808320858452909152902054163314156120d85760405162461bcd60e51b815260206004820152600c60248201526b1b9bc81cd95b19881b195b9960a21b60448201526064016113f8565b6001600160a01b0382166000908152601b602090815260408083208484529091529020600701546301000000900460ff16156121565760405162461bcd60e51b815260206004820152601e60248201527f5374616b652068617320616e20616374697665206c6f616e206f6e206974000060448201526064016113f8565b6001600160a01b0382166000908152601b60209081526040808320848452909152902060070154640100000000900460ff1615156001146121d95760405162461bcd60e51b815260206004820152601e60248201527f5374616b65206973206e6f742072657175657374696e672061206c6f616e000060448201526064016113f8565b6001600160a01b0382166000908152601b60209081526040808320848452909152902060070154610100900460ff16156122455760405162461bcd60e51b815260206004820152600d60248201526c14dd185ad9481a5cc81cdbdb19609a1b60448201526064016113f8565b6021546001600160a01b0383166000908152601b60209081526040808320858452909152902060030154116122bc5760405162461bcd60e51b815260206004820152601a60248201527f5374616b65206475726174696f6e2069732066696e697368656400000000000060448201526064016113f8565b6001600160a01b0382166000908152603260209081526040808320848452909152902060048101546005909101543480831461232b5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016113f8565b6000606461233a83600261550c565b6123449190615471565b9050612351600282615471565b602560008282546123629190615493565b909155506123739050600282615471565b6021546000908152601a602052604081208054909190612394908490615493565b90915550506001600160a01b0386166000908152601b60209081526040808320888452909152812060060180548592906123cf908490615493565b90915550506001600160a01b0386166000908152601b602090815260408083208884529091528120600701805464ffff0000001916630100000017905561241533611b6c565b6001600160a01b03881660009081526032602090815260408083208a8452909152902060098101805461ffff1916600190811790915580820180546001600160a01b0319163317905560039091018290556021549192506124769190615493565b6001600160a01b03881660009081526032602090815260408083208a845290915290206007810191909155600601546021546124b3906001615493565b6124bd9190615493565b6001600160a01b03881660008181526032602090815260408083208b84528252808320600801948555338084526033835281842087855290925290912080546001600160a01b0319908116909217815560018101805490921690921790556002810183905560038101879055600481018690559054600590910155606461254584606261550c565b61254f9190615471565b6001600160a01b0388166000908152602c602052604081208054909190612577908490615493565b909155506064905061258a84606261550c565b6125949190615471565b6001600160a01b0380891660009081526032602090815260408083208b84528252808320600101549093168252602d905290812080549091906125d8908490615493565b90915550606490506125eb84606261550c565b6125f59190615471565b602e60008282546126069190615493565b925050819055506001602f60008282546126209190615493565b9091555050604080514281526020810183905233917fa1d7e6351c3018260491f1a7c79ec587a8bcb17f22837129796e5b9b68ffc99c910160405180910390a2505060016000555050505050565b6006546001600160a01b031633146126985760405162461bcd60e51b81526004016113f89061539d565b6118af60006146f5565b6126aa613b0c565b600d54610100900460ff16156126d25760405162461bcd60e51b81526004016113f8906154ec565b6001600160a01b038281166000908152601b60209081526040808320858452909152902054163314156127355760405162461bcd60e51b815260206004820152600b60248201526a6e6f2073656c662062757960a81b60448201526064016113f8565b6001600160a01b038083166000818152601b602090815260408083208684529091529020549091161461277a5760405162461bcd60e51b81526004016113f8906154ab565b6001600160a01b0382166000908152601b60209081526040808320848452909152902060070154610100900460ff16156127c65760405162461bcd60e51b81526004016113f89061552b565b6001600160a01b0382166000908152601b6020908152604080832084845290915290206007015462010000900460ff16151560011461283f5760405162461bcd60e51b815260206004820152601560248201527414dd185ad9481a5cc81b9bdd08199bdc881cd95b1b605a1b60448201526064016113f8565b6001600160a01b0382166000908152601b60209081526040808320848452909152902060050154349081146128a95760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682066756e647360801b60448201526064016113f8565b6021546001600160a01b0384166000908152601b602090815260408083208684529091529020600301541161290e5760405162461bcd60e51b815260206004820152600b60248201526a14dd185ad948195b99195960aa1b60448201526064016113f8565b6001600160a01b0383166000908152601b6020908152604080832085845290915290206005015460649061294390600861550c565b61294d9190615471565b6021546000908152601a60205260408120805490919061296e908490615493565b90915550506001600160a01b0383166000908152601b602090815260408083208584529091529020600501546064906129a890600261550c565b6129b29190615471565b602560008282546129c39190615493565b90915550506001600160a01b0383166000908152601b602090815260408083208584529091529020600501546064906129fd90605a61550c565b612a079190615471565b6001600160a01b03841660009081526028602052604081208054909190612a2f908490615493565b90915550506001600160a01b0383166000908152601b602090815260408083208584528252808320600701805462ffffff1916610101179055338352602990915281208054839290612a82908490615493565b90915550506001600160a01b03831660009081526029602052604081208054839290612aaf908490615493565b92505081905550600160266000828254612ac99190615493565b925050819055508060276000828254612ae29190615493565b9091555060009050612af333613dda565b336000818152601b6020818152604080842086855280835281852080546001600160a01b031916871781556001600160a01b038c168087529484528286208b87528452828620600181810154908301556002808201549083015560038082015490830155600690810154908201556004810188905560078101805464ffffffffff19169055878652908352600501939093558251428152908101879052808301889052915193945091927f1bf190fff897320620ad07e59e1270f4dc5e0e42db84644dd2d5cce7d11f1d9f9181900360600190a350505050565b6006546001600160a01b03163314612bf75760405162461bcd60e51b81526004016113f89061539d565b600d5460ff16151560011415612c1357600d805460ff19169055565b600d5460ff166118af57600d805460ff19166001179055565b600061012c831115612c805760405162461bcd60e51b815260206004820152601e60248201527f446179732067726561746572207468616e206d6178206475726174696f6e000060448201526064016113f8565b60006080612c8f60028661563c565b612c99919061550c565b612ca3908461550c565b9050612cb26298968082615471565b949350505050565b600062015180601f5442612cce919061541f565b612cd89190615471565b905090565b60205460ff16612d255760405162461bcd60e51b81526020600482015260136024820152720aec2d2e840ccdee440e8d0ca40d8c2eadcc6d606b1b60448201526064016113f8565b612d3181346000614747565b50565b60606005805461153390615436565b6006546001600160a01b03163314612d6d5760405162461bcd60e51b81526004016113f89061539d565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60003381612d9d82866135b5565b905083811015612dfd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016113f8565b6117e88286868403613e2c565b33600090815260196020908152604080832084845290915290206003015460ff1615612e6c5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e4818dbdb1b1958dd1959607a1b60448201526064016113f8565b612e74613b0c565b6021548110612eb85760405162461bcd60e51b815260206004820152601060248201526f15d85a5d08199bdc8819185e48195b9960821b60448201526064016113f8565b6000612ec4338361304b565b9050612ed03382614a80565b3360009081526019602090815260408083208584529091528120600301805460ff1916600117905560118054839290612f0a908490615493565b9091555050336000908152600e602052604081208054839290612f2e908490615493565b909155505033600090815260196020908152604080832085845290915290206003015461010090046001600160a01b031680156130055760006064612f7460038561550c565b612f7e9190615471565b6001600160a01b0383166000908152601560205260408120805492935090612fa5836154d1565b9190505550612fb48282614a80565b6001600160a01b03821660009081526014602052604081208054839290612fdc908490615493565b909155506130039050336103e8612ff4600f8761550c565b612ffe9190615471565b614a80565b505b604080514281526020810184905233917f0342b204107bd5f155bcac32684108ef5e21b9a75ef9c3e4ab58af0a803541c79101611ee1565b6000336115c4818585613fcb565b60008161306a5760405162461bcd60e51b81526004016113f89061564b565b6001600160a01b038316600090815260196020908152604080832085845290915281206002015480158015906130a1575060215481105b156130f6576000818152601a60209081526040808320546001600160a01b03891684526019835281842088855290925290912060010154600b546130e5919061550c565b6130ef9190615471565b91506130fb565b600091505b509392505050565b600260005414156131265760405162461bcd60e51b81526004016113f8906153d2565b6002600055600d5462010000900460ff16156131545760405162461bcd60e51b81526004016113f8906154ec565b602154336000908152601b6020908152604080832085845290915290206003015411156131b75760405162461bcd60e51b81526020600482015260116024820152705761697420666f7220656e642074696d6560781b60448201526064016113f8565b6131c2816001614b5f565b60006131ce3383613a34565b90506132118360646131e184600a61550c565b6131eb9190615471565b6131f59084615493565b606461320285600a61550c565b61320c9190615471565b614747565b5050600160005550565b6002600054141561323e5760405162461bcd60e51b81526004016113f8906153d2565b60026000819055506117c7816000614b5f565b6006546001600160a01b0316331461327b5760405162461bcd60e51b81526004016113f89061539d565b600d5460ff6101009091041615156001141561329e57600d805461ff0019169055565b600d54610100900460ff166118af57600d805461ff001916610100179055565b6132c6613b0c565b600d54610100900460ff16156132ee5760405162461bcd60e51b81526004016113f8906154ec565b336000818152601b602090815260408083208684529091529020546001600160a01b03161461332f5760405162461bcd60e51b81526004016113f8906154ab565b336000908152601b602090815260408083208584529091529020600701546301000000900460ff16156133955760405162461bcd60e51b815260206004820152600e60248201526d29ba30b5b2903430b9903637b0b760911b60448201526064016113f8565b336000908152601b60209081526040808320858452909152902060070154610100900460ff16156133d85760405162461bcd60e51b81526004016113f89061552b565b602154336000908152601b60209081526040808320868452909152902060030154116134345760405162461bcd60e51b815260206004820152600b60248201526a14dd185ad948195b99195960aa1b60448201526064016113f8565b336000908152601b60209081526040808320858452909152902060070154640100000000900460ff161515600114156134705761347082611494565b336000908152601b60209081526040808320858452909152902060070154640100000000900460ff16156134de5760405162461bcd60e51b815260206004820152601560248201527429ba30b5b2903430b99030b1ba34bb32903637b0b760591b60448201526064016113f8565b336000818152601b60209081526040808320868452825280832060078101805462ff0000191662010000179055600501859055602a80548452602b90925280832080546001600160a01b031916909417909355805482529181206001018490558154919061354b836154d1565b9091555050336000818152601b60209081526040808320868452825291829020600101548251428152918201859052818301526060810185905290517f6c627a4a663d4c07ef3e3f7a4936fd5b42d694a3b481a2047fc5ed024102406b9181900360800190a25050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6135e8613b0c565b600d5460ff161561360b5760405162461bcd60e51b81526004016113f8906154ec565b81831061366e5760405162461bcd60e51b815260206004820152602b60248201527f4c6f616e2072657475726e206d75737420626520686967686572207468616e2060448201526a1b1bd85b88185b5bdd5b9d60aa1b60648201526084016113f8565b60048110156136bf5760405162461bcd60e51b815260206004820152601e60248201527f4c6f77657374206c6f616e206475726174696f6e20697320342064617973000060448201526064016113f8565b336000818152601b602090815260408083208884529091529020546001600160a01b0316146137005760405162461bcd60e51b81526004016113f8906154ab565b336000908152601b602090815260408083208784529091529020600701546301000000900460ff16156137755760405162461bcd60e51b815260206004820152601e60248201527f5374616b652068617320616e20616374697665206c6f616e206f6e206974000060448201526064016113f8565b336000908152601b60209081526040808320878452909152902060070154610100900460ff16156137b85760405162461bcd60e51b81526004016113f89061552b565b602154336000908152601b602090815260408083208884529091529020600301546137e490839061541f565b116138245760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b60448201526064016113f8565b60006138303386613a34565b90508083111561388e5760405162461bcd60e51b8152602060048201526024808201527f52657475726e20616d6f756e742067726561746572207468616e204469766964604482015263656e647360e01b60648201526084016113f8565b336000908152601b6020908152604080832088845290915290206007015462010000900460ff161515600114156138c8576138c88561192f565b336000908152601b6020908152604080832088845290915290206007015462010000900460ff161561392d5760405162461bcd60e51b815260206004820152600e60248201526d5374616b6520666f722073616c6560901b60448201526064016113f8565b336000818152601b602090815260408083208984528252808320600701805464ff00000000191664010000000017905583835260328252808320898452825280832080546001600160a01b031990811686178255600282018b9055600482018a905560058201899055600682018890556009909101805461ff00191690556030805485526031909352818420805490911690941790935580548252918120600101879055815491906139de836154d1565b909155505060408051428152602081018690529081018390526060810186905233907f87647fcf25837d2e433ddec5e832af32b48fba70120f764d795b12fbdc9c6fc59060800160405180910390a25050505050565b6001600160a01b0382166000908152601b60209081526040808320848452909152812060038101546002820154600190920154839290815b8381108015613a7c575060215481105b15613acf57600081815260246020908152604080832054602290925290912054613aa790849061550c565b613ab19190615471565b613abb9086615493565b945080613ac7816154d1565b915050613a6c565b506001600160a01b0387166000908152601b60209081526040808320898452909152902060060154613b01908561541f565b979650505050505050565b613b14612cba565b602154146118af57603c6021541015613bc25760006021546001613b389190615493565b90505b602154613b4990600261550c565b8111613bbc57602154613b5d90606461550c565b600c546021546000908152601a6020526040902054613b7c919061550c565b613b869190615471565b60008281526022602052604081208054909190613ba4908490615493565b90915550819050613bb4816154d1565b915050613b3b565b50613c58565b60006021546001613bd39190615493565b90505b603c602154613be59190615493565b8111613c5657613bf7603c606461550c565b600c546021546000908152601a6020526040902054613c16919061550c565b613c209190615471565b60008281526022602052604081208054909190613c3e908490615493565b90915550819050613c4e816154d1565b915050613bd6565b505b613c60612cba565b602155613c6b614ed7565b613c73614f0b565b613c7b61509c565b6103e8601a60006001602154613c91919061541f565b8152602001908152602001600020546005613cac919061550c565b613cb69190615471565b60386000828254613cc79190615493565b9091555050600060358190556021547fc60292815333c4ec77c325e27e03a1a5833ee80f17c555f255130c15b393ec9a91429190601a90613d0960018461541f565b815260200190815260200160002054604051613d38939291909283526020830191909152604082015260600190565b60405180910390a1565b6006546001600160a01b03163314613d6c5760405162461bcd60e51b81526004016113f89061539d565b6001600160a01b038116613dd15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016113f8565b612d31816146f5565b600080805b6001600160a01b038085166000818152601b602090815260408083208684529091529020549091161415611bbe57613e18600183615493565b915080613e24816154d1565b915050613ddf565b6001600160a01b038316613e8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016113f8565b6001600160a01b038216613eef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016113f8565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000613f5d84846135b5565b90506000198114613fc55781811015613fb85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016113f8565b613fc58484848403613e2c565b50505050565b6001600160a01b03831661402f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016113f8565b6001600160a01b0382166140915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016113f8565b6001600160a01b038316600090815260016020526040902054818110156141095760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016113f8565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290614140908490615493565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161418c91815260200190565b60405180910390a3613fc5565b6141a1613b0c565b6001600160a01b0383166000908152601b602090815260408083208484529091529020600701546301000000900460ff1615156001146142345760405162461bcd60e51b815260206004820152602860248201527f5374616b6520646f6573206e6f74206861766520616e20616374697665206c6f604482015267185b881bdb881a5d60c21b60648201526084016113f8565b6001600160a01b038316600090815260326020908152604080832084845290915290206008015460215410156142ac5760405162461bcd60e51b815260206004820152601860248201527f4475652064617465206e6f74207965742072656163686564000000000000000060448201526064016113f8565b6001600160a01b038416600090815260336020908152604080832085845290915290206006015460ff16156143185760405162461bcd60e51b8152602060048201526012602482015271131bd85b881a185cc81899595b881c185a5960721b60448201526064016113f8565b6001600160a01b0383166000908152603260209081526040808320848452909152902060090154610100900460ff16156143895760405162461bcd60e51b8152602060048201526012602482015271131bd85b881a185cc81899595b881c185a5960721b60448201526064016113f8565b6001600160a01b038316600090815260326020908152604080832084845290915290206009015460ff1615156001146144045760405162461bcd60e51b815260206004820152601e60248201527f5374616b6520646f65736e2774206861766520616374697665206c6f616e000060448201526064016113f8565b6001600160a01b03838116600090815260326020908152604080832085845290915290206001015481169085161461444e5760405162461bcd60e51b81526004016113f8906154ab565b6001600160a01b038316600090815260326020908152604080832084845290915290206003015482146144b45760405162461bcd60e51b815260206004820152600e60248201526d1259081b9bdd081b585d18da195960921b60448201526064016113f8565b6001600160a01b038084166000818152601b602090815260408083208684528252808320600701805463ff00000019169055938816808352603382528483208784528252848320600601805460ff1916600117905592825260328152838220858352815283822060098101805461ffff1916610100179055600501549282526034905291822080549192839261454b908490615493565b90915550506001600160a01b038085166000908152603260209081526040808320868452909152808220600501829055519187169183156108fc0291849190818181858888f193505050501580156145a7573d6000803e3d6000fd5b505050505050565b6001600160a01b03821661460f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016113f8565b6001600160a01b038216600090815260016020526040902054818110156146835760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016113f8565b6001600160a01b03831660009081526001602052604081208383039055600380548492906146b290849061541f565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613f44565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60215482906147685760405162461bcd60e51b81526004016113f89061564b565b600081116147ac5760405162461bcd60e51b81526020600482015260116024820152700416d6f756e742063616e2774206265203607c1b60448201526064016113f8565b6147b4613b0c565b60355481106147d5576035819055603680546001600160a01b031916331790555b33600090815260196020908152604080832060215484529091529020600101546148315760178054906000614809836154d1565b9091555050602154600090815260166020526040812080549161482b836154d1565b91905055505b81156148f157614841828261541f565b336000908152600e602052604081206001018054909190614863908490615493565b909155506148739050828261541f565b6021546000908152601a602052604081208054909190614894908490615493565b909155506148a49050828261541f565b600f60008282546148b59190615493565b90915550503360009081526019602090815260408083206021548452909152812080548492906148e6908490615493565b909155506149589050565b336000908152600e602052604081206001018054839290614913908490615493565b90915550506021546000908152601a602052604081208054839290614939908490615493565b9250508190555080600f60008282546149529190615493565b90915550505b336000908152601960209081526040808320602154845290915281206001018054839290614987908490615493565b9091555050602154336000818152601960209081526040808320858452909152902060028101929092556003909101805460ff191690556001600160a01b03851614614a0f57336000908152601960209081526040808320602154845290915290206003018054610100600160a81b0319166101006001600160a01b03871602179055614a3e565b336000908152601960209081526040808320602154845290915290206003018054610100600160a81b03191690555b604080514281526020810183905233917fb17fec0248343fcec3fcfed050f3d842badb669fb408da2b1022411a1db3b52a91015b60405180910390a250505050565b6001600160a01b038216614ad65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016113f8565b8060036000828254614ae89190615493565b90915550506001600160a01b03821660009081526001602052604081208054839290614b15908490615493565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b602154336000908152601b602090815260408083208684529091529020600301541115614bc25760405162461bcd60e51b81526020600482015260116024820152705761697420666f7220656e642074696d6560781b60448201526064016113f8565b336000818152601b602090815260408083208684529091529020546001600160a01b031614614c035760405162461bcd60e51b81526004016113f8906154ab565b336000908152601b6020908152604080832085845290915290206007015460ff1615614c655760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e4818dbdb1b1958dd1959607a1b60448201526064016113f8565b336000908152601b60209081526040808320858452909152902060070154610100900460ff1615614cc75760405162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481cdbdb1960a21b60448201526064016113f8565b614ccf613b0c565b336000818152601b602090815260408083208684529091528120600701805464ff00ff00001916905590614d039084613a34565b90508060126000828254614d179190615493565b9091555050336000908152600e602052604081206003018054839290614d3e908490615493565b9091555050336000908152601b602090815260408083208684529091529020600701805460ff191660019081179091558215151415614d7c57614dab565b604051339082156108fc029083906000818181858888f19350505050158015614da9573d6000803e3d6000fd5b505b336000908152601b602090815260408083208684529091529020600701546301000000900460ff16151560011415614e195733600081815260326020908152604080832087845290915290206001810154600390910154614e19926001600160a01b03909216919086614199565b336000908152601b602090815260408083208684529091529020600101548015614e9f57336000908152601b6020908152604080832087845290915281206002810154600390910154614e7591614e6f9161541f565b83612c2c565b90508060136000828254614e899190615493565b90915550614e9d905033612ffe8385615493565b505b604080514281526020810184905233917f5ffbd1037694a52d6352809bde959f6569c40210070217cb3b42f1b85f3ed7829101614a72565b6103e86005600b54614ee9919061550c565b614ef39190615471565b600b6000828254614f04919061541f565b9091555050565b60026000541415614f2e5760405162461bcd60e51b81526004016113f8906153d2565b6002600055602154614f525760405162461bcd60e51b81526004016113f89061564b565b600060646008601a60006001602154614f6b919061541f565b815260200190815260200160002054614f84919061550c565b614f8e9190615471565b6007549091506001600160a01b03166108fc614fab600484615471565b6040518115909202916000818181858888f19350505050158015614fd3573d6000803e3d6000fd5b506008546001600160a01b03166108fc614fee600484615471565b6040518115909202916000818181858888f19350505050158015615016573d6000803e3d6000fd5b506009546001600160a01b03166108fc615031600484615471565b6040518115909202916000818181858888f19350505050158015615059573d6000803e3d6000fd5b50600a546001600160a01b03166108fc615074600484615471565b6040518115909202916000818181858888f1935050505015801561168b573d6000803e3d6000fd5b600260005414156150bf5760405162461bcd60e51b81526004016113f8906153d2565b600260005560375460355411156151c2576035546037556021546007116151bd576036546038546001600160a01b03909116906108fc9060649061510490601e61550c565b61510e9190615471565b6040518115909202916000818181858888f19350505050158015615136573d6000803e3d6000fd5b5060646038546046615148919061550c565b6151529190615471565b60388190556036546001600160a01b0316907fccabccf5bb91b5f40ae71c1bbbafb16291fc33e2c51f783ebcaa19089fb4ea099060649061519490601e61550c565b61519e9190615471565b6037546040805192835242602084015282015260600160405180910390a25b6151f5565b6103e860375460196151d4919061550c565b6151de9190615471565b603760008282546151ef919061541f565b90915550505b6001600055565b60006020828403121561520e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561524257858101830151858201604001528201615226565b81811115615254576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d3157600080fd5b6000806040838503121561529257600080fd5b823561529d8161526a565b946020939093013593505050565b6000602082840312156152bd57600080fd5b81356152c88161526a565b9392505050565b6000806000606084860312156152e457600080fd5b83356152ef8161526a565b925060208401356152ff8161526a565b929592945050506040919091013590565b6000806040838503121561532357600080fd5b50508035926020909101359150565b6000806040838503121561534557600080fd5b82356153508161526a565b915060208301356153608161526a565b809150509250929050565b6000806000806080858703121561538157600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561543157615431615409565b500390565b600181811c9082168061544a57607f821691505b6020821081141561546b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008261548e57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156154a6576154a6615409565b500190565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b60006000198214156154e5576154e5615409565b5060010190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b600081600019048311821515161561552657615526615409565b500290565b60208082526013908201527214dd185ad9481a185cc81899595b881cdbdb19606a1b604082015260600190565b600181815b8085111561559357816000190482111561557957615579615409565b8085161561558657918102915b93841c939080029061555d565b509250929050565b6000826155aa575060016115ca565b816155b7575060006115ca565b81600181146155cd57600281146155d7576155f3565b60019150506115ca565b60ff8411156155e8576155e8615409565b50506001821b6115ca565b5060208310610133831016604e8410600b8410161715615616575081810a6115ca565b6156208383615558565b806000190482111561563457615634615409565b029392505050565b60006152c860ff84168361559b565b602080825260059082015264044617920360dc1b60408201526060019056fea264697066735822122039090909ce8b7e7b5433dfa127d2aa2e4868028b9de8dda7238350dc69e49c2564736f6c634300080a0033

Deployed ByteCode Sourcemap

13145:44507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20516:181;;;;;;;;;;;;;:::i;:::-;;19305:58;;;;;;;;;;-1:-1:-1;19305:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;19305:58:0;;;;;;;;14920:104;;;;;;;;;;-1:-1:-1;14920:104:0;;;;-1:-1:-1;;;;;14920:104:0;;;;;;-1:-1:-1;;;;;561:32:1;;;543:51;;531:2;516:18;14920:104:0;381:219:1;47945:265:0;;;;;;;;;;-1:-1:-1;47945:265:0;;;;;:::i;:::-;;:::i;5040:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17703:50::-;;;;;;;;;;-1:-1:-1;17703:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;6113:242;;;;;;;;;;-1:-1:-1;6113:242:0;;;;;:::i;:::-;;:::i;:::-;;;1924:14:1;;1917:22;1899:41;;1887:2;1872:18;6113:242:0;1759:187:1;56633:27:0;;;;;;;;;;;;;;;;52479:276;;;;;;;;;;;;;:::i;20943:111::-;;;;;;;;;;-1:-1:-1;20943:111:0;;;;;:::i;:::-;;:::i;37429:58::-;;;;;;;;;;-1:-1:-1;37429:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37429:58:0;;;;;;;;;;-1:-1:-1;;;;;2403:32:1;;;2385:51;;2467:2;2452:18;;2445:34;;;;2358:18;37429:58:0;2211:274:1;37134:49:0;;;;;;;;;;-1:-1:-1;37134:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;5361:108;;;;;;;;;;-1:-1:-1;5449:12:0;;5361:108;;20330:178;;;;;;;;;;;;;:::i;15284:45::-;;;;;;;;;;;;;;;;6363:295;;;;;;;;;;-1:-1:-1;6363:295:0;;;;;:::i;:::-;;:::i;20705:111::-;;;;;;;;;;-1:-1:-1;20705:111:0;;;;;:::i;:::-;;:::i;56546:37::-;;;;;;;;;;-1:-1:-1;56546:37:0;;;;-1:-1:-1;;;;;56546:37:0;;;17900:29;;;;;;;;;;;;;;;;56504:35;;;;;;;;;;;;;;;;19756:301;;;;;;;;;;;;;:::i;5260:93::-;;;;;;;;;;-1:-1:-1;5260:93:0;;5343:2;3553:36:1;;3541:2;3526:18;5260:93:0;3411:184:1;18449:45:0;;;;;;;;;;-1:-1:-1;18449:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;6666:270;;;;;;;;;;-1:-1:-1;6666:270:0;;;;;:::i;:::-;;:::i;53941:301::-;;;;;;;;;;-1:-1:-1;53941:301:0;;;;;:::i;:::-;;:::i;16334:35::-;;;;;;;;;;-1:-1:-1;16334:35:0;;;;;;;;37035:31;;;;;;;;;;;;;;;;18332:73;;;;;;;;;;-1:-1:-1;18332:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18332:73:0;;;;;;;4106:25:1;;;4162:2;4147:18;;4140:34;;;;4190:18;;;4183:34;;;;4260:14;4253:22;4248:2;4233:18;;4226:50;-1:-1:-1;;;;;4313:32:1;4307:3;4292:19;;4285:61;4093:3;4078:19;18332:73:0;3853:499:1;48291:533:0;;;;;;;;;;-1:-1:-1;48291:533:0;;;;;:::i;:::-;;:::i;42812:288::-;;;;;;;;;;;;;:::i;21062:111::-;;;;;;;;;;-1:-1:-1;21062:111:0;;;;;:::i;:::-;;:::i;16943:86::-;;;;;;;;;;-1:-1:-1;16943:86:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4588:25:1;;;4644:2;4629:18;;4622:34;;;;4672:18;;;4665:34;4730:2;4715:18;;4708:34;4575:3;4560:19;16943:86:0;4357:391:1;52929:327:0;;;;;;;;;;-1:-1:-1;52929:327:0;;;;;:::i;:::-;;:::i;17288:36::-;;;;;;;;;;;;;;;;16422:40;;;;;;;;;;-1:-1:-1;16422:40:0;;;;;;;;;;;30178:1868;;;;;;;;;;-1:-1:-1;30178:1868:0;;;;;:::i;:::-;;:::i;21181:340::-;;;;;;;;;;;;;:::i;29870:50::-;;;;;;;;;;-1:-1:-1;29870:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;49087:3310;;;;;;:::i;:::-;;:::i;17367:43::-;;;;;;;;;;;;;;;;44602:58;;;;;;;;;;-1:-1:-1;44602:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44602:58:0;;;;;;14803:104;;;;;;;;;;-1:-1:-1;14803:104:0;;;;-1:-1:-1;;;;;14803:104:0;;;37190:56;;;;;;;;;;-1:-1:-1;37190:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;15037:104;;;;;;;;;;-1:-1:-1;15037:104:0;;;;-1:-1:-1;;;;;15037:104:0;;;17818:29;;;;;;;;;;;;;;;;5477:177;;;;;;;;;;-1:-1:-1;5477:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;5628:18:0;5596:7;5628:18;;;:9;:18;;;;;;;5477:177;2474:103;;;;;;;;;;;;;:::i;39429:3286::-;;;;;;:::i;:::-;;:::i;44444:32::-;;;;;;;;;;;;;;;;44669:86;;;;;;;;;;-1:-1:-1;44669:86:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44669:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5225:15:1;;;5207:34;;5277:15;;;;5272:2;5257:18;;5250:43;5309:18;;;5302:34;;;;5367:2;5352:18;;5345:34;;;;5410:3;5395:19;;5388:35;;;;5187:3;5439:19;;5432:35;;;;5498:3;5483:19;;5476:35;5542:3;5527:19;;5520:35;5586:3;5571:19;;5564:35;5643:14;5636:22;5630:3;5615:19;;5608:51;5703:15;5696:23;5690:3;5675:19;;5668:52;5156:3;5141:19;44669:86:0;4753:973:1;19516:232:0;;;;;;;;;;;;;:::i;36461:398::-;;;;;;;;;;-1:-1:-1;36461:398:0;;;;;:::i;:::-;;:::i;44762:69::-;;;;;;;;;;-1:-1:-1;44762:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44762:69:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6096:15:1;;;6078:34;;6148:15;;;;6143:2;6128:18;;6121:43;6180:18;;;6173:34;;;;6238:2;6223:18;;6216:34;;;;6281:3;6266:19;;6259:35;6058:3;6310:19;;6303:35;6382:14;6375:22;6369:3;6354:19;;6347:51;6027:3;6012:19;44762:69:0;5731:673:1;2251:87:0;;;;;;;;;;-1:-1:-1;2324:6:0;;-1:-1:-1;;;;;2324:6:0;2251:87;;21637:115;;;;;;;;;;;;;:::i;25110:255::-;;;;;;:::i;:::-;;:::i;5148:104::-;;;;;;;;;;;;;:::i;20824:111::-;;;;;;;;;;-1:-1:-1;20824:111:0;;;;;:::i;:::-;;:::i;36946:45::-;;;;;;;;;;;;;;;;44483:31;;;;;;;;;;;;;;;;17062:33;;;;;;;;;;;;;;;;6944:505;;;;;;;;;;-1:-1:-1;6944:505:0;;;;;:::i;:::-;;:::i;44559:36::-;;;;;;;;;;;;;;;;37386;;;;;;;;;;;;;;;;27816:1265;;;;;;;;;;-1:-1:-1;27816:1265:0;;;;;:::i;:::-;;:::i;5662:234::-;;;;;;;;;;-1:-1:-1;5662:234:0;;;;;:::i;:::-;;:::i;29217:593::-;;;;;;;;;;-1:-1:-1;29217:593:0;;;;;:::i;:::-;;:::i;24226:635::-;;;;;;;;;;-1:-1:-1;24226:635:0;;;;;:::i;:::-;;:::i;15689:44::-;;;;;;;;;;;;;;;;14686:104;;;;;;;;;;-1:-1:-1;14686:104:0;;;;-1:-1:-1;;;;;14686:104:0;;;19442:65;;;;;;;;;;-1:-1:-1;19442:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;44838:52;;;;;;;;;;-1:-1:-1;44838:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;19173:73;;;;;;;;;;-1:-1:-1;19173:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19173:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6854:32:1;;;6836:51;;6918:2;6903:18;;6896:34;;;;6946:18;;;6939:34;;;;7004:2;6989:18;;6982:34;;;;7047:3;7032:19;;7025:35;;;;6874:3;7076:19;;7069:35;;;;7135:3;7120:19;;7113:35;7192:14;7185:22;7179:3;7164:19;;7157:51;7252:14;7245:22;7239:3;7224:19;;7217:51;7312:14;7305:22;7299:3;7284:19;;7277:51;7372:15;7365:23;7359:3;7344:19;;7337:52;1733:13;1726:21;7438:3;7423:19;;1714:34;6823:3;6808:19;19173:73:0;6409:1040:1;32645:102:0;;;;;;;;;;-1:-1:-1;32645:102:0;;;;;:::i;:::-;;:::i;19370:65::-;;;;;;;;;;-1:-1:-1;19370:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;44389:46;;;;;;;;;;-1:-1:-1;44389:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;17568:48;;;;;;;;;;-1:-1:-1;17568:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;36998:30;;;;;;;;;;;;;;;;16518:50;;;;;;;;;;-1:-1:-1;16518:50:0;;;;;;;;;;;56590:36;;;;;;;;;;;;;;;;20065:257;;;;;;;;;;;;;:::i;44336:46::-;;;;;;;;;;-1:-1:-1;44336:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;17465:54;;;;;;;;;;-1:-1:-1;17465:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;37707:1549;;;;;;;;;;-1:-1:-1;37707:1549:0;;;;;:::i;:::-;;:::i;5904:201::-;;;;;;;;;;-1:-1:-1;5904:201:0;;;;;:::i;:::-;;:::i;45260:2591::-;;;;;;;;;;-1:-1:-1;45260:2591:0;;;;;:::i;:::-;;:::i;17208:38::-;;;;;;;;;;;;;;;;35478:758;;;;;;;;;;-1:-1:-1;35478:758:0;;;;;:::i;:::-;;:::i;21760:1434::-;;;;;;;;;;;;;:::i;2585:238::-;;;;;;;;;;-1:-1:-1;2585:238:0;;;;;:::i;:::-;;:::i;29927:59::-;;;;;;;;;;-1:-1:-1;29927:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;29818:45;;;;;;;;;;-1:-1:-1;29818:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32192:327;;;;;;;;;;-1:-1:-1;32192:327:0;;;;;:::i;:::-;;:::i;17130:35::-;;;;;;;;;;;;;;;;20516:181;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;;;;;;;;;3154:1:::1;3374:7;;:19;;3366:63;;;;-1:-1:-1::0;;;3366:63:0::1;;;;;;;:::i;:::-;3154:1;3507:7;:18:::0;20586:8:::2;::::0;::::2;;20585:9;20577:37;;;::::0;-1:-1:-1;;;20577:37:0;;9160:2:1;20577:37:0::2;::::0;::::2;9142:21:1::0;9199:2;9179:18;;;9172:30;-1:-1:-1;;;9218:18:1;;;9211:46;9274:18;;20577:37:0::2;8958:340:1::0;20577:37:0::2;20639:24;20657:6;20639:15;:24;:::i;:::-;20625:11;:38:::0;20674:8:::2;:15:::0;;-1:-1:-1;;20674:15:0::2;20685:4;20674:15:::0;;::::2;::::0;;;:8:::2;3686:22:::0;20516:181::o;47945:265::-;48049:10;48034:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;48012:122;;;;-1:-1:-1;;;48012:122:0;;9767:2:1;48012:122:0;;;9749:21:1;9806:2;9786:18;;;9779:30;-1:-1:-1;;;9825:18:1;;;9818:44;9879:18;;48012:122:0;9565:338:1;48012:122:0;48160:10;48197:5;48145:26;;;:14;:26;;;;;;;;:35;;;;;;;:49;;:57;;-1:-1:-1;;48145:57:0;;;47945:265::o;5040:100::-;5094:13;5127:5;5120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5040:100;:::o;6113:242::-;6232:4;1719:10;6293:32;1719:10;6309:7;6318:6;6293:8;:32::i;:::-;6343:4;6336:11;;;6113:242;;;;;:::o;52479:276::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;;;52563:10:::1;52551:23:::0;;:11:::1;:23;::::0;;;;;52543:60:::1;;;::::0;-1:-1:-1;;;52543:60:0;;10495:2:1;52543:60:0::1;::::0;::::1;10477:21:1::0;10534:2;10514:18;;;10507:30;-1:-1:-1;;;10553:18:1;;;10546:50;10613:18;;52543:60:0::1;10293:344:1::0;52543:60:0::1;52647:10;52616:16;52635:23:::0;;;:11:::1;:23;::::0;;;;;;;52669:27;;;;52709:38;;52635:23;;52647:10;52709:38;::::1;;;::::0;52635:23;;52709:38;52616:16;52709:38;52635:23;52647:10;52709:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3110:1:0;3686:7;:22;52479:276::o;20943:111::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;21022:18:::1;:24:::0;;-1:-1:-1;;;;;;21022:24:0::1;-1:-1:-1::0;;;;;21022:24:0;;;::::1;::::0;;;::::1;::::0;;20943:111::o;20330:178::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;3154:1:::1;3374:7;;:19;;3366:63;;;;-1:-1:-1::0;;;3366:63:0::1;;;;;;;:::i;:::-;3154:1;3507:7;:18:::0;;;20399::::2;::::0;20427:12:::2;::::0;-1:-1:-1;;;;;20399:18:0;;::::2;::::0;:45:::2;::::0;20427:16:::2;::::0;3154:1;20427:16:::2;:::i;:::-;20399:45;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;20455:18:0::2;::::0;20483:12:::2;::::0;-1:-1:-1;;;;;20455:18:0;;::::2;::::0;:45:::2;::::0;20483:16:::2;::::0;20498:1:::2;::::0;20483:16:::2;:::i;:::-;20455:45;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;3110:1:0::1;3686:7;:22:::0;20330:178::o;6363:295::-;6494:4;1719:10;6552:38;6568:4;1719:10;6583:6;6552:15;:38::i;:::-;6601:27;6611:4;6617:2;6621:6;6601:9;:27::i;:::-;-1:-1:-1;6646:4:0;;6363:295;-1:-1:-1;;;;6363:295:0:o;20705:111::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;20784:18:::1;:24:::0;;-1:-1:-1;;;;;;20784:24:0::1;-1:-1:-1::0;;;;;20784:24:0;;;::::1;::::0;;;::::1;::::0;;20705:111::o;19756:301::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;19830:30:::1;::::0;;;::::1;;;:38;;19864:4;19830:38;19826:224;;;19885:30;:38:::0;;-1:-1:-1;;19885:38:0::1;::::0;;19756:301::o;19826:224::-:1;19945:30;::::0;;;::::1;;;19941:109;;20001:30;:37:::0;;-1:-1:-1;;20001:37:0::1;::::0;::::1;::::0;;19941:109:::1;19756:301::o:0;6666:270::-;6781:4;1719:10;6842:64;1719:10;6858:7;6895:10;6867:25;1719:10;6858:7;6867:9;:25::i;:::-;:38;;;;:::i;:::-;6842:8;:64::i;53941:301::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;;;54096:10:::1;54121:25:::0;;;:13:::1;:25;::::0;;;;;;;:39;;;;;;;;;:53:::1;;::::0;54063:171:::1;::::0;54096:10;-1:-1:-1;;;;;54121:53:0::1;54147:12:::0;54216:7;54063:18:::1;:171::i;48291:533::-:0;48431:10;48380:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:47;-1:-1:-1;;;;;48380:47:0;:61;48358:123;;;;-1:-1:-1;;;48358:123:0;;;;;;;:::i;:::-;48529:10;48514:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:57;;48567:4;48514:57;48492:125;;;;-1:-1:-1;;;48492:125:0;;11540:2:1;48492:125:0;;;11522:21:1;11579:2;11559:18;;;11552:30;-1:-1:-1;;;11598:18:1;;;11591:48;11656:18;;48492:125:0;11338:342:1;48492:125:0;48665:10;48650:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;48628:118;;;;-1:-1:-1;;;48628:118:0;;11887:2:1;48628:118:0;;;11869:21:1;11926:2;11906:18;;;11899:30;-1:-1:-1;;;11945:18:1;;;11938:40;11995:18;;48628:118:0;11685:334:1;48628:118:0;48774:10;48811:5;48759:26;;;:14;:26;;;;;;;;:35;;;;;;;:49;;:57;;-1:-1:-1;;48759:57:0;;;48291:533::o;42812:288::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;;;42902:10:::1;42887:26:::0;;:14:::1;:26;::::0;;;;;42879:63:::1;;;::::0;-1:-1:-1;;;42879:63:0;;10495:2:1;42879:63:0::1;::::0;::::1;10477:21:1::0;10534:2;10514:18;;;10507:30;-1:-1:-1;;;10553:18:1;;;10546:50;10613:18;;42879:63:0::1;10293:344:1::0;42879:63:0::1;42989:10;42955:16;42974:26:::0;;;:14:::1;:26;::::0;;;;;;;43011:30;;;;43054:38;;42974:26;;42989:10;43054:38;::::1;;;::::0;42974:26;;43054:38;42955:16;43054:38;42974:26;42989:10;43054:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;21062:111:::0;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;21141:18:::1;:24:::0;;-1:-1:-1;;;;;;21141:24:0::1;-1:-1:-1::0;;;;;21141:24:0;;;::::1;::::0;;;::::1;::::0;;21062:111::o;52929:327::-;52993:7;;;53048:171;-1:-1:-1;;;;;53095:52:0;;;:23;;;;:13;:23;;;;;;;;:26;;;;;;;;:40;;;;:52;53048:171;;;53192:15;53206:1;53192:15;;:::i;:::-;;-1:-1:-1;53162:3:0;;;;:::i;:::-;;;;53048:171;;;-1:-1:-1;53238:10:0;52929:327;-1:-1:-1;;52929:327:0:o;30178:1868::-;30278:1;30263:11;:16;;30255:39;;;;-1:-1:-1;;;30255:39:0;;12366:2:1;30255:39:0;;;12348:21:1;12405:2;12385:18;;;12378:30;-1:-1:-1;;;12424:18:1;;;12417:40;12474:18;;30255:39:0;12164:334:1;30255:39:0;15931:3;30327:11;:29;;30305:109;;;;-1:-1:-1;;;30305:109:0;;12705:2:1;30305:109:0;;;12687:21:1;12744:2;12724:18;;;12717:30;12783:32;12763:18;;;12756:60;12833:18;;30305:109:0;12503:354:1;30305:109:0;30443:10;5596:7;5628:18;;;:9;:18;;;;;;30458:6;-1:-1:-1;30433:31:0;30425:62;;;;-1:-1:-1;;;30425:62:0;;13064:2:1;30425:62:0;;;13046:21:1;13103:2;13083:18;;;13076:30;-1:-1:-1;;;13122:18:1;;;13115:48;13180:18;;30425:62:0;12862:342:1;30425:62:0;30500:14;:12;:14::i;:::-;30525:15;30543:26;30558:10;30543:14;:26::i;:::-;30525:44;;30606:6;30582:20;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;30650:10:0;30623:38;;;;:26;:38;;;;;:59;;:69;;30686:6;;30623:38;:69;;30686:6;;30623:69;:::i;:::-;;;;-1:-1:-1;;30720:10:0;30705:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:43;;;:53;;;30769:60;;-1:-1:-1;;;;;;30769:60:0;;;;;;-1:-1:-1;30840:46:0;;;:55;;;30953:10;;:14;;;:::i;:::-;30921:10;30906:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:44;;:61;31036:10;;31079:11;;31036:27;;31062:1;31036:27;:::i;:::-;:54;;;;:::i;:::-;30993:10;30978:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:42;;;:112;;;;31101:50;;;;:58;;-1:-1:-1;;31374:57:0;;;31575:10;;:14;;-1:-1:-1;31575:14:0;:::i;:::-;31563:26;;31558:133;31609:11;31596:10;;:24;;;;:::i;:::-;31591:1;:29;31558:133;;31642:27;;;;:24;:27;;;;;:37;;31673:6;;31642:27;:37;;31673:6;;31642:37;:::i;:::-;;;;-1:-1:-1;31622:3:0;;-1:-1:-1;31622:3:0;;;:::i;:::-;;;;31558:133;;;;31721:6;31703:14;;:24;;;;;;;:::i;:::-;;;;;;;;31788:6;31738:30;:46;31769:10;;31782:1;31769:14;;;;:::i;:::-;31738:46;;;;;;;;;;;;:56;;;;;;;:::i;:::-;;;;;;;;31869:6;31805:30;:60;31849:11;31836:10;;:24;;;;:::i;:::-;:28;;31863:1;31836:28;:::i;:::-;31805:60;;;;;;;;;;;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;31936:25:0;;-1:-1:-1;31942:10:0;31954:6;31936:5;:25::i;:::-;31979:59;;;32001:15;13411:25:1;;13467:2;13452:18;;13445:34;;;13495:18;;;13488:34;;;31989:10:0;;31979:59;;13399:2:1;13384:18;31979:59:0;;;;;;;;30244:1802;30178:1868;;:::o;21181:340::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;3154:1:::1;3374:7;;:19;;3366:63;;;;-1:-1:-1::0;;;3366:63:0::1;;;;;;;:::i;:::-;3154:1;3507:7;:18:::0;21269:30:::2;::::0;21261:59:::2;;;::::0;-1:-1:-1;;;21261:59:0;;13735:2:1;21261:59:0::2;::::0;::::2;13717:21:1::0;13774:2;13754:18;;;13747:30;-1:-1:-1;;;13793:18:1;;;13786:42;13845:18;;21261:59:0::2;13533:336:1::0;21261:59:0::2;21331:18;::::0;21359:30:::2;::::0;-1:-1:-1;;;;;21331:18:0;;::::2;::::0;:63:::2;::::0;21359:34:::2;::::0;21392:1:::2;::::0;21359:34:::2;:::i;:::-;21331:63;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;21405:18:0::2;::::0;21433:30:::2;::::0;-1:-1:-1;;;;;21405:18:0;;::::2;::::0;:63:::2;::::0;21433:34:::2;::::0;21466:1:::2;::::0;21433:34:::2;:::i;:::-;21405:63;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;21512:1:0::2;21479:30;:34:::0;;;3110:1:::1;3686:22:::0;;21181:340::o;49087:3310::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;49221:14:::1;:12;:14::i;:::-;49256:15;::::0;::::1;;:24;49248:43;;;;-1:-1:-1::0;;;49248:43:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49324:29:0;;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:50;::::1;49378:10;49324:64;;49302:126;;;::::0;-1:-1:-1;;;49302:126:0;;14410:2:1;49302:126:0::1;::::0;::::1;14392:21:1::0;14449:2;14429:18;;;14422:30;-1:-1:-1;;;14468:18:1;;;14461:42;14520:18;;49302:126:0::1;14208:336:1::0;49302:126:0::1;-1:-1:-1::0;;;;;49461:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:52:::1;;::::0;;;::::1;;;:61;49439:141;;;::::0;-1:-1:-1;;;49439:141:0;;14751:2:1;49439:141:0::1;::::0;::::1;14733:21:1::0;14790:2;14770:18;;;14763:30;14829:32;14809:18;;;14802:60;14879:18;;49439:141:0::1;14549:354:1::0;49439:141:0::1;-1:-1:-1::0;;;;;49613:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:52:::1;;::::0;;;::::1;;;:60;;49669:4;49613:60;49591:140;;;::::0;-1:-1:-1;;;49591:140:0;;15110:2:1;49591:140:0::1;::::0;::::1;15092:21:1::0;15149:2;15129:18;;;15122:30;15188:32;15168:18;;;15161:60;15238:18;;49591:140:0::1;14908:354:1::0;49591:140:0::1;-1:-1:-1::0;;;;;49764:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:52:::1;;::::0;::::1;::::0;::::1;;;:61;49742:124;;;::::0;-1:-1:-1;;;49742:124:0;;15469:2:1;49742:124:0::1;::::0;::::1;15451:21:1::0;15508:2;15488:18;;;15481:30;-1:-1:-1;;;15527:18:1;;;15520:43;15580:18;;49742:124:0::1;15267:337:1::0;49742:124:0::1;49947:10;::::0;-1:-1:-1;;;;;49899:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:45:::1;;::::0;:58:::1;49877:134;;;::::0;-1:-1:-1;;;49877:134:0;;15811:2:1;49877:134:0::1;::::0;::::1;15793:21:1::0;15850:2;15830:18;;;15823:30;15889:28;15869:18;;;15862:56;15935:18;;49877:134:0::1;15609:350:1::0;49877:134:0::1;-1:-1:-1::0;;;;;50045:33:0;::::1;50024:18;50045:33:::0;;;:18:::1;:33;::::0;;;;;;;:42;;;;;;;;:67:::1;::::0;::::1;::::0;50146:69:::1;::::0;;::::1;::::0;50246:9:::1;50290:66:::0;;::::1;50268:130;;;::::0;-1:-1:-1;;;50268:130:0;;16166:2:1;50268:130:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;-1:-1:-1;;;16224:18:1;;;16217:44;16278:18;;50268:130:0::1;15964:338:1::0;50268:130:0::1;50411:18;50450:3;50433:13;:9:::0;50445:1:::1;50433:13;:::i;:::-;50432:21;;;;:::i;:::-;50411:42:::0;-1:-1:-1;50498:14:0::1;50511:1;50411:42:::0;50498:14:::1;:::i;:::-;50464:30;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;50549:14:0::1;::::0;-1:-1:-1;50562:1:0::1;50549:10:::0;:14:::1;:::i;:::-;50534:10;::::0;50523:22:::1;::::0;;;:10:::1;:22;::::0;;;;:40;;:22;;;:40:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;50576:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:70:::1;;:86:::0;;50650:12;;50576:29;:86:::1;::::0;50650:12;;50576:86:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;50673:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;;;;:38;;;;;;;;:52:::1;;:59:::0;;-1:-1:-1;;50743:60:0;50673:59;50743:60;;;50839:27:::1;50855:10;50839:15;:27::i;:::-;-1:-1:-1::0;;;;;50879:33:0;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;:42;;;;;;;;:50:::1;::::0;::::1;:57:::0;;-1:-1:-1;;50947:61:0;50932:4:::1;50947:61:::0;;;;;;51019:56;;::::1;:69:::0;;-1:-1:-1;;;;;;51019:69:0::1;51078:10;51019:69;::::0;;51099:55:::1;::::0;;::::1;:70:::0;;;51252:10:::1;::::0;51099:70;;-1:-1:-1;51252:27:0::1;::::0;:10;:27:::1;:::i;:::-;-1:-1:-1::0;;;;;51180:33:0;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;:42;;;;;;;;:56:::1;::::0;::::1;:99:::0;;;;51403:51:::1;;::::0;51360:10:::1;::::0;:27:::1;::::0;51386:1:::1;51360:27;:::i;:::-;:94;;;;:::i;:::-;-1:-1:-1::0;;;;;51290:33:0;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;:42;;;;;;;;:54:::1;;:164:::0;;;51523:10:::1;51467:25:::0;;;:13:::1;:25:::0;;;;;:39;;;;;;;;;:66;;-1:-1:-1;;;;;;51467:66:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;51544:53:0;::::1;:69:::0;;;;::::1;::::0;;::::1;::::0;;51624:52:::1;::::0;::::1;:67:::0;;;51756:50:::1;::::0;::::1;:63:::0;;;51830:52:::1;::::0;::::1;:67:::0;;;51957:78;;51908:46:::1;::::0;;::::1;:127:::0;52097:3:::1;52079:14;:9:::0;52091:2:::1;52079:14;:::i;:::-;52078:22;;;;:::i;:::-;-1:-1:-1::0;;;;;52048:26:0;::::1;;::::0;;;:11:::1;:26;::::0;;;;:52;;:26;;;:52:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;52229:3:0::1;::::0;-1:-1:-1;52198:14:0::1;:9:::0;52210:2:::1;52198:14;:::i;:::-;52197:35;;;;:::i;:::-;-1:-1:-1::0;;;;;52123:33:0;;::::1;52111:69;52123:33:::0;;;:18:::1;:33;::::0;;;;;;;:42;;;;;;;;:56:::1;;::::0;;;::::1;52111:69:::0;;:11:::1;:69:::0;;;;;:121;;:69;;;:121:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;52283:3:0::1;::::0;-1:-1:-1;52265:14:0::1;:9:::0;52277:2:::1;52265:14;:::i;:::-;52264:22;;;;:::i;:::-;52243:17;;:43;;;;;;;:::i;:::-;;;;;;;;52317:1;52297:16;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;52336:53:0::1;::::0;;52359:15:::1;16654:25:1::0;;16710:2;16695:18;;16688:34;;;52347:10:0::1;::::0;52336:53:::1;::::0;16627:18:1;52336:53:0::1;;;;;;;-1:-1:-1::0;;3110:1:0;3686:7;:22;-1:-1:-1;;;;;49087:3310:0:o;2474:103::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;2539:30:::1;2566:1;2539:18;:30::i;39429:3286::-:0;39545:14;:12;:14::i;:::-;39580:20;;;;;;;:29;39572:48;;;;-1:-1:-1;;;39572:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39653:29:0;;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:50;;39707:10;39653:64;;39631:125;;;;-1:-1:-1;;;39631:125:0;;16935:2:1;39631:125:0;;;16917:21:1;16974:2;16954:18;;;16947:30;-1:-1:-1;;;16993:18:1;;;16986:41;17044:18;;39631:125:0;16733:335:1;39631:125:0;-1:-1:-1;;;;;39789:67:0;;;:29;;;;:14;:29;;;;;;;;:38;;;;;;;;:50;;;;:67;39767:129;;;;-1:-1:-1;;;39767:129:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39929:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:52;;;;;;;;:61;39907:130;;;;-1:-1:-1;;;39907:130:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40070:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:52;;;;;;;;:60;;40126:4;40070:60;40048:131;;;;-1:-1:-1;;;40048:131:0;;17623:2:1;40048:131:0;;;17605:21:1;17662:2;17642:18;;;17635:30;-1:-1:-1;;;17681:18:1;;;17674:51;17742:18;;40048:131:0;17421:345:1;40048:131:0;-1:-1:-1;;;;;40249:29:0;;40190:14;40249:29;;;:14;:29;;;;;;;;:38;;;;;;;;:44;;;40207:9;;40249:54;;40227:120;;;;-1:-1:-1;;;40227:120:0;;17973:2:1;40227:120:0;;;17955:21:1;18012:2;17992:18;;;17985:30;-1:-1:-1;;;18031:18:1;;;18024:46;18087:18;;40227:120:0;17771:340:1;40227:120:0;40428:10;;-1:-1:-1;;;;;40380:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:45;;;:58;40358:119;;;;-1:-1:-1;;;40358:119:0;;18318:2:1;40358:119:0;;;18300:21:1;18357:2;18337:18;;;18330:30;-1:-1:-1;;;18376:18:1;;;18369:41;18427:18;;40358:119:0;18116:335:1;40358:119:0;-1:-1:-1;;;;;40530:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:44;;;40595:3;;40530:48;;40577:1;40530:48;:::i;:::-;40529:69;;;;:::i;:::-;40501:10;;40490:22;;;;:10;:22;;;;;:108;;:22;;;:108;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;40657:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:44;;;40722:3;;40657:48;;40704:1;40657:48;:::i;:::-;40656:69;;;;:::i;:::-;40609:30;;:116;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;40783:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:44;;;40849:3;;40783:49;;40830:2;40783:49;:::i;:::-;40782:70;;;;:::i;:::-;-1:-1:-1;;;;;40736:29:0;;;;;;:14;:29;;;;;:116;;:29;;;:116;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;40911:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:52;;:59;;-1:-1:-1;;41052:60:0;;;;;41147:10;41125:33;;:21;:33;;;;;:43;;41162:6;;40911:29;41125:43;;41162:6;;41125:43;:::i;:::-;;;;-1:-1:-1;;;;;;;41179:36:0;;;;;;:21;:36;;;;;:46;;41219:6;;41179:36;:46;;41219:6;;41179:46;:::i;:::-;;;;;;;;41257:1;41238:15;;:20;;;;;;;:::i;:::-;;;;;;;;41289:6;41269:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;41386:18:0;;-1:-1:-1;41407:26:0;41422:10;41407:14;:26::i;:::-;41497:10;41444:26;;;;:14;:26;;;;;;;;:38;;;;;;;;;:63;;-1:-1:-1;;;;;;41444:63:0;;;;;-1:-1:-1;;;;;41570:53:0;;;;;;;;;;;:62;;;;;;;;-1:-1:-1;41570:73:0;;;;41518:49;;;:125;41704:71;;;;;41654:47;;;:121;41834:69;;;;;41786:45;;;:117;41987:70;;;;;41914;;;:143;42068:46;;;:59;;;42138:53;;;:61;;-1:-1:-1;;42423:60:0;;;42494:38;;;;;;:44;;:48;;;;42560:147;;42638:15;13411:25:1;;13452:18;;;13445:34;;;13495:18;;;13488:34;;;42560:147:0;;41444:38;;-1:-1:-1;41497:10:0;;42560:147;;;;;13399:2:1;42560:147:0;;;39534:3181;;39429:3286;;:::o;19516:232::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;19581:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;19577:164;;;19621:15;:23:::0;;-1:-1:-1;;19621:23:0::1;::::0;;19756:301::o;19577:164::-:1;19666:15;::::0;::::1;;19662:79;;19707:15;:22:::0;;-1:-1:-1;;19707:22:0::1;19725:4;19707:22;::::0;;19516:232::o;36461:398::-;36577:7;15931:3;36624:13;:31;;36602:111;;;;-1:-1:-1;;;36602:111:0;;12705:2:1;36602:111:0;;;12687:21:1;12744:2;12724:18;;;12717:30;12783:32;12763:18;;;12756:60;12833:18;;36602:111:0;12503:354:1;36602:111:0;36726:20;15848:3;36778:16;36793:1;36778:13;:16;:::i;:::-;36777:37;;;;:::i;:::-;36749:66;;:11;:66;:::i;:::-;36726:89;-1:-1:-1;36833:18:0;36848:3;36726:89;36833:18;:::i;:::-;36826:25;36461:398;-1:-1:-1;;;;36461:398:0:o;21637:115::-;21677:7;21738:6;21723:11;;21705:15;:29;;;;:::i;:::-;21704:40;;;;:::i;:::-;21697:47;;21637:115;:::o;25110:255::-;25188:8;;;;25180:39;;;;-1:-1:-1;;;25180:39:0;;20041:2:1;25180:39:0;;;20023:21:1;20080:2;20060:18;;;20053:30;-1:-1:-1;;;20099:18:1;;;20092:49;20158:18;;25180:39:0;19839:343:1;25180:39:0;25317:40;25330:12;25344:9;25355:1;25317:12;:40::i;:::-;25110:255;:::o;5148:104::-;5204:13;5237:7;5230:14;;;;;:::i;20824:111::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;20903:18:::1;:24:::0;;-1:-1:-1;;;;;;20903:24:0::1;-1:-1:-1::0;;;;;20903:24:0;;;::::1;::::0;;;::::1;::::0;;20824:111::o;6944:505::-;7064:4;1719:10;7064:4;7152:25;1719:10;7169:7;7152:9;:25::i;:::-;7125:52;;7230:15;7210:16;:35;;7188:122;;;;-1:-1:-1;;;7188:122:0;;20389:2:1;7188:122:0;;;20371:21:1;20428:2;20408:18;;;20401:30;20467:34;20447:18;;;20440:62;-1:-1:-1;;;20518:18:1;;;20511:35;20563:19;;7188:122:0;20187:401:1;7188:122:0;7346:60;7355:5;7362:7;7390:15;7371:16;:34;7346:8;:60::i;27816:1265::-;27911:10;27896:26;;;;:14;:26;;;;;;;;:37;;;;;;;;:50;;;;;:59;27874:126;;;;-1:-1:-1;;;27874:126:0;;20795:2:1;27874:126:0;;;20777:21:1;20834:2;20814:18;;;20807:30;-1:-1:-1;;;20853:18:1;;;20846:47;20910:18;;27874:126:0;20593:341:1;27874:126:0;28011:14;:12;:14::i;:::-;28056:10;;28044:9;:22;28036:51;;;;-1:-1:-1;;;28036:51:0;;21141:2:1;28036:51:0;;;21123:21:1;21180:2;21160:18;;;21153:30;-1:-1:-1;;;21199:18:1;;;21192:46;21255:18;;28036:51:0;20939:340:1;28036:51:0;28100:19;28122:37;28137:10;28149:9;28122:14;:37::i;:::-;28100:59;;28172:30;28178:10;28190:11;28172:5;:30::i;:::-;28228:10;28213:26;;;;:14;:26;;;;;;;;:37;;;;;;;;:50;;:57;;-1:-1:-1;;28213:57:0;28266:4;28213:57;;;28283:23;:38;;28310:11;;28213:26;28283:38;;28310:11;;28283:38;:::i;:::-;;;;-1:-1:-1;;28359:10:0;28332:38;;;;:26;:38;;;;;:91;;28412:11;;28332:38;:91;;28412:11;;28332:91;:::i;:::-;;;;-1:-1:-1;;28477:10:0;28436:23;28462:26;;;:14;:26;;;;;;;;:37;;;;;;;;:60;;;;;;-1:-1:-1;;;;;28462:60:0;28537:29;;28533:465;;28655:16;28705:3;28675:26;16007:1;28675:11;:26;:::i;:::-;28674:34;;;;:::i;:::-;-1:-1:-1;;;;;28723:30:0;;;;;;:13;:30;;;;;:32;;28655:53;;-1:-1:-1;28723:30:0;:32;;;:::i;:::-;;;;;;28772;28778:15;28795:8;28772:5;:32::i;:::-;-1:-1:-1;;;;;28819:36:0;;;;;;:19;:36;;;;;:48;;28859:8;;28819:36;:48;;28859:8;;28819:48;:::i;:::-;;;;-1:-1:-1;28931:55:0;;-1:-1:-1;28937:10:0;28981:4;28950:27;16093:2;28950:11;:27;:::i;:::-;28949:36;;;;:::i;:::-;28931:5;:55::i;:::-;28568:430;28533:465;29015:58;;;29044:15;16654:25:1;;16710:2;16695:18;;16688:34;;;29032:10:0;;29015:58;;16627:18:1;29015:58:0;16480:248:1;5662:234:0;5777:4;1719:10;5838:28;1719:10;5855:2;5859:6;5838:9;:28::i;29217:593::-;29321:7;29354:9;29346:27;;;;-1:-1:-1;;;29346:27:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29433:24:0;;29384:19;29433:24;;;:14;:24;;;;;;;;:30;;;;;;;;:50;;;29500:13;;;;;:38;;;29528:10;;29517:8;:21;29500:38;29496:276;;;29692:20;;;;:10;:20;;;;;;;;;-1:-1:-1;;;;;29624:24:0;;;;:14;:24;;;;;:30;;;;;;;;;:47;;;29587:13;;:84;;29624:47;29587:84;:::i;:::-;29586:126;;;;:::i;:::-;29555:157;;29496:276;;;29759:1;29745:15;;29496:276;-1:-1:-1;29791:11:0;29217:593;-1:-1:-1;;;29217:593:0:o;24226:635::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;24366:30:::1;::::0;;;::::1;;;:39;24358:58;;;;-1:-1:-1::0;;;24358:58:0::1;;;;;;;:::i;:::-;24495:10;::::0;24464::::1;24449:26;::::0;;;:14:::1;:26;::::0;;;;;;;:35;;;;;;;;:42:::1;;::::0;:56:::1;;24427:123;;;::::0;-1:-1:-1;;;24427:123:0;;21819:2:1;24427:123:0::1;::::0;::::1;21801:21:1::0;21858:2;21838:18;;;21831:30;-1:-1:-1;;;21877:18:1;;;21870:47;21934:18;;24427:123:0::1;21617:341:1::0;24427:123:0::1;24563:25;24574:7;24583:4;24563:10;:25::i;:::-;24601:14;24618:40;24638:10;24650:7;24618:19;:40::i;:::-;24601:57:::0;-1:-1:-1;24722:131:0::1;24749:12:::0;24802:3:::1;24787:11;24601:57:::0;24796:2:::1;24787:11;:::i;:::-;24786:19;;;;:::i;:::-;24776:30;::::0;:6;:30:::1;:::i;:::-;24838:3;24823:11;:6:::0;24832:2:::1;24823:11;:::i;:::-;24822:19;;;;:::i;:::-;24722:12;:131::i;:::-;-1:-1:-1::0;;3110:1:0;3686:7;:22;-1:-1:-1;24226:635:0:o;32645:102::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;;;;32713:26:::1;32724:7;32733:5;32713:10;:26::i;20065:257::-:0;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;20135:20:::1;::::0;::::1;;::::0;;::::1;;:28;;:20;:28;20131:184;;;20180:20;:28:::0;;-1:-1:-1;;20180:28:0::1;::::0;;19756:301::o;20131:184::-:1;20230:20;::::0;::::1;::::0;::::1;;;20226:89;;20276:20;:27:::0;;-1:-1:-1;;20276:27:0::1;;;::::0;;20065:257::o;37707:1549::-;37785:14;:12;:14::i;:::-;37820:20;;;;;;;:29;37812:48;;;;-1:-1:-1;;;37812:48:0;;;;;;;:::i;:::-;37944:10;37893:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:47;-1:-1:-1;;;;;37893:47:0;:61;37871:123;;;;-1:-1:-1;;;37871:123:0;;;;;;;:::i;:::-;38042:10;38027:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;38005:122;;;;-1:-1:-1;;;38005:122:0;;9767:2:1;38005:122:0;;;9749:21:1;9806:2;9786:18;;;9779:30;-1:-1:-1;;;9825:18:1;;;9818:44;9879:18;;38005:122:0;9565:338:1;38005:122:0;38175:10;38160:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;38138:127;;;;-1:-1:-1;;;38138:127:0;;;;;;;:::i;:::-;38343:10;;38313;38298:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:42;;;:55;38276:116;;;;-1:-1:-1;;;38276:116:0;;18318:2:1;38276:116:0;;;18300:21:1;18357:2;18337:18;;;18330:30;-1:-1:-1;;;18376:18:1;;;18369:41;18427:18;;38276:116:0;18116:335:1;38276:116:0;38490:10;38475:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:57;;38528:4;38475:57;38471:121;;;38549:31;38572:7;38549:22;:31::i;:::-;38641:10;38626:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;38604:129;;;;-1:-1:-1;;;38604:129:0;;22165:2:1;38604:129:0;;;22147:21:1;22204:2;22184:18;;;22177:30;-1:-1:-1;;;22223:18:1;;;22216:51;22284:18;;38604:129:0;21963:345:1;38604:129:0;38761:10;38746:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;:56;;-1:-1:-1;;38746:56:0;;;;;38813:41;;:49;;;38893:21;;;38875:40;;:17;:40;;;;;;:65;;-1:-1:-1;;;;;;38875:65:0;;;;;;;38969:21;;38951:40;;;;;38798:4;38951:48;:58;;;39020:23;;;38893:21;39020:23;;;:::i;:::-;;;;-1:-1:-1;;39094:10:0;39169:26;;;;:14;:26;;;;;;;;:35;;;;;;;;;:46;;;39061:187;;39119:15;4588:25:1;;4629:18;;;4622:34;;;4672:18;;;4665:34;4730:2;4715:18;;4708:34;;;39061:187:0;;;;;;;4575:3:1;39061:187:0;;;37707:1549;;:::o;5904:201::-;-1:-1:-1;;;;;6070:18:0;;;6038:7;6070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5904:201::o;45260:2591::-;45428:14;:12;:14::i;:::-;45463:15;;;;:24;45455:43;;;;-1:-1:-1;;;45455:43:0;;;;;;;:::i;:::-;45544:12;45531:10;:25;45509:118;;;;-1:-1:-1;;;45509:118:0;;22515:2:1;45509:118:0;;;22497:21:1;22554:2;22534:18;;;22527:30;22593:34;22573:18;;;22566:62;-1:-1:-1;;;22644:18:1;;;22637:41;22695:19;;45509:118:0;22313:407:1;45509:118:0;45662:1;45646:12;:17;;45638:60;;;;-1:-1:-1;;;45638:60:0;;22927:2:1;45638:60:0;;;22909:21:1;22966:2;22946:18;;;22939:30;23005:32;22985:18;;;22978:60;23055:18;;45638:60:0;22725:354:1;45638:60:0;45782:10;45731:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:47;-1:-1:-1;;;;;45731:47:0;:61;45709:123;;;;-1:-1:-1;;;45709:123:0;;;;;;;:::i;:::-;45880:10;45865:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;45843:138;;;;-1:-1:-1;;;45843:138:0;;14751:2:1;45843:138:0;;;14733:21:1;14790:2;14770:18;;;14763:30;14829:32;14809:18;;;14802:60;14879:18;;45843:138:0;14549:354:1;45843:138:0;46029:10;46014:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;45992:127;;;;-1:-1:-1;;;45992:127:0;;;;;;;:::i;:::-;46229:10;;46167;46152:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:42;;;:57;;46197:12;;46152:57;:::i;:::-;:87;46130:153;;;;-1:-1:-1;;;46130:153:0;;23286:2:1;46130:153:0;;;23268:21:1;23325:2;23305:18;;;23298:30;-1:-1:-1;;;23344:18:1;;;23337:46;23400:18;;46130:153:0;23084:340:1;46130:153:0;46327:17;46347:40;46367:10;46379:7;46347:19;:40::i;:::-;46327:60;;46525:9;46509:12;:25;;46487:111;;;;-1:-1:-1;;;46487:111:0;;23631:2:1;46487:111:0;;;23613:21:1;23670:2;23650:18;;;23643:30;23709:34;23689:18;;;23682:62;-1:-1:-1;;;23760:18:1;;;23753:34;23804:19;;46487:111:0;23429:400:1;46487:111:0;46696:10;46681:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:57;;46734:4;46681:57;46677:121;;;46755:31;46778:7;46755:22;:31::i;:::-;46847:10;46832:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;46810:122;;;;-1:-1:-1;;;46810:122:0;;24036:2:1;46810:122:0;;;24018:21:1;24075:2;24055:18;;;24048:30;-1:-1:-1;;;24094:18:1;;;24087:44;24148:18;;46810:122:0;23834:338:1;46810:122:0;46960:10;46945:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;:56;;-1:-1:-1;;46945:56:0;;;;;47057:30;;;:18;:30;;;;;:39;;;;;;;;:66;;-1:-1:-1;;;;;;47057:66:0;;;;;;;47134:47;;;:57;;;46945:49;47202:50;;:63;;;47276:52;;;:67;;;47354:48;;;:63;;;47428:50;;;;:58;;-1:-1:-1;;47428:58:0;;;47517:21;;;47499:40;;:17;:40;;;;;;:65;;;;;;;;;;;47593:21;;47575:40;;;;;46997:4;47575:48;:58;;;47644:23;;;47517:21;47644:23;;;:::i;:::-;;;;-1:-1:-1;;47685:158:0;;;47743:15;4588:25:1;;4644:2;4629:18;;4622:34;;;4672:18;;;4665:34;;;4730:2;4715:18;;4708:34;;;47718:10:0;;47685:158;;4575:3:1;4560:19;47685:158:0;;;;;;;45417:2434;45260:2591;;;;:::o;35478:758::-;-1:-1:-1;;;;;35661:24:0;;35591:7;35661:24;;;:14;:24;;;;;;;;:34;;;;;;;;:41;;;;35733:43;;;;35809:45;;;;;35591:7;;35733:43;;35867:264;35932:7;35925:4;:14;:35;;;;;35950:10;;35943:4;:17;35925:35;35867:264;;;36089:30;;;;:24;:30;;;;;;;;;36038:10;:16;;;;;;;:30;;36057:11;;36038:30;:::i;:::-;36037:82;;;;:::i;:::-;36008:111;;;;:::i;:::-;;-1:-1:-1;35975:6:0;;;;:::i;:::-;;;;35867:264;;;-1:-1:-1;;;;;;36175:24:0;;;;;;:14;:24;;;;;;;;:34;;;;;;;;:52;;;36151:76;;:8;:76;:::i;:::-;36143:85;35478:758;-1:-1:-1;;;;;;;35478:758:0:o;21760:1434::-;21856:9;:7;:9::i;:::-;21842:10;;:23;21838:1349;;16285:2;21886:10;;:33;21882:812;;;21967:12;21982:10;;21995:1;21982:14;;;;:::i;:::-;21967:29;;21940:335;22027:10;;:14;;22040:1;22027:14;:::i;:::-;22019:4;:22;21940:335;;22238:10;;:16;;22251:3;22238:16;:::i;:::-;22184:24;;22170:10;;22159:22;;;;:10;:22;;;;;;:49;;22184:24;22159:49;:::i;:::-;22158:97;;;;:::i;:::-;22113:16;;;;:10;:16;;;;;:142;;:16;;;:142;;;;;:::i;:::-;;;;-1:-1:-1;22064:6:0;;-1:-1:-1;22064:6:0;;;:::i;:::-;;;;21940:335;;;;21882:812;;;22342:12;22357:10;;22370:1;22357:14;;;;:::i;:::-;22342:29;;22315:364;16285:2;22402:10;;:33;;;;:::i;:::-;22394:4;:41;22315:364;;22632:26;16285:2;22655:3;22632:26;:::i;:::-;22578:24;;22564:10;;22553:22;;;;:10;:22;;;;;;:49;;22578:24;22553:49;:::i;:::-;22552:107;;;;:::i;:::-;22507:16;;;;:10;:16;;;;;:152;;:16;;;:152;;;;;:::i;:::-;;;;-1:-1:-1;22458:6:0;;-1:-1:-1;22458:6:0;;;:::i;:::-;;;;22315:364;;;;21882:812;22723:9;:7;:9::i;:::-;22710:10;:22;22747:18;:16;:18::i;:::-;22780:15;:13;:15::i;:::-;22881:23;:21;:23::i;:::-;22970:4;22936:10;:26;22960:1;22947:10;;:14;;;;:::i;:::-;22936:26;;;;;;;;;;;;22965:1;22936:30;;;;:::i;:::-;22935:39;;;;:::i;:::-;22919:12;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;23014:1:0;22991:20;:24;;;23105:10;;23037:138;;23071:15;;23105:10;23134;;23145:14;23158:1;23105:10;23145:14;:::i;:::-;23134:26;;;;;;;;;;;;23037:138;;;;;;;13411:25:1;;;13467:2;13452:18;;13445:34;;;;13510:2;13495:18;;13488:34;13399:2;13384:18;;13209:319;23037:138:0;;;;;;;;21760:1434::o;2585:238::-;2324:6;;-1:-1:-1;;;;;2324:6:0;1719:10;2386:23;2378:68;;;;-1:-1:-1;;;2378:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2688:22:0;::::1;2666:110;;;::::0;-1:-1:-1;;;2666:110:0;;24379:2:1;2666:110:0::1;::::0;::::1;24361:21:1::0;24418:2;24398:18;;;24391:30;24457:34;24437:18;;;24430:62;-1:-1:-1;;;24508:18:1;;;24501:36;24554:19;;2666:110:0::1;24177:402:1::0;2666:110:0::1;2787:28;2806:8;2787:18;:28::i;32192:327::-:0;32255:7;;;32310:170;-1:-1:-1;;;;;32357:51:0;;;:24;;;;:14;:24;;;;;;;;:27;;;;;;;;:39;;;;:51;32310:170;;;32453:15;32467:1;32453:15;;:::i;:::-;;-1:-1:-1;32423:3:0;;;;:::i;:::-;;;;32310:170;;9179:380;-1:-1:-1;;;;;9315:19:0;;9307:68;;;;-1:-1:-1;;;9307:68:0;;24786:2:1;9307:68:0;;;24768:21:1;24825:2;24805:18;;;24798:30;24864:34;24844:18;;;24837:62;-1:-1:-1;;;24915:18:1;;;24908:34;24959:19;;9307:68:0;24584:400:1;9307:68:0;-1:-1:-1;;;;;9394:21:0;;9386:68;;;;-1:-1:-1;;;9386:68:0;;25191:2:1;9386:68:0;;;25173:21:1;25230:2;25210:18;;;25203:30;25269:34;25249:18;;;25242:62;-1:-1:-1;;;25320:18:1;;;25313:32;25362:19;;9386:68:0;24989:398:1;9386:68:0;-1:-1:-1;;;;;9467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9519:32;;345:25:1;;;9519:32:0;;318:18:1;9519:32:0;;;;;;;;9179:380;;;:::o;9567:502::-;9702:24;9729:25;9739:5;9746:7;9729:9;:25::i;:::-;9702:52;;-1:-1:-1;;9769:16:0;:37;9765:297;;9869:6;9849:16;:26;;9823:117;;;;-1:-1:-1;;;9823:117:0;;25594:2:1;9823:117:0;;;25576:21:1;25633:2;25613:18;;;25606:30;25672:31;25652:18;;;25645:59;25721:18;;9823:117:0;25392:353:1;9823:117:0;9984:51;9993:5;10000:7;10028:6;10009:16;:25;9984:8;:51::i;:::-;9691:378;9567:502;;;:::o;7457:708::-;-1:-1:-1;;;;;7588:18:0;;7580:68;;;;-1:-1:-1;;;7580:68:0;;25952:2:1;7580:68:0;;;25934:21:1;25991:2;25971:18;;;25964:30;26030:34;26010:18;;;26003:62;-1:-1:-1;;;26081:18:1;;;26074:35;26126:19;;7580:68:0;25750:401:1;7580:68:0;-1:-1:-1;;;;;7667:16:0;;7659:64;;;;-1:-1:-1;;;7659:64:0;;26358:2:1;7659:64:0;;;26340:21:1;26397:2;26377:18;;;26370:30;26436:34;26416:18;;;26409:62;-1:-1:-1;;;26487:18:1;;;26480:33;26530:19;;7659:64:0;26156:399:1;7659:64:0;-1:-1:-1;;;;;7809:15:0;;7787:19;7809:15;;;:9;:15;;;;;;7857:21;;;;7835:109;;;;-1:-1:-1;;;7835:109:0;;26762:2:1;7835:109:0;;;26744:21:1;26801:2;26781:18;;;26774:30;26840:34;26820:18;;;26813:62;-1:-1:-1;;;26891:18:1;;;26884:36;26937:19;;7835:109:0;26560:402:1;7835:109:0;-1:-1:-1;;;;;7980:15:0;;;;;;;:9;:15;;;;;;7998:20;;;7980:38;;8040:13;;;;;;;;:23;;8012:6;;7980:15;8040:23;;8012:6;;8040:23;:::i;:::-;;;;;;;;8096:2;-1:-1:-1;;;;;8081:26:0;8090:4;-1:-1:-1;;;;;8081:26:0;;8100:6;8081:26;;;;345:25:1;;333:2;318:18;;199:177;8081:26:0;;;;;;;;8120:37;8580:591;54618:1854;54794:14;:12;:14::i;:::-;-1:-1:-1;;;;;54843:29:0;;;;;;:14;:29;;;;;;;;:38;;;;;;;;:52;;;;;;;;:60;;54899:4;54843:60;54821:150;;;;-1:-1:-1;;;54821:150:0;;27169:2:1;54821:150:0;;;27151:21:1;27208:2;27188:18;;;27181:30;27247:34;27227:18;;;27220:62;-1:-1:-1;;;27298:18:1;;;27291:38;27346:19;;54821:150:0;26967:404:1;54821:150:0;-1:-1:-1;;;;;55035:33:0;;;;;;:18;:33;;;;;;;;:42;;;;;;;;:54;;;55004:10;;:85;;54982:159;;;;-1:-1:-1;;;54982:159:0;;27578:2:1;54982:159:0;;;27560:21:1;27617:2;27597:18;;;27590:30;27656:26;27636:18;;;27629:54;27700:18;;54982:159:0;27376:348:1;54982:159:0;-1:-1:-1;;;;;55174:28:0;;;;;;:13;:28;;;;;;;;:42;;;;;;;;:53;;;;;:62;55152:130;;;;-1:-1:-1;;;55152:130:0;;27931:2:1;55152:130:0;;;27913:21:1;27970:2;27950:18;;;27943:30;-1:-1:-1;;;27989:18:1;;;27982:48;28047:18;;55152:130:0;27729:342:1;55152:130:0;-1:-1:-1;;;;;55315:33:0;;;;;;:18;:33;;;;;;;;:42;;;;;;;;:53;;;;;;;;:62;55293:130;;;;-1:-1:-1;;;55293:130:0;;27931:2:1;55293:130:0;;;27913:21:1;27970:2;27950:18;;;27943:30;-1:-1:-1;;;27989:18:1;;;27982:48;28047:18;;55293:130:0;27729:342:1;55293:130:0;-1:-1:-1;;;;;55456:33:0;;;;;;:18;:33;;;;;;;;:42;;;;;;;;:50;;;;;:58;;:50;:58;55434:138;;;;-1:-1:-1;;;55434:138:0;;28278:2:1;55434:138:0;;;28260:21:1;28317:2;28297:18;;;28290:30;28356:32;28336:18;;;28329:60;28406:18;;55434:138:0;28076:354:1;55434:138:0;-1:-1:-1;;;;;55605:33:0;;;;;;;:18;:33;;;;;;;;:42;;;;;;;;:56;;;;;:90;;;;55583:152;;;;-1:-1:-1;;;55583:152:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55768:33:0;;;;;;:18;:33;;;;;;;;:42;;;;;;;;:55;;;:88;;55746:152;;;;-1:-1:-1;;;55746:152:0;;28637:2:1;55746:152:0;;;28619:21:1;28676:2;28656:18;;;28649:30;-1:-1:-1;;;28695:18:1;;;28688:44;28749:18;;55746:152:0;28435:338:1;55746:152:0;-1:-1:-1;;;;;55911:29:0;;;55966:5;55911:29;;;:14;:29;;;;;;;;:38;;;;;;;;:52;;:60;;-1:-1:-1;;55911:60:0;;;55982:28;;;;;;:13;:28;;;;;:42;;;;;;;;:53;;:60;;-1:-1:-1;;55982:60:0;55911;55982;;;56053:33;;;:18;:33;;;;;:42;;;;;;;;:50;;;:58;;-1:-1:-1;;56122:60:0;55911;56122;;;56214:69;;;56294:32;;;:17;:32;;;;;:44;;56214:69;;;;56294:44;;56214:69;;56294:44;:::i;:::-;;;;-1:-1:-1;;;;;;;56351:33:0;;;56409:1;56351:33;;;:18;:33;;;;;;;;:42;;;;;;;;;:55;;:59;;;56423:41;:31;;;;:41;;;;;56455:8;;56423:41;;56409:1;56423:41;56455:8;56423:31;:41;;;;;;;;;;;;;;;;;;;;;54783:1689;54618:1854;;;;:::o;8580:591::-;-1:-1:-1;;;;;8664:21:0;;8656:67;;;;-1:-1:-1;;;8656:67:0;;28980:2:1;8656:67:0;;;28962:21:1;29019:2;28999:18;;;28992:30;29058:34;29038:18;;;29031:62;-1:-1:-1;;;29109:18:1;;;29102:31;29150:19;;8656:67:0;28778:397:1;8656:67:0;-1:-1:-1;;;;;8823:18:0;;8798:22;8823:18;;;:9;:18;;;;;;8860:24;;;;8852:71;;;;-1:-1:-1;;;8852:71:0;;29382:2:1;8852:71:0;;;29364:21:1;29421:2;29401:18;;;29394:30;29460:34;29440:18;;;29433:62;-1:-1:-1;;;29511:18:1;;;29504:32;29553:19;;8852:71:0;29180:398:1;8852:71:0;-1:-1:-1;;;;;8959:18:0;;;;;;:9;:18;;;;;8980:23;;;8959:44;;9025:12;:22;;8997:6;;8959:18;9025:22;;8997:6;;9025:22;:::i;:::-;;;;-1:-1:-1;;9065:37:0;;345:25:1;;;9091:1:0;;-1:-1:-1;;;;;9065:37:0;;;;;333:2:1;318:18;9065:37:0;199:177:1;2831:191:0;2924:6;;;-1:-1:-1;;;;;2941:17:0;;;-1:-1:-1;;;;;;2941:17:0;;;;;;;2974:40;;2924:6;;;2941:17;2924:6;;2974:40;;2905:16;;2974:40;2894:128;2831:191;:::o;25656:2001::-;25843:10;;25818:6;;25835:32;;;;-1:-1:-1;;;25835:32:0;;;;;;;:::i;:::-;25898:1;25886:9;:13;25878:43;;;;-1:-1:-1;;;25878:43:0;;29785:2:1;25878:43:0;;;29767:21:1;29824:2;29804:18;;;29797:30;-1:-1:-1;;;29843:18:1;;;29836:47;29900:18;;25878:43:0;29583:341:1;25878:43:0;25934:14;:12;:14::i;:::-;25978:20;;25965:9;:33;25961:178;;26045:20;:32;;;26092:22;:35;;-1:-1:-1;;;;;;26092:35:0;26117:10;26092:35;;;25961:178;26170:10;26155:26;;;;:14;:26;;;;;;;;26182:10;;26155:38;;;;;;;:55;;;26151:149;;26232:10;:12;;;:10;:12;;;:::i;:::-;;;;-1:-1:-1;;26275:10:0;;26259:27;;;;:15;:27;;;;;:29;;;;;;:::i;:::-;;;;;;26151:149;26447:22;;26443:645;;26569:30;26581:18;26569:9;:30;:::i;:::-;26513:10;26486:38;;;;:26;:38;;;;;:78;;:114;;:78;;:38;:114;;;;;:::i;:::-;;;;-1:-1:-1;26642:30:0;;-1:-1:-1;26654:18:0;26642:9;:30;:::i;:::-;26626:10;;26615:22;;;;:10;:22;;;;;:58;;:22;;;:58;;;;;:::i;:::-;;;;-1:-1:-1;26711:30:0;;-1:-1:-1;26723:18:0;26711:9;:30;:::i;:::-;26688:18;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;26774:10:0;26759:26;;;;:14;:26;;;;;;;;26786:10;;26759:38;;;;;;;:97;;26838:18;;26759:26;:97;;26838:18;;26759:97;:::i;:::-;;;;-1:-1:-1;26443:645:0;;-1:-1:-1;26443:645:0;;26916:10;26889:38;;;;:26;:38;;;;;:78;;:91;;26971:9;;26889:38;:91;;26971:9;;26889:91;:::i;:::-;;;;-1:-1:-1;;27006:10:0;;26995:22;;;;:10;:22;;;;;:35;;27021:9;;26995:22;:35;;27021:9;;26995:35;:::i;:::-;;;;;;;;27067:9;27045:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;26443:645:0;27115:10;27100:26;;;;:14;:26;;;;;;;;27127:10;;27100:38;;;;;;;:55;;:68;;27159:9;;27100:26;:68;;27159:9;;27100:68;:::i;:::-;;;;-1:-1:-1;;27240:10:0;;27194;27179:26;;;;:14;:26;;;;;;;;:38;;;;;;;;:58;;;:71;;;;27261:51;;;;:59;;-1:-1:-1;;27261:59:0;;;-1:-1:-1;;;;;27337:26:0;;;27333:250;;27431:10;27416:26;;;;:14;:26;;;;;;;;27443:10;;27416:38;;;;;;;:47;;:62;;-1:-1:-1;;;;;;27416:62:0;;-1:-1:-1;;;;;27416:62:0;;;;;;27333:250;;;27526:10;27569:1;27511:26;;;:14;:26;;;;;;;;27538:10;;27511:38;;;;;;;:47;;:60;;-1:-1:-1;;;;;;27511:60:0;;;27333:250;27600:49;;;27622:15;16654:25:1;;16710:2;16695:18;;16688:34;;;27610:10:0;;27600:49;;16627:18:1;27600:49:0;;;;;;;;25787:1870;25656:2001;;;:::o;8173:399::-;-1:-1:-1;;;;;8257:21:0;;8249:65;;;;-1:-1:-1;;;8249:65:0;;30131:2:1;8249:65:0;;;30113:21:1;30170:2;30150:18;;;30143:30;30209:33;30189:18;;;30182:61;30260:18;;8249:65:0;29929:355:1;8249:65:0;8405:6;8389:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8422:18:0;;;;;;:9;:18;;;;;:28;;8444:6;;8422:18;:28;;8444:6;;8422:28;:::i;:::-;;;;-1:-1:-1;;8466:37:0;;345:25:1;;;-1:-1:-1;;;;;8466:37:0;;;8483:1;;8466:37;;333:2:1;318:18;8466:37:0;;;;;;;8173:399;;:::o;32983:2295::-;33128:10;;33097;33082:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:42;;;:56;;33060:123;;;;-1:-1:-1;;;33060:123:0;;21819:2:1;33060:123:0;;;21801:21:1;21858:2;21838:18;;;21831:30;-1:-1:-1;;;21877:18:1;;;21870:47;21934:18;;33060:123:0;21617:341:1;33060:123:0;33267:10;33216:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:47;-1:-1:-1;;;;;33216:47:0;:61;33194:123;;;;-1:-1:-1;;;33194:123:0;;;;;;;:::i;:::-;33365:10;33350:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:50;;;;;:59;33328:126;;;;-1:-1:-1;;;33328:126:0;;20795:2:1;33328:126:0;;;20777:21:1;20834:2;20814:18;;;20807:30;-1:-1:-1;;;20853:18:1;;;20846:47;20910:18;;33328:126:0;20593:341:1;33328:126:0;33502:10;33487:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:58;33465:120;;;;-1:-1:-1;;;33465:120:0;;30491:2:1;33465:120:0;;;30473:21:1;30530:2;30510:18;;;30503:30;-1:-1:-1;;;30549:18:1;;;30542:42;30601:18;;33465:120:0;30289:336:1;33465:120:0;33598:14;:12;:14::i;:::-;33715:10;33752:5;33700:26;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;:57;;-1:-1:-1;;33768:57:0;;;33752:5;33883:40;;33700:35;33883:19;:40::i;:::-;33866:57;;33959:6;33934:21;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;34003:10:0;33976:38;;;;:26;:38;;;;;:60;;:70;;34040:6;;33976:38;:70;;34040:6;;33976:70;:::i;:::-;;;;-1:-1:-1;;34074:10:0;34059:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:50;;:57;;-1:-1:-1;;34059:57:0;34112:4;34059:57;;;;;;34133:21;;;;34129:98;;;;;;34179:36;;34187:10;;34179:36;;;;;34208:6;;34179:36;;;;34208:6;34187:10;34179:36;;;;;;;;;;;;;;;;;;;;;34129:98;34350:10;34335:26;;;;:14;:26;;;;;;;;:35;;;;;;;;:49;;;;;;;;:57;;34388:4;34335:57;34331:321;;;34465:10;34446:30;;;;:18;:30;;;;;;;;:39;;;;;;;;:53;;;;34547:52;;;;;34409:231;;-1:-1:-1;;;;;34446:53:0;;;;34465:10;34446:39;34409:18;:231::i;:::-;34701:10;34664:19;34686:26;;;:14;:26;;;;;;;;:35;;;;;;;;:46;;;34824:16;;34820:380;;34993:10;34857:19;34978:26;;;:14;:26;;;;;;;;:35;;;;;;;;:44;;;;34912:42;;;;;34879:188;;34912:110;;;:::i;:::-;35041:11;34879:14;:188::i;:::-;34857:210;;35116:11;35084:28;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;35144:44:0;;-1:-1:-1;35150:10:0;35162:25;35176:11;35162;:25;:::i;35144:44::-;34842:358;34820:380;35217:53;;;35246:15;16654:25:1;;16710:2;16695:18;;16688:34;;;35234:10:0;;35217:53;;16627:18:1;35217:53:0;16480:248:1;23251:143:0;23381:4;15618:1;23318:13;;:46;;;;:::i;:::-;23317:68;;;;:::i;:::-;23299:13;;:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;23251:143:0:o;23503:461::-;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;23569:10:::1;::::0;23561:32:::1;;;;-1:-1:-1::0;;;23561:32:0::1;;;;;;;:::i;:::-;23606:26;23705:3;15484:1;23636:10;:26;23660:1;23647:10;;:14;;;;:::i;:::-;23636:26;;;;;;;;;;;;:65;;;;:::i;:::-;23635:73;;;;:::i;:::-;23719:18;::::0;23606:102;;-1:-1:-1;;;;;;23719:18:0::1;:51;23747:22;23768:1;23606:102:::0;23747:22:::1;:::i;:::-;23719:51;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23781:18:0::1;::::0;-1:-1:-1;;;;;23781:18:0::1;:51;23809:22;23830:1;23809:18:::0;:22:::1;:::i;:::-;23781:51;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23843:18:0::1;::::0;-1:-1:-1;;;;;23843:18:0::1;:51;23871:22;23892:1;23871:18:::0;:22:::1;:::i;:::-;23843:51;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23905:18:0::1;::::0;-1:-1:-1;;;;;23905:18:0::1;:51;23933:22;23954:1;23933:18:::0;:22:::1;:::i;:::-;23905:51;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;56745:904:::0;3154:1;3374:7;;:19;;3366:63;;;;-1:-1:-1;;;3366:63:0;;;;;;;:::i;:::-;3154:1;3507:7;:18;56838:21:::1;::::0;56815:20:::1;::::0;:44:::1;56811:831;;;56986:20;::::0;56962:21:::1;:44:::0;57027:10:::1;::::0;57041:1:::1;-1:-1:-1::0;57023:460:0::1;;57071:22;::::0;57128:12:::1;::::0;-1:-1:-1;;;;;57071:22:0;;::::1;::::0;57063:109:::1;::::0;57149:3:::1;::::0;57128:17:::1;::::0;57143:2:::1;57128:17;:::i;:::-;57127:25;;;;:::i;:::-;57063:109;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;57228:3;57207:12;;57222:2;57207:17;;;;:::i;:::-;57206:25;;;;:::i;:::-;57191:12;:40:::0;;;57294:22:::1;::::0;-1:-1:-1;;;;;57294:22:0::1;::::0;57257:210:::1;::::0;57362:3:::1;::::0;57341:17:::1;::::0;57356:2:::1;57341:17;:::i;:::-;57340:25;;;;:::i;:::-;57427:21;::::0;57257:210:::1;::::0;;13411:25:1;;;57389:15:0::1;13467:2:1::0;13452:18;;13445:34;13495:18;;13488:34;13399:2;13384:18;57257:210:0::1;;;;;;;57023:460;56811:831;;;57626:4;57596:21;;57620:2;57596:26;;;;:::i;:::-;57595:35;;;;:::i;:::-;57570:21;;:60;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;56811:831:0::1;3110:1:::0;3686:7;:22;56745:904::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;605:597::-;717:4;746:2;775;764:9;757:21;807:6;801:13;850:6;845:2;834:9;830:18;823:34;875:1;885:140;899:6;896:1;893:13;885:140;;;994:14;;;990:23;;984:30;960:17;;;979:2;956:26;949:66;914:10;;885:140;;;1043:6;1040:1;1037:13;1034:91;;;1113:1;1108:2;1099:6;1088:9;1084:22;1080:31;1073:42;1034:91;-1:-1:-1;1186:2:1;1165:15;-1:-1:-1;;1161:29:1;1146:45;;;;1193:2;1142:54;;605:597;-1:-1:-1;;;605:597:1:o;1207:131::-;-1:-1:-1;;;;;1282:31:1;;1272:42;;1262:70;;1328:1;1325;1318:12;1343:315;1411:6;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:52;;;1488:1;1485;1478:12;1440:52;1527:9;1514:23;1546:31;1571:5;1546:31;:::i;:::-;1596:5;1648:2;1633:18;;;;1620:32;;-1:-1:-1;;;1343:315:1:o;1951:255::-;2018:6;2071:2;2059:9;2050:7;2046:23;2042:32;2039:52;;;2087:1;2084;2077:12;2039:52;2126:9;2113:23;2145:31;2170:5;2145:31;:::i;:::-;2195:5;1951:255;-1:-1:-1;;;1951:255:1:o;2742:456::-;2819:6;2827;2835;2888:2;2876:9;2867:7;2863:23;2859:32;2856:52;;;2904:1;2901;2894:12;2856:52;2943:9;2930:23;2962:31;2987:5;2962:31;:::i;:::-;3012:5;-1:-1:-1;3069:2:1;3054:18;;3041:32;3082:33;3041:32;3082:33;:::i;:::-;2742:456;;3134:7;;-1:-1:-1;;;3188:2:1;3173:18;;;;3160:32;;2742:456::o;3600:248::-;3668:6;3676;3729:2;3717:9;3708:7;3704:23;3700:32;3697:52;;;3745:1;3742;3735:12;3697:52;-1:-1:-1;;3768:23:1;;;3838:2;3823:18;;;3810:32;;-1:-1:-1;3600:248:1:o;7454:388::-;7522:6;7530;7583:2;7571:9;7562:7;7558:23;7554:32;7551:52;;;7599:1;7596;7589:12;7551:52;7638:9;7625:23;7657:31;7682:5;7657:31;:::i;:::-;7707:5;-1:-1:-1;7764:2:1;7749:18;;7736:32;7777:33;7736:32;7777:33;:::i;:::-;7829:7;7819:17;;;7454:388;;;;;:::o;7847:385::-;7933:6;7941;7949;7957;8010:3;7998:9;7989:7;7985:23;7981:33;7978:53;;;8027:1;8024;8017:12;7978:53;-1:-1:-1;;8050:23:1;;;8120:2;8105:18;;8092:32;;-1:-1:-1;8171:2:1;8156:18;;8143:32;;8222:2;8207:18;8194:32;;-1:-1:-1;7847:385:1;-1:-1:-1;7847:385:1:o;8237:356::-;8439:2;8421:21;;;8458:18;;;8451:30;8517:34;8512:2;8497:18;;8490:62;8584:2;8569:18;;8237:356::o;8598:355::-;8800:2;8782:21;;;8839:2;8819:18;;;8812:30;8878:33;8873:2;8858:18;;8851:61;8944:2;8929:18;;8598:355::o;9303:127::-;9364:10;9359:3;9355:20;9352:1;9345:31;9395:4;9392:1;9385:15;9419:4;9416:1;9409:15;9435:125;9475:4;9503:1;9500;9497:8;9494:34;;;9508:18;;:::i;:::-;-1:-1:-1;9545:9:1;;9435:125::o;9908:380::-;9987:1;9983:12;;;;10030;;;10051:61;;10105:4;10097:6;10093:17;10083:27;;10051:61;10158:2;10150:6;10147:14;10127:18;10124:38;10121:161;;;10204:10;10199:3;10195:20;10192:1;10185:31;10239:4;10236:1;10229:15;10267:4;10264:1;10257:15;10121:161;;9908:380;;;:::o;10642:217::-;10682:1;10708;10698:132;;10752:10;10747:3;10743:20;10740:1;10733:31;10787:4;10784:1;10777:15;10815:4;10812:1;10805:15;10698:132;-1:-1:-1;10844:9:1;;10642:217::o;10864:128::-;10904:3;10935:1;10931:6;10928:1;10925:13;10922:39;;;10941:18;;:::i;:::-;-1:-1:-1;10977:9:1;;10864:128::o;10997:336::-;11199:2;11181:21;;;11238:2;11218:18;;;11211:30;-1:-1:-1;;;11272:2:1;11257:18;;11250:42;11324:2;11309:18;;10997:336::o;12024:135::-;12063:3;-1:-1:-1;;12084:17:1;;12081:43;;;12104:18;;:::i;:::-;-1:-1:-1;12151:1:1;12140:13;;12024:135::o;13874:329::-;14076:2;14058:21;;;14115:1;14095:18;;;14088:29;-1:-1:-1;;;14148:2:1;14133:18;;14126:36;14194:2;14179:18;;13874:329::o;16307:168::-;16347:7;16413:1;16409;16405:6;16401:14;16398:1;16395:21;16390:1;16383:9;16376:17;16372:45;16369:71;;;16420:18;;:::i;:::-;-1:-1:-1;16460:9:1;;16307:168::o;17073:343::-;17275:2;17257:21;;;17314:2;17294:18;;;17287:30;-1:-1:-1;;;17348:2:1;17333:18;;17326:49;17407:2;17392:18;;17073:343::o;18456:422::-;18545:1;18588:5;18545:1;18602:270;18623:7;18613:8;18610:21;18602:270;;;18682:4;18678:1;18674:6;18670:17;18664:4;18661:27;18658:53;;;18691:18;;:::i;:::-;18741:7;18731:8;18727:22;18724:55;;;18761:16;;;;18724:55;18840:22;;;;18800:15;;;;18602:270;;;18606:3;18456:422;;;;;:::o;18883:806::-;18932:5;18962:8;18952:80;;-1:-1:-1;19003:1:1;19017:5;;18952:80;19051:4;19041:76;;-1:-1:-1;19088:1:1;19102:5;;19041:76;19133:4;19151:1;19146:59;;;;19219:1;19214:130;;;;19126:218;;19146:59;19176:1;19167:10;;19190:5;;;19214:130;19251:3;19241:8;19238:17;19235:43;;;19258:18;;:::i;:::-;-1:-1:-1;;19314:1:1;19300:16;;19329:5;;19126:218;;19428:2;19418:8;19415:16;19409:3;19403:4;19400:13;19396:36;19390:2;19380:8;19377:16;19372:2;19366:4;19363:12;19359:35;19356:77;19353:159;;;-1:-1:-1;19465:19:1;;;19497:5;;19353:159;19544:34;19569:8;19563:4;19544:34;:::i;:::-;19614:6;19610:1;19606:6;19602:19;19593:7;19590:32;19587:58;;;19625:18;;:::i;:::-;19663:20;;18883:806;-1:-1:-1;;;18883:806:1:o;19694:140::-;19752:5;19781:47;19822:4;19812:8;19808:19;19802:4;19781:47;:::i;21284:328::-;21486:2;21468:21;;;21525:1;21505:18;;;21498:29;-1:-1:-1;;;21558:2:1;21543:18;;21536:35;21603:2;21588:18;;21284:328::o

Swarm Source

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