Contract 0x3c50062ffed29ea72a4e55547d3e3948ba2784f1 1

 

Contract Overview

Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcec7f3bf00f3d45a364666f1334d0f70801a092f2bb4cbc3e108fe5e7162f6faAudit Reserves305721062022-02-10 18:31:20237 days 13 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.053909493668
0x6ae4e079c00b1d2433ef233bb51c4cb39443d1eb56e8a92789e1290271302272Audit Reserves305720832022-02-10 18:31:02237 days 13 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.055255415084
0x5c59b506bfb060890b75c395c55973db07fd020fb7ed5570d484196847113d1dSet Fractionalit...305719042022-02-10 18:28:27237 days 13 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.008437526845
0xf70b17d8a6f9ed973e7c325a72374fa3376ffd5c5e1f6a5f89355287e3a3e64cAudit Reserves305714042022-02-10 18:20:55237 days 13 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.055267840845
0x35eaa176b8e8201e928381c590f9af4fbb3b788096ead10420b79504b388b892Audit Reserves300913262022-02-05 16:47:58242 days 15 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.10537722
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfeFinalize Liquida...300905402022-02-05 16:35:12242 days 15 hrs ago0x4e5d385e44dcd0b7adf5fbe03a6bb867a8a90e7b IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.209214217917
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005aLiquidate Treasu...300895532022-02-05 16:21:56242 days 15 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.254363428879
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39Liquidate Treasu...300895352022-02-05 16:21:37242 days 15 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.254363428879
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6eLiquidate Treasu...300894912022-02-05 16:21:06242 days 15 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.348802453265
0x043d05dd2e9045a887a389d5e9ad580d8540ea12b2e99dd76080f29f1c7d5502Audit Reserves300856602022-02-05 15:28:28242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.10926036
0xa0b291cfc751973709f7ce93b68632434e505b10c3ddef54ad8b8251d78ce7abToggle300846022022-02-05 15:13:08242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.23841486
0x1d3e5e33b68f0d43286324f5268a04bffa5109a8839ea96c3a460e20f22ca36dToggle300845842022-02-05 15:12:49242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25560954
0x375ca451a0506f71a8adbf5143df95fc76d3b62cb3966c6a892cfdd7df1998a0Toggle300845422022-02-05 15:12:04242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25435026
0xb066558c8fae20c7348570fb43b19b1c3fbb10059863619dc6f2a8806f48e837Toggle300845132022-02-05 15:11:41242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25309098
0xe235ee6badd7a25ea183e4e8d99f258aecff757679030d5a94de18547650a99bToggle300844832022-02-05 15:11:12242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25912224
0x4815a5119c9ad0ca32454269ac9dc26c131c94b27ec305f165d4eba1641e47b0Toggle300844552022-02-05 15:10:49242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25907148
0x4ff8fb56f423502491c017fe98765a47907d0c9fe617d463127ee3c2f36a26a8Toggle300844382022-02-05 15:10:37242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25299
0x0be0c9fe5a5e3ab16a36ad3d7d7a840bd0c2bd1c6c4b5ef1f238c9901d2833c6Toggle300844172022-02-05 15:10:21242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25902072
0x9f482091507e814354dc3891876e4074f1c0c7d958f2743cb3a834cc37f3eb45Toggle300844012022-02-05 15:10:08242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25899588
0xca7a9fffd4093b4d1d8a1f7cd7b5e74d6f10a28bf057a67069f625576266e3bbToggle300843822022-02-05 15:09:53242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25414236
0x1abeb6928f84385ee342760489ec056f828b400c109571b6b29cac16b67fb707Toggle300843642022-02-05 15:09:37242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.25288308
0x346fc6246a71359f450a786baf69713f58847319e015de25bf939cd64683828cToggle300843442022-02-05 15:09:23242 days 16 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.2589138
0x6311591aedca91810f376ba73c6666881b2f334445cd2b249addd8b3721a2d2aUpdate MP Swap R...300834532022-02-05 14:56:13242 days 17 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  0x3c50062ffed29ea72a4e55547d3e3948ba2784f10 FTM0.23804442
0x29388e7f54f032e1fbc85d6362bd3ec7575b7f4db7430f13bba55a17cac71a8f0x60c06040300833992022-02-05 14:55:30242 days 17 hrs ago0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5 IN  Create: MPTreasury0 FTM2.11832604
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago 0x3c50062ffed29ea72a4e55547d3e3948ba2784f1 SpookySwap: Router0.122550525266269126 FTM
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago Fantom Finance: Wrapped Fantom Token 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.1 FTM
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.000891535868380702 FTM
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.010808314181275801 FTM
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.010808314181275801 FTM
0x26ee340f03cef999be6ad6eda76e1da81efb3718664581b6bc4c3a4dcbceebfe300905402022-02-05 16:35:12242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.000042361035336822 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago 0x3c50062ffed29ea72a4e55547d3e3948ba2784f1 SpookySwap: Router0.129912450244951373 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago Fantom Finance: Wrapped Fantom Token 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.1 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.001187923333443039 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.014334030382776054 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.014334030382776054 FTM
0xbc6015b8fe2e7804c861ed4684188270da207916fde748b2556fe64152fa005a300895532022-02-05 16:21:56242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.000056466145956226 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago 0x3c50062ffed29ea72a4e55547d3e3948ba2784f1 SpookySwap: Router0.303356987796374073 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago Fantom Finance: Wrapped Fantom Token 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.2 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.00415210310262784 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.049503659838309737 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.049503659838309737 FTM
0x4e61f562eabfa5a88da91571fa40bd83343917dc74266b8ff57203bec4779f39300895352022-02-05 16:21:37242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.000197565017126759 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago 0x3c50062ffed29ea72a4e55547d3e3948ba2784f1 SpookySwap: Router20.083293572920655209 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago Fantom Finance: Wrapped Fantom Token 0x3c50062ffed29ea72a4e55547d3e3948ba2784f10.4 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f14.987506246876561719 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f14.848190429924702453 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f14.848190429924702453 FTM
0xd541f741a536c207327a24959d43b91b4674130bcaaf94434c56e3eeac355e6e300894912022-02-05 16:21:06242 days 15 hrs ago SpookySwap: Router 0x3c50062ffed29ea72a4e55547d3e3948ba2784f14.999406466194688584 FTM
0x29388e7f54f032e1fbc85d6362bd3ec7575b7f4db7430f13bba55a17cac71a8f300833992022-02-05 14:55:30242 days 17 hrs ago 0x86fdd9980acd3e2c8e7959db344ff6d5fd5743f5  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MPTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-02-05
*/

// Sources flattened with hardhat v2.8.0 https://hardhat.org

// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

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/[email protected]

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/[email protected]

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/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// File contracts/Treasury.sol

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;



/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

library SafeMath {

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

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function mul32(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

library Address {

  function isContract(address account) internal view returns (bool) {
        // This method relies in 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;
    }

    function functionCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function _functionCallWithValue(
        address target, 
        bytes memory data, 
        uint256 weiValue, 
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function _verifyCallResult(
        bool success, 
        bytes memory returndata, 
        string memory errorMessage
    ) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IOwnable {
  function manager() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

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

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

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

    function renounceManagement() public virtual override onlyManager() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyManager() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

interface IERC20 {
    function decimals() external view returns (uint8);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

    function approve(address spender, uint256 amount) external returns (bool);

    function totalSupply() external view returns (uint256);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeERC20 {
    using SafeMath for uint256;
    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));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        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");
        }
    }
}

interface IERC20Mintable {
  function mint( uint256 amount_ ) external;

  function mint( address account_, uint256 ammount_ ) external;
}

interface IMPERC20 {
    function burnFrom(address account_, uint256 amount_) external;
}

interface IBondCalculator {
  function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}

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

contract MPTreasury is Ownable, ReentrancyGuard {

    using SafeMath for uint;
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    event Deposit( address indexed token, uint amount, uint value );
    event Withdrawal( address indexed token, uint amount, uint value );
    event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event ReservesManaged( address indexed token, uint amount );
    event ReservesUpdated( uint indexed totalReserves );
    event ReservesAudited( uint indexed totalReserves );
    event RewardsMinted( address indexed caller, address indexed recipient, uint amount );
    event ChangeQueued( MANAGING indexed managing, address queued );
    event ChangeActivated( MANAGING indexed managing, address activated, bool result );
    event HouseCutSent( address caller, uint timestamp );
    event TreasuryLiquidationCalled( address caller, uint timestamp, uint percentLiquidation, uint MPBurnt, bool hasFinishedLiquidating );
    event LiquidationFinalized( address caller, uint timestamp );
    event SetMPRouter( address router );

    enum MANAGING { 
        RESERVEDEPOSITOR, 
        RESERVESPENDER, 
        RESERVETOKEN, 
        RESERVEMANAGER, 
        LIQUIDITYDEPOSITOR, 
        LIQUIDITYTOKEN, 
        LIQUIDITYMANAGER, 
        DEBTOR, 
        REWARDMANAGER, 
        SMP 
    }

    address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    address public immutable MP;

    address[] public reserveTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isReserveToken;

    address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveDepositor;

    address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveSpender;

    address[] public liquidityTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isLiquidityToken;

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;

    mapping( address => address ) public bondCalculator; // bond calculator for liquidity token

    address[] public reserveManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveManager;

    address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityManager;

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint ) public debtorBalance;

    address[] public rewardManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isRewardManager;

    address public sMP;
    
    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    // initial 10x
    uint public fractionality = 100000;

    // house cut of liquidity 100 = 1%, 2000 = 20%
    uint public constant houseCutPercentage = 2000;

    uint public immutable startTime;

    // TODO: REVERT TEST VALUE ONLY!!!
    uint public constant oneDay = 900;//3600 * 24;

    // 14 days of mayhem
    // TODO: REVERT TEST VALUE ONLY!!!
    uint public constant phaseOneDuration = 60 * 45;// oneDay * 14;

    bool public hasSendHouseCutExecuted = false;
    bool public hasLiquidateTreasuryExecuted = false;
    bool public hasFinalizeLiquidationExecuted = false;

    uint256 public MPBurntFromBuyBack = 0;

    // Fantom DAI Address
    address public constant stableTokenAddress = 0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E;

    IUniswapV2Router02 public MPSwapRouter;

    address public constant houseWallet = 0x4E5D385E44DCD0b7adf5fBe03A6BB867A8A90E7B;

    constructor (
        address _MP,
        address [] memory _reserveTokens,
        address[] memory _liquidityTokens,
        address _bondCalc,
        uint _startTime
    ) {
        require( _MP != address(0) );
        MP = _MP;

        for (uint256 i = 0;i<_reserveTokens.length;i++) {
            isReserveToken[ _reserveTokens[i] ] = true;
            reserveTokens.push( _reserveTokens[i] );
        }

        for (uint256 i = 0;i<_liquidityTokens.length;i++) {
            isLiquidityToken[ _liquidityTokens[i] ] = true;
            liquidityTokens.push( _liquidityTokens[i] );
            bondCalculator[ _liquidityTokens[i] ] = _bondCalc;
        }

        require(_startTime != 0, "start time cannot be 0!");
        startTime = _startTime;
    }

    function endTime() public returns ( uint ) {
        return startTime + phaseOneDuration;
    }

    /**
        @notice allow approved address to deposit an asset for MP
        @param _amount uint
        @param _token address
        @param _profit uint
        @return send_ uint
     */
    function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) {
        require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        if ( isReserveToken[ _token ] ) {
            require( isReserveDepositor[ msg.sender ], "Not approved" );
        } else {
            require( isLiquidityDepositor[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        // mint MP needed and store amount of rewards for distribution
        send_ = value.sub( _profit );

        require( block.timestamp <= endTime(), "No more minting is possible!");
        IERC20Mintable( MP ).mint( msg.sender, send_ );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit Deposit( _token, _amount, value );
    }


    /**
        @notice sends a cut of the treasury to the house wallet.
     */
    function sendHouseCut() public  {
        require( _owner == msg.sender || hasFinalizeLiquidationExecuted, "Ownable: caller is not the owner" );
        require( !hasSendHouseCutExecuted,  "Send house cut cannot be called twice!" );
        require( block.timestamp > endTime(), "Cannot deal house cut yet.");

        // We ignore LP assets
        for( uint256 i = 0; i < reserveTokens.length; i++ ) {
            if ( isReserveToken[ reserveTokens[ i ] ] ) {
                uint treasuryBalance = IERC20( reserveTokens[ i ] ).balanceOf( address(this) );

                uint houseCut = treasuryBalance.mul( houseCutPercentage ).div( 10000 );

                if ( houseCut > 0 )
                    IERC20( reserveTokens[ i ] ).safeTransfer( houseWallet, houseCut );
            }
        }

        emit HouseCutSent( msg.sender, block.timestamp );

        hasSendHouseCutExecuted = true;
    }



    /**
        @notice liquidates a % of the treasury to a stable coin and then swaps it MP and then burns it.
     */
    function liquidateTreasury( uint percentLiquidation ) public {
        require( percentLiquidation <= 10000,  "percentLiquidation is greater than 100!" ); 
        require( _owner == msg.sender || hasFinalizeLiquidationExecuted, "Ownable: caller is not the owner" );
        require( !hasLiquidateTreasuryExecuted,  "Treasury has already been liquidated!" );
        require( block.timestamp > endTime(), "Cannot liquidate treasury yet.");
        
        if ( !hasSendHouseCutExecuted )
            sendHouseCut();

        bool hasFullyLiquidated = true;

        address[] memory path = new address[](2);

        // We ignore LP assets
        for( uint256 i = 0; i < reserveTokens.length; i++ ) {
            if ( isReserveToken[ reserveTokens[ i ] ] ) {
                if ( reserveTokens[ i ] == stableTokenAddress || reserveTokens[ i ] == MPSwapRouter.WETH() )
                    continue;

                uint treasuryBalance = IERC20( reserveTokens[ i ] ).balanceOf( address(this) );

                uint liquidationAmount = treasuryBalance.mul( percentLiquidation ).div( 10000 );

                if ( liquidationAmount == 0 ) {
                    if ( treasuryBalance != 0 )
                        hasFullyLiquidated = false;

                    continue;
                }

                require(IERC20( reserveTokens[ i ] ).approve( address(MPSwapRouter), liquidationAmount ), "!approved");

                path[0] = reserveTokens[ i ];
                path[1] = MPSwapRouter.WETH();

                // make the swap
                MPSwapRouter.swapExactTokensForETH(
                    liquidationAmount,
                    0, // accept any amount of tokens
                    path,
                    address(this),
                    block.timestamp
                );

                if ( IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) != 0 )
                    hasFullyLiquidated = false;
            }
        }

        uint stableBalanceBefore = IERC20( stableTokenAddress ).balanceOf( address(this) );
        uint stableLiquidationAmount = stableBalanceBefore.mul( percentLiquidation ).div( 10000 );

        path[0] = MPSwapRouter.WETH();
        path[1] = stableTokenAddress;


        uint wftmBalance = IERC20( MPSwapRouter.WETH() ).balanceOf( address(this) );

        uint wftmLiquidationAmount = wftmBalance.mul( percentLiquidation ).div( 10000 );

        if ( wftmLiquidationAmount > 0 )
            IWETH( MPSwapRouter.WETH() ).withdraw( wftmLiquidationAmount );

        if ( IERC20( MPSwapRouter.WETH() ).balanceOf( address(this) ) != 0 )
            hasFullyLiquidated = false;

        // make the swap
        MPSwapRouter.swapExactETHForTokens{value: address(this).balance}(
            0, // accept any amount of tokens
            path,
            address(this),
            block.timestamp
        );

        uint newStableBalance = IERC20( stableTokenAddress ).balanceOf( address(this) ).sub( stableBalanceBefore.sub( stableLiquidationAmount ) );

        require(IERC20( stableTokenAddress ).approve( address(MPSwapRouter), newStableBalance ), "!approved");

        path[0] = stableTokenAddress;
        path[1] = MP;

        // make the swap
        MPSwapRouter.swapExactTokensForTokens(
            newStableBalance,
            0, // accept any amount of tokens
            path,
            address(this),
            block.timestamp
        );

        uint MPBurnt = IERC20( MP ).balanceOf( address(this) );

        IERC20( MP ).safeTransfer( BURN_ADDRESS, MPBurnt );

        MPBurntFromBuyBack+= MPBurnt;

        if ( hasFullyLiquidated )
            hasLiquidateTreasuryExecuted = true;

        emit TreasuryLiquidationCalled( msg.sender, block.timestamp, percentLiquidation, MPBurnt, hasLiquidateTreasuryExecuted );
    }


    /**
        @notice finalizes the treasury liquidation process, can be called by anyone a day after mintng ends.
     */
    function finalizeLiquidation() external nonReentrant {
        require( !hasFinalizeLiquidationExecuted,  "Finalize liquidation cannot be called twice!" );
        require( block.timestamp > endTime() + oneDay, "Cannot finalize liquiation yet.");
        
        hasFinalizeLiquidationExecuted = true;    

        if ( !hasSendHouseCutExecuted )
            sendHouseCut();

        if ( !hasLiquidateTreasuryExecuted )
            liquidateTreasury( 10000 );

        emit LiquidationFinalized( msg.sender, block.timestamp );
    }

    /**
        @notice send epoch reward to staking contract
     */
    function mintRewards( address _recipient, uint _amount ) external {
        require( isRewardManager[ msg.sender ], "Not approved" );
        require( _amount <= excessReserves(), "Insufficient reserves" );

        if ( block.timestamp <= endTime() ) {
            IERC20Mintable( MP ).mint( _recipient, _amount );
            emit RewardsMinted( msg.sender, _recipient, _amount );
        }
    }

    /**
        @notice returns excess reserves not backing tokens
        @return uint
     */
    function excessReserves() public view returns ( uint ) {
        return totalReserves.mul( fractionality ).div( 10000 ).sub( IERC20( MP ).totalSupply().sub( totalDebt ) );
    }

    /**
        @notice sets the fractionality of the treasury
     */
    function setFractionality( uint256 _fractionality ) external onlyManager() {
        require( _fractionality >= 10000 && _fractionality <= 1000000, "fractionality must be 1-100x!" );
        fractionality = _fractionality;
    }

    /**
        @notice takes inventory of all tracked assets
        @notice always consolidate to recognized reserves before audit
     */
    function auditReserves() external {
        uint256 reserves;
        for( uint256 i = 0; i < reserveTokens.length; i++ ) {
            if ( isReserveToken[ reserveTokens[ i ] ] ) {
                reserves = reserves.add (
                    valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) )
                );
            }
        }
        for( uint256 i = 0; i < liquidityTokens.length; i++ ) {
            if ( !isReserveToken[ liquidityTokens[ i ] ] && isLiquidityToken[ liquidityTokens[ i ] ] ) {
                reserves = reserves.add (
                    valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) )
                );
            }
        }
        totalReserves = reserves;
        emit ReservesUpdated( reserves );
        emit ReservesAudited( reserves );
    }

    /**
        @notice returns MP valuation of asset
        @param _token address
        @param _amount uint
        @return value_ uint
     */
    function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) {
        if ( isReserveToken[ _token ] ) {
            // convert amount to match MP decimals
            value_ = _amount.mul( 10 ** IERC20( MP ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
        }
    }

    /**
     * @dev Update the swap router.
     * Can only be called by the current operator.
     */
    function updateMPSwapRouter(address _router) external onlyManager() {
        require( _router != address(0), "!!0");
        require( address(MPSwapRouter) == address(0), "!unset" );

        MPSwapRouter = IUniswapV2Router02( _router );

        emit SetMPRouter( address(MPSwapRouter) );
    }

    // To receive ETH from MPSwapRouter when swapping
    receive() external payable {}

    /**
        @notice verify queue then set boolean in mapping
        @param _managing MANAGING
        @param _address address
        @param _calculator address
        @return bool
     */
    function toggle(
        MANAGING _managing, 
        address _address, 
        address _calculator 
    ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        bool result;
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            if( !listContains( reserveDepositors, _address ) ) {
                reserveDepositors.push( _address );
            }

            result = !isReserveDepositor[ _address ];
            isReserveDepositor[ _address ] = result;
            
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            if( !listContains( reserveSpenders, _address ) ) {
                reserveSpenders.push( _address );
            }

            result = !isReserveSpender[ _address ];
            isReserveSpender[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            if( !listContains( reserveTokens, _address ) ) {
                reserveTokens.push( _address );
            }

            result = !isReserveToken[ _address ];
            isReserveToken[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            if( !listContains( reserveManagers, _address ) ) {
                reserveManagers.push( _address );
            }

            result = !isReserveManager[ _address ];
            isReserveManager[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            if( !listContains( liquidityDepositors, _address ) ) {
                liquidityDepositors.push( _address );
            }

            result = !isLiquidityDepositor[ _address ];
            isLiquidityDepositor[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            if( !listContains( liquidityTokens, _address ) ) {
                liquidityTokens.push( _address );
            }

            result = !isLiquidityToken[ _address ];
            isLiquidityToken[ _address ] = result;
            bondCalculator[ _address ] = _calculator;

        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            if( !listContains( liquidityManagers, _address ) ) {
                liquidityManagers.push( _address );
            }

            result = !isLiquidityManager[ _address ];
            isLiquidityManager[ _address ] = result;

        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            if( !listContains( debtors, _address ) ) {
                debtors.push( _address );
            }

            result = !isDebtor[ _address ];
            isDebtor[ _address ] = result;

        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8å
            if( !listContains( rewardManagers, _address ) ) {
                rewardManagers.push( _address );
            }

            result = !isRewardManager[ _address ];
            isRewardManager[ _address ] = result;

        } else if ( _managing == MANAGING.SMP ) { // 9
            sMP = _address;
            result = true;

        } else return false;

        emit ChangeActivated( _managing, _address, result );
        return true;
    }

    /**
        @notice checks array to ensure against duplicate
        @param _list address[]
        @param _token address
        @return bool
     */
    function listContains( address[] storage _list, address _token ) internal view returns ( bool ) {
        for( uint i = 0; i < _list.length; i++ ) {
            if( _list[ i ] == _token ) {
                return true;
            }
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_MP","type":"address"},{"internalType":"address[]","name":"_reserveTokens","type":"address[]"},{"internalType":"address[]","name":"_liquidityTokens","type":"address[]"},{"internalType":"address","name":"_bondCalc","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum MPTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum MPTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"HouseCutSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LiquidationFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"SetMPRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"percentLiquidation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MPBurnt","type":"uint256"},{"indexed":false,"internalType":"bool","name":"hasFinishedLiquidating","type":"bool"}],"name":"TreasuryLiquidationCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MPBurntFromBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MPSwapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fractionality","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasFinalizeLiquidationExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasLiquidateTreasuryExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSendHouseCutExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"houseCutPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"houseWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentLiquidation","type":"uint256"}],"name":"liquidateTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oneDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseOneDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sMP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendHouseCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fractionality","type":"uint256"}],"name":"setFractionality","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stableTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum MPTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateMPSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052620186a0601a55601b805462ffffff191690556000601c553480156200002957600080fd5b50604051620042e3380380620042e3833981810160405260a08110156200004f57600080fd5b8151602083018051604051929492938301929190846401000000008211156200007757600080fd5b9083019060208201858111156200008d57600080fd5b8251866020820283011164010000000082111715620000ab57600080fd5b82525081516020918201928201910280838360005b83811015620000da578181015183820152602001620000c0565b50505050905001604052602001805160405193929190846401000000008211156200010457600080fd5b9083019060208201858111156200011a57600080fd5b82518660208202830111640100000000821117156200013857600080fd5b82525081516020918201928201910280838360005b83811015620001675781810151838201526020016200014d565b505050509190910160408181526020840151930151600080546001600160a01b03191633178082559496509094506001600160a01b03939093169291507fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a360016002556001600160a01b038516620001e257600080fd5b6001600160601b0319606086901b1660805260005b8451811015620002a8576001600460008784815181106200021457fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060038582815181106200026257fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501620001f7565b5060005b8351811015620003ac576001600a6000868481518110620002c957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060098482815181106200031757fe5b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b0390921691909117905584518491600d918790859081106200036757fe5b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080546001600160a01b03191692909116919091179055600101620002ac565b508062000400576040805162461bcd60e51b815260206004820152601760248201527f73746172742074696d652063616e6e6f74206265203021000000000000000000604482015290519081900360640190fd5b60a0525050505060805160601c60a051613e8d620004566000398061150752806119cf525080610bc45280610d73528061172b52806118c352806129fc5280612bd95280612c7f5280612f615250613e8d6000f3fe60806040526004361061031e5760003560e01c80636b5e40a7116101ab578063b5b1d560116100f7578063ebd83cd811610095578063fbfd393b1161006f578063fbfd393b14610a3d578063fc7b9c1814610a81578063fccc281314610a96578063fd1ec01014610aab57610325565b8063ebd83cd8146109c2578063ee4e19a1146109f5578063f2715ae014610a2857610325565b8063d031370b116100d1578063d031370b1461093b578063d26c3f3114610965578063df89b3441461097a578063e6801e84146109ad57610325565b8063b5b1d560146108bd578063bc157ac1146108e7578063ca1938e51461092657610325565b806387d67dff11610164578063923c8ac61161013e578063923c8ac6146107fa5780639d9acefd1461082d578063a1210a2d14610857578063a569e5711461088a57610325565b806387d67dff146107885780638f6a7b57146107bb5780638f840ddd146107e557610325565b80636b5e40a7146106cb57806370a0502a146106f557806377818f021461071f57806378e97925146107345780637e501d7d14610749578063869871bf1461075e57610325565b80633197cbb61161026a57806349b3f31c1161022357806356d7b035116101fd57806356d7b035146106355780635a96ac0a1461064a57806368c31dd51461065f5780636a20de921461069257610325565b806349b3f31c146105d85780634bd9351b146105ed5780634e83423c1461060257610325565b80633197cbb61461051257806333bd98ef14610527578063437f79121461053c57806346f68ee9146105665780634774ff9214610599578063481c6a75146105c357610325565b8063124154ca116102d7578063232de366116102b1578063232de366146104be57806327cff2dc146104d3578063288241e8146104e85780632b7ce500146104fd57610325565b8063124154ca1461040b5780631af4da70146104525780631eec5a9a1461048557610325565b80630619aff11461032a578063064e6d7a14610370578063089208d814610385578063094a86511461039c5780630c3513a8146103e15780630d03f9bc146103f657610325565b3661032557005b600080fd5b34801561033657600080fd5b506103546004803603602081101561034d57600080fd5b5035610ad5565b604080516001600160a01b039092168252519081900360200190f35b34801561037c57600080fd5b50610354610aff565b34801561039157600080fd5b5061039a610b0e565b005b3480156103a857600080fd5b506103cf600480360360208110156103bf57600080fd5b50356001600160a01b0316610ba5565b60408051918252519081900360200190f35b3480156103ed57600080fd5b506103cf610bb7565b34801561040257600080fd5b50610354610c7b565b34801561041757600080fd5b5061043e6004803603602081101561042e57600080fd5b50356001600160a01b0316610c93565b604080519115158252519081900360200190f35b34801561045e57600080fd5b506103546004803603602081101561047557600080fd5b50356001600160a01b0316610ca8565b34801561049157600080fd5b506103cf600480360360408110156104a857600080fd5b506001600160a01b038135169060200135610cc3565b3480156104ca57600080fd5b506103cf610eb1565b3480156104df57600080fd5b5061039a610eb7565b3480156104f457600080fd5b5061039a611036565b34801561050957600080fd5b5061039a6112bd565b34801561051e57600080fd5b506103cf611505565b34801561053357600080fd5b5061043e61152d565b34801561054857600080fd5b506103546004803603602081101561055f57600080fd5b503561153b565b34801561057257600080fd5b5061039a6004803603602081101561058957600080fd5b50356001600160a01b031661154b565b3480156105a557600080fd5b5061039a600480360360208110156105bc57600080fd5b5035611638565b3480156105cf57600080fd5b506103546116f0565b3480156105e457600080fd5b506103546116ff565b3480156105f957600080fd5b506103cf61170e565b34801561060e57600080fd5b5061043e6004803603602081101561062557600080fd5b50356001600160a01b0316611714565b34801561064157600080fd5b50610354611729565b34801561065657600080fd5b5061039a61174d565b34801561066b57600080fd5b5061043e6004803603602081101561068257600080fd5b50356001600160a01b03166117f7565b34801561069e57600080fd5b5061039a600480360360408110156106b557600080fd5b506001600160a01b03813516906020013561180c565b3480156106d757600080fd5b50610354600480360360208110156106ee57600080fd5b5035611995565b34801561070157600080fd5b506103546004803603602081101561071857600080fd5b50356119a5565b34801561072b57600080fd5b506103546119b5565b34801561074057600080fd5b506103cf6119cd565b34801561075557600080fd5b5061043e6119f1565b34801561076a57600080fd5b506103546004803603602081101561078157600080fd5b5035611a00565b34801561079457600080fd5b5061043e600480360360208110156107ab57600080fd5b50356001600160a01b0316611a10565b3480156107c757600080fd5b50610354600480360360208110156107de57600080fd5b5035611a25565b3480156107f157600080fd5b506103cf611a35565b34801561080657600080fd5b5061039a6004803603602081101561081d57600080fd5b50356001600160a01b0316611a3b565b34801561083957600080fd5b5061039a6004803603602081101561085057600080fd5b5035611b6a565b34801561086357600080fd5b5061043e6004803603602081101561087a57600080fd5b50356001600160a01b0316612d2a565b34801561089657600080fd5b5061043e600480360360208110156108ad57600080fd5b50356001600160a01b0316612d3f565b3480156108c957600080fd5b50610354600480360360208110156108e057600080fd5b5035612d54565b3480156108f357600080fd5b506103cf6004803603606081101561090a57600080fd5b508035906001600160a01b036020820135169060400135612d64565b34801561093257600080fd5b506103cf613047565b34801561094757600080fd5b506103546004803603602081101561095e57600080fd5b503561304d565b34801561097157600080fd5b506103cf61305d565b34801561098657600080fd5b5061043e6004803603602081101561099d57600080fd5b50356001600160a01b0316613063565b3480156109b957600080fd5b5061043e613078565b3480156109ce57600080fd5b5061043e600480360360208110156109e557600080fd5b50356001600160a01b0316613081565b348015610a0157600080fd5b5061043e60048036036020811015610a1857600080fd5b50356001600160a01b0316613096565b348015610a3457600080fd5b506103cf6130ab565b348015610a4957600080fd5b5061043e60048036036060811015610a6057600080fd5b5060ff813516906001600160a01b03602082013581169160400135166130b1565b348015610a8d57600080fd5b506103cf61376b565b348015610aa257600080fd5b50610354613771565b348015610ab757600080fd5b5061035460048036036020811015610ace57600080fd5b5035613777565b600e8181548110610ae557600080fd5b6000918252602090912001546001600160a01b0316905081565b6017546001600160a01b031681565b6000546001600160a01b03163314610b5b576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b60146020526000908152604090205481565b6000610c76610c4d6019547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1b57600080fd5b505afa158015610c2f573d6000803e3d6000fd5b505050506040513d6020811015610c4557600080fd5b505190613787565b610c70612710610c6a601a546018546137c990919063ffffffff16565b90613822565b90613787565b905090565b738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e81565b60066020526000908152604090205460ff1681565b600d602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526004602052604081205460ff1615610dfa57610df3836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2057600080fd5b505afa158015610d34573d6000803e3d6000fd5b505050506040513d6020811015610d4a57600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a91610c6a916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d6020811015610de457600080fd5b5051859060ff16600a0a6137c9565b9050610eab565b6001600160a01b0383166000908152600a602052604090205460ff1615610eab576001600160a01b038084166000818152600d6020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d6020811015610ea657600080fd5b505190505b92915050565b601a5481565b600280541415610f0e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60028055601b5462010000900460ff1615610f5a5760405162461bcd60e51b815260040180806020018281038252602c815260200180613db6602c913960400191505060405180910390fd5b610384610f65611505565b014211610fb9576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066696e616c697a65206c697175696174696f6e207965742e00604482015290519081900360640190fd5b601b805462ff0000191662010000179081905560ff16610fdb57610fdb611036565b601b54610100900460ff16610ff557610ff5612710611b6a565b6040805133815242602082015281517f79343ed0f1fd363ccc7376938c6fab1ed44d2bc4e3e1e7fb43863955cd0bb3f1929181900390910190a16001600255565b6000546001600160a01b03163314806110575750601b5462010000900460ff165b611096576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b601b5460ff16156110d85760405162461bcd60e51b8152600401808060200182810382526026815260200180613d076026913960400191505060405180910390fd5b6110e0611505565b4211611133576040805162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206465616c20686f75736520637574207965742e000000000000604482015290519081900360640190fd5b60005b60035481101561127357600460006003838154811061115157fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161561126b5760006003828154811061118d57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156111dc57600080fd5b505afa1580156111f0573d6000803e3d6000fd5b505050506040513d602081101561120657600080fd5b50519050600061121e612710610c6a846107d06137c9565b9050801561126857611268734e5d385e44dcd0b7adf5fbe03a6bb867a8a90e7b826003868154811061124c57fe5b6000918252602090912001546001600160a01b03169190613864565b50505b600101611136565b506040805133815242602082015281517fb9bb238e25758e8fc0ae9d3c0937713823a77efd0faa3b811fc2ecbf3db6a4c8929181900390910190a1601b805460ff19166001179055565b6000805b6003548110156113d45760046000600383815481106112dc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156113cc576113c96113c26003838154811061131c57fe5b600091825260209091200154600380546001600160a01b03909216918590811061134257fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561139157600080fd5b505afa1580156113a5573d6000803e3d6000fd5b505050506040513d60208110156113bb57600080fd5b5051610cc3565b83906138bb565b91505b6001016112c1565b5060005b6009548110156114a65760046000600983815481106113f357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615801561145d5750600a60006009838154811061143457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff165b1561149e5761149b6113c26009838154811061147557fe5b600091825260209091200154600980546001600160a01b03909216918590811061134257fe5b91505b6001016113d8565b50601881905560405181907f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b7f0000000000000000000000000000000000000000000000000000000000000000610a8c0190565b601b54610100900460ff1681565b60078181548110610ae557600080fd5b6000546001600160a01b03163314611598576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b6001600160a01b0381166115dd5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d2d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611685576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b612710811015801561169a5750620f42408111155b6116eb576040805162461bcd60e51b815260206004820152601d60248201527f6672616374696f6e616c697479206d75737420626520312d3130307821000000604482015290519081900360640190fd5b601a55565b6000546001600160a01b031690565b601d546001600160a01b031681565b61038481565b60166020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031633146117965760405162461bcd60e51b8152600401808060200182810382526022815260200180613d536022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60046020526000908152604090205460ff1681565b3360009081526016602052604090205460ff1661185f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611867610bb7565b8111156118b3576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b6118bb611505565b4211611991577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35b5050565b60058181548110610ae557600080fd5b60108181548110610ae557600080fd5b734e5d385e44dcd0b7adf5fbe03a6bb867a8a90e7b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b5462010000900460ff1681565b60128181548110610ae557600080fd5b60086020526000908152604090205460ff1681565b600b8181548110610ae557600080fd5b60185481565b6000546001600160a01b03163314611a88576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b6001600160a01b038116611ac9576040805162461bcd60e51b815260206004820152600360248201526202121360ec1b604482015290519081900360640190fd5b601d546001600160a01b031615611b10576040805162461bcd60e51b8152602060048201526006602482015265085d5b9cd95d60d21b604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f3db03a0791cde71d094600a5f26516921df1e2a7e716cfcb7816dee8459bf48e916020908290030190a150565b612710811115611bab5760405162461bcd60e51b8152600401808060200182810382526027815260200180613de26027913960400191505060405180910390fd5b6000546001600160a01b0316331480611bcc5750601b5462010000900460ff165b611c0b576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b601b54610100900460ff1615611c525760405162461bcd60e51b8152600401808060200182810382526025815260200180613e336025913960400191505060405180910390fd5b611c5a611505565b4211611cad576040805162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206c6971756964617465207472656173757279207965742e0000604482015290519081900360640190fd5b601b5460ff16611cbf57611cbf611036565b604080516002808252606080830184526001939092919060208301908036833701905050905060005b6003548110156122c3576004600060038381548110611d0357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156122bb57738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e6001600160a01b031660038281548110611d5b57fe5b6000918252602090912001546001600160a01b03161480611e225750601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc557600080fd5b505afa158015611dd9573d6000803e3d6000fd5b505050506040513d6020811015611def57600080fd5b5051600380546001600160a01b039092169183908110611e0b57fe5b6000918252602090912001546001600160a01b0316145b15611e2c576122bb565b600060038281548110611e3b57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d6020811015611eb457600080fd5b505190506000611eca612710610c6a84896137c9565b905080611ee3578115611edc57600094505b50506122bb565b60038381548110611ef057fe5b6000918252602080832090910154601d546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018790529051919092169363095ea7b393604480850194919392918390030190829087803b158015611f5357600080fd5b505af1158015611f67573d6000803e3d6000fd5b505050506040513d6020811015611f7d57600080fd5b5051611fbc576040805162461bcd60e51b815260206004820152600960248201526808585c1c1c9bdd995960ba1b604482015290519081900360640190fd5b60038381548110611fc957fe5b600091825260208220015485516001600160a01b03909116918691611fea57fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561203e57600080fd5b505afa158015612052573d6000803e3d6000fd5b505050506040513d602081101561206857600080fd5b505184518590600190811061207957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601d60009054906101000a90046001600160a01b03166001600160a01b03166318cbafe58260008730426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561213357818101518382015260200161211b565b505050509050019650505050505050600060405180830381600087803b15801561215c57600080fd5b505af1158015612170573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561219957600080fd5b81019080805160405193929190846401000000008211156121b957600080fd5b9083019060208201858111156121ce57600080fd5b82518660208202830111640100000000821117156121eb57600080fd5b82525081516020918201928201910280838360005b83811015612218578181015183820152602001612200565b50505050905001604052505050506003838154811061223357fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561228257600080fd5b505afa158015612296573d6000803e3d6000fd5b505050506040513d60208110156122ac57600080fd5b5051156122b857600094505b50505b600101611ce8565b50604080516370a0823160e01b81523060048201529051600091738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e916370a0823191602480820192602092909190829003018186803b15801561231957600080fd5b505afa15801561232d573d6000803e3d6000fd5b505050506040513d602081101561234357600080fd5b505190506000612359612710610c6a84886137c9565b9050601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b5051835184906000906123e257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e8360018151811061242457fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051600094929092169263ad5c464892600480840193829003018186803b15801561247957600080fd5b505afa15801561248d573d6000803e3d6000fd5b505050506040513d60208110156124a357600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156124ed57600080fd5b505afa158015612501573d6000803e3d6000fd5b505050506040513d602081101561251757600080fd5b50519050600061252d612710610c6a848a6137c9565b9050801561261257601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258357600080fd5b505afa158015612597573d6000803e3d6000fd5b505050506040513d60208110156125ad57600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505050505b601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561266057600080fd5b505afa158015612674573d6000803e3d6000fd5b505050506040513d602081101561268a57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156126d457600080fd5b505afa1580156126e8573d6000803e3d6000fd5b505050506040513d60208110156126fe57600080fd5b50511561270a57600095505b601d54604051637ff36ab560e01b8152600060048201818152306044840181905242606485018190526080602486019081528b5160848701528b516001600160a01b0390971696637ff36ab5964796958e9594939092909160a40190602080880191028083838b5b8381101561278a578181015183820152602001612772565b50505050905001955050505050506000604051808303818588803b1580156127b157600080fd5b505af11580156127c5573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156127ef57600080fd5b810190808051604051939291908464010000000082111561280f57600080fd5b90830190602082018581111561282457600080fd5b825186602082028301116401000000008211171561284157600080fd5b82525081516020918201928201910280838360005b8381101561286e578181015183820152602001612856565b505050509050016040525050505060006128e5612894858761378790919063ffffffff16565b604080516370a0823160e01b81523060048201529051738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e916370a08231916024808301926020929190829003018186803b158015610c1b57600080fd5b601d546040805163095ea7b360e01b81526001600160a01b0390921660048301526024820183905251919250738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e9163095ea7b3916044808201926020929091908290030181600087803b15801561294f57600080fd5b505af1158015612963573d6000803e3d6000fd5b505050506040513d602081101561297957600080fd5b50516129b8576040805162461bcd60e51b815260206004820152600960248201526808585c1c1c9bdd995960ba1b604482015290519081900360640190fd5b738d11ec38a3eb5e956b052f67da8bdc9bef8abf3e866000815181106129da57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000086600181518110612a2857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601d60009054906101000a90046001600160a01b03166001600160a01b03166338ed17398260008930426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612ae2578181015183820152602001612aca565b505050509050019650505050505050600060405180830381600087803b158015612b0b57600080fd5b505af1158015612b1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b4857600080fd5b8101908080516040519392919084640100000000821115612b6857600080fd5b908301906020820185811115612b7d57600080fd5b8251866020820283011164010000000082111715612b9a57600080fd5b82525081516020918201928201910280838360005b83811015612bc7578181015183820152602001612baf565b505050509050016040525050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d6020811015612c6e57600080fd5b50519050612ca86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661dead83613864565b601c8054820190558715612cc657601b805461ff0019166101001790555b601b54604080513381524260208201528082018c90526060810184905261010090920460ff1615156080830152517f279fcb1b1a056ff8d9f344b63e74ce93c991292deaebd9c40ae329e227ba27609160a0908290030190a1505050505050505050565b600c6020526000908152604090205460ff1681565b600a6020526000908152604090205460ff1681565b60158181548110610ae557600080fd5b6001600160a01b03821660009081526004602052604081205460ff1680612da357506001600160a01b0383166000908152600a602052604090205460ff165b612de3576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b612df86001600160a01b038416333087613915565b6001600160a01b03831660009081526004602052604090205460ff1615612e71573360009081526006602052604090205460ff16612e6c576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b612ec4565b336000908152600c602052604090205460ff16612ec4576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000612ed08486610cc3565b9050612edc8184613787565b9150612ee6611505565b421115612f3a576040805162461bcd60e51b815260206004820152601c60248201527f4e6f206d6f7265206d696e74696e6720697320706f737369626c652100000000604482015290519081900360640190fd5b604080516340c10f1960e01b81523360048201526024810184905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916340c10f1991604480830192600092919082900301818387803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b5050601854612fce92509050826138bb565b60188190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b6107d081565b60038181548110610ae557600080fd5b610a8c81565b60116020526000908152604090205460ff1681565b601b5460ff1681565b600f6020526000908152604090205460ff1681565b60136020526000908152604090205460ff1681565b601c5481565b600080546001600160a01b031633146130ff576040805162461bcd60e51b81526020600482018190526024820152600080516020613d96833981519152604482015290519081900360640190fd5b6001600160a01b03831661311257600080fd5b60008085600981111561312157fe5b14156131b257613132600585613975565b61318257600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff19909116811790915561370d565b60018560098111156131c057fe5b1415613251576131d1600785613975565b61322157600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600860205260409020805460ff81161560ff19909116811790915561370d565b600285600981111561325f57fe5b14156132f057613270600385613975565b6132c057600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600460205260409020805460ff81161560ff19909116811790915561370d565b60038560098111156132fe57fe5b141561338f5761330f600e85613975565b61335f57600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff19909116811790915561370d565b600485600981111561339d57fe5b141561342e576133ae600b85613975565b6133fe57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600c60205260409020805460ff81161560ff19909116811790915561370d565b600585600981111561343c57fe5b14156134ef5761344d600985613975565b61349d57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600a60209081526040808320805460ff81161560ff199091168117909155600d90925290912080546001600160a01b0319169285169290921790915561370d565b60068560098111156134fd57fe5b141561358e5761350e601085613975565b61355e57601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601160205260409020805460ff81161560ff19909116811790915561370d565b600785600981111561359c57fe5b141561362d576135ad601285613975565b6135fd57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff19909116811790915561370d565b600885600981111561363b57fe5b14156136cc5761364c601585613975565b61369c57601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff19909116811790915561370d565b60098560098111156136da57fe5b14156137035750601780546001600160a01b0319166001600160a01b038516179055600161370d565b6000915050613764565b84600981111561371957fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60195481565b61dead81565b60098181548110610ae557600080fd5b600061376483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139cf565b6000826137d857506000610eab565b828202828482816137e557fe5b04146137645760405162461bcd60e51b8152600401808060200182810382526021815260200180613d756021913960400191505060405180910390fd5b600061376483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a66565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138b6908490613acb565b505050565b600082820183811015613764576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261396f908590613acb565b50505050565b6000805b83548110156139c557826001600160a01b031684828154811061399857fe5b6000918252602090912001546001600160a01b031614156139bd576001915050610eab565b600101613979565b5060009392505050565b60008184841115613a5e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a23578181015183820152602001613a0b565b50505050905090810190601f168015613a505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183613ab55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613a23578181015183820152602001613a0b565b506000838581613ac157fe5b0495945050505050565b6060613b20826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b7c9092919063ffffffff16565b8051909150156138b657808060200190516020811015613b3f57600080fd5b50516138b65760405162461bcd60e51b815260040180806020018281038252602a815260200180613e09602a913960400191505060405180910390fd5b6060613b8b8484600085613b93565b949350505050565b6060613b9e85613d00565b613bef576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613c2e5780518252601f199092019160209182019101613c0f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613c90576040519150601f19603f3d011682016040523d82523d6000602084013e613c95565b606091505b50915091508115613ca9579150613b8b9050565b805115613cb95780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613a23578181015183820152602001613a0b565b3b15159056fe53656e6420686f757365206375742063616e6e6f742062652063616c6c6564207477696365214f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657246696e616c697a65206c69717569646174696f6e2063616e6e6f742062652063616c6c65642074776963652170657263656e744c69717569646174696f6e2069732067726561746572207468616e20313030215361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454726561737572792068617320616c7265616479206265656e206c69717569646174656421a2646970667358221220955bcdb520994bf9a3d556008f4c4a30d892005e682a0492a2db76797b5b9d5f64736f6c634300070500330000000000000000000000005f2aea28329abd9d453622027668a50a616766c600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000028c08e4466471cbbcfddfbe4b0107ed35b8c3a2b0000000000000000000000000000000000000000000000000000000061fe992400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000c6e79e032e56ecac48e3e91fd0317b0dda37f7200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000001a942e09d7ed5c15a85bbc609850ec627b11a1be0000000000000000000000000361ab20935ca2683e1f82e865ad1d6848548bb30000000000000000000000005ecd3d7b67ff2daf477560f54f04d9a68b59b49d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000c062f0dddc072dd749d12273851a18376fb5ace

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

0000000000000000000000005f2aea28329abd9d453622027668a50a616766c600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000028c08e4466471cbbcfddfbe4b0107ed35b8c3a2b0000000000000000000000000000000000000000000000000000000061fe992400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000c6e79e032e56ecac48e3e91fd0317b0dda37f7200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000001a942e09d7ed5c15a85bbc609850ec627b11a1be0000000000000000000000000361ab20935ca2683e1f82e865ad1d6848548bb30000000000000000000000005ecd3d7b67ff2daf477560f54f04d9a68b59b49d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000c062f0dddc072dd749d12273851a18376fb5ace

-----Decoded View---------------
Arg [0] : _MP (address): 0x5f2aea28329abd9d453622027668a50a616766c6
Arg [1] : _reserveTokens (address[]): 0x0c6e79e032e56ecac48e3e91fd0317b0dda37f72,0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83,0x1a942e09d7ed5c15a85bbc609850ec627b11a1be,0x0361ab20935ca2683e1f82e865ad1d6848548bb3,0x5ecd3d7b67ff2daf477560f54f04d9a68b59b49d
Arg [2] : _liquidityTokens (address[]): 0x0c062f0dddc072dd749d12273851a18376fb5ace
Arg [3] : _bondCalc (address): 0x28c08e4466471cbbcfddfbe4b0107ed35b8c3a2b
Arg [4] : _startTime (uint256): 1644075300

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f2aea28329abd9d453622027668a50a616766c6
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000028c08e4466471cbbcfddfbe4b0107ed35b8c3a2b
Arg [4] : 0000000000000000000000000000000000000000000000000000000061fe9924
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 0000000000000000000000000c6e79e032e56ecac48e3e91fd0317b0dda37f72
Arg [7] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [8] : 0000000000000000000000001a942e09d7ed5c15a85bbc609850ec627b11a1be
Arg [9] : 0000000000000000000000000361ab20935ca2683e1f82e865ad1d6848548bb3
Arg [10] : 0000000000000000000000005ecd3d7b67ff2daf477560f54f04d9a68b59b49d
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [12] : 0000000000000000000000000c062f0dddc072dd749d12273851a18376fb5ace


Deployed ByteCode Sourcemap

18614:19139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21091:32;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21091:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;21091:32:0;;;;;;;;;;;;;;21747:18;;;;;;;;;;;;;:::i;15829:159::-;;;;;;;;;;;;;:::i;:::-;;21539:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21539:47:0;-1:-1:-1;;;;;21539:47:0;;:::i;:::-;;;;;;;;;;;;;;;;31182:179;;;;;;;;;;;;;:::i;22551:87::-;;;;;;;;;;;;;:::i;20479:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20479:52:0;-1:-1:-1;;;;;20479:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20992:51;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20992:51:0;-1:-1:-1;;;;;20992:51:0;;:::i;32870:456::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32870:456:0;;;;;;;;:::i;21893:34::-;;;;;;;;;;;;;:::i;30040:547::-;;;;;;;;;;;;;:::i;24934:921::-;;;;;;;;;;;;;:::i;31827:881::-;;;;;;;;;;;;;:::i;23577:97::-;;;;;;;;;;;;;:::i;22364:48::-;;;;;;;;;;;;;:::i;20540:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20540:32:0;;:::i;15996:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15996:261:0;-1:-1:-1;;;;;15996:261:0;;:::i;31443:231::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31443:231:0;;:::i;15602:90::-;;;;;;;;;;;;;:::i;22647:38::-;;;;;;;;;;;;;:::i;22123:33::-;;;;;;;;;;;;;:::i;21689:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21689:49:0;-1:-1:-1;;;;;21689:49:0;;:::i;20214:27::-;;;;;;;;;;;;;:::i;16269:221::-;;;;;;;;;;;;;:::i;20325:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20325:48:0;-1:-1:-1;;;;;20325:48:0;;:::i;30668:406::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30668:406:0;;;;;;;;:::i;20382:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20382:34:0;;:::i;21245:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21245:34:0;;:::i;22694:80::-;;;;;;;;;;;;;:::i;22043:31::-;;;;;;;;;;;;;:::i;22419:50::-;;;;;;;;;;;;;:::i;21403:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21403:24:0;;:::i;20635:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20635:50:0;-1:-1:-1;;;;;20635:50:0;;:::i;20830:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20830:36:0;;:::i;21778:25::-;;;;;;;;;;;;;:::i;33441:303::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33441:303:0;-1:-1:-1;;;;;33441:303:0;;:::i;25990:3912::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25990:3912:0;;:::i;20929:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20929:54:0;-1:-1:-1;;;;;20929:54:0;;:::i;20771:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20771:50:0;-1:-1:-1;;;;;20771:50:0;;:::i;21595:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21595:31:0;;:::i;23884:956::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23884:956:0;;;-1:-1:-1;;;;;23884:956:0;;;;;;;;;;:::i;21988:46::-;;;;;;;;;;;;;:::i;20250:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20250:30:0;;:::i;22243:47::-;;;;;;;;;;;;;:::i;21342:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21342:52:0;-1:-1:-1;;;;;21342:52:0;;:::i;22314:43::-;;;;;;;;;;;;;:::i;21186:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21186:50:0;-1:-1:-1;;;;;21186:50:0;;:::i;21490:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21490:42:0;-1:-1:-1;;;;;21490:42:0;;:::i;22478:37::-;;;;;;;;;;;;;:::i;34046:3258::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34046:3258:0;;;;;-1:-1:-1;;;;;34046:3258:0;;;;;;;;;;;;:::i;21843:21::-;;;;;;;;;;;;;:::i;20124:81::-;;;;;;;;;;;;;:::i;20694:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20694:32:0;;:::i;21091:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21091:32:0;;-1:-1:-1;21091:32:0;:::o;21747:18::-;;;-1:-1:-1;;;;;21747:18:0;;:::o;15829:159::-;15743:6;;-1:-1:-1;;;;;15743:6:0;15753:10;15743:20;15734:67;;;;;-1:-1:-1;;;15734:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15734:67:0;;;;;;;;;;;;;;;15946:1:::1;15930:6:::0;;15913:37:::1;::::0;-1:-1:-1;;;;;15930:6:0;;::::1;::::0;15913:37:::1;::::0;15946:1;;15913:37:::1;15978:1;15961:19:::0;;-1:-1:-1;;;;;;15961:19:0::1;::::0;;15829:159::o;21539:47::-;;;;;;;;;;;;;:::o;31182:179::-;31230:4;31255:98;31308:43;31340:9;;31316:2;-1:-1:-1;;;;;31308:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31308:26:0;;:30;:43::i;:::-;31255:47;31295:5;31255:34;31274:13;;31255;;:17;;:34;;;;:::i;:::-;:38;;:47::i;:::-;:51;;:98::i;:::-;31248:105;;31182:179;:::o;22551:87::-;22596:42;22551:87;:::o;20479:52::-;;;;;;;;;;;;;;;:::o;20992:51::-;;;;;;;;;;;;-1:-1:-1;;;;;20992:51:0;;:::o;32870:456::-;-1:-1:-1;;;;;32971:24:0;;32941:11;32971:24;;;:14;:24;;;;;;;;32966:353;;;33074:85;33138:6;-1:-1:-1;;;;;33130:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33130:27:0;33093:23;;;-1:-1:-1;;;33093:23:0;;;;33124:33;;;;:2;:33;;33074:44;;-1:-1:-1;;;;;33101:2:0;33093:21;;;;:23;;;;;33130:27;;33093:23;;;;;;;;:21;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33093:23:0;33074:7;;33087:29;;:2;:29;33074:11;:44::i;:85::-;33065:94;;32966:353;;;-1:-1:-1;;;;;33182:26:0;;;;;;:16;:26;;;;;;;;33177:142;;;-1:-1:-1;;;;;33252:24:0;;;;;;;:14;:24;;;;;;;;;;33235:72;;-1:-1:-1;;;33235:72:0;;;;;;;;;;;;;;;;;33252:24;;;;;33235:53;;:72;;;;;;;;;;;33252:24;33235:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33235:72:0;;-1:-1:-1;33177:142:0;32870:456;;;;:::o;21893:34::-;;;;:::o;30040:547::-;10244:1;10841:7;;:19;;10833:63;;;;;-1:-1:-1;;;10833:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10244:1;10974:18;;30114:30:::1;::::0;;;::::1;;;30113:31;30104:91;;;;-1:-1:-1::0;;;30104:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22153:3;30233:9;:7;:9::i;:::-;:18;30215:15;:36;30206:81;;;::::0;;-1:-1:-1;;;30206:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30308:30;:37:::0;;-1:-1:-1;;30308:37:0::1;::::0;::::1;::::0;;;;::::1;30368:23;30362:59;;30407:14;:12;:14::i;:::-;30440:28;::::0;::::1;::::0;::::1;;;30434:76;;30484:26;30503:5;30484:17;:26::i;:::-;30528:51;::::0;;30550:10:::1;30528:51:::0;;30562:15:::1;30528:51;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;10200:1:::0;11153:7;:22;30040:547::o;24934:921::-;24986:6;;-1:-1:-1;;;;;24986:6:0;24996:10;24986:20;;:54;;-1:-1:-1;25010:30:0;;;;;;;24986:54;24977:101;;;;;-1:-1:-1;;;24977:101:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24977:101:0;;;;;;;;;;;;;;;25099:23;;;;25098:24;25089:78;;;;-1:-1:-1;;;25089:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25205:9;:7;:9::i;:::-;25187:15;:27;25178:67;;;;;-1:-1:-1;;;25178:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25295:9;25290:454;25314:13;:20;25310:24;;25290:454;;;25362:14;:36;25378:13;25393:1;25378:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25378:18:0;25362:36;;;;;;;;;;;;;;;25357:376;;;25420:20;25451:13;25466:1;25451:18;;;;;;;;;;;;;;;;;;;25443:55;;;-1:-1:-1;;;25443:55:0;;25491:4;25443:55;;;;;;-1:-1:-1;;;;;25451:18:0;;;;25443:38;;:55;;;;;;;;;;25451:18;25443:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25443:55:0;;-1:-1:-1;25519:13:0;25535:54;25582:5;25535:41;25443:55;22030:4;25535:19;:41::i;:54::-;25519:70;-1:-1:-1;25615:12:0;;25610:107;;25651:66;22732:42;25707:8;25659:13;25674:1;25659:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25659:18:0;;25651:66;:41;:66::i;:::-;25357:376;;;25336:3;;25290:454;;;-1:-1:-1;25761:43:0;;;25775:10;25761:43;;25787:15;25761:43;;;;;;;;;;;;;;;;;25817:23;:30;;-1:-1:-1;;25817:30:0;25843:4;25817:30;;;24934:921::o;31827:881::-;31872:16;;31899:309;31923:13;:20;31919:24;;31899:309;;;31971:14;:36;31987:13;32002:1;31987:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31987:18:0;31971:36;;;;;;;;;;;;;;;31966:231;;;32040:141;32076:86;32085:13;32100:1;32085:18;;;;;;;;;;;;;;;;;;32113:13;:18;;-1:-1:-1;;;;;32085:18:0;;;;32128:1;;32113:18;;;;;;;;;;;;;;;;;32105:55;;;-1:-1:-1;;;32105:55:0;;32153:4;32105:55;;;;;;-1:-1:-1;;;;;32113:18:0;;;;32105:38;;:55;;;;;;;;;;32113:18;32105:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32105:55:0;32076:7;:86::i;:::-;32040:8;;:12;:141::i;:::-;32029:152;;31966:231;31945:3;;31899:309;;;;32223:9;32218:362;32242:15;:22;32238:26;;32218:362;;;32293:14;:38;32309:15;32326:1;32309:20;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32309:20:0;32293:38;;;;;;;;;;;;;;;32292:39;:83;;;;;32335:16;:40;32353:15;32370:1;32353:20;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32353:20:0;32335:40;;;;;;;;;;;;;;;32292:83;32287:282;;;32408:145;32444:90;32453:15;32470:1;32453:20;;;;;;;;;;;;;;;;;;32483:15;:20;;-1:-1:-1;;;;;32453:20:0;;;;32500:1;;32483:20;;;;;32408:145;32397:156;;32287:282;32266:3;;32218:362;;;-1:-1:-1;32590:13:0;:24;;;32630:27;;32606:8;;32630:27;;;;;32673;;32690:8;;32673:27;;;;;31827:881;:::o;23577:97::-;23638:9;22283:7;23638:28;23577:97;:::o;22364:48::-;;;;;;;;;:::o;20540:32::-;;;;;;;;;;;;15996:261;15743:6;;-1:-1:-1;;;;;15743:6:0;15753:10;15743:20;15734:67;;;;;-1:-1:-1;;;15734:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15734:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16099:23:0;::::1;16090:75;;;;-1:-1:-1::0;;;16090:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16198:6;::::0;;16181:36:::1;::::0;-1:-1:-1;;;;;16181:36:0;;::::1;::::0;16198:6;::::1;::::0;16181:36:::1;::::0;::::1;16228:9;:21:::0;;-1:-1:-1;;;;;;16228:21:0::1;-1:-1:-1::0;;;;;16228:21:0;;;::::1;::::0;;;::::1;::::0;;15996:261::o;31443:231::-;15743:6;;-1:-1:-1;;;;;15743:6:0;15753:10;15743:20;15734:67;;;;;-1:-1:-1;;;15734:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15734:67:0;;;;;;;;;;;;;;;31556:5:::1;31538:14;:23;;:52;;;;;31583:7;31565:14;:25;;31538:52;31529:96;;;::::0;;-1:-1:-1;;;31529:96:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31636:13;:30:::0;31443:231::o;15602:90::-;15651:7;15678:6;-1:-1:-1;;;;;15678:6:0;15602:90;:::o;22647:38::-;;;-1:-1:-1;;;;;22647:38:0;;:::o;22123:33::-;22153:3;22123:33;:::o;21689:49::-;;;;;;;;;;;;;;;:::o;20214:27::-;;;:::o;16269:221::-;16353:9;;-1:-1:-1;;;;;16353:9:0;16339:10;:23;16330:71;;;;-1:-1:-1;;;16330:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16442:9;;;16434:6;;16417:36;;-1:-1:-1;;;;;16442:9:0;;;;16434:6;;;;16417:36;;;16473:9;;;16464:18;;-1:-1:-1;;;;;;16464:18:0;-1:-1:-1;;;;;16473:9:0;;;16464:18;;;;;;16269:221::o;20325:48::-;;;;;;;;;;;;;;;:::o;30668:406::-;30771:10;30754:29;;;;:15;:29;;;;;;;;30745:56;;;;;-1:-1:-1;;;30745:56:0;;;;;;;;;;;;-1:-1:-1;;;30745:56:0;;;;;;;;;;;;;;;30832:16;:14;:16::i;:::-;30821:7;:27;;30812:63;;;;;-1:-1:-1;;;30812:63:0;;;;;;;;;;;;-1:-1:-1;;;30812:63:0;;;;;;;;;;;;;;;30912:9;:7;:9::i;:::-;30893:15;:28;30888:179;;30955:2;-1:-1:-1;;;;;30939:25:0;;30966:10;30978:7;30939:48;;;;;;;;;;;;;-1:-1:-1;;;;;30939:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31007:48:0;;;;;;;;-1:-1:-1;;;;;31007:48:0;;;-1:-1:-1;31022:10:0;;-1:-1:-1;31007:48:0;;;;;;;;;30888:179;30668:406;;:::o;20382:34::-;;;;;;;;;;;;21245;;;;;;;;;;;;22694:80;22732:42;22694:80;:::o;22043:31::-;;;:::o;22419:50::-;;;;;;;;;:::o;21403:24::-;;;;;;;;;;;;20635:50;;;;;;;;;;;;;;;:::o;20830:36::-;;;;;;;;;;;;21778:25;;;;:::o;33441:303::-;15743:6;;-1:-1:-1;;;;;15743:6:0;15753:10;15743:20;15734:67;;;;;-1:-1:-1;;;15734:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15734:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33529:21:0;::::1;33520:38;;;::::0;;-1:-1:-1;;;33520:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33520:38:0;;;;;;;;;;;;;::::1;;33586:12;::::0;-1:-1:-1;;;;;33586:12:0::1;33578:35:::0;33569:56:::1;;;::::0;;-1:-1:-1;;;33569:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33569:56:0;;;;;;;;;;;;;::::1;;33638:12;:44:::0;;-1:-1:-1;;;;;;33638:44:0::1;-1:-1:-1::0;;;;;33638:44:0;;::::1;::::0;;;::::1;::::0;;;;33700:36:::1;::::0;;33721:12;;;::::1;33700:36:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;33441:303:::0;:::o;25990:3912::-;26093:5;26071:18;:27;;26062:82;;;;-1:-1:-1;;;26062:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26165:6;;-1:-1:-1;;;;;26165:6:0;26175:10;26165:20;;:54;;-1:-1:-1;26189:30:0;;;;;;;26165:54;26156:101;;;;;-1:-1:-1;;;26156:101:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26156:101:0;;;;;;;;;;;;;;;26278:28;;;;;;;26277:29;26268:82;;;;-1:-1:-1;;;26268:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26388:9;:7;:9::i;:::-;26370:15;:27;26361:71;;;;;-1:-1:-1;;;26361:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26459:23;;;;26453:59;;26498:14;:12;:14::i;:::-;26592:16;;;26606:1;26592:16;;;26568:21;26592:16;;;;;26551:4;;26568:21;;26592:16;26606:1;26592:16;;;;;;;;;;-1:-1:-1;26592:16:0;26568:40;;26658:9;26653:1343;26677:13;:20;26673:24;;26653:1343;;;26725:14;:36;26741:13;26756:1;26741:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26741:18:0;26725:36;;;;;;;;;;;;;;;26720:1265;;;22596:42;-1:-1:-1;;;;;26788:40:0;:13;26803:1;26788:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26788:18:0;:40;;:85;;;26854:12;;;;;;;;;-1:-1:-1;;;;;26854:12:0;-1:-1:-1;;;;;26854:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26854:19:0;26832:13;:18;;-1:-1:-1;;;;;26832:41:0;;;;26847:1;;26832:18;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26832:18:0;:41;26788:85;26783:122;;;26897:8;;26783:122;26926:20;26957:13;26972:1;26957:18;;;;;;;;;;;;;;;;;;;26949:55;;;-1:-1:-1;;;26949:55:0;;26997:4;26949:55;;;;;;-1:-1:-1;;;;;26957:18:0;;;;26949:38;;:55;;;;;;;;;;26957:18;26949:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26949:55:0;;-1:-1:-1;27025:22:0;27050:54;27097:5;27050:41;26949:55;27071:18;27050:19;:41::i;:54::-;27025:79;-1:-1:-1;27130:22:0;27125:185;;27183:20;;27178:79;;27252:5;27231:26;;27178:79;27282:8;;;;27125:185;27346:13;27361:1;27346:18;;;;;;;;;;;;;;;;;;;;27384:12;;27338:80;;;-1:-1:-1;;;27338:80:0;;-1:-1:-1;;;;;27384:12:0;;;27338:80;;;;;;;;;;;;27346:18;;;;;27338:36;;:80;;;;;27346:18;;27338:80;;;;;;;;;27346:18;27338:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27338:80:0;27330:102;;;;;-1:-1:-1;;;27330:102:0;;;;;;;;;;;;-1:-1:-1;;;27330:102:0;;;;;;;;;;;;;;;27463:13;27478:1;27463:18;;;;;;;;;;;;;;;;;27453:7;;-1:-1:-1;;;;;27463:18:0;;;;27453:4;;:7;;;;-1:-1:-1;;;;;27453:28:0;;;:7;;;;;;;;;;:28;;;;27510:12;;:19;;;-1:-1:-1;;;27510:19:0;;;;:12;;;;;:17;;:19;;;;;27453:7;;27510:19;;;;;:12;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27510:19:0;27500:7;;:4;;27505:1;;27500:7;;;;;;;;;;;:29;-1:-1:-1;;;;;27500:29:0;;;-1:-1:-1;;;;;27500:29:0;;;;;27584:12;;;;;;;;;-1:-1:-1;;;;;27584:12:0;-1:-1:-1;;;;;27584:34:0;;27641:17;27681:1;27736:4;27771;27799:15;27584:249;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27584:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27584:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27584:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27867:13;27882:1;27867:18;;;;;;;;;;;;;;;;;;;27859:55;;;-1:-1:-1;;;27859:55:0;;27907:4;27859:55;;;;;;-1:-1:-1;;;;;27867:18:0;;;;27859:38;;:55;;;;;;;;;;27867:18;27859:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27859:55:0;:60;27854:115;;27964:5;27943:26;;27854:115;26720:1265;;;26699:3;;26653:1343;;;-1:-1:-1;28035:55:0;;;-1:-1:-1;;;28035:55:0;;28083:4;28035:55;;;;;;28008:24;;22596:42;;28035:38;;:55;;;;;;;;;;;;;;;22596:42;28035:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28035:55:0;;-1:-1:-1;28101:28:0;28132:58;28183:5;28132:45;28035:55;28157:18;28132:23;:45::i;:58::-;28101:89;;28213:12;;;;;;;;;-1:-1:-1;;;;;28213:12:0;-1:-1:-1;;;;;28213:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28213:19:0;28203:7;;:4;;28208:1;;28203:7;;;;;;;;;:29;-1:-1:-1;;;;;28203:29:0;;;-1:-1:-1;;;;;28203:29:0;;;;;22596:42;28243:4;28248:1;28243:7;;;;;;;;-1:-1:-1;;;;;28243:28:0;;;:7;;;;;;;;;;:28;;;;28313:12;;:19;;;-1:-1:-1;;;28313:19:0;;;;28286:16;;28313:12;;;;;:17;;:19;;;;;;;;;;:12;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28313:19:0;28305:56;;;-1:-1:-1;;;28305:56:0;;28354:4;28305:56;;;;;;-1:-1:-1;;;;;28305:39:0;;;;;;:56;;;;;28313:19;;28305:56;;;;;;;;:39;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28305:56:0;;-1:-1:-1;28374:26:0;28403:50;28446:5;28403:37;28305:56;28420:18;28403:15;:37::i;:50::-;28374:79;-1:-1:-1;28471:25:0;;28466:108;;28519:12;;;;;;;;;-1:-1:-1;;;;;28519:12:0;-1:-1:-1;;;;;28519:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28519:19:0;28512:62;;;-1:-1:-1;;;28512:62:0;;;;;;;;;;-1:-1:-1;;;;;28512:37:0;;;;;;:62;;;;;-1:-1:-1;;28512:62:0;;;;;;;;-1:-1:-1;28512:37:0;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28466:108;28600:12;;;;;;;;;-1:-1:-1;;;;;28600:12:0;-1:-1:-1;;;;;28600:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28600:19:0;28592:56;;;-1:-1:-1;;;28592:56:0;;28641:4;28592:56;;;;;;-1:-1:-1;;;;;28592:39:0;;;;;;:56;;;;;28600:19;;28592:56;;;;;;;;:39;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28592:56:0;:61;28587:108;;28690:5;28669:26;;28587:108;28734:12;;:199;;-1:-1:-1;;;28734:199:0;;:12;:199;;;;;;28887:4;28734:199;;;;;;28907:15;28734:199;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28734:12:0;;;;:34;;28776:21;;28734:12;28860:4;;28887;28907:15;28734:199;;;;;;;;;;;;;;;;:12;:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28734:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28734:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28946:21;28970:113;29031:50;29056:23;29031:19;:23;;:50;;;;:::i;:::-;28970:55;;;-1:-1:-1;;;28970:55:0;;29018:4;28970:55;;;;;;22596:42;;28970:38;;:55;;;;;;;;;;;;;;22596:42;28970:55;;;;;;;;;;:113;29150:12;;29104:79;;;-1:-1:-1;;;29104:79:0;;-1:-1:-1;;;;;29150:12:0;;;29104:79;;;;;;;;;;;;;-1:-1:-1;22596:42:0;;29104:36;;:79;;;;;;;;;;;;;;;-1:-1:-1;22596:42:0;29104:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29104:79:0;29096:101;;;;;-1:-1:-1;;;29096:101:0;;;;;;;;;;;;-1:-1:-1;;;29096:101:0;;;;;;;;;;;;;;;22596:42;29210:4;29215:1;29210:7;;;;;;;;;;;;;:28;-1:-1:-1;;;;;29210:28:0;;;-1:-1:-1;;;;;29210:28:0;;;;;29259:2;29249:4;29254:1;29249:7;;;;;;;;;;;;;:12;-1:-1:-1;;;;;29249:12:0;;;-1:-1:-1;;;;;29249:12:0;;;;;29300;;;;;;;;;-1:-1:-1;;;;;29300:12:0;-1:-1:-1;;;;;29300:37:0;;29352:16;29383:1;29430:4;29457;29477:15;29300:203;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29300:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29300:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29300:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29516:12;29539:2;-1:-1:-1;;;;;29531:22:0;;29563:4;29531:39;;;;;;;;;;;;;-1:-1:-1;;;;;29531:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29531:39:0;;-1:-1:-1;29583:50:0;-1:-1:-1;;;;;29591:2:0;29583:25;20163:42;29531:39;29583:25;:50::i;:::-;29646:18;:28;;;;;;29687:74;;;;29726:28;:35;;-1:-1:-1;;29726:35:0;;;;;29687:74;29864:28;;29779:115;;;29806:10;29779:115;;29818:15;29779:115;;;;;;;;;;;;;;;;29864:28;;;;;;29779:115;;;;;;;;;;;;;;;;;25990:3912;;;;;;;;;:::o;20929:54::-;;;;;;;;;;;;;;;:::o;20771:50::-;;;;;;;;;;;;;;;:::o;21595:31::-;;;;;;;;;;;;23884:956;-1:-1:-1;;;;;23999:24:0;;23966:10;23999:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;24027:26:0;;;;;;:16;:26;;;;;;;;23999:54;23990:81;;;;;-1:-1:-1;;;23990:81:0;;;;;;;;;;;;-1:-1:-1;;;23990:81:0;;;;;;;;;;;;;;;24082:71;-1:-1:-1;;;;;24082:33:0;;24117:10;24137:4;24144:7;24082:33;:71::i;:::-;-1:-1:-1;;;;;24171:24:0;;;;;;:14;:24;;;;;;;;24166:212;;;24242:10;24222:32;;;;:18;:32;;;;;;;;24213:59;;;;;-1:-1:-1;;;24213:59:0;;;;;;;;;;;;-1:-1:-1;;;24213:59:0;;;;;;;;;;;;;;;24166:212;;;24336:10;24314:34;;;;:20;:34;;;;;;;;24305:61;;;;;-1:-1:-1;;;24305:61:0;;;;;;;;;;;;-1:-1:-1;;;24305:61:0;;;;;;;;;;;;;;;24390:10;24403:24;24411:6;24419:7;24403;:24::i;:::-;24390:37;-1:-1:-1;24518:20:0;24390:37;24529:7;24518:9;:20::i;:::-;24510:28;;24579:9;:7;:9::i;:::-;24560:15;:28;;24551:70;;;;;-1:-1:-1;;;24551:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24632:46;;;-1:-1:-1;;;24632:46:0;;24659:10;24632:46;;;;;;;;;;;;-1:-1:-1;;;;;24648:2:0;24632:25;;;;:46;;;;;-1:-1:-1;;24632:46:0;;;;;;;-1:-1:-1;24632:25:0;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24707:13:0;;:26;;-1:-1:-1;24707:13:0;-1:-1:-1;24726:5:0;24707:17;:26::i;:::-;24691:13;:42;;;24749:32;;;;;;;24799:33;;;;;;;;;;;;;;-1:-1:-1;;;;;24799:33:0;;;;;;;;;;;23884:956;;;;;;:::o;21988:46::-;22030:4;21988:46;:::o;20250:30::-;;;;;;;;;;;;22243:47;22283:7;22243:47;:::o;21342:52::-;;;;;;;;;;;;;;;:::o;22314:43::-;;;;;;:::o;21186:50::-;;;;;;;;;;;;;;;:::o;21490:42::-;;;;;;;;;;;;;;;:::o;22478:37::-;;;;:::o;34046:3258::-;34191:4;15743:6;;-1:-1:-1;;;;;15743:6:0;15753:10;15743:20;15734:67;;;;;-1:-1:-1;;;15734:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15734:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34218:22:0;::::1;34209:33;;;::::0;::::1;;34253:11;::::0;34280:9:::1;:38;;;;;;;;;34275:2935;;;34346:43;34360:17;34379:8;34346:12;:43::i;:::-;34341:120;;34411:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34411:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34411:34:0::1;-1:-1:-1::0;;;;;34411:34:0;::::1;;::::0;;34341:120:::1;-1:-1:-1::0;;;;;;34487:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;34486:31;-1:-1:-1::0;;34532:39:0;;::::1;::::0;::::1;::::0;;;34275:2935:::1;;;34621:23;34608:9;:36;;;;;;;;;34603:2607;;;34672:41;34686:15;34703:8;34672:12;:41::i;:::-;34667:116;;34735:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34735:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34735:32:0::1;-1:-1:-1::0;;;;;34735:32:0;::::1;;::::0;;34667:116:::1;-1:-1:-1::0;;;;;;34809:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;34808:29;-1:-1:-1::0;;34852:37:0;;::::1;::::0;::::1;::::0;;;34603:2607:::1;;;34927:21;34914:9;:34;;;;;;;;;34909:2301;;;34976:39;34990:13;35005:8;34976:12;:39::i;:::-;34971:112;;35037:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;35037:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;35037:30:0::1;-1:-1:-1::0;;;;;35037:30:0;::::1;;::::0;;34971:112:::1;-1:-1:-1::0;;;;;;35109:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;35108:27;-1:-1:-1::0;;35150:35:0;;::::1;::::0;::::1;::::0;;;34909:2301:::1;;;35223:23;35210:9;:36;;;;;;;;;35205:2005;;;35274:41;35288:15;35305:8;35274:12;:41::i;:::-;35269:116;;35337:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;35337:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;35337:32:0::1;-1:-1:-1::0;;;;;35337:32:0;::::1;;::::0;;35269:116:::1;-1:-1:-1::0;;;;;;35411:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;35410:29;-1:-1:-1::0;;35454:37:0;;::::1;::::0;::::1;::::0;;;35205:2005:::1;;;35529:27;35516:9;:40;;;;;;;;;35511:1699;;;35584:45;35598:19;35619:8;35584:12;:45::i;:::-;35579:124;;35651:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;35651:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;35651:36:0::1;-1:-1:-1::0;;;;;35651:36:0;::::1;;::::0;;35579:124:::1;-1:-1:-1::0;;;;;;35729:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;35728:33;-1:-1:-1::0;;35776:41:0;;::::1;::::0;::::1;::::0;;;35511:1699:::1;;;35855:23;35842:9;:36;;;;;;;;;35837:1373;;;35906:41;35920:15;35937:8;35906:12;:41::i;:::-;35901:116;;35969:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;35969:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;35969:32:0::1;-1:-1:-1::0;;;;;35969:32:0;::::1;;::::0;;35901:116:::1;-1:-1:-1::0;;;;;;36043:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;36042:29;-1:-1:-1::0;;36086:37:0;;::::1;::::0;::::1;::::0;;;36138:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;36138:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;35837:1373:::1;;;36216:25;36203:9;:38;;;;;;;;;36198:1012;;;36269:43;36283:17;36302:8;36269:12;:43::i;:::-;36264:120;;36334:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;36334:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;36334:34:0::1;-1:-1:-1::0;;;;;36334:34:0;::::1;;::::0;;36264:120:::1;-1:-1:-1::0;;;;;;36410:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;36409:31;-1:-1:-1::0;;36455:39:0;;::::1;::::0;::::1;::::0;;;36198:1012:::1;;;36532:15;36519:9;:28;;;;;;;;;36514:696;;;36575:33;36589:7;36598:8;36575:12;:33::i;:::-;36570:100;;36630:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;36630:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;36630:24:0::1;-1:-1:-1::0;;;;;36630:24:0;::::1;;::::0;;36570:100:::1;-1:-1:-1::0;;;;;;36696:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;36695:21;-1:-1:-1::0;;36731:29:0;;::::1;::::0;::::1;::::0;;;36514:696:::1;;;36798:22;36785:9;:35;;;;;;;;;36780:430;;;36850:40;36864:14;36880:8;36850:12;:40::i;:::-;36845:114;;36912:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;36912:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;36912:31:0::1;-1:-1:-1::0;;;;;36912:31:0;::::1;;::::0;;36845:114:::1;-1:-1:-1::0;;;;;;36985:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;36984:28;-1:-1:-1::0;;37027:36:0;;::::1;::::0;::::1;::::0;;;36780:430:::1;;;37101:12;37088:9;:25;;;;;;;;;37083:127;;;-1:-1:-1::0;37136:3:0::1;:14:::0;;-1:-1:-1;;;;;;37136:14:0::1;-1:-1:-1::0;;;;;37136:14:0;::::1;;::::0;;-1:-1:-1;37083:127:0::1;;;37205:5;37198:12;;;;;37083:127;37245:9;37228:46;;;;;;;;;::::0;;-1:-1:-1;;;;;37228:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;37292:4;37285:11;;;15812:1;34046:3258:::0;;;;;:::o;21843:21::-;;;;:::o;20124:81::-;20163:42;20124:81;:::o;20694:32::-;;;;;;;;;;;;11596:136;11654:7;11681:43;11685:1;11688;11681:43;;;;;;;;;;;;;;;;;:3;:43::i;11940:250::-;11998:7;12022:6;12018:47;;-1:-1:-1;12052:1:0;12045:8;;12018:47;12089:5;;;12093:1;12089;:5;:1;12113:5;;;;;:10;12105:56;;;;-1:-1:-1;;;12105:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12458:132;12516:7;12543:39;12547:1;12550;12543:39;;;;;;;;;;;;;;;;;:3;:39::i;17247:177::-;17357:58;;;-1:-1:-1;;;;;17357:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17357:58:0;-1:-1:-1;;;17357:58:0;;;17330:86;;17350:5;;17330:19;:86::i;:::-;17247:177;;;:::o;11216:181::-;11274:7;11306:5;;;11330:6;;;;11322:46;;;;;-1:-1:-1;;;11322:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;17432:205;17560:68;;;-1:-1:-1;;;;;17560:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17560:68:0;-1:-1:-1;;;17560:68:0;;;17533:96;;17553:5;;17533:19;:96::i;:::-;17432:205;;;;:::o;37473:277::-;37562:4;;37580:140;37601:12;;37597:16;;37580:140;;;37654:6;-1:-1:-1;;;;;37640:20:0;:5;37647:1;37640:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37640:10:0;:20;37636:73;;;37689:4;37682:11;;;;;37636:73;37615:3;;37580:140;;;-1:-1:-1;37737:5:0;;37473:277;-1:-1:-1;;;37473:277:0:o;11740:192::-;11826:7;11862:12;11854:6;;;;11846:29;;;;-1:-1:-1;;;11846:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11898:5:0;;;11740:192::o;12598:189::-;12684:7;12719:12;12712:5;12704:28;;;;-1:-1:-1;;;12704:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12743:9;12759:1;12755;:5;;;;;;;12598:189;-1:-1:-1;;;;;12598:189:0:o;17645:418::-;17726:23;17752:69;17780:4;17752:69;;;;;;;;;;;;;;;;;17760:5;-1:-1:-1;;;;;17752:27:0;;;:69;;;;;:::i;:::-;17836:17;;17726:95;;-1:-1:-1;17836:21:0;17832:224;;17978:10;17967:30;;;;;;;;;;;;;;;-1:-1:-1;17967:30:0;17959:85;;;;-1:-1:-1;;;17959:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13247:232;13386:12;13418:53;13441:6;13449:4;13455:1;13458:12;13418:22;:53::i;:::-;13411:60;13247:232;-1:-1:-1;;;;13247:232:0:o;13487:863::-;13663:12;13696:18;13707:6;13696:10;:18::i;:::-;13688:60;;;;;-1:-1:-1;;;13688:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13822:12;13836:23;13863:6;-1:-1:-1;;;;;13863:11:0;13883:8;13894:4;13863:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13863:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13821:78;;;;13914:7;13910:433;;;13945:10;-1:-1:-1;13938:17:0;;-1:-1:-1;13938:17:0;13910:433;13992:17;;:21;13988:344;;14160:10;14154:17;14221:15;14208:10;14204:2;14200:19;14193:44;14108:148;14296:20;;-1:-1:-1;;;14296:20:0;;;;;;;;;;;;;;;;;14303:12;;14296:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12817:422;13184:20;13223:8;;;12817:422::o

Swarm Source

ipfs://955bcdb520994bf9a3d556008f4c4a30d892005e682a0492a2db76797b5b9d5f
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.