Contract 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe8b9ea58dfb35237b1d55d437b7a7dd0ef44938c08fe1f49d788d623c72c2176Approve129791302021-11-26 20:42:312 days 6 hrs ago0x36a928b6241a055f493cbafa564e4bc228171178 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222685
0xef1f2c5795825d2182336195844dd1a16c59973f88cbe70d3d24d268603af1cdApprove129074452021-11-24 3:51:314 days 22 hrs ago0xbe15194b36e2be35e4e1c8532414e963644d2a82 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000267294
0x39a2c1d161ee6ae3fd13d82de47da16aaf3d787efcf8503020d555aed79ec99dApprove128564982021-11-22 7:42:326 days 19 hrs ago0xdd2285e99fed774635405951255b65d4f9b0f804 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x1972a4fe5317fc0f9d03c446c5109e8e7c12300e92a7fac97ff635e02cd8da8aApprove126813082021-11-15 23:09:1413 days 3 hrs ago0xdeda2f75187f96965eb24fd53123f42a5ef342a8 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x72e839b148e04def48b80425de02b368dab40dfad401580d73d6b0fca90cc8bcApprove126803352021-11-15 22:20:2213 days 4 hrs ago0x54e6b8b763bef3beaf3bccc7e982ca4f5322a5fb IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x261d64702c58076e7984e0a8fe5280d913dbc82195177488b48fe3b320b1d4d5Transfer126756022021-11-15 18:19:4713 days 8 hrs ago0x784daada6eaddc8cf5b00a237496622d1302b772 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.00038386
0x8358d1097f0e1d31a579d6c480dcc31a00c8cffa552dde114dd3a76b53c31342Transfer126754752021-11-15 18:13:2513 days 8 hrs ago0xf7fad063679b4064977ea024802c97ec126a9bdc IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.0003298
0xbf5d2b1177032683a7dce33a8afe25e5957e76529ce1b5b089e9346a09efb2bfApprove126591902021-11-15 3:36:4113 days 23 hrs ago0x87f037f676708242345e27cbef522dec07f4fdec IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x373feed3a11908c071ecc8e0a273cff462d5f9ea2c211bf4962a2869fc9a71dbTeam Remove Rema...125626872021-11-11 16:30:1717 days 10 hrs ago0x351f1a4a417184e487b0cf10f9989642f0130080 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000178335
0x53071a51b6ce905bd990ba85852235948da42c0eecb1fab0ee7b8bb7142f6cb4Team Set Taxes125626482021-11-11 16:28:0417 days 10 hrs ago0x351f1a4a417184e487b0cf10f9989642f0130080 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.00014994
0xd4737209d25ec47def2bc6a89445520b02636e6311fafc2d2fb224642c32f6f7Team Update Limi...125626362021-11-11 16:27:1617 days 10 hrs ago0x351f1a4a417184e487b0cf10f9989642f0130080 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000160645
0x223b55ab31c3518ada5c67f937f0f0569923e9b9006ed1eb9ad9fe60549b6a0dAAA Withdraw125549952021-11-11 9:49:0317 days 16 hrs ago0x2428baa72694581322fc8796bd39a7707e13986f IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.00088463
0xc2fcc19ef1ec8e121ca62cc7c64b9b49eb328bccbf3e6761c00eb0d47bea544bApprove125480502021-11-11 3:51:4117 days 22 hrs ago0x4118c2ab1b2806ea9f164af8c99a945ea42dfa8f IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x699df02f116caffe7cbc1da6435fcacf879baabafb27bf8241319136c763cbfdApprove124886662021-11-09 1:00:0820 days 1 hr ago0x8052fbcfef1a7b8754f1db6e17164e0c11988bdd IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x6cf0fa6031743b07a88b11ba650598c0ad537b522a163551b94b2234e31b04b8Approve124884882021-11-09 0:51:1420 days 1 hr ago0x4da3bdb96e678e90c635758b570dc09f4386d42b IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x4609db93bdfdfd1ae821005d3d890bd5a9cc731caf1e76bbbd992c0ad33341a7Approve124835782021-11-08 20:40:5720 days 6 hrs ago0x730a73195e30bce016e71f7d2a4f9790a47d4437 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000267294
0x69b113a33c7aaf98f0977a9c4355ca5f00b04ab03c879bc05c108ace7fcb42b8Approve124804692021-11-08 18:02:1920 days 8 hrs ago0x2ce0d487df6fa7b0487a61140baf3b622ce12d81 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x6807e2e07f3862d89895c563b290eb12b0d7e691e9c6082ba1ed57b6597ef994Approve124771142021-11-08 15:13:1620 days 11 hrs ago0xaef147b4299f8ea6f7019df81b7fd21cd3cb7474 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000311843
0x79059d3295d6dd80aed8a38c068ed1472a276ec5f65880a6f90a68d95eb1ab3bApprove124653082021-11-08 5:18:1320 days 21 hrs ago0xfade04b3228c862b1e9475132c4ae12596a7c5c9 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000124825
0xf54a01c90b70f81e38f921ca69406f1b5a5594e8e3d54fb76c5488bbd18c40daApprove124653042021-11-08 5:18:0120 days 21 hrs ago0xfade04b3228c862b1e9475132c4ae12596a7c5c9 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000124825
0xfe515c191caa576096cd35fb698d102e027e5ffdfde23f4049e6ac4680f63710Approve124651732021-11-08 5:11:2820 days 21 hrs ago0xfade04b3228c862b1e9475132c4ae12596a7c5c9 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000072915
0x2fffbe8feb5a52b30561cfff277ef3c68d6510767b7df50a5c0c5569b4ab806eApprove124598882021-11-08 0:46:0921 days 1 hr ago0x293399c4641986ce04582ec7e84296cc630ff5b2 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0xab2f7236a500f9eefe3c0bc466c43461f7968e8ba46c0d2a40081602d8e0d0efApprove124348372021-11-07 3:47:2521 days 22 hrs ago0x79ef7269430416c13ef4912b9477440c891bba1c IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000222745
0x37350f9fedd36a04dba82e8dce0e49db99d4d4fc63d2ba147a3f9390fbdd7bceAAA Withdraw124347642021-11-07 3:43:4621 days 23 hrs ago0x9e55bba1f7449091ec3b0a3bddc48dd419892d30 IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.00017656
0x52e42c58f48b4fc503e1c623bfde05fb51287fc0820a14358c17d45209c33eaeApprove123964502021-11-05 19:31:2023 days 7 hrs ago0xe1e3e2cc2d26978ebe3ff2fe01d63b26204ffc4a IN  0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0 BNB0.000072915
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x373feed3a11908c071ecc8e0a273cff462d5f9ea2c211bf4962a2869fc9a71db125626872021-11-11 16:30:1717 days 10 hrs ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0x444ea52b99be919ab39740f17cecafc58902c61c2.885103650646053207 BNB
0x223b55ab31c3518ada5c67f937f0f0569923e9b9006ed1eb9ad9fe60549b6a0d125549952021-11-11 9:49:0317 days 16 hrs ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.094593260812745856 BNB
0x92fe7b2ba0da239ec8284764e5b91db033904abd26cd5d57dd5e1111c3cbb194124919082021-11-09 3:42:1719 days 23 hrs ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.000826424631368307 BNB
0x92fe7b2ba0da239ec8284764e5b91db033904abd26cd5d57dd5e1111c3cbb194124919082021-11-09 3:42:1719 days 23 hrs ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.075802755596511702 BNB
0x92fe7b2ba0da239ec8284764e5b91db033904abd26cd5d57dd5e1111c3cbb194124919082021-11-09 3:42:1719 days 23 hrs ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.357355847812126599 BNB
0xcf0129499bfe2dbf4ae0da06f88d97d26952b10bdd6a78078d0ff2c338827b1f124886912021-11-09 1:01:2320 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.00095541661526167 BNB
0xcf0129499bfe2dbf4ae0da06f88d97d26952b10bdd6a78078d0ff2c338827b1f124886912021-11-09 1:01:2320 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.082770886243316739 BNB
0xcf0129499bfe2dbf4ae0da06f88d97d26952b10bdd6a78078d0ff2c338827b1f124886912021-11-09 1:01:2320 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.390205606575636056 BNB
0x420a60f26a4cab114b4c45c4e1afa82205d938eb8b2652ec6425b34aa5c02e40124886782021-11-09 1:00:4420 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.001040372250838043 BNB
0x420a60f26a4cab114b4c45c4e1afa82205d938eb8b2652ec6425b34aa5c02e40124886782021-11-09 1:00:4420 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.087088051911668586 BNB
0x420a60f26a4cab114b4c45c4e1afa82205d938eb8b2652ec6425b34aa5c02e40124886782021-11-09 1:00:4420 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.410557959012151907 BNB
0xe6610989b565b0941079c22f13aa778e2c843d2aebc4cd26e0fc811bcecdc892124886032021-11-09 0:56:5920 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.0011333386589434 BNB
0xe6610989b565b0941079c22f13aa778e2c843d2aebc4cd26e0fc811bcecdc892124886032021-11-09 0:56:5920 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.091659531779356433 BNB
0xe6610989b565b0941079c22f13aa778e2c843d2aebc4cd26e0fc811bcecdc892124886032021-11-09 0:56:5920 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.43210922124553747 BNB
0x27998b8b817c93c568533db9979f5819420b8704aeee56a1d1e64b843a3d2223124885422021-11-09 0:53:5620 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.001236971731956732 BNB
0x27998b8b817c93c568533db9979f5819420b8704aeee56a1d1e64b843a3d2223124885422021-11-09 0:53:5620 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.09659238131036115 BNB
0x27998b8b817c93c568533db9979f5819420b8704aeee56a1d1e64b843a3d2223124885422021-11-09 0:53:5620 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.455364083320273995 BNB
0x6f6557e513fa8bdc16c9dbc26eca4e4f251b1c12c55131668a187e9525598b67124884972021-11-09 0:51:4120 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.001358613765037266 BNB
0x6f6557e513fa8bdc16c9dbc26eca4e4f251b1c12c55131668a187e9525598b67124884972021-11-09 0:51:4120 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.102200330739567813 BNB
0x6f6557e513fa8bdc16c9dbc26eca4e4f251b1c12c55131668a187e9525598b67124884972021-11-09 0:51:4120 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.481801559200819694 BNB
0x98ba0aa273aede73e498ed1d82d45d34709ffc0c89db74d1b14b7cb6424460fb124884612021-11-09 0:49:5320 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.001505419244069356 BNB
0x98ba0aa273aede73e498ed1d82d45d34709ffc0c89db74d1b14b7cb6424460fb124884612021-11-09 0:49:5320 days 1 hr ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.108742268663126967 BNB
0x98ba0aa273aede73e498ed1d82d45d34709ffc0c89db74d1b14b7cb6424460fb124884612021-11-09 0:49:5320 days 1 hr ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.512642123697598563 BNB
0x77e9553c59e8dd66e731bb6d268eb2fae742916cbd27cc8c2e32a32173c8280b124771202021-11-08 15:13:3420 days 11 hrs ago PancakeSwap: Router v2 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef0.001621214120695608 BNB
0x77e9553c59e8dd66e731bb6d268eb2fae742916cbd27cc8c2e32a32173c8280b124771202021-11-08 15:13:3420 days 11 hrs ago 0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef PancakeSwap: Router v20.113649888731468574 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kevlar

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-14
*/

/*
KEVLAR FINANCE (KVLR)

Twitter- @Kevlarfinance

Instagram- Kevlarfinance

Tiktok- @Kevlarfinance

Email- [email protected]

In Order To Withdraw Rewards Visit The Token on https://bscscan.com/token/0xa7b6874fc2a3602bc351fa3ece9ad10631f05fef#writeContract
go to contracts and visit the write section
connect your wallet that's holding Kevlar Finance Token to the website
find AAAWITHDRAW enter a contract address that you want to redeem your rewards too and click write
If you have any rewards you will receive them.

Example of Contract Address Rewards
0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c //Binance Pegged BTC
0x2170Ed0880ac9A755fd29B2688956BD959F933F8 //Binance Pegged ETH Is the default reward
0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56 //Binance Pegged BUSD
0x55d398326f99059fF775485246999027B3197955 //Binance Pegged USDT

ALTERNATIVELY

You can transfer 0.001-0.00001 of Kevlar to a random wallet to redeem your rewards as well. This will on default redeem your staking rewards to ETH

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IBEP20 {

  function totalSupply() external view returns (uint256);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);

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

interface IPancakeERC20 {

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

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

interface IPancakeRouter01 {

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

interface IPancakeRouter02 is IPancakeRouter01 {

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


abstract contract Ownable {
    address private _owner;

    //Strickly for testing purposes; team functions for function calls when contract fees are set permanently and no further edits of the contract are needed.
    //Function renounceOwnership() will be used for permanent renouncing of contract in the future.
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    //Strickly for testing purposes; team functions for function calls when contract fees are set permanently and no further edits of the contract are needed.
    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Strickly for testing purposes; team functions for function calls when contract fees are set permanently and no further edits of the contract are needed.
    //Locks the contract for owner for the amount of time provided
    function lock(uint256 timeSeconds) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + timeSeconds;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Strickly for testing purposes; team functions for function calls when contract fees are set permanently and no further edits of the contract are needed.
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked for 14 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    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 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

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

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

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

/*
*
*Kevlar Finance Contract
*
*/

contract Kevlar is IBEP20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

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

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _whiteList;

    //Everyone is to be subjected to the same restrictions, zero admins wallets will be part of the _excludedFromSellLock. Only exception will be Contract, and future exchanges
    EnumerableSet.AddressSet private _excludedFromSellLock;
    EnumerableSet.AddressSet private _excludedFromStaking;
    
    //TOKEN INFO
    string private constant _name = 'Kevlar Finance';
    string private constant _symbol = 'KVLR';
    uint8 private constant _decimals = 9;
    uint256 public constant InitialSupply = 888888888888888 * 1**1 * 10**_decimals;//equals 100.000.000.000.000 token 100 Trillion Tokens

    //Max Balance and Max Sell will be edited as Token Milestones are reached
    //Divider for the MaxBalance based on circulating Supply (2%) Starting Max Wallets
    uint8 public constant BalanceLimitDivider = 50;
    //Divider for the Whitelist MaxBalance based on initial Supply(0.2%)
    uint16 public constant WhiteListBalanceLimitDivider = 500;
    //Divider for sellLimit based on circulating Supply (0.2%)
    uint16 public constant SellLimitDivider = 500;
    //Sellers get locked for MaxSellLockTime so they can't dump repeatedly
    uint16 public constant MaxSellLockTime = 30 minutes;
    //The time Liquidity gets locked at start and prolonged once it gets released
    uint256 private constant DefaultLiquidityLockTime = 8 hours;

    //WALLET INFORMATION LOG
    //Address' for database
    //The Team Wallet which will be accessable to only the Founding Members
    address public constant TeamWallet = 0x444EA52b99Be919AB39740f17ceCafC58902C61C;
    //TestNet
    //address private constant PancakeRouter=0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //MainNet
    address private constant PancakeRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    //Dead Wallet for BuyBack and Burn
    address private constant DeadWallet = 0x000000000000000000000000000000000000dEaD;
    //Default Reward
    address private constant DefaultRewardAddress = 0x2170Ed0880ac9A755fd29B2688956BD959F933F8; //Binanced Pegged ETH

    //TAXATION INFO
    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint256 private _circulatingSupply = InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;

    //Limits max tax, only gets applied for tax changes, doesn't affect inital Tax - Tax can only ever go as high as 20%
    uint8 public constant MaxTax = 20;

    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint8 private _buyTax;
    uint8 private _sellTax;
    uint8 private _transferTax;

    uint8 private _burnTax;
    uint8 private _liquidityTax;
    uint8 private _stakingTax;

    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;

    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }

    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr == owner() || addr == TeamWallet;
    }

    /*
    *
    *Constructor
    *
    */

    constructor () {
        uint256 deployerBalance = _circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);

        // Pancake Router
        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        //Creates a Pancake Pair
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());

        //Sets Buy/Sell limits
        balanceLimit = InitialSupply / BalanceLimitDivider;
        sellLimit = InitialSupply / SellLimitDivider;

       //Sets sellLockTime to be max by default
        sellLockTime = MaxSellLockTime;

        //any change in tax rate needs to be below maxTax(20%)
        _buyTax = 10;//Buy Tax is lower, as otherwise slippage would be too high to sell
        _sellTax = 20;
        _transferTax = 30;

        //a small percentage gets added to the Contract token as 10% of token are already injected to 
        //be converted to LP and MarketingBNB
        _burnTax = 0;
        _liquidityTax = 90;
        _stakingTax = 10;

        //Team wallet and deployer are excluded from Taxes
        _excluded.add(TeamWallet);
        _excluded.add(msg.sender);
        _excluded.add(0x000000000000000000000000000000000000dEaD);

        //excludes Pancake Router, pair, contract and burn address from staking
        _excludedFromStaking.add(address(_pancakeRouter));
        _excludedFromStaking.add(_pancakePairAddress);
        _excludedFromStaking.add(address(this));
        _excludedFromStaking.add(0x000000000000000000000000000000000000dEaD);
    }

    /*
    *
    *Transfer Functionality
    *
    */

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        
        //Manually Excluded adresses are transfering tax and lock free
        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));
        
        //Transactions from and to the contract are always tax and lock free
        bool isContractTransfer = (sender == address(this) || recipient == address(this));
        
        //transfers between PancakeRouter and PancakePair are tax and lock free
        address pancakeRouter = address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) || (recipient == _pancakePairAddress && sender == pancakeRouter));

        //differentiate between buy/sell/transfer to apply different taxes/restrictions
        bool isBuy = sender == _pancakePairAddress || sender == pancakeRouter;
        bool isSell = recipient == _pancakePairAddress || recipient == pancakeRouter;

        //Pick transfer
        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{ 
            //once trading is enabled, it can't be turned off again
            require(tradingEnabled,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);
        }
    }
    //if whitelist is active, all taxed transfers run through this
    function _whiteListTransfer(address sender, address recipient,uint256 amount,bool isBuy,bool isSell) private{
        //only apply whitelist restrictions during buys and transfers
        if(!isSell){
            //the recipient needs to be on Whitelist. Works for both buys and transfers.
            //transfers to other whitelisted addresses are allowed.
            require(_whiteList.contains(recipient),"recipient not on whitelist");
            //Limit is 1/500 of initialSupply during whitelist, to allow for a large whitelist without causing a massive
            //price impact of the whitelist
            require((_balances[recipient] + amount <= InitialSupply / WhiteListBalanceLimitDivider),"amount exceeds whitelist max");    
        }
        _taxedTransfer(sender,recipient,amount,isBuy,isSell);
    } 
    //applies taxes, checks for limits, locks generates autoLP and stakingBNB, and autostakes
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        uint8 tax;
        if(isSell){
            if(!_excludedFromSellLock.contains(sender)){
                //If seller sold less than sellLockTime(1h) ago, sell is declined, can be disabled by Team         
                require(_sellLock[sender] <= block.timestamp || sellLockDisabled,"Seller in sellLock");
                //Sets the time sellers get locked(1 hours by default)
                _sellLock[sender] = block.timestamp + sellLockTime;
            }

            //Sells can't exceed the sell limit(50.000 Tokens at start, can be updated to circulating supply)
            require(amount <= sellLimit,"Dump protection");
            tax = _sellTax;

        } else if(isBuy){
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance + amount <= balanceLimit,"Whale protection");
            tax = _buyTax;

        } else {//Transfer
            //withdraws BNB when sending less or equal to 1 Token
            //that way you can withdraw without connecting to any dApp.
            //might needs higher gas limit
            if(amount <= 10**(_decimals)) Claim(sender, DefaultRewardAddress);
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance + amount <= balanceLimit,"whale protection");
            //Transfers are disabled in sell lock, this doesn't stop someone from transfering before
            //selling, but there is no satisfying solution for that, and you would need to pax additional tax
            if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender] <= block.timestamp || sellLockDisabled,"Sender in Lock");
            tax = _transferTax;
        }

        //Swapping AutoLP and MarketingBNB is only possible if sender is not pancake pair, 
        //if its not manually disabled, if its not already swapping and if its a Sell to avoid
        //people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens
        if((sender != _pancakePairAddress) && (!manualConversion) && (!_isSwappingContractModifier) && isSell)
            _swapContractToken();
        //Calculates the exact token amount for each tax
        uint256 tokensToBeBurnt = _calculateFee(amount, tax, _burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint256 contractToken = _calculateFee(amount, tax, _stakingTax + _liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint256 taxedAmount = amount - (tokensToBeBurnt + contractToken);

        //Removes token and handles staking
        _removeToken(sender,amount);

        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;

        //Burns tokens
        _circulatingSupply -= tokensToBeBurnt;

        //Adds token and handles staking
        _addToken(recipient, taxedAmount);

        emit Transfer(sender,recipient,taxedAmount);
    }

    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        //Removes token and handles staking
        _removeToken(sender, amount);
        //Adds token and handles staking
        _addToken(recipient, amount);

        emit Transfer(sender,recipient,amount);
    }
    //Calculates the token that should be taxed
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }

    /*
    *
    *Passive Staking
    *
    */

    //PassiveStaking uses the balances of each holder to redistribute auto generated BNB.
    //Each transaction _addToken and _removeToken gets called for the transaction amount
    //WithdrawBNB can be used for any holder to withdraw BNB at any time, like true Staking,
    //so unlike MRAT clones you can leave and forget your Token and claim after a while

    //lock for the withdraw
    bool private _isWithdrawing;
    //Multiplier to add some accuracy to profitPerShare
    uint256 private constant DistributionMultiplier = 2**64;
    //profit for each share a holder holds, a share equals a token.
    uint256 public profitPerShare;
    //the total reward distributed through staking, for tracking purposes
    uint256 public totalStakingReward;
    //the total payout through staking, for tracking purposes
    uint256 public totalPayouts;
    
    //marketing share starts at 85% to push initial marketing, after start
    //its capped to 60% max, the percentage of the staking that gets used for
    //marketing/paying the team
    uint8 public marketingShare = 85;
    //balance that is claimable by the team
    uint256 public marketingBalance;
    uint256 public buybackBalance;

    //Mapping of the already paid out(or missed) shares of each staker
    mapping(address => uint256) private alreadyPaidShares;
    //Mapping of shares that are reserved for payout
    mapping(address => uint256) private toBePaid;

    //Contract, pancake and burnAddress are excluded, other addresses like CEX
    //can be manually excluded, excluded list is limited to 30 entries to avoid a
    //out of gas exeption during sells
    function isExcludedFromStaking(address addr) public view returns (bool){
        return _excludedFromStaking.contains(addr);
    }

    //Total shares equals circulating supply minus excluded Balances
    function _getTotalShares() public view returns (uint256){
        uint256 shares=_circulatingSupply;
        //substracts all excluded from shares, excluded list is limited to 30
        // to avoid creating a Honeypot through OutOfGas exeption
        for(uint i = 0; i < _excludedFromStaking.length(); i++){
            shares -= _balances[_excludedFromStaking.at(i)];
        }
        return shares;
    }

    //adds Token to balances, adds new BNB to the toBePaid mapping and resets staking
    function _addToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount = _balances[addr]+amount;

        if(isExcludedFromStaking(addr)){
           _balances[addr] = newAmount;
           return;
        }

        //gets the payout before the change
        uint256 payment = _newDividentsOf(addr);
        //resets dividents to 0 for newAmount
        alreadyPaidShares[addr] = profitPerShare * newAmount;
        //adds dividents to the toBePaid mapping
        toBePaid[addr] += payment; 
        //sets newBalance
        _balances[addr] = newAmount;
    }

    //removes Token, adds BNB to the toBePaid mapping and resets staking
    function _removeToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount = _balances[addr] - amount;

        if(isExcludedFromStaking(addr)){
           _balances[addr] = newAmount;
           return;
        }

        //gets the payout before the change
        uint256 payment = _newDividentsOf(addr);
        //sets newBalance
        _balances[addr] = newAmount;
        //resets dividents to 0 for newAmount
        alreadyPaidShares[addr] = profitPerShare * newAmount;
        //adds dividents to the toBePaid mapping
        toBePaid[addr] += payment; 
    }

    //gets the not dividents of a staker that aren't in the toBePaid mapping 
    //returns wrong value for excluded accounts
    function _newDividentsOf(address staker) private view returns (uint256) {
        uint256 fullPayout = profitPerShare * _balances[staker];
        // if theres an overflow for some unexpected reason, return 0, instead of 
        // an exeption to still make trades possible
        if(fullPayout<alreadyPaidShares[staker]) return 0;
        return (fullPayout - alreadyPaidShares[staker]) / DistributionMultiplier;
    }

    //distributes bnb between marketing share and dividents 
    function _distributeStake(uint256 BNBamount) private {
        // Deduct marketing Tax
        uint256 marketingSplit = (BNBamount * marketingShare) / 100;
        uint256 buybackSplit = marketingSplit / 10;
        marketingSplit -= buybackSplit;
        uint256 amount = BNBamount - marketingSplit;

       marketingBalance += marketingSplit;
       buybackBalance += buybackSplit;

        if (amount > 0) {
            totalStakingReward += amount;
            uint256 totalShares=_getTotalShares();
            //when there are 0 shares, add everything to marketing budget
            if (totalShares == 0) {
                marketingBalance += amount;
            }else{
                //Increases profit per share based on current total shares
                profitPerShare += ((amount * DistributionMultiplier) / totalShares);
            }
        }
    }

    event OnWithdraw(uint256 amount, address recipient);

    //withdraws all dividents of address
    function Claim(address addr, address contractaddress) private{
        require(!_isWithdrawing);
        _isWithdrawing = true;
        uint256 amount;
        if(isExcludedFromStaking(addr)){
            //if excluded just withdraw remaining toBePaid BNB
            amount = toBePaid[addr];
            toBePaid[addr] = 0;
        }

        else{
            uint256 newAmount=_newDividentsOf(addr);
            //sets payout mapping to current amount
            alreadyPaidShares[addr] = profitPerShare * _balances[addr];
            //the amount to be paid 
            amount = toBePaid[addr] + newAmount;
            toBePaid[addr] = 0;
        }

        if(amount == 0){//no withdraw if 0 amount
            _isWithdrawing = false;
            return;
        }

        totalPayouts += amount;
        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH(); //BNB
        path[1] = contractaddress;

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        addr,
        block.timestamp);
        
        emit OnWithdraw(amount, addr);
        _isWithdrawing = false;
    }

    /*
    *
    *Swap Contract Tokens
    *
    */

    //tracks auto generated BNB, useful for ticker etc
    uint256 public totalLPBNB;
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //swaps the token on the contract for Marketing BNB and LP Token.
    //always swaps the sellLimit of token to avoid a large price impact
    function _swapContractToken() private lockTheSwap{
        uint256 contractBalance = _balances[address(this)];
        uint16 totalTax = _liquidityTax+_stakingTax;
        uint256 tokenToSwap = sellLimit;

        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        if(contractBalance < tokenToSwap || totalTax == 0){
            return;
        }
    
        //splits the token in TokenForLiquidity and tokenForMarketing
        uint256 tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax;
        uint256 tokenForMarketing = tokenToSwap - tokenForLiquidity;

        //splits tokenForLiquidity in 2 halves
        uint256 liqToken = tokenForLiquidity / 2;
        uint256 liqBNBToken = tokenForLiquidity - liqToken;

        //swaps marktetingToken and the liquidity token half for BNB
        uint256 swapToken = liqBNBToken + tokenForMarketing;
        //Gets the initial BNB balance, so swap won't touch any staked BNB
        uint256 initialBNBBalance = address(this).balance;
        _swapTokenForBNB(swapToken);
        uint256 newBNB = (address(this).balance - initialBNBBalance);
        //calculates the amount of BNB belonging to the LP-Pair and converts them to LP
        uint256 liqBNB = (newBNB * liqBNBToken) / swapToken;
        _addLiquidity(liqToken, liqBNB);
        //Get the BNB balance after LP generation to get the
        //exact amount of token left for Staking
        uint256 distributeBNB = (address(this).balance - initialBNBBalance);
        //distributes remaining BNB between stakers and Marketing
        _distributeStake(distributeBNB);
    }

    //swaps tokens on the contract for BNB
    function _swapTokenForBNB(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();

        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    //Adds Liquidity directly to the contract where LP are locked(unlike safemoon forks, that transfer it to the owner)
    function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        totalLPBNB+=bnbamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: bnbamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    /*
    *
    *Public Functions
    *
    */

    function getLiquidityReleaseTimeInSeconds() public view returns (uint256){
        if(block.timestamp < _liquidityUnlockTime){
            return _liquidityUnlockTime - block.timestamp;
        }
        return 0;
    }

    function getBurnedTokens() public view returns(uint256){
        return (InitialSupply - _circulatingSupply) / 10 ** _decimals;
    }

    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit / 10 ** _decimals, sellLimit / 10 ** _decimals);
    }

    function getTaxes() public view returns(uint256 burnTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_burnTax,_liquidityTax,_stakingTax,_buyTax,_sellTax,_transferTax);
    }

    function getWhitelistedStatus(address AddressToCheck) public view returns(bool){
        return _whiteList.contains(AddressToCheck);
    }

    //How long is a given address still locked from selling
    function getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
       uint256 lockTime = _sellLock[AddressToCheck];
       if(lockTime <= block.timestamp)
       {
           return 0;
       }
       return lockTime - block.timestamp;
    }

    function getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }

    //Functions every wallet can call
    //Resets sell lock of caller to the default sellLockTime should something go very wrong
    function AddressResetSellLock() public{
        _sellLock[msg.sender] = block.timestamp + sellLockTime;
    }

    //withdraws dividents of sender
    function AAAWithdraw(address contractaddress) public{
        Claim(msg.sender, contractaddress);
    }

    function getDividents(address addr) public view returns (uint256){
        if(isExcludedFromStaking(addr)) return toBePaid[addr];
        return _newDividentsOf(addr) + toBePaid[addr];
    }

    /*
    *
    *Settings
    *
    */

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;

    event BuyingBack(uint256 amount, address recipient);

    function TeamBuyBack() public onlyTeam{
        uint256 amount = buybackBalance;
        buybackBalance = 0;

        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH(); //BNB
        path[1] = address(this);

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        DeadWallet,
        block.timestamp);
        emit BuyingBack(amount, DeadWallet);
    }

    function TeamBuyBack(uint256 amount) public onlyTeam{
        require(amount <= buybackBalance);
        buybackBalance -= amount;

        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH(); //BNB
        path[1] = address(this);

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        DeadWallet,
        block.timestamp);
        emit BuyingBack(amount, DeadWallet);
    }

    //Excludes account from Staking
    function TeamExcludeFromStaking(address addr) public onlyTeam{
        //a long exluded list could lead to a Honeypot, therefore limit entries
        require(_excludedFromStaking.length() < 30);
        require(!isExcludedFromStaking(addr));
        uint256 newDividents = _newDividentsOf(addr);
        alreadyPaidShares[addr] = _balances[addr] * profitPerShare;
        toBePaid[addr] += newDividents;
        _excludedFromStaking.add(addr);
    }

    //Includes excluded Account to staking
    function TeamIncludeToStaking(address addr) public onlyTeam{
        require(isExcludedFromStaking(addr));
        _excludedFromStaking.remove(addr);
        //sets alreadyPaidShares to the current amount
        alreadyPaidShares[addr] = _balances[addr]*profitPerShare;
    }

    function TeamWithdrawMarketingBNB() public onlyTeam{
        uint256 amount = marketingBalance;
        marketingBalance = 0;
        (bool sent,) = TeamWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }

    function TeamWithdrawMarketingBNB(uint256 amount) public onlyTeam{
        require(amount <= marketingBalance);
        marketingBalance -= amount;
        (bool sent,) = TeamWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }

    //switches autoLiquidity and marketing BNB generation during transfers
    function TeamSwitchManualBNBConversion(bool manual) public onlyTeam{
        manualConversion = manual;
    }

    //Disables the timeLock after selling for everyone
    function TeamDisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }

    //Sets SellLockTime, needs to be lower than MaxSellLockTime
    function TeamSetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
            require(sellLockSeconds <= MaxSellLockTime,"Sell Lock time too high");
            sellLockTime = sellLockSeconds;
    }

    //Sets Taxes, is limited by MaxTax (20%) to make it impossible to create honeypot
    function TeamSetTaxes(uint8 burnTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        uint8 totalTax = burnTaxes + liquidityTaxes + stakingTaxes;
        require(totalTax == 100, "burn+liq+marketing needs to equal 100%");
        require(buyTax <= MaxTax && sellTax <= MaxTax && transferTax <= MaxTax,"taxes higher than max tax");

        _burnTax = burnTaxes;
        _liquidityTax = liquidityTaxes;
        _stakingTax = stakingTaxes;

        _buyTax = buyTax;
        _sellTax = sellTax;
        _transferTax = transferTax;
    }

    //How much of the staking tax should be allocated for marketing
    function TeamChangeMarketingShare(uint8 newShare) public onlyTeam{
        require(newShare <= 60); 
        marketingShare = newShare;
    }

    //manually converts contract token to LP and staking BNB
    function TeamCreateLPandBNB() public onlyTeam{
        _swapContractToken();
    }

    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }

    function TeamIncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }

    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }

    function TeamIncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }

     //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot)
    function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        //SellLimit needs to be below current Max Wallet to avoid a Large Price impact when generating auto LP
        require(newSellLimit < _circulatingSupply/100);
        //Adds decimals to limits
        newBalanceLimit = newBalanceLimit * 10 ** _decimals;
        newSellLimit = newSellLimit * 10 ** _decimals;
        //Calculates the target Limits based on supply
        uint256 targetBalanceLimit = _circulatingSupply / BalanceLimitDivider;
        uint256 targetSellLimit = _circulatingSupply / SellLimitDivider;

        require((newBalanceLimit >= targetBalanceLimit),
        "newBalanceLimit needs to be at least target");
        require((newSellLimit >= targetSellLimit),
        "newSellLimit needs to be at least target");

        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    /*
    *
    *Trading Setup
    *
    */

    bool public tradingEnabled;
    address private _liquidityTokenAddress;
    //Enables trading for everyone
    function SetupEnableTrading() public onlyTeam{
        tradingEnabled = true;
        _liquidityUnlockTime = block.timestamp + 7 days;
    }

    //Sets up the LP-Token Address required for LP Release
    function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress = liquidityTokenAddress;
    }

    /*
    *
    *Liquidity Protection
    *
    */

    //the timestamp when Liquidity unlocks
    uint256 private _liquidityUnlockTime;

    //Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release. 
    //Should be called once start was successful.
    bool public liquidityRelease20Percent;
    function TeamlimitLiquidityReleaseTo20Percent() public onlyTeam{
        liquidityRelease20Percent = true;
    }

    function TeamUnlockLiquidityInSeconds(uint256 secondsUntilUnlock) public onlyOwner{
        _prolongLiquidityLock(secondsUntilUnlock + block.timestamp);
    }

    function _prolongLiquidityLock(uint256 newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime > _liquidityUnlockTime);
        _liquidityUnlockTime = newUnlockTime;
    }

    //Release Liquidity Tokens once unlock time is over
    function TeamReleaseLiquidity() public onlyTeam {
        //Only callable if liquidity Unlock time is over
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        
        IPancakeERC20 liquidityToken = IPancakeERC20(_liquidityTokenAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
        if(liquidityRelease20Percent)
        {
            _liquidityUnlockTime = block.timestamp+DefaultLiquidityLockTime;
            //regular liquidity release, only releases 20% at a time and locks liquidity for another 5 days
            amount = amount * 2 / 10;
            liquidityToken.transfer(TeamWallet, amount);
        }
        else
        {
            //Liquidity release if something goes wrong at start
            //liquidityRelease20Percent should be called once everything is clear
            liquidityToken.transfer(TeamWallet, amount);
        }
    }

    //Removes Liquidity once unlock Time is over, 
    function TeamRemoveLiquidity(bool addToStaking) public onlyTeam {
        //Only callable if liquidity Unlock time is over
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime = block.timestamp + DefaultLiquidityLockTime;
        IPancakeERC20 liquidityToken = IPancakeERC20(_liquidityTokenAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
        if(liquidityRelease20Percent){
            amount = amount * 2 / 10; //only remove 20% each
        }
        liquidityToken.approve(address(_pancakeRouter),amount);
        //Removes Liquidity and either distributes liquidity BNB to stakers, or 
        // adds them to marketing Balance
        //Token will be converted
        //to Liquidity and Staking BNB again
        uint256 initialBNBBalance = address(this).balance;
        _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            address(this),
            block.timestamp
            );
        uint256 newBNBBalance = address(this).balance-initialBNBBalance;
        if(addToStaking){
            _distributeStake(newBNBBalance);
        }
        else{
            marketingBalance += newBNBBalance;
        }
    }

    //Releases all remaining BNB on the contract wallet, so BNB wont be burned
    function TeamRemoveRemainingBNB() public onlyTeam{
        require(block.timestamp >= _liquidityUnlockTime + 5 days, "Not yet unlocked");
        _liquidityUnlockTime = block.timestamp + DefaultLiquidityLockTime;
        (bool sent,) = TeamWallet.call{value: (address(this).balance)}("");
        require(sent);
    }

    /*
    *
    *External
    *
    */

    receive() external payable {}
    fallback() external payable {}
    // IBEP20

    function getOwner() external view override returns (address) {
        return owner();
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address _owner, address spender) external view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IBEP20 - Helpers

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"BuyingBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"contractaddress","type":"address"}],"name":"AAAWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"TeamChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamCreateLPandBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamExcludeFromStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamIncludeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamReleaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"addToStaking","type":"bool"}],"name":"TeamRemoveLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamRemoveRemainingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"TeamSetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualBNBConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"TeamUnlockLiquidityInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWithdrawMarketingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamWithdrawMarketingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamlimitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WhiteListBalanceLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getDividents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getWhitelistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityRelease20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeSeconds","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200054a565b62000025906603287092778e3862000609565b600e819055600f8190556010556016805460ff191660551790553480156200004c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e54336000818152600360209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601280546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001709190620004b0565b6001600160a01b031663c9c6539630601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ce57600080fd5b505afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002099190620004b0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200025257600080fd5b505af115801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d9190620004b0565b601180546001600160a01b0392909216660100000000000002600160301b600160d01b03199092169190911790556032620002cb6009600a6200054a565b620002de906603287092778e3862000609565b620002ea9190620004e0565b600f556101f4620002fe6009600a6200054a565b62000311906603287092778e3862000609565b6200031d9190620004e0565b601055610708601d556011805465ffffffffffff1916650a5a001e140a1790556200036a600673444ea52b99be919ab39740f17cecafc58902c61c6200043e602090811b620023a217901c565b50620003863360066200043e60201b620023a21790919060201c565b50620003a461dead60066200043e60201b620023a21790919060201c565b50601254620003cb90600c906001600160a01b03166200043e602090811b620023a217901c565b50620003fc601160069054906101000a90046001600160a01b0316600c6200043e60201b620023a21790919060201c565b506200041830600c6200043e60201b620023a21790919060201c565b506200043661dead600c6200043e60201b620023a21790919060201c565b505062000641565b600062000455836001600160a01b0384166200045e565b90505b92915050565b6000818152600183016020526040812054620004a75750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000458565b50600062000458565b600060208284031215620004c2578081fd5b81516001600160a01b0381168114620004d9578182fd5b9392505050565b600082620004fc57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115620005425781600019048211156200052657620005266200062b565b808516156200053457918102915b93841c939080029062000506565b509250929050565b60006200045560ff841683600082620005665750600162000458565b81620005755750600062000458565b81600181146200058e57600281146200059957620005b9565b600191505062000458565b60ff841115620005ad57620005ad6200062b565b50506001821b62000458565b5060208310610133831016604e8410600b8410161715620005de575081810a62000458565b620005ea838362000501565b80600019048211156200060157620006016200062b565b029392505050565b60008160001904831182151516156200062657620006266200062b565b500290565b634e487b7160e01b600052601160045260246000fd5b613e6e80620006516000396000f3fe6080604052600436106104105760003560e01c80637b9e987a1161021c578063c3a3c03211610122578063e69e03ee116100b0578063f24a1e7011610077578063f24a1e7014610c7c578063f2fde38b14610c91578063f88b0e4614610cb1578063f9963ca114610cc7578063ffcfadde14610ce757005b8063e69e03ee14610bfc578063e8d834a614610c11578063ead8acb014610c31578063eb8e886314610c51578063f00df36514610c6657005b8063d63607d8116100f4578063d63607d814610b41578063d8e8de3414610b56578063dd46706414610b76578063dd62ed3e14610b96578063dff6bcbf14610bdc57005b8063c3a3c03214610ad7578063c3f4f54f14610aec578063ce7de67614610b01578063d51f383b14610b2157005b80638d060d77116101aa578063a457c2d711610171578063a457c2d714610a57578063a69df4b514610a77578063a8b51fc814610a8c578063a9059cbb14610aa2578063b6c5232414610ac257005b80638d060d77146109d45780638d2c5039146109ea5780638da5cb5b146109b657806395d89b4114610a0a5780639fa62d5f14610a3757005b806386d0ada8116101ee57806386d0ada81461095d5780638724cc72146104de5780638728ecd114610977578063887c60fb14610997578063893d20e8146109b657005b80637b9e987a146108fd5780637f91937314610912578063852147f7146109275780638650e92a1461094757005b80633511826c1161032157806357ad67d1116102af57806370a082311161027657806370a082311461085c578063715018a6146108925780637335307b146108a757806373ddf08e146108c7578063762bb282146108e757005b806357ad67d11461079c578063588aeaf2146107bc57806358e55365146107dc578063677a8870146107f25780636f89e4091461083257005b806348e53164116102f357806348e531641461071857806349bdf8731461072d5780634ada218b146107475780634cdaf0ae146107665780634f91e48c1461078657005b80633511826c146106b857806339509351146106cd5780633c7a309b146106ed5780634089b1701461070257005b806323b872dd1161039e578063311a869711610370578063311a869714610639578063313ce5671461064e578063320dd2c21461066257806332ac487f146106825780633478154b146106a257005b806323b872dd146105705780632973ef2d146105905780632c889d18146105f95780632fcc9cfe1461061957005b80630fd99e16116103e25780630fd99e16146104de5780631285073c1461050757806314e913771461052657806318160ddd146105465780631eb25d131461055b57005b806306fdde031461041957806309218ee714610462578063095ea7b31461048e5780630b1daa3e146104be57005b3661041757005b005b34801561042557600080fd5b5060408051808201909152600e81526d4b65766c61722046696e616e636560901b60208201525b6040516104599190613b29565b60405180910390f35b34801561046e57600080fd5b5060165461047c9060ff1681565b60405160ff9091168152602001610459565b34801561049a57600080fd5b506104ae6104a9366004613908565b610cfc565b6040519015158152602001610459565b3480156104ca57600080fd5b506104176104d9366004613858565b610d13565b3480156104ea57600080fd5b506104f46101f481565b60405161ffff9091168152602001610459565b34801561051357600080fd5b50601d545b604051908152602001610459565b34801561053257600080fd5b50610417610541366004613933565b610d50565b34801561055257600080fd5b50600e54610518565b34801561056757600080fd5b50610518610d8f565b34801561057c57600080fd5b506104ae61058b3660046138c8565b610daf565b34801561059c57600080fd5b506011546040805160ff6301000000840481168252640100000000840481166020830152600160281b84048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c001610459565b34801561060557600080fd5b5061041761061436600461396b565b610e46565b34801561062557600080fd5b5061041761063436600461396b565b610e94565b34801561064557600080fd5b5061047c603281565b34801561065a57600080fd5b50600961047c565b34801561066e57600080fd5b5061041761067d366004613858565b6110b9565b34801561068e57600080fd5b5061051861069d366004613858565b6110c3565b3480156106ae57600080fd5b506104f461070881565b3480156106c457600080fd5b5061041761111b565b3480156106d957600080fd5b506104ae6106e8366004613908565b611152565b3480156106f957600080fd5b50610417611189565b34801561070e57600080fd5b5061051860155481565b34801561072457600080fd5b5061041761136d565b34801561073957600080fd5b506020546104ae9060ff1681565b34801561075357600080fd5b50601e546104ae90610100900460ff1681565b34801561077257600080fd5b50610417610781366004613858565b61138c565b34801561079257600080fd5b5061051860105481565b3480156107a857600080fd5b506104176107b7366004613a03565b6113db565b3480156107c857600080fd5b506104176107d7366004613858565b61156e565b3480156107e857600080fd5b5061051860175481565b3480156107fe57600080fd5b5061081a73444ea52b99be919ab39740f17cecafc58902c61c81565b6040516001600160a01b039091168152602001610459565b34801561083e57600080fd5b5061084761159e565b60408051928352602083019190915201610459565b34801561086857600080fd5b50610518610877366004613858565b6001600160a01b031660009081526003602052604090205490565b34801561089e57600080fd5b506104176115db565b3480156108b357600080fd5b506104ae6108c2366004613858565b61164c565b3480156108d357600080fd5b506104176108e23660046139e9565b611659565b3480156108f357600080fd5b50610518600f5481565b34801561090957600080fd5b506104176116a5565b34801561091e57600080fd5b506104176116eb565b34801561093357600080fd5b50610417610942366004613858565b6117be565b34801561095357600080fd5b5061051860135481565b34801561096957600080fd5b50601e546104ae9060ff1681565b34801561098357600080fd5b50610518610992366004613858565b611843565b3480156109a357600080fd5b50601c546104ae90610100900460ff1681565b3480156109c257600080fd5b506000546001600160a01b031661081a565b3480156109e057600080fd5b50610518601b5481565b3480156109f657600080fd5b50610417610a05366004613933565b611882565b348015610a1657600080fd5b5060408051808201909152600481526325ab262960e11b602082015261044c565b348015610a4357600080fd5b50610417610a5236600461399b565b6118ba565b348015610a6357600080fd5b506104ae610a72366004613908565b611a29565b348015610a8357600080fd5b50610417611aa5565b348015610a9857600080fd5b5061051860185481565b348015610aae57600080fd5b506104ae610abd366004613908565b611bab565b348015610ace57600080fd5b50600254610518565b348015610ae357600080fd5b50610518611bb8565b348015610af857600080fd5b50610518611bd8565b348015610b0d57600080fd5b50610417610b1c366004613858565b611c1a565b348015610b2d57600080fd5b50610417610b3c36600461396b565b611ce2565b348015610b4d57600080fd5b50610417611d5e565b348015610b6257600080fd5b506104ae610b71366004613858565b611d92565b348015610b8257600080fd5b50610417610b9136600461396b565b611d9f565b348015610ba257600080fd5b50610518610bb1366004613890565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610be857600080fd5b50610417610bf7366004613858565b611e33565b348015610c0857600080fd5b50610518611e63565b348015610c1d57600080fd5b50610417610c2c366004613933565b611ec9565b348015610c3d57600080fd5b50610417610c4c36600461396b565b612122565b348015610c5d57600080fd5b5061047c601481565b348015610c7257600080fd5b5061051860145481565b348015610c8857600080fd5b50610417612190565b348015610c9d57600080fd5b50610417610cac366004613858565b61225c565b348015610cbd57600080fd5b50610518601d5481565b348015610cd357600080fd5b50610417610ce2366004613858565b612343565b348015610cf357600080fd5b50610417612373565b6000610d093384846123b7565b5060015b92915050565b610d1c336124aa565b610d415760405162461bcd60e51b8152600401610d3890613bdb565b60405180910390fd5b610d4c600a826124e8565b5050565b610d59336124aa565b610d755760405162461bcd60e51b8152600401610d3890613bdb565b601c80549115156101000261ff0019909216919091179055565b610d9b6009600a613ce3565b610dac906603287092778e38613d8e565b81565b6000610dbc8484846124fd565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610e275760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610d38565b610e3b8533610e368685613dad565b6123b7565b506001949350505050565b33610e596000546001600160a01b031690565b6001600160a01b031614610e7f5760405162461bcd60e51b8152600401610d3890613ba6565b610e91610e8c4283613c43565b61275a565b50565b610e9d336124aa565b610eb95760405162461bcd60e51b8152600401610d3890613bdb565b601854811115610ec857600080fd5b8060186000828254610eda9190613dad565b909155506000905060025b604051908082528060200260200182016040528015610f0e578160200160208202803683370190505b509050601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5f57600080fd5b505afa158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190613874565b81600081518110610fb857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610ffa57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061104290600090869061dead904290600401613af4565b6000604051808303818588803b15801561105b57600080fd5b505af115801561106f573d6000803e3d6000fd5b50506040805186815261dead60208201527ff77332ef34d15b1364e1e8c996a5d7f333e26ec848640699daf065187f8f9a3f94500191506110ad9050565b60405180910390a15050565b610e913382612768565b60006110ce8261164c565b156110ef57506001600160a01b03166000908152601a602052604090205490565b6001600160a01b0382166000908152601a602052604090205461111183612a46565b610d0d9190613c43565b611124336124aa565b6111405760405162461bcd60e51b8152600401610d3890613bdb565b60188054600091829055906002610ee5565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d09918590610e36908690613c43565b611192336124aa565b6111ae5760405162461bcd60e51b8152600401610d3890613bdb565b601f544210156111d05760405162461bcd60e51b8152600401610d3890613b7c565b601e546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190613983565b60205490915060ff16156113265761126f61708042613c43565b601f55600a61127f826002613d8e565b6112899190613c80565b60405163a9059cbb60e01b815273444ea52b99be919ab39740f17cecafc58902c61c6004820152602481018290529091506001600160a01b0383169063a9059cbb906044015b602060405180830381600087803b1580156112e957600080fd5b505af11580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611321919061394f565b505050565b60405163a9059cbb60e01b815273444ea52b99be919ab39740f17cecafc58902c61c6004820152602481018290526001600160a01b0383169063a9059cbb906044016112cf565b601d5461137a9042613c43565b33600090815260056020526040902055565b611395336124aa565b6113b15760405162461bcd60e51b8152600401610d3890613bdb565b601e80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6113e4336124aa565b6114005760405162461bcd60e51b8152600401610d3890613bdb565b60008461140d8789613c5b565b6114179190613c5b565b90508060ff1660641461147b5760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610d38565b601460ff8516118015906114935750601460ff841611155b80156114a35750601460ff831611155b6114ef5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610d38565b506011805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b029790971665ff000000ffff199885166401000000000264ff00000000199a86166301000000029a909a1664ffff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b611577336124aa565b6115935760405162461bcd60e51b8152600401610d3890613bdb565b610d4c6006826123a2565b6000806115ad6009600a613ce3565b600f546115ba9190613c80565b6115c66009600a613ce3565b6010546115d39190613c80565b915091509091565b336115ee6000546001600160a01b031690565b6001600160a01b0316146116145760405162461bcd60e51b8152600401610d3890613ba6565b600080546040516001600160a01b0390911690600080516020613e19833981519152908390a3600080546001600160a01b0319169055565b6000610d0d600c83612acc565b611662336124aa565b61167e5760405162461bcd60e51b8152600401610d3890613bdb565b603c8160ff16111561168f57600080fd5b6016805460ff191660ff92909216919091179055565b6116ae336124aa565b6116ca5760405162461bcd60e51b8152600401610d3890613bdb565b601e805461ff0019166101001790556116e64262093a80613c43565b601f55565b6116f4336124aa565b6117105760405162461bcd60e51b8152600401610d3890613bdb565b6017805460009182905560405190919073444ea52b99be919ab39740f17cecafc58902c61c9083905b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b5050905080610d4c5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610d38565b6117c7336124aa565b6117e35760405162461bcd60e51b8152600401610d3890613bdb565b6117ec8161164c565b6117f557600080fd5b611800600c826124e8565b506013546001600160a01b0382166000908152600360205260409020546118279190613d8e565b6001600160a01b03909116600090815260196020526040902055565b6001600160a01b03811660009081526005602052604081205442811161186c5750600092915050565b6118764282613dad565b9392505050565b905090565b61188b336124aa565b6118a75760405162461bcd60e51b8152600401610d3890613bdb565b601e805460ff1916911515919091179055565b6118c3336124aa565b6118df5760405162461bcd60e51b8152600401610d3890613bdb565b6064600e546118ee9190613c80565b81106118f957600080fd5b6119056009600a613ce3565b61190f9083613d8e565b915061191d6009600a613ce3565b6119279082613d8e565b90506000603260ff16600e5461193d9190613c80565b905060006101f461ffff16600e546119559190613c80565b9050818410156119bb5760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610d38565b80831015611a1c5760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610d38565b5050600f91909155601055565b3360009081526004602090815260408083206001600160a01b038616845290915281205482811015611a8c5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610d38565b611a9b3385610e368685613dad565b5060019392505050565b6001546001600160a01b03163314611b0b5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610d38565b6002544211611b5c5760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374206973206c6f636b656420666f72203134206461797300006044820152606401610d38565b600154600080546040516001600160a01b039384169390911691600080516020613e1983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610d093384846124fd565b6000601f54421015611bd25742601f5461187d9190613dad565b50600090565b6000611be66009600a613ce3565b600e54611bf56009600a613ce3565b611c06906603287092778e38613d8e565b611c109190613dad565b61187d9190613c80565b611c23336124aa565b611c3f5760405162461bcd60e51b8152600401610d3890613bdb565b601e611c4b600c612aee565b10611c5557600080fd5b611c5e8161164c565b15611c6857600080fd5b6000611c7382612a46565b6013546001600160a01b038416600090815260036020526040902054919250611c9b91613d8e565b6001600160a01b038316600090815260196020908152604080832093909355601a90529081208054839290611cd1908490613c43565b909155506113219050600c836123a2565b611ceb336124aa565b611d075760405162461bcd60e51b8152600401610d3890613bdb565b610708811115611d595760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610d38565b601d55565b611d67336124aa565b611d835760405162461bcd60e51b8152600401610d3890613bdb565b6020805460ff19166001179055565b6000610d0d600883612acc565b33611db26000546001600160a01b031690565b6001600160a01b031614611dd85760405162461bcd60e51b8152600401610d3890613ba6565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611e078142613c43565b600255600080546040516001600160a01b0390911690600080516020613e19833981519152908390a350565b611e3c336124aa565b611e585760405162461bcd60e51b8152600401610d3890613bdb565b610d4c6006826124e8565b600e54600090815b611e75600c612aee565b811015611ec35760036000611e8b600c84612af8565b6001600160a01b03168152602081019190915260400160002054611eaf9083613dad565b915080611ebb81613dc4565b915050611e6b565b50919050565b611ed2336124aa565b611eee5760405162461bcd60e51b8152600401610d3890613bdb565b601f54421015611f105760405162461bcd60e51b8152600401610d3890613b7c565b611f1c61708042613c43565b601f55601e546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015611f6c57600080fd5b505afa158015611f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa49190613983565b60205490915060ff1615611fcc57600a611fbf826002613d8e565b611fc99190613c80565b90505b60125460405163095ea7b360e01b81526001600160a01b039182166004820152602481018390529083169063095ea7b390604401602060405180830381600087803b15801561201a57600080fd5b505af115801561202e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612052919061394f565b5060125460405163af2979eb60e01b815247916001600160a01b03169063af2979eb9061208e9030908690600090819084904290600401613ab9565b602060405180830381600087803b1580156120a857600080fd5b505af11580156120bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e09190613983565b5060006120ed8247613dad565b90508415612103576120fe81612b04565b61211b565b80601760008282546121159190613c43565b90915550505b5050505050565b61212b336124aa565b6121475760405162461bcd60e51b8152600401610d3890613bdb565b60175481111561215657600080fd5b80601760008282546121689190613dad565b909155505060405160009073444ea52b99be919ab39740f17cecafc58902c61c908390611739565b612199336124aa565b6121b55760405162461bcd60e51b8152600401610d3890613bdb565b601f546121c59062069780613c43565b4210156121e45760405162461bcd60e51b8152600401610d3890613b7c565b6121f061708042613c43565b601f5560405160009073444ea52b99be919ab39740f17cecafc58902c61c9047908381818185875af1925050503d8060008114612249576040519150601f19603f3d011682016040523d82523d6000602084013e61224e565b606091505b5050905080610e9157600080fd5b3361226f6000546001600160a01b031690565b6001600160a01b0316146122955760405162461bcd60e51b8152600401610d3890613ba6565b6001600160a01b0381166122fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d38565b600080546040516001600160a01b0380851693921691600080516020613e1983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61234c336124aa565b6123685760405162461bcd60e51b8152600401610d3890613bdb565b610d4c600a826123a2565b61237c336124aa565b6123985760405162461bcd60e51b8152600401610d3890613bdb565b6123a0612bfb565b565b6000611876836001600160a01b038416612d37565b6001600160a01b0383166124015760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610d38565b6001600160a01b0382166124495760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610d38565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0383811691161480610d0d57506001600160a01b03821673444ea52b99be919ab39740f17cecafc58902c61c1492915050565b6000611876836001600160a01b038416612d86565b6001600160a01b0383166125485760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610d38565b6001600160a01b0382166125915760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610d38565b600061259e600685612acc565b806125af57506125af600684612acc565b905060006001600160a01b0385163014806125d257506001600160a01b03841630145b6012546011549192506001600160a01b0390811691600091888116600160301b909204161480156126145750816001600160a01b0316866001600160a01b0316145b8061264f57506011546001600160a01b03878116600160301b9092041614801561264f5750816001600160a01b0316876001600160a01b0316145b6011549091506000906001600160a01b03898116600160301b9092041614806126895750826001600160a01b0316886001600160a01b0316145b6011549091506000906001600160a01b03898116600160301b9092041614806126c35750836001600160a01b0316886001600160a01b0316145b905084806126ce5750825b806126d65750855b156126eb576126e6898989612e9d565b61274f565b601e54610100900460ff166127425760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610d38565b61274f8989898585612f68565b505050505050505050565b601f5481116116e657600080fd5b601254600160a01b900460ff161561277f57600080fd5b6012805460ff60a01b1916600160a01b179055600061279d8361164c565b156127c557506001600160a01b0382166000908152601a602052604081208054919055612845565b60006127d084612a46565b6001600160a01b0385166000908152600360205260409020546013549192506127f891613d8e565b6001600160a01b038516600090815260196020908152604080832093909355601a90522054612828908290613c43565b6001600160a01b0385166000908152601a60205260408120559150505b8061285c5750506012805460ff60a01b1916905550565b806015600082825461286e9190613c43565b90915550506040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613874565b8160008151811061293157634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061297357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de959084906129b99060009086908a904290600401613af4565b6000604051808303818588803b1580156129d257600080fd5b505af11580156129e6573d6000803e3d6000fd5b5050604080518681526001600160a01b03891660208201527f3427e9fc4a0bff3bb4138bd96dc004b9aa0abb6f87ca8f93363c510da6c739239450019150612a2b9050565b60405180910390a150506012805460ff60a01b191690555050565b6001600160a01b0381166000908152600360205260408120546013548291612a6d91613d8e565b6001600160a01b038416600090815260196020526040902054909150811015612a995750600092915050565b6001600160a01b038316600090815260196020526040902054600160401b90612ac29083613dad565b6118769190613c80565b6001600160a01b03811660009081526001830160205260408120541515611876565b6000610d0d825490565b600061187683836133a1565b601654600090606490612b1a9060ff1684613d8e565b612b249190613c80565b90506000612b33600a83613c80565b9050612b3f8183613dad565b91506000612b4d8385613dad565b90508260176000828254612b619190613c43565b925050819055508160186000828254612b7a9190613c43565b90915550508015612bf5578060146000828254612b979190613c43565b9091555060009050612ba7611e63565b905080612bcb578160176000828254612bc09190613c43565b9091555061211b9050565b80612bda600160401b84613d8e565b612be49190613c80565b601360008282546121159190613c43565b50505050565b601c805460ff1916600117905530600090815260036020526040812054601154909190612c3d90600160281b810460ff90811691640100000000900416613c5b565b60ff1690506000601054905080831080612c59575061ffff8216155b15612c6657505050612d2b565b60115460009061ffff841690612c8790640100000000900460ff1684613d8e565b612c919190613c80565b90506000612c9f8284613dad565b90506000612cae600284613c80565b90506000612cbc8285613dad565b90506000612cca8483613c43565b905047612cd682613435565b6000612ce28247613dad565b9050600083612cf18684613d8e565b612cfb9190613c80565b9050612d0786826135b9565b6000612d138447613dad565b9050612d1e81612b04565b5050505050505050505050505b601c805460ff19169055565b6000818152600183016020526040812054612d7e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d0d565b506000610d0d565b60008181526001830160205260408120548015612e93576000612daa600183613dad565b8554909150600090612dbe90600190613dad565b90506000866000018281548110612de557634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110612e1657634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260018901909152604090208490558654879080612e5757634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d0d565b6000915050610d0d565b6001600160a01b03831660009081526003602052604090205481811015612f015760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610d38565b612f0b8483613677565b612f158383613743565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f5a91815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526003602052604080822054928816825290205484811015612fd65760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610d38565b600083156130d857612fe9600a89612acc565b613083576001600160a01b0388166000908152600560205260409020544210158061301b5750601c54610100900460ff165b61305c5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610d38565b601d546130699042613c43565b6001600160a01b0389166000908152600560205260409020555b6010548611156130c75760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610d38565b50601154610100900460ff1661323e565b841561313857600f546130eb8785613c43565b111561312c5760405162461bcd60e51b815260206004820152601060248201526f2bb430b63290383937ba32b1ba34b7b760811b6044820152606401610d38565b5060115460ff1661323e565b6131446009600a613ce3565b86116131685761316888732170ed0880ac9a755fd29b2688956bd959f933f8612768565b600f546131758785613c43565b11156131b65760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610d38565b6131c1600a89612acc565b613230576001600160a01b038816600090815260056020526040902054421015806131f35750601c54610100900460ff165b6132305760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610d38565b5060115462010000900460ff165b6011546001600160a01b03898116600160301b90920416148015906132665750601e5460ff16155b80156132755750601c5460ff16155b801561327e5750835b1561328b5761328b612bfb565b60006132a78783601160039054906101000a900460ff1661380e565b6011549091506000906132db90899085906132d69060ff6401000000008204811691600160281b900416613c5b565b61380e565b905060006132e98284613c43565b6132f3908a613dad565b90506132ff8b8a613677565b306000908152600360205260408120805484929061331e908490613c43565b9250508190555082600e60008282546133379190613dad565b9091555061334790508a82613743565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161338c91815260200190565b60405180910390a35050505050505050505050565b815460009082106133ff5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610d38565b82600001828154811061342257634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60125461344d9030906001600160a01b0316836123b7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061349057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156134e457600080fd5b505afa1580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190613874565b8160018151811061353d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac94790613583908590600090869030904290600401613c07565b600060405180830381600087803b15801561359d57600080fd5b505af11580156135b1573d6000803e3d6000fd5b505050505050565b80601b60008282546135cb9190613c43565b90915550506012546135e89030906001600160a01b0316846123b7565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136259030908790600090819084904290600401613ab9565b6060604051808303818588803b15801561363e57600080fd5b505af1158015613652573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061211b91906139bc565b6001600160a01b03821660009081526003602052604081205461369b908390613dad565b90506136a68361164c565b156136cb576001600160a01b0390921660009081526003602052604090209190915550565b60006136d684612a46565b6001600160a01b0385166000908152600360205260409020839055601354909150613702908390613d8e565b6001600160a01b038516600090815260196020908152604080832093909355601a90529081208054839290613738908490613c43565b909155505050505050565b6001600160a01b038216600090815260036020526040812054613767908390613c43565b90506137728361164c565b15613797576001600160a01b0390921660009081526003602052604090209190915550565b60006137a284612a46565b9050816013546137b29190613d8e565b6001600160a01b038516600090815260196020908152604080832093909355601a905290812080548392906137e8908490613c43565b9091555050506001600160a01b0390921660009081526003602052604090209190915550565b60006127108260ff168460ff16866138269190613d8e565b6138309190613d8e565b61383a9190613c80565b949350505050565b803560ff8116811461385357600080fd5b919050565b600060208284031215613869578081fd5b813561187681613df5565b600060208284031215613885578081fd5b815161187681613df5565b600080604083850312156138a2578081fd5b82356138ad81613df5565b915060208301356138bd81613df5565b809150509250929050565b6000806000606084860312156138dc578081fd5b83356138e781613df5565b925060208401356138f781613df5565b929592945050506040919091013590565b6000806040838503121561391a578182fd5b823561392581613df5565b946020939093013593505050565b600060208284031215613944578081fd5b813561187681613e0a565b600060208284031215613960578081fd5b815161187681613e0a565b60006020828403121561397c578081fd5b5035919050565b600060208284031215613994578081fd5b5051919050565b600080604083850312156139ad578182fd5b50508035926020909101359150565b6000806000606084860312156139d0578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156139fa578081fd5b61187682613842565b60008060008060008060c08789031215613a1b578182fd5b613a2487613842565b9550613a3260208801613842565b9450613a4060408801613842565b9350613a4e60608801613842565b9250613a5c60808801613842565b9150613a6a60a08801613842565b90509295509295509295565b6000815180845260208085019450808401835b83811015613aae5781516001600160a01b031687529582019590820190600101613a89565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613b0d6080830186613a76565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613b5557858101830151858201604001528201613b39565b81811115613b665783604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b85815284602082015260a060408201526000613c2660a0830186613a76565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613c5657613c56613ddf565b500190565b600060ff821660ff84168060ff03821115613c7857613c78613ddf565b019392505050565b600082613c9b57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613cdb578160001904821115613cc157613cc1613ddf565b80851615613cce57918102915b93841c9390800290613ca5565b509250929050565b600061187660ff841683600082613cfc57506001610d0d565b81613d0957506000610d0d565b8160018114613d1f5760028114613d2957613d45565b6001915050610d0d565b60ff841115613d3a57613d3a613ddf565b50506001821b610d0d565b5060208310610133831016604e8410600b8410161715613d68575081810a610d0d565b613d728383613ca0565b8060001904821115613d8657613d86613ddf565b029392505050565b6000816000190483118215151615613da857613da8613ddf565b500290565b600082821015613dbf57613dbf613ddf565b500390565b6000600019821415613dd857613dd8613ddf565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e9157600080fd5b8015158114610e9157600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220bd9f07e91488c38641f0524276948b49e5138734de84b85fcf805d30c21cca5f64736f6c63430008040033

Deployed ByteCode Sourcemap

24164:36975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58793:94;;;;;;;;;;-1:-1:-1;58874:5:0;;;;;;;;;;;;-1:-1:-1;;;58874:5:0;;;;58793:94;;;;;;;:::i;:::-;;;;;;;;37618:32;;;;;;;;;;-1:-1:-1;37618:32:0;;;;;;;;;;;18851:4:1;18839:17;;;18821:36;;18809:2;18794:18;37618:32:0;18776:87:1;59678:161:0;;;;;;;;;;-1:-1:-1;59678:161:0;;;;;:::i;:::-;;:::i;:::-;;;6090:14:1;;6083:22;6065:41;;6053:2;6038:18;59678:161:0;6020:92:1;53172:127:0;;;;;;;;;;-1:-1:-1;53172:127:0;;;;;:::i;:::-;;:::i;25612:45::-;;;;;;;;;;;;25654:3;25612:45;;;;;16819:6:1;16807:19;;;16789:38;;16777:2;16762:18;25612:45:0;16744:89:1;47731:102:0;;;;;;;;;;-1:-1:-1;47813:12:0;;47731:102;;;16984:25:1;;;16972:2;16957:18;47731:102:0;16939:76:1;51227:103:0;;;;;;;;;;-1:-1:-1;51227:103:0;;;;;:::i;:::-;;:::i;59103:108::-;;;;;;;;;;-1:-1:-1;59185:18:0;;59103:108;;25049:78;;;;;;;;;;;;;:::i;60152:392::-;;;;;;;;;;-1:-1:-1;60152:392:0;;;;;:::i;:::-;;:::i;46981:244::-;;;;;;;;;;-1:-1:-1;47152:8:0;;46981:244;;;47152:8;;;;;;18426:25:1;;47161:13:0;;;;;18482:2:1;18467:18;;18460:34;-1:-1:-1;;;47175:11:0;;;;18510:18:1;;;18503:34;;;;47187:7:0;;;18568:2:1;18553:18;;18546:34;47152:8:0;47195;;;;18611:3:1;18596:19;;18589:35;47204:12:0;;;;;18655:3:1;18640:19;;18633:35;18413:3;18398:19;46981:244:0;18380:294:1;55340:160:0;;;;;;;;;;-1:-1:-1;55340:160:0;;;;;:::i;:::-;;:::i;49130:488::-;;;;;;;;;;-1:-1:-1;49130:488:0;;;;;:::i;:::-;;:::i;25357:46::-;;;;;;;;;;;;25401:2;25357:46;;59001:94;;;;;;;;;;-1:-1:-1;25041:1:0;59001:94;;48129:105;;;;;;;;;;-1:-1:-1;48129:105:0;;;;;:::i;:::-;;:::i;48242:193::-;;;;;;;;;;-1:-1:-1;48242:193:0;;;;;:::i;:::-;;:::i;25740:51::-;;;;;;;;;;;;25781:10;25740:51;;48656:466;;;;;;;;;;;;;:::i;60579:205::-;;;;;;;;;;-1:-1:-1;60579:205:0;;;;;:::i;:::-;;:::i;55807:937::-;;;;;;;;;;;;;:::i;37390:27::-;;;;;;;;;;;;;;;;47973:111;;;;;;;;;;;;;:::i;55174:37::-;;;;;;;;;;-1:-1:-1;55174:37:0;;;;;;;;54393:26;;;;;;;;;;-1:-1:-1;54393:26:0;;;;;;;;;;;54718:147;;;;;;;;;;-1:-1:-1;54718:147:0;;;;;:::i;:::-;;:::i;26926:46::-;;;;;;;;;;;;;;;;51703:613;;;;;;;;;;-1:-1:-1;51703:613:0;;;;;:::i;:::-;;:::i;52750:110::-;;;;;;;;;;-1:-1:-1;52750:110:0;;;;;:::i;:::-;;:::i;37702:31::-;;;;;;;;;;;;;;;;26085:79;;;;;;;;;;;;26122:42;26085:79;;;;;-1:-1:-1;;;;;4990:32:1;;;4972:51;;4960:2;4945:18;26085:79:0;4927:102:1;46816:157:0;;;;;;;;;;;;;:::i;:::-;;;;18060:25:1;;;18116:2;18101:18;;18094:34;;;;18033:18;46816:157:0;18015:119:1;59219:121:0;;;;;;;;;;-1:-1:-1;59219:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;59314:18:0;59287:7;59314:18;;;:9;:18;;;;;;;59219:121;9508:140;;;;;;;;;;;;;:::i;38220:132::-;;;;;;;;;;-1:-1:-1;38220:132:0;;;;;:::i;:::-;;:::i;52393:144::-;;;;;;;;;;-1:-1:-1;52393:144:0;;;;;:::i;:::-;;:::i;26870:49::-;;;;;;;;;;;;;;;;54507:143;;;;;;;;;;;;;:::i;50462:238::-;;;;;;;;;;;;;:::i;50173:281::-;;;;;;;;;;-1:-1:-1;50173:281:0;;;;;:::i;:::-;;:::i;37176:29::-;;;;;;;;;;;;;;;;48559:28;;;;;;;;;;-1:-1:-1;48559:28:0;;;;;;;;47442:281;;;;;;;;;;-1:-1:-1;47442:281:0;;;;;:::i;:::-;;:::i;48490:28::-;;;;;;;;;;-1:-1:-1;48490:28:0;;;;;;;;;;;58691:94;;;;;;;;;;-1:-1:-1;58743:7:0;9360:6;-1:-1:-1;;;;;9360:6:0;58691:94;;43275:25;;;;;;;;;;;;;;;;51052:111;;;;;;;;;;-1:-1:-1;51052:111:0;;;;;:::i;:::-;;:::i;58895:98::-;;;;;;;;;;-1:-1:-1;58978:7:0;;;;;;;;;;;;-1:-1:-1;;;58978:7:0;;;;58895:98;;53404:929;;;;;;;;;;-1:-1:-1;53404:929:0;;;;;:::i;:::-;;:::i;60792:342::-;;;;;;;;;;-1:-1:-1;60792:342:0;;;;;:::i;:::-;;:::i;10857:304::-;;;;;;;;;;;;;:::i;37740:29::-;;;;;;;;;;;;;;;;59348:167;;;;;;;;;;-1:-1:-1;59348:167:0;;;;;:::i;:::-;;:::i;10060:89::-;;;;;;;;;;-1:-1:-1;10132:9:0;;10060:89;;46441:224;;;;;;;;;;;;;:::i;46673:135::-;;;;;;;;;;;;;:::i;49663:458::-;;;;;;;;;;-1:-1:-1;49663:458:0;;;;;:::i;:::-;;:::i;51403:205::-;;;;;;;;;;-1:-1:-1;51403:205:0;;;;;:::i;:::-;;:::i;55218:114::-;;;;;;;;;;;;;:::i;47233:140::-;;;;;;;;;;-1:-1:-1;47233:140:0;;;;;:::i;:::-;;:::i;10385:240::-;;;;;;;;;;-1:-1:-1;10385:240:0;;;;;:::i;:::-;;:::i;59523:147::-;;;;;;;;;;-1:-1:-1;59523:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;59634:19:0;;;59607:7;59634:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;59523:147;52868:111;;;;;;;;;;-1:-1:-1;52868:111:0;;;;;:::i;:::-;;:::i;38430:417::-;;;;;;;;;;;;;:::i;56804:1334::-;;;;;;;;;;-1:-1:-1;56804:1334:0;;;;;:::i;:::-;;:::i;50708:260::-;;;;;;;;;;-1:-1:-1;50708:260:0;;;;;:::i;:::-;;:::i;27103:33::-;;;;;;;;;;;;27134:2;27103:33;;37287;;;;;;;;;;;;;;;;58226:322;;;;;;;;;;;;;:::i;9656:236::-;;;;;;;;;;-1:-1:-1;9656:236:0;;;;;:::i;:::-;;:::i;48525:27::-;;;;;;;;;;;;;;;;53038:126;;;;;;;;;;-1:-1:-1;53038:126:0;;;;;:::i;:::-;;:::i;52607:84::-;;;;;;;;;;;;;:::i;59678:161::-;59755:4;59772:37;59781:10;59793:7;59802:6;59772:8;:37::i;:::-;-1:-1:-1;59827:4:0;59678:161;;;;;:::o;53172:127::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;;;;;;;;;53254:37:::1;:21;53283:7:::0;53254:28:::1;:37::i;:::-;;53172:127:::0;:::o;51227:103::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;51297:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;51297:25:0;;::::1;::::0;;;::::1;::::0;;51227:103::o;25049:78::-;25114:13;25041:1;25114:2;:13;:::i;:::-;25089:38;;:22;:38;:::i;:::-;25049:78;:::o;60152:392::-;60252:4;60269:36;60279:6;60287:9;60298:6;60269:9;:36::i;:::-;-1:-1:-1;;;;;60345:19:0;;60318:24;60345:19;;;:11;:19;;;;;;;;60365:10;60345:31;;;;;;;;60395:26;;;;60387:59;;;;-1:-1:-1;;;60387:59:0;;10400:2:1;60387:59:0;;;10382:21:1;10439:2;10419:18;;;10412:30;-1:-1:-1;;;10458:18:1;;;10451:50;10518:18;;60387:59:0;10372:170:1;60387:59:0;60459:55;60468:6;60476:10;60488:25;60507:6;60488:16;:25;:::i;:::-;60459:8;:55::i;:::-;-1:-1:-1;60532:4:0;;60152:392;-1:-1:-1;;;;60152:392:0:o;55340:160::-;9433:10;9422:7;9333;9360:6;-1:-1:-1;;;;;9360:6:0;;9295:79;9422:7;-1:-1:-1;;;;;9422:21:0;;9414:66;;;;-1:-1:-1;;;9414:66:0;;;;;;;:::i;:::-;55433:59:::1;55455:36;55476:15;55455:18:::0;:36:::1;:::i;:::-;55433:21;:59::i;:::-;55340:160:::0;:::o;49130:488::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;49211:14:::1;;49201:6;:24;;49193:33;;;::::0;::::1;;49255:6;49237:14;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;49274:21:0::1;::::0;-1:-1:-1;49312:1:0::1;49298:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;49298:16:0::1;;49274:40;;49335:14;;;;;;;;;-1:-1:-1::0;;;;;49335:14:0::1;-1:-1:-1::0;;;;;49335:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49325:4;49330:1;49325:7;;;;;;-1:-1:-1::0;;;49325:7:0::1;;;;;;;;;;;;;;:31;-1:-1:-1::0;;;;;49325:31:0::1;;;-1:-1:-1::0;;;;;49325:31:0::1;;;::::0;::::1;49391:4;49373;49378:1;49373:7;;;;;;-1:-1:-1::0;;;49373:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;49373:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;49409:14:::1;::::0;:155:::1;::::0;-1:-1:-1;;;49409:155:0;;:14;::::1;::::0;:65:::1;::::0;49482:6;;49409:155:::1;::::0;:14:::1;::::0;49512:4;;26459:42:::1;::::0;49548:15:::1;::::0;49409:155:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49580:30:0::1;::::0;;17194:25:1;;;26459:42:0::1;17250:2:1::0;17235:18;;17228:60;49580:30:0::1;::::0;-1:-1:-1;17167:18:1;;-1:-1:-1;49580:30:0::1;::::0;-1:-1:-1;17149:145:1;49580:30:0::1;;;;;;;;27657:1;49130:488:::0;:::o;48129:105::-;48192:34;48198:10;48210:15;48192:5;:34::i;48242:193::-;48299:7;48321:27;48343:4;48321:21;:27::i;:::-;48318:53;;;-1:-1:-1;;;;;;48357:14:0;;;;;:8;:14;;;;;;;48242:193::o;48318:53::-;-1:-1:-1;;;;;48413:14:0;;;;;;:8;:14;;;;;;48389:21;48422:4;48389:15;:21::i;:::-;:38;;;;:::i;48656:466::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;48722:14:::1;::::0;;48705::::1;48747:18:::0;;;;48722:14;48816:1:::1;48802:16;::::0;60579:205;60687:10;60661:4;60708:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;60708:32:0;;;;;;;;;;60661:4;;60678:76;;60699:7;;60708:45;;60743:10;;60708:45;:::i;55807:937::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;55951:20:::1;;55932:15;:39;;55924:68;;;;-1:-1:-1::0;;;55924:68:0::1;;;;;;;:::i;:::-;56058:22;::::0;56109:39:::1;::::0;-1:-1:-1;;;56109:39:0;;56142:4:::1;56109:39;::::0;::::1;4972:51:1::0;56058:22:0;;;::::1;-1:-1:-1::0;;;;;56058:22:0::1;::::0;56013:28:::1;::::0;56058:22;;56109:24:::1;::::0;4945:18:1;;56109:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56162:25;::::0;56092:56;;-1:-1:-1;56162:25:0::1;;56159:578;;;56236:40;25933:7;56236:15;:40;:::i;:::-;56213:20;:63:::0;56422:2:::1;56409:10;:6:::0;56418:1:::1;56409:10;:::i;:::-;:15;;;;:::i;:::-;56439:43;::::0;-1:-1:-1;;;56439:43:0;;26122:42:::1;56439:43;::::0;::::1;5208:51:1::0;5275:18;;;5268:34;;;56400:24:0;;-1:-1:-1;;;;;;56439:23:0;::::1;::::0;::::1;::::0;5181:18:1;;56439:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53254:37;53172:127:::0;:::o;56159:578::-:1;56682:43;::::0;-1:-1:-1;;;56682:43:0;;26122:42:::1;56682:43;::::0;::::1;5208:51:1::0;5275:18;;;5268:34;;;-1:-1:-1;;;;;56682:23:0;::::1;::::0;::::1;::::0;5181:18:1;;56682:43:0::1;5163:145:1::0;47973:111:0;48064:12;;48046:30;;:15;:30;:::i;:::-;48032:10;48022:21;;;;:9;:21;;;;;:54;47973:111::o;54718:147::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;54811:22:::1;:46:::0;;-1:-1:-1;;;;;54811:46:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;54811:46:0;;::::1;::::0;;;::::1;::::0;;54718:147::o;51703:613::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;51857:14:::1;51903:12:::0;51874:26:::1;51886:14:::0;51874:9;:26:::1;:::i;:::-;:41;;;;:::i;:::-;51857:58;;51934:8;:15;;51946:3;51934:15;51926:66;;;::::0;-1:-1:-1;;;51926:66:0;;11093:2:1;51926:66:0::1;::::0;::::1;11075:21:1::0;11132:2;11112:18;;;11105:30;11171:34;11151:18;;;11144:62;-1:-1:-1;;;11222:18:1;;;11215:36;11268:19;;51926:66:0::1;11065:228:1::0;51926:66:0::1;27134:2;52011:16;::::0;::::1;;::::0;::::1;::::0;:37:::1;;-1:-1:-1::0;27134:2:0::1;52031:17;::::0;::::1;;;52011:37;:62;;;;-1:-1:-1::0;27134:2:0::1;52052:21;::::0;::::1;;;52011:62;52003:99;;;::::0;-1:-1:-1;;;52003:99:0;;13672:2:1;52003:99:0::1;::::0;::::1;13654:21:1::0;13711:2;13691:18;;;13684:30;13750:27;13730:18;;;13723:55;13795:18;;52003:99:0::1;13644:175:1::0;52003:99:0::1;-1:-1:-1::0;52115:8:0::1;:20:::0;;::::1;52282:26:::0;;::::1;::::0;::::1;-1:-1:-1::0;;52253:18:0;;::::1;52115:20;52253:18;-1:-1:-1::0;;52187:26:0;;::::1;-1:-1:-1::0;;;52187:26:0::1;52253:18:::0;;;;-1:-1:-1;;52146:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;52115:20:0;;::::1;::::0;::::1;52146:30:::0;;;;-1:-1:-1;;52146:30:0;;;;;;;;;;::::1;52253:18:::0;;;;;;;;52226:16;::::1;52253:18:::0;;;;;;;::::1;52282:26;::::0;;;::::1;::::0;;51703:613::o;52750:110::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;52830:22:::1;:9;52844:7:::0;52830:13:::1;:22::i;46816:157::-:0;46857:15;;46920;25041:1;46920:2;:15;:::i;:::-;46905:12;;:30;;;;:::i;:::-;46949:15;25041:1;46949:2;:15;:::i;:::-;46937:9;;:27;;;;:::i;:::-;46898:67;;;;46816:157;;:::o;9508:140::-;9433:10;9422:7;9333;9360:6;-1:-1:-1;;;;;9360:6:0;;9295:79;9422:7;-1:-1:-1;;;;;9422:21:0;;9414:66;;;;-1:-1:-1;;;9414:66:0;;;;;;;:::i;:::-;9607:1:::1;9591:6:::0;;9570:40:::1;::::0;-1:-1:-1;;;;;9591:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9570:40:0;9607:1;;9570:40:::1;9638:1;9621:19:::0;;-1:-1:-1;;;;;;9621:19:0::1;::::0;;9508:140::o;38220:132::-;38286:4;38309:35;:20;38339:4;38309:29;:35::i;52393:144::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;52489:2:::1;52477:8;:14;;;;52469:23;;;::::0;::::1;;52504:14;:25:::0;;-1:-1:-1;;52504:25:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;52393:144::o;54507:143::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;54563:14:::1;:21:::0;;-1:-1:-1;;54563:21:0::1;;;::::0;;54618:24:::1;:15;54636:6;54618:24;:::i;:::-;54595:20;:47:::0;54507:143::o;50462:238::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;50541:16:::1;::::0;;50524:14:::1;50568:20:::0;;;;50614:36:::1;::::0;50541:16;;50524:14;26122:42:::1;::::0;50541:16;;50614:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50599:51;;;50669:4;50661:31;;;::::0;-1:-1:-1;;;50661:31:0;;15463:2:1;50661:31:0::1;::::0;::::1;15445:21:1::0;15502:2;15482:18;;;15475:30;-1:-1:-1;;;15521:18:1;;;15514:45;15576:18;;50661:31:0::1;15435:165:1::0;50173:281:0;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;50251:27:::1;50273:4;50251:21;:27::i;:::-;50243:36;;;::::0;::::1;;50290:33;:20;50318:4:::0;50290:27:::1;:33::i;:::-;-1:-1:-1::0;50432:14:0::1;::::0;-1:-1:-1;;;;;50416:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:30:::1;::::0;50432:14;50416:30:::1;:::i;:::-;-1:-1:-1::0;;;;;50390:23:0;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:56;50173:281::o;47442:::-;-1:-1:-1;;;;;47565:25:0;;47528:7;47565:25;;;:9;:25;;;;;;47615:15;47603:27;;47600:73;;-1:-1:-1;47661:1:0;;47442:281;-1:-1:-1;;47442:281:0:o;47600:73::-;47689:26;47700:15;47689:8;:26;:::i;:::-;47682:33;47442:281;-1:-1:-1;;;47442:281:0:o;58770:7::-;58763:14;;58691:94;:::o;51052:111::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;51130:16:::1;:25:::0;;-1:-1:-1;;51130:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51052:111::o;53404:929::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;53657:3:::1;53638:18;;:22;;;;:::i;:::-;53623:12;:37;53615:46;;;::::0;::::1;;53743:15;25041:1;53743:2;:15;:::i;:::-;53725:33;::::0;:15;:33:::1;:::i;:::-;53707:51:::0;-1:-1:-1;53799:15:0::1;25041:1;53799:2;:15;:::i;:::-;53784:30;::::0;:12;:30:::1;:::i;:::-;53769:45;;53881:26;25401:2;53910:40;;:18;;:40;;;;:::i;:::-;53881:69;;53961:23;25654:3;53987:37;;:18;;:37;;;;:::i;:::-;53961:63;;54065:18;54046:15;:37;;54037:104;;;::::0;-1:-1:-1;;;54037:104:0;;9297:2:1;54037:104:0::1;::::0;::::1;9279:21:1::0;9336:2;9316:18;;;9309:30;9375:34;9355:18;;;9348:62;-1:-1:-1;;;9426:18:1;;;9419:41;9477:19;;54037:104:0::1;9269:233:1::0;54037:104:0::1;54177:15;54161:12;:31;;54152:95;;;::::0;-1:-1:-1;;;54152:95:0;;11844:2:1;54152:95:0::1;::::0;::::1;11826:21:1::0;11883:2;11863:18;;;11856:30;11922:34;11902:18;;;11895:62;-1:-1:-1;;;11973:18:1;;;11966:38;12021:19;;54152:95:0::1;11816:230:1::0;54152:95:0::1;-1:-1:-1::0;;54260:12:0::1;:30:::0;;;;54301:9:::1;:24:::0;53404:929::o;60792:342::-;60935:10;60879:4;60923:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;60923:32:0;;;;;;;;;;60974:35;;;;60966:60;;;;-1:-1:-1;;;60966:60:0;;16159:2:1;60966:60:0;;;16141:21:1;16198:2;16178:18;;;16171:30;-1:-1:-1;;;16217:18:1;;;16210:42;16269:18;;60966:60:0;16131:162:1;60966:60:0;61039:65;61048:10;61060:7;61069:34;61088:15;61069:16;:34;:::i;61039:65::-;-1:-1:-1;61122:4:0;;60792:342;-1:-1:-1;;;60792:342:0:o;10857:304::-;10909:14;;-1:-1:-1;;;;;10909:14:0;10927:10;10909:28;10901:76;;;;-1:-1:-1;;;10901:76:0;;15059:2:1;10901:76:0;;;15041:21:1;15098:2;15078:18;;;15071:30;15137:34;15117:18;;;15110:62;-1:-1:-1;;;15188:18:1;;;15181:33;15231:19;;10901:76:0;15031:225:1;10901:76:0;11014:9;;10996:15;:27;10988:71;;;;-1:-1:-1;;;10988:71:0;;13313:2:1;10988:71:0;;;13295:21:1;13352:2;13332:18;;;13325:30;13391:32;13371:18;;;13364:60;13441:18;;10988:71:0;13285:180:1;10988:71:0;11104:14;;;11096:6;;11075:44;;-1:-1:-1;;;;;11104:14:0;;;;11096:6;;;;-1:-1:-1;;;;;;;;;;;11075:44:0;;11139:14;;;11130:23;;-1:-1:-1;;;;;;11130:23:0;-1:-1:-1;;;;;11139:14:0;;;11130:23;;;;;;10857:304::o;59348:167::-;59428:4;59445:40;59455:10;59467:9;59478:6;59445:9;:40::i;46441:224::-;46506:7;46546:20;;46528:15;:38;46525:114;;;46612:15;46589:20;;:38;;;;:::i;46525:114::-;-1:-1:-1;46656:1:0;;46441:224::o;46673:135::-;46720:7;46785:15;25041:1;46785:2;:15;:::i;:::-;46763:18;;25114:13;25041:1;25114:2;:13;:::i;:::-;25089:38;;:22;:38;:::i;:::-;46747:34;;;;:::i;:::-;46746:54;;;;:::i;49663:458::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;49856:2:::1;49824:29;:20;:27;:29::i;:::-;:34;49816:43;;;::::0;::::1;;49879:27;49901:4;49879:21;:27::i;:::-;49878:28;49870:37;;;::::0;::::1;;49918:20;49941:21;49957:4;49941:15;:21::i;:::-;50017:14;::::0;-1:-1:-1;;;;;49999:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;49918:44;;-1:-1:-1;49999:32:0::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;49973:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;:58;;;;50042:8:::1;:14:::0;;;;;:30;;50060:12;;49973:23;50042:30:::1;::::0;50060:12;;50042:30:::1;:::i;:::-;::::0;;;-1:-1:-1;50083:30:0::1;::::0;-1:-1:-1;50083:20:0::1;50108:4:::0;50083:24:::1;:30::i;51403:205::-:0;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;25781:10:::1;51494:34:::0;::::1;;51486:69;;;::::0;-1:-1:-1;;;51486:69:0;;15807:2:1;51486:69:0::1;::::0;::::1;15789:21:1::0;15846:2;15826:18;;;15819:30;15885:25;15865:18;;;15858:53;15928:18;;51486:69:0::1;15779:173:1::0;51486:69:0::1;51570:12;:30:::0;51403:205::o;55218:114::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;55292:25:::1;:32:::0;;-1:-1:-1;;55292:32:0::1;55320:4;55292:32;::::0;;55218:114::o;47233:140::-;47307:4;47330:35;:10;47350:14;47330:19;:35::i;10385:240::-;9433:10;9422:7;9333;9360:6;-1:-1:-1;;;;;9360:6:0;;9295:79;9422:7;-1:-1:-1;;;;;9422:21:0;;9414:66;;;;-1:-1:-1;;;9414:66:0;;;;;;;:::i;:::-;10473:6:::1;::::0;;;10456:23;;-1:-1:-1;;;;;;10456:23:0;;::::1;-1:-1:-1::0;;;;;10473:6:0;::::1;10456:23;::::0;;;10490:19:::1;::::0;;10532:29:::1;10550:11:::0;10532:15:::1;:29;:::i;:::-;10520:9;:41:::0;10614:1:::1;10598:6:::0;;10577:40:::1;::::0;-1:-1:-1;;;;;10598:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;10577:40:0;10614:1;;10577:40:::1;10385:240:::0;:::o;52868:111::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;52946:25:::1;:9;52963:7:::0;52946:16:::1;:25::i;38430:417::-:0;38512:18;;38478:7;;;38687:129;38707:29;:20;:27;:29::i;:::-;38703:1;:33;38687:129;;;38767:9;:37;38777:26;:20;38801:1;38777:23;:26::i;:::-;-1:-1:-1;;;;;38767:37:0;;;;;;;;;;;;-1:-1:-1;38767:37:0;;38757:47;;;;:::i;:::-;;-1:-1:-1;38738:3:0;;;;:::i;:::-;;;;38687:129;;;-1:-1:-1;38833:6:0;38430:417;-1:-1:-1;38430:417:0:o;56804:1334::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;56964:20:::1;;56945:15;:39;;56937:68;;;;-1:-1:-1::0;;;56937:68:0::1;;;;;;;:::i;:::-;57039:42;25933:7;57039:15;:42;:::i;:::-;57016:20;:65:::0;57137:22:::1;::::0;57188:39:::1;::::0;-1:-1:-1;;;57188:39:0;;57221:4:::1;57188:39;::::0;::::1;4972:51:1::0;57137:22:0;;;::::1;-1:-1:-1::0;;;;;57137:22:0::1;::::0;57092:28:::1;::::0;57137:22;;57188:24:::1;::::0;4945:18:1;;57188:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57241:25;::::0;57171:56;;-1:-1:-1;57241:25:0::1;;57238:103;;;57304:2;57291:10;:6:::0;57300:1:::1;57291:10;:::i;:::-;:15;;;;:::i;:::-;57282:24;;57238:103;57382:14;::::0;57351:54:::1;::::0;-1:-1:-1;;;57351:54:0;;-1:-1:-1;;;;;57382:14:0;;::::1;57351:54;::::0;::::1;5208:51:1::0;5275:18;;;5268:34;;;57351:22:0;;::::1;::::0;::::1;::::0;5181:18:1;;57351:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;57682:14:0::1;::::0;:216:::1;::::0;-1:-1:-1;;;57682:216:0;;57650:21:::1;::::0;-1:-1:-1;;;;;57682:14:0::1;::::0;:62:::1;::::0;:216:::1;::::0;57767:4:::1;::::0;57787:6;;57622:25:::1;::::0;;;57767:4;;57868:15:::1;::::0;57682:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;57909:21:0::1;57933:39;57955:17:::0;57933:21:::1;:39;:::i;:::-;57909:63;;57986:12;57983:148;;;58014:31;58031:13;58014:16;:31::i;:::-;57983:148;;;58106:13;58086:16;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;57983:148:0::1;27657:1;;;;56804:1334:::0;:::o;50708:260::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;50802:16:::1;;50792:6;:26;;50784:35;;;::::0;::::1;;50850:6;50830:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;50882:36:0::1;::::0;50868:9:::1;::::0;26122:42:::1;::::0;50906:6;;50882:36:::1;4807:14:1::0;58226:322:0;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;58313:20:::1;::::0;:29:::1;::::0;58336:6:::1;58313:29;:::i;:::-;58294:15;:48;;58286:77;;;;-1:-1:-1::0;;;58286:77:0::1;;;;;;;:::i;:::-;58397:42;25933:7;58397:15;:42;:::i;:::-;58374:20;:65:::0;58465:51:::1;::::0;58451:9:::1;::::0;26122:42:::1;::::0;58489:21:::1;::::0;58451:9;58465:51;58451:9;58465:51;58489:21;26122:42;58465:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58450:66;;;58535:4;58527:13;;;::::0;::::1;9656:236:::0;9433:10;9422:7;9333;9360:6;-1:-1:-1;;;;;9360:6:0;;9295:79;9422:7;-1:-1:-1;;;;;9422:21:0;;9414:66;;;;-1:-1:-1;;;9414:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9737:22:0;::::1;9729:73;;;::::0;-1:-1:-1;;;9729:73:0;;8890:2:1;9729:73:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;8968:34;8948:18;;;8941:62;-1:-1:-1;;;9019:18:1;;;9012:36;9065:19;;9729:73:0::1;8862:228:1::0;9729:73:0::1;9839:6;::::0;;9818:38:::1;::::0;-1:-1:-1;;;;;9818:38:0;;::::1;::::0;9839:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9818:38:0;::::1;9867:6;:17:::0;;-1:-1:-1;;;;;;9867:17:0::1;-1:-1:-1::0;;;;;9867:17:0;;;::::1;::::0;;;::::1;::::0;;9656:236::o;53038:126::-;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;53122:34:::1;:21;53148:7:::0;53122:25:::1;:34::i;52607:84::-:0;27604:19;27612:10;27604:7;:19::i;:::-;27596:50;;;;-1:-1:-1;;;27596:50:0;;;;;;;:::i;:::-;52663:20:::1;:18;:20::i;:::-;52607:84::o:0;21066:152::-;21136:4;21160:50;21165:3;-1:-1:-1;;;;;21185:23:0;;21160:4;:50::i;59845:299::-;-1:-1:-1;;;;;59938:19:0;;59930:49;;;;-1:-1:-1;;;59930:49:0;;9709:2:1;59930:49:0;;;9691:21:1;9748:2;9728:18;;;9721:30;-1:-1:-1;;;9767:18:1;;;9760:47;9824:18;;59930:49:0;9681:167:1;59930:49:0;-1:-1:-1;;;;;59998:21:0;;59990:49;;;;-1:-1:-1;;;59990:49:0;;11500:2:1;59990:49:0;;;11482:21:1;11539:2;11519:18;;;11512:30;-1:-1:-1;;;11558:18:1;;;11551:45;11613:18;;59990:49:0;11472:165:1;59990:49:0;-1:-1:-1;;;;;60052:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;60104:32;;16984:25:1;;;60104:32:0;;16957:18:1;60104:32:0;;;;;;;59845:299;;;:::o;27886:121::-;27939:4;9360:6;;-1:-1:-1;;;;;27962:15:0;;;9360:6;;27962:15;;:37;;-1:-1:-1;;;;;;27981:18:0;;26122:42;27981:18;27955:44;27886:121;-1:-1:-1;;27886:121:0:o;21394:158::-;21467:4;21491:53;21499:3;-1:-1:-1;;;;;21519:23:0;;21491:7;:53::i;29852:1528::-;-1:-1:-1;;;;;29948:20:0;;29940:51;;;;-1:-1:-1;;;29940:51:0;;7845:2:1;29940:51:0;;;7827:21:1;7884:2;7864:18;;;7857:30;-1:-1:-1;;;7903:18:1;;;7896:48;7961:18;;29940:51:0;7817:168:1;29940:51:0;-1:-1:-1;;;;;30010:23:0;;30002:52;;;;-1:-1:-1;;;30002:52:0;;10055:2:1;30002:52:0;;;10037:21:1;10094:2;10074:18;;;10067:30;-1:-1:-1;;;10113:18:1;;;10106:46;10169:18;;30002:52:0;10027:166:1;30002:52:0;30147:15;30166:26;:9;30185:6;30166:18;:26::i;:::-;:59;;;-1:-1:-1;30196:29:0;:9;30215;30196:18;:29::i;:::-;30147:79;-1:-1:-1;30325:23:0;-1:-1:-1;;;;;30352:23:0;;30370:4;30352:23;;:53;;-1:-1:-1;;;;;;30379:26:0;;30400:4;30379:26;30352:53;30540:14;;30605:19;;30325:81;;-1:-1:-1;;;;;;30540:14:0;;;;30508:21;;30595:29;;;-1:-1:-1;;;30605:19:0;;;;30595:29;:59;;;;;30641:13;-1:-1:-1;;;;;30628:26:0;:9;-1:-1:-1;;;;;30628:26:0;;30595:59;30594:126;;;-1:-1:-1;30673:19:0;;-1:-1:-1;;;;;30660:32:0;;;-1:-1:-1;;;30673:19:0;;;;30660:32;:59;;;;;30706:13;-1:-1:-1;;;;;30696:23:0;:6;-1:-1:-1;;;;;30696:23:0;;30660:59;30846:19;;30566:155;;-1:-1:-1;30823:10:0;;-1:-1:-1;;;;;30836:29:0;;;-1:-1:-1;;;30846:19:0;;;;30836:29;;:56;;;30879:13;-1:-1:-1;;;;;30869:23:0;:6;-1:-1:-1;;;;;30869:23:0;;30836:56;30930:19;;30823:69;;-1:-1:-1;30903:11:0;;-1:-1:-1;;;;;30917:32:0;;;-1:-1:-1;;;30930:19:0;;;;30917:32;;:62;;;30966:13;-1:-1:-1;;;;;30953:26:0;:9;-1:-1:-1;;;;;30953:26:0;;30917:62;30903:76;;31020:18;:41;;;;31042:19;31020:41;:55;;;;31065:10;31020:55;31017:356;;;31091:43;31108:6;31116:9;31127:6;31091:16;:43::i;:::-;31017:356;;;31253:14;;;;;;;31245:49;;;;-1:-1:-1;;;31245:49:0;;12614:2:1;31245:49:0;;;12596:21:1;12653:2;12633:18;;;12626:30;12692:25;12672:18;;;12665:53;12735:18;;31245:49:0;12586:173:1;31245:49:0;31309:52;31324:6;31331:9;31341:6;31348:5;31354:6;31309:14;:52::i;:::-;29852:1528;;;;;;;;;:::o;55508:234::-;55666:20;;55650:13;:36;55642:45;;;;;41937:1215;42018:14;;-1:-1:-1;;;42018:14:0;;;;42017:15;42009:24;;;;;;42044:14;:21;;-1:-1:-1;;;;42044:21:0;-1:-1:-1;;;42044:21:0;;;;42104:27;42126:4;42104:21;:27::i;:::-;42101:507;;;-1:-1:-1;;;;;;42220:14:0;;;;;;:8;:14;;;;;;;42249:18;;;42101:507;;;42310:17;42328:21;42344:4;42328:15;:21::i;:::-;-1:-1:-1;;;;;42460:15:0;;;;;;:9;:15;;;;;;42443:14;;42310:39;;-1:-1:-1;42443:32:0;;;:::i;:::-;-1:-1:-1;;;;;42417:23:0;;;;;;:17;:23;;;;;;;;:58;;;;42537:8;:14;;;;:26;;42554:9;;42537:26;:::i;:::-;-1:-1:-1;;;;;42578:14:0;;42595:1;42578:14;;;:8;:14;;;;;:18;42528:35;-1:-1:-1;;42101:507:0;42623:11;42620:110;;-1:-1:-1;;42675:14:0;:22;;-1:-1:-1;;;;42675:22:0;;;-1:-1:-1;41937:1215:0:o;42620:110::-;42758:6;42742:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;42799:16:0;;;42813:1;42799:16;;;;;;;;42775:21;;42799:16;;;;;;;;-1:-1:-1;;42836:14:0;;:21;;;-1:-1:-1;;;42836:21:0;;;;42775:40;;-1:-1:-1;;;;;;42836:14:0;;;;:19;;-1:-1:-1;42836:21:0;;;;;;;;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42826:4;42831:1;42826:7;;;;;;-1:-1:-1;;;42826:7:0;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;42826:31:0;;;-1:-1:-1;;;;;42826:31:0;;;;;42884:15;42874:4;42879:1;42874:7;;;;;;-1:-1:-1;;;42874:7:0;;;;;;;;;-1:-1:-1;;;;;42874:25:0;;;:7;;;;;;;;;:25;42912:14;;:149;;-1:-1:-1;;;42912:149:0;;:14;;;:65;;42985:6;;42912:149;;:14;;43015:4;;43030;;43045:15;;42912:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43087:24:0;;;17194:25:1;;;-1:-1:-1;;;;;17255:32:1;;17250:2;17235:18;;17228:60;43087:24:0;;-1:-1:-1;17167:18:1;;-1:-1:-1;43087:24:0;;-1:-1:-1;17149:145:1;43087:24:0;;;;;;;;-1:-1:-1;;43122:14:0;:22;;-1:-1:-1;;;;43122:22:0;;;-1:-1:-1;;41937:1215:0:o;40443:427::-;-1:-1:-1;;;;;40564:17:0;;40506:7;40564:17;;;:9;:17;;;;;;40547:14;;40506:7;;40547:34;;;:::i;:::-;-1:-1:-1;;;;;40744:25:0;;;;;;:17;:25;;;;;;40526:55;;-1:-1:-1;40733:36:0;;40730:49;;;-1:-1:-1;40778:1:0;;40443:427;-1:-1:-1;;40443:427:0:o;40730:49::-;-1:-1:-1;;;;;40811:25:0;;;;;;:17;:25;;;;;;-1:-1:-1;;;37095:5:0;40798:38;;:10;:38;:::i;:::-;40797:65;;;;:::i;21638:167::-;-1:-1:-1;;;;;21772:23:0;;21718:4;18447:19;;;:12;;;:19;;;;;;:24;;21742:55;18350:129;21891:117;21954:7;21981:19;21989:3;18648:18;;18565:109;22352:158;22426:7;22477:22;22481:3;22493:5;22477:3;:22::i;40940:887::-;41075:14;;41037:22;;41093:3;;41063:26;;41075:14;;41063:9;:26;:::i;:::-;41062:34;;;;:::i;:::-;41037:59;-1:-1:-1;41107:20:0;41130:19;41147:2;41037:59;41130:19;:::i;:::-;41107:42;-1:-1:-1;41160:30:0;41107:42;41160:30;;:::i;:::-;;-1:-1:-1;41201:14:0;41218:26;41160:30;41218:9;:26;:::i;:::-;41201:43;;41276:14;41256:16;;:34;;;;;;;:::i;:::-;;;;;;;;41318:12;41300:14;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;41347:10:0;;41343:477;;41396:6;41374:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;41417:19:0;;-1:-1:-1;41437:17:0;:15;:17::i;:::-;41417:37;-1:-1:-1;41548:16:0;41544:265;;41605:6;41585:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;41544:265:0;;-1:-1:-1;41544:265:0;;41781:11;41746:31;-1:-1:-1;;;41746:6:0;:31;:::i;:::-;41745:47;;;;:::i;:::-;41726:14;;:67;;;;;;;:::i;41343:477::-;40940:887;;;;:::o;43680:1665::-;43428:27;:34;;-1:-1:-1;;43428:34:0;43458:4;43428:34;;;43784:4:::1;43428:27:::0;43766:24;;;:9:::1;:24;::::0;;;;;43833:11:::1;::::0;43766:24;;43428:27;43819:25:::1;::::0;-1:-1:-1;;;43833:11:0;::::1;43428:34:::0;43833:11;;::::1;::::0;43819:13;;::::1;;:25;:::i;:::-;43801:43;;;;43855:19;43877:9;;43855:31;;44017:11;43999:15;:29;:46;;;-1:-1:-1::0;44032:13:0::1;::::0;::::1;::::0;43999:46:::1;43996:83;;;44061:7;;;;;43996:83;44209:13;::::0;44166:25:::1;::::0;44194:40:::1;::::0;::::1;::::0;44195:27:::1;::::0;44209:13;;::::1;;;44195:11:::0;:27:::1;:::i;:::-;44194:40;;;;:::i;:::-;44166:68:::0;-1:-1:-1;44245:25:0::1;44273:31;44166:68:::0;44273:11;:31:::1;:::i;:::-;44245:59:::0;-1:-1:-1;44365:16:0::1;44384:21;44404:1;44384:17:::0;:21:::1;:::i;:::-;44365:40:::0;-1:-1:-1;44416:19:0::1;44438:28;44365:40:::0;44438:17;:28:::1;:::i;:::-;44416:50:::0;-1:-1:-1;44549:17:0::1;44569:31;44583:17:::0;44416:50;44569:31:::1;:::i;:::-;44549:51:::0;-1:-1:-1;44715:21:0::1;44747:27;44549:51:::0;44747:16:::1;:27::i;:::-;44785:14;44803:41;44827:17:::0;44803:21:::1;:41;:::i;:::-;44785:60:::0;-1:-1:-1;44945:14:0::1;44987:9:::0;44963:20:::1;44972:11:::0;44785:60;44963:20:::1;:::i;:::-;44962:34;;;;:::i;:::-;44945:51;;45007:31;45021:8;45031:6;45007:13;:31::i;:::-;45161:21;45186:41;45210:17:::0;45186:21:::1;:41;:::i;:::-;45161:67;;45306:31;45323:13;45306:16;:31::i;:::-;43473:1;;;;;;;;;;;;;43485:27:::0;:35;;-1:-1:-1;;43485:35:0;;;43680:1665::o;16121:414::-;16184:4;18447:19;;;:12;;;:19;;;;;;16201:327;;-1:-1:-1;16244:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;16427:18;;16405:19;;;:12;;;:19;;;;;;:40;;;;16460:11;;16201:327;-1:-1:-1;16511:5:0;16504:12;;16711:1553;16777:4;16916:19;;;:12;;;:19;;;;;;16952:15;;16948:1309;;17314:21;17338:14;17351:1;17338:10;:14;:::i;:::-;17387:18;;17314:38;;-1:-1:-1;17367:17:0;;17387:22;;17408:1;;17387:22;:::i;:::-;17367:42;;17654:17;17674:3;:11;;17686:9;17674:22;;;;;;-1:-1:-1;;;17674:22:0;;;;;;;;;;;;;;;;;17654:42;;17820:9;17791:3;:11;;17803:13;17791:26;;;;;;-1:-1:-1;;;17791:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;17897:23;;;:12;;;:23;;;;;;:36;;;18058:17;;17897:3;;18058:17;;;-1:-1:-1;;;18058:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;18153:3;:12;;:19;18166:5;18153:19;;;;;;;;;;;18146:26;;;18196:4;18189:11;;;;;;;;16948:1309;18240:5;18233:12;;;;;35855:431;-1:-1:-1;;;;;35974:17:0;;35950:21;35974:17;;;:9;:17;;;;;;36010:23;;;;36002:60;;;;-1:-1:-1;;;36002:60:0;;8537:2:1;36002:60:0;;;8519:21:1;8576:2;8556:18;;;8549:30;-1:-1:-1;;;8595:18:1;;;8588:54;8659:18;;36002:60:0;8509:174:1;36002:60:0;36118:28;36131:6;36139;36118:12;:28::i;:::-;36199;36209:9;36220:6;36199:9;:28::i;:::-;36261:9;-1:-1:-1;;;;;36245:33:0;36254:6;-1:-1:-1;;;;;36245:33:0;;36271:6;36245:33;;;;16984:25:1;;16972:2;16957:18;;16939:76;36245:33:0;;;;;;;;35855:431;;;;:::o;32386:3407::-;-1:-1:-1;;;;;32529:20:0;;;32502:24;32529:20;;;:9;:20;;;;;;;32584:17;;;;;;;;32620:23;;;;32612:60;;;;-1:-1:-1;;;32612:60:0;;8537:2:1;32612:60:0;;;8519:21:1;8576:2;8556:18;;;8549:30;-1:-1:-1;;;8595:18:1;;;8588:54;8659:18;;32612:60:0;8509:174:1;32612:60:0;32685:9;32708:6;32705:1766;;;32734:38;:21;32765:6;32734:30;:38::i;:::-;32730:422;;-1:-1:-1;;;;;32917:17:0;;;;;;:9;:17;;;;;;32938:15;-1:-1:-1;32917:36:0;;:56;;-1:-1:-1;32957:16:0;;;;;;;32917:56;32909:86;;;;-1:-1:-1;;;32909:86:0;;16500:2:1;32909:86:0;;;16482:21:1;16539:2;16519:18;;;16512:30;-1:-1:-1;;;16558:18:1;;;16551:48;16616:18;;32909:86:0;16472:168:1;32909:86:0;33124:12;;33106:30;;:15;:30;:::i;:::-;-1:-1:-1;;;;;33086:17:0;;;;;;:9;:17;;;;;:50;32730:422;33297:9;;33287:6;:19;;33279:46;;;;-1:-1:-1;;;33279:46:0;;10749:2:1;33279:46:0;;;10731:21:1;10788:2;10768:18;;;10761:30;-1:-1:-1;;;10807:18:1;;;10800:45;10862:18;;33279:46:0;10721:165:1;33279:46:0;-1:-1:-1;33346:8:0;;;;;;;32705:1766;;;33377:5;33374:1097;;;33526:12;;33497:25;33516:6;33497:16;:25;:::i;:::-;:41;;33489:69;;;;-1:-1:-1;;;33489:69:0;;14026:2:1;33489:69:0;;;14008:21:1;14065:2;14045:18;;;14038:30;-1:-1:-1;;;14084:18:1;;;14077:46;14140:18;;33489:69:0;13998:166:1;33489:69:0;-1:-1:-1;33579:7:0;;;;33374:1097;;;33828:15;25041:1;33828:2;:15;:::i;:::-;33818:6;:25;33815:65;;33845:35;33851:6;26578:42;33845:5;:35::i;:::-;34023:12;;33994:25;34013:6;33994:16;:25;:::i;:::-;:41;;33986:69;;;;-1:-1:-1;;;33986:69:0;;14371:2:1;33986:69:0;;;14353:21:1;14410:2;14390:18;;;14383:30;-1:-1:-1;;;14429:18:1;;;14422:46;14485:18;;33986:69:0;14343:166:1;33986:69:0;34287:38;:21;34318:6;34287:30;:38::i;:::-;34283:143;;-1:-1:-1;;;;;34352:17:0;;;;;;:9;:17;;;;;;34373:15;-1:-1:-1;34352:36:0;;:56;;-1:-1:-1;34392:16:0;;;;;;;34352:56;34344:82;;;;-1:-1:-1;;;34344:82:0;;14716:2:1;34344:82:0;;;14698:21:1;14755:2;14735:18;;;14728:30;-1:-1:-1;;;14774:18:1;;;14767:44;14828:18;;34344:82:0;14688:164:1;34344:82:0;-1:-1:-1;34447:12:0;;;;;;;33374:1097;34804:19;;-1:-1:-1;;;;;34794:29:0;;;-1:-1:-1;;;34804:19:0;;;;34794:29;;;;34793:54;;-1:-1:-1;34830:16:0;;;;34829:17;34793:54;:88;;;;-1:-1:-1;34853:27:0;;;;34852:28;34793:88;:98;;;;;34885:6;34793:98;34790:136;;;34906:20;:18;:20::i;:::-;34995:23;35021:36;35035:6;35043:3;35048:8;;;;;;;;;;;35021:13;:36::i;:::-;35230:13;;34995:62;;-1:-1:-1;35165:21:0;;35189:55;;35203:6;;35211:3;;35216:27;;35230:13;;;;;;;-1:-1:-1;;;35216:11:0;;;:27;:::i;:::-;35189:13;:55::i;:::-;35165:79;-1:-1:-1;35308:19:0;35340:31;35165:79;35340:15;:31;:::i;:::-;35330:42;;:6;:42;:::i;:::-;35308:64;;35430:27;35443:6;35450;35430:12;:27::i;:::-;35544:4;35526:24;;;;:9;:24;;;;;:41;;35554:13;;35526:24;:41;;35554:13;;35526:41;:::i;:::-;;;;;;;;35626:15;35604:18;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;35696:33:0;;-1:-1:-1;35706:9:0;35717:11;35696:9;:33::i;:::-;35763:9;-1:-1:-1;;;;;35747:38:0;35756:6;-1:-1:-1;;;;;35747:38:0;;35773:11;35747:38;;;;16984:25:1;;16972:2;16957:18;;16939:76;35747:38:0;;;;;;;;32386:3407;;;;;;;;;;;:::o;19018:204::-;19113:18;;19085:7;;19113:26;-1:-1:-1;19105:73:0;;;;-1:-1:-1;;;19105:73:0;;7442:2:1;19105:73:0;;;7424:21:1;7481:2;7461:18;;;7454:30;7520:34;7500:18;;;7493:62;-1:-1:-1;;;7571:18:1;;;7564:32;7613:19;;19105:73:0;7414:224:1;19105:73:0;19196:3;:11;;19208:5;19196:18;;;;;;-1:-1:-1;;;19196:18:0;;;;;;;;;;;;;;;;;19189:25;;19018:204;;;;:::o;45397:455::-;45490:14;;45458:56;;45475:4;;-1:-1:-1;;;;;45490:14:0;45507:6;45458:8;:56::i;:::-;45549:16;;;45563:1;45549:16;;;;;;;;45525:21;;45549:16;;;;;;;;;;-1:-1:-1;45549:16:0;45525:40;;45594:4;45576;45581:1;45576:7;;;;;;-1:-1:-1;;;45576:7:0;;;;;;;;;-1:-1:-1;;;;;45576:23:0;;;:7;;;;;;;;;;:23;;;;45620:14;;:21;;;-1:-1:-1;;;45620:21:0;;;;:14;;;;;:19;;:21;;;;;45576:7;;45620:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45610:4;45615:1;45610:7;;;;;;-1:-1:-1;;;45610:7:0;;;;;;;;;-1:-1:-1;;;;;45610:31:0;;;:7;;;;;;;;;:31;45654:14;;:190;;-1:-1:-1;;;45654:190:0;;:14;;;:65;;:190;;45734:6;;45654:14;;45771:4;;45798;;45818:15;;45654:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45397:455;;:::o;45981:397::-;46075:9;46063:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;46127:14:0;;46095:61;;46112:4;;-1:-1:-1;;;;;46127:14:0;46144:11;46095:8;:61::i;:::-;46167:14;;:203;;-1:-1:-1;;;46167:203:0;;-1:-1:-1;;;;;46167:14:0;;;;:30;;46205:9;;46167:203;;46238:4;;46258:11;;46167:14;;;;46238:4;;46344:15;;46167:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39663:644::-;-1:-1:-1;;;;;39800:15:0;;39780:17;39800:15;;;:9;:15;;;;;;:24;;39818:6;;39800:24;:::i;:::-;39780:44;;39840:27;39862:4;39840:21;:27::i;:::-;39837:104;;;-1:-1:-1;;;;;39882:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;39663:644:0:o;39837:104::-;39998:15;40016:21;40032:4;40016:15;:21::i;:::-;-1:-1:-1;;;;;40075:15:0;;;;;;:9;:15;;;;;:27;;;40186:14;;39998:39;;-1:-1:-1;40186:26:0;;40093:9;;40186:26;:::i;:::-;-1:-1:-1;;;;;40160:23:0;;;;;;:17;:23;;;;;;;;:52;;;;40273:8;:14;;;;;:25;;40291:7;;40160:23;40273:25;;40291:7;;40273:25;:::i;:::-;;;;-1:-1:-1;;;;;;39663:644:0:o;38942:639::-;-1:-1:-1;;;;;39076:15:0;;39056:17;39076:15;;;:9;:15;;;;;;:22;;39092:6;;39076:22;:::i;:::-;39056:42;;39114:27;39136:4;39114:21;:27::i;:::-;39111:104;;;-1:-1:-1;;;;;39156:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;38942:639:0:o;39111:104::-;39272:15;39290:21;39306:4;39290:15;:21::i;:::-;39272:39;;39412:9;39395:14;;:26;;;;:::i;:::-;-1:-1:-1;;;;;39369:23:0;;;;;;:17;:23;;;;;;;;:52;;;;39482:8;:14;;;;;:25;;39500:7;;39369:23;39482:25;;39500:7;;39482:25;:::i;:::-;;;;-1:-1:-1;;;;;;;;39546:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;38942:639:0:o;36341:156::-;36431:7;36484:5;36470:10;36459:21;;36466:3;36459:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;36458:31;;;;:::i;:::-;36451:38;36341:156;-1:-1:-1;;;;36341:156:0:o;14::1:-;80:20;;140:4;129:16;;119:27;;109:2;;160:1;157;150:12;109:2;61:109;;;:::o;175:257::-;234:6;287:2;275:9;266:7;262:23;258:32;255:2;;;308:6;300;293:22;255:2;352:9;339:23;371:31;396:5;371:31;:::i;437:261::-;507:6;560:2;548:9;539:7;535:23;531:32;528:2;;;581:6;573;566:22;528:2;618:9;612:16;637:31;662:5;637:31;:::i;703:398::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:2;;;853:6;845;838:22;800:2;897:9;884:23;916:31;941:5;916:31;:::i;:::-;966:5;-1:-1:-1;1023:2:1;1008:18;;995:32;1036:33;995:32;1036:33;:::i;:::-;1088:7;1078:17;;;790:311;;;;;:::o;1106:466::-;1183:6;1191;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:2;;;1273:6;1265;1258:22;1220:2;1317:9;1304:23;1336:31;1361:5;1336:31;:::i;:::-;1386:5;-1:-1:-1;1443:2:1;1428:18;;1415:32;1456:33;1415:32;1456:33;:::i;:::-;1210:362;;1508:7;;-1:-1:-1;;;1562:2:1;1547:18;;;;1534:32;;1210:362::o;1577:325::-;1645:6;1653;1706:2;1694:9;1685:7;1681:23;1677:32;1674:2;;;1727:6;1719;1712:22;1674:2;1771:9;1758:23;1790:31;1815:5;1790:31;:::i;:::-;1840:5;1892:2;1877:18;;;;1864:32;;-1:-1:-1;;;1664:238:1:o;1907:251::-;1963:6;2016:2;2004:9;1995:7;1991:23;1987:32;1984:2;;;2037:6;2029;2022:22;1984:2;2081:9;2068:23;2100:28;2122:5;2100:28;:::i;2163:255::-;2230:6;2283:2;2271:9;2262:7;2258:23;2254:32;2251:2;;;2304:6;2296;2289:22;2251:2;2341:9;2335:16;2360:28;2382:5;2360:28;:::i;2423:190::-;2482:6;2535:2;2523:9;2514:7;2510:23;2506:32;2503:2;;;2556:6;2548;2541:22;2503:2;-1:-1:-1;2584:23:1;;2493:120;-1:-1:-1;2493:120:1:o;2618:194::-;2688:6;2741:2;2729:9;2720:7;2716:23;2712:32;2709:2;;;2762:6;2754;2747:22;2709:2;-1:-1:-1;2790:16:1;;2699:113;-1:-1:-1;2699:113:1:o;2817:258::-;2885:6;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:2;;;2967:6;2959;2952:22;2914:2;-1:-1:-1;;2995:23:1;;;3065:2;3050:18;;;3037:32;;-1:-1:-1;2904:171:1:o;3080:316::-;3168:6;3176;3184;3237:2;3225:9;3216:7;3212:23;3208:32;3205:2;;;3258:6;3250;3243:22;3205:2;3292:9;3286:16;3276:26;;3342:2;3331:9;3327:18;3321:25;3311:35;;3386:2;3375:9;3371:18;3365:25;3355:35;;3195:201;;;;;:::o;3401:192::-;3458:6;3511:2;3499:9;3490:7;3486:23;3482:32;3479:2;;;3532:6;3524;3517:22;3479:2;3560:27;3577:9;3560:27;:::i;3598:545::-;3690:6;3698;3706;3714;3722;3730;3783:3;3771:9;3762:7;3758:23;3754:33;3751:2;;;3805:6;3797;3790:22;3751:2;3833:27;3850:9;3833:27;:::i;:::-;3823:37;;3879:36;3911:2;3900:9;3896:18;3879:36;:::i;:::-;3869:46;;3934:36;3966:2;3955:9;3951:18;3934:36;:::i;:::-;3924:46;;3989:36;4021:2;4010:9;4006:18;3989:36;:::i;:::-;3979:46;;4044:37;4076:3;4065:9;4061:19;4044:37;:::i;:::-;4034:47;;4100:37;4132:3;4121:9;4117:19;4100:37;:::i;:::-;4090:47;;3741:402;;;;;;;;:::o;4148:463::-;4201:3;4239:5;4233:12;4266:6;4261:3;4254:19;4292:4;4321:2;4316:3;4312:12;4305:19;;4358:2;4351:5;4347:14;4379:3;4391:195;4405:6;4402:1;4399:13;4391:195;;;4470:13;;-1:-1:-1;;;;;4466:39:1;4454:52;;4526:12;;;;4561:15;;;;4502:1;4420:9;4391:195;;;-1:-1:-1;4602:3:1;;4209:402;-1:-1:-1;;;;;4209:402:1:o;5313:607::-;-1:-1:-1;;;;;5672:15:1;;;5654:34;;5719:2;5704:18;;5697:34;;;;5762:2;5747:18;;5740:34;;;;5805:2;5790:18;;5783:34;;;;5854:15;;;5848:3;5833:19;;5826:44;5634:3;5886:19;;5879:35;;;;5603:3;5588:19;;5570:350::o;6117:510::-;6388:6;6377:9;6370:25;6431:3;6426:2;6415:9;6411:18;6404:31;6351:4;6452:57;6504:3;6493:9;6489:19;6481:6;6452:57;:::i;:::-;-1:-1:-1;;;;;6545:32:1;;;;6540:2;6525:18;;6518:60;-1:-1:-1;6609:2:1;6594:18;6587:34;6444:65;6360:267;-1:-1:-1;;6360:267:1:o;6632:603::-;6744:4;6773:2;6802;6791:9;6784:21;6834:6;6828:13;6877:6;6872:2;6861:9;6857:18;6850:34;6902:4;6915:140;6929:6;6926:1;6923:13;6915:140;;;7024:14;;;7020:23;;7014:30;6990:17;;;7009:2;6986:26;6979:66;6944:10;;6915:140;;;7073:6;7070:1;7067:13;7064:2;;;7143:4;7138:2;7129:6;7118:9;7114:22;7110:31;7103:45;7064:2;-1:-1:-1;7219:2:1;7198:15;-1:-1:-1;;7194:29:1;7179:45;;;;7226:2;7175:54;;6753:482;-1:-1:-1;;;6753:482:1:o;7990:340::-;8192:2;8174:21;;;8231:2;8211:18;;;8204:30;-1:-1:-1;;;8265:2:1;8250:18;;8243:46;8321:2;8306:18;;8164:166::o;12051:356::-;12253:2;12235:21;;;12272:18;;;12265:30;12331:34;12326:2;12311:18;;12304:62;12398:2;12383:18;;12225:182::o;12764:342::-;12966:2;12948:21;;;13005:2;12985:18;;;12978:30;-1:-1:-1;;;13039:2:1;13024:18;;13017:48;13097:2;13082:18;;12938:168::o;17299:582::-;17598:6;17587:9;17580:25;17641:6;17636:2;17625:9;17621:18;17614:34;17684:3;17679:2;17668:9;17664:18;17657:31;17561:4;17705:57;17757:3;17746:9;17742:19;17734:6;17705:57;:::i;:::-;-1:-1:-1;;;;;17798:32:1;;;;17793:2;17778:18;;17771:60;-1:-1:-1;17862:3:1;17847:19;17840:35;17697:65;17570:311;-1:-1:-1;;;17570:311:1:o;18868:128::-;18908:3;18939:1;18935:6;18932:1;18929:13;18926:2;;;18945:18;;:::i;:::-;-1:-1:-1;18981:9:1;;18916:80::o;19001:204::-;19039:3;19075:4;19072:1;19068:12;19107:4;19104:1;19100:12;19142:3;19136:4;19132:14;19127:3;19124:23;19121:2;;;19150:18;;:::i;:::-;19186:13;;19047:158;-1:-1:-1;;;19047:158:1:o;19210:217::-;19250:1;19276;19266:2;;-1:-1:-1;;;19301:31:1;;19355:4;19352:1;19345:15;19383:4;19308:1;19373:15;19266:2;-1:-1:-1;19412:9:1;;19256:171::o;19432:422::-;19521:1;19564:5;19521:1;19578:270;19599:7;19589:8;19586:21;19578:270;;;19658:4;19654:1;19650:6;19646:17;19640:4;19637:27;19634:2;;;19667:18;;:::i;:::-;19717:7;19707:8;19703:22;19700:2;;;19737:16;;;;19700:2;19816:22;;;;19776:15;;;;19578:270;;;19582:3;19496:358;;;;;:::o;19859:140::-;19917:5;19946:47;19987:4;19977:8;19973:19;19967:4;20053:5;20083:8;20073:2;;-1:-1:-1;20124:1:1;20138:5;;20073:2;20172:4;20162:2;;-1:-1:-1;20209:1:1;20223:5;;20162:2;20254:4;20272:1;20267:59;;;;20340:1;20335:130;;;;20247:218;;20267:59;20297:1;20288:10;;20311:5;;;20335:130;20372:3;20362:8;20359:17;20356:2;;;20379:18;;:::i;:::-;-1:-1:-1;;20435:1:1;20421:16;;20450:5;;20247:218;;20549:2;20539:8;20536:16;20530:3;20524:4;20521:13;20517:36;20511:2;20501:8;20498:16;20493:2;20487:4;20484:12;20480:35;20477:77;20474:2;;;-1:-1:-1;20586:19:1;;;20618:5;;20474:2;20665:34;20690:8;20684:4;20665:34;:::i;:::-;20735:6;20731:1;20727:6;20723:19;20714:7;20711:32;20708:2;;;20746:18;;:::i;:::-;20784:20;;20063:747;-1:-1:-1;;;20063:747:1:o;20815:168::-;20855:7;20921:1;20917;20913:6;20909:14;20906:1;20903:21;20898:1;20891:9;20884:17;20880:45;20877:2;;;20928:18;;:::i;:::-;-1:-1:-1;20968:9:1;;20867:116::o;20988:125::-;21028:4;21056:1;21053;21050:8;21047:2;;;21061:18;;:::i;:::-;-1:-1:-1;21098:9:1;;21037:76::o;21118:135::-;21157:3;-1:-1:-1;;21178:17:1;;21175:2;;;21198:18;;:::i;:::-;-1:-1:-1;21245:1:1;21234:13;;21165:88::o;21258:127::-;21319:10;21314:3;21310:20;21307:1;21300:31;21350:4;21347:1;21340:15;21374:4;21371:1;21364:15;21390:131;-1:-1:-1;;;;;21465:31:1;;21455:42;;21445:2;;21511:1;21508;21501:12;21526:118;21612:5;21605:13;21598:21;21591:5;21588:32;21578:2;;21634:1;21631;21624:12

Swarm Source

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