Contract 0x52438441073a33b6fcbc70fa3f3f334f2da19906 1

Contract Overview

Phenix Finance: PHNX Token
Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3a12f582faa5a922bc6997d4d80d83651a6a8245cbf9eafed6ffd641393efbccTransfer68690222023-02-08 12:40:2015 mins ago0x433e9b50dab4ce3a07e65416d09f68a3637c06a0 IN  Phenix Finance: PHNX Token0 CRO0.278614638141 4,817.571942346
0x4f1778b671723e969619562c27fd9912f2c43bc5a50d9bb368163c4230cd7276Approve68689922023-02-08 12:37:3117 mins ago0x902a92e5fad1e00eba103cdaf89d3ba6aecde0ee IN  Phenix Finance: PHNX Token0 CRO0.240998295985 4,983.93746222
0xf41b12dc943febc73360ea7576d4bb4cd6b13edd1a4f261307d1d4b7295846aaApprove68689812023-02-08 12:36:2819 mins ago0x902a92e5fad1e00eba103cdaf89d3ba6aecde0ee IN  Phenix Finance: PHNX Token0 CRO0.156102531308 4,994.481884771
0x20ff64e7b1135f341abfe2b8b03a23fda27b187b7cf6669750d35762e290bf5eRebase And Sync68685942023-02-08 12:00:0055 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.621323978133 4,816.091606333
0x2969f728cc18da47c4748f3001063bb9a12853ef091ee579c6c06cffa3974b3fRebase And Sync68679582023-02-08 11:00:001 hr 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672243719389 4,816.120412297
0x10307ede8aa58897b11e531fa461c51a3c191595f913baeb12cf23e2d8fd92cbRebase And Sync68673192023-02-08 9:59:562 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672247841229 4,816.149942178
0x6128929a930b1fe3d0b0663400dff41f313c7f8cc6a733ff0539cf7de272ef5cRebase And Sync68666822023-02-08 8:59:583 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.621335252727 4,816.178999516
0x6fd40825d7ca9868f2540037db4e2a6b0ee70f0c441364665be9f68d39900eddApprove68663422023-02-08 8:27:594 hrs 27 mins ago0xb6829150199a9a0314ae4fe20fbed5a7cfdab190 IN  Phenix Finance: PHNX Token0 CRO0.2430950
0x94ca10adf7b5dedc09166ff5cb273b22891af069c533c432dffe57ba6cdb6caaRebase And Sync68660442023-02-08 7:59:574 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672256018036 4,816.208522849
0x04fd27f1625643d84421a88e33b7910b783243007956838411d4e0254ae8fe14Approve68655902023-02-08 7:17:185 hrs 38 mins ago0xfdd8b57d61dafba80e249aa7f157eae2ecc31fd5 IN  Phenix Finance: PHNX Token0 CRO0.2341602757270
0xb594c837b89c6bafe12ec8f97d83b43def47eab422e055b76e42b47fd2c08164Rebase And Sync68654062023-02-08 6:59:595 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672260165374 4,816.238235406
0x62bbcb2306089ce7f47c9739400e0cf3e99797dcaf9ed253c2de62591010bab7Approve68649002023-02-08 6:12:226 hrs 43 mins ago0x9f049104fe8aa985730f1cc9052da982a977be13 IN  Phenix Finance: PHNX Token0 CRO0.234234746524 4,817.761503203
0x5684581658ef58588359fcc44b526f0034d983afba327ef7f167ef5d09a7dfc1Rebase And Sync68647682023-02-08 5:59:576 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672264280864 4,816.267719792
0xf5459bd01723f052e7ae678bcd33806d5446cdea9fd1c0672b7681e4c119cd26Rebase And Sync68641302023-02-08 5:00:007 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672268433822 4,816.297472614
0x48df57a75c1e694b0253930d6f6597f9f196aa1b4ca673b5cd51be9f5b99a7e7Rebase And Sync68634912023-02-08 3:59:588 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672272558035 4,816.327019495
0xc2add3e62efb739b5d37179272cc7c5eaa50ed7157e07306f1a6bb9cb43455c6Approve68628992023-02-08 3:04:209 hrs 51 mins ago0x043b5ceb78f028640cbc555b9e24c9d6232a6903 IN  Phenix Finance: PHNX Token0 CRO0.234239250949 4,817.85415064
0x811a82674e072b3b63d5a0df54597738eedfce51db1c12f46da5e444c22b06dfRebase And Sync68628532023-02-08 3:00:009 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.62135813554 4,816.356371916
0x3ea27f99c71683029909c16ee96e5b20085db28acd49a867e09e4c47f9a9fc60Rebase And Sync68622142023-02-08 1:59:5810 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672280756615 4,816.385756155
0x76b0adbbc3a3da60891bcfa7aa5dfef436940d4286dbe683de5303668ea13003Approve68618302023-02-08 1:23:5111 hrs 31 mins ago0xf326bdf3074e151216536d3d352f22bff653e14b IN  Phenix Finance: PHNX Token0 CRO0.2341687164010
0xc9ddc3731cec500b3c45ead885d9c87480882147a422a28aaab82afdf87424c3Approve68616252023-02-08 1:04:3511 hrs 50 mins ago0xf8ca7cbfecb7ccb8e2f99b10226c6ba3627f0f98 IN  Phenix Finance: PHNX Token0 CRO0.2341691754790
0x879a30f9986b197af79298fb4b4ba3a5c95f12ad488de2a39c786ff05f5bc92eRebase And Sync68615762023-02-08 0:59:5811 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672284841314 4,816.415019952
0xf1212597ff3577c7df965ae2cbb048f8abd1442f4b3feab17d0f9bace1decfe6Approve68612582023-02-08 0:30:0412 hrs 25 mins ago0x5c5dde2edf2a1e0a659b3f3418154676ea8d6b18 IN  Phenix Finance: PHNX Token0 CRO0.126840674626 4,816.429642183
0x06b62641cd5466eddc9952e2e3344ac3f24aa1bf45d3b8974e682046361ae072Approve68610282023-02-08 0:08:2712 hrs 47 mins ago0x6c1d8596f7741d053b068261834d8f76a85ac758 IN  Phenix Finance: PHNX Token0 CRO0.234243424231 4,817.939987073
0x9f748a3688978b9f20a096c83034f94e6aa05873b4182bc04c928459dbd770a3Rebase And Sync68609382023-02-07 23:59:5812 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672288907445 4,816.444150717
0x0b08bc85ddd4e45399a0add971ca15de82cabde75d190794db10c9ab7abad6efRebase And Sync68603012023-02-07 22:59:5613 hrs 55 mins ago0x5cdcc9059cfddcfe798b2f095532f45e8fd689f2 IN  Phenix Finance: PHNX Token0 CRO0.672292938656 4,816.473031308
[ Download CSV Export 

OVERVIEW

The Phenix Finance token at a base offers an extremely easy reward system via their token mechanism.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6e65f100c03c9c8ba67f7ebc9db93146cd15ad9d09252def70a5270b51abaf8a67911772023-02-03 10:30:495 days 2 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,008 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:5151 days 6 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,102.128863820965214676 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:5151 days 6 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router500.96766537316600667 CRO
0xa9a17b914212017491acb8365e4f6bea727fafdb41171dfefae4dd9bdfecd31e60860672022-12-19 6:07:5151 days 6 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,603.096529194131221346 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:1851 days 11 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,516.879456154077651671 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:1851 days 11 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router689.490661888217114395 CRO
0xf1871228d4d234c768ef859559baf1127d576e6d1daac2dfc95ef7823514617160829592022-12-19 1:15:1851 days 11 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token2,206.370118042294766066 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:1251 days 15 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,179.129351918467104641 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:1251 days 15 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router535.967887235666865745 CRO
0xe0df9deab790f37b21a87c0eb506381b0d8d9ad973557ca562143835bc797beb60807492022-12-18 21:47:1251 days 15 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,715.097239154133970386 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:3451 days 20 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,482.942916232926469302 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:3451 days 20 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router674.064961924057486046 CRO
0xd3d2b131af89a2644202a2fa2bbd3dbf603d3a66cb3f5d976ba955d371ca112560773142022-12-18 16:23:3451 days 20 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token2,157.007878156983955348 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:5551 days 21 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,357.736805165765499128 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:5551 days 21 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router617.153093257166135966 CRO
0x93decf448c7f4b684d16ee500316f0226f9499b04725f5d4b60438280701114560769892022-12-18 15:52:5551 days 21 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,974.889898422931635094 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:3851 days 21 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer2,136.483867292889197176 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:3851 days 21 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router971.129030587676907806 CRO
0xbafd335bbb116727259b842f1072fe7a594d3f1475aab95cbe98a6d86cfb123260768802022-12-18 15:42:3851 days 21 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token3,107.612897880566104982 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:0451 days 23 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer1,187.539878392236619311 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:0451 days 23 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router539.790853814653008777 CRO
0xe348bcf14e1682b27b9dc0fa6d30807dc3e8db015e130f5ba163aa17a24a573260753342022-12-18 13:17:0451 days 23 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,727.330732206889628088 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:3852 days 4 hrs ago Phenix Finance: PHNX TokenPhenix Finance: Deployer940.166598940960290856 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:3852 days 4 hrs ago Phenix Finance: PHNX Token Mad Meerkat Finance: Master Meerkat & Router427.34845406407285948 CRO
0x380deb4f07d18e51579f0ecb4a99af2c415cfbda8d6dea4bec6ba50ee1abf84e60719822022-12-18 8:01:3852 days 4 hrs ago Mad Meerkat Finance: Master Meerkat & Router Phenix Finance: PHNX Token1,367.515053005033150336 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PhenixFinance

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-10-11
*/

// File: contracts/InterfaceLP.sol

pragma solidity ^0.7.4;


interface InterfaceLP {
    function sync() external;
}

// File: contracts/SafeMathInt.sol

pragma solidity ^0.7.4;


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

// File: contracts/SafeMath.sol

pragma solidity ^0.7.4;


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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

// File: contracts/Ownable.sol

pragma solidity ^0.7.4;


contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

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

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

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/IVVSRouter01.sol

pragma solidity ^0.7.4;


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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

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

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

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

// File: contracts/IVVSRouter.sol

pragma solidity ^0.7.4;



interface IVVSRouter is IVVSRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File: contracts/IVVSFactory.sol

pragma solidity ^0.7.4;


interface IVVSFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// File: contracts/IERC20.sol

pragma solidity ^0.7.4;


interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

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

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

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

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

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

// File: contracts/ERC20Detailed.sol

pragma solidity ^0.7.4;



abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name,
        string memory symbol,
        uint8 decimals
    ) {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

// File: contracts/Phenix.sol

pragma solidity ^0.7.4;










contract PhenixFinance is ERC20Detailed, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    event Rebase(uint256 indexed totalSupply);

    address[] public pairAddresses;
    address public liquidityReceiver;
    address public phenixFundReserveReceiver;
    bool public initialDistributionFinished;

    mapping(address => bool) _allowTransfer;
    mapping(address => bool) _isFeeExempt;

    uint256 private constant FXP_BASE = 1000000;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;
    uint256 private constant REBASE_INTERVAL = 86400;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
        300 * 10**6 * 10**DECIMALS;

    uint256 public liquidityFee = 2;
    uint256 public phenixVaultFee = 8;
    uint256 public sellFee = 15;
    uint256 public totalFee = liquidityFee.add(phenixVaultFee);
    uint256 public feeDenominator = 100;

    uint256 public lastRebaseTimestamp = block.timestamp;
    uint256 public lastRebaseDelta = 0;
    uint256 public rebasePercentDelta = (18 * FXP_BASE) / 1000;

    bool public rebaseRX3Enabled = true;
    uint256 public rebaseRX3Multiplier = FXP_BASE;
    uint256 public rebaseMaxRX3Multiplier = FXP_BASE + FXP_BASE / 2;
    uint256 public rebaseRX3MultiplierStep = (1 * FXP_BASE) / 1000;

    IVVSRouter public router;
    bool public swapEnabled = true;
    uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000;
    bool inSwap;

    uint256 private constant TOTAL_GONS =
        MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => bool) public taxableAddress;
    mapping(address => bool) public authorizedRebaseAddress;

    constructor() ERC20Detailed("Phenix Finance", "PHNX", uint8(DECIMALS)) {
        router = IVVSRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);

        address _pairAddress = address(
            IVVSFactory(router.factory()).createPair(
                router.WETH(),
                address(this)
            )
        );

        liquidityReceiver = address(msg.sender);
        phenixFundReserveReceiver = address(msg.sender);

        _allowedFragments[address(this)][address(router)] = uint256(-1);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[address(msg.sender)] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[address(phenixFundReserveReceiver)] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[address(msg.sender)] = true;

        taxableAddress[_pairAddress] = true;
        pairAddresses.push(_pairAddress);
        authorizedRebaseAddress[address(msg.sender)] = true;

        emit Transfer(address(0x0), address(msg.sender), _totalSupply);
    }

    /**
     * @dev Swapping switch used to mitigate any calculation
     * issues during swapBack.
     */
    modifier noReentrancy() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier initialDistributionLock() {
        require(
            initialDistributionFinished ||
                isOwner() ||
                _allowTransfer[msg.sender],
            "Initial distirbution not finalized."
        );
        _;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    /**
     * @dev Returns the delta of the next rebase.
     * @return next rebase delta as uint256 value.
     */
    function getNextRebase(uint256 _timestamp) public view returns (uint256) {
        uint256 rebaseTimestampDelta = _timestamp - lastRebaseTimestamp;

        uint256 nextScaledRebaseIntervalPercentage = rebaseTimestampDelta
            .mul(FXP_BASE)
            .div(REBASE_INTERVAL);

        uint256 nextRebaseDelta = _totalSupply
            .mul(rebasePercentDelta)
            .div(FXP_BASE)
            .mul(nextScaledRebaseIntervalPercentage)
            .div(FXP_BASE);

        if (rebaseRX3Enabled == true) {
            nextRebaseDelta = nextRebaseDelta
                .mul(
                    rebaseRX3Multiplier < rebaseMaxRX3Multiplier
                        ? rebaseRX3Multiplier
                        : rebaseMaxRX3Multiplier
                )
                .div(FXP_BASE);
        }

        return nextRebaseDelta;
    }

    /**
     * @dev Rebases total token supply based on the getNextRebase()
     * return result. Rebase is capped when MAX_SUPPLY is reached.
     */
    function _rebase() internal {
        uint256 supplyDelta = getNextRebase(block.timestamp);
        _totalSupply = _totalSupply.add(uint256(supplyDelta));

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        lastRebaseDelta = supplyDelta;
        lastRebaseTimestamp = block.timestamp;
        rebaseRX3Multiplier = FXP_BASE;

        emit Rebase(_totalSupply);
    }

    /**
     * @dev Executes the internal _rebase() function and then
     * performs the sync() call on all applicable pairAddresses
     */
    function rebaseAndSync() external {
        require(
            authorizedRebaseAddress[msg.sender] == true,
            "Not authroized to execute rebase"
        );

        _rebase();

        for (uint256 i = 0; i < pairAddresses.length; i++) {
            if (taxableAddress[pairAddresses[i]] == true) {
                InterfaceLP(pairAddresses[i]).sync();
            }
        }
    }

    /**
     * @dev Sets the last rebase time to the current block
     * timestamp as means to reset the value.
     */
    function resetLastRebaseTimestamp() external {
        require(
            authorizedRebaseAddress[msg.sender] == true,
            "Not authroized to execute this function."
        );

        lastRebaseTimestamp = block.timestamp;
    }

    /**
     * @dev Returns total token supply. Overrides ERC-20
     * totalSupply() function to return elastic supply.
     */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Transfers amount tokens to an address.
     * @param to Receiver of the transfered tokens.
     * @param value Amount of tokens that are received.
     * @return true
     */
    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        initialDistributionLock
        returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Adds LP contract address and removes
     * fees from the given address. Added pair contract tested
     * sync() before adding to see if it is a pair address.
     * Addition will fail if sync() fails.
     * @param _address Update LP contract address.
     */
    function addLPAddress(address _address) external onlyOwner {
        InterfaceLP(_address).sync();

        for (uint256 i = 0; i < pairAddresses.length; i++) {
            require(pairAddresses[i] != _address, "Pair address already added");
        }

        pairAddresses.push(_address);
        taxableAddress[_address] = true;
    }

    /**
     * @dev Returns array of all LP Addresses
     * @return address[] Array of LP Addresses.
     **/
    function getLPAddresses() external view returns (address[] memory) {
        return pairAddresses;
    }

    /**
     * @dev Updates given address' taxable status.
     * @param _address Subject address of taxable state adjustment.
     * @param _status State if address should be taxed.
     */
    function setTaxableAddress(address _address, bool _status)
        external
        onlyOwner
    {
        taxableAddress[_address] = _status;
    }

    /**
     * @dev Updates given address' Authorized Rebase status.
     * @param _address Subject address of Authorized Rebase state adjustment.
     * @param _status State if address should be allowed call rebaseAndSync().
     */
    function setAuthorizedRebaseAddress(address _address, bool _status)
        external
        onlyOwner
    {
        authorizedRebaseAddress[_address] = _status;
    }

    /**
     * @dev Returns spender alloance of an owner address.
     * Overides ERC-20 allowance(address, address) function
     * to return allowed fragments.
     * @param owner Owner address of tokens.
     * @param spender Spender address of tokens.
     * @return uint256 Amount of allowed tokens for the spender to use.
     */
    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowedFragments[owner][spender];
    }

    /**
     * @dev Returns balance of given address. Overrides
     * ERC-20 balanceOf(address) to provide balance based
     * on holder gons and gonsPerFragment.
     * @param who Balance of address.
     * @return uint256 value of address balance.
     */
    function balanceOf(address who) external view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    /**
     * @dev Performs basic token transfer. Used as
     * internal function in _transferFrom(address,
     * address, uint256) function.
     * @param from sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param amount amount of tokens for receiver.
     * @return true.
     */
    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);
        return true;
    }

    /**
     * @dev Transfers token from sender address
     * to receiver address. Performs token supply
     * rebase provided it is acceptable. Executes
     * _baseTransfer(address, address, uint256) if
     * swap is in progress.
     * @param sender sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param amount amount of tokens for receiver.
     * @return true.
     */
    function _transferFrom(
        address sender,
        address to,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, to, amount);
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (_shouldSwapBack()) {
            _swapBack();
        }

        if (rebaseRX3Enabled == true) {
            rebaseRX3Multiplier = rebaseRX3Multiplier.add(
                rebaseRX3MultiplierStep
            );
        }

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = _shouldTakeFee(sender, to)
            ? _takeFee(sender, to, gonAmount)
            : gonAmount;
        _gonBalances[to] = _gonBalances[to].add(gonAmountReceived);

        emit Transfer(sender, to, gonAmountReceived.div(_gonsPerFragment));

        return true;
    }

    /**
     * @dev Transfers token from sender address
     * to receiver address. Overrides ERC-20
     * transferFrom(address, address, uint256) to
     * check value of allowed fragments that sender
     * can access from the owner (from address).
     * @param from sender address of transfer.
     * @param to receiver adddress of transfer.
     * @param value amount of tokens for receiver.
     * @return true.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][
                msg.sender
            ].sub(value, "Insufficient Allowance");
        }

        _transferFrom(from, to, value);
        return true;
    }

    /**
     * @dev Executes fee allocations and distributes tokens
     * to contract address, phenix vault receiver address, and
     * liquidity receiver address.
     */
    function _swapBack() internal noReentrancy {
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);
        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
        }

        (bool success, ) = payable(phenixFundReserveReceiver).call{
            value: address(this).balance
        }("");
    }

    /**
     * @dev Calculates swap fee and returns new allocation
     * of swap based on swap conditions. Calculate is based
     * on liquidity fee and phenix vault fee. Sell fee will also
     * be taken into consideration if receiver is pair address.
     * @return uint256 gonAmount that is transfered in the swap.
     */
    function _takeFee(
        address sender,
        address to,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _totalFee = totalFee;
        if (taxableAddress[to] == true) _totalFee = _totalFee.add(sellFee);

        uint256 feeAmount = gonAmount.mul(_totalFee).div(feeDenominator);

        _gonBalances[address(this)] = _gonBalances[address(this)].add(
            feeAmount
        );
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));

        return gonAmount.sub(feeAmount);
    }

    /**
     * @dev Decreases spender allowance of sender address.
     * @param spender Spender address.
     * @param subtractedValue Amount to reduce spender allowance by.
     * @return bool
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        initialDistributionLock
        returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /**
     * @dev Updates router address
     * @param _address address to set for the dex router
     */
    function updateRouter(address _address) external onlyOwner {
        require(address(router) != _address, "Router address already set");
        router = IVVSRouter(_address);
    }

    /**
     * @dev Increases spender allowance of sender address.
     * @param spender Spender address.
     * @param addedValue Amount to increase spender allowance by.
     * @return bool
     */
    function increaseAllowance(address spender, uint256 addedValue)
        external
        initialDistributionLock
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
            spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    /**
     * @dev Approves spender address to use sender tokens.
     * @param spender Spender address.
     * @param value Amount of tokens spender can access.
     * @return bool
     */
    function approve(address spender, uint256 value)
        external
        override
        initialDistributionLock
        returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Checks if given address is exempt from swap fees.
     * @param _addr Address to check current exemption status.
     * @return bool
     */
    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    /**
     * @dev Unlocks tokens and sets initialDistributedFinished
     * to true. Only callable from owner address.
     */
    function setInitialDistributionFinished() external onlyOwner {
        initialDistributionFinished = true;
    }

    /**
     * @dev Enables transfers for a specific address.
     * Only callable from owner address.
     * @param _addr Address to enable transfers.
     */
    function enableTransfer(address _addr) external onlyOwner {
        _allowTransfer[_addr] = true;
    }

    /**
     * @dev Sets given address to have exceptions from
     * swap fees. Only callable from owner address.
     * @param _addr Address to set fee exemptions.
     */
    function setFeeExempt(address _addr) external onlyOwner {
        _isFeeExempt[_addr] = true;
    }

    /**
     * @dev Checks if a sender (from) and receiver
     * (to) need swap fees applied in transfer. Used
     * in _transferFrom(address, address, uint256) internal
     * function. Should only apply when user is interacting with
     * the pair (to or from)
     * @param from Sender address of swap
     * @param to Receiver address of swap.
     * @return bool True if fees apply on transfer.
     */
    function _shouldTakeFee(address from, address to)
        internal
        view
        returns (bool)
    {
        return
            (taxableAddress[from] || taxableAddress[to]) &&
            (!_isFeeExempt[from] && !_isFeeExempt[to]);
    }

    /**
     * @dev Updates swap back settings.
     * @param _enabled bool value to determine of swap back is enabled.
     * @param _num uint256 value for the swap back threshhold
     * @param _denom uint256 value used for the threshold deminator
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num);
    }

    /**
     * @dev Updates RX3 Rebase settings.
     * @param _enabled bool value to determine of RX3 Protocol is enabled.
     * @param _rebaseMaxRX3Multiplier uint256 value for the max RX3 Multiplier
     * @param _rebaseRX3MultiplierStep uint256 value used for the RX3 Multiplier Step
     */
    function setRX3Settings(
        bool _enabled,
        uint256 _rebaseMaxRX3Multiplier,
        uint256 _rebaseRX3MultiplierStep
    ) external onlyOwner {
        rebaseRX3Enabled = _enabled;
        rebaseMaxRX3Multiplier = _rebaseMaxRX3Multiplier;
        rebaseRX3MultiplierStep = _rebaseRX3MultiplierStep;
    }

    /**
     * @dev Configures Rebase settings. Sets
     * RebasePercentDelta, and Accuracy.
     * @param _percentage value of rebase percent delta based on a daily interval (18)
     * @param _accuracy defines the value of the rebase delta percentage demoninator (1000)
     */
    function setRebaseSettings(uint256 _percentage, uint256 _accuracy)
        external
        onlyOwner
    {
        rebasePercentDelta = (_percentage * FXP_BASE) / _accuracy;
    }

    /**
     * @dev Check whether the a swap back can be performed.
     * @return bool, true if swapBack is allowed to execute.
     */
    function _shouldSwapBack() internal view returns (bool) {
        return
            taxableAddress[msg.sender] == false &&
            !inSwap &&
            swapEnabled &&
            _gonBalances[address(this)] >= gonSwapThreshold;
    }

    /**
     * @dev Returns current circulating token supply
     * @return uint256, value of total circulating supply.
     */
    function getCirculatingSupply() public view returns (uint256) {
        return
            (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(
                _gonsPerFragment
            );
    }

    function isNotInSwap() external view returns (bool) {
        return !inSwap;
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold.div(_gonsPerFragment);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _phenixFundReserveReceiver
    ) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        phenixFundReserveReceiver = _phenixFundReserveReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _phenixVaultFee,
        uint256 _sellFee,
        uint256 _feeDenominator
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        phenixVaultFee = _phenixVaultFee;
        sellFee = _sellFee;
        totalFee = liquidityFee.add(phenixVaultFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 4);
    }

    function emergencyRecoverETH() external onlyOwner {
        require(address(this).balance > 0, "No ETH to recover.");
        (bool success, ) = address(msg.sender).call{
            value: address(this).balance
        }("");
        require(success, "Failed to recover ETH.");
    }

    function emergencyRecoverToken(address _tokenAddress) external onlyOwner {
        require(
            IERC20(_tokenAddress).balanceOf(address(this)) > 0,
            "No tokens to recover."
        );
        IERC20(_tokenAddress).transfer(
            msg.sender,
            IERC20(_tokenAddress).balanceOf(address(this))
        );
    }

    receive() external payable {}
}

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":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":"uint256","name":"totalSupply","type":"uint256"}],"name":"Rebase","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"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addLPAddress","outputs":[],"stateMutability":"nonpayable","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedRebaseAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"emergencyRecoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"emergencyRecoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixFundReserveReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixVaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseMaxRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebasePercentDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3MultiplierStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLastRebaseTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IVVSRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedRebaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_phenixFundReserveReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_phenixVaultFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_rebaseMaxRX3Multiplier","type":"uint256"},{"internalType":"uint256","name":"_rebaseRX3MultiplierStep","type":"uint256"}],"name":"setRX3Settings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"uint256","name":"_accuracy","type":"uint256"}],"name":"setRebaseSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTaxableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxableAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026008556008600955600f600a55620000316009546008546200045460201b62001e6e1790919060201c565b600b556064600c5542600d556000600e55614650600f556010805460ff19166001179055620f42406011556216e3606012556103e86013556014805460ff60a01b1916600160a01b1790557e068db8bac710cb295e9e1b089a027525460aa64c2f60beb15a6764b6a2339c601555348015620000ac57600080fd5b50604080518082018252600e81526d5068656e69782046696e616e636560901b6020808301918252835180850190945260048452630a0909cb60e31b908401528151919291601291620001039160009190620005a7565b50815162000119906001906020850190620005a7565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506014805473145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031990911617908190556040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b158015620001ae57600080fd5b505afa158015620001c3573d6000803e3d6000fd5b505050506040513d6020811015620001da57600080fd5b5051601454604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200022957600080fd5b505afa1580156200023e573d6000803e3d6000fd5b505050506040513d60208110156200025557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b505160048054336001600160a01b031991821681179092556005805490911682179055306000908152601a602090815260408083206014546001600160a01b03168452825280832060001990556af8277896582678ac0000006017908155938352601982529091206a87b0b4d075b8302fffffff19908190559154929350620003649290620004b6811b62001ecf17901c565b6018556005546001600160a01b0390811660009081526007602090815260408083208054600160ff1991821681179092553085528285208054821683179055338086528386208054831684179055958716808652601b85528386208054831684179055600380548085019091557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055858552601c845282852080549091169091179055601754815190815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35062000653565b600082820183811015620004af576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000620004af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200050060201b60201c565b60008183620005905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005545781810151838201526020016200053a565b50505050905090810190601f168015620005825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200059d57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005df57600085556200062a565b82601f10620005fa57805160ff19168380011785556200062a565b828001600101855582156200062a579182015b828111156200062a5782518255916020019190600101906200060d565b50620006389291506200063c565b5090565b5b808211156200063857600081556001016200063d565b61298280620006636000396000f3fe60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e14610bd9578063f2fde38b14610c14578063f887ea4014610c47578063fff4348114610c5c57610381565b8063d1fce26414610b2b578063d439979014610b40578063d5938aac14610b73578063d780d4dc14610ba657610381565b8063bdb938e2116100dc578063bdb938e214610a70578063c851cc3214610aab578063c939a4f614610ade578063d088935814610af357610381565b8063b065406914610a1c578063b86a2fd714610a31578063bd94c8dd14610a4657610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610986578063a9059cbb146109b9578063a92558d0146109f2578063ab92c3f214610a0757610381565b806399e3b3bd146108fd578063a457c2d714610912578063a4b45c001461094b57610381565b80638da5cb5b116101ab5780638da5cb5b146108a95780638f32d59b146108be57806395d89b41146108d357806398118cb4146108e857610381565b8063784d20b11461083157806383b4ac681461086457806389e9616e1461087957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461077a57806370a08231146107b6578063715018a6146107e9578063749796a5146107fe57610381565b8063530ddf641461073b5780636d351d1a146107505780636ddd17131461076557610381565b8063395093511161028557806339509351146106735780634513e7d0146106ac5780634bfed05c146106c15780634c50855d146106d657610381565b80632d517fdc146105fb578063313ce567146106105780633751ed741461063b57610381565b806323b872dd116103185780632b112e49116102f25780632b112e49146105a75780632b14ca56146105bc5780632b28af1b146105d15780632be6937d146105e657610381565b806323b872dd146104f8578063264d26dd1461053b5780632abf77f51461056c57610381565b8063180b0d7e11610354578063180b0d7e1461049257806318160ddd146104b9578063186e2d77146104ce5780631df4ccfc146104e357610381565b806306fdde031461038657806307f594a314610410578063095ea7b31461044557610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610c86565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104436004803603602081101561043357600080fd5b50356001600160a01b0316610d1c565b005b34801561045157600080fd5b5061047e6004803603604081101561046857600080fd5b506001600160a01b038135169060200135610ef9565b604080519115158252519081900360200190f35b34801561049e57600080fd5b506104a7610fd4565b60408051918252519081900360200190f35b3480156104c557600080fd5b506104a7610fda565b3480156104da57600080fd5b50610443610fe0565b3480156104ef57600080fd5b506104a76110d4565b34801561050457600080fd5b5061047e6004803603606081101561051b57600080fd5b506001600160a01b038135811691602081013590911690604001356110da565b34801561054757600080fd5b506105506111b4565b604080516001600160a01b039092168252519081900360200190f35b34801561057857600080fd5b506104436004803603604081101561058f57600080fd5b506001600160a01b03813516906020013515156111c3565b3480156105b357600080fd5b506104a76111ff565b3480156105c857600080fd5b506104a7611288565b3480156105dd57600080fd5b506104a761128e565b3480156105f257600080fd5b50610443611294565b34801561060757600080fd5b506104a76112ba565b34801561061c57600080fd5b506106256112c0565b6040805160ff9092168252519081900360200190f35b34801561064757600080fd5b506104436004803603606081101561065e57600080fd5b508035151590602081013590604001356112c9565b34801561067f57600080fd5b5061047e6004803603604081101561069657600080fd5b506001600160a01b0381351690602001356112f4565b3480156106b857600080fd5b506104436113fa565b3480156106cd57600080fd5b506104a7611453565b3480156106e257600080fd5b506106eb611459565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561072757818101518382015260200161070f565b505050509050019250505060405180910390f35b34801561074757600080fd5b506104436114ba565b34801561075c57600080fd5b506104a76115f4565b34801561077157600080fd5b5061047e61160d565b34801561078657600080fd5b506104436004803603608081101561079d57600080fd5b508035906020810135906040810135906060013561161d565b3480156107c257600080fd5b506104a7600480360360208110156107d957600080fd5b50356001600160a01b0316611666565b3480156107f557600080fd5b5061044361168e565b34801561080a57600080fd5b506104436004803603602081101561082157600080fd5b50356001600160a01b03166116ee565b34801561083d57600080fd5b5061047e6004803603602081101561085457600080fd5b50356001600160a01b0316611723565b34801561087057600080fd5b5061047e611738565b34801561088557600080fd5b506104436004803603604081101561089c57600080fd5b5080359060200135611742565b3480156108b557600080fd5b50610550611769565b3480156108ca57600080fd5b5061047e61177d565b3480156108df57600080fd5b5061039b611793565b3480156108f457600080fd5b506104a76117f3565b34801561090957600080fd5b506105506117f9565b34801561091e57600080fd5b5061047e6004803603604081101561093557600080fd5b506001600160a01b038135169060200135611808565b34801561095757600080fd5b506104436004803603604081101561096e57600080fd5b506001600160a01b0381358116916020013516611964565b34801561099257600080fd5b50610443600480360360208110156109a957600080fd5b50356001600160a01b03166119a3565b3480156109c557600080fd5b5061047e600480360360408110156109dc57600080fd5b506001600160a01b038135169060200135611b03565b3480156109fe57600080fd5b506104a7611b9f565b348015610a1357600080fd5b506104a7611ba5565b348015610a2857600080fd5b506104a7611bab565b348015610a3d57600080fd5b506104a7611bb1565b348015610a5257600080fd5b506104a760048036036020811015610a6957600080fd5b5035611bb7565b348015610a7c57600080fd5b5061044360048036036040811015610a9357600080fd5b506001600160a01b0381351690602001351515611c4d565b348015610ab757600080fd5b5061044360048036036020811015610ace57600080fd5b50356001600160a01b0316611c89565b348015610aea57600080fd5b5061047e611d1f565b348015610aff57600080fd5b5061044360048036036060811015610b1657600080fd5b50803515159060208101359060400135611d28565b348015610b3757600080fd5b5061047e611d78565b348015610b4c57600080fd5b5061047e60048036036020811015610b6357600080fd5b50356001600160a01b0316611d88565b348015610b7f57600080fd5b5061044360048036036020811015610b9657600080fd5b50356001600160a01b0316611da6565b348015610bb257600080fd5b5061047e60048036036020811015610bc957600080fd5b50356001600160a01b0316611ddb565b348015610be557600080fd5b506104a760048036036040811015610bfc57600080fd5b506001600160a01b0381358116916020013516611df0565b348015610c2057600080fd5b5061044360048036036020811015610c3757600080fd5b50356001600160a01b0316611e1b565b348015610c5357600080fd5b50610550611e35565b348015610c6857600080fd5b5061055060048036036020811015610c7f57600080fd5b5035611e44565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b610d2461177d565b610d2d57600080fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d7c57600080fd5b505afa158015610d90573d6000803e3d6000fd5b505050506040513d6020811015610da657600080fd5b505111610df2576040805162461bcd60e51b81526020600482015260156024820152742737903a37b5b2b739903a37903932b1b7bb32b91760591b604482015290519081900360640190fd5b806001600160a01b031663a9059cbb33836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d6020811015610e7957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610eca57600080fd5b505af1158015610ede573d6000803e3d6000fd5b505050506040513d6020811015610ef457600080fd5b505050565b600554600090600160a01b900460ff1680610f175750610f1761177d565b80610f3157503360009081526006602052604090205460ff165b610f6c5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000818152601a602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600c5481565b60175490565b610fe861177d565b610ff157600080fd5b6000471161103b576040805162461bcd60e51b815260206004820152601260248201527127379022aa24103a37903932b1b7bb32b91760711b604482015290519081900360640190fd5b604051600090339047908381818185875af1925050503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50509050806110d1576040805162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932b1b7bb32b91022aa241760511b604482015290519081900360640190fd5b50565b600b5481565b6000826001600160a01b0381166110f057600080fd5b6001600160a01b0385166000908152601a602090815260408083203384529091529020546000191461119d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601a82528381203382529091529190912054611178918590611f11565b6001600160a01b0386166000908152601a602090815260408083203384529091529020555b6111a8858585611fa8565b50600195945050505050565b6004546001600160a01b031681565b6111cb61177d565b6111d457600080fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60185460196020527fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b25461dead60009081527fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc454909261128392909161127d9190611277906a87b0b4d075b8302fffffff199061210b565b9061210b565b90611ecf565b905090565b600a5481565b600e5481565b61129c61177d565b6112a557600080fd5b6005805460ff60a01b1916600160a01b179055565b60115481565b60025460ff1690565b6112d161177d565b6112da57600080fd5b6010805460ff191693151593909317909255601255601355565b600554600090600160a01b900460ff1680611312575061131261177d565b8061132c57503360009081526006602052604090205460ff165b6113675760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020546113959083611e6e565b336000818152601a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b336000908152601c602052604090205460ff16151560011461144d5760405162461bcd60e51b81526004018080602001828103825260288152602001806129256028913960400191505060405180910390fd5b42600d55565b600f5481565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611493575050505050905090565b336000908152601c602052604090205460ff161515600114611523576040805162461bcd60e51b815260206004820181905260248201527f4e6f742061757468726f697a656420746f206578656375746520726562617365604482015290519081900360640190fd5b61152b61214d565b60005b6003548110156110d157601b60006003838154811061154957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161515600114156115ec576003818154811061158857fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156115d357600080fd5b505af11580156115e7573d6000803e3d6000fd5b505050505b60010161152e565b6000611283601854601554611ecf90919063ffffffff16565b601454600160a01b900460ff1681565b61162561177d565b61162e57600080fd5b60088490556009839055600a8290556116478484611e6e565b600b55600c81905560048104600b541061166057600080fd5b50505050565b6018546001600160a01b0382166000908152601960205260408120549091610fce9190611ecf565b61169661177d565b61169f57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6116f661177d565b6116ff57600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b601c6020526000908152604090205460ff1681565b60165460ff161590565b61174a61177d565b61175357600080fd5b80620f424083028161176157fe5b04600f555050565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d125780601f10610ce757610100808354040283529160200191610d12565b60085481565b6005546001600160a01b031681565b600554600090600160a01b900460ff1680611826575061182661177d565b8061184057503360009081526006602052604090205460ff165b61187b5760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b336000908152601a602090815260408083206001600160a01b03871684529091529020548083106118cf57336000908152601a602090815260408083206001600160a01b03881684529091528120556118fe565b6118d9818461210b565b336000908152601a602090815260408083206001600160a01b03891684529091529020555b336000818152601a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61196c61177d565b61197557600080fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6119ab61177d565b6119b457600080fd5b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119ef57600080fd5b505af1158015611a03573d6000803e3d6000fd5b5050505060005b600354811015611a9b57816001600160a01b031660038281548110611a2b57fe5b6000918252602090912001546001600160a01b03161415611a93576040805162461bcd60e51b815260206004820152601a60248201527f50616972206164647265737320616c7265616479206164646564000000000000604482015290519081900360640190fd5b600101611a0a565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039093166001600160a01b0319909316831790556000918252601b6020526040909120805460ff19169091179055565b6000826001600160a01b038116611b1957600080fd5b600554600160a01b900460ff1680611b345750611b3461177d565b80611b4e57503360009081526006602052604090205460ff165b611b895760405162461bcd60e51b81526004018080602001828103825260238152602001806129026023913960400191505060405180910390fd5b611b94338585611fa8565b506001949350505050565b60135481565b60125481565b60095481565b600d5481565b600d54600090820381611bd46201518061127d84620f42406121e4565b90506000611c07620f424061127d84611c01620f424061127d600f546017546121e490919063ffffffff16565b906121e4565b60105490915060ff16151560011415611c4557611c42620f424061127d60125460115410611c3757601254611c3b565b6011545b84906121e4565b90505b949350505050565b611c5561177d565b611c5e57600080fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b611c9161177d565b611c9a57600080fd5b6014546001600160a01b0382811691161415611cfd576040805162461bcd60e51b815260206004820152601a60248201527f526f75746572206164647265737320616c726561647920736574000000000000604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b611d3061177d565b611d3957600080fd5b6014805460ff60a01b1916600160a01b85151502179055611d7082611c01836af8277896582678ac0000006000195b061990611ecf565b601555505050565b600554600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205460ff1690565b611dae61177d565b611db757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b601b6020526000908152604090205460ff1681565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b611e2361177d565b611e2c57600080fd5b6110d18161223d565b6014546001600160a01b031681565b60038181548110611e5457600080fd5b6000918252602090912001546001600160a01b0316905081565b600082820183811015611ec8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611ec883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b7565b60008184841115611fa05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f65578181015183820152602001611f4d565b50505050905090810190601f168015611f925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60165460009060ff1615611fc857611fc184848461231c565b9050611ec8565b6000611fdf601854846121e490919063ffffffff16565b9050611fe96123ae565b15611ff657611ff6612406565b60105460ff161515600114156120195760135460115461201591611e6e565b6011555b6001600160a01b03851660009081526019602052604090205461203c908261210b565b6001600160a01b0386166000908152601960205260408120919091556120628686612773565b61206c5781612077565b6120778686846127ff565b6001600160a01b03861660009081526019602052604090205490915061209d9082611e6e565b6001600160a01b03808716600081815260196020526040902092909255601854908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ee908590611ecf565b60408051918252519081900360200190a350600195945050505050565b6000611ec883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f11565b600061215842611bb7565b6017549091506121689082611e6e565b60178190556001600160801b031015612187576001600160801b036017555b6017546121a2906af8277896582678ac000000600019611d68565b601855600e81905542600d55620f42406011556017546040517fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d090600090a250565b6000826121f357506000610fce565b8282028284828161220057fe5b0414611ec85760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b6001600160a01b03811661225057600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836123065760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f65578181015183820152602001611f4d565b50600083858161231257fe5b0495945050505050565b600080612334601854846121e490919063ffffffff16565b6001600160a01b03861660009081526019602052604090205490915061235a908261210b565b6001600160a01b0380871660009081526019602052604080822093909355908616815220546123899082611e6e565b6001600160a01b03851660009081526019602052604090205550600190509392505050565b336000908152601b602052604081205460ff161580156123d1575060165460ff16155b80156123e65750601454600160a01b900460ff165b801561128357505060155430600090815260196020526040902054101590565b6016805460ff191660011790556018543060009081526019602052604081205490916124329190611ecf565b90506000612456600261127d600b5461127d600854876121e490919063ffffffff16565b90506000612464838361210b565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061249857fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156124ec57600080fd5b505afa158015612500573d6000803e3d6000fd5b505050506040513d602081101561251657600080fd5b505181518290600190811061252757fe5b6001600160a01b0392831660209182029290920181019190915260145460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b838110156125c15781810151838201526020016125a9565b505050509050019650505050505050600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506000612617824761210b90919063ffffffff16565b9050600061263d6126346002600854611ecf90919063ffffffff16565b600b549061210b565b9050600061265f600261127d8461127d600854886121e490919063ffffffff16565b9050861561270957601454600480546040805163f305d71960e01b81523093810193909352602483018b905260006044840181905260648401526001600160a01b0391821660848401524260a48401525192169163f305d71991849160c480830192606092919082900301818588803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b50505050506040513d606081101561270657600080fd5b50505b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b50506016805460ff1916905550505050505050505050565b6001600160a01b0382166000908152601b602052604081205460ff16806127b257506001600160a01b0382166000908152601b602052604090205460ff165b8015611ec857506001600160a01b03831660009081526007602052604090205460ff16158015611ec85750506001600160a01b031660009081526007602052604090205460ff1615919050565b600b546001600160a01b0383166000908152601b602052604081205490919060ff1615156001141561283c57600a54612839908290611e6e565b90505b600c546000906128509061127d86856121e4565b3060009081526019602052604090205490915061286d9082611e6e565b306000818152601960205260409020919091556018546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128bb908590611ecf565b60408051918252519081900360200190a36128d6848261210b565b969550505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea2646970667358221220cfa5b583fae8087fd05d9fbb5b60f35867f6610e4ab8b6455287b79474eb04b164736f6c63430007060033

Deployed ByteCode Sourcemap

11923:23291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34823:351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34823:351:0;-1:-1:-1;;;;;34823:351:0;;:::i;:::-;;29140:286;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29140:286:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13004:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18488:102;;;;;;;;;;;;;:::i;34525:290::-;;;;;;;;;;;;;:::i;12939:58::-;;;;;;;;;;;;;:::i;24118:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24118:457:0;;;;;;;;;;;;;;;;;:::i;12136:32::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12136:32:0;;;;;;;;;;;;;;20524:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20524:172:0;;;;;;;;;;:::i;33369:215::-;;;;;;;;;;;;;:::i;12905:27::-;;;;;;;;;;;;;:::i;13107:34::-;;;;;;;;;;;;;:::i;29854:114::-;;;;;;;;;;;;;:::i;13257:45::-;;;;;;;;;;;;;:::i;11755:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32029:325;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32029:325:0;;;;;;;;;;;;;;:::i;28496:439::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28496:439:0;;;;;;;;:::i;18100:247::-;;;;;;;;;;;;;:::i;13148:58::-;;;;;;;;;;;;;:::i;19813:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:406;;;;;;;;;;;;;:::i;33685:126::-;;;;;;;;;;;;;:::i;13481:30::-;;;;;;;;;;;;;:::i;34082:435::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34082:435:0;;;;;;;;;;;;;;;;;:::i;21515:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21515:138:0;-1:-1:-1;;;;;21515:138:0;;:::i;3290:126::-;;;;;;;;;;;;;:::i;30433:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30433:101:0;-1:-1:-1;;;;;30433:101:0;;:::i;14031:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14031:55:0;-1:-1:-1;;;;;14031:55:0;;:::i;33592:85::-;;;;;;;;;;;;;:::i;32649:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32649:185:0;;;;;;;:::i;3025:79::-;;;;;;;;;;;;;:::i;3190:92::-;;;;;;;;;;;;;:::i;11660:87::-;;;;;;;;;;;;;:::i;12827:31::-;;;;;;;;;;;;;:::i;12175:40::-;;;;;;;;;;;;;:::i;27349:629::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27349:629:0;;;;;;;;:::i;33819:255::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33819:255:0;;;;;;;;;;:::i;19344:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19344:346:0;-1:-1:-1;;;;;19344:346:0;;:::i;18799:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18799:248:0;;;;;;;;:::i;13379:62::-;;;;;;;;;;;;;:::i;13309:63::-;;;;;;;;;;;;;:::i;12865:33::-;;;;;;;;;;;;;:::i;13048:52::-;;;;;;;;;;;;;:::i;15888:869::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15888:869:0;;:::i;20123:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20123:154:0;;;;;;;;;;:::i;28098:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28098:184:0;-1:-1:-1;;;;;28098:184:0;;:::i;13215:35::-;;;;;;;;;;;;;:::i;31488:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31488:230:0;;;;;;;;;;;;;;:::i;12222:39::-;;;;;;;;;;;;;:::i;29600:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29600:113:0;-1:-1:-1;;;;;29600:113:0;;:::i;30141:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30141:105:0;-1:-1:-1;;;;;30141:105:0;;:::i;13978:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13978:46:0;-1:-1:-1;;;;;13978:46:0;;:::i;21048:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21048:192:0;;;;;;;;;;:::i;3424:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3424:109:0;-1:-1:-1;;;;;3424:109:0;;:::i;13450:24::-;;;;;;;;;;;;;:::i;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12099:30:0;;:::i;11569:83::-;11639:5;11632:12;;;;;;;;-1:-1:-1;;11632:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11606:13;;11632:12;;11639:5;;11632:12;;11639:5;11632:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;:::o;34823:351::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34978:1:::1;34936:13;-1:-1:-1::0;;;;;34929:31:0::1;;34969:4;34929:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;34929:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34929:46:0;:50:::1;34907:121;;;::::0;;-1:-1:-1;;;34907:121:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34907:121:0;;;;;;;;;;;;;::::1;;35046:13;-1:-1:-1::0;;;;;35039:30:0::1;;35084:10;35116:13;-1:-1:-1::0;;;;;35109:31:0::1;;35149:4;35109:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;35109:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35109:46:0;35039:127:::1;::::0;;-1:-1:-1;;;;;;35039:127:0::1;::::0;;;;;;-1:-1:-1;;;;;35039:127:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;35109:46:::1;::::0;35039:127;;;;;;;-1:-1:-1;35039:127:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;34823:351:0:o;29140:286::-;15470:27;;29276:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29316:10:::1;29298:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;29298:38:0;::::1;::::0;;;;;;;;;;:46;;;29360:36;;;;;;;29298:38;;29316:10;29360:36:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;29414:4:0::1;15648:1;29140:286:::0;;;;:::o;13004:35::-;;;;:::o;18488:102::-;18570:12;;18488:102;:::o;34525:290::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34618:1:::1;34594:21;:25;34586:56;;;::::0;;-1:-1:-1;;;34586:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34586:56:0;;;;;;;;;;;;;::::1;;34672:82;::::0;34654:12:::1;::::0;34680:10:::1;::::0;34718:21:::1;::::0;34654:12;34672:82;34654:12;34672:82;34718:21;34680:10;34672:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34653:101;;;34773:7;34765:42;;;::::0;;-1:-1:-1;;;34765:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34765:42:0;;;;;;;;;;;;;::::1;;3173:1;34525:290::o:0;12939:58::-;;;;:::o;24118:457::-;24261:4;24248:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;-1:-1:-1;;;;;24282:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24306:10:::1;24282:35:::0;;;;;;;;-1:-1:-1;;24282:50:0::1;24278:225;;24387:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;24387:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;24387:23:0;::::1;-1:-1:-1::0;24387:23:0;;;:17:::1;:23:::0;;;;;24429:10:::1;24387:67:::0;;;;;;;;;;:104:::1;::::0;24459:5;;24387:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;24349:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;24373:10:::1;24349:35:::0;;;;;;;:142;24278:225:::1;24515:30;24529:4;24535:2;24539:5;24515:13;:30::i;:::-;-1:-1:-1::0;24563:4:0::1;::::0;24118:457;-1:-1:-1;;;;;24118:457:0:o;12136:32::-;;;-1:-1:-1;;;;;12136:32:0;;:::o;20524:172::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20645:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:43;;-1:-1:-1;;20645:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20524:172::o;33369:215::-;33545:16;;33502:12;:18;;;;12546:42;33422:7;33478:18;;;;;33422:7;;33462:114;;33545:16;;33463:58;;33502:18;33463:34;;-1:-1:-1;;13652:54:0;33463:14;:34::i;:::-;:38;;:58::i;:::-;33462:64;;:114::i;:::-;33442:134;;33369:215;:::o;12905:27::-;;;;:::o;13107:34::-;;;;:::o;29854:114::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;29926:27:::1;:34:::0;;-1:-1:-1;;;;29926:34:0::1;-1:-1:-1::0;;;29926:34:0::1;::::0;;29854:114::o;13257:45::-;;;;:::o;11755:83::-;11821:9;;;;11755:83;:::o;32029:325::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32199:16:::1;:27:::0;;-1:-1:-1;;32199:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;32237:22:::1;:48:::0;32296:23:::1;:50:::0;32029:325::o;28496:439::-;15470:27;;28629:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28710:10:::1;28692:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28692:62:0;::::1;::::0;;;;;;;;:78:::1;::::0;28759:10;28692:66:::1;:78::i;:::-;28669:10;28651:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;28651:38:0;::::1;::::0;;;;;;;;;;:119;;;28786;;;;;;28651:38;;28786:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;28923:4:0::1;28496:439:::0;;;;:::o;18100:247::-;18202:10;18178:35;;;;:23;:35;;;;;;;;:43;;:35;:43;18156:133;;;;-1:-1:-1;;;18156:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:15;18302:19;:37;18100:247::o;13148:58::-;;;;:::o;19813:106::-;19862:16;19898:13;19891:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19891:20:0;;;;;;;;;;;;;;;;;;;;;;19813:106;:::o;17561:406::-;17652:10;17628:35;;;;:23;:35;;;;;;;;:43;;:35;:43;17606:125;;;;;-1:-1:-1;;;17606:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17744:9;:7;:9::i;:::-;17771;17766:194;17790:13;:20;17786:24;;17766:194;;;17836:14;:32;17851:13;17865:1;17851:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17851:16:0;17836:32;;;;;;;;;;;;;;;:40;;17851:16;17836:40;17832:117;;;17909:13;17923:1;17909:16;;;;;;;;;;;;;;;;;17897:36;;;-1:-1:-1;;;;;;17897:36:0;;;;-1:-1:-1;;;;;17909:16:0;;;;17897:34;;:36;;;;;;;;;;17909:16;;17897:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17832:117;17812:3;;17766:194;;33685:126;33738:7;33765:38;33786:16;;33765;;:20;;:38;;;;:::i;13481:30::-;;;-1:-1:-1;;;13481:30:0;;;;;:::o;34082:435::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34263:12:::1;:28:::0;;;34302:14:::1;:32:::0;;;34345:7:::1;:18:::0;;;34385:32:::1;34278:13:::0;34319:15;34385:16:::1;:32::i;:::-;34374:8;:43:::0;34428:14:::1;:32:::0;;;34507:1:::1;34445:15:::0;34490:18:::1;34479:8;;:29;34471:38;;;::::0;::::1;;34082:435:::0;;;;:::o;21515:138::-;21628:16;;-1:-1:-1;;;;;21606:17:0;;21579:7;21606:17;;;:12;:17;;;;;;21579:7;;21606:39;;:17;:21;:39::i;3290:126::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3371:6:::1;::::0;3352:26:::1;::::0;3371:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;3371:6:0::1;::::0;3352:26:::1;::::0;;;::::1;3389:6;:19:::0;;-1:-1:-1;;;;;;3389:19:0::1;::::0;;3290:126::o;30433:101::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30500:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:26;;-1:-1:-1;;30500:26:0::1;30522:4;30500:26;::::0;;30433:101::o;14031:55::-;;;;;;;;;;;;;;;:::o;33592:85::-;33663:6;;;;33662:7;33592:85;:::o;32649:185::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32817:9:::1;12398:7;32791:11;:22;32790:36;;;;;;32769:18;:57:::0;-1:-1:-1;;32649:185:0:o;3025:79::-;3090:6;;;;;-1:-1:-1;;;;;3090:6:0;;3025:79::o;3190:92::-;3268:6;;;;;-1:-1:-1;;;;;3268:6:0;3254:10;:20;;3190:92::o;11660:87::-;11732:7;11725:14;;;;;;;;-1:-1:-1;;11725:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11699:13;;11725:14;;11732:7;;11725:14;;11732:7;11725:14;;;;;;;;;;;;;;;;;;;;;;;;12827:31;;;;:::o;12175:40::-;;;-1:-1:-1;;;;;12175:40:0;;:::o;27349:629::-;15470:27;;27487:4;;-1:-1:-1;;;15470:27:0;;;;;:57;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1;15563:10:0;15548:26;;;;:14;:26;;;;;;;;15470:104;15448:189;;;;-1:-1:-1;;;15448:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:10:::1;27509:16;27528:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27528:38:0;::::1;::::0;;;;;;;;27581:27;;::::1;27577:237;;27643:10;27666:1;27625:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27625:38:0;::::1;::::0;;;;;;;:42;27577:237:::1;;;27741:61;:8:::0;27772:15;27741:12:::1;:61::i;:::-;27718:10;27700:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27700:38:0;::::1;::::0;;;;;;;:102;27577:237:::1;27852:10;27899:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27829:119:0;::::1;27899:38:::0;;;;;;;;;;;27829:119;;;;;;;;;27852:10;27829:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27966:4:0::1;::::0;27349:629;-1:-1:-1;;;27349:629:0:o;33819:255::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;33963:17:::1;:38:::0;;-1:-1:-1;;;;;33963:38:0;;::::1;-1:-1:-1::0;;;;;;33963:38:0;;::::1;;::::0;;;34012:25:::1;:54:::0;;;;;::::1;::::0;::::1;;::::0;;33819:255::o;19344:346::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;19426:8:::1;-1:-1:-1::0;;;;;19414:26:0::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19460:9;19455:145;19479:13;:20:::0;19475:24;::::1;19455:145;;;19549:8;-1:-1:-1::0;;;;;19529:28:0::1;:13;19543:1;19529:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19529:16:0::1;:28;;19521:67;;;::::0;;-1:-1:-1;;;19521:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19501:3;;19455:145;;;-1:-1:-1::0;19612:13:0::1;:28:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;19612:28:0;;::::1;-1:-1:-1::0;;;;;;19612:28:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;19651:24:0;;;:14:::1;19612:28;19651:24:::0;;;;;:31;;-1:-1:-1;;19651:31:0::1;::::0;;::::1;::::0;;19344:346::o;18799:248::-;18959:4;18904:2;-1:-1:-1;;;;;15720:18:0;;15712:27;;;;;;15470::::1;::::0;-1:-1:-1;;;15470:27:0;::::1;;;::::0;:57:::1;;;15518:9;:7;:9::i;:::-;15470:104;;;-1:-1:-1::0;15563:10:0::1;15548:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;;15470:104;15448:189;;;;-1:-1:-1::0;;;15448:189:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18981:36:::2;18995:10;19007:2;19011:5;18981:13;:36::i;:::-;-1:-1:-1::0;19035:4:0::2;::::0;18799:248;-1:-1:-1;;;;18799:248:0:o;13379:62::-;;;;:::o;13309:63::-;;;;:::o;12865:33::-;;;;:::o;13048:52::-;;;;:::o;15888:869::-;16016:19;;15952:7;;16003:32;;15952:7;16093:83;12719:5;16093:48;16003:32;12398:7;16093:38;:48::i;:83::-;16048:128;;16189:23;16215:160;12398:7;16215:132;16312:34;16215:78;12398:7;16215:50;16246:18;;16215:12;;:30;;:50;;;;:::i;:78::-;:96;;:132::i;:160::-;16392:16;;16189:186;;-1:-1:-1;16392:16:0;;:24;;:16;:24;16388:327;;;16451:252;12398:7;16451:220;16533:22;;16511:19;;:44;:141;;16630:22;;16511:141;;;16583:19;;16511:141;16451:15;;:37;:220::i;:252::-;16433:270;;16388:327;16734:15;15888:869;-1:-1:-1;;;;15888:869:0:o;20123:154::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;20235:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:34;;-1:-1:-1;;20235:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20123:154::o;28098:184::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;28184:6:::1;::::0;-1:-1:-1;;;;;28176:27:0;;::::1;28184:6:::0;::::1;28176:27;;28168:66;;;::::0;;-1:-1:-1;;;28168:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28245:6;:29:::0;;-1:-1:-1;;;;;;28245:29:0::1;-1:-1:-1::0;;;;;28245:29:0;;;::::1;::::0;;;::::1;::::0;;28098:184::o;13215:35::-;;;;;;:::o;31488:230::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;31626:11:::1;:22:::0;;-1:-1:-1;;;;31626:22:0::1;-1:-1:-1::0;;;31626:22:0;::::1;;;;::::0;;31678:32:::1;31705:4:::0;31678:22:::1;31693:6:::0;12792:26;-1:-1:-1;;13667:38:0::1;;13652:54:::0;;31678:14:::1;:22::i;:32::-;31659:16;:51:::0;-1:-1:-1;;;31488:230:0:o;12222:39::-;;;-1:-1:-1;;;12222:39:0;;;;;:::o;29600:113::-;-1:-1:-1;;;;;29686:19:0;29662:4;29686:19;;;:12;:19;;;;;;;;;29600:113::o;30141:105::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;-1:-1:-1;;;;;30210:21:0::1;;::::0;;;:14:::1;:21;::::0;;;;:28;;-1:-1:-1;;30210:28:0::1;30234:4;30210:28;::::0;;30141:105::o;13978:46::-;;;;;;;;;;;;;;;:::o;21048:192::-;-1:-1:-1;;;;;21199:24:0;;;21167:7;21199:24;;;:17;:24;;;;;;;;:33;;;;;;;;;;;;;21048:192::o;3424:109::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3497:28:::1;3516:8;3497:18;:28::i;13450:24::-:0;;;-1:-1:-1;;;;;13450:24:0;;:::o;12099:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12099:30:0;;-1:-1:-1;12099:30:0;:::o;1337:181::-;1395:7;1427:5;;;1451:6;;;;1443:46;;;;;-1:-1:-1;;;1443:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1509:1;1337:181;-1:-1:-1;;;1337:181:0:o;2162:132::-;2220:7;2247:39;2251:1;2254;2247:39;;;;;;;;;;;;;;;;;:3;:39::i;1670:226::-;1790:7;1826:12;1818:6;;;;1810:29;;;;-1:-1:-1;;;1810:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1862:5:0;;;1670:226::o;22762:910::-;22902:6;;22881:4;;22902:6;;22898:80;;;22932:34;22947:6;22955:2;22959:6;22932:14;:34::i;:::-;22925:41;;;;22898:80;22990:17;23010:28;23021:16;;23010:6;:10;;:28;;;;:::i;:::-;22990:48;;23055:17;:15;:17::i;:::-;23051:61;;;23089:11;:9;:11::i;:::-;23128:16;;;;:24;;:16;:24;23124:159;;;23233:23;;23191:19;;:80;;:23;:80::i;:::-;23169:19;:102;23124:159;-1:-1:-1;;;;;23318:20:0;;;;;;:12;:20;;;;;;:35;;23343:9;23318:24;:35::i;:::-;-1:-1:-1;;;;;23295:20:0;;;;;;:12;:20;;;;;:58;;;;23394:26;23308:6;23417:2;23394:14;:26::i;:::-;:98;;23483:9;23394:98;;;23436:31;23445:6;23453:2;23457:9;23436:8;:31::i;:::-;-1:-1:-1;;;;;23522:16:0;;;;;;:12;:16;;;;;;23366:126;;-1:-1:-1;23522:39:0;;23366:126;23522:20;:39::i;:::-;-1:-1:-1;;;;;23503:16:0;;;;;;;:12;:16;;;;;:58;;;;23622:16;;23579:61;;;;;;23600:39;;:17;;:21;:39::i;:::-;23579:61;;;;;;;;;;;;;;;-1:-1:-1;23660:4:0;;22762:910;-1:-1:-1;;;;;22762:910:0:o;1526:136::-;1584:7;1611:43;1615:1;1618;1611:43;;;;;;;;;;;;;;;;;:3;:43::i;16920:487::-;16959:19;16981:30;16995:15;16981:13;:30::i;:::-;17037:12;;16959:52;;-1:-1:-1;17037:38:0;;16959:52;17037:16;:38::i;:::-;17022:12;:53;;;-1:-1:-1;;;;;;17088:83:0;;;-1:-1:-1;;;;;17134:12:0;:25;17088:83;17217:12;;17202:28;;12792:26;-1:-1:-1;;13667:38:0;;17202:28;17183:16;:47;17243:15;:29;;;17305:15;17283:19;:37;12398:7;17331:19;:30;17386:12;;17379:20;;;;-1:-1:-1;;17379:20:0;16920:487;:::o;1904:250::-;1962:7;1986:6;1982:47;;-1:-1:-1;2016:1:0;2009:8;;1982:47;2053:5;;;2057:1;2053;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3541:187;-1:-1:-1;;;;;3615:22:0;;3607:31;;;;;;3675:6;;3654:38;;-1:-1:-1;;;;;3654:38:0;;;;3675:6;;;;;3654:38;;;;;3703:6;:17;;-1:-1:-1;;;;;3703:17:0;;;;;-1:-1:-1;;;;;;3703:17:0;;;;;;;;;3541:187::o;2302:225::-;2422:7;2457:12;2450:5;2442:28;;;;-1:-1:-1;;;2442:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:9;2497:1;2493;:5;;;;;;;2302:225;-1:-1:-1;;;;;2302:225:0:o;21991:339::-;22109:4;22126:17;22146:28;22157:16;;22146:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22206:18:0;;;;;;:12;:18;;;;;;22126:48;;-1:-1:-1;22206:33:0;;22126:48;22206:22;:33::i;:::-;-1:-1:-1;;;;;22185:18:0;;;;;;;:12;:18;;;;;;:54;;;;22269:16;;;;;;;:31;;22290:9;22269:20;:31::i;:::-;-1:-1:-1;;;;;22250:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;22318:4:0;;-1:-1:-1;21991:339:0;;;;;:::o;32983:246::-;33085:10;33033:4;33070:26;;;:14;:26;;;;;;;;:35;;;:59;;-1:-1:-1;33123:6:0;;;;33122:7;33070:59;:87;;;;-1:-1:-1;33146:11:0;;-1:-1:-1;;;33146:11:0;;;;33070:87;:151;;;;-1:-1:-1;;33205:16:0;;33195:4;33174:27;;;;:12;:27;;;;;;:47;;;32983:246::o;24762:1466::-;15336:6;:13;;-1:-1:-1;;15336:13:0;15345:4;15336:13;;;24893:16:::1;::::0;24868:4:::1;15336:6:::0;24847:27;;;:12:::1;:27;::::0;;;;;15336:6;;24847:73:::1;::::0;:27;:31:::1;:73::i;:::-;24816:104;;24931:23;24957:101;25056:1;24957:80;25028:8;;24957:52;24996:12;;24957:20;:38;;:52;;;;:::i;:101::-;24931:127:::0;-1:-1:-1;25069:20:0::1;25092:41;:20:::0;24931:127;25092:24:::1;:41::i;:::-;25170:16;::::0;;25184:1:::1;25170:16:::0;;;;;::::1;::::0;;25069:64;;-1:-1:-1;25146:21:0::1;::::0;25170:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25170:16:0::1;25146:40;;25215:4;25197;25202:1;25197:7;;;;;;;;-1:-1:-1::0;;;;;25197:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25241:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;25241:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;25197:7;;25241:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25241:13:0;25231:7;;:4;;25236:1:::1;::::0;25231:7;::::1;;;;;-1:-1:-1::0;;;;;25231:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25325:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25325:188:0;;::::1;::::0;::::1;::::0;;;25267:21:::1;25325:188:::0;;;;;;25467:4:::1;25325:188:::0;;;;;;25487:15:::1;25325:188:::0;;;;;;;;;;;;;;;;;;;;;25291:21:::1;::::0;25325:6;;;::::1;::::0;:57:::1;::::0;25397:12;;25267:21;;25440:4;;25325:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;25267:21;25325:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25526:17;25546:40;25572:13;25546:21;:25;;:40;;;;:::i;:::-;25526:60;;25597:19;25619:33;25632:19;25649:1;25632:12;;:16;;:19;;;;:::i;:::-;25619:8;::::0;;:12:::1;:33::i;:::-;25597:55;;25665:26;25694:93;25785:1;25694:72;25754:11;25694:41;25722:12;;25694:9;:27;;:41;;;;:::i;:93::-;25665:122:::0;-1:-1:-1;25804:19:0;;25800:292:::1;;25840:6;::::0;26014:17:::1;::::0;;25840:240:::1;::::0;;-1:-1:-1;;;25840:240:0;;25916:4:::1;25840:240:::0;;::::1;::::0;;;;;;;;;;:6:::1;:240:::0;;;;;;;;;;-1:-1:-1;;;;;26014:17:0;;::::1;25840:240:::0;;;;26050:15:::1;25840:240:::0;;;;;:6;::::1;::::0;:22:::1;::::0;25870:18;;25840:240;;;;;::::1;::::0;;;;;;;;25870:18;25840:6;:240;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;25800:292:0::1;26131:25;::::0;26123:97:::1;::::0;26105:12:::1;::::0;-1:-1:-1;;;;;26131:25:0::1;::::0;26184:21:::1;::::0;26105:12;26123:97;26105:12;26123:97;26184:21;26131:25;26123:97:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;15372:6:0;:14;;-1:-1:-1;;15372:14:0;;;-1:-1:-1;;;;;;;;;;24762:1466:0:o;30963:253::-;-1:-1:-1;;;;;31106:20:0;;31063:4;31106:20;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;31130:18:0;;;;;;:14;:18;;;;;;;;31106:42;31105:103;;;;-1:-1:-1;;;;;;31168:18:0;;;;;;:12;:18;;;;;;;;31167:19;:40;;;;-1:-1:-1;;;;;;;31191:16:0;;;;;:12;:16;;;;;;;;31190:17;;30963:253;-1:-1:-1;30963:253:0:o;26572:560::-;26729:8;;-1:-1:-1;;;;;26752:18:0;;26689:7;26752:18;;;:14;:18;;;;;;26689:7;;26729:8;26752:18;;:26;;:18;:26;26748:66;;;26806:7;;26792:22;;:9;;:13;:22::i;:::-;26780:34;;26748:66;26876:14;;26827:17;;26847:44;;:24;:9;26861;26847:13;:24::i;:44::-;26955:4;26934:27;;;;:12;:27;;;;;;26827:64;;-1:-1:-1;26934:66:0;;26827:64;26934:31;:66::i;:::-;26925:4;26904:27;;;;:12;:27;;;;;:96;;;;27062:16;;-1:-1:-1;;;;;27016:64:0;;;;;27048:31;;:9;;:13;:31::i;:::-;27016:64;;;;;;;;;;;;;;;27100:24;:9;27114;27100:13;:24::i;:::-;27093:31;26572:560;-1:-1:-1;;;;;;26572:560:0:o

Swarm Source

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