Contract 0x5aa2ff4ab706307d8b3d90a462c1ddc055655734

Contract Overview

Balance:
5.148235704521145299 AVAX

AVAX Value:
$82.37 (@ $16.00/AVAX)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd4494c834420f099912978c9ae10c613b4e6a26798c9ee24e319f22ad373fe0eCashout All168377212022-07-03 9:17:0116 mins ago0x8e51625490558a1a49103cf9a79efcd07756adde IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.012651569706 26.8818
0x5fcb767dd8d41cd4ca3825f5b03f2b4c2c47973d9d42b53b62497aacdd113dd2Approve168376212022-07-03 9:13:4119 mins ago0x501bd10fd95b3503fad2e59a2f5f6fd09ba7e79b IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0012283015 26.5
0x47776166cf94fb5cb94469a908ea98587a7d3cc97ad85d6d46c7113b9a7c5169Migrate Old Node168376052022-07-03 9:13:0920 mins ago0x501bd10fd95b3503fad2e59a2f5f6fd09ba7e79b IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0052182475 26.5
0x1ea90a31182f3a0a0771ac781cd7dd6725c23b081b6baade20ba519e907a12efCompound All Nod...168368672022-07-03 8:48:2445 mins ago0x2dfd3f833b59335a637f6e54854c05f6a6d9c4de IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.002106114 26.5
0xaa6da421ea16426e86271565bd1088f254127a92e910ee63592b67e3491cc5e6Cashout All168331242022-07-03 6:42:522 hrs 50 mins ago0xc4495c88b2a8f90049610c9e60eedbe7b3caea91 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0102745005 26.5
0xfb2e271a68ccb97d5a3166785e4395afd9905ea6d2a145b16f970668d33c5636Compound All Nod...168326002022-07-03 6:25:183 hrs 8 mins ago0xa0242e40a3ec706bfd231c10cf14fe2631872d74 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0038728425 26.5
0xd3c25dbdd01bf3ac02f475d773ef7d473033c218f6a9312769e8d117713873adCashout All168289422022-07-03 4:23:445 hrs 9 mins ago0xa76c82ee38da7ea003757698f118feaa54b9357c IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0074205035 26.5
0x6b47141bfcd5f689d7cd7ac9bad27f00c20cd523fd34f2edc8a00c8a50cc2ff6Cashout All168283222022-07-03 4:02:495 hrs 30 mins ago0x05820ac77c2f17f08e783e9cd0214f89c520652f IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.010452978 26.5
0x1ce6f539c64bba39f283e86d13cf0727ffc8e92bebee9d0efc66a4103f99b383Cashout All168271342022-07-03 3:23:066 hrs 10 mins ago0x04de46194da787a3f947532266c9e9d38b72fcfd IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.009339713 26.5
0x011ebbd50f68e82c89354fad8109f74f7006bbc82d1a1b2e80fcdc95edaa9ad3Cashout All168230482022-07-03 1:06:108 hrs 27 mins ago0x586347bf3911a60cc61e7516c5e7c9aeb82caa42 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0107075105 26.5
0x231aa47e9cb9472b62383286e712273669eec6806471607c882ab71e4aa599f4Cashout All168208392022-07-02 23:52:309 hrs 41 mins ago0x9e74e40b42674f39a285787dbf96621ff0e7597e IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0074400075 26.5
0xa1c1a24bc970f79682db19e642fb1913bfa95388dfff847a00ff7e4ac2abf02bCashout All168175402022-07-02 22:02:0911 hrs 31 mins ago0x32f3942f0c85291dd2c0051a4671e54422e5db87 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.009339713 26.5
0xbf95c3c88d6e3ec904cf59d2d4b6cdcdd1bb19884c2b41f2547ffdc5d66beae5Cashout All168171562022-07-02 21:49:1211 hrs 44 mins ago0x10cacc3e48d8c3f3449e6e6b23d5a00ccff38ce3 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.015196743 26.5
0x667e73184b499660eed9ade6a6702e9eff77d48bf6e690167fdd96d206428899Compound All Nod...168167762022-07-02 21:36:3311 hrs 57 mins ago0xbd5c252e4635f985eeb2aca7768248ae69ca20ab IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.003457826 26.5
0xce450a39a7c3034183667ae9f97fe68c1ac1c36ce0d0567c1976854e8e01720bCashout All168138382022-07-02 19:57:5613 hrs 35 mins ago0xcda4f4333e0539104fd7ec3c0fd84160cec49845 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0111108405 26.5
0x700bdfa069a5520913c3d019d5913813d1643d82e9a9db0dcd72abf897136243Cashout All168126412022-07-02 19:17:5114 hrs 15 mins ago0xc37604797719ab21c3401485e4294f875edc7daa IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.008789626 26.5
0xd1e65ba4551566f0f51109ad223de790c38198a127819a2fb57f2f5daef49145Compound All Nod...168125582022-07-02 19:15:0214 hrs 18 mins ago0x69a5b83c4e36b58cff559d93eaf6a804696cceff IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0039149775 26.5
0x9858573954b272d776e401c7247c52f0710a23c4196cd8cf14e40d58c67b12aaCashout All168116082022-07-02 18:43:1614 hrs 50 mins ago0xb55edb55c2a9b0f9150916da91754332d3ba2249 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.007684099 26.5
0x1aa1b41b4515024dd279827226270967537367d5a62f1f8318b4adbf9ec411c6Cashout All168085292022-07-02 16:59:5816 hrs 33 mins ago0x3f818188759c9d6c7a52e2f572616351df8f761c IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.009987903 26.5
0xcf863f1bf145c40825d347a45a1a30d18132ab98ee26f9e990b1a278f950c6adCashout All168065252022-07-02 15:53:0117 hrs 40 mins ago0xe3339c43cb146bd1efb35539a328530031e95d6b IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.018105065 26.5
0x3514395f8bd822987c81e2618f0ae1b93b8329e00dcb0ba661843f30884a2f40Compound All Nod...168048442022-07-02 14:56:4218 hrs 36 mins ago0x7228d199f7577b9a926a43ff88bd95f2a338501e IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.002644647 26.5
0x240ea050e970d0954d2836ed56b3732f2e6325a889368a865203123590236b44Compound All Nod...168043412022-07-02 14:39:5518 hrs 53 mins ago0xe7e281efb6779c21754129c10288955c5e1d6ff2 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0123849075 26.5
0x1e21565a9af0629d905bdeb656ef581b6f20a3f306de652b80ab47ea8a993ec7Cashout All168038502022-07-02 14:23:2119 hrs 10 mins ago0xab459fe28f7982befe81c6492cabd84c0459cd60 IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0091386045 26.5
0xd77d6b4c8a4b6d58daf90b04c2082efca106c6d85cbcb15ef6be8b0456bbb9b6Cashout All168031762022-07-02 14:00:5219 hrs 32 mins ago0x3c1e8226e8dab4718617e1eb912de419c173d76e IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.007230949 26.5
0x93a000df616135326629f40e7d25e12d2c42f1500ec1d05e277eb9d5b96a1d00Compound All Nod...168025282022-07-02 13:39:1019 hrs 54 mins ago0x7b7b41dc9bc6724b36c0f6e91522b4724332c70a IN  0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340 AVAX0.0123849075 26.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd4494c834420f099912978c9ae10c613b4e6a26798c9ee24e319f22ad373fe0e168377212022-07-03 9:17:0116 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000001234461054757 AVAX
0xd4494c834420f099912978c9ae10c613b4e6a26798c9ee24e319f22ad373fe0e168377212022-07-03 9:17:0116 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000001234461054757 AVAX
0xaa6da421ea16426e86271565bd1088f254127a92e910ee63592b67e3491cc5e6168331242022-07-03 6:42:522 hrs 50 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002369745871514 AVAX
0xaa6da421ea16426e86271565bd1088f254127a92e910ee63592b67e3491cc5e6168331242022-07-03 6:42:522 hrs 50 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002369745871514 AVAX
0xd3c25dbdd01bf3ac02f475d773ef7d473033c218f6a9312769e8d117713873ad168289422022-07-03 4:23:445 hrs 9 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000034253315796341 AVAX
0xd3c25dbdd01bf3ac02f475d773ef7d473033c218f6a9312769e8d117713873ad168289422022-07-03 4:23:445 hrs 9 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000034253315796341 AVAX
0x6b47141bfcd5f689d7cd7ac9bad27f00c20cd523fd34f2edc8a00c8a50cc2ff6168283222022-07-03 4:02:495 hrs 30 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002400000885054 AVAX
0x6b47141bfcd5f689d7cd7ac9bad27f00c20cd523fd34f2edc8a00c8a50cc2ff6168283222022-07-03 4:02:495 hrs 30 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002400000885054 AVAX
0x1ce6f539c64bba39f283e86d13cf0727ffc8e92bebee9d0efc66a4103f99b383168271342022-07-03 3:23:066 hrs 10 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002419719143457 AVAX
0x1ce6f539c64bba39f283e86d13cf0727ffc8e92bebee9d0efc66a4103f99b383168271342022-07-03 3:23:066 hrs 10 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002419719143457 AVAX
0x011ebbd50f68e82c89354fad8109f74f7006bbc82d1a1b2e80fcdc95edaa9ad3168230482022-07-03 1:06:108 hrs 27 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.00000039405697417 AVAX
0x011ebbd50f68e82c89354fad8109f74f7006bbc82d1a1b2e80fcdc95edaa9ad3168230482022-07-03 1:06:108 hrs 27 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.00000039405697417 AVAX
0x231aa47e9cb9472b62383286e712273669eec6806471607c882ab71e4aa599f4168208392022-07-02 23:52:309 hrs 41 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002155828343754 AVAX
0x231aa47e9cb9472b62383286e712273669eec6806471607c882ab71e4aa599f4168208392022-07-02 23:52:309 hrs 41 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002155828343754 AVAX
0xa1c1a24bc970f79682db19e642fb1913bfa95388dfff847a00ff7e4ac2abf02b168175402022-07-02 22:02:0911 hrs 31 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002909121897029 AVAX
0xa1c1a24bc970f79682db19e642fb1913bfa95388dfff847a00ff7e4ac2abf02b168175402022-07-02 22:02:0911 hrs 31 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002909121897029 AVAX
0xbf95c3c88d6e3ec904cf59d2d4b6cdcdd1bb19884c2b41f2547ffdc5d66beae5168171562022-07-02 21:49:1211 hrs 44 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000001140785018643 AVAX
0xbf95c3c88d6e3ec904cf59d2d4b6cdcdd1bb19884c2b41f2547ffdc5d66beae5168171562022-07-02 21:49:1211 hrs 44 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000001140785018643 AVAX
0xce450a39a7c3034183667ae9f97fe68c1ac1c36ce0d0567c1976854e8e01720b168138382022-07-02 19:57:5613 hrs 35 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000002165128460769 AVAX
0xce450a39a7c3034183667ae9f97fe68c1ac1c36ce0d0567c1976854e8e01720b168138382022-07-02 19:57:5613 hrs 35 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000002165128460769 AVAX
0x700bdfa069a5520913c3d019d5913813d1643d82e9a9db0dcd72abf897136243168126412022-07-02 19:17:5114 hrs 15 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000000162013073082 AVAX
0x700bdfa069a5520913c3d019d5913813d1643d82e9a9db0dcd72abf897136243168126412022-07-02 19:17:5114 hrs 15 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000000162013073082 AVAX
0x9858573954b272d776e401c7247c52f0710a23c4196cd8cf14e40d58c67b12aa168116082022-07-02 18:43:1614 hrs 50 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000001323858508294 AVAX
0x9858573954b272d776e401c7247c52f0710a23c4196cd8cf14e40d58c67b12aa168116082022-07-02 18:43:1614 hrs 50 mins ago Trader Joe: Router 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340.000001323858508294 AVAX
0x1aa1b41b4515024dd279827226270967537367d5a62f1f8318b4adbf9ec411c6168085292022-07-02 16:59:5816 hrs 33 mins ago 0x5aa2ff4ab706307d8b3d90a462c1ddc0556557340x6912b4ee8370306c719f2f78129114b75581dcf80.000005923996605304 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NebulaNodesV2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-03-22
*/

// SPDX-License-Identifier: MIT
// File: interfaces/IPangolinFactory.sol

pragma solidity >=0.5.0;

interface IPangolinFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
// File: interfaces/IPangolinRouter.sol

pragma solidity >=0.6.2;

interface IPangolinRouter {
    function factory() external pure returns (address);
    function WAVAX() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountAVAX);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountAVAX);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);

    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountAVAX);
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountAVAX);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: interfaces/INodeManager.sol


pragma solidity ^0.8.0;

interface INodeManager {
    function getMinPrice() external view returns (uint256);
    function createNode(address account, string memory nodeName, uint256 amount) external;
    function createNodeOld(address account, string memory nodeName, uint256 amount_) external;
    function getNodeReward(address account, uint256 _creationTime) external view returns (uint256);
    function getAllNodesRewards(address account) external view returns (uint256);
    function cashoutNodeReward(address account, uint256 _creationTime) external;
    function cashoutAllNodesRewards(address account) external;
    function compoundNodeReward(address account, uint256 creationTime, uint256 rewardAmount) external;
    function transferOwnership(address newOwner) external;
    
}
// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/finance/PaymentSplitter.sol


// OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol)

pragma solidity ^0.8.0;




/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    mapping(IERC20 => uint256) private _erc20TotalReleased;
    mapping(IERC20 => mapping(address => uint256)) private _erc20Released;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20
     * contract.
     */
    function totalReleased(IERC20 token) public view returns (uint256) {
        return _erc20TotalReleased[token];
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an
     * IERC20 contract.
     */
    function released(IERC20 token, address account) public view returns (uint256) {
        return _erc20Released[token][account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + totalReleased();
        uint256 payment = _pendingPayment(account, totalReceived, released(account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] += payment;
        _totalReleased += payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their
     * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20
     * contract.
     */
    function release(IERC20 token, address account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token);
        uint256 payment = _pendingPayment(account, totalReceived, released(token, account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _erc20Released[token][account] += payment;
        _erc20TotalReleased[token] += payment;

        SafeERC20.safeTransfer(token, account, payment);
        emit ERC20PaymentReleased(token, account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


pragma solidity ^0.8.0;

interface INodeManagerOLD {


    function getMinPrice() external view returns (uint256);
    function createNode(address account, string memory nodeName, uint256 amount) external;
    function getNodeReward(address account, uint256 _creationTime) external view returns (uint256);
    function getAllNodesRewards(address account) external view returns (uint256);
    function cashoutNodeReward(address account, uint256 _creationTime) external;
    function cashoutAllNodesRewards(address account) external;
    function compoundNodeReward(address account, uint256 creationTime, uint256 rewardAmount) external;
    function transferOwnership(address newOwner) external;
    function getNodeNumberOf(address account) external view returns (uint256);
}
// File: nebulanode.sol


/*
 *
 *    Web:      https://nebulanodes.finance/
 *    Discord:  https://discord.gg/gXAPZp24fM
 *    Twitter:  https://twitter.com/NebulaNodes
 *
 */








pragma solidity ^0.8.4;

contract NebulaNodesV2 is ERC20, Ownable, PaymentSplitter {
    using SafeMath for uint256;


    address public joePair;
    address public joeRouterAddress = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; // TraderJoe Router 0x60aE616a2155Ee3d9A68541Ba4544862310933d4
    address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;
    IERC20 public OLD_CONTRACT = IERC20(0x1aEa17a08EdE10D158baac969f809E6747cb2B22);

    address public teamPool;
    address public rewardsPool;

    uint256 public rewardsFee;
    uint256 public liquidityPoolFee;
    uint256 public teamPoolFee;
    uint256 public cashoutFee;
    uint256 public totalFees;

    uint256 public swapTokensAmount;
    uint256 public totalClaimed = 0;
    bool public isTradingEnabled = true;
    bool public swapLiquifyEnabled = true;
    bool public antiBot = true;
    uint public blocktopass = 3;
    uint public currentBlock;

    uint16 public buyTax = 0;
    uint16 public sellTax = 0;

    INodeManagerOLD private OLD_MANAGER = INodeManagerOLD(0xd311d77c8F4665bdA9e684Cd08f8991f364AbEF5);
    IPangolinRouter private joeRouter;
    INodeManager private nodeManager;
    uint256 private rwSwap;
    bool private swapping = false;


    mapping(address => bool) public hasMigrate;
    mapping(address => bool) public isBlacklisted;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint) public userLastBlockBuyTransactions;
    
    event UpdateJoeRouter(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event Cashout(
        address indexed account,
        uint256 amount,
        uint256 indexed blockTime
    );

    event Compound(
        address indexed account,
        uint256 amount,
        uint256 indexed blockTime
    );

    event MaxTransferAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate);
    event maxBalanceAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate);


    constructor(
        address[] memory payees,
        uint256[] memory shares,
        address[] memory addresses,
        uint256[] memory fees,
        uint256 swapAmount
    )
        ERC20("NebulaNodes", "NeBu")
        PaymentSplitter(payees, shares)
    {
        require(
            addresses[0] != address(0) && addresses[1] != address(0) && addresses[2] != address(0),
            "CONSTR:1"
        );
        teamPool = addresses[0];
        rewardsPool = addresses[1];
        nodeManager = INodeManager(addresses[2]);

        require(joeRouterAddress != address(0), "CONSTR:2");
        IPangolinRouter _joeRouter = IPangolinRouter(joeRouterAddress);

        address _joePair = IPangolinFactory(_joeRouter.factory())
        .createPair(address(this), _joeRouter.WAVAX());

        joeRouter = _joeRouter;
        joePair = _joePair;

        _setAutomatedMarketMakerPair(_joePair, true);

        require(
            fees[0] != 0 && fees[1] != 0 && fees[2] != 0 && fees[3] != 0,
            "CONSTR:3"
        );
        teamPoolFee = fees[0];
        rewardsFee = fees[1];
        liquidityPoolFee = fees[2];
        cashoutFee = fees[3];
        rwSwap = fees[4];

        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);

        require(swapAmount > 0, "CONSTR:7");
        swapTokensAmount = swapAmount * (10**18);
    }


    //OLD CONTRACT

    function migrateOldNode() external {
        address sender = _msgSender();
        require(
            !hasMigrate[sender],
            "Node has been already migrate"
        );
        uint256 nodeNb = OLD_MANAGER.getNodeNumberOf(sender);

        
        for (uint256 i = 0; i <= nodeNb; i++) {
                nodeManager.createNodeOld(sender, "Oldnode", 10100000000000000000);
        }

        uint256 amount = OLD_CONTRACT.balanceOf(sender);

        mintRewards(sender, amount);

        setHasMigrate(sender, true);

    }



    function migrate(address[] memory addresses_, uint256[] memory balances_) external onlyOwner {
        for (uint256 i = 0; i < addresses_.length; i++) {
            _mint(addresses_[i], balances_[i]);
        }
    }

    function burn(address account, uint256 amount) external onlyOwner {
        _burn(account, amount);
    }

    function updateJoeRouterAddress(address newAddress) external onlyOwner {
        require(
            newAddress != address(joeRouter),
            "TKN:1"
        );
        emit UpdateJoeRouter(newAddress, address(joeRouter));
        IPangolinRouter	 _joeRouter = IPangolinRouter(newAddress);
        address _joePair = IPangolinFactory(joeRouter.factory()).createPair(
            address(this),
            _joeRouter.WAVAX()
        );
        joePair = _joePair;
        joeRouterAddress = newAddress;
    }

    function updateSwapTokensAmount(uint256 newVal) external onlyOwner {
        swapTokensAmount = newVal;
    }

    function updateTeamPool(address payable newVal) external onlyOwner {
        teamPool = newVal;
    }

    function updateRewardsPool(address payable newVal) external onlyOwner {
        rewardsPool = newVal;
    }

    function updateRewardsFee(uint256 newVal) external onlyOwner {
        rewardsFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateLiquidityFee(uint256 newVal) external onlyOwner {
        liquidityPoolFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateTeamFee(uint256 newVal) external onlyOwner {
        teamPoolFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateCashoutFee(uint256 newVal) external onlyOwner {
        cashoutFee = newVal;
    }

    function updateRwSwapFee(uint256 newVal) external onlyOwner {
        rwSwap = newVal;
    }

    function updateSwapLiquify(bool newVal) external onlyOwner {
        swapLiquifyEnabled = newVal;
    }

    function updateIsTradingEnabled(bool newVal) external onlyOwner {
        isTradingEnabled = newVal;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != joePair,
            "TKN:2"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function setAntiBot(bool value) external onlyOwner {
        antiBot = value;
    }


    function setBlockToPass(uint value) external onlyOwner {
        blocktopass = value;
    }

    function setBuyTax (uint16 value) external onlyOwner {
        require(value <= 5000);
        buyTax = value;
    }

    function setSellTax (uint16 value) external onlyOwner {
        require(value <= 5000);
        sellTax = value;
    }

    function blacklistAddress(address account, bool value)
        public
        onlyOwner
    {
        isBlacklisted[account] = value;
    }

    function getBlock(address sender) public {
        userLastBlockBuyTransactions[sender] = block.number;
    }

    function getCurrentBlock() public {
        currentBlock = block.number;
    }

    // Private methods

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "TKN:3"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        address sender = _msgSender();
        if (antiBot == true) {
            if (from == joePair) {
                getBlock(sender);
            }            
            if (to == joePair) {
                uint lastBlock = userLastBlockBuyTransactions[sender];
                getCurrentBlock();
                if (currentBlock <= lastBlock + blocktopass) {
                    blacklistAddress(sender, true);
                }
            }
        }
        require(
            !isBlacklisted[from] && !isBlacklisted[to],
            "BLACKLISTED"
        );
        require(from != address(0), "ERC20:1");
        require(to != address(0), "ERC20:2");
        if (from != owner() && to != joePair && to != address(joeRouter) && to != address(this) && from != address(this)) {
            require(isTradingEnabled, "TRADING_DISABLED");
        }

        if (from == joePair && buyTax != 0) {
            uint256 taxAmount = amount * buyTax/10000;
            uint256 sendAmount = amount - taxAmount;
            require (amount == taxAmount + sendAmount, "invalid Tax");
            super._transfer(from, address(this), taxAmount);
            super._transfer(from, to, sendAmount);
        } else if (to == joePair && sellTax != 0) {
            uint256 taxAmount = amount * sellTax/10000;
            uint256 sendAmount = amount - taxAmount;
            require (amount == taxAmount + sendAmount, "invalid Tax");
            super._transfer(from, address(this), taxAmount);
            super._transfer(from, to, sendAmount);
        } else {
            super._transfer(from, to, amount);
        }

    }

    function mintRewards(address receiver, uint256 _amount) private {
        _mint(receiver, _amount);
    }

    function swapAndSendToFee(address destination, uint256 tokens) private {
        uint256 initialAVAXBalance = address(this).balance;

        swapTokensForAVAX(tokens);
        uint256 newBalance = (address(this).balance).sub(initialAVAXBalance);
        payable(destination).transfer(newBalance);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForAVAX(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForAVAX(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = joeRouter.WAVAX();

        _approve(address(this), address(joeRouter), tokenAmount);

        joeRouter.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of AVAX
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(joeRouter), tokenAmount);

        // add the liquidity
        joeRouter.addLiquidityAVAX{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0),
            block.timestamp
        );
    }

    // External node methods

    function createNodeWithTokens(string memory name, uint256 amount_) external {
        address sender = _msgSender();
        require(
            bytes(name).length > 3 && bytes(name).length < 32,
            "NC:1"
        );
        require(
            sender != address(0),
            "NC:2"
        );
        require(!isBlacklisted[sender], "BLACKLISTED");
        require(
            sender != teamPool && sender != rewardsPool,
            "NC:4"
        );
        require(
            balanceOf(sender) >= amount_,
            "NC:5"
        );

        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;
        if (
            swapAmountOk &&
            swapLiquifyEnabled &&
            !swapping &&
            sender != owner() &&
            !automatedMarketMakerPairs[sender]
        ) {
            swapping = true;
            
            uint256 teamTokens = contractTokenBalance
                .mul(teamPoolFee)
                .div(10000);

            swapAndSendToFee(teamPool, teamTokens);

            uint256 rewardsPoolTokens = contractTokenBalance
                .mul(rewardsFee)
                .div(10000);

            uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div(
                10000
            );

            swapAndSendToFee(rewardsPool, rewardsTokenstoSwap);

            super._transfer(
                address(this),
                rewardsPool,
                rewardsPoolTokens.sub(rewardsTokenstoSwap)
            );

            uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
                10000
            );

            swapAndLiquify(swapTokens);
            swapTokensForAVAX(balanceOf(address(this)));

            swapping = false;
        }
        super._transfer(sender, address(this), amount_);
        nodeManager.createNode(sender, name, amount_);
    }

    function cashoutReward(uint256 blocktime) external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "CASHOUT:1"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "CASHOUT:3"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "CASHOUT:4"
        );

        if (swapLiquifyEnabled) {
            uint256 feeAmount;
            if (cashoutFee > 0) {
                feeAmount = rewardAmount.mul(cashoutFee).div(10000);
                swapAndSendToFee(rewardsPool, feeAmount);
            }
            rewardAmount -= feeAmount;
        }
        mintRewards(sender, rewardAmount);
        nodeManager.cashoutNodeReward(sender, blocktime);
        totalClaimed += rewardAmount;

        emit Cashout(sender, rewardAmount, blocktime);
    }

    function cashoutAll() external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "CASHOUT:5"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "CASHOUT:7"
        );
        uint256 rewardAmount = nodeManager.getAllNodesRewards(sender);
        require(
            rewardAmount > 0,
            "CASHOUT:8"
        );
        if (swapLiquifyEnabled) {
            uint256 feeAmount;
            if (cashoutFee > 0) {
                feeAmount = rewardAmount.mul(cashoutFee).div(10000);
                swapAndSendToFee(rewardsPool, feeAmount);
            }
            rewardAmount -= feeAmount;
        }
        mintRewards(sender, rewardAmount);
        nodeManager.cashoutAllNodesRewards(sender);
        totalClaimed += rewardAmount;

        emit Cashout(sender, rewardAmount, 0);
    }

    function compoundNodeRewards(uint256 blocktime) external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "COMP:1"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "COMP:2"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "COMP:3"
        );

        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;
        if (
            swapAmountOk &&
            swapLiquifyEnabled &&
            !swapping &&
            sender != owner() &&
            !automatedMarketMakerPairs[sender]
        ) {
            swapping = true;

            uint256 teamTokens = contractTokenBalance
                .mul(teamPoolFee)
                .div(10000);

            swapAndSendToFee(teamPool, teamTokens);

            uint256 rewardsPoolTokens = contractTokenBalance
                .mul(rewardsFee)
                .div(10000);

            uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div(
                10000
            );

            swapAndSendToFee(rewardsPool, rewardsTokenstoSwap);

            super._transfer(
                address(this),
                rewardsPool,
                rewardsPoolTokens.sub(rewardsTokenstoSwap)
            );

            uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
                10000
            );

            swapAndLiquify(swapTokens);
            swapTokensForAVAX(balanceOf(address(this)));

            swapping = false;
        }
        mintRewards(address(this), rewardAmount);
        nodeManager.compoundNodeReward(sender, blocktime, rewardAmount);

        emit Compound(sender, rewardAmount, blocktime);
    }

    function compoundAllNodes(uint256 creationTime) external {
        address sender = _msgSender();
        require(
                sender != address(0),
                "COMP:1"
            );
            uint256 rewardAmount = nodeManager.getAllNodesRewards(sender);
            require(
                rewardAmount > 0,
                "COMP:3"
            );
        mintRewards(address(this), rewardAmount);
        nodeManager.compoundNodeReward(sender, creationTime, rewardAmount);
        nodeManager.cashoutAllNodesRewards(sender);

    }

    function setHasMigrate(address _account, bool _migrate) private {
        hasMigrate[_account] = _migrate;
    }

}

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Cashout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"MaxTransferAmountRateUpdated","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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateJoeRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"maxBalanceAmountRateUpdated","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLD_CONTRACT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"antiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocktopass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"creationTime","type":"uint256"}],"name":"compoundAllNodes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"compoundNodeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBlock","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":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasMigrate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joeRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"balances_","type":"uint256[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateOldNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBlockToPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateIsTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateJoeRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateTeamPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastBlockBuyTransactions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e80547360ae616a2155ee3d9a68541ba4544862310933d46001600160a01b031991821617909155600f8054731aea17a08ede10d158baac969f809e6747cb2b22921691909117905560006018556019805462ffffff1916620101011790556003601a55601c80546001600160c01b03191677d311d77c8f4665bda9e684cd08f8991f364abef5000000001790556020805460ff19169055348015620000aa57600080fd5b50604051620054c0380380620054c0833981016040819052620000cd9162000dfe565b604080518082018252600b81526a4e6562756c614e6f64657360a81b6020808301918252835180850190945260048452634e65427560e01b90840152815188938893929091620001209160039162000c3a565b5080516200013690600490602084019062000c3a565b505050620001536200014d6200093460201b60201c565b62000938565b8051825114620001c55760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620002185760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f207061796565730000000000006044820152606401620001bc565b60005b82518110156200029c57620002878382815181106200024a57634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200027357634e487b7160e01b600052603260045260246000fd5b60200260200101516200098a60201b60201c565b80620002938162000f8f565b9150506200021b565b50505060006001600160a01b031683600081518110620002cc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415801562000328575060006001600160a01b0316836001815181106200031457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b801562000371575060006001600160a01b0316836002815181106200035d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b620003aa5760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3160c01b6044820152606401620001bc565b82600081518110620003cc57634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001815181106200041c57634e487b7160e01b600052603260045260246000fd5b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826002815181106200046c57634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601e80546001600160a01b0319166001600160a01b03928316179055600e5416620004d05760405162461bcd60e51b815260206004820152600860248201526721a7a729aa291d1960c11b6044820152606401620001bc565b600e546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a015591600480820192602092909190829003018186803b1580156200051b57600080fd5b505afa15801562000530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000556919062000de1565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156200059f57600080fd5b505afa158015620005b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005da919062000de1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200062357600080fd5b505af115801562000638573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065e919062000de1565b601d80546001600160a01b038086166001600160a01b031992831617909255600d80549284169290911691909117905590506200069d81600162000b78565b83600081518110620006bf57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415801562000702575083600181518110620006f557634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007395750836002815181106200072c57634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007705750836003815181106200076357634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b620007a95760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3360c01b6044820152606401620001bc565b83600081518110620007cb57634e487b7160e01b600052603260045260246000fd5b602002602001015160148190555083600181518110620007fb57634e487b7160e01b600052603260045260246000fd5b6020026020010151601281905550836002815181106200082b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601381905550836003815181106200085b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601581905550836004815181106200088b57634e487b7160e01b600052603260045260246000fd5b6020026020010151601f81905550620008d2601454620008be60135460125462000c2560201b62002d391790919060201c565b62000c2560201b62002d391790919060201c565b601655826200090f5760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3760c01b6044820152606401620001bc565b6200092383670de0b6b3a764000062000f30565b6017555062000fd995505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620009f75760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b6064820152608401620001bc565b6000811162000a495760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a207368617265732061726520300000006044820152606401620001bc565b6001600160a01b0382166000908152600860205260409020541562000ac55760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b6064820152608401620001bc565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416908117909155600090815260086020526040902081905560065462000b2f90829062000f15565b600655604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b6001600160a01b03821660009081526023602052604090205460ff161515811515141562000bd15760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b6044820152606401620001bc565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600062000c33828462000f15565b9392505050565b82805462000c489062000f52565b90600052602060002090601f01602090048101928262000c6c576000855562000cb7565b82601f1062000c8757805160ff191683800117855562000cb7565b8280016001018555821562000cb7579182015b8281111562000cb757825182559160200191906001019062000c9a565b5062000cc592915062000cc9565b5090565b5b8082111562000cc5576000815560010162000cca565b80516001600160a01b038116811462000cf857600080fd5b919050565b600082601f83011262000d0e578081fd5b8151602062000d2762000d218362000eef565b62000ebc565b80838252828201915082860187848660051b890101111562000d47578586fd5b855b8581101562000d705762000d5d8262000ce0565b8452928401929084019060010162000d49565b5090979650505050505050565b600082601f83011262000d8e578081fd5b8151602062000da162000d218362000eef565b80838252828201915082860187848660051b890101111562000dc1578586fd5b855b8581101562000d705781518452928401929084019060010162000dc3565b60006020828403121562000df3578081fd5b62000c338262000ce0565b600080600080600060a0868803121562000e16578081fd5b85516001600160401b038082111562000e2d578283fd5b62000e3b89838a0162000cfd565b9650602088015191508082111562000e51578283fd5b62000e5f89838a0162000d7d565b9550604088015191508082111562000e75578283fd5b62000e8389838a0162000cfd565b9450606088015191508082111562000e99578283fd5b5062000ea88882890162000d7d565b925050608086015190509295509295909350565b604051601f8201601f191681016001600160401b038111828210171562000ee75762000ee762000fc3565b604052919050565b60006001600160401b0382111562000f0b5762000f0b62000fc3565b5060051b60200190565b6000821982111562000f2b5762000f2b62000fad565b500190565b600081600019048311821515161562000f4d5762000f4d62000fad565b500290565b600181811c9082168062000f6757607f821691505b6020821081141562000f8957634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000fa65762000fa662000fad565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6144d78062000fe96000396000f3fe6080604052600436106104355760003560e01c80636eacab1211610229578063b62496f51161012e578063de01e151116100b6578063f4e27dc81161007a578063f4e27dc814610d8c578063fabc403514610dac578063fb3ac5a714610dcb578063fccc281314610dfb578063fe575a8714610e1157600080fd5b8063de01e15114610d01578063e12ed13c14610d21578063e159b3ae14610d37578063e33b7de314610d57578063f2fde38b14610d6c57600080fd5b8063cc1776d3116100fd578063cc1776d314610c18578063ce7c2ac214610c39578063d54ad2a114610c6f578063d79779b214610c85578063dd62ed3e14610cbb57600080fd5b8063b62496f514610b88578063bbc6799814610bb8578063c2c7c03a14610bd8578063c3b045e414610bf857600080fd5b80639852595c116101b1578063a457c2d711610180578063a457c2d714610afd578063a74b343c14610b1d578063a9059cbb14610b32578063acedf07c14610b52578063b326a0f914610b7257600080fd5b80639852595c14610a675780639a7a23d614610a9d5780639c138b7b14610abd5780639dc29fac14610add57600080fd5b80638b83209b116101f85780638b83209b146109d45780638bc9c7b0146109f45780638da5cb5b14610a145780638e67566314610a3257806395d89b4114610a5257600080fd5b80636eacab121461094957806370a0823114610969578063715018a61461099f5780637dfcbe34146109b457600080fd5b8063455a43961161033a57806362677fee116102c25780636770474b116102865780636770474b146108b35780636815a91c146108d357806368f2c919146108f35780636bca89cb146109135780636d9ae0be1461093357600080fd5b806362677fee14610810578063629c70741461084757806365bfe4301461085d5780636653a3401461087d578063672d5d3b1461089d57600080fd5b80635455797311610309578063545579731461078f57806354f12f1f146107a45780635c69cb5d146107ba5780635cc15b65146107da5780635f1c3182146107fa57600080fd5b8063455a43961461070157806348b75044146107215780634f7041a514610741578063527509f31461076f57600080fd5b806323b872dd116103bd57806332dbbdad1161038c57806332dbbdad14610639578063395093511461066657806339636504146106865780633a98ef39146106a6578063406072a9146106bb57600080fd5b806323b872dd146105c75780632ae883fd146105e75780632bb14e1d14610607578063313ce5671461061d57600080fd5b8063095ea7b311610404578063095ea7b31461052e578063120ccbf91461054e57806313114a9d1461056e57806318160ddd1461059257806319165587146105a757600080fd5b80630359fea914610483578063064a59d0146104c057806306fdde03146104ea578063084a6bff1461050c57600080fd5b3661047e577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561048f57600080fd5b506011546104a3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cc57600080fd5b506019546104da9060ff1681565b60405190151581526020016104b7565b3480156104f657600080fd5b506104ff610e41565b6040516104b7919061419f565b34801561051857600080fd5b5061052c6105273660046140c6565b610ed3565b005b34801561053a57600080fd5b506104da610549366004613ed8565b610f2d565b34801561055a57600080fd5b5061052c6105693660046140c6565b610f43565b34801561057a57600080fd5b5061058460165481565b6040519081526020016104b7565b34801561059e57600080fd5b50600254610584565b3480156105b357600080fd5b5061052c6105c2366004613dfb565b61110e565b3480156105d357600080fd5b506104da6105e2366004613e6b565b61123c565b3480156105f357600080fd5b5061052c610602366004613fc6565b6112e8565b34801561061357600080fd5b5061058460125481565b34801561062957600080fd5b50604051601281526020016104b7565b34801561064557600080fd5b50610584610654366004613dfb565b60246020526000908152604090205481565b34801561067257600080fd5b506104da610681366004613ed8565b611325565b34801561069257600080fd5b506010546104a3906001600160a01b031681565b3480156106b257600080fd5b50600654610584565b3480156106c757600080fd5b506105846106d6366004613ffe565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b34801561070d57600080fd5b5061052c61071c366004613eab565b611361565b34801561072d57600080fd5b5061052c61073c366004613ffe565b6113b6565b34801561074d57600080fd5b50601c5461075c9061ffff1681565b60405161ffff90911681526020016104b7565b34801561077b57600080fd5b50600e546104a3906001600160a01b031681565b34801561079b57600080fd5b5061052c61159e565b3480156107b057600080fd5b5061058460135481565b3480156107c657600080fd5b5061052c6107d53660046140c6565b611859565b3480156107e657600080fd5b5061052c6107f53660046140c6565b611c2f565b34801561080657600080fd5b5061058460175481565b34801561081c57600080fd5b5061052c61082b366004613dfb565b6001600160a01b03166000908152602460205260409020439055565b34801561085357600080fd5b50610584601a5481565b34801561086957600080fd5b5061052c6108783660046140c6565b611c5e565b34801561088957600080fd5b5061052c610898366004613dfb565b611f22565b3480156108a957600080fd5b5061052c43601b55565b3480156108bf57600080fd5b5061052c6108ce3660046140c6565b611f6e565b3480156108df57600080fd5b5061052c6108ee3660046140c6565b611f9d565b3480156108ff57600080fd5b50600f546104a3906001600160a01b031681565b34801561091f57600080fd5b50600d546104a3906001600160a01b031681565b34801561093f57600080fd5b5061058460155481565b34801561095557600080fd5b5061052c610964366004613dfb565b611fcc565b34801561097557600080fd5b50610584610984366004613dfb565b6001600160a01b031660009081526020819052604090205490565b3480156109ab57600080fd5b5061052c612018565b3480156109c057600080fd5b506019546104da9062010000900460ff1681565b3480156109e057600080fd5b506104a36109ef3660046140c6565b61204e565b348015610a0057600080fd5b5061052c610a0f3660046140c6565b61208c565b348015610a2057600080fd5b506005546001600160a01b03166104a3565b348015610a3e57600080fd5b5061052c610a4d3660046140c6565b6120bb565b348015610a5e57600080fd5b506104ff6120ff565b348015610a7357600080fd5b50610584610a82366004613dfb565b6001600160a01b031660009081526009602052604090205490565b348015610aa957600080fd5b5061052c610ab8366004613eab565b61210e565b348015610ac957600080fd5b5061052c610ad83660046140a4565b61218c565b348015610ae957600080fd5b5061052c610af8366004613ed8565b6121e9565b348015610b0957600080fd5b506104da610b18366004613ed8565b61221d565b348015610b2957600080fd5b5061052c6122b6565b348015610b3e57600080fd5b506104da610b4d366004613ed8565b6124fe565b348015610b5e57600080fd5b5061052c610b6d3660046140c6565b61250b565b348015610b7e57600080fd5b5061058460145481565b348015610b9457600080fd5b506104da610ba3366004613dfb565b60236020526000908152604090205460ff1681565b348015610bc457600080fd5b5061052c610bd3366004614010565b61254f565b348015610be457600080fd5b5061052c610bf3366004613fc6565b6128be565b348015610c0457600080fd5b5061052c610c133660046140a4565b612904565b348015610c2457600080fd5b50601c5461075c9062010000900461ffff1681565b348015610c4557600080fd5b50610584610c54366004613dfb565b6001600160a01b031660009081526008602052604090205490565b348015610c7b57600080fd5b5061058460185481565b348015610c9157600080fd5b50610584610ca0366004613dfb565b6001600160a01b03166000908152600b602052604090205490565b348015610cc757600080fd5b50610584610cd6366004613e33565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0d57600080fd5b5061052c610d1c366004613f03565b612959565b348015610d2d57600080fd5b50610584601b5481565b348015610d4357600080fd5b5061052c610d52366004613dfb565b6129f9565b348015610d6357600080fd5b50600754610584565b348015610d7857600080fd5b5061052c610d87366004613dfb565b612c5a565b348015610d9857600080fd5b5061052c610da7366004613fc6565b612cf5565b348015610db857600080fd5b506019546104da90610100900460ff1681565b348015610dd757600080fd5b506104da610de6366004613dfb565b60216020526000908152604090205460ff1681565b348015610e0757600080fd5b506104a361dead81565b348015610e1d57600080fd5b506104da610e2c366004613dfb565b60226020526000908152604090205460ff1681565b606060038054610e50906143fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c906143fc565b8015610ec95780601f10610e9e57610100808354040283529160200191610ec9565b820191906000526020600020905b815481529060010190602001808311610eac57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610f065760405162461bcd60e51b8152600401610efd90614243565b60405180910390fd5b6012819055601454601354610f279190610f21908490612d39565b90612d39565b60165550565b6000610f3a338484612d45565b50600192915050565b3380610f7a5760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3160d01b6044820152606401610efd565b601e5460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de8879060240160206040518083038186803b158015610fc057600080fd5b505afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff891906140de565b9050600081116110335760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3360d01b6044820152606401610efd565b61103d3082612e61565b601e5460405163cbd1499360e01b81526001600160a01b03848116600483015260248201869052604482018490529091169063cbd1499390606401600060405180830381600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b5050601e5460405163d3b0dba960e01b81526001600160a01b038681166004830152909116925063d3b0dba99150602401600060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381166000908152600860205260409020546111435760405162461bcd60e51b8152600401610efd906141b2565b600061114e60075490565b6111589047614362565b905060006111858383611180866001600160a01b031660009081526009602052604090205490565b612e6b565b9050806111a45760405162461bcd60e51b8152600401610efd906141f8565b6001600160a01b038316600090815260096020526040812080548392906111cc908490614362565b9250508190555080600760008282546111e59190614362565b909155506111f590508382612eb1565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b6000611249848484612fca565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112ce5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610efd565b6112db8533858403612d45565b60019150505b9392505050565b6005546001600160a01b031633146113125760405162461bcd60e51b8152600401610efd90614243565b6019805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061135c908690614362565b612d45565b6005546001600160a01b0316331461138b5760405162461bcd60e51b8152600401610efd90614243565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600860205260409020546113eb5760405162461bcd60e51b8152600401610efd906141b2565b6001600160a01b0382166000908152600b60205260408120546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b91906140de565b6114859190614362565b905060006114be838361118087876001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b9050806114dd5760405162461bcd60e51b8152600401610efd906141f8565b6001600160a01b038085166000908152600c6020908152604080832093871683529290529081208054839290611514908490614362565b90915550506001600160a01b0384166000908152600b602052604081208054839290611541908490614362565b909155506115529050848483613326565b604080516001600160a01b038581168252602082018490528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a250505050565b33806115d85760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3560b81b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff16156116115760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b0382811691161480159061163d57506011546001600160a01b03828116911614155b6116755760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3760b81b6044820152606401610efd565b601e5460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de8879060240160206040518083038186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f391906140de565b9050600081116117315760405162461bcd60e51b815260206004820152600960248201526808682a6909eaaa874760bb1b6044820152606401610efd565b601954610100900460ff161561179457601554600090156117865761176d6127106117676015548561337890919063ffffffff16565b90613384565b601154909150611786906001600160a01b031682613390565b61179081836143b9565b9150505b61179e8282612e61565b601e5460405163d3b0dba960e01b81526001600160a01b0384811660048301529091169063d3b0dba990602401600060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b50505050806018600082825461180f9190614362565b90915550506040518181526000906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d09060200160405180910390a35050565b33806118905760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3160d01b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff16156118c95760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b038281169116148015906118f557506011546001600160a01b03828116911614155b61192a5760405162461bcd60e51b815260206004820152600660248201526521a7a6a81d1960d11b6044820152606401610efd565b601e5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af91906140de565b9050600081116119ea5760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3360d01b6044820152606401610efd565b3060009081526020819052604090205460175481108015908190611a155750601954610100900460ff165b8015611a24575060205460ff16155b8015611a3e57506005546001600160a01b03858116911614155b8015611a6357506001600160a01b03841660009081526023602052604090205460ff16155b15611b6d576020805460ff19166001179055601454600090611a8e9061271090611767908690613378565b601054909150611aa7906001600160a01b031682613390565b6000611ac46127106117676012548761337890919063ffffffff16565b90506000611ae3612710611767601f548561337890919063ffffffff16565b601154909150611afc906001600160a01b031682613390565b601154611b1d9030906001600160a01b0316611b1885856133e6565b6133f2565b6000611b3a6127106117676013548961337890919063ffffffff16565b9050611b45816135c0565b30600090815260208190526040902054611b5e90613647565b50506020805460ff1916905550505b611b773084612e61565b601e5460405163cbd1499360e01b81526001600160a01b03868116600483015260248201889052604482018690529091169063cbd1499390606401600060405180830381600087803b158015611bcc57600080fd5b505af1158015611be0573d6000803e3d6000fd5b5050505084846001600160a01b03167f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d18687385604051611c2091815260200190565b60405180910390a35050505050565b6005546001600160a01b03163314611c595760405162461bcd60e51b8152600401610efd90614243565b601a55565b3380611c985760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3160b81b6044820152606401610efd565b6001600160a01b03811660009081526022602052604090205460ff1615611cd15760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b03828116911614801590611cfd57506011546001600160a01b03828116911614155b611d355760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3360b81b6044820152606401610efd565b601e5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba91906140de565b905060008111611df85760405162461bcd60e51b815260206004820152600960248201526810d054d213d5550e8d60ba1b6044820152606401610efd565b601954610100900460ff1615611e555760155460009015611e4757611e2e6127106117676015548561337890919063ffffffff16565b601154909150611e47906001600160a01b031682613390565b611e5181836143b9565b9150505b611e5f8282612e61565b601e54604051633bcf707b60e01b81526001600160a01b0384811660048301526024820186905290911690633bcf707b90604401600060405180830381600087803b158015611ead57600080fd5b505af1158015611ec1573d6000803e3d6000fd5b505050508060186000828254611ed79190614362565b909155505060405181815283906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d0906020015b60405180910390a3505050565b6005546001600160a01b03163314611f4c5760405162461bcd60e51b8152600401610efd90614243565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f985760405162461bcd60e51b8152600401610efd90614243565b601755565b6005546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610efd90614243565b601555565b6005546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610efd90614243565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610efd90614243565b61204c60006137cc565b565b6000600a828154811061207157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146120b65760405162461bcd60e51b8152600401610efd90614243565b601f55565b6005546001600160a01b031633146120e55760405162461bcd60e51b8152600401610efd90614243565b6013819055601454601254610f279190610f219084612d39565b606060048054610e50906143fc565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610efd90614243565b600d546001600160a01b038381169116141561217e5760405162461bcd60e51b81526020600482015260056024820152642a25a71d1960d91b6044820152606401610efd565b612188828261381e565b5050565b6005546001600160a01b031633146121b65760405162461bcd60e51b8152600401610efd90614243565b6113888161ffff1611156121c957600080fd5b601c805461ffff909216620100000263ffff000019909216919091179055565b6005546001600160a01b031633146122135760405162461bcd60e51b8152600401610efd90614243565b61218882826138c9565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561229f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610efd565b6122ac3385858403612d45565b5060019392505050565b3360008181526021602052604090205460ff16156123165760405162461bcd60e51b815260206004820152601d60248201527f4e6f646520686173206265656e20616c7265616479206d6967726174650000006044820152606401610efd565b601c54604051633dd3264d60e21b81526001600160a01b0383811660048301526000926401000000009004169063f74c99349060240160206040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239c91906140de565b905060005b81811161244657601e54604051638f752ca560e01b81526001600160a01b0385811660048301526060602483015260076064830152664f6c646e6f646560c81b6084830152678c2a687ce7720000604483015290911690638f752ca59060a401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b50505050808061243e90614437565b9150506123a1565b50600f546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a082319060240160206040518083038186803b15801561248d57600080fd5b505afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c591906140de565b90506124d18382612e61565b6001600160a01b0383166000908152602160205260409020805460ff19166001179055505050565b505050565b6000610f3a338484612fca565b6005546001600160a01b031633146125355760405162461bcd60e51b8152600401610efd90614243565b6014819055601354601254610f27918391610f2191612d39565b815133906003108015612563575060208351105b6125985760405162461bcd60e51b8152600401610efd906020808252600490820152634e433a3160e01b604082015260600190565b6001600160a01b0381166125d75760405162461bcd60e51b8152600401610efd9060208082526004908201526327219d1960e11b604082015260600190565b6001600160a01b03811660009081526022602052604090205460ff16156126105760405162461bcd60e51b8152600401610efd90614278565b6010546001600160a01b0382811691161480159061263c57506011546001600160a01b03828116911614155b6126715760405162461bcd60e51b8152600401610efd906020808252600490820152631390ce8d60e21b604082015260600190565b81612691826001600160a01b031660009081526020819052604090205490565b10156126c85760405162461bcd60e51b8152600401610efd906020808252600490820152634e433a3560e01b604082015260600190565b30600090815260208190526040902054601754811080159081906126f35750601954610100900460ff165b8015612702575060205460ff16155b801561271c57506005546001600160a01b03848116911614155b801561274157506001600160a01b03831660009081526023602052604090205460ff16155b15612846576020805460ff1916600117905560145460009061276c9061271090611767908690613378565b601054909150612785906001600160a01b031682613390565b60006127a26127106117676012548761337890919063ffffffff16565b905060006127c1612710611767601f548561337890919063ffffffff16565b6011549091506127da906001600160a01b031682613390565b6011546127f69030906001600160a01b0316611b1885856133e6565b60006128136127106117676013548961337890919063ffffffff16565b905061281e816135c0565b3060009081526020819052604090205461283790613647565b50506020805460ff1916905550505b6128518330866133f2565b601e54604051634810cb9960e11b81526001600160a01b03909116906390219732906128859086908990899060040161416b565b600060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146128e85760405162461bcd60e51b8152600401610efd90614243565b60198054911515620100000262ff000019909216919091179055565b6005546001600160a01b0316331461292e5760405162461bcd60e51b8152600401610efd90614243565b6113888161ffff16111561294157600080fd5b601c805461ffff191661ffff92909216919091179055565b6005546001600160a01b031633146129835760405162461bcd60e51b8152600401610efd90614243565b60005b82518110156124f9576129e78382815181106129b257634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106129da57634e487b7160e01b600052603260045260246000fd5b6020026020010151613a17565b806129f181614437565b915050612986565b6005546001600160a01b03163314612a235760405162461bcd60e51b8152600401610efd90614243565b601d546001600160a01b0382811691161415612a695760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3160d81b6044820152606401610efd565b601d546040516001600160a01b03918216918316907fb172ff8de0a3afc7f2ad25e3396c86087d62f54aa2b1757e9c048e3712fddbcd90600090a3601d546040805163c45a015560e01b8152905183926000926001600160a01b039091169163c45a015591600480820192602092909190829003018186803b158015612aee57600080fd5b505afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b269190613e17565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6e57600080fd5b505afa158015612b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba69190613e17565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c269190613e17565b600d80546001600160a01b039283166001600160a01b031991821617909155600e8054959092169416939093179092555050565b6005546001600160a01b03163314612c845760405162461bcd60e51b8152600401610efd90614243565b6001600160a01b038116612ce95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610efd565b612cf2816137cc565b50565b6005546001600160a01b03163314612d1f5760405162461bcd60e51b8152600401610efd90614243565b601980549115156101000261ff0019909216919091179055565b60006112e18284614362565b6001600160a01b038316612da75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610efd565b6001600160a01b038216612e085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610efd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611f15565b6121888282613a17565b6006546001600160a01b03841660009081526008602052604081205490918391612e95908661439a565b612e9f919061437a565b612ea991906143b9565b949350505050565b80471015612f015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610efd565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f4e576040519150601f19603f3d011682016040523d82523d6000602084013e612f53565b606091505b50509050806124f95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610efd565b60003360195490915062010000900460ff1615156001141561307657600d546001600160a01b038581169116141561301c5761301c816001600160a01b03166000908152602460205260409020439055565b600d546001600160a01b0384811691161415613076576001600160a01b03811660009081526024602052604090205461305443601b55565b601a546130619082614362565b601b541161307457613074826001611361565b505b6001600160a01b03841660009081526022602052604090205460ff161580156130b857506001600160a01b03831660009081526022602052604090205460ff16155b6130d45760405162461bcd60e51b8152600401610efd90614278565b6001600160a01b0384166131145760405162461bcd60e51b815260206004820152600760248201526645524332303a3160c81b6044820152606401610efd565b6001600160a01b0383166131545760405162461bcd60e51b815260206004820152600760248201526622a92199181d1960c91b6044820152606401610efd565b6005546001600160a01b038581169116148015906131805750600d546001600160a01b03848116911614155b801561319a5750601d546001600160a01b03848116911614155b80156131af57506001600160a01b0383163014155b80156131c457506001600160a01b0384163014155b1561320e5760195460ff1661320e5760405162461bcd60e51b815260206004820152601060248201526f15149051125391d7d11254d05093115160821b6044820152606401610efd565b600d546001600160a01b0385811691161480156132305750601c5461ffff1615155b156132ca57601c546000906127109061324d9061ffff168561439a565b613257919061437a565b9050600061326582856143b9565b90506132718183614362565b84146132ad5760405162461bcd60e51b815260206004820152600b60248201526a0d2dcecc2d8d2c840a8c2f60ab1b6044820152606401610efd565b6132b88630846133f2565b6132c38686836133f2565b5050613320565b600d546001600160a01b0384811691161480156132f25750601c5462010000900461ffff1615155b1561331557601c546000906127109061324d9062010000900461ffff168561439a565b6133208484846133f2565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124f9908490613af6565b60006112e1828461439a565b60006112e1828461437a565b4761339a82613647565b60006133a647836133e6565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f193505050501580156133df573d6000803e3d6000fd5b5050505050565b60006112e182846143b9565b6001600160a01b0383166134565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610efd565b6001600160a01b0382166134b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610efd565b6001600160a01b038316600090815260208190526040902054818110156135305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610efd565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613567908490614362565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b391815260200190565b60405180910390a3613320565b60006135cd826002613384565b905060006135db83836133e6565b9050476135e783613647565b60006135f347836133e6565b90506135ff8382613bc8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061368a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156136de57600080fd5b505afa1580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190613e17565b8160018151811061373757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d5461375d9130911684612d45565b601d54604051633b158ab160e11b81526001600160a01b039091169063762b15629061379690859060009086903090429060040161429d565b600060405180830381600087803b1580156137b057600080fd5b505af11580156137c4573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526023602052604090205460ff16151581151514156138755760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b6044820152606401610efd565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166139295760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610efd565b6001600160a01b0382166000908152602081905260409020548181101561399d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610efd565b6001600160a01b03831660009081526020819052604081208383039055600280548492906139cc9084906143b9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b038216613a6d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610efd565b8060026000828254613a7f9190614362565b90915550506001600160a01b03821660009081526020819052604081208054839290613aac908490614362565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000613b4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c819092919063ffffffff16565b8051909150156124f95780806020019051810190613b699190613fe2565b6124f95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610efd565b601d54613be09030906001600160a01b031684612d45565b601d54604051637c8d9fb960e11b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f91b3f7290839060c4016060604051808303818588803b158015613c4857600080fd5b505af1158015613c5c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133df91906140f6565b6060612ea9848460008585843b613cda5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610efd565b600080866001600160a01b03168587604051613cf6919061414f565b60006040518083038185875af1925050503d8060008114613d33576040519150601f19603f3d011682016040523d82523d6000602084013e613d38565b606091505b5091509150613d48828286613d53565b979650505050505050565b60608315613d625750816112e1565b825115613d725782518084602001fd5b8160405162461bcd60e51b8152600401610efd919061419f565b600082601f830112613d9c578081fd5b81356020613db1613dac8361433e565b61430d565b80838252828201915082860187848660051b8901011115613dd0578586fd5b855b85811015613dee57813584529284019290840190600101613dd2565b5090979650505050505050565b600060208284031215613e0c578081fd5b81356112e18161447e565b600060208284031215613e28578081fd5b81516112e18161447e565b60008060408385031215613e45578081fd5b8235613e508161447e565b91506020830135613e608161447e565b809150509250929050565b600080600060608486031215613e7f578081fd5b8335613e8a8161447e565b92506020840135613e9a8161447e565b929592945050506040919091013590565b60008060408385031215613ebd578182fd5b8235613ec88161447e565b91506020830135613e6081614493565b60008060408385031215613eea578182fd5b8235613ef58161447e565b946020939093013593505050565b60008060408385031215613f15578182fd5b823567ffffffffffffffff80821115613f2c578384fd5b818501915085601f830112613f3f578384fd5b81356020613f4f613dac8361433e565b8083825282820191508286018a848660051b8901011115613f6e578889fd5b8896505b84871015613f99578035613f858161447e565b835260019690960195918301918301613f72565b5096505086013592505080821115613faf578283fd5b50613fbc85828601613d8c565b9150509250929050565b600060208284031215613fd7578081fd5b81356112e181614493565b600060208284031215613ff3578081fd5b81516112e181614493565b60008060408385031215613e45578182fd5b60008060408385031215614022578182fd5b823567ffffffffffffffff80821115614039578384fd5b818501915085601f83011261404c578384fd5b813560208282111561406057614060614468565b614072601f8301601f1916820161430d565b92508183528781838601011115614087578586fd5b818185018285013790820181019490945295939092013593505050565b6000602082840312156140b5578081fd5b813561ffff811681146112e1578182fd5b6000602082840312156140d7578081fd5b5035919050565b6000602082840312156140ef578081fd5b5051919050565b60008060006060848603121561410a578081fd5b8351925060208401519150604084015190509250925092565b6000815180845261413b8160208601602086016143d0565b601f01601f19169290920160200192915050565b600082516141618184602087016143d0565b9190910192915050565b6001600160a01b038416815260606020820181905260009061418f90830185614123565b9050826040830152949350505050565b6020815260006112e16020830184614123565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a10931050d2d31254d5115160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156142ec5784516001600160a01b0316835293830193918301916001016142c7565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561433657614336614468565b604052919050565b600067ffffffffffffffff82111561435857614358614468565b5060051b60200190565b6000821982111561437557614375614452565b500190565b60008261439557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156143b4576143b4614452565b500290565b6000828210156143cb576143cb614452565b500390565b60005b838110156143eb5781810151838201526020016143d3565b838111156133205750506000910152565b600181811c9082168061441057607f821691505b6020821081141561443157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561444b5761444b614452565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612cf257600080fd5b8015158114612cf257600080fdfea26469706673582212200b6bd5aabd6b9e818702b2c3eb66298354c36e1b3e7a479c16b0e629cba9093f64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f043120000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf80000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000026ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000001

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f043120000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf80000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000026ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : payees (address[]): 0xf3744adead92b2ef524c7cb899d52b8fb729ceea
Arg [1] : shares (uint256[]): 100
Arg [2] : addresses (address[]): 0xc5e8ad663ed368ab41a90c8c5ad02b2145f04312,0x6912b4ee8370306c719f2f78129114b75581dcf8,0x7fb35013090590b8ffb628a89851fac6e6f0ebc9
Arg [3] : fees (uint256[]): 100,9899,1,500,1
Arg [4] : swapAmount (uint256): 5

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000f3744adead92b2ef524c7cb899d52b8fb729ceea
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 000000000000000000000000c5e8ad663ed368ab41a90c8c5ad02b2145f04312
Arg [11] : 0000000000000000000000006912b4ee8370306c719f2f78129114b75581dcf8
Arg [12] : 0000000000000000000000007fb35013090590b8ffb628a89851fac6e6f0ebc9
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [15] : 00000000000000000000000000000000000000000000000000000000000026ab
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [17] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

53436:18547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26405:40;23027:10;26405:40;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;26435:9:0;8726:2:1;8711:18;;8704:34;8617:18;26405:40:0;;;;;;;53436:18547;;;;;53919:26;;;;;;;;;;-1:-1:-1;53919:26:0;;;;-1:-1:-1;;;;;53919:26:0;;;;;;-1:-1:-1;;;;;8418:32:1;;;8400:51;;8388:2;8373:18;53919:26:0;;;;;;;;54198:35;;;;;;;;;;-1:-1:-1;54198:35:0;;;;;;;;;;;11389:14:1;;11382:22;11364:41;;11352:2;11337:18;54198:35:0;11319:92:1;32895:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;59090:171::-;;;;;;;;;;-1:-1:-1;59090:171:0;;;;;:::i;:::-;;:::i;:::-;;35062:169;;;;;;;;;;-1:-1:-1;35062:169:0;;;;;:::i;:::-;;:::i;71294:562::-;;;;;;;;;;-1:-1:-1;71294:562:0;;;;;:::i;:::-;;:::i;54089:24::-;;;;;;;;;;;;;;;;;;;27159:25:1;;;27147:2;27132:18;54089:24:0;27114:76:1;34015:108:0;;;;;;;;;;-1:-1:-1;34103:12:0;;34015:108;;28191:566;;;;;;;;;;-1:-1:-1;28191:566:0;;;;;:::i;:::-;;:::i;35713:492::-;;;;;;;;;;-1:-1:-1;35713:492:0;;;;;:::i;:::-;;:::i;59955:108::-;;;;;;;;;;-1:-1:-1;59955:108:0;;;;;:::i;:::-;;:::i;53954:25::-;;;;;;;;;;;;;;;;33857:93;;;;;;;;;;-1:-1:-1;33857:93:0;;33940:2;28649:36:1;;28637:2;28622:18;33857:93:0;28604:87:1;54866:60:0;;;;;;;;;;-1:-1:-1;54866:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;36614:215;;;;;;;;;;-1:-1:-1;36614:215:0;;;;;:::i;:::-;;:::i;53889:23::-;;;;;;;;;;-1:-1:-1;53889:23:0;;;;-1:-1:-1;;;;;53889:23:0;;;26536:91;;;;;;;;;;-1:-1:-1;26607:12:0;;26536:91;;27665:135;;;;;;;;;;-1:-1:-1;27665:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;27762:21:0;;;27735:7;27762:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27665:135;60779:144;;;;;;;;;;-1:-1:-1;60779:144:0;;;;;:::i;:::-;;:::i;29025:641::-;;;;;;;;;;-1:-1:-1;29025:641:0;;;;;:::i;:::-;;:::i;54384:24::-;;;;;;;;;;-1:-1:-1;54384:24:0;;;;;;;;;;;26994:6:1;26982:19;;;26964:38;;26952:2;26937:18;54384:24:0;26919:89:1;53567:76:0;;;;;;;;;;-1:-1:-1;53567:76:0;;;;-1:-1:-1;;;;;53567:76:0;;;68223:1017;;;;;;;;;;;;;:::i;53986:31::-;;;;;;;;;;;;;;;;69248:2038;;;;;;;;;;-1:-1:-1;69248:2038:0;;;;;:::i;:::-;;:::i;60422:93::-;;;;;;;;;;-1:-1:-1;60422:93:0;;;;;:::i;:::-;;:::i;54122:31::-;;;;;;;;;;;;;;;;60931:111;;;;;;;;;;-1:-1:-1;60931:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;60983:36:0;;;;;:28;:36;;;;;61022:12;60983:51;;60931:111;54317:27;;;;;;;;;;;;;;;;67156:1059;;;;;;;;;;-1:-1:-1;67156:1059:0;;;;;:::i;:::-;;:::i;58973:109::-;;;;;;;;;;-1:-1:-1;58973:109:0;;;;;:::i;:::-;;:::i;61050:80::-;;;;;;;;;;;;61110:12;61095;:27;61050:80;58743:111;;;;;;;;;;-1:-1:-1;58743:111:0;;;;;:::i;:::-;;:::i;59633:99::-;;;;;;;;;;-1:-1:-1;59633:99:0;;;;;:::i;:::-;;:::i;53801:79::-;;;;;;;;;;-1:-1:-1;53801:79:0;;;;-1:-1:-1;;;;;53801:79:0;;;53538:22;;;;;;;;;;-1:-1:-1;53538:22:0;;;;-1:-1:-1;;;;;53538:22:0;;;54057:25;;;;;;;;;;;;;;;;58862:103;;;;;;;;;;-1:-1:-1;58862:103:0;;;;;:::i;:::-;;:::i;34186:127::-;;;;;;;;;;-1:-1:-1;34186:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;34287:18:0;34260:7;34287:18;;;;;;;;;;;;34186:127;44569:103;;;;;;;;;;;;;:::i;54284:26::-;;;;;;;;;;-1:-1:-1;54284:26:0;;;;;;;;;;;27891:100;;;;;;;;;;-1:-1:-1;27891:100:0;;;;;:::i;:::-;;:::i;59740:94::-;;;;;;;;;;-1:-1:-1;59740:94:0;;;;;:::i;:::-;;:::i;43918:87::-;;;;;;;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;43991:6:0;43918:87;;59269:179;;;;;;;;;;-1:-1:-1;59269:179:0;;;;;:::i;:::-;;:::i;33114:104::-;;;;;;;;;;;;;:::i;27387:109::-;;;;;;;;;;-1:-1:-1;27387:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;27470:18:0;27443:7;27470:18;;;:9;:18;;;;;;;27387:109;60071:248;;;;;;;;;;-1:-1:-1;60071:248:0;;;;;:::i;:::-;;:::i;60650:121::-;;;;;;;;;;-1:-1:-1;60650:121:0;;;;;:::i;:::-;;:::i;58093:107::-;;;;;;;;;;-1:-1:-1;58093:107:0;;;;;:::i;:::-;;:::i;37332:413::-;;;;;;;;;;-1:-1:-1;37332:413:0;;;;;:::i;:::-;;:::i;57299:554::-;;;;;;;;;;;;;:::i;34526:175::-;;;;;;;;;;-1:-1:-1;34526:175:0;;;;;:::i;:::-;;:::i;59456:169::-;;;;;;;;;;-1:-1:-1;59456:169:0;;;;;:::i;:::-;;:::i;54024:26::-;;;;;;;;;;;;;;;;54802:57;;;;;;;;;;-1:-1:-1;54802:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;65144:2004;;;;;;;;;;-1:-1:-1;65144:2004:0;;;;;:::i;:::-;;:::i;60327:85::-;;;;;;;;;;-1:-1:-1;60327:85:0;;;;;:::i;:::-;;:::i;60523:119::-;;;;;;;;;;-1:-1:-1;60523:119:0;;;;;:::i;:::-;;:::i;54415:25::-;;;;;;;;;;-1:-1:-1;54415:25:0;;;;;;;;;;;27183:105;;;;;;;;;;-1:-1:-1;27183:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;27264:16:0;27237:7;27264:16;;;:7;:16;;;;;;;27183:105;54160:31;;;;;;;;;;;;;;;;26973:119;;;;;;;;;;-1:-1:-1;26973:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;27058:26:0;27031:7;27058:26;;;:19;:26;;;;;;;26973:119;34764:151;;;;;;;;;;-1:-1:-1;34764:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;34880:18:0;;;34853:7;34880:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34764:151;57865:220;;;;;;;;;;-1:-1:-1;57865:220:0;;;;;:::i;:::-;;:::i;54351:24::-;;;;;;;;;;;;;;;;58208:527;;;;;;;;;;-1:-1:-1;58208:527:0;;;;;:::i;:::-;;:::i;26721:95::-;;;;;;;;;;-1:-1:-1;26794:14:0;;26721:95;;44827:201;;;;;;;;;;-1:-1:-1;44827:201:0;;;;;:::i;:::-;;:::i;59842:105::-;;;;;;;;;;-1:-1:-1;59842:105:0;;;;;:::i;:::-;;:::i;54240:37::-;;;;;;;;;;-1:-1:-1;54240:37:0;;;;;;;;;;;54701:42;;;;;;;;;;-1:-1:-1;54701:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53713:81;;;;;;;;;;;;53752:42;53713:81;;54750:45;;;;;;;;;;-1:-1:-1;54750:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32895:100;32949:13;32982:5;32975:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32895:100;:::o;59090:171::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;;;;;;;;;59162:10:::1;:19:::0;;;59241:11:::1;::::0;59219:16:::1;::::0;59204:49:::1;::::0;59241:11;59204:32:::1;::::0;59175:6;;59204:14:::1;:32::i;:::-;:36:::0;::::1;:49::i;:::-;59192:9;:61:::0;-1:-1:-1;59090:171:0:o;35062:169::-;35145:4;35162:39;23027:10;35185:7;35194:6;35162:8;:39::i;:::-;-1:-1:-1;35219:4:0;35062:169;;;;:::o;71294:562::-;23027:10;;71402:88;;;;-1:-1:-1;;;71402:88:0;;19455:2:1;71402:88:0;;;19437:21:1;19494:1;19474:18;;;19467:29;-1:-1:-1;;;19512:18:1;;;19505:36;19558:18;;71402:88:0;19427:155:1;71402:88:0;71528:11;;:38;;-1:-1:-1;;;71528:38:0;;-1:-1:-1;;;;;8418:32:1;;;71528:38:0;;;8400:51:1;71505:20:0;;71528:11;;:30;;8373:18:1;;71528:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71505:61;;71622:1;71607:12;:16;71581:84;;;;-1:-1:-1;;;71581:84:0;;13538:2:1;71581:84:0;;;13520:21:1;13577:1;13557:18;;;13550:29;-1:-1:-1;;;13595:18:1;;;13588:36;13641:18;;71581:84:0;13510:155:1;71581:84:0;71676:40;71696:4;71703:12;71676:11;:40::i;:::-;71727:11;;:66;;-1:-1:-1;;;71727:66:0;;-1:-1:-1;;;;;11094:32:1;;;71727:66:0;;;11076:51:1;11143:18;;;11136:34;;;11186:18;;;11179:34;;;71727:11:0;;;;:30;;11049:18:1;;71727:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;71804:11:0;;:42;;-1:-1:-1;;;71804:42:0;;-1:-1:-1;;;;;8418:32:1;;;71804:42:0;;;8400:51:1;71804:11:0;;;;-1:-1:-1;71804:34:0;;-1:-1:-1;8373:18:1;;71804:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71294:562;;;:::o;28191:566::-;-1:-1:-1;;;;;28267:16:0;;28286:1;28267:16;;;:7;:16;;;;;;28259:71;;;;-1:-1:-1;;;28259:71:0;;;;;;;:::i;:::-;28343:21;28391:15;26794:14;;;26721:95;28391:15;28367:39;;:21;:39;:::i;:::-;28343:63;;28417:15;28435:58;28451:7;28460:13;28475:17;28484:7;-1:-1:-1;;;;;27470:18:0;27443:7;27470:18;;;:9;:18;;;;;;;27387:109;28475:17;28435:15;:58::i;:::-;28417:76;-1:-1:-1;28514:12:0;28506:68;;;;-1:-1:-1;;;28506:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28587:18:0;;;;;;:9;:18;;;;;:29;;28609:7;;28587:18;:29;;28609:7;;28587:29;:::i;:::-;;;;;;;;28645:7;28627:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;28665:35:0;;-1:-1:-1;28683:7:0;28692;28665:17;:35::i;:::-;28716:33;;;-1:-1:-1;;;;;8662:32:1;;8644:51;;8726:2;8711:18;;8704:34;;;28716:33:0;;8617:18:1;28716:33:0;;;;;;;28191:566;;;:::o;35713:492::-;35853:4;35870:36;35880:6;35888:9;35899:6;35870:9;:36::i;:::-;-1:-1:-1;;;;;35946:19:0;;35919:24;35946:19;;;:11;:19;;;;;;;;23027:10;35946:33;;;;;;;;35998:26;;;;35990:79;;;;-1:-1:-1;;;35990:79:0;;19789:2:1;35990:79:0;;;19771:21:1;19828:2;19808:18;;;19801:30;19867:34;19847:18;;;19840:62;-1:-1:-1;;;19918:18:1;;;19911:38;19966:19;;35990:79:0;19761:230:1;35990:79:0;36105:57;36114:6;23027:10;36155:6;36136:16;:25;36105:8;:57::i;:::-;36193:4;36186:11;;;35713:492;;;;;;:::o;59955:108::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60030:16:::1;:25:::0;;-1:-1:-1;;60030:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59955:108::o;36614:215::-;23027:10;36702:4;36751:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36751:34:0;;;;;;;;;;36702:4;;36719:80;;36742:7;;36751:47;;36788:10;;36751:47;:::i;:::-;36719:8;:80::i;60779:144::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60885:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;60885:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60779:144::o;29025:641::-;-1:-1:-1;;;;;29107:16:0;;29126:1;29107:16;;;:7;:16;;;;;;29099:71;;;;-1:-1:-1;;;29099:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27058:26:0;;29183:21;27058:26;;;:19;:26;;;;;;29207:30;;-1:-1:-1;;;29207:30:0;;29231:4;29207:30;;;8400:51:1;-1:-1:-1;;;;;29207:15:0;;;;;8373:18:1;;29207:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;29183:77;;29271:15;29289:65;29305:7;29314:13;29329:24;29338:5;29345:7;-1:-1:-1;;;;;27762:21:0;;;27735:7;27762:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27665:135;29289:65;29271:83;-1:-1:-1;29375:12:0;29367:68;;;;-1:-1:-1;;;29367:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29448:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;29482:7;;29448:21;:41;;29482:7;;29448:41;:::i;:::-;;;;-1:-1:-1;;;;;;;29500:26:0;;;;;;:19;:26;;;;;:37;;29530:7;;29500:26;:37;;29530:7;;29500:37;:::i;:::-;;;;-1:-1:-1;29550:47:0;;-1:-1:-1;29573:5:0;29580:7;29589;29550:22;:47::i;:::-;29613:45;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;8726:2;8711:18;;8704:34;;;29613:45:0;;;;;8617:18:1;29613:45:0;;;;;;;29025:641;;;;:::o;68223:1017::-;23027:10;;68305:79;;;;-1:-1:-1;;;68305:79:0;;21559:2:1;68305:79:0;;;21541:21:1;21598:1;21578:18;;;21571:29;-1:-1:-1;;;21616:18:1;;;21609:39;21665:18;;68305:79:0;21531:158:1;68305:79:0;-1:-1:-1;;;;;68418:21:0;;;;;;:13;:21;;;;;;;;68417:22;68395:83;;;;-1:-1:-1;;;68395:83:0;;;;;;;:::i;:::-;68521:8;;-1:-1:-1;;;;;68511:18:0;;;68521:8;;68511:18;;;;:43;;-1:-1:-1;68543:11:0;;-1:-1:-1;;;;;68533:21:0;;;68543:11;;68533:21;;68511:43;68489:102;;;;-1:-1:-1;;;68489:102:0;;24490:2:1;68489:102:0;;;24472:21:1;24529:1;24509:18;;;24502:29;-1:-1:-1;;;24547:18:1;;;24540:39;24596:18;;68489:102:0;24462:158:1;68489:102:0;68625:11;;:38;;-1:-1:-1;;;68625:38:0;;-1:-1:-1;;;;;8418:32:1;;;68625:38:0;;;8400:51:1;68602:20:0;;68625:11;;:30;;8373:18:1;;68625:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68602:61;;68711:1;68696:12;:16;68674:75;;;;-1:-1:-1;;;68674:75:0;;15019:2:1;68674:75:0;;;15001:21:1;15058:1;15038:18;;;15031:29;-1:-1:-1;;;15076:18:1;;;15069:39;15125:18;;68674:75:0;14991:158:1;68674:75:0;68764:18;;;;;;;68760:287;;;68835:10;;68799:17;;68835:14;68831:165;;68882:39;68915:5;68882:28;68899:10;;68882:12;:16;;:28;;;;:::i;:::-;:32;;:39::i;:::-;68957:11;;68870:51;;-1:-1:-1;68940:40:0;;-1:-1:-1;;;;;68957:11:0;68870:51;68940:16;:40::i;:::-;69010:25;69026:9;69010:25;;:::i;:::-;;;68760:287;;69057:33;69069:6;69077:12;69057:11;:33::i;:::-;69101:11;;:42;;-1:-1:-1;;;69101:42:0;;-1:-1:-1;;;;;8418:32:1;;;69101:42:0;;;8400:51:1;69101:11:0;;;;:34;;8373:18:1;;69101:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69170:12;69154;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;69200:32:0;;27159:25:1;;;69230:1:0;;-1:-1:-1;;;;;69200:32:0;;;;;27147:2:1;27132:18;69200:32:0;;;;;;;68223:1017;;:::o;69248:2038::-;23027:10;;69356:76;;;;-1:-1:-1;;;69356:76:0;;19455:2:1;69356:76:0;;;19437:21:1;19494:1;19474:18;;;19467:29;-1:-1:-1;;;19512:18:1;;;19505:36;19558:18;;69356:76:0;19427:155:1;69356:76:0;-1:-1:-1;;;;;69466:21:0;;;;;;:13;:21;;;;;;;;69465:22;69443:83;;;;-1:-1:-1;;;69443:83:0;;;;;;;:::i;:::-;69569:8;;-1:-1:-1;;;;;69559:18:0;;;69569:8;;69559:18;;;;:43;;-1:-1:-1;69591:11:0;;-1:-1:-1;;;;;69581:21:0;;;69591:11;;69581:21;;69559:43;69537:99;;;;-1:-1:-1;;;69537:99:0;;13204:2:1;69537:99:0;;;13186:21:1;13243:1;13223:18;;;13216:29;-1:-1:-1;;;13261:18:1;;;13254:36;13307:18;;69537:99:0;13176:155:1;69537:99:0;69670:11;;:44;;-1:-1:-1;;;69670:44:0;;-1:-1:-1;;;;;8662:32:1;;;69670:44:0;;;8644:51:1;8711:18;;;8704:34;;;69647:20:0;;69670:11;;:25;;8617:18:1;;69670:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;69647:67;;69762:1;69747:12;:16;69725:72;;;;-1:-1:-1;;;69725:72:0;;13538:2:1;69725:72:0;;;13520:21:1;13577:1;13557:18;;;13550:29;-1:-1:-1;;;13595:18:1;;;13588:36;13641:18;;69725:72:0;13510:155:1;69725:72:0;69859:4;69810:28;34287:18;;;;;;;;;;;69920:16;;69896:40;;;;;;;69965:47;;-1:-1:-1;69994:18:0;;;;;;;69965:47;:73;;;;-1:-1:-1;70030:8:0;;;;70029:9;69965:73;:107;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;70055:17:0;;;43991:6;;70055:17;;69965:107;:158;;;;-1:-1:-1;;;;;;70090:33:0;;;;;;:25;:33;;;;;;;;70089:34;69965:158;69947:1148;;;70150:8;:15;;-1:-1:-1;;70150:15:0;70161:4;70150:15;;;70246:11;;70150:8;;70203:84;;70281:5;;70203:55;;:20;;:42;:55::i;:84::-;70321:8;;70182:105;;-1:-1:-1;70304:38:0;;-1:-1:-1;;;;;70321:8:0;70182:105;70304:16;:38::i;:::-;70359:25;70387:83;70464:5;70387:54;70430:10;;70387:20;:42;;:54;;;;:::i;:83::-;70359:111;;70487:27;70517:72;70569:5;70517:29;70539:6;;70517:17;:21;;:29;;;;:::i;:72::-;70623:11;;70487:102;;-1:-1:-1;70606:50:0;;-1:-1:-1;;;;;70623:11:0;70487:102;70606:16;:50::i;:::-;70739:11;;70673:153;;70715:4;;-1:-1:-1;;;;;70739:11:0;70769:42;:17;70791:19;70769:21;:42::i;:::-;70673:15;:153::i;:::-;70843:18;70864:85;70929:5;70864:42;70889:16;;70864:20;:24;;:42;;;;:::i;:85::-;70843:106;;70966:26;70981:10;70966:14;:26::i;:::-;71043:4;34260:7;34287:18;;;;;;;;;;;71007:43;;:17;:43::i;:::-;-1:-1:-1;;71067:8:0;:16;;-1:-1:-1;;71067:16:0;;;-1:-1:-1;;69947:1148:0;71105:40;71125:4;71132:12;71105:11;:40::i;:::-;71156:11;;:63;;-1:-1:-1;;;71156:63:0;;-1:-1:-1;;;;;11094:32:1;;;71156:63:0;;;11076:51:1;11143:18;;;11136:34;;;11186:18;;;11179:34;;;71156:11:0;;;;:30;;11049:18:1;;71156:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71268:9;71246:6;-1:-1:-1;;;;;71237:41:0;;71254:12;71237:41;;;;27159:25:1;;27147:2;27132:18;;27114:76;71237:41:0;;;;;;;;69248:2038;;;;;:::o;60422:93::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60488:11:::1;:19:::0;60422:93::o;67156:1059::-;23027:10;;67258:79;;;;-1:-1:-1;;;67258:79:0;;18106:2:1;67258:79:0;;;18088:21:1;18145:1;18125:18;;;18118:29;-1:-1:-1;;;18163:18:1;;;18156:39;18212:18;;67258:79:0;18078:158:1;67258:79:0;-1:-1:-1;;;;;67371:21:0;;;;;;:13;:21;;;;;;;;67370:22;67348:83;;;;-1:-1:-1;;;67348:83:0;;;;;;;:::i;:::-;67474:8;;-1:-1:-1;;;;;67464:18:0;;;67474:8;;67464:18;;;;:43;;-1:-1:-1;67496:11:0;;-1:-1:-1;;;;;67486:21:0;;;67496:11;;67486:21;;67464:43;67442:102;;;;-1:-1:-1;;;67442:102:0;;14682:2:1;67442:102:0;;;14664:21:1;14721:1;14701:18;;;14694:29;-1:-1:-1;;;14739:18:1;;;14732:39;14788:18;;67442:102:0;14654:158:1;67442:102:0;67578:11;;:44;;-1:-1:-1;;;67578:44:0;;-1:-1:-1;;;;;8662:32:1;;;67578:44:0;;;8644:51:1;8711:18;;;8704:34;;;67555:20:0;;67578:11;;:25;;8617:18:1;;67578:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67555:67;;67670:1;67655:12;:16;67633:75;;;;-1:-1:-1;;;67633:75:0;;19118:2:1;67633:75:0;;;19100:21:1;19157:1;19137:18;;;19130:29;-1:-1:-1;;;19175:18:1;;;19168:39;19224:18;;67633:75:0;19090:158:1;67633:75:0;67725:18;;;;;;;67721:287;;;67796:10;;67760:17;;67796:14;67792:165;;67843:39;67876:5;67843:28;67860:10;;67843:12;:16;;:28;;;;:::i;:39::-;67918:11;;67831:51;;-1:-1:-1;67901:40:0;;-1:-1:-1;;;;;67918:11:0;67831:51;67901:16;:40::i;:::-;67971:25;67987:9;67971:25;;:::i;:::-;;;67721:287;;68018:33;68030:6;68038:12;68018:11;:33::i;:::-;68062:11;;:48;;-1:-1:-1;;;68062:48:0;;-1:-1:-1;;;;;8662:32:1;;;68062:48:0;;;8644:51:1;8711:18;;;8704:34;;;68062:11:0;;;;:29;;8617:18:1;;68062:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68137:12;68121;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;68167:40:0;;27159:25:1;;;68197:9:0;;-1:-1:-1;;;;;68167:40:0;;;;;27147:2:1;27132:18;68167:40:0;;;;;;;;67156:1059;;;:::o;58973:109::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59054:11:::1;:20:::0;;-1:-1:-1;;;;;;59054:20:0::1;-1:-1:-1::0;;;;;59054:20:0;;;::::1;::::0;;;::::1;::::0;;58973:109::o;58743:111::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58821:16:::1;:25:::0;58743:111::o;59633:99::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59705:10:::1;:19:::0;59633:99::o;58862:103::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58940:8:::1;:17:::0;;-1:-1:-1;;;;;;58940:17:0::1;-1:-1:-1::0;;;;;58940:17:0;;;::::1;::::0;;;::::1;::::0;;58862:103::o;44569:::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;44634:30:::1;44661:1;44634:18;:30::i;:::-;44569:103::o:0;27891:100::-;27942:7;27969;27977:5;27969:14;;;;;;-1:-1:-1;;;27969:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27969:14:0;;27891:100;-1:-1:-1;;27891:100:0:o;59740:94::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59811:6:::1;:15:::0;59740:94::o;59269:179::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59343:16:::1;:25:::0;;;59428:11:::1;::::0;59391:10:::1;::::0;:49:::1;::::0;59428:11;59391:32:::1;::::0;59362:6;59391:14:::1;:32::i;33114:104::-:0;33170:13;33203:7;33196:14;;;;;:::i;60071:248::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60217:7:::1;::::0;-1:-1:-1;;;;;60209:15:0;;::::1;60217:7:::0;::::1;60209:15;;60187:70;;;::::0;-1:-1:-1;;;60187:70:0;;26689:2:1;60187:70:0::1;::::0;::::1;26671:21:1::0;26728:1;26708:18;;;26701:29;-1:-1:-1;;;26746:18:1;;;26739:35;26791:18;;60187:70:0::1;26661:154:1::0;60187:70:0::1;60270:41;60299:4;60305:5;60270:28;:41::i;:::-;60071:248:::0;;:::o;60650:121::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60732:4:::1;60723:5;:13;;;;60715:22;;;::::0;::::1;;60748:7;:15:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;60748:15:0;;::::1;::::0;;;::::1;::::0;;60650:121::o;58093:107::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58170:22:::1;58176:7;58185:6;58170:5;:22::i;37332:413::-:0;23027:10;37425:4;37469:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37469:34:0;;;;;;;;;;37522:35;;;;37514:85;;;;-1:-1:-1;;;37514:85:0;;25578:2:1;37514:85:0;;;25560:21:1;25617:2;25597:18;;;25590:30;25656:34;25636:18;;;25629:62;-1:-1:-1;;;25707:18:1;;;25700:35;25752:19;;37514:85:0;25550:227:1;37514:85:0;37635:67;23027:10;37658:7;37686:15;37667:16;:34;37635:8;:67::i;:::-;-1:-1:-1;37733:4:0;;37332:413;-1:-1:-1;;;37332:413:0:o;57299:554::-;23027:10;57345:14;57408:18;;;:10;:18;;;;;;;;57407:19;57385:98;;;;-1:-1:-1;;;57385:98:0;;24132:2:1;57385:98:0;;;24114:21:1;24171:2;24151:18;;;24144:30;24210:31;24190:18;;;24183:59;24259:18;;57385:98:0;24104:179:1;57385:98:0;57511:11;;:35;;-1:-1:-1;;;57511:35:0;;-1:-1:-1;;;;;8418:32:1;;;57511:11:0;:35;;8400:51:1;57494:14:0;;57511:11;;;;;:27;;8373:18:1;;57511:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57494:52;;57574:9;57569:135;57594:6;57589:1;:11;57569:135;;57626:11;;:66;;-1:-1:-1;;;57626:66:0;;-1:-1:-1;;;;;9736:32:1;;;57626:66:0;;;9718:51:1;9805:2;9785:18;;;9778:30;9844:1;9824:18;;;9817:29;-1:-1:-1;;;9862:19:1;;;9855:38;57671:20:0;9945:18:1;;;9938:34;57626:11:0;;;;:25;;9910:19:1;;57626:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57602:3;;;;;:::i;:::-;;;;57569:135;;;-1:-1:-1;57733:12:0;;:30;;-1:-1:-1;;;57733:30:0;;-1:-1:-1;;;;;8418:32:1;;;57733:30:0;;;8400:51:1;57716:14:0;;57733:12;;:22;;8373:18:1;;57733:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57716:47;;57776:27;57788:6;57796;57776:11;:27::i;:::-;-1:-1:-1;;;;;71939:20:0;;;;;;:10;:20;;;;;:31;;-1:-1:-1;;71939:31:0;57838:4;71939:31;;;57299:554;;;:::o;57816:27::-;57299:554;;;:::o;34526:175::-;34612:4;34629:42;23027:10;34653:9;34664:6;34629:9;:42::i;59456:169::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59525:11:::1;:20:::0;;;59583:16:::1;::::0;59568:10:::1;::::0;:49:::1;::::0;59539:6;;59568:32:::1;::::0;:14:::1;:32::i;65144:2004::-:0;65293:18;;23027:10;;65314:1;-1:-1:-1;65293:49:0;;;;;65340:2;65325:4;65319:18;:23;65293:49;65271:103;;;;-1:-1:-1;;;65271:103:0;;;;;;20894:2:1;20876:21;;;20933:1;20913:18;;;20906:29;-1:-1:-1;;;20966:2:1;20951:18;;20944:34;21010:2;20995:18;;20866:153;65271:103:0;-1:-1:-1;;;;;65407:20:0;;65385:74;;;;-1:-1:-1;;;65385:74:0;;;;;;23442:2:1;23424:21;;;23481:1;23461:18;;;23454:29;-1:-1:-1;;;23514:2:1;23499:18;;23492:34;23558:2;23543:18;;23414:153;65385:74:0;-1:-1:-1;;;;;65479:21:0;;;;;;:13;:21;;;;;;;;65478:22;65470:46;;;;-1:-1:-1;;;65470:46:0;;;;;;;:::i;:::-;65559:8;;-1:-1:-1;;;;;65549:18:0;;;65559:8;;65549:18;;;;:43;;-1:-1:-1;65581:11:0;;-1:-1:-1;;;;;65571:21:0;;;65581:11;;65571:21;;65549:43;65527:97;;;;-1:-1:-1;;;65527:97:0;;;;;;16170:2:1;16152:21;;;16209:1;16189:18;;;16182:29;-1:-1:-1;;;16242:2:1;16227:18;;16220:34;16286:2;16271:18;;16142:153;65527:97:0;65678:7;65657:17;65667:6;-1:-1:-1;;;;;34287:18:0;34260:7;34287:18;;;;;;;;;;;;34186:127;65657:17;:28;;65635:82;;;;-1:-1:-1;;;65635:82:0;;;;;;12469:2:1;12451:21;;;12508:1;12488:18;;;12481:29;-1:-1:-1;;;12541:2:1;12526:18;;12519:34;12585:2;12570:18;;12441:153;65635:82:0;65779:4;65730:28;34287:18;;;;;;;;;;;65840:16;;65816:40;;;;;;;65885:47;;-1:-1:-1;65914:18:0;;;;;;;65885:47;:73;;;;-1:-1:-1;65950:8:0;;;;65949:9;65885:73;:107;;;;-1:-1:-1;43991:6:0;;-1:-1:-1;;;;;65975:17:0;;;43991:6;;65975:17;;65885:107;:158;;;;-1:-1:-1;;;;;;66010:33:0;;;;;;:25;:33;;;;;;;;66009:34;65885:158;65867:1160;;;66070:8;:15;;-1:-1:-1;;66070:15:0;66081:4;66070:15;;;66178:11;;66070:8;;66135:84;;66213:5;;66135:55;;:20;;:42;:55::i;:84::-;66253:8;;66114:105;;-1:-1:-1;66236:38:0;;-1:-1:-1;;;;;66253:8:0;66114:105;66236:16;:38::i;:::-;66291:25;66319:83;66396:5;66319:54;66362:10;;66319:20;:42;;:54;;;;:::i;:83::-;66291:111;;66419:27;66449:72;66501:5;66449:29;66471:6;;66449:17;:21;;:29;;;;:::i;:72::-;66555:11;;66419:102;;-1:-1:-1;66538:50:0;;-1:-1:-1;;;;;66555:11:0;66419:102;66538:16;:50::i;:::-;66671:11;;66605:153;;66647:4;;-1:-1:-1;;;;;66671:11:0;66701:42;:17;66723:19;66701:21;:42::i;66605:153::-;66775:18;66796:85;66861:5;66796:42;66821:16;;66796:20;:24;;:42;;;;:::i;:85::-;66775:106;;66898:26;66913:10;66898:14;:26::i;:::-;66975:4;34260:7;34287:18;;;;;;;;;;;66939:43;;71007:17;:43::i;66939:::-;-1:-1:-1;;66999:8:0;:16;;-1:-1:-1;;66999:16:0;;;-1:-1:-1;;65867:1160:0;67037:47;67053:6;67069:4;67076:7;67037:15;:47::i;:::-;67095:11;;:45;;-1:-1:-1;;;67095:45:0;;-1:-1:-1;;;;;67095:11:0;;;;:22;;:45;;67118:6;;67126:4;;67132:7;;67095:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65144:2004;;;;;:::o;60327:85::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60389:7:::1;:15:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;60389:15:0;;::::1;::::0;;;::::1;::::0;;60327:85::o;60523:119::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;60604:4:::1;60595:5;:13;;;;60587:22;;;::::0;::::1;;60620:6;:14:::0;;-1:-1:-1;;60620:14:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;60523:119::o;57865:220::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;57974:9:::1;57969:109;57993:10;:17;57989:1;:21;57969:109;;;58032:34;58038:10;58049:1;58038:13;;;;;;-1:-1:-1::0;;;58038:13:0::1;;;;;;;;;;;;;;;58053:9;58063:1;58053:12;;;;;;-1:-1:-1::0;;;58053:12:0::1;;;;;;;;;;;;;;;58032:5;:34::i;:::-;58012:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57969:109;;58208:527:::0;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;58334:9:::1;::::0;-1:-1:-1;;;;;58312:32:0;;::::1;58334:9:::0;::::1;58312:32;;58290:87;;;::::0;-1:-1:-1;;;58290:87:0;;21896:2:1;58290:87:0::1;::::0;::::1;21878:21:1::0;21935:1;21915:18;;;21908:29;-1:-1:-1;;;21953:18:1;;;21946:35;21998:18;;58290:87:0::1;21868:154:1::0;58290:87:0::1;58429:9;::::0;58393:47:::1;::::0;-1:-1:-1;;;;;58429:9:0;;::::1;::::0;58393:47;::::1;::::0;::::1;::::0;58429:9:::1;::::0;58393:47:::1;58555:9;::::0;:19:::1;::::0;;-1:-1:-1;;;58555:19:0;;;;58497:10;;58451:27:::1;::::0;-1:-1:-1;;;;;58555:9:0;;::::1;::::0;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:9;:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58538:48:0::1;;58609:4;58629:10;-1:-1:-1::0;;;;;58629:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58538:120;::::0;-1:-1:-1;;;;;;58538:120:0::1;::::0;;;;;;-1:-1:-1;;;;;8979:15:1;;;58538:120:0::1;::::0;::::1;8961:34:1::0;9031:15;;9011:18;;;9004:43;8896:18;;58538:120:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58669:7;:18:::0;;-1:-1:-1;;;;;58669:18:0;;::::1;-1:-1:-1::0;;;;;;58669:18:0;;::::1;;::::0;;;58698:16:::1;:29:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;58208:527:0:o;44827:201::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44916:22:0;::::1;44908:73;;;::::0;-1:-1:-1;;;44908:73:0;;13872:2:1;44908:73:0::1;::::0;::::1;13854:21:1::0;13911:2;13891:18;;;13884:30;13950:34;13930:18;;;13923:62;-1:-1:-1;;;14001:18:1;;;13994:36;14047:19;;44908:73:0::1;13844:228:1::0;44908:73:0::1;44992:28;45011:8;44992:18;:28::i;:::-;44827:201:::0;:::o;59842:105::-;43991:6;;-1:-1:-1;;;;;43991:6:0;23027:10;44138:23;44130:68;;;;-1:-1:-1;;;44130:68:0;;;;;;;:::i;:::-;59912:18:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;59912:27:0;;::::1;::::0;;;::::1;::::0;;59842:105::o;48248:98::-;48306:7;48333:5;48337:1;48333;:5;:::i;41016:380::-;-1:-1:-1;;;;;41152:19:0;;41144:68;;;;-1:-1:-1;;;41144:68:0;;23037:2:1;41144:68:0;;;23019:21:1;23076:2;23056:18;;;23049:30;23115:34;23095:18;;;23088:62;-1:-1:-1;;;23166:18:1;;;23159:34;23210:19;;41144:68:0;23009:226:1;41144:68:0;-1:-1:-1;;;;;41231:21:0;;41223:68;;;;-1:-1:-1;;;41223:68:0;;14279:2:1;41223:68:0;;;14261:21:1;14318:2;14298:18;;;14291:30;14357:34;14337:18;;;14330:62;-1:-1:-1;;;14408:18:1;;;14401:32;14450:19;;41223:68:0;14251:224:1;41223:68:0;-1:-1:-1;;;;;41304:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41356:32;;27159:25:1;;;41356:32:0;;27132:18:1;41356:32:0;27114:76:1;63249:107:0;63324:24;63330:8;63340:7;63324:5;:24::i;29844:248::-;30054:12;;-1:-1:-1;;;;;30034:16:0;;29990:7;30034:16;;;:7;:16;;;;;;29990:7;;30069:15;;30018:32;;:13;:32;:::i;:::-;30017:49;;;;:::i;:::-;:67;;;;:::i;:::-;30010:74;29844:248;-1:-1:-1;;;;29844:248:0:o;8635:317::-;8750:6;8725:21;:31;;8717:73;;;;-1:-1:-1;;;8717:73:0;;16929:2:1;8717:73:0;;;16911:21:1;16968:2;16948:18;;;16941:30;17007:31;16987:18;;;16980:59;17056:18;;8717:73:0;16901:179:1;8717:73:0;8804:12;8822:9;-1:-1:-1;;;;;8822:14:0;8844:6;8822:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8803:52;;;8874:7;8866:78;;;;-1:-1:-1;;;8866:78:0;;16502:2:1;8866:78:0;;;16484:21:1;16541:2;16521:18;;;16514:30;16580:34;16560:18;;;16553:62;16651:28;16631:18;;;16624:56;16697:19;;8866:78:0;16474:248:1;61466:1775:0;61590:14;23027:10;61634:7;;61590:29;;-1:-1:-1;61634:7:0;;;;;:15;;61645:4;61634:15;61630:424;;;61678:7;;-1:-1:-1;;;;;61670:15:0;;;61678:7;;61670:15;61666:72;;;61706:16;61715:6;-1:-1:-1;;;;;60983:36:0;;;;;:28;:36;;;;;61022:12;60983:51;;60931:111;61706:16;61774:7;;-1:-1:-1;;;;;61768:13:0;;;61774:7;;61768:13;61764:279;;;-1:-1:-1;;;;;61819:36:0;;61802:14;61819:36;;;:28;:36;;;;;;61874:17;61110:12;61095;:27;61050:80;61874:17;61942:11;;61930:23;;:9;:23;:::i;:::-;61914:12;;:39;61910:118;;61978:30;61995:6;62003:4;61978:16;:30::i;:::-;61764:279;;-1:-1:-1;;;;;62087:19:0;;;;;;:13;:19;;;;;;;;62086:20;:42;;;;-1:-1:-1;;;;;;62111:17:0;;;;;;:13;:17;;;;;;;;62110:18;62086:42;62064:103;;;;-1:-1:-1;;;62064:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62186:18:0;;62178:38;;;;-1:-1:-1;;;62178:38:0;;20198:2:1;62178:38:0;;;20180:21:1;20237:1;20217:18;;;20210:29;-1:-1:-1;;;20255:18:1;;;20248:37;20302:18;;62178:38:0;20170:156:1;62178:38:0;-1:-1:-1;;;;;62235:16:0;;62227:36;;;;-1:-1:-1;;;62227:36:0;;18783:2:1;62227:36:0;;;18765:21:1;18822:1;18802:18;;;18795:29;-1:-1:-1;;;18840:18:1;;;18833:37;18887:18;;62227:36:0;18755:156:1;62227:36:0;43991:6;;-1:-1:-1;;;;;62278:15:0;;;43991:6;;62278:15;;;;:32;;-1:-1:-1;62303:7:0;;-1:-1:-1;;;;;62297:13:0;;;62303:7;;62297:13;;62278:32;:60;;;;-1:-1:-1;62328:9:0;;-1:-1:-1;;;;;62314:24:0;;;62328:9;;62314:24;;62278:60;:83;;;;-1:-1:-1;;;;;;62342:19:0;;62356:4;62342:19;;62278:83;:108;;;;-1:-1:-1;;;;;;62365:21:0;;62381:4;62365:21;;62278:108;62274:186;;;62411:16;;;;62403:45;;;;-1:-1:-1;;;62403:45:0;;26344:2:1;62403:45:0;;;26326:21:1;26383:2;26363:18;;;26356:30;-1:-1:-1;;;26402:18:1;;;26395:46;26458:18;;62403:45:0;26316:166:1;62403:45:0;62484:7;;-1:-1:-1;;;;;62476:15:0;;;62484:7;;62476:15;:30;;;;-1:-1:-1;62495:6:0;;;;:11;;62476:30;62472:760;;;62552:6;;62523:17;;62559:5;;62543:15;;62552:6;;62543;:15;:::i;:::-;:21;;;;:::i;:::-;62523:41;-1:-1:-1;62579:18:0;62600;62523:41;62600:6;:18;:::i;:::-;62579:39;-1:-1:-1;62652:22:0;62579:39;62652:9;:22;:::i;:::-;62642:6;:32;62633:57;;;;-1:-1:-1;;;62633:57:0;;18443:2:1;62633:57:0;;;18425:21:1;18482:2;18462:18;;;18455:30;-1:-1:-1;;;18501:18:1;;;18494:41;18552:18;;62633:57:0;18415:161:1;62633:57:0;62705:47;62721:4;62735;62742:9;62705:15;:47::i;:::-;62767:37;62783:4;62789:2;62793:10;62767:15;:37::i;:::-;62472:760;;;;;62832:7;;-1:-1:-1;;;;;62826:13:0;;;62832:7;;62826:13;:29;;;;-1:-1:-1;62843:7:0;;;;;;;:12;;62826:29;62822:410;;;62901:7;;62872:17;;62909:5;;62892:16;;62901:7;;;;;62892:6;:16;:::i;62822:410::-;63187:33;63203:4;63209:2;63213:6;63187:15;:33::i;:::-;61466:1775;;;;:::o;18237:211::-;18381:58;;;-1:-1:-1;;;;;8662:32:1;;18381:58:0;;;8644:51:1;8711:18;;;;8704:34;;;18381:58:0;;;;;;;;;;8617:18:1;;;;18381:58:0;;;;;;;;-1:-1:-1;;;;;18381:58:0;-1:-1:-1;;;18381:58:0;;;18354:86;;18374:5;;18354:19;:86::i;48986:98::-;49044:7;49071:5;49075:1;49071;:5;:::i;49385:98::-;49443:7;49470:5;49474:1;49470;:5;:::i;63364:309::-;63475:21;63509:25;63527:6;63509:17;:25::i;:::-;63545:18;63566:47;63567:21;63594:18;63566:27;:47::i;:::-;63624:41;;63545:68;;-1:-1:-1;;;;;;63624:29:0;;;:41;;;;;63545:68;;63624:41;;;;63545:68;63624:29;:41;;;;;;;;;;;;;;;;;;;;;63364:309;;;;:::o;48629:98::-;48687:7;48714:5;48718:1;48714;:5;:::i;38235:733::-;-1:-1:-1;;;;;38375:20:0;;38367:70;;;;-1:-1:-1;;;38367:70:0;;22631:2:1;38367:70:0;;;22613:21:1;22670:2;22650:18;;;22643:30;22709:34;22689:18;;;22682:62;-1:-1:-1;;;22760:18:1;;;22753:35;22805:19;;38367:70:0;22603:227:1;38367:70:0;-1:-1:-1;;;;;38456:23:0;;38448:71;;;;-1:-1:-1;;;38448:71:0;;12065:2:1;38448:71:0;;;12047:21:1;12104:2;12084:18;;;12077:30;12143:34;12123:18;;;12116:62;-1:-1:-1;;;12194:18:1;;;12187:33;12237:19;;38448:71:0;12037:225:1;38448:71:0;-1:-1:-1;;;;;38616:17:0;;38592:21;38616:17;;;;;;;;;;;38652:23;;;;38644:74;;;;-1:-1:-1;;;38644:74:0;;15356:2:1;38644:74:0;;;15338:21:1;15395:2;15375:18;;;15368:30;15434:34;15414:18;;;15407:62;-1:-1:-1;;;15485:18:1;;;15478:36;15531:19;;38644:74:0;15328:228:1;38644:74:0;-1:-1:-1;;;;;38754:17:0;;;:9;:17;;;;;;;;;;;38774:22;;;38754:42;;38818:20;;;;;;;;:30;;38790:6;;38754:9;38818:30;;38790:6;;38818:30;:::i;:::-;;;;;;;;38883:9;-1:-1:-1;;;;;38866:35:0;38875:6;-1:-1:-1;;;;;38866:35:0;;38894:6;38866:35;;;;27159:25:1;;27147:2;27132:18;;27114:76;38866:35:0;;;;;;;;38914:46;57299:554;63681:413;63740:12;63755:13;:6;63766:1;63755:10;:13::i;:::-;63740:28;-1:-1:-1;63779:17:0;63799:16;:6;63740:28;63799:10;:16::i;:::-;63779:36;-1:-1:-1;63851:21:0;63883:23;63901:4;63883:17;:23::i;:::-;63919:18;63940:41;:21;63966:14;63940:25;:41::i;:::-;63919:62;;63992:35;64005:9;64016:10;63992:12;:35::i;:::-;64043:43;;;28385:25:1;;;28441:2;28426:18;;28419:34;;;28469:18;;;28462:34;;;64043:43:0;;28373:2:1;28358:18;64043:43:0;;;;;;;63681:413;;;;;:::o;64102:489::-;64193:16;;;64207:1;64193:16;;;;;;;;64169:21;;64193:16;;;;;;;;;;-1:-1:-1;64193:16:0;64169:40;;64238:4;64220;64225:1;64220:7;;;;;;-1:-1:-1;;;64220:7:0;;;;;;;;;-1:-1:-1;;;;;64220:23:0;;;:7;;;;;;;;;;:23;;;;64264:9;;:17;;;-1:-1:-1;;;64264:17:0;;;;:9;;;;;:15;;:17;;;;;64220:7;;64264:17;;;;;:9;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64254:4;64259:1;64254:7;;;;;;-1:-1:-1;;;64254:7:0;;;;;;;;;-1:-1:-1;;;;;64254:27:0;;;:7;;;;;;;;;:27;64326:9;;64294:56;;64311:4;;64326:9;64338:11;64294:8;:56::i;:::-;64363:9;;:220;;-1:-1:-1;;;64363:220:0;;-1:-1:-1;;;;;64363:9:0;;;;:61;;:220;;64439:11;;64363:9;;64510:4;;64537;;64557:15;;64363:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64102:489;;:::o;45188:191::-;45281:6;;;-1:-1:-1;;;;;45298:17:0;;;-1:-1:-1;;;;;;45298:17:0;;;;;;;45331:40;;45281:6;;;45298:17;45281:6;;45331:40;;45262:16;;45331:40;45188:191;;:::o;61164:294::-;-1:-1:-1;;;;;61269:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;61247:95;;;;-1:-1:-1;;;61247:95:0;;21226:2:1;61247:95:0;;;21208:21:1;21265:1;21245:18;;;21238:29;-1:-1:-1;;;21283:18:1;;;21276:35;21328:18;;61247:95:0;21198:154:1;61247:95:0;-1:-1:-1;;;;;61353:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;61353:39:0;;;;;;;;;;61410:40;;61353:39;;:31;61410:40;;;61164:294;;:::o;39987:591::-;-1:-1:-1;;;;;40071:21:0;;40063:67;;;;-1:-1:-1;;;40063:67:0;;22229:2:1;40063:67:0;;;22211:21:1;22268:2;22248:18;;;22241:30;22307:34;22287:18;;;22280:62;-1:-1:-1;;;22358:18:1;;;22351:31;22399:19;;40063:67:0;22201:223:1;40063:67:0;-1:-1:-1;;;;;40230:18:0;;40205:22;40230:18;;;;;;;;;;;40267:24;;;;40259:71;;;;-1:-1:-1;;;40259:71:0;;12801:2:1;40259:71:0;;;12783:21:1;12840:2;12820:18;;;12813:30;12879:34;12859:18;;;12852:62;-1:-1:-1;;;12930:18:1;;;12923:32;12972:19;;40259:71:0;12773:224:1;40259:71:0;-1:-1:-1;;;;;40366:18:0;;:9;:18;;;;;;;;;;40387:23;;;40366:44;;40432:12;:22;;40404:6;;40366:9;40432:22;;40404:6;;40432:22;:::i;:::-;;;;-1:-1:-1;;40472:37:0;;27159:25:1;;;40498:1:0;;-1:-1:-1;;;;;40472:37:0;;;;;27147:2:1;27132:18;40472:37:0;;;;;;;57299:554;;;:::o;39255:399::-;-1:-1:-1;;;;;39339:21:0;;39331:65;;;;-1:-1:-1;;;39331:65:0;;25984:2:1;39331:65:0;;;25966:21:1;26023:2;26003:18;;;25996:30;26062:33;26042:18;;;26035:61;26113:18;;39331:65:0;25956:181:1;39331:65:0;39487:6;39471:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;39504:18:0;;:9;:18;;;;;;;;;;:28;;39526:6;;39504:9;:28;;39526:6;;39504:28;:::i;:::-;;;;-1:-1:-1;;39548:37:0;;27159:25:1;;;-1:-1:-1;;;;;39548:37:0;;;39565:1;;39548:37;;27147:2:1;27132:18;39548:37:0;;;;;;;60071:248;;:::o;20810:716::-;21234:23;21260:69;21288:4;21260:69;;;;;;;;;;;;;;;;;21268:5;-1:-1:-1;;;;;21260:27:0;;;:69;;;;;:::i;:::-;21344:17;;21234:95;;-1:-1:-1;21344:21:0;21340:179;;21441:10;21430:30;;;;;;;;;;;;:::i;:::-;21422:85;;;;-1:-1:-1;;;21422:85:0;;24827:2:1;21422:85:0;;;24809:21:1;24866:2;24846:18;;;24839:30;24905:34;24885:18;;;24878:62;-1:-1:-1;;;24956:18:1;;;24949:40;25006:19;;21422:85:0;24799:232:1;64599:505:0;64779:9;;64747:56;;64764:4;;-1:-1:-1;;;;;64779:9:0;64791:11;64747:8;:56::i;:::-;64846:9;;:250;;-1:-1:-1;;;64846:250:0;;64913:4;64846:250;;;10603:34:1;10653:18;;;10646:34;;;64846:9:0;10696:18:1;;;10689:34;;;10739:18;;;10732:34;;;10782:19;;;10775:44;65070:15:0;10835:19:1;;;10828:35;-1:-1:-1;;;;;64846:9:0;;;;:26;;64880:9;;10537:19:1;;64846:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10119:229::-;10256:12;10288:52;10310:6;10318:4;10324:1;10327:12;10256;7636:20;;11526:60;;;;-1:-1:-1;;;11526:60:0;;23774:2:1;11526:60:0;;;23756:21:1;23813:2;23793:18;;;23786:30;23852:31;23832:18;;;23825:59;23901:18;;11526:60:0;23746:179:1;11526:60:0;11600:12;11614:23;11641:6;-1:-1:-1;;;;;11641:11:0;11660:5;11667:4;11641:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11599:73;;;;11690:51;11707:7;11716:10;11728:12;11690:16;:51::i;:::-;11683:58;11239:510;-1:-1:-1;;;;;;;11239:510:0:o;13925:712::-;14075:12;14104:7;14100:530;;;-1:-1:-1;14135:10:0;14128:17;;14100:530;14249:17;;:21;14245:374;;14447:10;14441:17;14508:15;14495:10;14491:2;14487:19;14480:44;14395:148;14590:12;14583:20;;-1:-1:-1;;;14583:20:0;;;;;;;;:::i;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1510:398::-;1578:6;1586;1639:2;1627:9;1618:7;1614:23;1610:32;1607:2;;;1660:6;1652;1645:22;1607:2;1704:9;1691:23;1723:31;1748:5;1723:31;:::i;:::-;1773:5;-1:-1:-1;1830:2:1;1815:18;;1802:32;1843:33;1802:32;1843:33;:::i;:::-;1895:7;1885:17;;;1597:311;;;;;:::o;1913:466::-;1990:6;1998;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:2;;;2080:6;2072;2065:22;2027:2;2124:9;2111:23;2143:31;2168:5;2143:31;:::i;:::-;2193:5;-1:-1:-1;2250:2:1;2235:18;;2222:32;2263:33;2222:32;2263:33;:::i;:::-;2017:362;;2315:7;;-1:-1:-1;;;2369:2:1;2354:18;;;;2341:32;;2017:362::o;2384:392::-;2449:6;2457;2510:2;2498:9;2489:7;2485:23;2481:32;2478:2;;;2531:6;2523;2516:22;2478:2;2575:9;2562:23;2594:31;2619:5;2594:31;:::i;:::-;2644:5;-1:-1:-1;2701:2:1;2686:18;;2673:32;2714:30;2673:32;2714:30;:::i;2781:325::-;2849:6;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:2;;;2931:6;2923;2916:22;2878:2;2975:9;2962:23;2994:31;3019:5;2994:31;:::i;:::-;3044:5;3096:2;3081:18;;;;3068:32;;-1:-1:-1;;;2868:238:1:o;3111:1281::-;3229:6;3237;3290:2;3278:9;3269:7;3265:23;3261:32;3258:2;;;3311:6;3303;3296:22;3258:2;3356:9;3343:23;3385:18;3426:2;3418:6;3415:14;3412:2;;;3447:6;3439;3432:22;3412:2;3490:6;3479:9;3475:22;3465:32;;3535:7;3528:4;3524:2;3520:13;3516:27;3506:2;;3562:6;3554;3547:22;3506:2;3603;3590:16;3625:4;3649:60;3665:43;3705:2;3665:43;:::i;3649:60::-;3731:3;3755:2;3750:3;3743:15;3783:2;3778:3;3774:12;3767:19;;3814:2;3810;3806:11;3862:7;3857:2;3851;3848:1;3844:10;3840:2;3836:19;3832:28;3829:41;3826:2;;;3888:6;3880;3873:22;3826:2;3915:6;3906:15;;3930:238;3944:2;3941:1;3938:9;3930:238;;;4015:3;4002:17;4032:31;4057:5;4032:31;:::i;:::-;4076:18;;3962:1;3955:9;;;;;4114:12;;;;4146;;3930:238;;;-1:-1:-1;4187:5:1;-1:-1:-1;;4230:18:1;;4217:32;;-1:-1:-1;;4261:16:1;;;4258:2;;;4295:6;4287;4280:22;4258:2;;4323:63;4378:7;4367:8;4356:9;4352:24;4323:63;:::i;:::-;4313:73;;;3248:1144;;;;;:::o;4397:251::-;4453:6;4506:2;4494:9;4485:7;4481:23;4477:32;4474:2;;;4527:6;4519;4512:22;4474:2;4571:9;4558:23;4590:28;4612:5;4590:28;:::i;4653:255::-;4720:6;4773:2;4761:9;4752:7;4748:23;4744:32;4741:2;;;4794:6;4786;4779:22;4741:2;4831:9;4825:16;4850:28;4872:5;4850:28;:::i;5189:412::-;5271:6;5279;5332:2;5320:9;5311:7;5307:23;5303:32;5300:2;;;5353:6;5345;5338:22;5606:879;5684:6;5692;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;5766:6;5758;5751:22;5713:2;5811:9;5798:23;5840:18;5881:2;5873:6;5870:14;5867:2;;;5902:6;5894;5887:22;5867:2;5945:6;5934:9;5930:22;5920:32;;5990:7;5983:4;5979:2;5975:13;5971:27;5961:2;;6017:6;6009;6002:22;5961:2;6058;6045:16;6080:4;6103:2;6099;6096:10;6093:2;;;6109:18;;:::i;:::-;6151:53;6194:2;6175:13;;-1:-1:-1;;6171:27:1;6167:36;;6151:53;:::i;:::-;6138:66;;6227:2;6220:5;6213:17;6267:7;6262:2;6257;6253;6249:11;6245:20;6242:33;6239:2;;;6293:6;6285;6278:22;6239:2;6353;6348;6344;6340:11;6335:2;6328:5;6324:14;6311:45;6376:14;;;6372:23;;6365:39;;;;6380:5;6460:18;;;;6447:32;;-1:-1:-1;;;5703:782:1:o;6490:292::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:2;;;6622:6;6614;6607:22;6569:2;6666:9;6653:23;6716:6;6709:5;6705:18;6698:5;6695:29;6685:2;;6743:6;6735;6728:22;6787:190;6846:6;6899:2;6887:9;6878:7;6874:23;6870:32;6867:2;;;6920:6;6912;6905:22;6867:2;-1:-1:-1;6948:23:1;;6857:120;-1:-1:-1;6857:120:1:o;6982:194::-;7052:6;7105:2;7093:9;7084:7;7080:23;7076:32;7073:2;;;7126:6;7118;7111:22;7073:2;-1:-1:-1;7154:16:1;;7063:113;-1:-1:-1;7063:113:1:o;7181:316::-;7269:6;7277;7285;7338:2;7326:9;7317:7;7313:23;7309:32;7306:2;;;7359:6;7351;7344:22;7306:2;7393:9;7387:16;7377:26;;7443:2;7432:9;7428:18;7422:25;7412:35;;7487:2;7476:9;7472:18;7466:25;7456:35;;7296:201;;;;;:::o;7502:258::-;7544:3;7582:5;7576:12;7609:6;7604:3;7597:19;7625:63;7681:6;7674:4;7669:3;7665:14;7658:4;7651:5;7647:16;7625:63;:::i;:::-;7742:2;7721:15;-1:-1:-1;;7717:29:1;7708:39;;;;7749:4;7704:50;;7552:208;-1:-1:-1;;7552:208:1:o;7765:274::-;7894:3;7932:6;7926:13;7948:53;7994:6;7989:3;7982:4;7974:6;7970:17;7948:53;:::i;:::-;8017:16;;;;;7902:137;-1:-1:-1;;7902:137:1:o;9058:388::-;-1:-1:-1;;;;;9263:32:1;;9245:51;;9332:2;9327;9312:18;;9305:30;;;-1:-1:-1;;9352:45:1;;9378:18;;9370:6;9352:45;:::i;:::-;9344:53;;9433:6;9428:2;9417:9;9413:18;9406:34;9235:211;;;;;;:::o;11638:220::-;11787:2;11776:9;11769:21;11750:4;11807:45;11848:2;11837:9;11833:18;11825:6;11807:45;:::i;15561:402::-;15763:2;15745:21;;;15802:2;15782:18;;;15775:30;15841:34;15836:2;15821:18;;15814:62;-1:-1:-1;;;15907:2:1;15892:18;;15885:36;15953:3;15938:19;;15735:228::o;17492:407::-;17694:2;17676:21;;;17733:2;17713:18;;;17706:30;17772:34;17767:2;17752:18;;17745:62;-1:-1:-1;;;17838:2:1;17823:18;;17816:41;17889:3;17874:19;;17666:233::o;20331:356::-;20533:2;20515:21;;;20552:18;;;20545:30;20611:34;20606:2;20591:18;;20584:62;20678:2;20663:18;;20505:182::o;25036:335::-;25238:2;25220:21;;;25277:2;25257:18;;;25250:30;-1:-1:-1;;;25311:2:1;25296:18;;25289:41;25362:2;25347:18;;25210:161::o;27195:983::-;27457:4;27505:3;27494:9;27490:19;27536:6;27525:9;27518:25;27562:2;27600:6;27595:2;27584:9;27580:18;27573:34;27643:3;27638:2;27627:9;27623:18;27616:31;27667:6;27702;27696:13;27733:6;27725;27718:22;27771:3;27760:9;27756:19;27749:26;;27810:2;27802:6;27798:15;27784:29;;27831:4;27844:195;27858:6;27855:1;27852:13;27844:195;;;27923:13;;-1:-1:-1;;;;;27919:39:1;27907:52;;28014:15;;;;27979:12;;;;27955:1;27873:9;27844:195;;;-1:-1:-1;;;;;;;28095:32:1;;;;28090:2;28075:18;;28068:60;-1:-1:-1;;;28159:3:1;28144:19;28137:35;28056:3;27466:712;-1:-1:-1;;;27466:712:1:o;28696:275::-;28767:2;28761:9;28832:2;28813:13;;-1:-1:-1;;28809:27:1;28797:40;;28867:18;28852:34;;28888:22;;;28849:62;28846:2;;;28914:18;;:::i;:::-;28950:2;28943:22;28741:230;;-1:-1:-1;28741:230:1:o;28976:183::-;29036:4;29069:18;29061:6;29058:30;29055:2;;;29091:18;;:::i;:::-;-1:-1:-1;29136:1:1;29132:14;29148:4;29128:25;;29045:114::o;29164:128::-;29204:3;29235:1;29231:6;29228:1;29225:13;29222:2;;;29241:18;;:::i;:::-;-1:-1:-1;29277:9:1;;29212:80::o;29297:217::-;29337:1;29363;29353:2;;-1:-1:-1;;;29388:31:1;;29442:4;29439:1;29432:15;29470:4;29395:1;29460:15;29353:2;-1:-1:-1;29499:9:1;;29343:171::o;29519:168::-;29559:7;29625:1;29621;29617:6;29613:14;29610:1;29607:21;29602:1;29595:9;29588:17;29584:45;29581:2;;;29632:18;;:::i;:::-;-1:-1:-1;29672:9:1;;29571:116::o;29692:125::-;29732:4;29760:1;29757;29754:8;29751:2;;;29765:18;;:::i;:::-;-1:-1:-1;29802:9:1;;29741:76::o;29822:258::-;29894:1;29904:113;29918:6;29915:1;29912:13;29904:113;;;29994:11;;;29988:18;29975:11;;;29968:39;29940:2;29933:10;29904:113;;;30035:6;30032:1;30029:13;30026:2;;;-1:-1:-1;;30070:1:1;30052:16;;30045:27;29875:205::o;30085:380::-;30164:1;30160:12;;;;30207;;;30228:2;;30282:4;30274:6;30270:17;30260:27;;30228:2;30335;30327:6;30324:14;30304:18;30301:38;30298:2;;;30381:10;30376:3;30372:20;30369:1;30362:31;30416:4;30413:1;30406:15;30444:4;30441:1;30434:15;30298:2;;30140:325;;;:::o;30470:135::-;30509:3;-1:-1:-1;;30530:17:1;;30527:2;;;30550:18;;:::i;:::-;-1:-1:-1;30597:1:1;30586:13;;30517:88::o;30610:127::-;30671:10;30666:3;30662:20;30659:1;30652:31;30702:4;30699:1;30692:15;30726:4;30723:1;30716:15;30742:127;30803:10;30798:3;30794:20;30791:1;30784:31;30834:4;30831:1;30824:15;30858:4;30855:1;30848:15;30874:131;-1:-1:-1;;;;;30949:31:1;;30939:42;;30929:2;;30995:1;30992;30985:12;31010:118;31096:5;31089:13;31082:21;31075:5;31072:32;31062:2;;31118:1;31115;31108:12

Swarm Source

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