Contract 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1c3e5581d275887b979dcb9c58afdc6db031502e3787d5fc6401c44da29218fcBeef Out And Swa...75833592023-03-27 5:44:171 day 3 hrs ago0x1886a80601a6cc8980397b4e4a57d9e356c58d5a IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO2.0680602156130
0xbd2adbaa3d707a3ec0d9a0710df2cb3616cff627215aa2b17ef5844a17d94c6aBeef In ETH75812802023-03-27 2:28:331 day 7 hrs ago0xf8d3097a654c0f9c4927b01aa565796f7c6fb961 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66206,650 CRO3.5455755988110
0xd9478501b76cc58075b73df03191349fa481a4539b95b64a72d0de51910b1043Beef Out And Swa...75762322023-03-26 18:34:161 day 14 hrs ago0xcb3d4e351a1eaea2402d06afc12189b6e5ae981a IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO2.0069813845410
0x4bddb2388e02869142b121eed1fa84ae7bf33c699ee2c724757e15ba015d9f72Beef Out And Swa...75758022023-03-26 17:53:501 day 15 hrs ago0xaffa28b9b8a181e051575e414696e5ba8116fdcd IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.9632047877070
0xa78b086663a91fa056c72f70c37a964e12409295384fb116147cd76cf89cdd26Beef In75655002023-03-26 1:46:132 days 7 hrs ago0x929f79c932c76dfcfa572e1bf4ee2a05c0674b96 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO3.387512755796 4,784.149527302
0x553fd185c2db9f8f792a08315d1c1dbaf7e495e853dd2edd82bf46cdecd19122Beef In ETH75610852023-03-25 18:51:302 days 14 hrs ago0xb2c5d24c130151db4dc42e8056dcf540722f8f7b IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620525.947748121877553 CRO3.397158214029 4,784.352521533
0x3bb8e6a678e19938a35dcc84c4b78b4eae2cbb3d92b42954fb91b8637552ab91Beef Out And Swa...75609332023-03-25 18:37:062 days 14 hrs ago0x77bce1df98d44b2b35ea0ca26619ca4179067b08 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.963395650782 4,784.358934402
0x512b9fe99283a3e501145c7732db26e280e5e36d200a4774a03d30041a0b0589Beef Out And Swa...75608572023-03-25 18:29:522 days 14 hrs ago0x1b84a7c124f7e4a267bff387a8c76863e0eae208 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.963396713755 4,784.361524633
0xeb58ed3a91427ee59a2186e332d30b709037efb8e6b261ae17373c85df610c69Beef Out And Swa...75608452023-03-25 18:28:442 days 15 hrs ago0x1b84a7c124f7e4a267bff387a8c76863e0eae208 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.979467609969 4,784.362070518
0x45c5d3f1500a57bcd90f03b26acdac33c8510f384f1037a79dfdab305d847fcfBeef Out And Swa...75608272023-03-25 18:27:032 days 15 hrs ago0x1b84a7c124f7e4a267bff387a8c76863e0eae208 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.963521670924 4,784.362898327
0x4c3135ad3ebc2d4fcb595c2f2c4c5a06da13721eb00f81c6f5dc3ff94e408ca4Beef In ETH75596452023-03-25 16:35:532 days 16 hrs ago0xf9c830013a921faf1f75bb64ee5329d9c81f8702 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,000 CRO3.397184957164 4,784.417137287
0xec22176b095c33ef90bc55db025f9846bf0e2b7ae8cb3e4a7922d3524d2c4c40Beef In ETH75582652023-03-25 14:26:052 days 19 hrs ago0x815400bf42a37af49f0229b502a15c880ad14ad2 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,400.452744450914699 CRO3.483403207751 4,784.480474562
0x8f55faf70883ad43472cf287ef0f51d2e599d29f31bea964425a97b43283dd4fBeef Out And Swa...75582622023-03-25 14:25:492 days 19 hrs ago0x7d38844e121d5ce2d052cb9a571bac28743349ea IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.96366567112 4,784.480613027
0x0bbc1929824645aa0d253e0da6af5541d9f389cd0b6832713a9a40fe8c1f6f46Beef Out And Swa...75582342023-03-25 14:23:112 days 19 hrs ago0x7d38844e121d5ce2d052cb9a571bac28743349ea IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.97960809413 4,784.481902692
0x0f17eb70bfbb18c0614852872ab96896f57d818cfd3c9b6988e7e21ee7e286a3Beef Out And Swa...75543752023-03-25 8:20:323 days 1 hr ago0x84f61f5843f61a929f86072690afc2b32739ba3f IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.9539978066080
0xffacc77f561ef2b7f78f5ea0d93cb916c64c0559650cff8eb98bc86d7af655dcBeef Out And Swa...75419612023-03-24 12:54:143 days 20 hrs ago0x236f211dd3cbd4aa2bf9b8e566c32f49b5c9b1d5 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO2.045289092145 4,785.231032331
0x927d5ed20d5a9a3c1c82547f95fc03969f49bd1712ff3175ff519bc9dd60023fBeef In ETH75415272023-03-24 12:13:283 days 21 hrs ago0xa4fdcca30d7194f81344d9d496d8f63f72a899a8 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf662090.374307730392043 CRO3.4108121715540
0xfccf8e1b2e5528209fcb4b053587b3e12f15c9f4d974e28209d6be4caf07e831Beef In ETH75414422023-03-24 12:05:273 days 21 hrs ago0x6d14ed5c57762ea605c58565ae683a325cb05764 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf662025,800 CRO3.479616578054 4,840.841979253
0x3ed2c359f03eed5cb17b7ecc5d195bb6a736b5abb8d32f99e68283083cea11a1Beef In75385882023-03-24 7:37:184 days 1 hr ago0x24452bf46d2e72de4bfca2d15178ca124e0f6b19 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO3.0627195885850
0x15544c4987871716b02335a6536e53d868f5264d2e40f7ecb299c0386a6cfdaaBeef Out And Swa...75264332023-03-23 12:30:334 days 20 hrs ago0x84f61f5843f61a929f86072690afc2b32739ba3f IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.964171023080
0x43b6af1199404770baac0062253d168d8baca345a0240bf5e787fb0e85f31d2aBeef Out And Swa...75238512023-03-23 8:27:235 days 1 hr ago0x76f48fccd4d19e0e515f8e419665e06dd0367442 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO1.968440966915 4,786.063631915
0x86700f584a6c00fb57c543f2eb06b01659f35ce502d3479eb927203dfb6158d7Beef Out And Swa...75204142023-03-23 3:03:455 days 6 hrs ago0x6d14ed5c57762ea605c58565ae683a325cb05764 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200 CRO2.054344063736 4,839.99148016
0x1a45491c958bf67d99470756cdbfa31201f79f8a8649660d569ab3942b343eaaBeef In ETH75148642023-03-22 18:20:195 days 15 hrs ago0xe9fb85ca75fdd3eb194c788c0b18333e61061a84 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,000 CRO0.9559834970620
0x9219990904f40ec143d111ab50333932de5aef8dcb20a4cf84418f3da49ef618Beef In ETH75140792023-03-22 17:06:155 days 16 hrs ago0xe9fb85ca75fdd3eb194c788c0b18333e61061a84 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,500 CRO0.95599031510
0xae88ffd14335dbc3da4ac158599fe1d0f143ed706ecff18321bac5628ab5ba74Beef In ETH75140612023-03-22 17:04:345 days 16 hrs ago0xe9fb85ca75fdd3eb194c788c0b18333e61061a84 IN  0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,500 CRO0.955990483190
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbd2adbaa3d707a3ec0d9a0710df2cb3616cff627215aa2b17ef5844a17d94c6a75812802023-03-27 2:28:331 day 7 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200xf8d3097a654c0f9c4927b01aa565796f7c6fb9610.006926186388255417 CRO
0xbd2adbaa3d707a3ec0d9a0710df2cb3616cff627215aa2b17ef5844a17d94c6a75812802023-03-27 2:28:331 day 7 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200.006926186388255417 CRO
0xbd2adbaa3d707a3ec0d9a0710df2cb3616cff627215aa2b17ef5844a17d94c6a75812802023-03-27 2:28:331 day 7 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620 Cronos: WCRO Token6,650 CRO
0x4bddb2388e02869142b121eed1fa84ae7bf33c699ee2c724757e15ba015d9f7275758022023-03-26 17:53:501 day 15 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200xaffa28b9b8a181e051575e414696e5ba8116fdcd59,762.200057456120473936 CRO
0x4bddb2388e02869142b121eed1fa84ae7bf33c699ee2c724757e15ba015d9f7275758022023-03-26 17:53:501 day 15 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf662059,762.200057456120473936 CRO
0x553fd185c2db9f8f792a08315d1c1dbaf7e495e853dd2edd82bf46cdecd1912275610852023-03-25 18:51:302 days 14 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620 Cronos: WCRO Token525.947748121877553899 CRO
0x3bb8e6a678e19938a35dcc84c4b78b4eae2cbb3d92b42954fb91b8637552ab9175609332023-03-25 18:37:062 days 14 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x77bce1df98d44b2b35ea0ca26619ca4179067b08593.068489226359414325 CRO
0x3bb8e6a678e19938a35dcc84c4b78b4eae2cbb3d92b42954fb91b8637552ab9175609332023-03-25 18:37:062 days 14 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620593.068489226359414325 CRO
0x512b9fe99283a3e501145c7732db26e280e5e36d200a4774a03d30041a0b058975608572023-03-25 18:29:522 days 14 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x1b84a7c124f7e4a267bff387a8c76863e0eae2081,070.673434515987318064 CRO
0x512b9fe99283a3e501145c7732db26e280e5e36d200a4774a03d30041a0b058975608572023-03-25 18:29:522 days 14 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,070.673434515987318064 CRO
0xeb58ed3a91427ee59a2186e332d30b709037efb8e6b261ae17373c85df610c6975608452023-03-25 18:28:442 days 15 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x1b84a7c124f7e4a267bff387a8c76863e0eae208906.844781500721909438 CRO
0xeb58ed3a91427ee59a2186e332d30b709037efb8e6b261ae17373c85df610c6975608452023-03-25 18:28:442 days 15 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620906.844781500721909438 CRO
0x45c5d3f1500a57bcd90f03b26acdac33c8510f384f1037a79dfdab305d847fcf75608272023-03-25 18:27:032 days 15 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x1b84a7c124f7e4a267bff387a8c76863e0eae2081,418.228317185457165555 CRO
0x45c5d3f1500a57bcd90f03b26acdac33c8510f384f1037a79dfdab305d847fcf75608272023-03-25 18:27:032 days 15 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66201,418.228317185457165555 CRO
0x4c3135ad3ebc2d4fcb595c2f2c4c5a06da13721eb00f81c6f5dc3ff94e408ca475596452023-03-25 16:35:532 days 16 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620 Cronos: WCRO Token1,000 CRO
0xec22176b095c33ef90bc55db025f9846bf0e2b7ae8cb3e4a7922d3524d2c4c4075582652023-03-25 14:26:052 days 19 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x815400bf42a37af49f0229b502a15c880ad14ad20.001533106145405297 CRO
0xec22176b095c33ef90bc55db025f9846bf0e2b7ae8cb3e4a7922d3524d2c4c4075582652023-03-25 14:26:052 days 19 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200.001533106145405297 CRO
0xec22176b095c33ef90bc55db025f9846bf0e2b7ae8cb3e4a7922d3524d2c4c4075582652023-03-25 14:26:052 days 19 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620 Cronos: WCRO Token1,400.452744450914699952 CRO
0x8f55faf70883ad43472cf287ef0f51d2e599d29f31bea964425a97b43283dd4f75582622023-03-25 14:25:492 days 19 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x7d38844e121d5ce2d052cb9a571bac28743349ea13,199.381350924541133664 CRO
0x8f55faf70883ad43472cf287ef0f51d2e599d29f31bea964425a97b43283dd4f75582622023-03-25 14:25:492 days 19 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf662013,199.381350924541133664 CRO
0x0bbc1929824645aa0d253e0da6af5541d9f389cd0b6832713a9a40fe8c1f6f4675582342023-03-25 14:23:112 days 19 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x7d38844e121d5ce2d052cb9a571bac28743349ea33,678.744434228961526762 CRO
0x0bbc1929824645aa0d253e0da6af5541d9f389cd0b6832713a9a40fe8c1f6f4675582342023-03-25 14:23:112 days 19 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf662033,678.744434228961526762 CRO
0xffacc77f561ef2b7f78f5ea0d93cb916c64c0559650cff8eb98bc86d7af655dc75419612023-03-24 12:54:143 days 20 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200x236f211dd3cbd4aa2bf9b8e566c32f49b5c9b1d5659.263282186417047779 CRO
0xffacc77f561ef2b7f78f5ea0d93cb916c64c0559650cff8eb98bc86d7af655dc75419612023-03-24 12:54:143 days 20 hrs ago Cronos: WCRO Token 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf6620659.263282186417047779 CRO
0x927d5ed20d5a9a3c1c82547f95fc03969f49bd1712ff3175ff519bc9dd60023f75415272023-03-24 12:13:283 days 21 hrs ago 0xe8f59c05ff92cf1584cbc404b4527b4f1eaf66200xa4fdcca30d7194f81344d9d496d8f63f72a899a80.000110409198284089 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeefyZapUniswapV2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-14
*/

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

// SPDX-License-Identifier: GPLv2

// File: @uniswap/v3-core/contracts/libraries/LowGasSafeMath.sol

pragma solidity >=0.7.0;

/// @title Optimized overflow and underflow safe math operations
/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost
library LowGasSafeMath {
    /// @notice Returns x + y, reverts if sum overflows uint256
    /// @param x The augend
    /// @param y The addend
    /// @return z The sum of x and y
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x);
    }

    /// @notice Returns x - y, reverts if underflows
    /// @param x The minuend
    /// @param y The subtrahend
    /// @return z The difference of x and y
    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x);
    }

    /// @notice Returns x * y, reverts if overflows
    /// @param x The multiplicand
    /// @param y The multiplier
    /// @return z The product of x and y
    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(x == 0 || (z = x * y) / x == y);
    }

    /// @notice Returns x + y, reverts if overflows or underflows
    /// @param x The augend
    /// @param y The addend
    /// @return z The sum of x and y
    function add(int256 x, int256 y) internal pure returns (int256 z) {
        require((z = x + y) >= x == (y >= 0));
    }

    /// @notice Returns x - y, reverts if overflows or underflows
    /// @param x The minuend
    /// @param y The subtrahend
    /// @return z The difference of x and y
    function sub(int256 x, int256 y) internal pure returns (int256 z) {
        require((z = x - y) <= x == (y >= 0));
    }
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: @uniswap/lib/contracts/libraries/Babylonian.sol

pragma solidity >=0.4.0;

// computes square roots using the babylonian method
// https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method
library Babylonian {
    // credit for this implementation goes to
    // https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687
    function sqrt(uint256 x) internal pure returns (uint256) {
        if (x == 0) return 0;
        // this block is equivalent to r = uint256(1) << (BitMath.mostSignificantBit(x) / 2);
        // however that code costs significantly more gas
        uint256 xx = x;
        uint256 r = 1;
        if (xx >= 0x100000000000000000000000000000000) {
            xx >>= 128;
            r <<= 64;
        }
        if (xx >= 0x10000000000000000) {
            xx >>= 64;
            r <<= 32;
        }
        if (xx >= 0x100000000) {
            xx >>= 32;
            r <<= 16;
        }
        if (xx >= 0x10000) {
            xx >>= 16;
            r <<= 8;
        }
        if (xx >= 0x100) {
            xx >>= 8;
            r <<= 4;
        }
        if (xx >= 0x10) {
            xx >>= 4;
            r <<= 2;
        }
        if (xx >= 0x8) {
            r <<= 1;
        }
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1; // Seven iterations should be enough
        uint256 r1 = x / r;
        return (r < r1 ? r : r1);
    }
}

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

pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

// File: BeefyZapUniswapV2.sol

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.

// @author Wivern for Beefy.Finance
// @notice This contract adds liquidity to Uniswap V2 compatible liquidity pair pools and stake.

pragma solidity >=0.7.6;






interface IWETH is IERC20 {
    function deposit() external payable;
    function withdraw(uint256 wad) external;
}

interface IBeefyVault is IERC20 {
    function deposit(uint256 amount) external;
    function withdraw(uint256 shares) external;
    function want() external pure returns (address); // Beefy Vault V6
    function token() external pure returns (address); // Beefy Vault V5
}

contract BeefyZapUniswapV2 {
    using LowGasSafeMath for uint256;
    using SafeERC20 for IERC20;
    using SafeERC20 for IBeefyVault;

    IUniswapV2Router02 public immutable router;
    address public immutable WETH;
    uint256 public constant minimumAmount = 1000;

    constructor(address _router, address _WETH) {
        // Safety checks to ensure WETH token address
        IWETH(_WETH).deposit{value: 0}();
        IWETH(_WETH).withdraw(0);

        router = IUniswapV2Router02(_router);
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH);
    }

    function beefInETH (address beefyVault, uint256 tokenAmountOutMin) external payable {
        require(msg.value >= minimumAmount, 'Beefy: Insignificant input amount');

        IWETH(WETH).deposit{value: msg.value}();

        _swapAndStake(beefyVault, tokenAmountOutMin, WETH);
    }

    function beefIn (address beefyVault, uint256 tokenAmountOutMin, address tokenIn, uint256 tokenInAmount) external {
        require(tokenInAmount >= minimumAmount, 'Beefy: Insignificant input amount');
        require(IERC20(tokenIn).allowance(msg.sender, address(this)) >= tokenInAmount, 'Beefy: Input token is not approved');

        IERC20(tokenIn).safeTransferFrom(msg.sender, address(this), tokenInAmount);

        _swapAndStake(beefyVault, tokenAmountOutMin, tokenIn);
    }

    function beefOut (address beefyVault, uint256 withdrawAmount) external {
        (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault);

        IERC20(beefyVault).safeTransferFrom(msg.sender, address(this), withdrawAmount);
        vault.withdraw(withdrawAmount);

        if (pair.token0() != WETH && pair.token1() != WETH) {
            return _removeLiquidity(address(pair), msg.sender);
        }

        _removeLiquidity(address(pair), address(this));

        address[] memory tokens = new address[](2);
        tokens[0] = pair.token0();
        tokens[1] = pair.token1();

        _returnAssets(tokens);
    }

    function beefOutAndSwap(address beefyVault, uint256 withdrawAmount, address desiredToken, uint256 desiredTokenOutMin) external {
        (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault);
        address token0 = pair.token0();
        address token1 = pair.token1();
        require(token0 == desiredToken || token1 == desiredToken, 'Beefy: desired token not present in liquidity pair');

        vault.safeTransferFrom(msg.sender, address(this), withdrawAmount);
        vault.withdraw(withdrawAmount);
        _removeLiquidity(address(pair), address(this));

        address swapToken = token1 == desiredToken ? token0 : token1;
        address[] memory path = new address[](2);
        path[0] = swapToken;
        path[1] = desiredToken;

        _approveTokenIfNeeded(path[0], address(router));
        router.swapExactTokensForTokens(IERC20(swapToken).balanceOf(address(this)), desiredTokenOutMin, path, address(this), block.timestamp);

        _returnAssets(path);
    }

    function _removeLiquidity(address pair, address to) private {
        IERC20(pair).safeTransfer(pair, IERC20(pair).balanceOf(address(this)));
        (uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(to);

        require(amount0 >= minimumAmount, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amount1 >= minimumAmount, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    }

    function _getVaultPair (address beefyVault) private view returns (IBeefyVault vault, IUniswapV2Pair pair) {
        vault = IBeefyVault(beefyVault);

        try vault.want() returns (address pairAddress) {
            pair = IUniswapV2Pair(pairAddress); // Vault V6
        } catch {
            pair = IUniswapV2Pair(vault.token()); // Vault V5
        }

        require(pair.factory() == router.factory(), 'Beefy: Incompatible liquidity pair factory');
    }

    function _swapAndStake(address beefyVault, uint256 tokenAmountOutMin, address tokenIn) private {
        (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault);

        (uint256 reserveA, uint256 reserveB,) = pair.getReserves();
        require(reserveA > minimumAmount && reserveB > minimumAmount, 'Beefy: Liquidity pair reserves too low');

        bool isInputA = pair.token0() == tokenIn;
        require(isInputA || pair.token1() == tokenIn, 'Beefy: Input token not present in liquidity pair');

        address[] memory path = new address[](2);
        path[0] = tokenIn;
        path[1] = isInputA ? pair.token1() : pair.token0();

        uint256 fullInvestment = IERC20(tokenIn).balanceOf(address(this));
        uint256 swapAmountIn;
        if (isInputA) {
            swapAmountIn = _getSwapAmount(fullInvestment, reserveA, reserveB);
        } else {
            swapAmountIn = _getSwapAmount(fullInvestment, reserveB, reserveA);
        }

        _approveTokenIfNeeded(path[0], address(router));
        uint256[] memory swapedAmounts = router
            .swapExactTokensForTokens(swapAmountIn, tokenAmountOutMin, path, address(this), block.timestamp);

        _approveTokenIfNeeded(path[1], address(router));
        (,, uint256 amountLiquidity) = router
            .addLiquidity(path[0], path[1], fullInvestment.sub(swapedAmounts[0]), swapedAmounts[1], 1, 1, address(this), block.timestamp);

        _approveTokenIfNeeded(address(pair), address(vault));
        vault.deposit(amountLiquidity);

        vault.safeTransfer(msg.sender, vault.balanceOf(address(this)));
        _returnAssets(path);
    }

    function _returnAssets(address[] memory tokens) private {
        uint256 balance;
        for (uint256 i; i < tokens.length; i++) {
            balance = IERC20(tokens[i]).balanceOf(address(this));
            if (balance > 0) {
                if (tokens[i] == WETH) {
                    IWETH(WETH).withdraw(balance);
                    (bool success,) = msg.sender.call{value: balance}(new bytes(0));
                    require(success, 'Beefy: ETH transfer failed');
                } else {
                    IERC20(tokens[i]).safeTransfer(msg.sender, balance);
                }
            }
        }
    }

    function _getSwapAmount(uint256 investmentA, uint256 reserveA, uint256 reserveB) private view returns (uint256 swapAmount) {
        uint256 halfInvestment = investmentA / 2;
        uint256 nominator = router.getAmountOut(halfInvestment, reserveA, reserveB);
        uint256 denominator = router.quote(halfInvestment, reserveA.add(halfInvestment), reserveB.sub(nominator));
        swapAmount = investmentA.sub(Babylonian.sqrt(halfInvestment * halfInvestment * nominator / denominator));
    }

    function estimateSwap(address beefyVault, address tokenIn, uint256 fullInvestmentIn) public view returns(uint256 swapAmountIn, uint256 swapAmountOut, address swapTokenOut) {
        (, IUniswapV2Pair pair) = _getVaultPair(beefyVault);

        bool isInputA = pair.token0() == tokenIn;
        require(isInputA || pair.token1() == tokenIn, 'Beefy: Input token not present in liquidity pair');

        (uint256 reserveA, uint256 reserveB,) = pair.getReserves();
        (reserveA, reserveB) = isInputA ? (reserveA, reserveB) : (reserveB, reserveA);

        swapAmountIn = _getSwapAmount(fullInvestmentIn, reserveA, reserveB);
        swapAmountOut = router.getAmountOut(swapAmountIn, reserveA, reserveB);
        swapTokenOut = isInputA ? pair.token1() : pair.token0();
    }

    function _approveTokenIfNeeded(address token, address spender) private {
        if (IERC20(token).allowance(address(this), spender) == 0) {
            IERC20(token).safeApprove(spender, type(uint256).max);
        }
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"tokenAmountOutMin","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenInAmount","type":"uint256"}],"name":"beefIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"tokenAmountOutMin","type":"uint256"}],"name":"beefInETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"beefOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"internalType":"address","name":"desiredToken","type":"address"},{"internalType":"uint256","name":"desiredTokenOutMin","type":"uint256"}],"name":"beefOutAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"fullInvestmentIn","type":"uint256"}],"name":"estimateSwap","outputs":[{"internalType":"uint256","name":"swapAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapAmountOut","type":"uint256"},{"internalType":"address","name":"swapTokenOut","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b5060405162002d5e38038062002d5e833981016040819052620000349162000125565b806001600160a01b031663d0e30db060006040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200007157600080fd5b505af115801562000086573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b8152600060048201526001600160a01b0385169350632e1a7d4d92506024019050600060405180830381600087803b158015620000cf57600080fd5b505af1158015620000e4573d6000803e3d6000fd5b50505050606091821b6001600160601b0319908116608052911b1660a0526200015c565b80516001600160a01b03811681146200012057600080fd5b919050565b6000806040838503121562000138578182fd5b620001438362000108565b9150620001536020840162000108565b90509250929050565b60805160601c60a05160601c612b6e620001f060003960008181608f0152818161017f01528181610a4d01528181610ac601528181610b7001528181610c1d0152818161174501526117ba01526000818161020f0152818161044f015281816108d4015281816109150152818161108001528181611237015281816112bf01528181611dcd0152611e8a0152612b6e6000f3fe60806040526004361061007f5760003560e01c8063ad5c46481161004e578063ad5c46481461016d578063bb0c8298146101b9578063f5d07b60146101dd578063f887ea40146101fd57600080fd5b80633f2f869a146100d157806351c9cf911461011a57806370fae20d1461013a578063a28c361b1461014d57600080fd5b366100cc57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100ca57634e487b7160e01b600052600160045260246000fd5b005b600080fd5b3480156100dd57600080fd5b506100f16100ec3660046126a7565b610231565b6040805193845260208401929092526001600160a01b0316908201526060015b60405180910390f35b34801561012657600080fd5b506100ca610135366004612712565b6105ce565b6100ca6101483660046126e7565b610a29565b34801561015957600080fd5b506100ca6101683660046126e7565b610aee565b34801561017957600080fd5b506101a17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610111565b3480156101c557600080fd5b506101cf6103e881565b604051908152602001610111565b3480156101e957600080fd5b506100ca6101f8366004612712565b610e76565b34801561020957600080fd5b506101a17f000000000000000000000000000000000000000000000000000000000000000081565b60008060008061024087610f90565b9150506000866001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561028857600080fd5b505afa15801561029c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c0919061268b565b6001600160a01b031614905080806103595750866001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561031657600080fd5b505afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061268b565b6001600160a01b0316145b61037e5760405162461bcd60e51b81526004016103759061297f565b60405180910390fd5b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156103ba57600080fd5b505afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f29190612839565b506001600160701b031691506001600160701b0316915082610415578082610418565b81815b90925090506104288883836111f7565b604051630153543560e21b81526004810182905260248101849052604481018390529097507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063054d50d49060640160206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190612887565b95508261054e57836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610549919061268b565b6105bf565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561058757600080fd5b505afa15801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf919061268b565b94505050505093509350939050565b6000806105da86610f90565b915091506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610651919061268b565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c6919061268b565b9050856001600160a01b0316826001600160a01b031614806106f95750856001600160a01b0316816001600160a01b0316145b6107605760405162461bcd60e51b815260206004820152603260248201527f42656566793a206465736972656420746f6b656e206e6f742070726573656e746044820152711034b7103634b8bab4b234ba3c903830b4b960711b6064820152608401610375565b6107756001600160a01b03851633308a6113b4565b604051632e1a7d4d60e01b8152600481018890526001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506107d9833061141f565b6000866001600160a01b0316826001600160a01b0316146107fa57816107fc565b825b6040805160028082526060820183529293506000929091602083019080368337019050509050818160008151811061084457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050878160018151811061088657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506108f8816000815181106108ca57634e487b7160e01b600052603260045260246000fd5b60200260200101517f00000000000000000000000000000000000000000000000000000000000000006115f2565b6040516370a0823160e01b81523060048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916338ed1739918516906370a082319060240160206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190612887565b898430426040518663ffffffff1660e01b81526004016109bd9594939291906129cf565b600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a139190810190612759565b50610a1d8161168b565b50505050505050505050565b6103e8341015610a4b5760405162461bcd60e51b81526004016103759061293e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa657600080fd5b505af1158015610aba573d6000803e3d6000fd5b5050505050610aea82827f0000000000000000000000000000000000000000000000000000000000000000611933565b5050565b600080610afa84610f90565b9092509050610b146001600160a01b0385163330866113b4565b604051632e1a7d4d60e01b8152600481018490526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015610b5657600080fd5b505af1158015610b6a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c09919061268b565b6001600160a01b031614158015610cc257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb6919061268b565b6001600160a01b031614155b15610cd757610cd1813361141f565b50505050565b610ce1813061141f565b604080516002808252606082018352600092602083019080368337019050509050816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d73919061268b565b81600081518110610d9457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e25919061268b565b81600181518110610e4657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050610e6f8161168b565b5050505050565b6103e8811015610e985760405162461bcd60e51b81526004016103759061293e565b604051636eb1769f60e11b815233600482015230602482015281906001600160a01b0384169063dd62ed3e9060440160206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612887565b1015610f705760405162461bcd60e51b815260206004820152602260248201527f42656566793a20496e70757420746f6b656e206973206e6f7420617070726f76604482015261195960f21b6064820152608401610375565b610f856001600160a01b0383163330846113b4565b610cd1848484611933565b600080829150816001600160a01b0316631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcf57600080fd5b505afa925050508015610fff575060408051601f3d908101601f19168201909252610ffc9181019061268b565b60015b61107b57816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611074919061268b565b905061107e565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061268b565b6001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561115157600080fd5b505afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611189919061268b565b6001600160a01b0316146111f25760405162461bcd60e51b815260206004820152602a60248201527f42656566793a20496e636f6d70617469626c65206c6971756964697479207061604482015269697220666163746f727960b01b6064820152608401610375565b915091565b600080611205600286612a57565b604051630153543560e21b81526004810182905260248101869052604481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063054d50d49060640160206040518083038186803b15801561127957600080fd5b505afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612887565b905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ad615dec846112ef8982612125565b6112f98987612146565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190612887565b90506113a96113a282846113898780612a77565b6113939190612a77565b61139d9190612a57565b612161565b8890612146565b979650505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cd19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122df565b6040516370a0823160e01b81523060048201526114ad9083906001600160a01b038216906370a082319060240160206040518083038186803b15801561146457600080fd5b505afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612887565b6001600160a01b03851691906123b1565b60405163226bf2d160e21b81526001600160a01b03828116600483015260009182918516906389afcb44906024016040805180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c919061289f565b915091506103e88210156115915760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f415f604482015265105353d5539560d21b6064820152608401610375565b6103e8811015610cd15760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f425f604482015265105353d5539560d21b6064820152608401610375565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283169063dd62ed3e9060440160206040518083038186803b15801561163957600080fd5b505afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190612887565b610aea57610aea6001600160a01b038316826000196123e1565b6000805b825181101561192e578281815181106116b857634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561170357600080fd5b505afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190612887565b9150811561191c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683828151811061178d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156118d757604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505060408051600080825260208201928390529350339250859161183e91906128ef565b60006040518083038185875af1925050503d806000811461187b576040519150601f19603f3d011682016040523d82523d6000602084013e611880565b606091505b50509050806118d15760405162461bcd60e51b815260206004820152601a60248201527f42656566793a20455448207472616e73666572206661696c65640000000000006044820152606401610375565b5061191c565b61191c33838584815181106118fc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166123b19092919063ffffffff16565b8061192681612ad9565b91505061168f565b505050565b60008061193f85610f90565b91509150600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190612839565b506001600160701b031691506001600160701b031691506103e8821180156119e057506103e881115b611a3b5760405162461bcd60e51b815260206004820152602660248201527f42656566793a204c6971756964697479207061697220726573657276657320746044820152656f6f206c6f7760d01b6064820152608401610375565b6000856001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab8919061268b565b6001600160a01b03161490508080611b515750856001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0e57600080fd5b505afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b46919061268b565b6001600160a01b0316145b611b6d5760405162461bcd60e51b81526004016103759061297f565b6040805160028082526060820183526000926020830190803683370190505090508681600081518110611bb057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505081611c4b57846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0e57600080fd5b505afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061268b565b611cbc565b846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8457600080fd5b505afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc919061268b565b81600181518110611cdd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918916906370a082319060240160206040518083038186803b158015611d2d57600080fd5b505afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612887565b905060008315611d8157611d7a8287876111f7565b9050611d8f565b611d8c8286886111f7565b90505b611db3836000815181106108ca57634e487b7160e01b600052603260045260246000fd5b6040516338ed173960e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338ed173990611e0a9085908f908990309042906004016129cf565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e609190810190612759565b9050611e86846001815181106108ca57634e487b7160e01b600052603260045260246000fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e8e3370086600081518110611ed857634e487b7160e01b600052603260045260246000fd5b602002602001015187600181518110611f0157634e487b7160e01b600052603260045260246000fd5b6020026020010151611f4486600081518110611f2d57634e487b7160e01b600052603260045260246000fd5b60200260200101518961214690919063ffffffff16565b86600181518110611f6557634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260016084820181905260a48201523060c48201524260e482015261010401606060405180830381600087803b158015611fdf57600080fd5b505af1158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201791906128c2565b92505050612025898b6115f2565b60405163b6b55f2560e01b8152600481018290526001600160a01b038b169063b6b55f2590602401600060405180830381600087803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015261210d92503391506001600160a01b038d16906370a082319060240160206040518083038186803b1580156120c457600080fd5b505afa1580156120d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fc9190612887565b6001600160a01b038d1691906123b1565b6121168561168b565b50505050505050505050505050565b6000826121328382612a3f565b915081101561214057600080fd5b92915050565b6000826121538382612a96565b915081111561214057600080fd5b60008161217057506000919050565b816001600160801b82106121895760809190911c9060401b5b6801000000000000000082106121a45760409190911c9060201b5b64010000000082106121bb5760209190911c9060101b5b6201000082106121d05760109190911c9060081b5b61010082106121e45760089190911c9060041b5b601082106121f75760049190911c9060021b5b600882106122035760011b5b600161220f8286612a57565b6122199083612a3f565b901c905060016122298286612a57565b6122339083612a3f565b901c905060016122438286612a57565b61224d9083612a3f565b901c9050600161225d8286612a57565b6122679083612a3f565b901c905060016122778286612a57565b6122819083612a3f565b901c905060016122918286612a57565b61229b9083612a3f565b901c905060016122ab8286612a57565b6122b59083612a3f565b901c905060006122c58286612a57565b90508082106122d457806122d6565b815b95945050505050565b6000612334826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125059092919063ffffffff16565b80519091501561192e57808060200190518101906123529190612819565b61192e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063a9059cbb60e01b906064016113e8565b80158061246a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561243057600080fd5b505afa158015612444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124689190612887565b155b6124d55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063095ea7b360e01b906064016113e8565b6060612514848460008561251e565b90505b9392505050565b60608247101561257f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610375565b843b6125cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610375565b600080866001600160a01b031685876040516125e991906128ef565b60006040518083038185875af1925050503d8060008114612626576040519150601f19603f3d011682016040523d82523d6000602084013e61262b565b606091505b50915091506113a982828660608315612645575081612517565b8251156126555782518084602001fd5b8160405162461bcd60e51b8152600401610375919061290b565b80516001600160701b038116811461268657600080fd5b919050565b60006020828403121561269c578081fd5b815161251781612b20565b6000806000606084860312156126bb578182fd5b83356126c681612b20565b925060208401356126d681612b20565b929592945050506040919091013590565b600080604083850312156126f9578182fd5b823561270481612b20565b946020939093013593505050565b60008060008060808587031215612727578081fd5b843561273281612b20565b935060208501359250604085013561274981612b20565b9396929550929360600135925050565b6000602080838503121561276b578182fd5b825167ffffffffffffffff80821115612782578384fd5b818501915085601f830112612795578384fd5b8151818111156127a7576127a7612b0a565b8060051b604051601f19603f830116810181811085821117156127cc576127cc612b0a565b604052828152858101935084860182860187018a10156127ea578788fd5b8795505b8386101561280c5780518552600195909501949386019386016127ee565b5098975050505050505050565b60006020828403121561282a578081fd5b81518015158114612517578182fd5b60008060006060848603121561284d578283fd5b6128568461266f565b92506128646020850161266f565b9150604084015163ffffffff8116811461287c578182fd5b809150509250925092565b600060208284031215612898578081fd5b5051919050565b600080604083850312156128b1578182fd5b505080516020909101519092909150565b6000806000606084860312156128d6578283fd5b8351925060208401519150604084015190509250925092565b60008251612901818460208701612aad565b9190910192915050565b602081526000825180602084015261292a816040850160208701612aad565b601f01601f19169190910160400192915050565b60208082526021908201527f42656566793a20496e7369676e69666963616e7420696e70757420616d6f756e6040820152601d60fa1b606082015260800190565b60208082526030908201527f42656566793a20496e70757420746f6b656e206e6f742070726573656e74206960408201526f37103634b8bab4b234ba3c903830b4b960811b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a1e5784516001600160a01b0316835293830193918301916001016129f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a5257612a52612af4565b500190565b600082612a7257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612a9157612a91612af4565b500290565b600082821015612aa857612aa8612af4565b500390565b60005b83811015612ac8578181015183820152602001612ab0565b83811115610cd15750506000910152565b6000600019821415612aed57612aed612af4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b3557600080fd5b5056fea26469706673582212208e2c26ce7e7807848e7bd054a1880a9b6eea280d407c8cf60986b70a7346941264736f6c63430008040033000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : _router (address): 0x145863eb42cf62847a6ca784e6416c1682b1b2ae
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

26934:7851:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27528:10;-1:-1:-1;;;;;27542:4:0;27528:18;;27521:26;;-1:-1:-1;;;27521:26:0;;;;;;;;;26934:7851;;;;;33757:788;;;;;;;;;;-1:-1:-1;33757:788:0;;;;;:::i;:::-;;:::i;:::-;;;;12990:25:1;;;13046:2;13031:18;;13024:34;;;;-1:-1:-1;;;;;13094:32:1;13074:18;;;13067:60;12978:2;12963:18;33757:788:0;;;;;;;;29016:1017;;;;;;;;;;-1:-1:-1;29016:1017:0;;;;;:::i;:::-;;:::i;27563:290::-;;;;;;:::i;:::-;;:::i;28357:651::-;;;;;;;;;;-1:-1:-1;28357:651:0;;;;;:::i;:::-;;:::i;27129:29::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4980:32:1;;;4962:51;;4950:2;4935:18;27129:29:0;4917:102:1;27165:44:0;;;;;;;;;;;;27205:4;27165:44;;;;;12752:25:1;;;12740:2;12725:18;27165:44:0;12707:76:1;27861:488:0;;;;;;;;;;-1:-1:-1;27861:488:0;;;;;:::i;:::-;;:::i;27080:42::-;;;;;;;;;;;;;;;33757:788;33862:20;33884:21;33907:20;33943:19;33966:25;33980:10;33966:13;:25::i;:::-;33940:51;;;34004:13;34037:7;-1:-1:-1;;;;;34020:24:0;:4;-1:-1:-1;;;;;34020:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34020:24:0;;34004:40;;34063:8;:36;;;;34092:7;-1:-1:-1;;;;;34075:24:0;:4;-1:-1:-1;;;;;34075:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34075:24:0;;34063:36;34055:97;;;;-1:-1:-1;;;34055:97:0;;;;;;;:::i;:::-;;;;;;;;;34166:16;34184;34205:4;-1:-1:-1;;;;;34205:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34165:58;-1:-1:-1;;;;;34165:58:0;;;-1:-1:-1;;;;;34165:58:0;;;34257:8;:54;;34292:8;34302;34257:54;;;34269:8;34279;34257:54;34234:77;;-1:-1:-1;34234:77:0;-1:-1:-1;34339:52:0;34354:16;34234:77;;34339:14;:52::i;:::-;34418:53;;-1:-1:-1;;;34418:53:0;;;;;14320:25:1;;;14361:18;;;14354:34;;;14404:18;;;14397:34;;;34324:67:0;;-1:-1:-1;34418:6:0;-1:-1:-1;;;;;34418:19:0;;;;14293:18:1;;34418:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34402:69;;34497:8;:40;;34524:4;-1:-1:-1;;;;;34524:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34497:40;;;34508:4;-1:-1:-1;;;;;34508:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34482:55;;33757:788;;;;;;;;;;;:::o;29016:1017::-;29155:17;29174:19;29197:25;29211:10;29197:13;:25::i;:::-;29154:68;;;;29233:14;29250:4;-1:-1:-1;;;;;29250:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29233:30;;29274:14;29291:4;-1:-1:-1;;;;;29291:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29274:30;;29333:12;-1:-1:-1;;;;;29323:22:0;:6;-1:-1:-1;;;;;29323:22:0;;:48;;;;29359:12;-1:-1:-1;;;;;29349:22:0;:6;-1:-1:-1;;;;;29349:22:0;;29323:48;29315:111;;;;-1:-1:-1;;;29315:111:0;;7581:2:1;29315:111:0;;;7563:21:1;7620:2;7600:18;;;7593:30;7659:34;7639:18;;;7632:62;-1:-1:-1;;;7710:18:1;;;7703:48;7768:19;;29315:111:0;7553:240:1;29315:111:0;29439:65;-1:-1:-1;;;;;29439:22:0;;29462:10;29482:4;29489:14;29439:22;:65::i;:::-;29515:30;;-1:-1:-1;;;29515:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;29515:14:0;;;;;12725:18:1;;29515:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29556:46;29581:4;29596;29556:16;:46::i;:::-;29615:17;29645:12;-1:-1:-1;;;;;29635:22:0;:6;-1:-1:-1;;;;;29635:22:0;;:40;;29669:6;29635:40;;;29660:6;29635:40;29710:16;;;29724:1;29710:16;;;;;;;;29615:60;;-1:-1:-1;29686:21:0;;29710:16;;;;;;;;;;;;-1:-1:-1;29710:16:0;29686:40;;29747:9;29737:4;29742:1;29737:7;;;;;;-1:-1:-1;;;29737:7:0;;;;;;;;;;;;;;:19;-1:-1:-1;;;;;29737:19:0;;;-1:-1:-1;;;;;29737:19:0;;;;;29777:12;29767:4;29772:1;29767:7;;;;;;-1:-1:-1;;;29767:7:0;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;29767:22:0;;;-1:-1:-1;;;;;29767:22:0;;;;;29802:47;29824:4;29829:1;29824:7;;;;;;-1:-1:-1;;;29824:7:0;;;;;;;;;;;;;;;29841:6;29802:21;:47::i;:::-;29892:42;;-1:-1:-1;;;29892:42:0;;29928:4;29892:42;;;4962:51:1;-1:-1:-1;;;;;29860:6:0;:31;;;;;29892:27;;;;;4935:18:1;;29892:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29936:18;29956:4;29970;29977:15;29860:133;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29860:133:0;;;;;;;;;;;;:::i;:::-;;30006:19;30020:4;30006:13;:19::i;:::-;29016:1017;;;;;;;;;;:::o;27563:290::-;27205:4;27666:9;:26;;27658:72;;;;-1:-1:-1;;;27658:72:0;;;;;;;:::i;:::-;27749:4;-1:-1:-1;;;;;27743:19:0;;27770:9;27743:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27795:50;27809:10;27821:17;27840:4;27795:13;:50::i;:::-;27563:290;;:::o;28357:651::-;28440:17;28459:19;28482:25;28496:10;28482:13;:25::i;:::-;28439:68;;-1:-1:-1;28439:68:0;-1:-1:-1;28520:78:0;-1:-1:-1;;;;;28520:35:0;;28556:10;28576:4;28583:14;28520:35;:78::i;:::-;28609:30;;-1:-1:-1;;;28609:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;28609:14:0;;;;;12725:18:1;;28609:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:4;-1:-1:-1;;;;;28656:21:0;:4;-1:-1:-1;;;;;28656:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28656:21:0;;;:46;;;;;28698:4;-1:-1:-1;;;;;28681:21:0;:4;-1:-1:-1;;;;;28681:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28681:21:0;;;28656:46;28652:129;;;28726:43;28751:4;28758:10;28726:16;:43::i;:::-;28719:50;;28357:651;;:::o;28652:129::-;28793:46;28818:4;28833;28793:16;:46::i;:::-;28878:16;;;28892:1;28878:16;;;;;;;;28852:23;;28878:16;;;;;;;;;;-1:-1:-1;28878:16:0;28852:42;;28917:4;-1:-1:-1;;;;;28917:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28905:6;28912:1;28905:9;;;;;;-1:-1:-1;;;28905:9:0;;;;;;;;;;;;;;:25;-1:-1:-1;;;;;28905:25:0;;;-1:-1:-1;;;;;28905:25:0;;;;;28953:4;-1:-1:-1;;;;;28953:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:6;28948:1;28941:9;;;;;;-1:-1:-1;;;28941:9:0;;;;;;;;;;;;;;:25;-1:-1:-1;;;;;28941:25:0;;;-1:-1:-1;;;;;28941:25:0;;;;;28979:21;28993:6;28979:13;:21::i;:::-;28357:651;;;;;:::o;27861:488::-;27205:4;27993:13;:30;;27985:76;;;;-1:-1:-1;;;27985:76:0;;;;;;;:::i;:::-;28080:52;;-1:-1:-1;;;28080:52:0;;28106:10;28080:52;;;5236:34:1;28126:4:0;5286:18:1;;;5279:43;28136:13:0;;-1:-1:-1;;;;;28080:25:0;;;;;5171:18:1;;28080:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;28072:116;;;;-1:-1:-1;;;28072:116:0;;10395:2:1;28072:116:0;;;10377:21:1;10434:2;10414:18;;;10407:30;10473:34;10453:18;;;10446:62;-1:-1:-1;;;10524:18:1;;;10517:32;10566:19;;28072:116:0;10367:224:1;28072:116:0;28201:74;-1:-1:-1;;;;;28201:32:0;;28234:10;28254:4;28261:13;28201:32;:74::i;:::-;28288:53;28302:10;28314:17;28333:7;28288:13;:53::i;30449:472::-;30515:17;30534:19;30586:10;30566:31;;30614:5;-1:-1:-1;;;;;30614:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30614:12:0;;;;;;;;-1:-1:-1;;30614:12:0;;;;;;;;;;;;:::i;:::-;;;30610:202;;30774:5;-1:-1:-1;;;;;30774:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30752:36;;30610:202;;;30694:11;-1:-1:-1;30610:202:0;30850:6;-1:-1:-1;;;;;30850:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30832:34:0;:4;-1:-1:-1;;;;;30832:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30832:34:0;;30824:89;;;;-1:-1:-1;;;30824:89:0;;10798:2:1;30824:89:0;;;10780:21:1;10837:2;10817:18;;;10810:30;10876:34;10856:18;;;10849:62;-1:-1:-1;;;10927:18:1;;;10920:40;10977:19;;30824:89:0;10770:232:1;30824:89:0;30449:472;;;:::o;33250:499::-;33353:18;;33409:15;33423:1;33409:11;:15;:::i;:::-;33455:55;;-1:-1:-1;;;33455:55:0;;;;;14320:25:1;;;14361:18;;;14354:34;;;14404:18;;;14397:34;;;33384:40:0;;-1:-1:-1;33435:17:0;;-1:-1:-1;;;;;33455:6:0;:19;;;;14293:18:1;;33455:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33435:75;-1:-1:-1;33521:19:0;-1:-1:-1;;;;;33543:6:0;:12;;33556:14;33572:28;:8;33556:14;33572:12;:28::i;:::-;33602:23;:8;33615:9;33602:12;:23::i;:::-;33543:83;;-1:-1:-1;;;;;;33543:83:0;;;;;;;;;;14320:25:1;;;;14361:18;;;14354:34;;;;14404:18;;;14397:34;14293:18;;33543:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33521:105;-1:-1:-1;33650:91:0;33666:74;33521:105;33716:9;33682:31;33699:14;;33682:31;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;33666:15;:74::i;:::-;33650:11;;:15;:91::i;:::-;33637:104;33250:499;-1:-1:-1;;;;;;;33250:499:0:o;22778:205::-;22906:68;;-1:-1:-1;;;;;5591:15:1;;;22906:68:0;;;5573:34:1;5643:15;;5623:18;;;5616:43;5675:18;;;5668:34;;;22879:96:0;;22899:5;;-1:-1:-1;;;22929:27:0;5508:18:1;;22906:68:0;;;;-1:-1:-1;;22906:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;22906:68:0;-1:-1:-1;;;;;;22906:68:0;;;;;;;;;;22879:19;:96::i;30041:400::-;30144:37;;-1:-1:-1;;;30144:37:0;;30175:4;30144:37;;;4962:51:1;30112:70:0;;30138:4;;-1:-1:-1;;;;;30144:22:0;;;;;4935:18:1;;30144:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30112:25:0;;;:70;:25;:70::i;:::-;30230:29;;-1:-1:-1;;;30230:29:0;;-1:-1:-1;;;;;4980:32:1;;;30230:29:0;;;4962:51:1;30194:15:0;;;;30230:25;;;;;4935:18:1;;30230:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30193:66;;;;27205:4;30280:7;:24;;30272:75;;;;-1:-1:-1;;;30272:75:0;;11567:2:1;30272:75:0;;;11549:21:1;11606:2;11586:18;;;11579:30;11645:34;11625:18;;;11618:62;-1:-1:-1;;;11696:18:1;;;11689:36;11742:19;;30272:75:0;11539:228:1;30272:75:0;27205:4;30366:7;:24;;30358:75;;;;-1:-1:-1;;;30358:75:0;;9581:2:1;30358:75:0;;;9563:21:1;9620:2;9600:18;;;9593:30;9659:34;9639:18;;;9632:62;-1:-1:-1;;;9710:18:1;;;9703:36;9756:19;;30358:75:0;9553:228:1;34553:227:0;34639:47;;-1:-1:-1;;;34639:47:0;;34671:4;34639:47;;;5236:34:1;-1:-1:-1;;;;;5306:15:1;;;5286:18;;;5279:43;34639:23:0;;;;;5171:18:1;;34639:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34635:138;;34708:53;-1:-1:-1;;;;;34708:25:0;;34734:7;-1:-1:-1;;34708:25:0;:53::i;32608:634::-;32675:15;32706:9;32701:534;32721:6;:13;32717:1;:17;32701:534;;;32773:6;32780:1;32773:9;;;;;;-1:-1:-1;;;32773:9:0;;;;;;;;;;;;;;;;;;;32766:42;;-1:-1:-1;;;32766:42:0;;32802:4;32766:42;;;4962:51:1;-1:-1:-1;;;;;32766:27:0;;;;;;4935:18:1;;32766:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32756:52;-1:-1:-1;32827:11:0;;32823:401;;32876:4;-1:-1:-1;;;;;32863:17:0;:6;32870:1;32863:9;;;;;;-1:-1:-1;;;32863:9:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32863:17:0;;32859:350;;;32905:29;;-1:-1:-1;;;32905:29:0;;;;;12752:25:1;;;32911:4:0;-1:-1:-1;;;;;32905:20:0;;;;12725:18:1;;32905:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33007:12:0;;;32958;33007;;;;;;;;;;32958;-1:-1:-1;32975:10:0;;-1:-1:-1;32998:7:0;;32975:45;;33007:12;32975:45;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32957:63;;;33051:7;33043:46;;;;-1:-1:-1;;;33043:46:0;;8000:2:1;33043:46:0;;;7982:21:1;8039:2;8019:18;;;8012:30;8078:28;8058:18;;;8051:56;8124:18;;33043:46:0;7972:176:1;33043:46:0;32859:350;;;;33138:51;33169:10;33181:7;33145:6;33152:1;33145:9;;;;;;-1:-1:-1;;;33145:9:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33138:30:0;;;:51;;;;;:::i;:::-;32736:3;;;;:::i;:::-;;;;32701:534;;;;32608:634;;:::o;30929:1671::-;31036:17;31055:19;31078:25;31092:10;31078:13;:25::i;:::-;31035:68;;;;31117:16;31135;31156:4;-1:-1:-1;;;;;31156:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31116:58;-1:-1:-1;;;;;31116:58:0;;;-1:-1:-1;;;;;31116:58:0;;;27205:4;31193:8;:24;:52;;;;;27205:4;31221:8;:24;31193:52;31185:103;;;;-1:-1:-1;;;31185:103:0;;9174:2:1;31185:103:0;;;9156:21:1;9213:2;9193:18;;;9186:30;9252:34;9232:18;;;9225:62;-1:-1:-1;;;9303:18:1;;;9296:36;9349:19;;31185:103:0;9146:228:1;31185:103:0;31301:13;31334:7;-1:-1:-1;;;;;31317:24:0;:4;-1:-1:-1;;;;;31317:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31317:24:0;;31301:40;;31360:8;:36;;;;31389:7;-1:-1:-1;;;;;31372:24:0;:4;-1:-1:-1;;;;;31372:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31372:24:0;;31360:36;31352:97;;;;-1:-1:-1;;;31352:97:0;;;;;;;:::i;:::-;31486:16;;;31500:1;31486:16;;;;;;;;31462:21;;31486:16;;;;;;;;;;-1:-1:-1;31486:16:0;31462:40;;31523:7;31513:4;31518:1;31513:7;;;;;;-1:-1:-1;;;31513:7:0;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;31513:17:0;;;-1:-1:-1;;;;;31513:17:0;;;;;31551:8;:40;;31578:4;-1:-1:-1;;;;;31578:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31551:40;;;31562:4;-1:-1:-1;;;;;31562:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31541:4;31546:1;31541:7;;;;;;-1:-1:-1;;;31541:7:0;;;;;;;;;-1:-1:-1;;;;;31541:50:0;;;:7;;;;;;;;;:50;31629:40;;-1:-1:-1;;;31629:40:0;;31663:4;31629:40;;;4962:51:1;31604:22:0;;31629:25;;;;;4935:18:1;;31629:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31604:65;;31680:20;31715:8;31711:204;;;31755:50;31770:14;31786:8;31796;31755:14;:50::i;:::-;31740:65;;31711:204;;;31853:50;31868:14;31884:8;31894;31853:14;:50::i;:::-;31838:65;;31711:204;31927:47;31949:4;31954:1;31949:7;;;;;;-1:-1:-1;;;31949:7:0;;;;;;;;31927:47;32018:116;;-1:-1:-1;;;32018:116:0;;31985:30;;-1:-1:-1;;;;;32018:6:0;:45;;;;:116;;32064:12;;32078:17;;32097:4;;32111;;32118:15;;32018:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32018:116:0;;;;;;;;;;;;:::i;:::-;31985:149;;32147:47;32169:4;32174:1;32169:7;;;;;;-1:-1:-1;;;32169:7:0;;;;;;;;32147:47;32209:23;32236:6;-1:-1:-1;;;;;32236:33:0;;32270:4;32275:1;32270:7;;;;;;-1:-1:-1;;;32270:7:0;;;;;;;;;;;;;;;32279:4;32284:1;32279:7;;;;;;-1:-1:-1;;;32279:7:0;;;;;;;;;;;;;;;32288:36;32307:13;32321:1;32307:16;;;;;;-1:-1:-1;;;32307:16:0;;;;;;;;;;;;;;;32288:14;:18;;:36;;;;:::i;:::-;32326:13;32340:1;32326:16;;;;;;-1:-1:-1;;;32326:16:0;;;;;;;;;;;;;;;;;;;32236:145;;-1:-1:-1;;;;;;32236:145:0;;;;;;;-1:-1:-1;;;;;6128:15:1;;;32236:145:0;;;6110:34:1;6180:15;;;;6160:18;;;6153:43;6212:18;;;6205:34;6255:18;;;6248:34;32344:1:0;6298:19:1;;;6291:35;;;6342:19;;;6335:35;32358:4:0;6386:19:1;;;6379:44;32365:15:0;6439:19:1;;;6432:35;6044:19;;32236:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32205:176;;;;32394:52;32424:4;32439:5;32394:21;:52::i;:::-;32457:30;;-1:-1:-1;;;32457:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;32457:13:0;;;;;12725:18:1;;32457:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32531:30:0;;-1:-1:-1;;;32531:30:0;;32555:4;32531:30;;;4962:51:1;32500:62:0;;-1:-1:-1;32519:10:0;;-1:-1:-1;;;;;;32531:15:0;;;;;4935:18:1;;32531:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32500:18:0;;;:62;:18;:62::i;:::-;32573:19;32587:4;32573:13;:19::i;:::-;30929:1671;;;;;;;;;;;;;:::o;578:113::-;636:9;681:1;671:5;675:1;681;671:5;:::i;:::-;667:9;;;666:16;;658:25;;;;;;578:113;;;;:::o;861:::-;919:9;964:1;954:5;958:1;964;954:5;:::i;:::-;950:9;;;949:16;;941:25;;;;;9902:1239;9950:7;9974:6;9970:20;;-1:-1:-1;9989:1:0;;9902:1239;-1:-1:-1;9902:1239:0:o;9970:20::-;10168:1;10192;-1:-1:-1;;;10208:41:0;;10204:107;;10273:3;10266:10;;;;;10297:2;10291:8;10204:107;10331:19;10325:2;:25;10321:90;;10374:2;10367:9;;;;;10397:2;10391:8;10321:90;10431:11;10425:2;:17;10421:82;;10466:2;10459:9;;;;;10489:2;10483:8;10421:82;10523:7;10517:2;:13;10513:77;;10554:2;10547:9;;;;;10577:1;10571:7;10513:77;10610:5;10604:2;:11;10600:74;;10639:1;10632:8;;;;;10661:1;10655:7;10600:74;10694:4;10688:2;:10;10684:73;;10722:1;10715:8;;;;;10744:1;10738:7;10684:73;10777:3;10771:2;:9;10767:49;;10803:1;10797:7;10767:49;10845:1;10835:5;10839:1;10835;:5;:::i;:::-;10831:9;;:1;:9;:::i;:::-;10830:16;;;-1:-1:-1;10876:1:0;10866:5;10830:16;10866:1;:5;:::i;:::-;10862:9;;:1;:9;:::i;:::-;10861:16;;;-1:-1:-1;10907:1:0;10897:5;10861:16;10897:1;:5;:::i;:::-;10893:9;;:1;:9;:::i;:::-;10892:16;;;-1:-1:-1;10938:1:0;10928:5;10892:16;10928:1;:5;:::i;:::-;10924:9;;:1;:9;:::i;:::-;10923:16;;;-1:-1:-1;10969:1:0;10959:5;10923:16;10959:1;:5;:::i;:::-;10955:9;;:1;:9;:::i;:::-;10954:16;;;-1:-1:-1;11000:1:0;10990:5;10954:16;10990:1;:5;:::i;:::-;10986:9;;:1;:9;:::i;:::-;10985:16;;;-1:-1:-1;11031:1:0;11021:5;10985:16;11021:1;:5;:::i;:::-;11017:9;;:1;:9;:::i;:::-;11016:16;;;-1:-1:-1;11080:10:0;11093:5;11016:16;11093:1;:5;:::i;:::-;11080:18;;11121:2;11117:1;:6;:15;;11130:2;11117:15;;;11126:1;11117:15;11109:24;9902:1239;-1:-1:-1;;;;;9902:1239:0:o;25027:761::-;25451:23;25477:69;25505:4;25477:69;;;;;;;;;;;;;;;;;25485:5;-1:-1:-1;;;;;25477:27:0;;;:69;;;;;:::i;:::-;25561:17;;25451:95;;-1:-1:-1;25561:21:0;25557:224;;25703:10;25692:30;;;;;;;;;;;;:::i;:::-;25684:85;;;;-1:-1:-1;;;25684:85:0;;11974:2:1;25684:85:0;;;11956:21:1;12013:2;11993:18;;;11986:30;12052:34;12032:18;;;12025:62;-1:-1:-1;;;12103:18:1;;;12096:40;12153:19;;25684:85:0;11946:232:1;22593:177:0;22703:58;;-1:-1:-1;;;;;6670:32:1;;22703:58:0;;;6652:51:1;6719:18;;;6712:34;;;22676:86:0;;22696:5;;-1:-1:-1;;;22726:23:0;6625:18:1;;22703:58:0;6607:145:1;23252:622:0;23622:10;;;23621:62;;-1:-1:-1;23638:39:0;;-1:-1:-1;;;23638:39:0;;23662:4;23638:39;;;5236:34:1;-1:-1:-1;;;;;5306:15:1;;;5286:18;;;5279:43;23638:15:0;;;;;5171:18:1;;23638:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;23621:62;23613:152;;;;-1:-1:-1;;;23613:152:0;;12385:2:1;23613:152:0;;;12367:21:1;12424:2;12404:18;;;12397:30;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:18:1;;;12507:52;12576:19;;23613:152:0;12357:244:1;23613:152:0;23803:62;;-1:-1:-1;;;;;6670:32:1;;23803:62:0;;;6652:51:1;6719:18;;;6712:34;;;23776:90:0;;23796:5;;-1:-1:-1;;;23826:22:0;6625:18:1;;23803:62:0;6607:145:1;14828:195:0;14931:12;14963:52;14985:6;14993:4;14999:1;15002:12;14963:21;:52::i;:::-;14956:59;;14828:195;;;;;;:::o;15880:530::-;16007:12;16065:5;16040:21;:30;;16032:81;;;;-1:-1:-1;;;16032:81:0;;9988:2:1;16032:81:0;;;9970:21:1;10027:2;10007:18;;;10000:30;10066:34;10046:18;;;10039:62;-1:-1:-1;;;10117:18:1;;;10110:36;10163:19;;16032:81:0;9960:228:1;16032:81:0;12277:20;;16124:60;;;;-1:-1:-1;;;16124:60:0;;11209:2:1;16124:60:0;;;11191:21:1;11248:2;11228:18;;;11221:30;11287:31;11267:18;;;11260:59;11336:18;;16124:60:0;11181:179:1;16124:60:0;16258:12;16272:23;16299:6;-1:-1:-1;;;;;16299:11:0;16319:5;16327:4;16299:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16257:75;;;;16350:52;16368:7;16377:10;16389:12;18535;18564:7;18560:595;;;-1:-1:-1;18595:10:0;18588:17;;18560:595;18709:17;;:21;18705:439;;18972:10;18966:17;19033:15;19020:10;19016:2;19012:19;19005:44;18920:148;19115:12;19108:20;;-1:-1:-1;;;19108:20:0;;;;;;;;:::i;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:2;;192:1;189;182:12;115:2;74:128;;;:::o;207:261::-;277:6;330:2;318:9;309:7;305:23;301:32;298:2;;;351:6;343;336:22;298:2;388:9;382:16;407:31;432:5;407:31;:::i;473:466::-;550:6;558;566;619:2;607:9;598:7;594:23;590:32;587:2;;;640:6;632;625:22;587:2;684:9;671:23;703:31;728:5;703:31;:::i;:::-;753:5;-1:-1:-1;810:2:1;795:18;;782:32;823:33;782:32;823:33;:::i;:::-;577:362;;875:7;;-1:-1:-1;;;929:2:1;914:18;;;;901:32;;577:362::o;944:325::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:2;;;1094:6;1086;1079:22;1041:2;1138:9;1125:23;1157:31;1182:5;1157:31;:::i;:::-;1207:5;1259:2;1244:18;;;;1231:32;;-1:-1:-1;;;1031:238:1:o;1274:535::-;1360:6;1368;1376;1384;1437:3;1425:9;1416:7;1412:23;1408:33;1405:2;;;1459:6;1451;1444:22;1405:2;1503:9;1490:23;1522:31;1547:5;1522:31;:::i;:::-;1572:5;-1:-1:-1;1624:2:1;1609:18;;1596:32;;-1:-1:-1;1680:2:1;1665:18;;1652:32;1693:33;1652:32;1693:33;:::i;:::-;1395:414;;;;-1:-1:-1;1745:7:1;;1799:2;1784:18;1771:32;;-1:-1:-1;;1395:414:1:o;1814:1161::-;1909:6;1940:2;1983;1971:9;1962:7;1958:23;1954:32;1951:2;;;2004:6;1996;1989:22;1951:2;2042:9;2036:16;2071:18;2112:2;2104:6;2101:14;2098:2;;;2133:6;2125;2118:22;2098:2;2176:6;2165:9;2161:22;2151:32;;2221:7;2214:4;2210:2;2206:13;2202:27;2192:2;;2248:6;2240;2233:22;2192:2;2282;2276:9;2304:2;2300;2297:10;2294:2;;;2310:18;;:::i;:::-;2356:2;2353:1;2349:10;2388:2;2382:9;2451:2;2447:7;2442:2;2438;2434:11;2430:25;2422:6;2418:38;2506:6;2494:10;2491:22;2486:2;2474:10;2471:18;2468:46;2465:2;;;2517:18;;:::i;:::-;2553:2;2546:22;2603:18;;;2637:15;;;;-1:-1:-1;2672:11:1;;;2702;;;2698:20;;2695:33;-1:-1:-1;2692:2:1;;;2746:6;2738;2731:22;2692:2;2773:6;2764:15;;2788:156;2802:2;2799:1;2796:9;2788:156;;;2859:10;;2847:23;;2820:1;2813:9;;;;;2890:12;;;;2922;;2788:156;;;-1:-1:-1;2963:6:1;1920:1055;-1:-1:-1;;;;;;;;1920:1055:1:o;2980:297::-;3047:6;3100:2;3088:9;3079:7;3075:23;3071:32;3068:2;;;3121:6;3113;3106:22;3068:2;3158:9;3152:16;3211:5;3204:13;3197:21;3190:5;3187:32;3177:2;;3238:6;3230;3223:22;3282:470;3369:6;3377;3385;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3459:6;3451;3444:22;3406:2;3487:40;3517:9;3487:40;:::i;:::-;3477:50;;3546:49;3591:2;3580:9;3576:18;3546:49;:::i;:::-;3536:59;;3638:2;3627:9;3623:18;3617:25;3682:10;3675:5;3671:22;3664:5;3661:33;3651:2;;3713:6;3705;3698:22;3651:2;3741:5;3731:15;;;3396:356;;;;;:::o;3757:194::-;3827:6;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3901:6;3893;3886:22;3848:2;-1:-1:-1;3929:16:1;;3838:113;-1:-1:-1;3838:113:1:o;3956:255::-;4035:6;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:2;;;4117:6;4109;4102:22;4064:2;-1:-1:-1;;4145:16:1;;4201:2;4186:18;;;4180:25;4145:16;;4180:25;;-1:-1:-1;4054:157:1:o;4216:316::-;4304:6;4312;4320;4373:2;4361:9;4352:7;4348:23;4344:32;4341:2;;;4394:6;4386;4379:22;4341:2;4428:9;4422:16;4412:26;;4478:2;4467:9;4463:18;4457:25;4447:35;;4522:2;4511:9;4507:18;4501:25;4491:35;;4331:201;;;;;:::o;4537:274::-;4666:3;4704:6;4698:13;4720:53;4766:6;4761:3;4754:4;4746:6;4742:17;4720:53;:::i;:::-;4789:16;;;;;4674:137;-1:-1:-1;;4674:137:1:o;6991:383::-;7140:2;7129:9;7122:21;7103:4;7172:6;7166:13;7215:6;7210:2;7199:9;7195:18;7188:34;7231:66;7290:6;7285:2;7274:9;7270:18;7265:2;7257:6;7253:15;7231:66;:::i;:::-;7358:2;7337:15;-1:-1:-1;;7333:29:1;7318:45;;;;7365:2;7314:54;;7112:262;-1:-1:-1;;7112:262:1:o;8153:397::-;8355:2;8337:21;;;8394:2;8374:18;;;8367:30;8433:34;8428:2;8413:18;;8406:62;-1:-1:-1;;;8499:2:1;8484:18;;8477:31;8540:3;8525:19;;8327:223::o;8555:412::-;8757:2;8739:21;;;8796:2;8776:18;;;8769:30;8835:34;8830:2;8815:18;;8808:62;-1:-1:-1;;;8901:2:1;8886:18;;8879:46;8957:3;8942:19;;8729:238::o;13138:975::-;13392:4;13440:3;13429:9;13425:19;13471:6;13460:9;13453:25;13497:2;13535:6;13530:2;13519:9;13515:18;13508:34;13578:3;13573:2;13562:9;13558:18;13551:31;13602:6;13637;13631:13;13668:6;13660;13653:22;13706:3;13695:9;13691:19;13684:26;;13745:2;13737:6;13733:15;13719:29;;13766:4;13779:195;13793:6;13790:1;13787:13;13779:195;;;13858:13;;-1:-1:-1;;;;;13854:39:1;13842:52;;13949:15;;;;13914:12;;;;13890:1;13808:9;13779:195;;;-1:-1:-1;;;;;;;14030:32:1;;;;14025:2;14010:18;;14003:60;-1:-1:-1;;;14094:3:1;14079:19;14072:35;13991:3;13401:712;-1:-1:-1;;;13401:712:1:o;14442:128::-;14482:3;14513:1;14509:6;14506:1;14503:13;14500:2;;;14519:18;;:::i;:::-;-1:-1:-1;14555:9:1;;14490:80::o;14575:217::-;14615:1;14641;14631:2;;-1:-1:-1;;;14666:31:1;;14720:4;14717:1;14710:15;14748:4;14673:1;14738:15;14631:2;-1:-1:-1;14777:9:1;;14621:171::o;14797:168::-;14837:7;14903:1;14899;14895:6;14891:14;14888:1;14885:21;14880:1;14873:9;14866:17;14862:45;14859:2;;;14910:18;;:::i;:::-;-1:-1:-1;14950:9:1;;14849:116::o;14970:125::-;15010:4;15038:1;15035;15032:8;15029:2;;;15043:18;;:::i;:::-;-1:-1:-1;15080:9:1;;15019:76::o;15100:258::-;15172:1;15182:113;15196:6;15193:1;15190:13;15182:113;;;15272:11;;;15266:18;15253:11;;;15246:39;15218:2;15211:10;15182:113;;;15313:6;15310:1;15307:13;15304:2;;;-1:-1:-1;;15348:1:1;15330:16;;15323:27;15153:205::o;15363:135::-;15402:3;-1:-1:-1;;15423:17:1;;15420:2;;;15443:18;;:::i;:::-;-1:-1:-1;15490:1:1;15479:13;;15410:88::o;15503:127::-;15564:10;15559:3;15555:20;15552:1;15545:31;15595:4;15592:1;15585:15;15619:4;15616:1;15609:15;15635:127;15696:10;15691:3;15687:20;15684:1;15677:31;15727:4;15724:1;15717:15;15751:4;15748:1;15741:15;15767:131;-1:-1:-1;;;;;15842:31:1;;15832:42;;15822:2;;15888:1;15885;15878:12;15822:2;15812:86;:::o

Swarm Source

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