Contract 0x7dae51bd3e3376b8c7c4900e9107f12be3af1ba8 3

Mdex 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6f9b43aef152dae9e53009c1c748de6266acb6616ec65ff14dbfe179cf583d5dSwap Exact Token...119594502021-10-21 7:55:2046 secs ago0x26020155a16c1fa1e4182444d8ce427f832601de IN  Mdex: Router0 BNB0.001180995
0x636ea46f982b1a34017485f33580f7e0a6d09202300fc59c7b2571ce320add6cSwap Exact Token...119594442021-10-21 7:55:021 min ago0x4fe4e00aa3ec8067fb759f602f446bc1773e1dbd IN  Mdex: Router0 BNB0.000829926
0xb1bc9957936beb06ffbf2fa854b509b8cd13c18b4e31fced49970c2498b33d27Swap Exact Token...119594432021-10-21 7:54:591 min ago0xe612f33e73d61e75153117ccb61410f7be11b496 IN  Mdex: Router0 BNB0.000770845
0xe7fb641aac5608804b7821d2e72534bbe1fc22a968735a2bc485869c9be099f8Swap Exact Token...119594302021-10-21 7:54:201 min ago0xecebe13b8b7ff62c8ca7761152342ee7b4f781cf IN  Mdex: Router0 BNB0.001180875
0x95de7040a341c00704af757b85c54f14c30921940a14d2325bfad7cc5ee306d3Swap Exact Token...119594242021-10-21 7:54:022 mins ago0x947b3264af3a530f130c98325641f00798ea332c IN  Mdex: Router0 BNB0.00072424
0x79447f470e28d66fd4ca1c55804237bdec98f6c7cb23f1e7e05d40ffb58e1eceSwap Tokens For ...119594182021-10-21 7:53:442 mins ago0x000000a0c521dd28025b937b1f15141d61969959 IN  Mdex: Router0 BNB0.004712306981
0x4fb3281d850deaf61d30bdfe95f2f216c7fd33e999b75d09fd7ad561fadebb85Remove Liquidity...119594172021-10-21 7:53:412 mins ago0x8cd99bd24679fbbc2b66c435ac02b57280b21db7 IN  Mdex: Router0 BNB0.000918725
0x979f3dee98bde986f2f3d97f3f964b941f23e476b3a3174a547e3f5256cc41b4Swap Exact Token...119594152021-10-21 7:53:352 mins ago0x49c37ab3bda01b9b19c80589ad4c2ce56812fae9 IN  Mdex: Router0 BNB0.001255875
0xdcc39a0097dceb6b27e596a153655b9837a9bd6a46f498b951a6268f85729fa6Swap Exact Token...119594022021-10-21 7:52:563 mins ago0x3b8603ab5c1fc4879f631384252a135b704a0d37 IN  Mdex: Router0 BNB0.001180935
0xdcc9011f5e9aa89e59a82fd0b3762396d72e8d7a0f25c127f0a8c8bed1df5fa9Swap Exact Token...119594012021-10-21 7:52:533 mins ago0xe6c8bd6703a6de900690149b9fb947db6155a94e IN  Mdex: Router0 BNB0.002319021
0x39ff04148460fa9f09f6d60fb61207e218a94723189428064b05869e40bdd84fSwap Exact Token...119594002021-10-21 7:52:503 mins ago0x6221fefdeb9886d0076dca32fa525844d050e963 IN  Mdex: Router0 BNB0.001499345
0xb2cb329b74b3f8181d94981d645808cc9544facfcbf663f5c1e5ccb7458f0701Swap Exact Token...119593972021-10-21 7:52:413 mins ago0x84874356d86b16fe4a6bed9c0b99d09eee106f71 IN  Mdex: Router0 BNB0.0034806939
0x4653c18b7bc35d0e696444049a8e8a2d23a3e8255b5ccbc41814f4fb5c478fd4Swap Exact Token...119593822021-10-21 7:51:564 mins ago0xf4326b99c967f898db725b53f2aa498d482628db IN  Mdex: Router0 BNB0.0006487812
0x7f2b98e96c5c1fa457317cca850817a7baec48fb57585389b9a2708cc44c8b86Swap Exact ETH F...119593772021-10-21 7:51:414 mins ago0xba3098999d501d556357c5a32bf28f73046ef053 IN  Mdex: Router0.2176656 BNB0.0017627665
0xbb0f10ad3cf4d0618eff41c37295e6f684dc069e88ccaa0d8625afa166b42643Swap Exact ETH F...119593752021-10-21 7:51:354 mins ago0x226a9750bf1aee6b300647af930fb7c3a550f091 IN  Mdex: Router0.001 BNB0.000713315
0x12216ef0b0f79bc1965b0b0584b811276291f2b18d55c96bbdac48d74eabca6cAdd Liquidity119593712021-10-21 7:51:234 mins ago0xfd383c9627b7283370e659e73efe673479154a52 IN  Mdex: Router0 BNB0.001017365
0x93c7bec6daa5de0b00dd342bb1258dd062e682470191ed51075d93aabf0c66c2Swap Tokens For ...119593702021-10-21 7:51:204 mins ago0xf4326b99c967f898db725b53f2aa498d482628db IN  Mdex: Router0 BNB0.0001875168
0x9016f78ac2391df3e81a03adefda0902402220244f4cab8d686296d8b7b58063Swap Exact Token...119593692021-10-21 7:51:174 mins ago0xf3d38882102fd51408d06b2ff3727ad674a84f1b IN  Mdex: Router0 BNB0.001181075
0x61c2e87a7201a2e2fb50c3542100e0a05a4fdf1067a424303e3a29dfde142530Swap Exact Token...119593612021-10-21 7:50:535 mins ago0x345380abe9c92e1e7415e84adbd63133a960d39b IN  Mdex: Router0 BNB0.001409175
0xa22fdefbc73ef4df64ca6596c2788a414b364b014eabb687d4dfb15aebc95252Swap Exact Token...119593522021-10-21 7:50:265 mins ago0x3b84f06e092bb79e351d740d767df08ac3c9322f IN  Mdex: Router0 BNB0.001499345
0xb9c2442f30fcbf861f841945556d29bbc0bfd3fcfa369c9192a877d1d60f936fRemove Liquidity...119593492021-10-21 7:50:175 mins ago0xfd383c9627b7283370e659e73efe673479154a52 IN  Mdex: Router0 BNB0.001044775
0xc80c4e9325fdb1fd6610bf6bb390501c4a57cbf05129ebec678f4b59761b3c3aSwap Exact Token...119593342021-10-21 7:49:326 mins ago0x3975ad25f26fbf263bb2f42dd0fdb93d2a603426 IN  Mdex: Router0 BNB0.0007096395
0x6ca9975ec64c7a40716a3dd5d88a82a09d390095b7d79dea52153f679cb1719fSwap Exact Token...119593242021-10-21 7:49:027 mins ago0x8776612d0aad6c49c8d26fd9c0ae6eca87304de4 IN  Mdex: Router0 BNB0.001407115
0x56c9b03c6e9e730e01e092fb8eb9358d65e1f63f8ad7daa8b8566d1c4d8255cdSwap Exact Token...119593172021-10-21 7:48:417 mins ago0x80b01010a3f6387537380ea3e830029c7ae3933e IN  Mdex: Router0 BNB0.0024288228
0x973615f15974ce1de6c4fc8bafb16a48f363b5fe03b16d94b68cfe8d98b05126Swap Exact Token...119593042021-10-21 7:48:028 mins ago0x85e41303b5bea86aa95ddfa4f77b5535aebb401d IN  Mdex: Router0 BNB0.0024539
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbb7a83df4cfb5e959d1d0cceee18387fbda52edd5ae66fdb612f5da5e8605ddb119594342021-10-21 7:54:321 min ago Mdex: Router Binance: WBNB Token0.101594996114737883 BNB
0xbb7a83df4cfb5e959d1d0cceee18387fbda52edd5ae66fdb612f5da5e8605ddb119594342021-10-21 7:54:321 min ago 0xd702fc0551507f4c156aee2eaee39ce5546dcf9a Mdex: Router0.101594996114737883 BNB
0x5ab4678e69cb347376227c90d65891334cffe484ff80c91a71af86b04285376b119593972021-10-21 7:52:413 mins ago Mdex: Router Binance: WBNB Token0.000997 BNB
0x5ab4678e69cb347376227c90d65891334cffe484ff80c91a71af86b04285376b119593972021-10-21 7:52:413 mins ago 0xd702fc0551507f4c156aee2eaee39ce5546dcf9a Mdex: Router0.000997 BNB
0xb2cb329b74b3f8181d94981d645808cc9544facfcbf663f5c1e5ccb7458f0701119593972021-10-21 7:52:413 mins ago Mdex: Router0x84874356d86b16fe4a6bed9c0b99d09eee106f710.171637192923761384 BNB
0xb2cb329b74b3f8181d94981d645808cc9544facfcbf663f5c1e5ccb7458f0701119593972021-10-21 7:52:413 mins ago Binance: WBNB Token Mdex: Router0.171637192923761384 BNB
0xd35a1eec3dc196f532e3aca045c523cabab7040c30b6db6fd10e84a81a304afd119593922021-10-21 7:52:263 mins ago Mdex: Router Binance: WBNB Token0.0997 BNB
0xd35a1eec3dc196f532e3aca045c523cabab7040c30b6db6fd10e84a81a304afd119593922021-10-21 7:52:263 mins ago 0xd702fc0551507f4c156aee2eaee39ce5546dcf9a Mdex: Router0.0997 BNB
0x7f2b98e96c5c1fa457317cca850817a7baec48fb57585389b9a2708cc44c8b86119593772021-10-21 7:51:414 mins ago Mdex: Router Binance: WBNB Token0.2176656 BNB
0xbb0f10ad3cf4d0618eff41c37295e6f684dc069e88ccaa0d8625afa166b42643119593752021-10-21 7:51:354 mins ago Mdex: Router Binance: WBNB Token0.001 BNB
0xfc29434e029dbe5128c37baafc0402b7d168707ec28cb71aedf65cb8f068c3b5119593732021-10-21 7:51:294 mins ago Mdex: Router Binance: WBNB Token0.02991 BNB
0xfc29434e029dbe5128c37baafc0402b7d168707ec28cb71aedf65cb8f068c3b5119593732021-10-21 7:51:294 mins ago 0xd702fc0551507f4c156aee2eaee39ce5546dcf9a Mdex: Router0.02991 BNB
0x61c2e87a7201a2e2fb50c3542100e0a05a4fdf1067a424303e3a29dfde142530119593612021-10-21 7:50:535 mins ago Mdex: Router0x345380abe9c92e1e7415e84adbd63133a960d39b35.624108128112848867 BNB
0x61c2e87a7201a2e2fb50c3542100e0a05a4fdf1067a424303e3a29dfde142530119593612021-10-21 7:50:535 mins ago Binance: WBNB Token Mdex: Router35.624108128112848867 BNB
0xf46592e5a6ef306cca96b0e141613e38a82e7667b453e64dd5971a7beda24c8b119593132021-10-21 7:48:297 mins ago Mdex: Router Binance: WBNB Token0.004985 BNB
0xf46592e5a6ef306cca96b0e141613e38a82e7667b453e64dd5971a7beda24c8b119593132021-10-21 7:48:297 mins ago 0xd702fc0551507f4c156aee2eaee39ce5546dcf9a Mdex: Router0.004985 BNB
0xe60f35eb7cbdb0a341e385d4c4b1fb107a8bed56f5c495b0c9dd0fa537e5b37f119592752021-10-21 7:46:359 mins ago Mdex: Router Binance: WBNB Token0.002 BNB
0xdd1c0d74eb4dee331020181c5aa0305ebd9311629db59f214a3b8eab1260ddf1119592732021-10-21 7:46:299 mins ago Mdex: Router0x9bf71abf94673778e6134b8cd8e83157cff590940.094560864256532021 BNB
0xdd1c0d74eb4dee331020181c5aa0305ebd9311629db59f214a3b8eab1260ddf1119592732021-10-21 7:46:299 mins ago Binance: WBNB Token Mdex: Router0.094560864256532021 BNB
0x0dec522c7e877b90550c82c8fe7f3c981e40459d1daf238d3fcfcf2aafb04459119592672021-10-21 7:46:119 mins ago Mdex: Router Binance: WBNB Token0.002 BNB
0xcdecf6701c5525ebc51a5025e4196d0d0d349ead969fae33a71c13a811ed4806119592582021-10-21 7:45:4410 mins ago Mdex: Router Binance: WBNB Token0.001 BNB
0xfcd42c9d760a5220bd8d2b7ca328dc8300dd3cd141bebf948410fd038ea9888f119592452021-10-21 7:45:0511 mins ago Mdex: Router Binance: WBNB Token0.001 BNB
0x122e44206941eccd0d00df077802ed596cdc6f81d37aaff3a73af35a56cf7d46119592372021-10-21 7:44:4111 mins ago Mdex: Router Binance: WBNB Token0.2 BNB
0xc42a0ba7565186888b051ebda596de38c55264364b07c68c4bafe171f0e3069a119591722021-10-21 7:41:2614 mins ago Mdex: Router Binance: WBNB Token0.237327 BNB
0x62d7075e95f0364c773da96e57896f70a92e7e76a4aa85bff48eeb42dadb6530119591672021-10-21 7:41:1114 mins ago Mdex: Router Binance: WBNB Token0.268110000000000032 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MdexRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-06
*/

pragma solidity =0.6.6;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

    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;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IMdexPair {
    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;
}

interface IMdexRouter {
    function factory() external pure returns (address);

    function WBNB() external pure returns (address);

    function swapMining() 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(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);

    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;
}

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

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);
}

interface IWBNB {
    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

library TransferHelper {
    function safeApprove(address token, address to, uint 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: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint 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: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint 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: TRANSFER_FROM_FAILED');
    }

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

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

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

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

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

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

contract MdexRouter is IMdexRouter, Ownable {
    using SafeMath for uint256;

    address public immutable override factory;
    address public immutable override WBNB;
    address public override swapMining;

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

    constructor(address _factory, address _WBNB) public {
        factory = _factory;
        WBNB = _WBNB;
    }

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

    function pairFor(address tokenA, address tokenB) public view returns (address pair){
        pair = IMdexFactory(factory).pairFor(tokenA, tokenB);
    }

    function setSwapMining(address _swapMininng) public onlyOwner {
        swapMining = _swapMininng;
    }

    // **** 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 (IMdexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IMdexFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = IMdexFactory(factory).getReserves(tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = IMdexFactory(factory).quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = IMdexFactory(factory).quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'MdexRouter: 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 = pairFor(tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IMdexPair(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,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = pairFor(token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value : amountETH}();
        assert(IWBNB(WBNB).transfer(pair, amountETH));
        liquidity = IMdexPair(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 = pairFor(tokenA, tokenB);
        IMdexPair(pair).transferFrom(msg.sender, pair, liquidity);
        // send liquidity to pair
        (uint amount0, uint amount1) = IMdexPair(pair).burn(to);
        (address token0,) = IMdexFactory(factory).sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'MdexRouter: 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,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).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 = pairFor(tokenA, tokenB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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 = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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,
            WBNB,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWBNB(WBNB).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 = pairFor(token, WBNB);
        uint value = approveMax ? uint(- 1) : liquidity;
        IMdexPair(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,) = IMdexFactory(factory).sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOut);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
            IMdexPair(pairFor(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 = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(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 = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsOut(amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).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] == WBNB, 'MdexRouter: INVALID_PATH');
        amounts = IMdexFactory(factory).getAmountsIn(amountOut, path);
        require(amounts[0] <= msg.value, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value : amounts[0]}();
        assert(IWBNB(WBNB).transfer(pairFor(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,) = IMdexFactory(factory).sortTokens(input, output);
            IMdexPair pair = IMdexPair(pairFor(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 = IMdexFactory(factory).getAmountOut(amountInput, reserveInput, reserveOutput, input, output);
            }
            if (swapMining != address(0)) {
                ISwapMining(swapMining).swap(msg.sender, input, output, amountOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? pairFor(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, pairFor(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,
            'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
    external
    virtual
    override
    payable
    ensure(deadline)
    {
        require(path[0] == WBNB, 'MdexRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value : amountIn}();
        assert(IWBNB(WBNB).transfer(pairFor(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,
            'MdexRouter: 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] == WBNB, 'MdexRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, pairFor(path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public view override returns (uint256 amountB) {
        return IMdexFactory(factory).quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountOut){
        return IMdexFactory(factory).getAmountOut(amountIn, reserveIn, reserveOut, token0, token1);
    }

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountIn){
        return IMdexFactory(factory).getAmountIn(amountOut, reserveIn, reserveOut, token0, token1);
    }

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WBNB","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"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","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":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"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":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"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":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200516e3803806200516e8339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614fb9620001b5600039806101ec5280610ec65280610f015280610fe352806112e452806118aa5280611b7e5280611fc852806120c2528061217852806122465280612491528061251952806128435280612abf5280612b6e5280612c3a5280612ccf5280612d43528061337952806136315280613666528061369a528061370e52806138ae5280613af55280613b7d52508061109952806113d5528061167e5280611960528061230252806126a85280612892528061294d52806129cd52806130d1528061323f52806132a35280613313528061396952806140cf528061442d528061463f528061493152806149df5280614a865280614b225280614c175250614fb96000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f0000000000000000000000000000000000000000000000000000000000000000612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614900565b9094509250600061368a8b7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506136988b338388613f2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000000000000000000000000000000000000000000000909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c634300060600330000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x3cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [1] : _WBNB (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

18180:18375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18696:10;-1:-1:-1;;;;;18710:4:0;18696:18;;18689:26;;;;18180:18375;;12:1:-1;9;2:12;23030:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23030:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23030:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30025:790;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30025:790:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30025:790:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30025:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30025:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30025:790:0;;-1:-1:-1;30025:790:0;-1:-1:-1;;;;;;30025:790: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;30025:790:0;;;;;;;;;;;;;;;;;36354:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36354:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36354:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36354:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36354:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36354:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36354:196:0;;-1:-1:-1;36354:196:0;;-1:-1:-1;;;;;36354:196:0:i;23711:647::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23711:647:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23711:647:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17349:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17349:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17349:104:0;-1:-1:-1;;;;;17349:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27427:593;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27427:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27427:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27427:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27427:593:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27427:593:0;;-1:-1:-1;27427:593:0;-1:-1:-1;;;;;;27427:593:0;;;;;;;;:::i;29249:768::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29249:768:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29249:768:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29249:768:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29249:768:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29249:768:0;;-1:-1:-1;29249:768:0;-1:-1:-1;;;;;;29249:768:0;;;;;;;;:::i;18359:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18359:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18359:34:0;;;;;;;;;;;;;;18957:106;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18957:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18957:106:0;-1:-1:-1;;;;;18957:106:0;;:::i;25792:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25792:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25792:688:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33065:683;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33065:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33065:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33065:683:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33065:683:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33065:683:0;;-1:-1:-1;33065:683:0;-1:-1:-1;;;;;;33065:683:0;;;;;;;;:::i;17461:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17461:140:0;;;:::i;34559:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34559:791:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34559:791:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34559:791:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34559:791:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34559:791:0;;-1:-1:-1;34559:791:0;-1:-1:-1;;;;;;34559:791:0;;;;;;;;:::i;28607:634::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28607:634:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28607:634:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28607:634:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28607:634:0;;-1:-1:-1;28607:634:0;-1:-1:-1;;;;;;28607:634:0;;;;;;;;:::i;28028:571::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28028:571:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28028:571:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28028:571:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28028:571:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28028:571:0;;-1:-1:-1;28028:571:0;-1:-1:-1;;;;;;28028:571:0;;;;;;;;:::i;17262:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17262:79:0;;;:::i;18314:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18314:38:0;;;:::i;18795:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18795:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18795:154:0;;;;;;;;;;:::i;35599:268::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35599:268:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35599:268:0;;;;;;;;;;;;;-1:-1:-1;;;;;35599:268:0;;;;;;;;;;;;:::i;35394:197::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35394:197:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35394:197:0;;;;;;;;;;;;:::i;25084:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25084:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25084:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33756:795::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33756:795:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33756:795:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33756:795:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33756:795:0;;-1:-1:-1;33756:795:0;-1:-1:-1;;;;;;33756:795:0;;;;;;;;:::i;22189:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22189:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22189:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18266:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18266:41:0;;;:::i;35875:267::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35875:267:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35875:267:0;;;;;;;;;;;;;-1:-1:-1;;;;;35875:267:0;;;;;;;;;;;;:::i;36150:196::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36150:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36150:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36150:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36150:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36150:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36150:196:0;;-1:-1:-1;36150:196:0;;-1:-1:-1;;;;;36150:196:0:i;24366:639::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24366:639:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24366:639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20487:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20487:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20487:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17846:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17846:109:0;-1:-1:-1;;;;;17846:109:0;;:::i;21202:944::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21202:944:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30823:747::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30823:747:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30823:747:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30823:747:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30823:747:0;;-1:-1:-1;30823:747:0;-1:-1:-1;;;;;;30823:747:0;;;;;;;;:::i;23030:673::-;23267:16;23285:14;23248:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;23339:196:::1;23369:5;23389:4;23408:9;23432:14;23461:12;23496:4;23516:8;23339:15;:196::i;:::-;23312:223:::0;;-1:-1:-1;23312:223:0;-1:-1:-1;23546:51:0::1;23574:5:::0;23581:2;23312:223;23546:27:::1;:51::i;:::-;23614:4;-1:-1:-1::0;;;;;23608:20:0::1;;23629:9;23608:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23608:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23608:31:0;;;;23650:45;23681:2;23685:9;23650:30;:45::i;:::-;23030:673:::0;;;;;;;;;;:::o;30025:790::-;30219:21;30195:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30291:4:0::1;30266:29;:4:::0;;-1:-1:-1;;30271:15:0;;30266:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30266:21:0::1;-1:-1:-1::0;;;;;30266:29:0::1;;30258:66;;;::::0;;-1:-1:-1;;;30258:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30258:66:0;;;;;;;;;;;;;::::1;;30345:51;::::0;;-1:-1:-1;;;30345:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30358:7:0::1;30345:35;::::0;::::1;::::0;30381:8;;30391:4;;;;30345:51;;30391:4;30345:51:::1;::::0;::::1;::::0;30391:4;30345:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30345:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30345:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30345:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;30345:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;30345:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;30345:51:0;::::1;::::0;::::1;::::0;412:14:-1;30345:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;30345:51:0;;;;;;;;::::0;::::1;;30335:61;;30446:12;30415:7;30440:1;30423:7;:14;:18;30415:27;;;;;;;;;;;;;;:43;;30407:94;;;;-1:-1:-1::0;;;30407:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30512:115;30558:4;;30563:1;30558:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30558:7:0::1;30567:10;30579:25;30587:4;;30592:1;30587:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30587:7:0::1;30596:4;;30601:1;30596:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30596:7:0::1;30579;:25::i;:::-;30606:7;30614:1;30606:10;;;;;;;;;;;;;;30512:31;:115::i;:::-;30638:35;30644:7;30653:4;;30638:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30667:4:0::1;::::0;-1:-1:-1;30638:5:0::1;::::0;-1:-1:-1;;30638:35:0:i:1;:::-;30690:4;-1:-1:-1::0;;;;;30684:20:0::1;;30705:7;30730:1;30713:7;:14;:18;30705:27;;;;;;;;;;;;;;30684:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30684:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30684:49:0;;;;30744:63;30775:2;30779:7;30804:1;30787:7;:14;:18;30779:27;;;;;;;;;;;;;;30744:30;:63::i;:::-;30025:790:::0;;;;;;;;;:::o;36354:196::-;36491:51;;;-1:-1:-1;;;36491:51:0;;;;;;;;;;;;;;;;;;;;;;36448:24;;-1:-1:-1;;;;;36504:7:0;36491:34;;;;36526:9;;36537:4;;36491:51;;;;;;;;;;;;;;-1:-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;36491:51:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36491:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36491:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36491:51:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;36491:51:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36491:51:0;;421:4:-1;412:14;;;;36491:51:0;;;;;412:14:-1;36491:51:0;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;36491:51:0;;;;;;;;;;;36484:58;;36354:196;;;;:::o;23711:647::-;24017:12;24031;24056;24071:23;24079:6;24087;24071:7;:23::i;:::-;24056:38;;24105:10;24118;:34;;24143:9;24118:34;;;-1:-1:-1;;24118:34:0;24163:75;;;-1:-1:-1;;;24163:75:0;;24186:10;24163:75;;;;24206:4;24163:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;-1:-1:-1;;;;;;24163:22:0;;;;;:75;;;;;-1:-1:-1;;24163:75:0;;;;;;;;-1:-1:-1;24163:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24163:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24163:75:0;;;;24270:80;24286:6;24294;24302:9;24313:10;24325;24337:2;24341:8;24270:15;:80::i;:::-;24249:101;;;;;;;;23711:647;;;;;;;;;;;;;;;;:::o;17349:104::-;17404:4;17439:6;-1:-1:-1;;;;;17439:6:0;;;17428:17;;;;17349:104::o;27427:593::-;27651:21;27632:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;27695:51:::1;::::0;;-1:-1:-1;;;27695:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27708:7:0::1;27695:35;::::0;::::1;::::0;27731:8;;27741:4;;;;27695:51;;27741:4;27695:51:::1;::::0;::::1;::::0;27741:4;27695:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27695:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27695:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27695:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27695:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;27695:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;27695:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;27695:51:0;::::1;::::0;::::1;::::0;412:14:-1;27695:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;27695:51:0;;;;;;;;::::0;::::1;;27685:61;;27796:12;27765:7;27790:1;27773:7;:14;:18;27765:27;;;;;;;;;;;;;;:43;;27757:94;;;;-1:-1:-1::0;;;27757:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:115;27908:4;;27913:1;27908:7;;;;;;27862:115;27988:24;27994:7;28003:4;;27988:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28009:2:0;;-1:-1:-1;27988:5:0::1;::::0;-1:-1:-1;;27988:24:0:i:1;29249:768::-:0;29443:21;29419:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29515:4:0::1;29490:29;:4:::0;;-1:-1:-1;;29495:15:0;;29490:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29490:21:0::1;-1:-1:-1::0;;;;;29490:29:0::1;;29482:66;;;::::0;;-1:-1:-1;;;29482:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29482:66:0;;;;;;;;;;;;;::::1;;29569:51;::::0;;-1:-1:-1;;;29569:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29582:7:0::1;29569:34;::::0;::::1;::::0;29604:9;;29615:4;;;;29569:51;;29615:4;29569:51:::1;::::0;::::1;::::0;29615:4;29569:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29569:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29569:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29569:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29569:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;29569:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;29569:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;29569:51:0;::::1;::::0;::::1;::::0;412:14:-1;29569:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;29569:51:0;;;;;;;;::::0;::::1;;29559:61;;29653:11;29639:7;29647:1;29639:10;;;;;;;;;;;;;;:25;;29631:72;;;;-1:-1:-1::0;;;29631:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18359:34:::0;;;-1:-1:-1;;;;;18359:34:0;;:::o;18957:106::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:10:::1;:25:::0;;-1:-1:-1;;;;;;19030:25:0::1;-1:-1:-1::0;;;;;19030:25:0;;;::::1;::::0;;;::::1;::::0;;18957:106::o;25792:688::-;26110:14;26137:12;26152:20;26160:5;26167:4;26152:7;:20::i;:::-;26137:35;;26183:10;26196;:34;;26221:9;26196:34;;;-1:-1:-1;;26196:34:0;26241:75;;;-1:-1:-1;;;26241:75:0;;26264:10;26241:75;;;;26284:4;26241:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:47;;-1:-1:-1;;;;;;26241:22:0;;;;;:75;;;;;-1:-1:-1;;26241:75:0;;;;;;;;-1:-1:-1;26241:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;26241:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26241:75:0;;;;26339:133;26401:5;26408:9;26419:14;26435:12;26449:2;26453:8;26339:47;:133::i;:::-;26327:145;25792:688;-1:-1:-1;;;;;;;;;;;;;25792:688:0:o;33065:683::-;33299:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;33320:113:::1;33366:4;;33371:1;33366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33366:7:0::1;33375:10;33387:25;33395:4;;33400:1;33395:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33395:7:0::1;33404:4;;33409:1;33404:7;;;;;;33387:25;33414:8;33320:31;:113::i;:::-;33444:18;33472:4:::0;;-1:-1:-1;;33477:15:0;;33472:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33472:21:0::1;-1:-1:-1::0;;;;;33465:39:0::1;;33505:2;33465:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33465:43:0::1;-1:-1:-1::0;;;;;33465:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33465:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33465:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33465:43:0;33519:44:::1;::::0;;33465:43:::1;33519:44:::0;;::::1;::::0;;;;;;;;;;;33465:43;;-1:-1:-1;33519:44:0::1;::::0;;;33554:4;;;;;;33519:44;::::1;::::0;33554:4;;33519:44;33554:4;33519:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33560:2:0;;-1:-1:-1;33519:34:0::1;::::0;-1:-1:-1;;33519:44:0:i:1;:::-;33662:12:::0;33596:62:::1;33644:13:::0;33603:4;;-1:-1:-1;;33608:15:0;;33603:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33603:21:0::1;-1:-1:-1::0;;;;;33596:39:0::1;;33636:2;33596:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33596:43:0::1;-1:-1:-1::0;;;;;33596:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33596:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33596:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33596:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;33574:166;;;;-1:-1:-1::0;;;33574:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;33065:683:::0;;;;;;;:::o;17461:140::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17560:1:::1;17544:6:::0;;17523:40:::1;::::0;-1:-1:-1;;;;;17544:6:0;;::::1;::::0;17523:40:::1;::::0;17560:1;;17523:40:::1;17591:1;17574:19:::0;;-1:-1:-1;;;;;;17574:19:0::1;::::0;;17461:140::o;34559:791::-;34810:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34869:4:0::1;34844:29;:4:::0;;-1:-1:-1;;34849:15:0;;34844:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34844:21:0::1;-1:-1:-1::0;;;;;34844:29:0::1;;34836:66;;;::::0;;-1:-1:-1;;;34836:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34836:66:0;;;;;;;;;;;;;::::1;;34913:113;34959:4;;34964:1;34959:7;;;;;;34913:113;35037:55;35072:4;;35037:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35086:4:0::1;::::0;-1:-1:-1;35037:34:0::1;::::0;-1:-1:-1;;35037:55:0:i:1;:::-;35120:37;::::0;;-1:-1:-1;;;35120:37:0;;35151:4:::1;35120:37;::::0;::::1;::::0;;;35103:14:::1;::::0;-1:-1:-1;;;;;35127:4:0::1;35120:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35120:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35120:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35120:37:0;;-1:-1:-1;35176:25:0;;::::1;;35168:76;;;;-1:-1:-1::0;;;35168:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35261:4;-1:-1:-1::0;;;;;35255:20:0::1;;35276:9;35255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35255:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35255:31:0;;;;35297:45;35328:2;35332:9;35297:30;:45::i;28607:634::-:0;28799:21;28775:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28857:4:::1;-1:-1:-1::0;;;;;28846:15:0::1;:4;;28851:1;28846:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28846:7:0::1;-1:-1:-1::0;;;;;28846:15:0::1;;28838:52;;;::::0;;-1:-1:-1;;;28838:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28838:52:0;;;;;;;;;;;;;::::1;;28911;::::0;;-1:-1:-1;;;28911:52:0;;28947:9:::1;28911:52;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28924:7:0::1;28911:35;::::0;::::1;::::0;28958:4;;;;28911:52;;;;28958:4;28911:52:::1;::::0;::::1;::::0;28958:4;28911:52;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28911:52:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28911:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28911:52:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28911:52:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28911:52:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28911:52:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28911:52:0;::::1;::::0;::::1;::::0;412:14:-1;28911:52:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28911:52:0;;;;;;;;::::0;::::1;;28901:62;;29013:12;28982:7;29007:1;28990:7;:14;:18;28982:27;;;;;;;;;;;;;;:43;;28974:94;;;;-1:-1:-1::0;;;28974:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29085:4;-1:-1:-1::0;;;;;29079:19:0::1;;29107:7;29115:1;29107:10;;;;;;;;;;;;;;29079:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29079:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29079:41:0;;;;;29144:4;-1:-1:-1::0;;;;;29138:20:0::1;;29159:25;29167:4;;29172:1;29167:7;;;;;;29159:25;29186:7;29194:1;29186:10;;;;;;;;;;;;;;29138:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;29138:59:0::1;-1:-1:-1::0;;;;;29138:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29138:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29138:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29138:59:0;29131:67:::1;;;;29209:24;29215:7;29224:4;;29209:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29230:2:0;;-1:-1:-1;29209:5:0::1;::::0;-1:-1:-1;;29209:24:0:i:1;:::-;28607:634:::0;;;;;;;;:::o;28028:571::-;28252:21;28233:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28296:51:::1;::::0;;-1:-1:-1;;;28296:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28309:7:0::1;28296:34;::::0;::::1;::::0;28331:9;;28342:4;;;;28296:51;;28342:4;28296:51:::1;::::0;::::1;::::0;28342:4;28296:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28296:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28296:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28296:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28296:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28296:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28296:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28296:51:0;::::1;::::0;::::1;::::0;412:14:-1;28296:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28296:51:0;;;;;;;;::::0;::::1;;28286:61;;28380:11;28366:7;28374:1;28366:10;;;;;;;;;;;;;;:25;;28358:72;;;;-1:-1:-1::0;;;28358:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:79:::0;17300:7;17327:6;-1:-1:-1;;;;;17327:6:0;17262:79;:::o;18314:38::-;;;:::o;18795:154::-;18896:45;;;-1:-1:-1;;;18896:45:0;;-1:-1:-1;;;;;18896:45:0;;;;;;;;;;;;;;;;18865:12;;18909:7;18896:29;;;;:45;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;18896:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18896:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18896:45:0;;18795:154;-1:-1:-1;;;18795:154:0:o;35599:268::-;35776:83;;;-1:-1:-1;;;35776:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35776:83:0;;;;;;;;;;;;;;;;35740:17;;35789:7;35776:34;;;;:83;;;;;;;;;;;;;;:34;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;35776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35776:83:0;;35599:268;-1:-1:-1;;;;;;35599:268:0:o;35394:197::-;35492:15;35540:7;-1:-1:-1;;;;;35527:27:0;;35555:7;35564:8;35574;35527:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35527:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35527:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35527:56:0;;35394:197;-1:-1:-1;;;;35394:197:0:o;25084:700::-;25350:14;25331:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;25393:196:::1;25423:5;25443:4;25462:9;25486:14;25515:12;25550:4;25570:8;25393:15;:196::i;:::-;25639:38;::::0;;-1:-1:-1;;;25639:38:0;;25671:4:::1;25639:38;::::0;::::1;::::0;;;25377:212;;-1:-1:-1;25600:78:0::1;::::0;-1:-1:-1;25628:5:0;;25635:2;;-1:-1:-1;;;;;25639:23: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;25639:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25639:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25639:38:0;25600:27:::1;:78::i;:::-;25695:4;-1:-1:-1::0;;;;;25689:20:0::1;;25710:9;25689:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25689:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25689:31:0;;;;25731:45;25762:2;25766:9;25731:30;:45::i;33756:795::-:0;33996:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;34041:4:::1;-1:-1:-1::0;;;;;34030:15:0::1;:4;;34035:1;34030:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34030:7:0::1;-1:-1:-1::0;;;;;34030:15:0::1;;34022:52;;;::::0;;-1:-1:-1;;;34022:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34022:52:0;;;;;;;;;;;;;::::1;;34085:13;34101:9;34085:25;;34127:4;-1:-1:-1::0;;;;;34121:19:0::1;;34149:8;34121:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34121:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34121:39:0;;;;;34184:4;-1:-1:-1::0;;;;;34178:20:0::1;;34199:25;34207:4;;34212:1;34207:7;;;;;;34199:25;34226:8;34178:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;34178:57:0::1;-1:-1:-1::0;;;;;34178:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34178:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34178:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34178:57:0;34171:65:::1;;;;34247:18;34275:4:::0;;-1:-1:-1;;34280:15:0;;34275:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34275:21:0::1;-1:-1:-1::0;;;;;34268:39:0::1;;34308:2;34268:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34268:43:0::1;-1:-1:-1::0;;;;;34268:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34268:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34268:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34268:43:0;34322:44:::1;::::0;;34268:43:::1;34322:44:::0;;::::1;::::0;;;;;;;;;;;34268:43;;-1:-1:-1;34322:44:0::1;::::0;;;34357:4;;;;;;34322:44;::::1;::::0;34357:4;;34322:44;34357:4;34322:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34363:2:0;;-1:-1:-1;34322:34:0::1;::::0;-1:-1:-1;;34322:44:0:i:1;:::-;34465:12:::0;34399:62:::1;34447:13:::0;34406:4;;-1:-1:-1;;34411:15:0;;34406:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34406:21:0::1;-1:-1:-1::0;;;;;34399:39:0::1;;34439:2;34399:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34399:43:0::1;-1:-1:-1::0;;;;;34399:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22189:833:0::0;22443:12;22457;22424:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;22482:12:::1;22497:23;22505:6;22513;22497:7;:23::i;:::-;22531:57;::::0;;-1:-1:-1;;;22531:57:0;;22560:10:::1;22531:57;::::0;::::1;::::0;-1:-1:-1;;;;;22531:28:0;::::1;:57:::0;;;;;;;;;;;;;;22482:38;;-1:-1:-1;22531:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22531:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22531:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22531:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22665:24:0::1;::::0;;-1:-1:-1;;;22665:24:0;;-1:-1:-1;;;;;22665:24:0;;::::1;;::::0;::::1;::::0;;;22635:12:::1;::::0;;;22665:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;22635:12;22665:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22665:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22665:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;22665:24:0;;;;;;;;;;;;;;;;;;;;;;;;;22634:55;;;;22701:14;22733:7;-1:-1:-1::0;;;;;22720:32:0::1;;22753:6;22761;22720:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;;;;;::::0;::::1;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22720:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22720:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22720:48:0;;-1:-1:-1;;;;;;22800:16:0;;::::1;::::0;;::::1;;:58;;22841:7;22850;22800:58;;;22820:7;22829;22800:58;22779:79:::0;;-1:-1:-1;22779:79:0;-1:-1:-1;22877:21:0;;::::1;;22869:67;;;;-1:-1:-1::0;;;22869:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22966:10;22955:7;:21;;22947:67;;;;-1:-1:-1::0;;;22947:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;;;;22189:833:::0;;;;;;;;;;;:::o;18266:41::-;;;:::o;35875:267::-;36051:83;;;-1:-1:-1;;;36051:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36051:83:0;;;;;;;;;;;;;;;;36016:16;;36064:7;36051:33;;;;:83;;;;;;;;;;;;;;:33;:83;;;2:2:-1;;;;27:1;24;17:12;36150:196:0;36287:51;;;-1:-1:-1;;;36287:51:0;;;;;;;;;;;;;;;;;;;;;;36244:24;;36300:7;-1:-1:-1;;;;;36287:35:0;;;;:51;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24366:639:0;24655:16;24673:14;24700:12;24715:20;24723:5;24730:4;24715:7;:20::i;:::-;24700:35;;24746:10;24759;:34;;24784:9;24759:34;;;-1:-1:-1;;24759:34:0;24804:75;;;-1:-1:-1;;;24804:75:0;;24827:10;24804:75;;;;24847:4;24804:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24746:47;;-1:-1:-1;;;;;;24804:22:0;;;;;:75;;;;;-1:-1:-1;;24804:75:0;;;;;;;;-1:-1:-1;24804:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24804:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24804:75:0;;;;24917:80;24936:5;24943:9;24954:14;24970:12;24984:2;24988:8;24917:18;:80::i;:::-;24890:107;;;;-1:-1:-1;24366:639:0;-1:-1:-1;;;;;;;;;;;;;24366:639:0:o;20487:707::-;20775:12;20789;20803:14;20756:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;20851:85:::1;20865:6;20873;20881:14;20897;20913:10;20925;20851:13;:85::i;:::-;20830:106:::0;;-1:-1:-1;20830:106:0;-1:-1:-1;20947:12:0::1;20962:23;20970:6:::0;20978;20962:7:::1;:23::i;:::-;20947:38;;20996:66;21028:6;21036:10;21048:4;21054:7;20996:31;:66::i;:::-;21073;21105:6;21113:10;21125:4;21131:7;21073:31;:66::i;:::-;21172:4;-1:-1:-1::0;;;;;21162:20:0::1;;21183:2;21162:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21162:24:0::1;-1:-1:-1::0;;;;;21162:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21162:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21162:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21162:24:0;20487:707;;;;-1:-1:-1;21162:24:0;;-1:-1:-1;20487:707:0;;-1:-1:-1;;;;;;;;;20487:707:0:o;17846:109::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:28:::1;17938:8;17919:18;:28::i;:::-;17846:109:::0;:::o;21202:944::-;21455:16;21473:14;21489;21436:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;21543:176:::1;21571:5;21591:4;21610:18;21643:9;21667:14;21696:12;21543:13;:176::i;:::-;21516:203:::0;;-1:-1:-1;21516:203:0;-1:-1:-1;21730:12:0::1;21745:20;21753:5:::0;21760:4:::1;21745:7;:20::i;:::-;21730:35;;21776:69;21808:5;21815:10;21827:4;21833:11;21776:31;:69::i;:::-;21862:4;-1:-1:-1::0;;;;;21856:19:0::1;;21884:9;21856:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21856:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21856:40:0;;;;;21920:4;-1:-1:-1::0;;;;;21914:20:0::1;;21935:4;21941:9;21914:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21914:37:0::1;-1:-1:-1::0;;;;;21914:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21914:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21914:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21914:37:0;21907:45:::1;;;;21985:4;-1:-1:-1::0;;;;;21975:20:0::1;;21996:2;21975:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21975:24:0::1;-1:-1:-1::0;;;;;21975:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21975:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21975:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21975:24:0;;-1:-1:-1;22050:9:0::1;:21:::0;-1:-1:-1;22046:92:0::1;;;22073:65;22104:10;22128:9;22116;:21;22073:30;:65::i;:::-;18514:1;21202:944:::0;;;;;;;;;;;:::o;30823:747::-;31012:21;30988:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;31070:4:::1;-1:-1:-1::0;;;;;31059:15:0::1;:4;;31064:1;31059:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31059:7:0::1;-1:-1:-1::0;;;;;31059:15:0::1;;31051:52;;;::::0;;-1:-1:-1;;;31051:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31051:52:0;;;;;;;;;;;;;::::1;;31124:51;::::0;;-1:-1:-1;;;31124:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31137:7:0::1;31124:34;::::0;::::1;::::0;31159:9;;31170:4;;;;31124:51;;31170:4;31124:51:::1;::::0;::::1;::::0;31170:4;31124:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31124:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31124:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31124:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31124:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;31124:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;31124:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;31124:51:0;::::1;::::0;::::1;::::0;412:14:-1;31124:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;31124:51:0;;;;;;;;::::0;::::1;;31114:61;;31208:9;31194:7;31202:1;31194:10;;;;;;;;;;;;;;:23;;31186:70;;;;-1:-1:-1::0;;;31186:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:4;-1:-1:-1::0;;;;;31267:19:0::1;;31295:7;31303:1;31295:10;;;;;;;;;;;;;;31267:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31267:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31267:41:0;;;;;31332:4;-1:-1:-1::0;;;;;31326:20:0::1;;31347:25;31355:4;;31360:1;31355:7;;;;;;31347:25;31374:7;31382:1;31374:10;;;;;;;;;;;;;;31326:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:59:0::1;-1:-1:-1::0;;;;;31326:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:59:0;31319:67:::1;;;;31397:24;31403:7;31412:4;;31397:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31418:2:0;;-1:-1:-1;31397:5:0::1;::::0;-1:-1:-1;;31397:24:0:i:1;:::-;31484:7;31492:1;31484:10;;;;;;;;;;;;;;31472:9;:22;31468:94;;;31496:66;31527:10;31551:7;31559:1;31551:10;;;;;;;;;;;;;;31539:9;:22;31496:30;:66::i;16098:361::-:0;16293:45;;;-1:-1:-1;;;;;16293:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16293:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16282:57:0;;;;16247:12;;16261:17;;16282:10;;;;16293:45;16282:57;;;25:18:-1;16282:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;16282: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;;16246:93:0;;;;16358:7;:57;;;;-1:-1:-1;16370:11:0;;:16;;:44;;;16401:4;16390:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16390:24:0;16370:44;16350:101;;;;;-1:-1:-1;;;16350:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16098:361;;;;;:::o;16877:197::-;16987:12;;;16947;16987;;;;;;;;;-1:-1:-1;;;;;16964:7:0;;;16980:5;;16964:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;16964:36: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;;16946:54:0;;;17019:7;17011:55;;;;-1:-1:-1;;;17011:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16877:197;;;:::o;16467:402::-;16692:51;;;-1:-1:-1;;;;;16692:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16692:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16681:63:0;;;;16646:12;;16660:17;;16681:10;;;;16692:51;16681:63;;;25:18:-1;16681:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;16681: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;;16645:99:0;;;;16763:7;:57;;;;-1:-1:-1;16775:11:0;;:16;;:44;;;16806:4;16795:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16795:24:0;16775:44;16755:106;;;;-1:-1:-1;;;16755:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16467:402;;;;;;:::o;26591:828::-;26698:6;26693:719;26724:1;26710:4;:11;:15;26706:1;:19;26693:719;;;26748:13;26763:14;26782:4;26787:1;26782:7;;;;;;;;;;;;;;26791:4;26796:1;26800;26796:5;26791:11;;;;;;;;;;;;;;26747:56;;;;26819:14;26851:7;-1:-1:-1;;;;;26838:32:0;;26871:5;26878:6;26838:47;;;;;;;;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26838:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26838:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26838:47:0;26917:14;;26838:47;;-1:-1:-1;26900:14:0;;26917:7;;26929:1;26925:5;;;26917:14;;;;;;;;;;;;;;;;26950:10;;26917:14;;-1:-1:-1;;;;;;26950:10:0;:24;26946:131;;27007:10;;26995:66;;;-1:-1:-1;;;26995:66:0;;27024:10;26995:66;;;;-1:-1:-1;;;;;26995:66:0;;;;;;;;;;;;;;;;;;;;;;27007:10;;;;;26995:28;;:66;;;;;;;;;;;;;;27007:10;;26995:66;;;2:2:-1;;;;27:1;24;17:12;2:2;26995:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26995:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;26946:131:0;27092:15;27109;27137:6;-1:-1:-1;;;;;27128:15:0;:5;-1:-1:-1;;;;;27128:15:0;;:61;;27170:9;27186:1;27128:61;;;27152:1;27156:9;27128:61;27091:98;;;;27204:10;27235:1;27221:4;:11;:15;27217:1;:19;:56;;27270:3;27217:56;;;27239:28;27247:6;27255:4;27260:1;27264;27260:5;27255:11;;;;;;;;;;;;;;27239:7;:28::i;:::-;27204:69;;27298:22;27306:5;27313:6;27298:7;:22::i;:::-;-1:-1:-1;;;;;27288:38:0;;27345:10;27357;27369:2;27383:1;27373:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;27373:12:0;87:42:-1;143:17;;-1:-1;27373:12:0;;27288:112;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27288:112:0;-1:-1:-1;;;;;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27288:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26727:3:0;;;;;-1:-1:-1;26693:719:0;;-1:-1:-1;;;;;;;;26693:719:0;;;26591:828;;;:::o;31717:1340::-;31830:6;31825:1225;31856:1;31842:4;:11;:15;31838:1;:19;31825:1225;;;31880:13;31895:14;31914:4;31919:1;31914:7;;;;;;;;;;;;;;31923:4;31928:1;31932;31928:5;31923:11;;;;;;;;;;;;;;31879:56;;;;31951:14;31983:7;-1:-1:-1;;;;;31970:32:0;;32003:5;32010:6;31970:47;;;;;;;;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31970:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31970:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31970:47:0;;-1:-1:-1;32032:14:0;32059:22;32067:5;32074:6;32059:7;:22::i;:::-;32032:50;;32097:16;32128:17;32219:13;32234;32252:4;-1:-1:-1;;;;;32252:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32252:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32252:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32252:18:0;;;;;;;32218:52;;;;;-1:-1:-1;32218:52:0;;-1:-1:-1;32290:17:0;;-1:-1:-1;;;;;32331:15:0;;;;;;;:61;;32373:8;32383;32331:61;;;32350:8;32360;32331:61;32289:103;;;;32425:56;32468:12;32432:5;-1:-1:-1;;;;;32425:23:0;;32457:4;32425:38;;;;;;;;;;;;;-1:-1:-1;;;;;32425:38:0;-1:-1:-1;;;;;32425:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32425:56:0;32515:91;;;-1:-1:-1;;;32515:91:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32515:91:0;;;;;;;;;;;;;;;;;;-1:-1:-1;32528:7:0;32515:34;;;;;;:91;;;;;;;;;;;;;;;:34;:91;;;2:2:-1;;;;27:1;24;17:12;2:2;32515:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32515:91:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32515:91:0;32640:10;;32515:91;;-1:-1:-1;;;;;;32640:10:0;:24;;-1:-1:-1;32636:134:0;;-1:-1:-1;;;32636:134:0;32697:10;;32685:69;;;-1:-1:-1;;;32685:69:0;;32714:10;32685:69;;;;-1:-1:-1;;;;;32685:69:0;;;;;;;;;;;;;;;;;;;;;;32697:10;;;;;32685:28;;:69;;;;;;;;;;;;;;32697:10;;32685:69;;;2:2:-1;;;;27:1;24;17:12;2:2;32685:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32685:69:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32636:134:0;32785:15;32802;32830:6;-1:-1:-1;;;;;32821:15:0;:5;-1:-1:-1;;;;;32821:15:0;;:67;;32866:12;32885:1;32821:67;;;32845:1;32849:12;32821:67;32784:104;;;;32903:10;32934:1;32920:4;:11;:15;32916:1;:19;:56;;32969:3;32916:56;;;32938:28;32946:6;32954:4;32959:1;32963;32959:5;32954:11;;;;;;;32938:28;33025:12;;;33035:1;33025:12;;;;;;;;;;-1:-1:-1;;;32987:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32987:51:0;;;;;;;;;;;;;;;;;;;;;;32903:69;;-1:-1:-1;32987:9:0;;;;;;32997:10;;33009;;32903:69;;33025:12;;32987:51;;;;;;;;33025:12;;32987:51;;;;33025: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;32987:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32987:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31859:3:0;;;;;-1:-1:-1;31825:1225:0;;-1:-1:-1;;;;;;;;;;31825:1225:0;11881:136;11939:7;11966:43;11970:1;11973;11966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11959:50;11881:136;-1:-1:-1;;;11881:136:0:o;19103:1376::-;19416:45;;;-1:-1:-1;;;19416:45:0;;-1:-1:-1;;;;;19416:45:0;;;;;;;;;;;;;;;;19321:12;;;;;;19429:7;19416:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;19416:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19416:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19416:45:0;-1:-1:-1;;;;;19416:59:0;;19412:140;;;19492:48;;;-1:-1:-1;;;19492:48:0;;-1:-1:-1;;;;;19492:48:0;;;;;;;;;;;;;;;;19505:7;19492:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;19492:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19492:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19492:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19412:140:0;19595:49;;;-1:-1:-1;;;19595:49:0;;-1:-1:-1;;;;;19595:49:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;19608:7:0;19595:33;;;;;;:49;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;19595:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19595:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19595:49:0;;;;;;;;;-1:-1:-1;19595:49:0;-1:-1:-1;19659:13:0;;:30;;;;-1:-1:-1;19676:13:0;;19659:30;19655:817;;;19728:14;;-1:-1:-1;19744:14:0;;-1:-1:-1;19655:817:0;;;19792:19;19827:7;-1:-1:-1;;;;;19814:27:0;;19842:14;19858:8;19868;19814:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19814:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19814:63:0;;-1:-1:-1;19896:32:0;;;19892:569;;19975:10;19957:14;:28;;19949:74;;;;-1:-1:-1;;;19949:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20064:14;;-1:-1:-1;20080:14:0;-1:-1:-1;20080:14:0;19892:569;;;20136:19;20171:7;-1:-1:-1;;;;;20158:27:0;;20186:14;20202:8;20212;20158:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20158:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20158:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20158:63:0;;-1:-1:-1;20247:32:0;;;;20240:40;;;;20325:10;20307:14;:28;;20299:74;;;;-1:-1:-1;;;20299:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20414:14;-1:-1:-1;20430:14:0;;-1:-1:-1;19892:569:0;19655:817;;19103:1376;;;;;;;;;;;:::o;17609:229::-;-1:-1:-1;;;;;17683:22:0;;17675:73;;;;-1:-1:-1;;;17675:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17785:6;;;17764:38;;-1:-1:-1;;;;;17764:38:0;;;;17785:6;;;17764:38;;;17813:6;:17;;-1:-1:-1;;;;;;17813:17:0;-1:-1:-1;;;;;17813:17:0;;;;;;;;;;17609:229::o;12025:192::-;12111:7;12147:12;12139:6;;;;12131:29;;;;-1:-1:-1;;;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12183:5:0;;;12025:192::o

Swarm Source

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