Contract 0x71ac17934b60a4610dc58b715b61e45dcbde4054 1

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x59c0ca5fc33b7430f0e8e04b4086269cd4409e48565c9558455eca7f4723e22396050362021-07-30 14:59:2244 secs ago0x6e269c13722ba25e800c8757cbda7be2c1544cd1 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00087636
0x82126de07e983e1d1df0e7ea4f3e8df5e834e790fd2a0ef87522fe9d18facc7096050222021-07-30 14:58:401 min ago0xb16408847465ef94d5c796e8554a0b29c8fcfb4c IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00098921
0xb6b095c5cf59aad88b8d64f41978bf47f56fe07913840fe482181e2ca842530f96050082021-07-30 14:57:582 mins ago0x84eab7eccde84781e709e996de460902cb62307c IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.214566865541436 BNB0.00090697
0x695d13704151f2c576b8cf2754a7ece57418f07971025fb7f0b1f9adab465fc696049962021-07-30 14:57:222 mins ago0x8e30a68236dcc45190597a6da69664e0677731a4 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.03 BNB0.00096159
0xee2dd93710fbe373f9f6ef21a201038987271c63cefeff8365b5233334b5beb996049892021-07-30 14:57:013 mins ago0x632ddcc0462c02f40edfd5777ab52a0c1ceb36c8 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000930955
0x184df3262f384965ae48c508f29771aa576934a090d75cadc474989fda687b6d96047432021-07-30 14:44:1415 mins ago0x7207bd62e6ebd17246578db18d2f8ae1d48f606d IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.100348635609151 BNB0.00084772
0x8b6d5236fac67b492ca02e4dc2cf0d201a290bbdf8020feed8dbb6424471e8ab96046812021-07-30 14:40:4719 mins ago0xbd71b3479483f57c4a89398ca8825a8e6f641a45 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.08267328040173 BNB0.000868035
0x63c923e0f185dde0118f79003459608a8db8fbf3fe49f420a51c22b7914e5ee096046682021-07-30 14:39:5920 mins ago0x0a07c94238d982df773344074a836cca1508c22d IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000844205
0xe36cfc9a54f41b6d8313e459b66356b993f93b6aae875cd591d1d57cc88030ff96046642021-07-30 14:39:4620 mins ago0x174cc02170ae5bf25c891c6f22f07f798a5d7b21 IN  0x71ac17934b60a4610dc58b715b61e45dcbde405419.2 BNB0.00090464
0x993c4d6986a35f3710c26007a2176fd61bda00651db56e64ac3633236a9c853b96046622021-07-30 14:39:3820 mins ago0x6296e539663a074e992c53c785fa5f6cc70c6f3e IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.5 BNB0.000959025
0xc79014999ba021c3748b7b75a09d81f3c9d79173a54b86b1c6d0709da519c3e896046272021-07-30 14:37:3922 mins ago0xe26cab47d8d3527f8bdd306996760a33d60146ed IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.48 BNB0.00096165
0x6865985b32d300adf2122bcddbfc43242f062f8f3591cfd01d7881a15867c89e96045822021-07-30 14:35:2424 mins ago0x174cc02170ae5bf25c891c6f22f07f798a5d7b21 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000905265
0x8665d6bd5dafd4965839fdee72b24bcded8f15c866d052ab5c14d5dac4330d3c96045332021-07-30 14:32:5727 mins ago0x9cb9eaf724629243ebf51988d955a0bc22d4d4bb IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.147483397820753 BNB0.000867975
0x3a9b3cdf0f2f9e1866f1e09ae142311d05a36185a0f2d391c8fae125a887210896045302021-07-30 14:32:4827 mins ago0xa283c7f05aec0d7f2ef2b510557bd78d9b34e722 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.0008016
0x74a49f178ffc831c39304b133dd8e2f5f617f9e7973ebd695c0abd26f2caefe696044762021-07-30 14:30:0630 mins ago0x6296e539663a074e992c53c785fa5f6cc70c6f3e IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000932485
0xde6f54ae0434500aa3559b988c4caaee1043c028a8709a76996172b19300ae1396043902021-07-30 14:25:4834 mins ago0xf83d694a4cba5d1377cae54826fe0d0d133184e9 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.055991217681831 BNB0.00077266
0x90d1c472d31e929b3412c38289542c99854b4c1148a1107e55a620586a38ab4f96043882021-07-30 14:25:4234 mins ago0xf36841ffac0a5c9cb3214dab9db266ff8d8b0958 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00080148
0x0389aa1ffcf4091ecfeb3b43b2b83c93e7341397598bf2ee716fed813786ad9296043262021-07-30 14:22:3637 mins ago0xad52938d24c37e2a6d3b6bb49b86d94d56919387 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000817836
0x16605454f5b1b1276192342687b1e10572bed1e44eff12b09001c2e456fff2ef96042992021-07-30 14:21:1338 mins ago0x48a6ba301a8192350cfee8c76f5430ca6a248e77 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00087648
0xafcc63a1cd75c0331d7afc95f0a820c2fb416555f47290a8f406eaec4a25f48296042822021-07-30 14:20:2239 mins ago0x4da5f86b42760f4935a8b467b04d99bac57e2b22 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.165415953270247 BNB0.00084772
0xb366de5027e15a131821ee602d4d6a2fcb3666b86be41b298c9596eb4693b38796042552021-07-30 14:19:0141 mins ago0x40541ffb38ae1e061cc54f173b4e986ef30b40dd IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.05885845606098 BNB0.000847245
0x3c2870ba3f8c8b57bfeb93358884a2b7d6025b1890ace4472952f885fc44cfde96042352021-07-30 14:18:0142 mins ago0xd2af21b32915de66497ab105f9b10f2769ea7653 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540.015737587804449 BNB0.00092224
0x28d276c88a5e98fc94ce13d585e48d4c677fd132bb394225537171c4e1bb7a1196041972021-07-30 14:16:0644 mins ago0xa527263fcf9244df6dddc1d24a6e7a49822fc72b IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00080148
0x0c3324916d2ef58e73c009c8002b8e68919efc6f21a21139d9f392e2dee0379096041862021-07-30 14:15:3344 mins ago0x7f21b38405330b409b8397d392116a1ea0d3014d IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.000931305
0x1abd55812873c8af703e5a688f9d0d2e7d1f342cec4d79913d9c7d8abc9ad27196041752021-07-30 14:15:0045 mins ago0x07010a60805d0fb536abdb688d5db7109bfada46 IN  0x71ac17934b60a4610dc58b715b61e45dcbde40540 BNB0.00081652
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb6b095c5cf59aad88b8d64f41978bf47f56fe07913840fe482181e2ca842530f96050082021-07-30 14:57:582 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x84eab7eccde84781e709e996de460902cb62307c1 wei
0xb6b095c5cf59aad88b8d64f41978bf47f56fe07913840fe482181e2ca842530f96050082021-07-30 14:57:582 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.214566865541436481 BNB
0x695d13704151f2c576b8cf2754a7ece57418f07971025fb7f0b1f9adab465fc696049962021-07-30 14:57:222 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x8e30a68236dcc45190597a6da69664e0677731a41 wei
0x695d13704151f2c576b8cf2754a7ece57418f07971025fb7f0b1f9adab465fc696049962021-07-30 14:57:222 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.029999999999999999 BNB
0x184df3262f384965ae48c508f29771aa576934a090d75cadc474989fda687b6d96047432021-07-30 14:44:1415 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.100348635609151462 BNB
0x8b6d5236fac67b492ca02e4dc2cf0d201a290bbdf8020feed8dbb6424471e8ab96046812021-07-30 14:40:4719 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.08267328040173023 BNB
0xe36cfc9a54f41b6d8313e459b66356b993f93b6aae875cd591d1d57cc88030ff96046642021-07-30 14:39:4620 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x174cc02170ae5bf25c891c6f22f07f798a5d7b211 wei
0xe36cfc9a54f41b6d8313e459b66356b993f93b6aae875cd591d1d57cc88030ff96046642021-07-30 14:39:4620 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token19.199999999999999999 BNB
0x993c4d6986a35f3710c26007a2176fd61bda00651db56e64ac3633236a9c853b96046622021-07-30 14:39:3820 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x6296e539663a074e992c53c785fa5f6cc70c6f3e1 wei
0x993c4d6986a35f3710c26007a2176fd61bda00651db56e64ac3633236a9c853b96046622021-07-30 14:39:3820 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.499999999999999999 BNB
0xc79014999ba021c3748b7b75a09d81f3c9d79173a54b86b1c6d0709da519c3e896046272021-07-30 14:37:3922 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540xe26cab47d8d3527f8bdd306996760a33d60146ed1 wei
0xc79014999ba021c3748b7b75a09d81f3c9d79173a54b86b1c6d0709da519c3e896046272021-07-30 14:37:3922 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.479999999999999999 BNB
0x6865985b32d300adf2122bcddbfc43242f062f8f3591cfd01d7881a15867c89e96045822021-07-30 14:35:2424 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x174cc02170ae5bf25c891c6f22f07f798a5d7b2119.202769180549448774 BNB
0x6865985b32d300adf2122bcddbfc43242f062f8f3591cfd01d7881a15867c89e96045822021-07-30 14:35:2424 mins ago Binance: WBNB Token 0x71ac17934b60a4610dc58b715b61e45dcbde405419.202769180549448774 BNB
0x8665d6bd5dafd4965839fdee72b24bcded8f15c866d052ab5c14d5dac4330d3c96045332021-07-30 14:32:5727 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.147483397820753197 BNB
0xde6f54ae0434500aa3559b988c4caaee1043c028a8709a76996172b19300ae1396043902021-07-30 14:25:4834 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.055991217681831836 BNB
0xafcc63a1cd75c0331d7afc95f0a820c2fb416555f47290a8f406eaec4a25f48296042822021-07-30 14:20:2239 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.165415953270247764 BNB
0xb366de5027e15a131821ee602d4d6a2fcb3666b86be41b298c9596eb4693b38796042552021-07-30 14:19:0141 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.058858456060980634 BNB
0x3c2870ba3f8c8b57bfeb93358884a2b7d6025b1890ace4472952f885fc44cfde96042352021-07-30 14:18:0142 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.015737587804449649 BNB
0x41fccf3af2e4caf9e0b4184d7352db5e6ce64ceb4aff524c4363b2f8c03bc46096041642021-07-30 14:14:2745 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.079957587349931767 BNB
0xad09f1509d8e42dd0378166bb38ace2fd1c4dbe4fd42d9cbb103d8ba38d45bd596041482021-07-30 14:13:3946 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token3.09207551034796344 BNB
0xad98d4c6678fb4bf2956e1d4e1213fe592821c3b8c7e01f6a6a6a02984034fc496041132021-07-30 14:11:5448 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x80ca4fc6076f098854cb9b131d210812005d58790.002772076050154857 BNB
0xad98d4c6678fb4bf2956e1d4e1213fe592821c3b8c7e01f6a6a6a02984034fc496041132021-07-30 14:11:5448 mins ago Binance: WBNB Token 0x71ac17934b60a4610dc58b715b61e45dcbde40540.002772076050154857 BNB
0x084dada73a58dc93b48aa0ff5f62d39d8d8d0bb17a838348fecfe6bdc7692edb96040892021-07-30 14:10:4249 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde4054 Binance: WBNB Token0.080469847043142076 BNB
0x0bb83faf351cb26553c548dc814f934b605dcb19afcd8730735afbea370ab16496040882021-07-30 14:10:3949 mins ago 0x71ac17934b60a4610dc58b715b61e45dcbde40540x40541ffb38ae1e061cc54f173b4e986ef30b40dd3.101866260408906537 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WardenswapV2Router02

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// ((/*,                                                                    ,*((/,.
// &&@@&&%#/*.                                                        .*(#&&@@@@%. 
// &&@@@@@@@&%(.                                                    ,#%&@@@@@@@@%. 
// &&@@@@@@@@@&&(,                                                ,#&@@@@@@@@@@@%. 
// &&@@@@@@@@@@@&&/.                                            .(&&@@@@@@@@@@@@%. 
// %&@@@@@@@@@@@@@&(,                                          *#&@@@@@@@@@@@@@@%. 
// #&@@@@@@@@@@@@@@&#*                                       .*#@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@#.                                      ,%&@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@%(,                                    ,(&@@@@@@@@@@@@@@@@&#. 
// #&@@@@@@@@@@@@@@@@&&/                                   .(%&@@@@@@@@@@@@@@@@&#. 
// #%@@@@@@@@@@@@@@@@@@(.               ,(/,.              .#&@@@@@@@@@@@@@@@@@&#. 
// (%@@@@@@@@@@@@@@@@@@#*.            ./%&&&/.            .*%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#*.           *#&@@@@&%*.          .*%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#/.         ./#@@@@@@@@%(.         ./%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@#/.        ./&@@@@@@@@@@&(*        ,/%@@@@@@@@@@@@@@@@@@%(. 
// (%@@@@@@@@@@@@@@@@@@%/.       ,#&@@@@@@@@@@@@&#,.      ,/%@@@@@@@@@@@@@@@@@@%(. 
// /%@@@@@@@@@@@@@@@@@@#/.      *(&@@@@@@@@@@@@@@&&*      ./%@@@@@@@@@@@@@@@@@&%(. 
// /%@@@@@@@@@@@@@@@@@@#/.     .(&@@@@@@@@@@@@@@@@@#*.    ,/%@@@@@@@@@@@@@@@@@&#/. 
// ,#@@@@@@@@@@@@@@@@@@#/.    ./%@@@@@@@@@@@@@@@@@@&#,    ,/%@@@@@@@@@@@@@@@@@&(,  
//  /%&@@@@@@@@@@@@@@@@#/.    *#&@@@@@@@@@@@@@@@@@@@&*    ,/%@@@@@@@@@@@@@@@@&%*   
//  .*#&@@@@@@@@@@@@@@@#/.    /&&@@@@@@@@@@@@@@@@@@@&/.   ,/%@@@@@@@@@@@@@@@@#*.   
//    ,(&@@@@@@@@@@@@@@#/.    /@@@@@@@@@@@@@@@@@@@@@&(,   ,/%@@@@@@@@@@@@@@%(,     
//     .*(&&@@@@@@@@@@@#/.    /&&@@@@@@@@@@@@@@@@@@@&/,   ,/%@@@@@@@@@@@&%/,       
//        ./%&@@@@@@@@@#/.    *#&@@@@@@@@@@@@@@@@@@@%*    ,/%@@@@@@@@@&%*          
//           ,/#%&&@@@@#/.     ,#&@@@@@@@@@@@@@@@@@#/.    ,/%@@@@&&%(/,            
//               ./#&@@%/.      ,/&@@@@@@@@@@@@@@%(,      ,/%@@%#*.                
//                   .,,,         ,/%&@@@@@@@@&%(*        .,,,.                    
//                                   ,/%&@@@%(*.                                   
//  .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,**((/*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
//                                                                                                                                                                                                                                                                                                            
//                                                                                             

// File: @wardenswap/v2-core/contracts/interfaces/IWardenswapV2Factory.sol

pragma solidity >=0.5.0;

interface IWardenswapV2Factory {
    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: @wardenswap/lib/contracts/libraries/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
}

// File: contracts/interfaces/IWardenswapV2Router01.sol

pragma solidity >=0.6.2;

interface IWardenswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() 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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, 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 removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    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 removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(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);
}

// File: contracts/interfaces/IWardenswapV2Router02.sol

pragma solidity >=0.6.2;


interface IWardenswapV2Router02 is IWardenswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @wardenswap/v2-core/contracts/interfaces/IWardenswapV2Pair.sol

pragma solidity >=0.5.0;

interface IWardenswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

// File: contracts/libraries/WardenswapV2Library.sol

pragma solidity >=0.5.0;



library WardenswapV2Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'WardenswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'WardenswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'fbbcb3ce9944dd53a7ef447076d0e4e4811911365339bab292e4733d5b37a120' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IWardenswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'WardenswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'WardenswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'WardenswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WardenswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'WardenswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'WardenswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'WardenswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'WardenswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// File: contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

// File: contracts/WardenswapV2Router02.sol

pragma solidity =0.6.6;








contract WardenswapV2Router02 is IWardenswapV2Router02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'WardenswapV2Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IWardenswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IWardenswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = WardenswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = WardenswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'WardenswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = WardenswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'WardenswapV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = WardenswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IWardenswapV2Pair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = WardenswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IWardenswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = WardenswapV2Library.pairFor(factory, tokenA, tokenB);
        IWardenswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IWardenswapV2Pair(pair).burn(to);
        (address token0,) = WardenswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'WardenswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'WardenswapV2Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    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 virtual override returns (uint amountA, uint amountB) {
        address pair = WardenswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IWardenswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = WardenswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWardenswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = WardenswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWardenswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = WardenswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? WardenswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IWardenswapV2Pair(WardenswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = WardenswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = WardenswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WardenswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'WardenswapV2Router: INVALID_PATH');
        amounts = WardenswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'WardenswapV2Router: INVALID_PATH');
        amounts = WardenswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WardenswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'WardenswapV2Router: INVALID_PATH');
        amounts = WardenswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'WardenswapV2Router: INVALID_PATH');
        amounts = WardenswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'WardenswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WardenswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = WardenswapV2Library.sortTokens(input, output);
            IWardenswapV2Pair pair = IWardenswapV2Pair(WardenswapV2Library.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = WardenswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? WardenswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'WardenswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(WardenswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'WardenswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WardenswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'WardenswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return WardenswapV2Library.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return WardenswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return WardenswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return WardenswapV2Library.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return WardenswapV2Library.getAmountsIn(factory, amountOut, path);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200578e3803806200578e833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61560762000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061441e528061446152806147ab528061498c5280614ef15280614fd2528061505252506156076000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613ce9565b50965096945050505050565b6000610f44848484613e26565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153ab602e913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1661409a565b8560008151811061124a57fe5b6020026020010151614185565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614355915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613ce9565b509695505050505050565b60606113917f000000000000000000000000000000000000000000000000000000000000000084846145dc565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f61409a565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153ab602e913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614355915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61183d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145dc92505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061540a602a913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061409a565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a614185565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614754915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614ae716565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153ab602e913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614754915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153ab602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613ce9565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806153ab602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614355915050565b5095945050505050565b6000610f44848484614b59565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6126027f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145dc92505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061540a602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614c7d565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613ce9565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614754915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c61409a565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d5d565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155a96029913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155036029913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f4a565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061409a565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614e9a565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e61409a565b90506132db8d338388614185565b6132e78c338387614185565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614e9a565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061409a565b90506134aa8b338388614185565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613ce9565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f57617264656e737761705632526f757465723a20455850495245440000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57617264656e737761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6138867f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145dc92505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061540a602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614355915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613ce9565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615554602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d23565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dc2576040519150601f19603f3d011682016040523d82523d6000602084013e613dc7565b606091505b5050905080613e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806154346034913960400191505060405180910390fd5b505050565b6000808411613e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615468602e913960400191505060405180910390fd5b600083118015613e905750600082115b613ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806154d8602b913960400191505060405180910390fd5b6000613ef9856103e563ffffffff61519b16565b90506000613f0d828563ffffffff61519b16565b90506000613f3383613f27886103e863ffffffff61519b16565b9063ffffffff61522116565b9050808281613f3e57fe5b04979650505050505050565b6060600282511015613fa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154966021913960400191505060405180910390fd5b815167ffffffffffffffff81118015613fbf57600080fd5b50604051908082528060200260200182016040528015613fe9578160200160208202803683370190505b5090508281600081518110613ffa57fe5b60200260200101818152505060005b60018351038110156140925760008061404c8786858151811061402857fe5b602002602001015187866001018151811061403f57fe5b6020026020010151615293565b9150915061406e84848151811061405f57fe5b60200260200101518383613e26565b84846001018151811061407d57fe5b60209081029190910101525050600101614009565b509392505050565b60008060006140a98585614d5d565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527ffbbcb3ce9944dd53a7ef447076d0e4e4811911365339bab292e4733d5b37a120609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061426357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614226565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142c5576040519150601f19603f3d011682016040523d82523d6000602084013e6142ca565b606091505b50915091508180156142f85750805115806142f857508080602001905160208110156142f557600080fd5b50515b61434d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806153d96031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145d65760008084838151811061437357fe5b602002602001015185846001018151811061438a57fe5b60200260200101519150915060006143a28383614d5d565b50905060008785600101815181106143b657fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146143fe57826000614402565b6000835b91509150600060028a51038810614419578861445a565b61445a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061444d57fe5b602002602001015161409a565b90506144877f0000000000000000000000000000000000000000000000000000000000000000888861409a565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144d1576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561455c578181015183820152602001614544565b50505050905090810190601f1680156145895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145ab57600080fd5b505af11580156145bf573d6000803e3d6000fd5b505060019099019850614358975050505050505050565b50505050565b6060600282511015614639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154966021913960400191505060405180910390fd5b815167ffffffffffffffff8111801561465157600080fd5b5060405190808252806020026020018201604052801561467b578160200160208202803683370190505b509050828160018351038151811061468f57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015614092576000806146ef878660018603815181106146db57fe5b602002602001015187868151811061403f57fe5b9150915061471184848151811061470257fe5b60200260200101518383614b59565b84600185038151811061472057fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146bf565b60005b6001835103811015613e215760008084838151811061477257fe5b602002602001015185846001018151811061478957fe5b60200260200101519150915060006147a18383614d5d565b50905060006147d17f0000000000000000000000000000000000000000000000000000000000000000858561409a565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561481f57600080fd5b505afa158015614833573d6000803e3d6000fd5b505050506040513d606081101561484957600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614893578284614896565b83835b9150915061491b828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614928868383613e26565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461496c57826000614970565b6000835b91509150600060028c51038a10614987578a6149bb565b6149bb7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061444d57fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a6b578181015183820152602001614a53565b50505050905090810190601f168015614a985780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614aba57600080fd5b505af1158015614ace573d6000803e3d6000fd5b50506001909b019a506147579950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061537c602f913960400191505060405180910390fd5b600083118015614bc35750600082115b614c18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806154d8602b913960400191505060405180910390fd5b6000614c3c6103e8614c30868863ffffffff61519b16565b9063ffffffff61519b16565b90506000614c566103e5614c30868963ffffffff614ae716565b9050614c736001828481614c6657fe5b049063ffffffff61522116565b9695505050505050565b6000808411614cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155816028913960400191505060405180910390fd5b600083118015614ce75750600082115b614d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806154d8602b913960400191505060405180910390fd5b82614d4d858463ffffffff61519b16565b81614d5457fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061552c6028913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e1f578284614e22565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614e93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154b76021913960400191505060405180910390fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f3a57600080fd5b505afa158015614f4e573d6000803e3d6000fd5b505050506040513d6020811015614f6457600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561504a57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561501d57600080fd5b505af1158015615031573d6000803e3d6000fd5b505050506040513d602081101561504757600080fd5b50505b6000806150787f00000000000000000000000000000000000000000000000000000000000000008b8b615293565b9150915081600014801561508a575080155b1561509a5787935086925061518e565b60006150a7898484614c7d565b90508781116151145785811015615109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155036029913960400191505060405180910390fd5b88945092508261518c565b6000615121898486614c7d565b90508981111561512d57fe5b87811015615186576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155a96029913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151b6575050808202828282816151b357fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152a28585614d5d565b5090506000806152b388888861409a565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156152f857600080fd5b505afa15801561530c573d6000803e3d6000fd5b505050506040513d606081101561532257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461536957808261536c565b81815b9099909850965050505050505056fe57617264656e7377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5457617264656e737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c656457617264656e737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656457617264656e7377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5457617264656e7377617056324c6962726172793a20494e56414c49445f5041544857617264656e7377617056324c6962726172793a205a45524f5f4144445245535357617264656e7377617056324c6962726172793a20494e53554646494349454e545f4c495155494449545957617264656e737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e5457617264656e7377617056324c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656457617264656e7377617056324c6962726172793a20494e53554646494349454e545f414d4f554e5457617264656e737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54a264697066735822122017b35f9df4b931ee5611996bbefea5014b80be9d2ca0fb1fd06f97f540d0ccdb64736f6c634300060600330000000000000000000000003657952d7ba5a0a4799809b5b6fdff9ec5b46293000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000003657952d7ba5a0a4799809b5b6fdff9ec5b46293000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003657952d7ba5a0a4799809b5b6fdff9ec5b46293
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

19575:18762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20066:10;:18;20080:4;20066:18;;20059:26;;;;19575:18762;;12:1:-1;9;2:12;24267:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24267:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24267:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37269:265;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37269:265:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37269:265:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31508:862;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31508:862:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31508:862:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31508:862:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31508:862:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31508:862:0;;-1:-1:-1;31508:862:0;-1:-1:-1;31508:862:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31508:862:0;;;;;;;;;;;;;;;;;38078:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38078:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38078:256:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38078:256:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38078:256:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38078:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38078:256:0;;-1:-1:-1;38078:256:0;;-1:-1:-1;;;;;38078:256:0:i;24946:683::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24946:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24946:683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28683:637::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28683:637:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28683:637:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28683:637:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28683:637:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28683:637:0;;-1:-1:-1;28683:637:0;-1:-1:-1;28683:637:0;;;;;;;;;:::i;30662:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30662:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30662:840:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30662:840:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30662:840:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30662:840:0;;-1:-1:-1;30662:840:0;-1:-1:-1;30662:840:0;;;;;;;;;:::i;27095:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27095:724:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;27095:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34583:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34583:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34583:720:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34583:720:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34583:720:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34583:720:0;;-1:-1:-1;34583:720:0;-1:-1:-1;34583:720:0;;;;;;;;;:::i;36174:852::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36174:852:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36174:852:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36174:852:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36174:852:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36174:852:0;;-1:-1:-1;36174:852:0;-1:-1:-1;36174:852:0;;;;;;;;;:::i;29947:709::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29947:709:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29947:709:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29947:709:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29947:709:0;;-1:-1:-1;29947:709:0;-1:-1:-1;29947:709:0;;;;;;;;;:::i;37542:264::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37542:264:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37542:264:0;;;;;;;;;;;;:::i;29326:615::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29326:615:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29326:615:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29326:615:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29326:615:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29326:615:0;;-1:-1:-1;29326:615:0;-1:-1:-1;29326:615:0;;;;;;;;;:::i;19717:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19717:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37070:191;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37070:191:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37070:191:0;;;;;;;;;;;;:::i;26389:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26389:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26389:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35309:859::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35309:859:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35309:859:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35309:859:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35309:859:0;;-1:-1:-1;35309:859:0;-1:-1:-1;35309:859:0;;;;;;;;;:::i;23378:883::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23378:883:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23378:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19669:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19669:41:0;;;:::i;37814:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37814:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37814:256:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37814:256:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37814:256:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37814:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37814:256:0;;-1:-1:-1;37814:256:0;;-1:-1:-1;;;;;37814:256:0:i;25635:675::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25635:675:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;25635:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21605:744::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21605:744:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21605:744:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22355:980;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22355:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32376:822::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32376:822:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32376:822:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32376:822:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32376:822:0;;-1:-1:-1;32376:822:0;-1:-1:-1;32376:822:0;;;;;;;;;:::i;24267:673::-;24504:16;24522:14;24485:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24576:196:::1;24606:5;24626:4;24645:9;24669:14;24698:12;24733:4;24753:8;24576:15;:196::i;:::-;24549:223:::0;;-1:-1:-1;24549:223:0;-1:-1:-1;24783:51:0::1;24811:5:::0;24818:2;24549:223;24783:27:::1;:51::i;:::-;24851:4;24845:20;;;24866:9;24845:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24845:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24845:31:0;;;;24887:45;24918:2;24922:9;24887:30;:45::i;:::-;24267:673:::0;;;;;;;;;;:::o;37269:265::-;37422:14;37461:65;37494:8;37504:9;37515:10;37461:32;:65::i;:::-;37454:72;37269:265;-1:-1:-1;;;;37269:265:0:o;31508:862::-;31722:21;31694:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31769:29:::1;31794:4;31769:29;:4:::0;;31774:15;;;31769:21;;::::1;;;;;;;;;;;;;:29;;;31761:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31856:58;31890:7;31899:8;31909:4;;31856:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31856:33:0::1;::::0;-1:-1:-1;;;31856:58:0:i:1;:::-;31846:68;;31964:12;31933:7;31958:1;31941:7;:14;:18;31933:27;;;;;;;;;;;;;;:43;;31925:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32038:144;32084:4;;32089:1;32084:7;;;;;;;;;;;;;;;32093:10;32105:54;32133:7;32142:4;;32147:1;32142:7;;;;;;;;;;;;;;;32151:4;;32156:1;32151:7;;;;;;;;;;;;;;;32105:27;:54::i;:::-;32161:7;32169:1;32161:10;;;;;;;;;;;;;;32038:31;:144::i;:::-;32193:35;32199:7;32208:4;;32193:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32222:4:0::1;::::0;-1:-1:-1;32193:5:0::1;::::0;-1:-1:-1;;32193:35:0:i:1;:::-;32245:4;32239:20;;;32260:7;32285:1;32268:7;:14;:18;32260:27;;;;;;;;;;;;;;32239:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32239:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32239:49:0;;;;32299:63;32330:2;32334:7;32359:1;32342:7;:14;:18;32334:27;;;;;;;;;;;;;;32299:30;:63::i;:::-;31508:862:::0;;;;;;;;;:::o;38078:256::-;38222:21;38268:58;38301:7;38310:9;38321:4;38268:32;:58::i;:::-;38261:65;;38078:256;;;;;:::o;24946:683::-;25252:12;25266;25291;25306:52;25334:7;25343:6;25351;25306:27;:52::i;:::-;25291:67;;25369:10;25382;:33;;25406:9;25382:33;;;25400:2;25382:33;25426:83;;;;;;25457:10;25426:83;;;;25477:4;25426:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25369:46;;-1:-1:-1;25426:30:0;;;;;;:83;;;;;-1:-1:-1;;25426:83:0;;;;;;;;-1:-1:-1;25426:30:0;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;25426:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25426:83:0;;;;25541:80;25557:6;25565;25573:9;25584:10;25596;25608:2;25612:8;25541:15;:80::i;:::-;25520:101;;;;;;;;24946:683;;;;;;;;;;;;;;;;:::o;28683:637::-;28907:21;28888:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28951:58:::1;28985:7;28994:8;29004:4;;28951:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28951:33:0::1;::::0;-1:-1:-1;;;28951:58:0:i:1;:::-;28941:68;;29059:12;29028:7;29053:1;29036:7;:14;:18;29028:27;;;;;;;;;;;;;;:43;;29020:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29133:144;29179:4;;29184:1;29179:7;;;;;;29133:144;29288:24;29294:7;29303:4;;29288:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29309:2:0;;-1:-1:-1;29288:5:0::1;::::0;-1:-1:-1;;29288:24:0:i:1;30662:840::-:0;30876:21;30848:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30923:29:::1;30948:4;30923:29;:4:::0;;30928:15;;;30923:21;;::::1;;;;;;;;;;;;;:29;;;30915:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31010:58;31043:7;31052:9;31063:4;;31010:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31010:32:0::1;::::0;-1:-1:-1;;;31010:58:0:i:1;:::-;31000:68;;31101:11;31087:7;31095:1;31087:10;;;;;;;;;;;;;;:25;;31079:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27095:724:::0;27413:14;27440:12;27455:49;27483:7;27492:5;27499:4;27455:27;:49::i;:::-;27440:64;;27515:10;27528;:33;;27552:9;27528:33;;;27546:2;27528:33;27572:83;;;;;;27603:10;27572:83;;;;27623:4;27572:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27515:46;;-1:-1:-1;27572:30:0;;;;;;:83;;;;;-1:-1:-1;;27572:83:0;;;;;;;;-1:-1:-1;27572:30:0;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;27572:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27572:83:0;;;;27678:133;27740:5;27747:9;27758:14;27774:12;27788:2;27792:8;27678:47;:133::i;:::-;27666:145;27095:724;-1:-1:-1;;;;;;;;;;;;;27095:724:0:o;34583:720::-;34817:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34838:142:::1;34884:4;;34889:1;34884:7;;;;;;;;;;;;;;;34893:10;34905:54;34933:7;34942:4;;34947:1;34942:7;;;;;;;;;;;;;;;34951:4;;34956:1;34951:7;;;;;;34905:54;34961:8;34838:31;:142::i;:::-;34991:18;35019:4:::0;;35024:15;;;35019:21;;::::1;;;;;;;;;;;;;35012:39;;;35052:2;35012:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35012:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35012:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35012:43:0;35066:44:::1;::::0;;35012:43:::1;35066:44:::0;;::::1;::::0;;;;;;;;;;;35012:43;;-1:-1:-1;35066:44:0::1;::::0;;;35101:4;;;;;;35066:44;::::1;::::0;35101:4;;35066:44;35101:4;35066:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35107:2:0;;-1:-1:-1;35066:34:0::1;::::0;-1:-1:-1;;35066:44:0:i:1;:::-;35209:12:::0;35143:62:::1;35191:13:::0;35150:4;;35155:15;;;35150:21;;::::1;;;;;;;;;;;;;35143:39;;;35183:2;35143:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35143:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35143:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35143:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;35121:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19884:1;34583:720:::0;;;;;;;:::o;36174:852::-;36441:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36475:29:::1;36500:4;36475:29;:4:::0;;36480:15;;;36475:21;;::::1;;;;;;;;;;;;;:29;;;36467:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36552:142;36598:4;;36603:1;36598:7;;;;;;36552:142;36705:55;36740:4;;36705:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36754:4:0::1;::::0;-1:-1:-1;36705:34:0::1;::::0;-1:-1:-1;;36705:55:0:i:1;:::-;36788:37;::::0;;;;;36819:4:::1;36788:37;::::0;::::1;::::0;;;36771:14:::1;::::0;36788:22:::1;36795:4;36788:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36788:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36788:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36788:37:0;;-1:-1:-1;36844:25:0;;::::1;;36836:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36937:4;36931:20;;;36952:9;36931:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36931:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36931:31:0;;;;36973:45;37004:2;37008:9;36973:30;:45::i;29947:709::-:0;30163:21;30135:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30221:4:::1;30210:15;;:4;;30215:1;30210:7;;;;;;;;;;;;;;;:15;;;30202:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30283:59;30317:7;30326:9;30337:4;;30283:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30283:33:0::1;::::0;-1:-1:-1;;;30283:59:0:i:1;:::-;30273:69;;30392:12;30361:7;30386:1;30369:7;:14;:18;30361:27;;;;;;;;;;;;;;:43;;30353:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30472:4;30466:19;;;30493:7;30501:1;30493:10;;;;;;;;;;;;;;30466:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30466:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30466:40:0;;;;;30530:4;30524:20;;;30545:54;30573:7;30582:4;;30587:1;30582:7;;;;;;30545:54;30601:7;30609:1;30601:10;;;;;;;;;;;;;;30524:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30524:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30524:88:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30524:88:0;30517:96:::1;;;;30624:24;30630:7;30639:4;;30624:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30645:2:0;;-1:-1:-1;30624:5:0::1;::::0;-1:-1:-1;;30624:24:0:i:1;:::-;29947:709:::0;;;;;;;;:::o;37542:264::-;37695:13;37733:65;37765:9;37776;37787:10;37733:31;:65::i;29326:615::-;29550:21;29531:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29594:58:::1;29627:7;29636:9;29647:4;;29594:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29594:32:0::1;::::0;-1:-1:-1;;;29594:58:0:i:1;:::-;29584:68;;29685:11;29671:7;29679:1;29671:10;;;;;;;;;;;;;;:25;;29663:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19717:38:::0;;;:::o;37070:191::-;37167:12;37199:54;37225:7;37234:8;37244;37199:25;:54::i;26389:700::-;26655:14;26636:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26698:196:::1;26728:5;26748:4;26767:9;26791:14;26820:12;26855:4;26875:8;26698:15;:196::i;:::-;26944:38;::::0;;;;;26976:4:::1;26944:38;::::0;::::1;::::0;;;26682:212;;-1:-1:-1;26905:78:0::1;::::0;-1:-1:-1;26933:5:0;;26940:2;;26944:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26944:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26944:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26944:38:0;26905:27:::1;:78::i;:::-;27000:4;26994:20;;;27015:9;26994:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26994:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26994:31:0;;;;27036:45;27067:2;27071:9;27036:30;:45::i;35309:859::-:0;35569:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35614:4:::1;35603:15;;:4;;35608:1;35603:7;;;;;;;;;;;;;;;:15;;;35595:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35666:13;35682:9;35666:25;;35708:4;35702:19;;;35729:8;35702:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35702:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35702:38:0;;;;;35764:4;35758:20;;;35779:54;35807:7;35816:4;;35821:1;35816:7;;;;;;35779:54;35835:8;35758:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35758:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35758:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35758:86:0;35751:94:::1;;;;35856:18;35884:4:::0;;35889:15;;;35884:21;;::::1;;;;;;;;;;;;;35877:39;;;35917:2;35877:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35877:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35877:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35877:43:0;35931:44:::1;::::0;;35877:43:::1;35931:44:::0;;::::1;::::0;;;;;;;;;;;35877:43;;-1:-1:-1;35931:44:0::1;::::0;;;35966:4;;;;;;35931:44;::::1;::::0;35966:4;;35931:44;35966:4;35931:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35972:2:0;;-1:-1:-1;35931:34:0::1;::::0;-1:-1:-1;;35931:44:0:i:1;:::-;36074:12:::0;36008:62:::1;36056:13:::0;36015:4;;36020:15;;;36015:21;;::::1;;;;;;;;;;;;;36008:39;;;36048:2;36008:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;23378:883:0::0;23632:12;23646;23613:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23671:12:::1;23686:52;23714:7;23723:6;23731;23686:27;:52::i;:::-;23749:65;::::0;;;;;23786:10:::1;23749:65;::::0;::::1;::::0;:36:::1;::::0;::::1;:65:::0;;;;;;;;;;;;;;23671:67;;-1:-1:-1;23749:36:0;;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23749:36:0;:65;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23749:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23749:65:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23882:32:0::1;::::0;;;;;:28:::1;:32:::0;;::::1;;::::0;::::1;::::0;;;23852:12:::1;::::0;;;23882:28;;::::1;::::0;::::1;::::0;:32;;;;;;;;;;;23852:12;23882:28;:32;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23882:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23882:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23882:32:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23882:32:0;-1:-1:-1;23926:14:0::1;23945:46;23976:6:::0;23984;23945:30:::1;:46::i;:::-;23925:66;;;24033:6;24023:16;;:6;:16;;;:58;;24064:7;24073;24023:58;;;24043:7;24052;24023:58;24002:79:::0;;-1:-1:-1;24002:79:0;-1:-1:-1;24100:21:0;;::::1;;24092:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24197:10;24186:7;:21;;24178:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19884:1;;;;23378:883:::0;;;;;;;;;;;:::o;19669:41::-;;;:::o;37814:256::-;37958:21;38004:58;38038:7;38047:8;38057:4;38004:33;:58::i;25635:675::-;25924:16;25942:14;25969:12;25984:49;26012:7;26021:5;26028:4;25984:27;:49::i;:::-;25969:64;;26044:10;26057;:33;;26081:9;26057:33;;;26075:2;26057:33;26101:83;;;;;;26132:10;26101:83;;;;26152:4;26101:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26044:46;;-1:-1:-1;26101:30:0;;;;;;:83;;;;;-1:-1:-1;;26101:83:0;;;;;;;;-1:-1:-1;26101:30:0;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;26101:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26101:83:0;;;;26222:80;26241:5;26248:9;26259:14;26275:12;26289:2;26293:8;26222:18;:80::i;:::-;26195:107;;;;-1:-1:-1;25635:675:0;-1:-1:-1;;;;;;;;;;;;;25635:675:0:o;21605:744::-;21893:12;21907;21921:14;21874:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21969:85:::1;21983:6;21991;21999:14;22015;22031:10;22043;21969:13;:85::i;:::-;21948:106:::0;;-1:-1:-1;21948:106:0;-1:-1:-1;22065:12:0::1;22080:52;22108:7;22117:6:::0;22125;22080:27:::1;:52::i;:::-;22065:67;;22143:66;22175:6;22183:10;22195:4;22201:7;22143:31;:66::i;:::-;22220;22252:6;22260:10;22272:4;22278:7;22220:31;:66::i;:::-;22327:4;22309:28;;;22338:2;22309:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22309:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22309:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22309:32:0;21605:744;;;;-1:-1:-1;22309:32:0;;-1:-1:-1;21605:744:0;;-1:-1:-1;;;;;;;;;21605:744:0:o;22355:980::-;22608:16;22626:14;22642;22589:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22696:176:::1;22724:5;22744:4;22763:18;22796:9;22820:14;22849:12;22696:13;:176::i;:::-;22669:203:::0;;-1:-1:-1;22669:203:0;-1:-1:-1;22883:12:0::1;22898:49;22926:7;22935:5:::0;22942:4:::1;22898:27;:49::i;:::-;22883:64;;22958:69;22990:5;22997:10;23009:4;23015:11;22958:31;:69::i;:::-;23044:4;23038:19;;;23065:9;23038:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23038:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23038:39:0;;;;;23101:4;23095:20;;;23116:4;23122:9;23095:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23095:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23095:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23095:37:0;23088:45:::1;;;;23174:4;23156:28;;;23185:2;23156:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23156:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23156:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23156:32:0;;-1:-1:-1;23239:9:0::1;:21:::0;-1:-1:-1;23235:92:0::1;;;23262:65;23293:10;23317:9;23305;:21;23262:30;:65::i;:::-;19884:1;22355:980:::0;;;;;;;;;;;:::o;32376:822::-;32589:21;32561:8;19826:15;19814:8;:27;;19806:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32647:4:::1;32636:15;;:4;;32641:1;32636:7;;;;;;;;;;;;;;;:15;;;32628:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32709:58;32742:7;32751:9;32762:4;;32709:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32709:32:0::1;::::0;-1:-1:-1;;;32709:58:0:i:1;:::-;32699:68;;32800:9;32786:7;32794:1;32786:10;;;;;;;;;;;;;;:23;;32778:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32873:4;32867:19;;;32894:7;32902:1;32894:10;;;;;;;;;;;;;;32867:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32867:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32867:40:0;;;;;32931:4;32925:20;;;32946:54;32974:7;32983:4;;32988:1;32983:7;;;;;;32946:54;33002:7;33010:1;33002:10;;;;;;;;;;;;;;32925:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32925:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32925:88:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32925:88:0;32918:96:::1;;;;33025:24;33031:7;33040:4;;33025:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33046:2:0;;-1:-1:-1;33025:5:0::1;::::0;-1:-1:-1;;33025:24:0:i:1;:::-;33112:7;33120:1;33112:10;;;;;;;;;;;;;;33100:9;:22;33096:94;;;33124:66;33155:10;33179:7;33187:1;33179:10;;;;;;;;;;;;;;33167:9;:22;33124:30;:66::i;4402:449::-:0;4634:45;;;4623:10;4634:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4634:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;4634:45:0;179:29:-1;160:49;;4623:57:0;;;;4588:12;;4602:17;;4623:10;;;;4634:45;4623:57;;;25:18:-1;4623:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4623:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;4587:93:0;;;;4713:7;:57;;;;-1:-1:-1;4725:11:0;;:16;;:44;;;4756:4;4745:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4745:24:0;4725:44;4691:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4402:449;;;;;:::o;5365:217::-;5478:12;;;5438;5478;;;;;;;;;5456:7;;;;5471:5;;5456:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5456:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;5437:54:0;;;5510:7;5502:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5365:217;;;:::o;16012:523::-;16105:14;16151:1;16140:8;:12;16132:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16234:1;16222:9;:13;:31;;;;;16252:1;16239:10;:14;16222:31;16214:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16312:20;16335:17;:8;16348:3;16335:17;:12;:17;:::i;:::-;16312:40;-1:-1:-1;16363:14:0;16380:31;16312:40;16400:10;16380:31;:19;:31;:::i;:::-;16363:48;-1:-1:-1;16422:16:0;16441:40;16465:15;16441:19;:9;16455:4;16441:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;16422:59;;16516:11;16504:9;:23;;;;;;;16012:523;-1:-1:-1;;;;;;;16012:523:0:o;17216:514::-;17317:21;17374:1;17359:4;:11;:16;;17351:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17445:4;:11;17434:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17434:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;17434:23:0;;17424:33;;17481:8;17468:7;17476:1;17468:10;;;;;;;;;;;;;:21;;;;;17505:6;17500:223;17531:1;17517:4;:11;:15;17513:1;:19;17500:223;;;17555:14;17571:15;17590:42;17602:7;17611:4;17616:1;17611:7;;;;;;;;;;;;;;17620:4;17625:1;17629;17625:5;17620:11;;;;;;;;;;;;;;17590;:42::i;:::-;17554:78;;;;17664:47;17677:7;17685:1;17677:10;;;;;;;;;;;;;;17689:9;17700:10;17664:12;:47::i;:::-;17647:7;17655:1;17659;17655:5;17647:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;17534:3:0;;17500:223;;;;17216:514;;;;;:::o;14520:478::-;14609:12;14635:14;14651;14669:26;14680:6;14688;14669:10;:26::i;:::-;14833:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;14833:32:0;;;;;14823:43;;;;;;14736:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14736:251:0;;;;;;;14726:262;;;;;;;;;14520:478;-1:-1:-1;;;;;14520:478:0:o;4859:498::-;5130:51;;;5119:10;5130:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5130:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;5130:51:0;179:29:-1;160:49;;5119:63:0;;;;5084:12;;5098:17;;5119:10;;;;5130:51;5119:63;;;25:18:-1;5119:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5119:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;5083:99:0;;;;5215:7;:57;;;;-1:-1:-1;5227:11:0;;:16;;:44;;;5258:4;5247:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5247:24:0;5227:44;5193:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4859:498;;;;;;:::o;27930:747::-;28037:6;28032:638;28063:1;28049:4;:11;:15;28045:1;:19;28032:638;;;28087:13;28102:14;28121:4;28126:1;28121:7;;;;;;;;;;;;;;28130:4;28135:1;28139;28135:5;28130:11;;;;;;;;;;;;;;28086:56;;;;28158:14;28177:45;28208:5;28215:6;28177:30;:45::i;:::-;28157:65;;;28237:14;28254:7;28262:1;28266;28262:5;28254:14;;;;;;;;;;;;;;28237:31;;28284:15;28301;28329:6;28320:15;;:5;:15;;;:61;;28362:9;28378:1;28320:61;;;28344:1;28348:9;28320:61;28283:98;;;;28396:10;28427:1;28413:4;:11;:15;28409:1;:19;:85;;28491:3;28409:85;;;28431:57;28459:7;28468:6;28476:4;28481:1;28485;28481:5;28476:11;;;;;;;;;;;;;;28431:27;:57::i;:::-;28396:98;;28527:51;28555:7;28564:5;28571:6;28527:27;:51::i;:::-;28509:75;;;28603:10;28615;28627:2;28641:1;28631:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28631:12:0;87:42:-1;143:17;;-1:-1;28631:12:0;;28509:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28509:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28509:149:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28066:3:0;;;;;-1:-1:-1;28032:638:0;;-1:-1:-1;;;;;;;;28032:638:0;;;27930:747;;;:::o;17811:535::-;17912:21;17969:1;17954:4;:11;:16;;17946:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18040:4;:11;18029:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18029:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;18029:23:0;;18019:33;;18093:9;18063:7;18088:1;18071:7;:14;:18;18063:27;;;;;;;;;;;;;;;;;:39;18127:11;;:15;;18113:226;18144:5;;18113:226;;18172:14;18188:15;18207:42;18219:7;18228:4;18237:1;18233;:5;18228:11;;;;;;;;;;;;;;18241:4;18246:1;18241:7;;;;;;;18207:42;18171:78;;;;18281:46;18293:7;18301:1;18293:10;;;;;;;;;;;;;;18305:9;18316:10;18281:11;:46::i;:::-;18264:7;18276:1;18272;:5;18264:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;18151:3:0;;18113:226;;33345:1232;33458:6;33453:1117;33484:1;33470:4;:11;:15;33466:1;:19;33453:1117;;;33508:13;33523:14;33542:4;33547:1;33542:7;;;;;;;;;;;;;;33551:4;33556:1;33560;33556:5;33551:11;;;;;;;;;;;;;;33507:56;;;;33579:14;33598:45;33629:5;33636:6;33598:30;:45::i;:::-;33578:65;;;33658:22;33701:51;33729:7;33738:5;33745:6;33701:27;:51::i;:::-;33658:95;;33768:16;33799:17;33887:13;33902;33920:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33920:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33920:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33920:18:0;;;;;;;33886:52;;;;;-1:-1:-1;33886:52:0;;-1:-1:-1;33954:17:0;;33995:15;;;;;;;;:61;;34037:8;34047;33995:61;;;34014:8;34024;33995:61;33953:103;;;;34085:56;34128:12;34092:5;34085:23;;;34117:4;34085:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;34085:56:0;34071:70;;34171:74;34204:11;34217:12;34231:13;34171:32;:74::i;:::-;34156:89;;33453:1117;;;;34276:15;34293;34321:6;34312:15;;:5;:15;;;:67;;34357:12;34376:1;34312:67;;;34336:1;34340:12;34312:67;34275:104;;;;34394:10;34425:1;34411:4;:11;:15;34407:1;:19;:85;;34489:3;34407:85;;;34429:57;34457:7;34466:6;34474:4;34479:1;34483;34479:5;34474:11;;;;;;;34429:57;34545:12;;;34555:1;34545:12;;;;;;;;;;34507:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;34394:98;;-1:-1:-1;34507:9:0;;;;;;34517:10;;34529;;34394:98;;34545:12;;34507:51;;;;;;;;34545:12;;34507:51;;;;34545:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34507:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34507:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33487:3:0;;;;;-1:-1:-1;33453:1117:0;;-1:-1:-1;;;;;;;;;;33453:1117:0;13531:129;13615:5;;;13610:16;;;;13602:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16656:478;16749:13;16795:1;16783:9;:13;16775:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16879:1;16867:9;:13;:31;;;;;16897:1;16884:10;:14;16867:31;16859:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16957:14;16974:34;17003:4;16974:24;:9;16988;16974:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;16957:51;-1:-1:-1;17019:16:0;17038:34;17068:3;17038:25;:10;17053:9;17038:25;:14;:25;:::i;:34::-;17019:53;;17094:32;17124:1;17107:11;17095:9;:23;;;;;;;17094:32;:29;:32;:::i;:::-;17083:43;16656:478;-1:-1:-1;;;;;;16656:478:0:o;15563:327::-;15645:12;15688:1;15678:7;:11;15670:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15764:1;15753:8;:12;:28;;;;;15780:1;15769:8;:12;15753:28;15745:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15874:8;15850:21;:7;15862:8;15850:21;:11;:21;:::i;:::-;:32;;;;;;;15563:327;-1:-1:-1;;;;15563:327:0:o;14073:355::-;14148:14;14164;14209:6;14199:16;;:6;:16;;;;14191:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14299:6;14290:15;;:6;:15;;;:53;;14328:6;14336;14290:53;;;14309:6;14317;14290:53;14271:72;;-1:-1:-1;14271:72:0;-1:-1:-1;14362:20:0;;;14354:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14073:355;;;;;:::o;20188:1411::-;20501:53;;;;;;:67;:53;;;;;;;;;;;;;;;;20406:12;;;;;;20522:7;20501:37;;;;;;:53;;;;;;;;;;;;;;;:37;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;20501:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20501:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20501:53:0;:67;;;20497:156;;;20585:56;;;;;;:40;:56;;;;;;;;;;;;;;;;20606:7;20585:40;;;;;;:56;;;;;;;;;;;;;;;-1:-1:-1;20585:40:0;:56;;;2:2:-1;;;;27:1;24;17:12;2:2;20585:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20585:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;20497:156:0;20664:13;20679;20696:56;20728:7;20737:6;20745;20696:31;:56::i;:::-;20663:89;;;;20767:8;20779:1;20767:13;:30;;;;-1:-1:-1;20784:13:0;;20767:30;20763:829;;;20836:14;;-1:-1:-1;20852:14:0;;-1:-1:-1;20763:829:0;;;20900:19;20922:61;20948:14;20964:8;20974;20922:25;:61::i;:::-;20900:83;;21020:14;21002;:32;20998:583;;21081:10;21063:14;:28;;21055:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21178:14;;-1:-1:-1;21194:14:0;-1:-1:-1;21194:14:0;20998:583;;;21250:19;21272:61;21298:14;21314:8;21324;21272:25;:61::i;:::-;21250:83;;21377:14;21359;:32;;21352:40;;;;21437:10;21419:14;:28;;21411:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21534:14;-1:-1:-1;21550:14:0;;-1:-1:-1;20998:583:0;20763:829;;20188:1411;;;;;;;;;;;:::o;13668:142::-;13720:6;13747;;;:30;;-1:-1:-1;;13762:5:0;;;13776:1;13771;13762:5;13771:1;13757:15;;;;;:20;13747:30;13739:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13395:128;13479:5;;;13474:16;;;;13466:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:394;15149:13;15164;15191:14;15210:26;15221:6;15229;15210:10;:26::i;:::-;15190:46;;;15248:13;15263;15299:32;15307:7;15316:6;15324;15299:7;:32::i;:::-;15281:63;;;:65;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15281:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15281:65:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15281:65:0;;;;;;;15247:99;;;;;-1:-1:-1;15247:99:0;;-1:-1:-1;15380:16:0;;;;;;;;:62;;15423:8;15433;15380:62;;;15400:8;15410;15380:62;15357:85;;;;-1:-1:-1;15056:394:0;-1:-1:-1;;;;;;;15056:394:0:o

Swarm Source

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