Contract 0x8D546026012bF75073d8A586f24A5d5ff75b9716 6

 
Token migration announcement. Sphere Finance token contract has migrated to a new address.

Contract Overview

Sphere Finance: Old SPHERE Token
Balance:
1.147732017756025745 MATIC

MATIC Value:
$1.03 (@ $0.90/MATIC)

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x3afc28dfd8d8410a42cb9a97e6ad014b3c22fe2fa9c36e767ec9a896287c1767Approve434485982023-06-02 13:59:198 hrs 13 mins ago0xd5c0bbde70487265b2d9361617c2b39b3a2c367e IN  Sphere Finance: Old SPHERE Token0 MATIC0.009877873572 212.775150197
0x1a07094f72f4bad92c7556b9f57f5ea0ff97af3684f2d6ed687bc8b5ddbf4792Approve434467502023-06-02 12:51:229 hrs 21 mins ago0x19e88fc1a936df8b7c0910b6c215ed6e8b8334fc IN  Sphere Finance: Old SPHERE Token0 MATIC0.007367357261 158.697166585
0xed38d0577f24a5956ad0c3228cda4a3848d7c0a4aae1cbd437c94d0a2c17127bApprove434429752023-06-02 10:31:0111 hrs 41 mins ago0xdf8f67db11cbdc3d962698329964a038d83a41f6 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003784410573 156.769286395
0xe19d1af6e59e28b9dd48aeb6c79cc7c6a0d2ebbe685f75d250b66460e8c5c084Approve434429702023-06-02 10:30:5111 hrs 42 mins ago0xdf8f67db11cbdc3d962698329964a038d83a41f6 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003632618836 150.481310545
0xdef385490f4d8b3ead7c5981b3df1aaf8abb2b1fb549f9fe377a4141cc703a82Approve434269062023-06-02 0:37:5821 hrs 34 mins ago0xef33d245d1fa24b27caf3d6ae8171a85ad9580e1 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003696144258 153.112852447
0x1491fc8bb41b19e9c4a878bb110b0561eebe8c5e4e09c70bef46561947c33b47Approve434268962023-06-02 0:37:3821 hrs 35 mins ago0xef33d245d1fa24b27caf3d6ae8171a85ad9580e1 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003553409147 147.200047528
0x9f805495313db497226c0b837d0621cc7e92f88138d326f1edd04944800f7ba5Approve434268872023-06-02 0:37:1821 hrs 35 mins ago0xef33d245d1fa24b27caf3d6ae8171a85ad9580e1 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003693843376 153.017538397
0x7df8b709682457d94531348a74d1585eae94d4c6fd4f18ff28c719b28150a262Approve434170612023-06-01 18:32:241 day 3 hrs ago0x040fa8b2be50a894966c930afb6aca0116d8099d IN  Sphere Finance: Old SPHERE Token0 MATIC0.003702487148 153.375606802
0x61f2b78d4066d6819a3dc9865bf5a9760bde8b3c0c4202f7d045f52830be2cb3Approve434170582023-06-01 18:32:181 day 3 hrs ago0x040fa8b2be50a894966c930afb6aca0116d8099d IN  Sphere Finance: Old SPHERE Token0 MATIC0.003863371031 160.040224996
0x8965758a0626fe51b387b5313b5f22b6b47773a2a260dd9bbb5090207876311dApprove434170562023-06-01 18:32:141 day 3 hrs ago0x040fa8b2be50a894966c930afb6aca0116d8099d IN  Sphere Finance: Old SPHERE Token0 MATIC0.003713639877 153.837608839
0xeb84d09ba22c220a15780ce76fe541e2e452d85ca472a9701684c9a5b37e295fTransfer434149482023-06-01 17:09:221 day 5 hrs ago0x1a487412cf07bfade7398cbe150493d8f6bad0e5 IN  Sphere Finance: Old SPHERE Token0 MATIC0.004335590433 150.478635061
0x1f2d137636bee7adff7a4cc8f2c9d68ff9c04f460baa9a8e29b07fe90d5980ceTransfer434149072023-06-01 17:07:461 day 5 hrs ago0xf0bcc1b9938ff49c964b8ad3d6913649e265b668 IN  Sphere Finance: Old SPHERE Token0 MATIC0.005263779863 182.846320118
0xc79403fb9592cfee8e5ef499b2ff5d2312657f51658dd19e651a0e88770042cdApprove434025552023-06-01 9:35:311 day 12 hrs ago0x8ed5ae4dc17ea1e10b85e8dfc59c7e06321f91ed IN  Sphere Finance: Old SPHERE Token0 MATIC0.003688674841 152.803431707
0x7309e310f47053768577bb44c91f6d72699308526fecd3d5bb4d6517ddf4de79Approve434000082023-06-01 8:05:151 day 14 hrs ago0x3d387d3db4c4c99c72e685bab4aa7015f994cc7e IN  Sphere Finance: Old SPHERE Token0 MATIC0.004361336833 180.668468652
0x40a37425fc8c4b0180c7a52ddd3e2a48bfc481392433d3b5fe4fb5cb9af4d0e1Approve434000062023-06-01 8:05:111 day 14 hrs ago0x3d387d3db4c4c99c72e685bab4aa7015f994cc7e IN  Sphere Finance: Old SPHERE Token0 MATIC0.004439691756 183.914322955
0xe5ce7d12c0ae63b7202c4490b315d098bbf9d11b49868a850c30aa133668fd7dApprove434000022023-06-01 8:05:031 day 14 hrs ago0x3d387d3db4c4c99c72e685bab4aa7015f994cc7e IN  Sphere Finance: Old SPHERE Token0 MATIC0.004387317263 181.744708524
0xebd8151b8adb5dce2476fae1293419d67e031f825f624ae3147e1add825085a7Approve434000002023-06-01 8:04:591 day 14 hrs ago0x3d387d3db4c4c99c72e685bab4aa7015f994cc7e IN  Sphere Finance: Old SPHERE Token0 MATIC0.004536213001 187.912717523
0x815061e93075b10f3572ad90e069dd43463d495c69542c1aa014bc9c6b6167c3Approve433999992023-06-01 8:04:551 day 14 hrs ago0x3d387d3db4c4c99c72e685bab4aa7015f994cc7e IN  Sphere Finance: Old SPHERE Token0 MATIC0.004514849415 187.027730569
0xb0e7291c4d7d11f913b48beccce0538af8840e7f08faf677a9e1b1842fc4062bApprove433489562023-05-31 1:19:502 days 20 hrs ago0xed2fc96e8a04539ef248ebc0c5ec69ac511a3cf8 IN  Sphere Finance: Old SPHERE Token0 MATIC0.003621150
0x2a6742aaa7b63982835ef34de2f2b6e591278a0d4b1ecf174088ff5b478bcd6fApprove433489412023-05-31 1:19:182 days 20 hrs ago0xed2fc96e8a04539ef248ebc0c5ec69ac511a3cf8 IN  Sphere Finance: Old SPHERE Token0 MATIC0.00359686149
0x7adaa60a99a33f06e19a65adb015582860038e549ff53be5aaa58cdca9dca7c4Approve433310922023-05-30 14:36:043 days 7 hrs ago0xb09ce2298c5d700904aec6154e902207c02beeb2 IN  Sphere Finance: Old SPHERE Token0 MATIC0.010824116669 233.157777648
0xd9c4c98275f0acf13429447f8a7303fc2e236d936c80aeac3f2ef7af22a742eeApprove433279402023-05-30 12:42:303 days 9 hrs ago0x84066b2bd5d57aea552b26d10203e3dc6cd6ccd1 IN  Sphere Finance: Old SPHERE Token0 MATIC0.009382536012 202.105290642
0x5d620d94b566503e75e8524a20625c38f12a75f511eb59ab3369a8db7f457579Approve433181312023-05-30 6:47:233 days 15 hrs ago0xcc54f4718024c4ad91f4d288814ee8ac97ce939b IN  Sphere Finance: Old SPHERE Token0 MATIC0.009282071204 199.941220163
0x716d450be8a885d31155be45ac880734ccb24690bb6f865a6218e73a98046260Transfer433180432023-05-30 6:44:153 days 15 hrs ago0xcc54f4718024c4ad91f4d288814ee8ac97ce939b IN  Sphere Finance: Old SPHERE Token0 MATIC0.004281934749 148.678289901
0xd2a7ab868a1227d2dcfbb135610c03b01d02158cc451f70de789cb5ff3ba1251Approve433131942023-05-30 3:44:023 days 18 hrs ago0xed2fc96e8a04539ef248ebc0c5ec69ac511a3cf8 IN  Sphere Finance: Old SPHERE Token0 MATIC0.00393482163
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe375dd1eac4be0d73219f048bc118471c2ca79652ca877abf4a81f0ac0596b07305203732022-07-09 10:48:35328 days 11 hrs ago Sphere Finance: Old SPHERE TokenSphere Finance: Deployer5,956.541851007273849531 MATIC
0xd2fc7b64905b6f66a74d1616943b94e2482a9fa28e10df1bf5244583ff175b2a276855942022-04-28 17:48:50400 days 4 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,545.595757812416543211 MATIC
0xd2fc7b64905b6f66a74d1616943b94e2482a9fa28e10df1bf5244583ff175b2a276855942022-04-28 17:48:50400 days 4 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,545.595757812416543211 MATIC
0xff9b899cac8c6b4d75958d9a6d4af95293cabe1b268ea3f99aad706b8d547a7e276821792022-04-28 15:39:46400 days 6 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,785.932422706436086348 MATIC
0xff9b899cac8c6b4d75958d9a6d4af95293cabe1b268ea3f99aad706b8d547a7e276821792022-04-28 15:39:46400 days 6 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,785.932422706436086348 MATIC
0xef93d1cdbe1eb7dececb3c69d3ced30c987aa0ed92e0db95d261d6f4e9391388276782962022-04-28 13:20:38400 days 8 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,808.595204890742950498 MATIC
0xef93d1cdbe1eb7dececb3c69d3ced30c987aa0ed92e0db95d261d6f4e9391388276782962022-04-28 13:20:38400 days 8 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,808.595204890742950498 MATIC
0x5d919eaec4e837253ebb2d3e4c7a2201b06636aaca1987e6b03dcee5c78d5cae276750392022-04-28 11:23:14400 days 10 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,876.136336171783129692 MATIC
0x5d919eaec4e837253ebb2d3e4c7a2201b06636aaca1987e6b03dcee5c78d5cae276750392022-04-28 11:23:14400 days 10 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,876.136336171783129692 MATIC
0xd58fe20bf47659e510b144b8aa99a7daec2e2f24fad87efdf78b5f9bd5cf8f9a276750122022-04-28 11:22:20400 days 10 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,876.136336171783129692 MATIC
0xd58fe20bf47659e510b144b8aa99a7daec2e2f24fad87efdf78b5f9bd5cf8f9a276750122022-04-28 11:22:20400 days 10 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,876.136336171783129692 MATIC
0xdafd7f738249649220549a55310029ccc9fe1558936e01be44d633cd9ad0d9ff276750012022-04-28 11:21:54400 days 10 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,876.136336171783129692 MATIC
0xdafd7f738249649220549a55310029ccc9fe1558936e01be44d633cd9ad0d9ff276750012022-04-28 11:21:54400 days 10 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,876.136336171783129692 MATIC
0x8e3c3faafa3727b4b10980bc7da049971ad0906270013e8915d9ba65c50eb6a8276690682022-04-28 7:51:09400 days 14 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router4,088.394932656802837519 MATIC
0x8e3c3faafa3727b4b10980bc7da049971ad0906270013e8915d9ba65c50eb6a8276690682022-04-28 7:51:09400 days 14 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token4,088.394932656802837519 MATIC
0x2d378e0a9236124911c8a2cd1be73ea4e1f038e074a386cd30a51579aa7574ad276637022022-04-28 4:44:15400 days 17 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router3,920.808999032871078246 MATIC
0x2d378e0a9236124911c8a2cd1be73ea4e1f038e074a386cd30a51579aa7574ad276637022022-04-28 4:44:15400 days 17 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token3,920.808999032871078246 MATIC
0x54911dffe4998d3d086da9ca2474185f8a9b0cd02308c99ab7c514b03072f805276588722022-04-28 1:49:03400 days 20 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router4,340.572898819304951317 MATIC
0x54911dffe4998d3d086da9ca2474185f8a9b0cd02308c99ab7c514b03072f805276588722022-04-28 1:49:03400 days 20 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token4,340.572898819304951317 MATIC
0xfc41e65383a7e4ab07510a5193380cdce361d02d69d2f7f577b860f1e2bab172276588692022-04-28 1:48:57400 days 20 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router4,340.572898819304951317 MATIC
0xfc41e65383a7e4ab07510a5193380cdce361d02d69d2f7f577b860f1e2bab172276588692022-04-28 1:48:57400 days 20 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token4,340.572898819304951317 MATIC
0x7a4e322158c5c46d816e506ca515141c4054afac0c2bbfc3a794c2d0af6849da276573592022-04-28 0:49:33400 days 21 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router4,134.00265486535383835 MATIC
0x7a4e322158c5c46d816e506ca515141c4054afac0c2bbfc3a794c2d0af6849da276573592022-04-28 0:49:33400 days 21 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token4,134.00265486535383835 MATIC
0x757215e8fe7f5688368b6e9eb84bb50cc17bf5f93fe7121e2c31e3839aac0e83276573582022-04-28 0:49:27400 days 21 hrs ago Sphere Finance: Old SPHERE Token QuickSwap: Router4,134.00265486535383835 MATIC
0x757215e8fe7f5688368b6e9eb84bb50cc17bf5f93fe7121e2c31e3839aac0e83276573582022-04-28 0:49:27400 days 21 hrs ago QuickSwap: Router Sphere Finance: Old SPHERE Token4,134.00265486535383835 MATIC
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
SphereToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-15
*/

/**
 *Submitted for verification at polygonscan.com on 2022-03-14
*/

// SPDX-License-Identifier: MIT

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), 'mul overflow');
        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),
            'sub overflow');
        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),
            'add overflow');
        return c;
    }

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

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

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

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

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,
            'parameter 2 can not be 0');
        return a % b;
    }

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

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

interface InterfaceLP {
    function sync() external;
}

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), 'Roles: account already has role');
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), 'Roles: account does not have role');
        role.bearer[account] = false;
    }

    function has(Role storage role, address account)
    internal
    view
    returns (bool)
    {
        require(account != address(0), 'Roles: account is the zero address');
        return role.bearer[account];
    }
}

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

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

interface IBalanceOfSphere {
    function balanceOfSphere(address _address) external view returns (uint256);
}

interface IPublicBalance {
    function balanceOf(address _address) external view returns (uint256);
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
    external
    view
    returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
    external
    returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);
    event TransferOwnerShip(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(msg.sender == _owner, 'Not owner');
        _;
    }

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

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

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0),
            'Owner can not be 0');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

    bool public initialDistributionFinished = false;
    bool public swapEnabled = true;
    bool public autoRebase = false;
    bool public feesOnNormalTransfers = false;
    bool public isLiquidityInMatic = true;
    bool public isBurnEnabled = false;
    bool public isTaxBracketEnabled = false;
    bool public isStillLaunchPeriod = true;
    bool public taxNonMarketMaker = false;
    bool public isPartyOver = false;

    uint256 public rebaseIndex = 1 * 10**18;
    uint256 public oneEEighteen = 1 * 10**18;
    uint256 public secondsPerDay = 86400;
    uint256 public rewardYield = 3943560072416;
    uint256 public rewardYieldDenominator = 10000000000000000;
    uint256 public maxSellTransactionAmount = 2500000 * 10**18;
    uint256 public maxBuyTransactionAmount = 2500000 * 10**18;

    uint256 public rebaseFrequency = 1800;
    uint256 public nextRebase = block.timestamp + 31536000;
    uint256 public rebaseEpoch = 0;
    uint256 public taxBracketMultiplier = 5;
    uint256 public nonMarketMakerFee = 5;

    mapping(address => bool) _isFeeExempt;
    address[] public _markerPairs;
    uint256 public _markerPairCount;
    address[] public subContracts;
    address[] public sphereGamesContracts;
    address[] public partyArray;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public subContractCheck;
    mapping(address => bool) public sphereGamesCheck;
    mapping(address => bool) public partyArrayCheck;

    uint256 public constant MAX_FEE_RATE = 25;
    uint256 public constant MAX_TAX_BRACKET_FEE_RATE = 5;
    uint256 public constant MAX_PARTY_LIST_DIVISOR_RATE = 75;
    uint256 public constant NON_MARKET_MAKER_FEE_RATE = 5;
    uint256 public constant MIN_SELL_AMOUNT_RATE = 1500000 * 10**18;
    uint256 public constant MIN_BUY_AMOUNT_RATE = 1500000 * 10**18;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 public constant feeDenominator = 100;

    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
    5 * 10**9 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS =
    MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    address public liquidityReceiver =
    0x1a2Ce410A034424B784D4b228f167A061B94CFf4;
    address public treasuryReceiver =
    0x20D61737f972EEcB0aF5f0a85ab358Cd083Dd56a;
    address public riskFreeValueReceiver =
    0x826b8d2d523E7af40888754E3De64348C00B99f4;
    address public stableCoin = 0xa3Fa99A148fA48D14Ed51d610c367C61876997F1;

    IDEXRouter public router;
    IDEXFactory public factory;
    IDexPair public iDexPair;
    address public pair;

    uint256 private constant maxBracketTax = 10; // max bracket is holding 10%

    uint256 public liquidityFee = 5;
    uint256 public treasuryFee = 3;
    uint256 public burnFee = 0;
    uint256 public sellBurnFee = 0;
    uint256 public buyFeeRFV = 5;
    uint256 public sellFeeTreasuryAdded = 2;
    uint256 public sellFeeRFVAdded = 5;
    uint256 public sellLaunchFeeAdded = 10;
    uint256 public sellLaunchFeeSubtracted = 0;
    uint256 public partyListDivisor = 50;
    uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV);
    uint256 public totalSellFee =
    totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(
        sellLaunchFeeAdded
    );
    uint256 targetLiquidity = 50;
    uint256 targetLiquidityDenominator = 100;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0),
            'recipient is not valid');
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    constructor() ERC20Detailed('Sphere Finance', 'SPHERE', uint8(DECIMALS)) {
        router = IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
        pair = IDEXFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );

        address pairStableCoin = IDEXFactory(router.factory()).createPair(
            address(this),
            stableCoin
        );

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

        setAutomatedMarketMakerPair(pair, true);
        setAutomatedMarketMakerPair(pairStableCoin, true);

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

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

        IERC20(stableCoin).approve(address(router), uint256(-1));
        IERC20(stableCoin).approve(address(pairStableCoin), uint256(-1));
        IERC20(stableCoin).approve(address(this), uint256(-1));

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

    receive() external payable {}

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

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

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

    function markerPairAddress(uint256 value) public view returns (address) {
        return _markerPairs[value];
    }

    function currentIndex() public view returns (uint256) {
        return rebaseIndex;
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

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

    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldBurn() internal view returns (bool) {
        return isBurnEnabled;
    }

    function isStillLaunchPhase() internal view returns (bool) {
        return isStillLaunchPeriod;
    }

    function isTaxBracket() internal view returns (bool) {
        return isTaxBracketEnabled;
    }

    function shouldTakeFee(address from, address to)
    internal
    view
    returns (bool)
    {
        if (_isFeeExempt[from] || _isFeeExempt[to]) {
            return false;
        } else if (feesOnNormalTransfers) {
            return true;
        } else {
            return (automatedMarketMakerPairs[from] ||
            automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapEnabled &&
        totalBuyFee.add(totalSellFee) > 0 &&
        _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function getGonBalances() public view returns (bool thresholdReturn, uint256 gonBalanceReturn ) {
        thresholdReturn  = _gonBalances[address(this)] >= gonSwapThreshold;
        gonBalanceReturn = _gonBalances[address(this)];

    }

    function getCirculatingSupply() public view returns (uint256) {
        return
        (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(
            _gonsPerFragment
        );
    }

    function getCurrentTimestamp() public view returns (uint256) {
        return block.timestamp;
    }

    function getLiquidityBacking(uint256 accuracy)
    public
    view
    returns (uint256)
    {
        uint256 liquidityBalance = 0;
        for (uint256 i = 0; i < _markerPairs.length; i++) {
            liquidityBalance.add(balanceOf(_markerPairs[i]).div(10**9));
        }

        return
        accuracy.mul(liquidityBalance.mul(2)).div(
            getCirculatingSupply().div(10**9)
        );
    }

    function getUserTotalOnDifferentContractsSphere(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal = balanceOf(sender);
        uint256 balanceOfAllSubContracts;
        uint256 balanceOfAllSphereGamesContracts;

        //calculate the balance of different contracts on different wallets and sum them
        balanceOfAllSubContracts = getBalanceOfAllSubContracts(sender);
        balanceOfAllSphereGamesContracts = getBalanceOfAllSphereGamesContracts(
            sender
        );

        userTotal.add(balanceOfAllSubContracts).add(
            balanceOfAllSphereGamesContracts
        );
        return userTotal;
    }

    //this function iterates through all other contracts that are being part of the Sphere ecosystem
    //we add a new contract like wSPHERE or sSPHERE, whales could technically abuse this
    //by swapping to these contracts and leave the dynamic tax bracket
    function getBalanceOfAllSubContracts(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal;

        for (uint256 i = 0; i < subContracts.length; i++) {
            userTotal += IBalanceOfSphere(subContracts[i]).balanceOfSphere(
                sender
            );
        }

        return userTotal;
    }

    //get S.P.H.E.R.E. Games Tickets Count For Tax
    function getBalanceOfAllSphereGamesContracts(address sender)
    public
    view
    returns (uint256)
    {
        uint256 sphereGamesTotal;

        for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
            sphereGamesTotal += IPublicBalance(sphereGamesContracts[i])
            .balanceOf(sender);
        }

        return sphereGamesTotal;
    }

    function getTokensInLPCirculation() public view returns (uint256) {
        uint112 reserve0;
        uint112 reserve1;
        uint32 blockTimestampLast;
        address token0;
        address token1;
        IDexPair iDexFeeCalculator;
        uint256 LPTotal;

        for (uint256 i = 0; i < _markerPairs.length; i++) {
            iDexFeeCalculator = IDexPair(_markerPairs[i]);
            (reserve0, reserve1, blockTimestampLast) = iDexFeeCalculator
            .getReserves();

            token0 = iDexFeeCalculator.token0();
            token1 = iDexFeeCalculator.token1();

            if (token0 == address(this)) {
                LPTotal += reserve0;
                //first one
            } else if (token1 == address(this)) {
                LPTotal += reserve1;
            }
        }

        return LPTotal;
    }

    function getOneTokenInLPCirculation(uint256 _id)
    public
    view
    returns (
        uint256 LPTotal,
        uint112 reserve0,
        uint112 reserve1
    )
    {
        uint32 blockTimestampLast;
        address token0;
        address token1;
        IDexPair iDexFeeCalculator;

        iDexFeeCalculator = IDexPair(_markerPairs[_id]);
        (reserve0, reserve1, blockTimestampLast) = iDexFeeCalculator
        .getReserves();

        token0 = iDexFeeCalculator.token0();
        token1 = iDexFeeCalculator.token1();

        if (token0 == address(this)) {
            LPTotal += reserve0;
        } else if (token1 == address(this)) {
            LPTotal += reserve1;
        }

        return (LPTotal, reserve0, reserve1);
    }

    function getCurrentTaxBracket(address _address)
    public
    view
    returns (uint256)
    {
        //gets the total balance of the user
        uint256 userTotal = getUserTotalOnDifferentContractsSphere(_address);

        //calculate the percentage
        uint256 totalCap = userTotal.mul(100).div(getTokensInLPCirculation());

        //calculate what is smaller, and use that
        uint256 _bracket = SafeMath.min(totalCap, maxBracketTax);

        //multiply the bracket with the multiplier
        _bracket *= taxBracketMultiplier;

        return _bracket;
    }

    function isOverLiquified(uint256 target, uint256 accuracy)
    public
    view
    returns (bool)
    {
        return getLiquidityBacking(accuracy) > target;
    }

    function manualSync() public {
        for (uint256 i = 0; i < _markerPairs.length; i++) {
            IDexPair(_markerPairs[i]).sync();
        }
    }

    function transfer(address to, uint256 value)
    external
    override
    validRecipient(to)
    returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        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);

        emit Transfer(from, to, amount);

        return true;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient];

        require(
            initialDistributionFinished || excludedAccount,
            'Trading not started'
        );

        if (automatedMarketMakerPairs[recipient] && !excludedAccount) {
            require(amount <= maxSellTransactionAmount, 'Error amount');
        }

        if (automatedMarketMakerPairs[sender] && !excludedAccount) {
            require(amount <= maxBuyTransactionAmount, 'Buy Amount Exceeded!');
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

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

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
        ? takeFee(sender, recipient, gonAmount)
        : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(
            gonAmountReceived
        );

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

        if (shouldRebase() && autoRebase) {
            _rebase();
        }

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

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        if (isLiquidityInMatic) {
            uint256 initialBalance = address(this).balance;

            _swapTokensForMATIC(half, address(this));

            uint256 newBalance = address(this).balance.sub(initialBalance);

            _addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        } else {
            uint256 initialBalance = IERC20(stableCoin).balanceOf(
                address(this)
            );

            _swapTokensForStableCoin(half, address(this));

            uint256 newBalance = IERC20(stableCoin)
            .balanceOf(address(this))
            .sub(initialBalance);

            _addLiquidityStableCoin(otherHalf, newBalance);

            emit SwapAndLiquifyStableCoin(half, newBalance, otherHalf);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 MATICAmount) private {
        router.addLiquidityETH{value: MATICAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _addLiquidityStableCoin(
        uint256 tokenAmount,
        uint256 StableCoinAmount
    ) private {
        router.addLiquidity(
            address(this),
            stableCoin,
            tokenAmount,
            StableCoinAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _swapTokensForMATIC(uint256 tokenAmount, address receiver)
    private
    {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function _swapTokensForStableCoin(uint256 tokenAmount, address receiver)
    private
    {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WETH();
        path[2] = stableCoin;

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
        ? 0
        : liquidityFee;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );

        uint256 amountToLiquify = contractTokenBalance
        .mul(dynamicLiquidityFee.mul(2))
        .div(realTotalFee);

        uint256 amountToRFV = contractTokenBalance
        .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded))
        .div(realTotalFee);

        uint256 amountToTreasury = contractTokenBalance
        .sub(amountToLiquify)
        .sub(amountToRFV);

        if (amountToLiquify > 0) {
            _swapAndLiquify(amountToLiquify);
        }

        if (amountToRFV > 0) {
            _swapTokensForStableCoin(amountToRFV, riskFreeValueReceiver);
        }

        if (amountToTreasury > 0) {
            _swapTokensForMATIC(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(
            contractTokenBalance,
            amountToLiquify,
            amountToRFV,
            amountToTreasury
        );
    }

    function manualSwapBack() external onlyOwner {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
        ? 0
        : liquidityFee;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );

        uint256 amountToLiquify = contractTokenBalance
        .mul(dynamicLiquidityFee.mul(2))
        .div(realTotalFee);

        uint256 amountToRFV = contractTokenBalance
        .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded))
        .div(realTotalFee);

        uint256 amountToTreasury = contractTokenBalance
        .sub(amountToLiquify)
        .sub(amountToRFV);

        if (amountToLiquify > 0) {
            _swapAndLiquify(amountToLiquify);
        }

        if (amountToRFV > 0) {
            _swapTokensForStableCoin(amountToRFV, riskFreeValueReceiver);
        }

        if (amountToTreasury > 0) {
            _swapTokensForMATIC(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(
            contractTokenBalance,
            amountToLiquify,
            amountToRFV,
            amountToTreasury
        );
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _realFee = totalBuyFee;
        uint256 _burnFee = burnFee;

        //check if it's a sell fee embedded
        if (automatedMarketMakerPairs[recipient]) {
            _realFee = totalSellFee;
            _burnFee = _burnFee.add(sellBurnFee);
        }

        //calculate Tax
        if (isTaxBracketEnabled) {
            _realFee += getCurrentTaxBracket(sender);
        }

        //trying to join our party? Become the party maker :)
        if ((partyArrayCheck[sender] || partyArrayCheck[recipient])) {
            if (_realFee < 49) _realFee = 49;
        }

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

        //make sure Burn is enabled and burnFee is > 0 (integer 0 equals to false)
        if (shouldBurn() && _burnFee > 0) {
            // burn the amount given % every transaction
            tokenBurner(
                (gonAmount.div(_gonsPerFragment)).mul(_burnFee).div(100)
            );
        }

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

        return gonAmount.sub(feeAmount);
    }

    function tokenBurner(uint256 _tokenAmount) private {
        _transferFrom(address(this), address(DEAD), _tokenAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    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;
    }

    function increaseAllowance(address spender, uint256 addedValue)
    external
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

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

        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function _rebase() private {
        if (!inSwap) {
            uint256 circulatingSupply = getCirculatingSupply();
            int256 supplyDelta = int256(
                circulatingSupply.mul(rewardYield).div(rewardYieldDenominator)
            );

            coreRebase(supplyDelta);
        }
    }

    function coreRebase(int256 supplyDelta) private returns (uint256) {
        uint256 epoch = block.timestamp;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uint256(-supplyDelta));
        } else {
            _totalSupply = _totalSupply.add(uint256(supplyDelta));
        }

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

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        updateRebaseIndex(epoch);

        if (isStillLaunchPhase()) {
            updateLaunchPeriodFee();
        }

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external onlyOwner {
        require(!inSwap, 'Try again');
        require(nextRebase <= block.timestamp, 'Not in time');

        uint256 circulatingSupply = getCirculatingSupply();
        int256 supplyDelta = int256(
            circulatingSupply.mul(rewardYield).div(rewardYieldDenominator)
        );

        emit LogManualRebase(circulatingSupply, block.timestamp);
        coreRebase(supplyDelta);
    }

    function updateRebaseIndex(uint256 epoch) private {
        // update the next Rebase time
        nextRebase = epoch.add(rebaseFrequency);

        //update Index similarly to OHM, so a wrapped token created is possible (wSPHERE)

        //formula: rebaseIndex * (1 * 10 ** 18 + ((1 * 10 ** 18) + rewardYield / rewardYieldDenominator)) / 1 * 10 ** 18
        rebaseIndex = rebaseIndex
        .mul(
            oneEEighteen.add(
                oneEEighteen.mul(rewardYield).div(rewardYieldDenominator)
            )
        )
        .div(oneEEighteen);

        //simply show how often we rebased since inception (how many epochs)
        rebaseEpoch += 1;
    }

    //create a dynamic decrease of sell launch fees within first 5 days (immutable)
    function updateLaunchPeriodFee() private {
        //thanks to integer, if rebaseEpoch is > rebase frequency (30 minutes), sellLaunchFeeSubtracted goes to 1 (48 rebases everyday)
        //the calculation should always round down to the lowest fee deduction every day
        //this calculates how often the rebase frequency is (maximum of 48) - every 30 minutes, so 24 hours / rebase frequency
        uint256 _sellLaunchFeeSubtracted = rebaseEpoch.div(
            secondsPerDay.div(rebaseFrequency)
        );

        //multiply by 2 to remove 5% everyday
        sellLaunchFeeSubtracted = _sellLaunchFeeSubtracted.mul(5);

        //if the sellLaunchFeeSubtracted epochs have exceeded or are same as the sellLaunchFeeAdded, set the sellLaunchFeeAdded to 0 (false)
        if (sellLaunchFeeAdded <= sellLaunchFeeSubtracted) {
            isStillLaunchPeriod = false;
            sellLaunchFeeSubtracted = sellLaunchFeeAdded;
        }

        //set the sellFee
        setSellFee(
            totalBuyFee
            .add(sellFeeTreasuryAdded)
            .add(sellFeeRFVAdded)
            .add(sellBurnFee)
            .add(sellLaunchFeeAdded - sellLaunchFeeSubtracted)
        );
    }

    //add new subcontracts to the protocol so they can be calculated
    function addSubContracts(address _subContract, bool _value)
    public
    onlyOwner
    {
        require(subContractCheck[_subContract] != _value, 'Value already set');

        subContractCheck[_subContract] = _value;

        if (_value) {
            subContracts.push(_subContract);
        } else {
            for (uint256 i = 0; i < subContracts.length; i++) {
                if (subContracts[i] == _subContract) {
                    subContracts[i] = subContracts[subContracts.length - 1];
                    subContracts.pop();
                    break;
                }
            }
        }

        emit SetSubContracts(_subContract, _value);
    }

    //Add S.P.H.E.R.E. Games Contracts
    function addSphereGamesAddies(address _sphereGamesAddy, bool _value)
    private
    {
        require(
            sphereGamesCheck[_sphereGamesAddy] != _value,
            'Value already set'
        );

        sphereGamesCheck[_sphereGamesAddy] = _value;

        if (_value) {
            sphereGamesContracts.push(_sphereGamesAddy);
        } else {
            require(sphereGamesContracts.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
                if (sphereGamesContracts[i] == _sphereGamesAddy) {
                    sphereGamesContracts[i] = sphereGamesContracts[
                    sphereGamesContracts.length - 1
                    ];
                    sphereGamesContracts.pop();
                    break;
                }
            }
        }

        emit SetSphereGamesAddresses(_sphereGamesAddy, _value);
    }

    function addPartyAddies(address _partyAddy, bool _value) public onlyOwner {
        require(partyArrayCheck[_partyAddy] != _value, 'Value already set');

        partyArrayCheck[_partyAddy] = _value;

        if (_value) {
            partyArray.push(_partyAddy);
        } else {
            for (uint256 i = 0; i < partyArray.length; i++) {
                if (partyArray[i] == _partyAddy) {
                    partyArray[i] = partyArray[partyArray.length - 1];
                    partyArray.pop();
                    break;
                }
            }
        }

        emit SetPartyAddresses(_partyAddy, _value);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value)
    public
    onlyOwner
    {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            'Value already set'
        );

        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            _markerPairs.push(_pair);
            _markerPairCount++;
        } else {
            require(_markerPairs.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < _markerPairs.length; i++) {
                if (_markerPairs[i] == _pair) {
                    _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                    _markerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        require(initialDistributionFinished != _value, 'Not changed');
        initialDistributionFinished = _value;

        emit SetInitialDistribution(_value);
    }

    function setPartyListDivisor(uint256 _value) external onlyOwner {
        require(partyListDivisor != _value, 'Not changed');
        require(
            _value <= MAX_PARTY_LIST_DIVISOR_RATE,
            'max party divisor amount'
        );
        partyListDivisor = _value;

        emit SetPartyListDivisor(_value);
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, 'Not changed');
        _isFeeExempt[_addr] = _value;

        emit SetFeeExempt(_addr, _value);
    }

    function setTaxNonMarketMaker(bool _value) external onlyOwner {
        require(taxNonMarketMaker != _value, 'Not changed');
        taxNonMarketMaker = _value;
        emit TaxNonMarketMakerSet(_value, block.timestamp);
    }

    function setTargetLiquidity(uint256 target, uint256 accuracy)
    external
    onlyOwner
    {
        targetLiquidity = target;
        targetLiquidityDenominator = accuracy;
        emit SetTargetLiquidity(target, accuracy);
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = TOTAL_GONS.mul(_num).div(_denom);
        emit SetSwapBackSettings(_enabled, _num, _denom);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver
    ) external onlyOwner {
        require(_liquidityReceiver != address(0), '_liquidityReceiver not set');
        require(_treasuryReceiver != address(0), '_treasuryReceiver not set');
        require(
            _riskFreeValueReceiver != address(0),
            '_riskFreeValueReceiver not set'
        );
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        emit SetFeeReceivers(_liquidityReceiver, _treasuryReceiver, _riskFreeValueReceiver);
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValue,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFee
    ) external onlyOwner {
        //check if total value does not exceed 20%
        //PoC that Libero's contract is exploitable:
        //https://mumbai.polygonscan.com/address/0x6fc034596feb97a522346d7a42e705b075632d0c#readContract
        //Libero Contract: https://bscscan.com/address/0x0dfcb45eae071b3b846e220560bbcdd958414d78#readContract
        uint256 maxTotalBuyFee = _liquidityFee.add(_treasuryFee).add(
            _riskFreeValue
        );

        uint256 maxTotalSellFee = maxTotalBuyFee.add(_sellFeeTreasuryAdded).add(
            _sellFeeRFVAdded
        );

        require(
            _liquidityFee <= MAX_FEE_RATE &&
            _riskFreeValue <= MAX_FEE_RATE &&
            _treasuryFee <= MAX_FEE_RATE &&
            _sellFeeTreasuryAdded <= MAX_FEE_RATE &&
            _sellFeeRFVAdded <= MAX_FEE_RATE,
            'set fee higher than max fee allowing'
        );

        require(maxTotalBuyFee < MAX_FEE_RATE, 'exceeded max buy fees');

        require(maxTotalSellFee < MAX_FEE_RATE, 'exceeded max sell fees');

        liquidityFee = _liquidityFee;
        buyFeeRFV = _riskFreeValue;
        treasuryFee = _treasuryFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        burnFee = _burnFee;
        sellBurnFee = _sellBurnFee;
        totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV);

        setSellFee(
            totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(
                sellLaunchFeeAdded - sellLaunchFeeSubtracted
            )
        );

        emit SetFees(_liquidityFee, _riskFreeValue, _treasuryFee, _sellFeeTreasuryAdded, _sellFeeRFVAdded, _burnFee, sellBurnFee, totalBuyFee);
    }

    function setSellFee(uint256 _sellFee) internal {
        totalSellFee = _sellFee;
    }

    function setStablecoin(address _stableCoin) external onlyOwner {
        require(_stableCoin != address(0x0), 'can not use 0x0 address');
        stableCoin = _stableCoin;
        emit SetStablecoin(_stableCoin);
    }

    function setPartyIsOver() external onlyOwner {
        isPartyOver = true;
        emit SetPartyIsOver(true, block.timestamp);
    }

    function setTaxBracketFeeMultiplier(uint256 _taxBracketFeeMultiplier)
    external
    onlyOwner
    {
        require(
            _taxBracketFeeMultiplier <= MAX_TAX_BRACKET_FEE_RATE,
            'max bracket fee exceeded'
        );
        taxBracketMultiplier = _taxBracketFeeMultiplier;
        emit SetTaxBracketFeeMultiplier(_taxBracketFeeMultiplier, block.timestamp);
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        require(_receiver != address(0x0), 'invalid address');
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
        emit ClearStuckBalance(balance, _receiver, block.timestamp);

    }

    function rescueToken(address tokenAddress, uint256 tokens)
    external
    onlyOwner
    returns (bool success)
    {
        emit RescueToken(tokenAddress, msg.sender, tokens, block.timestamp);
        return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        require(autoRebase != _autoRebase, 'Not changed');
        autoRebase = _autoRebase;
        emit SetAutoRebase(_autoRebase, block.timestamp);
    }

    //enable burn fee if necessary
    function setBurnFee(bool _isBurnEnabled) external onlyOwner {
        require(
            isBurnEnabled != _isBurnEnabled,
            "Burn function hasn't changed"
        );
        isBurnEnabled = _isBurnEnabled;
        emit SetBurnFee(_isBurnEnabled, block.timestamp);
    }

    //disable launch fee so calculations are not necessarily made
    function setLaunchPeriod(bool _isStillLaunchPeriod) external onlyOwner {
        require(
            isStillLaunchPeriod != _isStillLaunchPeriod,
            "Launch function hasn't changed"
        );
        require(isStillLaunchPeriod, 'launch period already over');
        isStillLaunchPeriod = _isStillLaunchPeriod;
        emit SetLaunchPeriod(_isStillLaunchPeriod, block.timestamp);
    }

    //enable burn fee if necessary
    function setTaxBracket(bool _isTaxBracketEnabled) external onlyOwner {
        require(
            isTaxBracketEnabled != _isTaxBracketEnabled,
            "Tax Bracket function hasn't changed"
        );
        isTaxBracketEnabled = _isTaxBracketEnabled;
        emit SetTaxBracket(_isTaxBracketEnabled, block.timestamp);
    }

    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, 'Too high');
        rebaseFrequency = _rebaseFrequency;
        emit SetRebaseFrequency(_rebaseFrequency, block.timestamp);
    }

    function setRewardYield(
        uint256 _rewardYield,
        uint256 _rewardYieldDenominator
    ) external onlyOwner {
        rewardYield = _rewardYield;
        rewardYieldDenominator = _rewardYieldDenominator;
        emit SetRewardYield(_rewardYield, _rewardYieldDenominator, block.timestamp);
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        require(feesOnNormalTransfers != _enabled, 'Not changed');
        feesOnNormalTransfers = _enabled;
        emit SetFeesOnNormalTransfers(_enabled, block.timestamp);
    }

    function setIsLiquidityInMATIC(bool _value) external onlyOwner {
        require(isLiquidityInMatic != _value, 'Not changed');
        isLiquidityInMatic = _value;
        emit SetIsLiquidityInMATIC(_value, block.timestamp);
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(
            _nextRebase > block.timestamp,
            'Next rebase can not be in the past'
        );
        nextRebase = _nextRebase;
        emit SetNextRebase(_nextRebase, block.timestamp);
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn > MIN_SELL_AMOUNT_RATE, 'Below minimum sell amount');
        maxSellTransactionAmount = _maxTxn;
        emit SetMaxSellTransaction(_maxTxn, block.timestamp);
    }

    function setMaxBuyTransactionAmount(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn > MIN_BUY_AMOUNT_RATE, 'Below minimum buy amount');
        maxBuyTransactionAmount = _maxTxn;
        emit SetMaxBuyTransactionAmount(_maxTxn, block.timestamp);
    }

    event SwapBack(
        uint256 contractTokenBalance,
        uint256 amountToLiquify,
        uint256 amountToRFV,
        uint256 amountToTreasury
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 MATICReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapAndLiquifyStableCoin(
        uint256 tokensSwapped,
        uint256 StableCoinReceived,
        uint256 tokensIntoLiqudity
    );


    event SetFeeReceivers(
        address indexed _liquidityReceiver,
        address indexed _treasuryReceiver,
        address indexed _riskFreeValueReceiver
    );

    event SetStablecoin(
        address indexed stableCoin
    );

    event SetPartyIsOver(
        bool indexed state,
        uint256 indexed time
    );

    event SetTaxBracketFeeMultiplier(
        uint256 indexed state,
        uint256 indexed time
    );

    event ClearStuckBalance(
        uint256 indexed amount,
        address indexed receiver,
        uint256 indexed time
    );

    event RescueToken(
        address indexed tokenAddress,
        address indexed sender,
        uint256 indexed tokens,
        uint256 time
    );

    event SetAutoRebase(
        bool indexed value,
        uint256 indexed time
    );

    event SetLaunchPeriod(
        bool indexed value,
        uint256 indexed time
    );

    event SetTaxBracket(
        bool indexed value,
        uint256 indexed time
    );

    event SetRebaseFrequency(
        uint256 indexed frequency,
        uint256 indexed time
    );

    event SetRewardYield(
        uint256 indexed rewardYield,
        uint256 indexed frequency,
        uint256 indexed time
    );

    event SetFeesOnNormalTransfers(
        bool indexed value,
        uint256 indexed time
    );

    event SetIsLiquidityInMATIC(
        bool indexed value,
        uint256 indexed time
    );

    event SetNextRebase(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetMaxSellTransaction(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetMaxBuyTransactionAmount(
        uint256 indexed value,
        uint256 indexed time
    );

    event SetBurnFee(
        bool indexed value,
        uint256 indexed time
    );

    event SetSwapBackSettings(
        bool indexed enabled,
        uint256 indexed num,
        uint256 indexed denum
    );

    event MainLPAddressSet(address mainLP, uint256 time);

    event TaxNonMarketMakerSet(bool value, uint256 time);
    event SetTargetLiquidity(uint256 indexed target, uint256 indexed accuracy);


    event Main(bool enabled, uint256 time);

    event SetFees(
        uint256 indexed _liquidityFee,
        uint256 indexed _riskFreeValue,
        uint256 indexed _treasuryFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _burnFee,
        uint256 sellBurnFee,
        uint256 totalBuyFee
    );

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event LogManualRebase(uint256 circulatingSupply, uint256 timeStamp);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetInitialDistribution(bool indexed value);
    event SetPartyListDivisor(uint256 indexed value);
    event SetFeeExempt(address indexed addy, bool indexed value);
    event SetSubContracts(address indexed pair, bool indexed value);
    event SetPartyAddresses(address indexed pair, bool indexed value);
    event SetSphereGamesAddresses(address indexed pair, bool indexed value);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClearStuckBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"circulatingSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"LogManualRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Main","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mainLP","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"MainLPAddressSet","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":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RescueToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetAutoRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_treasuryReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_riskFreeValueReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetFeesOnNormalTransfers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetInitialDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetIsLiquidityInMATIC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetLaunchPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxBuyTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxSellTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetNextRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPartyAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"state","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetPartyIsOver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetPartyListDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRebaseFrequency","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"rewardYield","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRewardYield","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSphereGamesAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stableCoin","type":"address"}],"name":"SetStablecoin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSubContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"denum","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"target","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"SetTargetLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"state","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracketFeeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"StableCoinReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyStableCoin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"value","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TaxNonMarketMakerSet","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"inputs":[],"name":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PARTY_LIST_DIVISOR_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TAX_BRACKET_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BUY_AMOUNT_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_SELL_AMOUNT_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NON_MARKET_MAKER_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_markerPairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_partyAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addPartyAddies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subContract","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addSubContracts","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":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","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":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","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":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentIndex","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":"factory","outputs":[{"internalType":"contract IDEXFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceOfAllSphereGamesContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceOfAllSubContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getCurrentTaxBracket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGonBalances","outputs":[{"internalType":"bool","name":"thresholdReturn","type":"bool"},{"internalType":"uint256","name":"gonBalanceReturn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getOneTokenInLPCirculation","outputs":[{"internalType":"uint256","name":"LPTotal","type":"uint256"},{"internalType":"uint112","name":"reserve0","type":"uint112"},{"internalType":"uint112","name":"reserve1","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensInLPCirculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getUserTotalOnDifferentContractsSphere","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iDexPair","outputs":[{"internalType":"contract IDexPair","name":"","type":"address"}],"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":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInMatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPartyOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStillLaunchPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracketEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"markerPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonMarketMakerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oneEEighteen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"partyArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partyListDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLaunchFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLaunchFeeSubtracted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBurnEnabled","type":"bool"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInMATIC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isStillLaunchPeriod","type":"bool"}],"name":"setLaunchPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxBuyTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPartyIsOver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPartyListDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stableCoin","type":"address"}],"name":"setStablecoin","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":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"}],"name":"setTaxBracket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBracketFeeMultiplier","type":"uint256"}],"name":"setTaxBracketFeeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTaxNonMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sphereGamesCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sphereGamesContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subContractCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"taxBracketMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxNonMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","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":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002805461ffff60e81b1962ffffff60d01b1962ffffff60b81b1961ffff60a81b19909316600160b01b1792909216600160c81b1791909116600160e01b17168155670de0b6b3a764000060038181556004919091556201518060059081556503962e7f4ce0600655662386f26fc100006007556a02116545850052128000006008819055600955610708600a9081556301e133804201600b556000600c819055600d839055600e839055601980546001600160a01b0319908116731a2ce410a034424b784d4b228f167a061b94cff417909155601a805482167320d61737f972eecb0af5f0a85ab358cd083dd56a179055601b8054821673826b8d2d523e7af40888754e3de64348c00b99f4179055601c805490911673a3fa99a148fa48d14ed51d610c367c61876997f11790556021839055602284905560238190556024819055602583905560269490945560278290556028556029929092556032602a556200019b919062000187908290620048a362000814602090811b91909117901c565b6200081460201b620048a31790919060201c565b602b55620001ca6028546200018760275462000187602654602b546200081460201b620048a31790919060201c565b602c556032602d556064602e556127106b1239a002a3db32d57fffffff1904603255348015620001f957600080fd5b50604080518082018252600e81526d5370686572652046696e616e636560901b60208083019182528351808501909452600684526553504845524560d01b90840152815191929160129162000252916000919062000c19565b5081516200026890600190602085019062000c19565b506002805460ff191660ff9290921691909117610100600160a81b03191661010033021790555050601d805473a5e0829caced8ffdd4de3c43696c57f7d7a678ff6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620002fd57600080fd5b505afa15801562000312573d6000803e3d6000fd5b505050506040513d60208110156200032957600080fd5b5051601d54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200037c57600080fd5b505afa15801562000391573d6000803e3d6000fd5b505050506040513d6020811015620003a857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003fb57600080fd5b505af115801562000410573d6000803e3d6000fd5b505050506040513d60208110156200042757600080fd5b5051602080546001600160a01b0319166001600160a01b03928316178155601d546040805163c45a015560e01b81529051600094929092169263c45a015592600480840193829003018186803b1580156200048157600080fd5b505afa15801562000496573d6000803e3d6000fd5b505050506040513d6020811015620004ad57600080fd5b5051601c54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b1580156200050557600080fd5b505af11580156200051a573d6000803e3d6000fd5b505050506040513d60208110156200053157600080fd5b5051306000818152603460209081526040808320601d546001600160a01b0390811685529083528184206000199081905583548216855282852081905594845281842085905580861684529220929092559054919250620005959116600162000876565b620005a281600162000876565b6b1027e72f1f1281308800000060309081553360009081526033602090815260409091206b01d290004395eb7bbfffffff19908190559154620005ef9291620048fd62000b28821b17901c565b603155601a546001600160a01b039081166000908152600f602090815260408083208054600160ff199182168117909255601b54861685528285208054821683179055308552828520805482168317905533855282852080549091169091179055601c54601d54825163095ea7b360e01b815290861660048201526000196024820152915194169363095ea7b393604480840194938390030190829087803b1580156200069b57600080fd5b505af1158015620006b0573d6000803e3d6000fd5b505050506040513d6020811015620006c757600080fd5b5050601c546040805163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156200072157600080fd5b505af115801562000736573d6000803e3d6000fd5b505050506040513d60208110156200074d57600080fd5b5050601c546040805163095ea7b360e01b8152306004820152600019602482015290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b158015620007a557600080fd5b505af1158015620007ba573d6000803e3d6000fd5b505050506040513d6020811015620007d157600080fd5b5050603054604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000cc5565b6000828201838110156200086f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60025461010090046001600160a01b03163314620008c7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff161515811515141562000930576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560205260409020805460ff19168215801591909117909155620009b95760108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b03851617905560118054909101905562000aec565b60105460011062000a03576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b60105481101562000aea57826001600160a01b03166010828154811062000a2957fe5b6000918252602090912001546001600160a01b0316141562000ae15760108054600019810190811062000a5857fe5b600091825260209091200154601080546001600160a01b03909216918390811062000a7f57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548062000ab957fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000aea565b60010162000a06565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200086f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b7260201b60201c565b6000818362000c025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000bc657818101518382015260200162000bac565b50505050905090810190601f16801562000bf45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000c0f57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c51576000855562000c9c565b82601f1062000c6c57805160ff191683800117855562000c9c565b8280016001018555821562000c9c579182015b8281111562000c9c57825182559160200191906001019062000c7f565b5062000caa92915062000cae565b5090565b5b8082111562000caa576000815560010162000caf565b615d4e8062000cd56000396000f3fe60806040526004361061060e5760003560e01c8063764d72bf1161031b578063b62496f5116101a7578063d7c01032116100ed578063f2fde38b1161009b578063f2fde38b14611560578063f3a54f2c14611593578063f477a2c5146115bf578063f5b01e15146115d4578063f6bbe516146115fe578063f887ea4014611628578063fce589d81461163d578063fcf232911461165257610615565b8063d7c01032146113f4578063da2e3bad14611439578063dd62ed3e14611487578063e088bfc0146114c2578063e15beb80146114f5578063e1d5584c14611521578063e77ef6981461154b57610615565b8063c45a015511610155578063c45a0155146112d8578063cc32d176146112ed578063d088935814611302578063d1fce2641461133a578063d38af8851461134f578063d439979014611382578063d51ed1c8146113b5578063d7832b11146113df57610615565b8063b62496f5146111dd578063b6d438f314611210578063b6e98ad61461123c578063b915db5a14611251578063bc7e68a31461127b578063bfce486e14611290578063c0da424c146112a557610615565b806395d89b411161026c578063a0c147221161021a578063a0c1472214610c47578063a3c4e7d3146110db578063a457c2d71461110e578063a8aa1b3114611147578063a9059cbb1461115c578063a9b38cb014611195578063ab428a2314610b14578063adb873bd146111c857610615565b806395d89b411461100d5780639763eec41461102257806398118cb414611037578063992642e51461104c5780639a7a23d6146110615780639ae7372d1461109c5780639d9241ec146110c657610615565b80638b8a214e116102c95780638b8a214e14610f3d5780638c755af414610f525780638da5cb5b14610f675780638dbb08ba14610f7c5780638ebfc79614610fa85780639079f93214610fe357806392f6576e14610ff857610615565b8063764d72bf14610e5957806377d9474314610e8c5780637ac8292714610eb65780637d4b501714610ecb5780638102c57014610ee057806386fe511d14610ef557806389375abf14610f2857610615565b80633c22e5161161049a5780635e1af682116103eb5780636aa217a1116103995780636aa217a114610d935780636c9230db14610da85780636d351d1a14610dbd5780636ddd171314610dd257806370a0823114610de7578063715018a614610e1a578063716cc28014610e2f578063753d02a114610e4457610615565b80635e1af68214610cda5780635fdd4ed514610cef57806361a9d1b114610d045780636380995314610d195780636542609514610d2e57806366eb378514610d6957806368348dc114610d7e57610615565b80634e8c0bf3116104485780634e8c0bf314610c3257806356af7d0614610c4757806357b535c014610c5c57806359b107b914610c715780635aa821a914610c865780635abe671114610c9b5780635c38ffe214610cb057610615565b80633c22e51614610b145780633c5c780014610b295780634527881e14610b6457806347e1b37214610b945780634cd9ddf214610ba95780634d666ad214610bd35780634e66160c14610bff57610615565b80631d0d78dd1161055f578063264d26dd1161050d578063264d26dd146109f957806326987b6014610a0e5780632b112e4914610a235780632e01803e14610a38578063313ce56714610a4d57806333f3d62814610a7857806335179d6b14610ab15780633950935114610adb57610615565b80631d0d78dd146108ab5780631dbbcf70146108d7578063201e7991146108ec578063202018cc1461091c5780632248e5391461094f57806323b872dd146109a1578063240cd448146109e457610615565b8063095ea7b3116105bc578063095ea7b3146107ad5780630af08314146107e65780631161ae39146107fb5780631276089b1461082b578063180b0d7e1461085757806318160ddd1461086c578063198b763e1461088157610615565b8063011bc9871461061a57806301b168271461064657806302259e9e1461067657806303c4bb531461069d57806306fdde03146106c957806307ebec271461075357806308b1fd8f1461077c57610615565b3661061557005b600080fd5b34801561062657600080fd5b506106446004803603602081101561063d57600080fd5b5035611667565b005b34801561065257600080fd5b506106446004803603604081101561066957600080fd5b5080359060200135611780565b34801561068257600080fd5b5061068b61180d565b60408051918252519081900360200190f35b3480156106a957600080fd5b50610644600480360360208110156106c057600080fd5b50351515611813565b3480156106d557600080fd5b506106de611910565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610718578181015183820152602001610700565b50505050905090810190601f1680156107455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561075f57600080fd5b506107686119a6565b604080519115158252519081900360200190f35b34801561078857600080fd5b506107916119b6565b604080516001600160a01b039092168252519081900360200190f35b3480156107b957600080fd5b50610768600480360360408110156107d057600080fd5b506001600160a01b0381351690602001356119c5565b3480156107f257600080fd5b5061068b611a1a565b34801561080757600080fd5b506107686004803603604081101561081e57600080fd5b5080359060200135611a20565b34801561083757600080fd5b506106446004803603602081101561084e57600080fd5b50351515611a34565b34801561086357600080fd5b5061068b611b21565b34801561087857600080fd5b5061068b611b26565b34801561088d57600080fd5b50610791600480360360208110156108a457600080fd5b5035611b2c565b3480156108b757600080fd5b50610644600480360360208110156108ce57600080fd5b50351515611b56565b3480156108e357600080fd5b5061068b611c42565b3480156108f857600080fd5b506106446004803603604081101561090f57600080fd5b5080359060200135611c48565b34801561092857600080fd5b5061068b6004803603602081101561093f57600080fd5b50356001600160a01b0316611cd3565b34801561095b57600080fd5b506109796004803603602081101561097257600080fd5b5035611d85565b604080519384526001600160701b039283166020850152911682820152519081900360600190f35b3480156109ad57600080fd5b50610768600480360360608110156109c457600080fd5b506001600160a01b03813581169160208101359091169060400135611f5e565b3480156109f057600080fd5b50610768612079565b348015610a0557600080fd5b50610791612089565b348015610a1a57600080fd5b5061068b612098565b348015610a2f57600080fd5b5061068b61209e565b348015610a4457600080fd5b5061068b612128565b348015610a5957600080fd5b50610a6261212e565b6040805160ff9092168252519081900360200190f35b348015610a8457600080fd5b5061076860048036036040811015610a9b57600080fd5b506001600160a01b038135169060200135612137565b348015610abd57600080fd5b5061079160048036036020811015610ad457600080fd5b503561224f565b348015610ae757600080fd5b5061076860048036036040811015610afe57600080fd5b506001600160a01b03813516906020013561225f565b348015610b2057600080fd5b5061068b6122e0565b348015610b3557600080fd5b5061064460048036036040811015610b4c57600080fd5b506001600160a01b03813516906020013515156122ef565b348015610b7057600080fd5b50610b79612541565b60408051921515835260208301919091528051918290030190f35b348015610ba057600080fd5b5061068b61255b565b348015610bb557600080fd5b5061064460048036036020811015610bcc57600080fd5b5035612561565b348015610bdf57600080fd5b5061064460048036036020811015610bf657600080fd5b50351515612628565b348015610c0b57600080fd5b5061076860048036036020811015610c2257600080fd5b50356001600160a01b031661272a565b348015610c3e57600080fd5b5061079161273f565b348015610c5357600080fd5b5061068b61274e565b348015610c6857600080fd5b5061068b612753565b348015610c7d57600080fd5b5061068b612759565b348015610c9257600080fd5b5061068b61275f565b348015610ca757600080fd5b50610768612765565b348015610cbc57600080fd5b5061064460048036036020811015610cd357600080fd5b5035612775565b348015610ce657600080fd5b50610768612855565b348015610cfb57600080fd5b5061068b612865565b348015610d1057600080fd5b5061064461286b565b348015610d2557600080fd5b5061068b6129b8565b348015610d3a57600080fd5b5061064460048036036040811015610d5157600080fd5b506001600160a01b03813516906020013515156129be565b348015610d7557600080fd5b50610644612c10565b348015610d8a57600080fd5b5061068b612db7565b348015610d9f57600080fd5b5061068b612dbc565b348015610db457600080fd5b5061068b612dc2565b348015610dc957600080fd5b5061068b612dc6565b348015610dde57600080fd5b50610768612ddf565b348015610df357600080fd5b5061068b60048036036020811015610e0a57600080fd5b50356001600160a01b0316612def565b348015610e2657600080fd5b50610644612e17565b348015610e3b57600080fd5b5061068b612eb6565b348015610e5057600080fd5b50610644612ebc565b348015610e6557600080fd5b5061064460048036036020811015610e7c57600080fd5b50356001600160a01b0316612f48565b348015610e9857600080fd5b5061079160048036036020811015610eaf57600080fd5b503561305a565b348015610ec257600080fd5b5061068b613084565b348015610ed757600080fd5b5061079161308a565b348015610eec57600080fd5b5061068b613099565b348015610f0157600080fd5b5061068b60048036036020811015610f1857600080fd5b50356001600160a01b031661309f565b348015610f3457600080fd5b5061068b6130de565b348015610f4957600080fd5b506106446130e4565b348015610f5e57600080fd5b50610768613177565b348015610f7357600080fd5b50610791613187565b348015610f8857600080fd5b5061064460048036036020811015610f9f57600080fd5b5035151561319b565b348015610fb457600080fd5b5061064460048036036040811015610fcb57600080fd5b506001600160a01b038135169060200135151561328b565b348015610fef57600080fd5b50610768613391565b34801561100457600080fd5b5061068b6133a1565b34801561101957600080fd5b506106de6133a6565b34801561102e57600080fd5b5061068b613406565b34801561104357600080fd5b5061068b61340c565b34801561105857600080fd5b50610791613412565b34801561106d57600080fd5b506106446004803603604081101561108457600080fd5b506001600160a01b0381351690602001351515613421565b3480156110a857600080fd5b50610644600480360360208110156110bf57600080fd5b50356136c6565b3480156110d257600080fd5b5061068b613789565b3480156110e757600080fd5b5061068b600480360360208110156110fe57600080fd5b50356001600160a01b031661378f565b34801561111a57600080fd5b506107686004803603604081101561113157600080fd5b506001600160a01b0381351690602001356137d1565b34801561115357600080fd5b506107916138a8565b34801561116857600080fd5b506107686004803603604081101561117f57600080fd5b506001600160a01b0381351690602001356138b7565b3480156111a157600080fd5b50610768600480360360208110156111b857600080fd5b50356001600160a01b0316613924565b3480156111d457600080fd5b5061068b613939565b3480156111e957600080fd5b506107686004803603602081101561120057600080fd5b50356001600160a01b031661393f565b34801561121c57600080fd5b506106446004803603602081101561123357600080fd5b50351515613954565b34801561124857600080fd5b50610768613ab4565b34801561125d57600080fd5b506106446004803603602081101561127457600080fd5b5035613ac4565b34801561128757600080fd5b5061068b613b9a565b34801561129c57600080fd5b50610768613ba0565b3480156112b157600080fd5b50610768600480360360208110156112c857600080fd5b50356001600160a01b0316613bb0565b3480156112e457600080fd5b50610791613bc5565b3480156112f957600080fd5b5061068b613bd4565b34801561130e57600080fd5b506106446004803603606081101561132557600080fd5b50803515159060208101359060400135613bda565b34801561134657600080fd5b50610768613c95565b34801561135b57600080fd5b5061068b6004803603602081101561137257600080fd5b50356001600160a01b0316613ca5565b34801561138e57600080fd5b50610768600480360360208110156113a557600080fd5b50356001600160a01b0316613d4e565b3480156113c157600080fd5b5061068b600480360360208110156113d857600080fd5b5035613d6c565b3480156113eb57600080fd5b5061068b613de9565b34801561140057600080fd5b506106446004803603606081101561141757600080fd5b506001600160a01b038135811691602081013582169160409091013516613def565b34801561144557600080fd5b50610644600480360360e081101561145c57600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135613fba565b34801561149357600080fd5b5061068b600480360360408110156114aa57600080fd5b506001600160a01b038135811691602001351661420c565b3480156114ce57600080fd5b50610644600480360360208110156114e557600080fd5b50356001600160a01b0316614237565b34801561150157600080fd5b506106446004803603602081101561151857600080fd5b50351515614326565b34801561152d57600080fd5b506107916004803603602081101561154457600080fd5b5035614416565b34801561155757600080fd5b5061068b614426565b34801561156c57600080fd5b506106446004803603602081101561158357600080fd5b50356001600160a01b031661442c565b34801561159f57600080fd5b50610644600480360360208110156115b657600080fd5b503515156144b9565b3480156115cb57600080fd5b5061068b6145a9565b3480156115e057600080fd5b50610644600480360360208110156115f757600080fd5b50356145af565b34801561160a57600080fd5b506107916004803603602081101561162157600080fd5b503561468e565b34801561163457600080fd5b5061079161469e565b34801561164957600080fd5b5061068b6146ad565b34801561165e57600080fd5b5061068b6146b3565b60025461010090046001600160a01b031633146116b7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b80602a5414156116fc576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b604b81111561174d576040805162461bcd60e51b81526020600482015260186024820152771b585e081c185c9d1e48191a5d9a5cdbdc88185b5bdd5b9d60421b604482015290519081900360640190fd5b602a81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b60025461010090046001600160a01b031633146117d0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600682905560078190556040514290829084907fef6d28afa3906f68dea1466ffdf937f009b334e097aa2f14cd6bdad23495a6f490600090a45050565b60085481565b60025461010090046001600160a01b03163314611863576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e81b90910416151581151514156118b7576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60e81b1916600160e81b831515908102919091179091556040805191825242602083015280517fed329be12c4ee8ba2949470d46cf2b987dfd11d7228517b3498966a13941256e9281900390910190a150565b60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b5050505050905090565b600254600160d01b900460ff1681565b601a546001600160a01b031681565b3360008181526034602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615cd7833981519152928290030190a35060015b92915050565b60065481565b600082611a2c83613d6c565b119392505050565b60025461010090046001600160a01b03163314611a84576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160a81b9091041615158115151415611ad8576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60a81b1916600160a81b831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b606481565b60305490565b60138181548110611b3c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b03163314611ba6576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d81b9091041615158115151415611bf65760405162461bcd60e51b8152600401808060200182810382526023815260200180615c736023913960400191505060405180910390fd5b6002805460ff60d81b1916600160d81b831515908102919091179091556040514291907f4c517ace8b393532103aa3aef88487adfce14f3cd4ef23139821ebc43298d52c90600090a350565b602a5481565b60025461010090046001600160a01b03163314611c98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602d829055602e819055604051819083907f61b037fbf40888c3d344a3dfa6986a7d511feda40cac15b93162e3e21713aed690600090a35050565b60008060005b601354811015611d7c5760138181548110611cf057fe5b60009182526020918290200154604080516370a0823160e01b81526001600160a01b038881166004830152915191909216926370a082319260248082019391829003018186803b158015611d4357600080fd5b505afa158015611d57573d6000803e3d6000fd5b505050506040513d6020811015611d6d57600080fd5b50519190910190600101611cd9565b5090505b919050565b600080600080600080600060108881548110611d9d57fe5b9060005260206000200160009054906101000a90046001600160a01b03169050806001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d6060811015611e2057600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939a5090985096506001600160a01b03841692630dfe16819260048083019392829003018186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516040805163d21220a760e01b815290519194506001600160a01b0383169163d21220a791600480820192602092909190829003018186803b158015611ee157600080fd5b505afa158015611ef5573d6000803e3d6000fd5b505050506040513d6020811015611f0b57600080fd5b505191506001600160a01b038316301415611f3357856001600160701b031687019650611f53565b6001600160a01b038216301415611f5357846001600160701b0316870196505b505050509193909250565b6000826001600160a01b038116611fb5576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6001600160a01b038516600090815260346020908152604080832033845290915290205460001914612062576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038816600090815260348252838120338252909152919091205461203d91859061493f565b6001600160a01b03861660009081526034602090815260408083203384529091529020555b61206d8585856149d6565b50600195945050505050565b600254600160c81b900460ff1681565b6019546001600160a01b031681565b60035490565b60315460336020527f44496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320f5461dead60009081527f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15a54909261212392909161211d9190612117906b01d290004395eb7bbfffffff1990614cb7565b90614cb7565b906148fd565b905090565b60295481565b60025460ff1690565b60025460009061010090046001600160a01b0316331461218a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b604080514281529051839133916001600160a01b038716917fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb919081900360200190a46040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050506040513d602081101561224657600080fd5b50519392505050565b60148181548110611b3c57600080fd5b3360009081526034602090815260408083206001600160a01b038616845290915281205461228d90836148a3565b3360008181526034602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615cd7833981519152929081900390910190a350600192915050565b6a013da329b633647180000081565b60025461010090046001600160a01b0316331461233f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526016602052604090205460ff16151581151514156123a7576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915561242457601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b038416179055612505565b60005b60125481101561250357826001600160a01b03166012828154811061244857fe5b6000918252602090912001546001600160a01b031614156124fb5760128054600019810190811061247557fe5b600091825260209091200154601280546001600160a01b03909216918390811061249b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060128054806124d457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612503565b600101612427565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b603254306000908152603360205260409020549081101591565b60035481565b60025461010090046001600160a01b031633146125b1576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6107088111156125f3576040805162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b604482015290519081900360640190fd5b600a819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b03163314612678576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160d01b90910416151581151514156126de576040805162461bcd60e51b815260206004820152601c60248201527f4275726e2066756e6374696f6e206861736e2774206368616e67656400000000604482015290519081900360640190fd5b6002805460ff60d01b1916600160d01b831515908102919091179091556040514291907f5fae21b30f26eaaf4f039e77ecd02610468d0745d882434a2174baae8747605290600090a350565b60166020526000908152604090205460ff1681565b601f546001600160a01b031681565b600581565b600c5481565b602b5481565b60095481565b600254600160c01b900460ff1681565b60025461010090046001600160a01b031633146127c5576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111612820576040805162461bcd60e51b815260206004820152601960248201527810995b1bddc81b5a5b9a5b5d5b481cd95b1b08185b5bdd5b9d603a1b604482015290519081900360640190fd5b6008819055604051429082907f283fcbdd6058cba4467ffc64b789f7da17231b7f66872896c41c987cc1f28b6290600090a350565b600254600160e81b900460ff1681565b600d5481565b60025461010090046001600160a01b031633146128bb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b602f5460ff16156128ff576040805162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015290519081900360640190fd5b42600b541115612944576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015290519081900360640190fd5b600061294e61209e565b9050600061296d60075461211d60065485614cf990919063ffffffff16565b6040805184815242602082015281519293507ffd9e18baf5879d8b1194dafab4a5798cfd9ac06e0282a3e1c7488b536bbccb43929081900390910190a16129b381614d52565b505050565b60055481565b60025461010090046001600160a01b03163314612a0e576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff1615158115151415612a76576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601860205260409020805460ff19168215801591909117909155612af357601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b038416179055612bd4565b60005b601454811015612bd257826001600160a01b031660148281548110612b1757fe5b6000918252602090912001546001600160a01b03161415612bca57601480546000198101908110612b4457fe5b600091825260209091200154601480546001600160a01b039092169183908110612b6a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506014805480612ba357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612bd2565b600101612af6565b505b604051811515906001600160a01b038416907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a35050565b60025461010090046001600160a01b03163314612c60576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6000612c79602c54602b546148a390919063ffffffff16565b90506000612c8b602d54602e54611a20565b612c9757602154612c9a565b60005b6031543060009081526033602052604081205492935091612cba916148fd565b90506000612cd78461211d612cd0866002614cf9565b8590614cf9565b90506000612d0b8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b906148a3565b8690614cf9565b90506000612d1d826121178686614cb7565b90508215612d2e57612d2e83614e6a565b8115612d4b57601b54612d4b9083906001600160a01b0316615060565b8015612d6857601a54612d689082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a1505050505050565b604b81565b600e5481565b4290565b60006121236031546032546148fd90919063ffffffff16565b600254600160b01b900460ff1681565b6031546001600160a01b0382166000908152603360205260408120549091611a1491906148fd565b60025461010090046001600160a01b03163314612e67576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60115481565b60005b601054811015612f455760108181548110612ed657fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b505060019092019150612ebf9050565b50565b60025461010090046001600160a01b03163314612f98576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116612fe5576040805162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015290519081900360640190fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561301d573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60006010828154811061306957fe5b6000918252602090912001546001600160a01b031692915050565b60275481565b601b546001600160a01b031681565b60265481565b6000806130ab83612def565b90506000806130b985613ca5565b91506130c485611cd3565b90506130d481612cfe85856148a3565b5091949350505050565b600a5481565b60025461010090046001600160a01b03163314613134576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60f01b1916600160f01b17905560405142906001907fb59dc360088de0f0576079416500b46f6ad5b08db9e752ed2688eaf8a6582a2990600090a3565b600254600160f01b900460ff1681565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b031633146131eb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c81b909104161515811515141561323f576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c81b1916600160c81b831515908102919091179091556040514291907fcd99475fc595c5f66adc1960999196cae6d212cf2d00a7670a085507ead059b090600090a350565b60025461010090046001600160a01b031633146132db576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561333d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6001600160a01b0382166000818152600f6020526040808220805460ff191685151590811790915590519092917f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91a35050565b600254600160b81b900460ff1681565b601981565b60018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526060939092909183018282801561199c5780601f106119715761010080835404028352916020019161199c565b60255481565b60215481565b601c546001600160a01b031681565b60025461010090046001600160a01b03163314613471576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16151581151514156134d9576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556135605760108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b03851617905560118054909101905561368a565b6010546001106135a9576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b60105481101561368857826001600160a01b0316601082815481106135cd57fe5b6000918252602090912001546001600160a01b03161415613680576010805460001981019081106135fa57fe5b600091825260209091200154601080546001600160a01b03909216918390811061362057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548061365957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055613688565b6001016135ac565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b03163314613716576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b4281116137545760405162461bcd60e51b8152600401808060200182810382526022815260200180615cf76022913960400191505060405180910390fd5b600b819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b602c5481565b60008061379b8361309f565b905060006137b56137aa6146b3565b61211d846064614cf9565b905060006137c482600a6153a0565b600d540295945050505050565b3360009081526034602090815260408083206001600160a01b0386168452909152812054808310613825573360009081526034602090815260408083206001600160a01b0388168452909152812055613854565b61382f8184614cb7565b3360009081526034602090815260408083206001600160a01b03891684529091529020555b3360008181526034602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615cd7833981519152929181900390910190a35060019392505050565b6020546001600160a01b031681565b6000826001600160a01b03811661390e576040805162461bcd60e51b81526020600482015260166024820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604482015290519081900360640190fd5b6139193385856149d6565b506001949350505050565b60176020526000908152604090205460ff1681565b60245481565b60156020526000908152604090205460ff1681565b60025461010090046001600160a01b031633146139a4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160e01b9091041615158115151415613a0a576040805162461bcd60e51b815260206004820152601e60248201527f4c61756e63682066756e6374696f6e206861736e2774206368616e6765640000604482015290519081900360640190fd5b600254600160e01b900460ff16613a68576040805162461bcd60e51b815260206004820152601a60248201527f6c61756e636820706572696f6420616c7265616479206f766572000000000000604482015290519081900360640190fd5b6002805460ff60e01b1916600160e01b831515908102919091179091556040514291907f9e188e4be28f15bcf4cb979131d9f68653cba1ff26a8f7ee4bffcfaa1e9d437a90600090a350565b600254600160e01b900460ff1681565b60025461010090046001600160a01b03163314613b14576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6005811115613b65576040805162461bcd60e51b81526020600482015260186024820152771b585e08189c9858dad95d0819995948195e18d95959195960421b604482015290519081900360640190fd5b600d819055604051429082907f6b9cf7de592c5c9de3888c90ad577bfa90287fe1bb45e4c0a69822dbb578cc9a90600090a350565b600b5481565b600254600160d81b900460ff1681565b60186020526000908152604090205460ff1681565b601e546001600160a01b031681565b60225481565b60025461010090046001600160a01b03163314613c2a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60b01b1916600160b01b85151502179055613c5c8161211d6b01d290004395eb7bbfffffff1985614cf9565b60325560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b600254600160a81b900460ff1681565b60008060005b601254811015611d7c5760128181548110613cc257fe5b600091825260209182902001546040805163453d3db360e11b81526001600160a01b03888116600483015291519190921692638a7a7b669260248082019391829003018186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d6020811015613d3f57600080fd5b50519190910190600101613cab565b6001600160a01b03166000908152600f602052604090205460ff1690565b600080805b601054811015613dc057613db7613db0633b9aca0061211d60108581548110613d9657fe5b6000918252602090912001546001600160a01b0316612def565b83906148a3565b50600101613d71565b50613de2613dd4633b9aca0061211d61209e565b61211d612d04846002614cf9565b9392505050565b60075481565b60025461010090046001600160a01b03163314613e3f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038316613e9a576040805162461bcd60e51b815260206004820152601a60248201527f5f6c69717569646974795265636569766572206e6f7420736574000000000000604482015290519081900360640190fd5b6001600160a01b038216613ef1576040805162461bcd60e51b815260206004820152601960248201527817dd1c99585cdd5c9e549958d95a5d995c881b9bdd081cd95d603a1b604482015290519081900360640190fd5b6001600160a01b038116613f4c576040805162461bcd60e51b815260206004820152601e60248201527f5f7269736b4672656556616c75655265636569766572206e6f74207365740000604482015290519081900360640190fd5b601980546001600160a01b03199081166001600160a01b03868116918217909355601a80548316868516908117909155601b80549093169385169384179092556040517fb923dcdfa226a9163e9324bacc07634c44fc26e1268f8341bc0989d83f4794b890600090a4505050565b60025461010090046001600160a01b0316331461400a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600061401a87612cfe8a896148a3565b9050600061402c84612cfe84886148a3565b905060198911158015614040575060198811155b801561404d575060198711155b801561405a575060198511155b8015614067575060198411155b6140a25760405162461bcd60e51b8152600401808060200182810382526024815260200180615c4f6024913960400191505060405180910390fd5b601982106140ef576040805162461bcd60e51b81526020600482015260156024820152746578636565646564206d617820627579206665657360581b604482015290519081900360640190fd5b6019811061413d576040805162461bcd60e51b81526020600482015260166024820152756578636565646564206d61782073656c6c206665657360501b604482015290519081900360640190fd5b602189905560258890556022879055602685905560278490556023869055602483905561416e88612cfe8b8a6148a3565b602b819055506141a361419e60295460285403612cfe602754612cfe602654602b546148a390919063ffffffff16565b6153b6565b86888a7f741ea12e6017fe664434788bce4b248cf0e6182249fcbbe2477b971e0e0d1d6388888b602454602b54604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a4505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60025461010090046001600160a01b03163314614287576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166142dc576040805162461bcd60e51b815260206004820152601760248201527663616e206e6f742075736520307830206164647265737360481b604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f214c2cae0f5c69a93599efe5c6da92cb4e38b02fe0544f339c189b21f57c5a6090600090a250565b60025461010090046001600160a01b03163314614376576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160b81b90910416151581151514156143ca576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60b81b1916600160b81b831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60108181548110611b3c57600080fd5b60285481565b60025461010090046001600160a01b0316331461447c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612f45816153bb565b60025461010090046001600160a01b03163314614509576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c01b909104161515811515141561455d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6002805460ff60c01b1916600160c01b831515908102919091179091556040514291907f06667769ba3c307bbbc51d6789871daff6351211f28781c8ae7c391f84cbe38390600090a350565b60045481565b60025461010090046001600160a01b031633146145ff576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6a013da329b63364718000008111614659576040805162461bcd60e51b815260206004820152601860248201527710995b1bddc81b5a5b9a5b5d5b48189d5e48185b5bdd5b9d60421b604482015290519081900360640190fd5b6009819055604051429082907f3c0d1676b036060d919711fdd530ad3de8d21c3b3ba80e014042db98e8c7763890600090a350565b60128181548110611b3c57600080fd5b601d546001600160a01b031681565b60235481565b60008060008060008060008060005b60105481101561489757601081815481106146d957fe5b9060005260206000200160009054906101000a90046001600160a01b03169250826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561473257600080fd5b505afa158015614746573d6000803e3d6000fd5b505050506040513d606081101561475c57600080fd5b5080516020808301516040938401518451630dfe168160e01b81529451939c50909a5098506001600160a01b03861692630dfe16819260048083019392829003018186803b1580156147ad57600080fd5b505afa1580156147c1573d6000803e3d6000fd5b505050506040513d60208110156147d757600080fd5b50516040805163d21220a760e01b815290519196506001600160a01b0385169163d21220a791600480820192602092909190829003018186803b15801561481d57600080fd5b505afa158015614831573d6000803e3d6000fd5b505050506040513d602081101561484757600080fd5b505193506001600160a01b03851630141561486f57876001600160701b03168201915061488f565b6001600160a01b03841630141561488f57866001600160701b0316820191505b6001016146c2565b50965050505050505090565b600082820183811015613de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000613de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615472565b600081848411156149ce5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561499357818101518382015260200161497b565b50505050905090810190601f1680156149c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166000908152600f6020526040812054819060ff1680614a1757506001600160a01b0384166000908152600f602052604090205460ff165b600254909150600160a81b900460ff1680614a2f5750805b614a76576040805162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff168015614a9c575080155b15614ae757600854831115614ae7576040805162461bcd60e51b815260206004820152600c60248201526b115c9c9bdc88185b5bdd5b9d60a21b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff168015614b0d575080155b15614b6057600954831115614b60576040805162461bcd60e51b815260206004820152601460248201527342757920416d6f756e742045786365656465642160601b604482015290519081900360640190fd5b602f5460ff1615614b7e57614b768585856154d7565b915050613de2565b6000614b9560315485614cf990919063ffffffff16565b9050614b9f615594565b15614bac57614bac61560e565b6001600160a01b038616600090815260336020526040902054614bcf9082614cb7565b6001600160a01b038716600090815260336020526040812091909155614bf58787615762565b614bff5781614c0a565b614c0a87878461580e565b6001600160a01b038716600090815260336020526040902054909150614c3090826148a3565b6001600160a01b0380881660008181526033602052604090209290925560315490891690600080516020615cb783398151915290614c6f9085906148fd565b60408051918252519081900360200190a3614c8861599c565b8015614c9d5750600254600160b81b900460ff165b15614caa57614caa6159a5565b5060019695505050505050565b6000613de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061493f565b600082614d0857506000611a14565b82820282848281614d1557fe5b0414613de25760405162461bcd60e51b8152600401808060200182810382526021815260200180615c966021913960400191505060405180910390fd5b60004282614d9c57603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054611d80565b6000831215614dbe57603054614db6906000859003614cb7565b603055614dcf565b603054614dcb90846148a3565b6030555b6030546001600160801b031015614dec576001600160801b036030555b603054614e07906b01d290004395eb7bbfffffff19906148fd565b603155614e13816159e5565b614e1b615a43565b15614e2857614e28615a53565b603054604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050603054919050565b6000614e778260026148fd565b90506000614e858383614cb7565b600254909150600160c81b900460ff1615614f045747614ea5833061524b565b6000614eb14783614cb7565b9050614ebd8382615ad6565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506129b3565b601c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614f4f57600080fd5b505afa158015614f63573d6000803e3d6000fd5b505050506040513d6020811015614f7957600080fd5b50519050614f878330615060565b601c54604080516370a0823160e01b8152306004820152905160009261500d9285926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015614fdb57600080fd5b505afa158015614fef573d6000803e3d6000fd5b505050506040513d602081101561500557600080fd5b505190614cb7565b90506150198382615b7c565b604080518581526020810183905280820185905290517f7a4f8347ba895fa7bcb359c73d941a5783865500645a7111f978008a5332ffa69181900360600190a15050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061509157fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156150e557600080fd5b505afa1580156150f9573d6000803e3d6000fd5b505050506040513d602081101561510f57600080fd5b505181518290600190811061512057fe5b6001600160a01b039283166020918202929092010152601c5482519116908290600290811061514b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601d60009054906101000a90046001600160a01b03166001600160a01b0316635c11d7958460008486426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156152055781810151838201526020016151ed565b505050509050019650505050505050600060405180830381600087803b15801561522e57600080fd5b505af1158015615242573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061527a57fe5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156152ce57600080fd5b505afa1580156152e2573d6000803e3d6000fd5b505050506040513d60208110156152f857600080fd5b505181518290600190811061530957fe5b6001600160a01b03928316602091820292909201810191909152601d5460405163791ac94760e01b8152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a48601528851959097169663791ac947968b9693958a958c9590939260c49092019187810191028083838b83156152055781810151838201526020016151ed565b60008183106153af5781613de2565b5090919050565b602c55565b6001600160a01b03811661540b576040805162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b604482015290519081900360640190fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836154c15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561499357818101518382015260200161497b565b5060008385816154cd57fe5b0495945050505050565b6000806154ef60315484614cf990919063ffffffff16565b6001600160a01b0386166000908152603360205260409020549091506155159082614cb7565b6001600160a01b03808716600090815260336020526040808220939093559086168152205461554490826148a3565b6001600160a01b038086166000818152603360209081526040918290209490945580518781529051919392891692600080516020615cb783398151915292918290030190a3506001949350505050565b3360009081526015602052604081205460ff161580156155b75750602f5460ff16155b80156155cc5750600254600160b01b900460ff165b80156155ee575060006155ec602c54602b546148a390919063ffffffff16565b115b801561212357505060325430600090815260336020526040902054101590565b602f805460ff19166001179055602c54602b5460009161562e91906148a3565b90506000615640602d54602e54611a20565b61564c5760215461564f565b60005b603154306000908152603360205260408120549293509161566f916148fd565b905060006156858461211d612cd0866002614cf9565b905060006156ac8561211d612d04602754612cfe6002602554614cf990919063ffffffff16565b905060006156be826121178686614cb7565b905082156156cf576156cf83614e6a565b81156156ec57601b546156ec9083906001600160a01b0316615060565b801561570957601a546157099082906001600160a01b031661524b565b60408051858152602081018590528082018490526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050602f805460ff1916905550505050565b6001600160a01b0382166000908152600f602052604081205460ff16806157a157506001600160a01b0382166000908152600f602052604090205460ff165b156157ae57506000611a14565b600254600160c01b900460ff16156157c857506001611a14565b6001600160a01b03831660009081526015602052604090205460ff168061580757506001600160a01b03821660009081526015602052604090205460ff165b9050611a14565b602b546023546001600160a01b0384166000908152601560205260408120549092919060ff161561585657602c549150615853602454826148a390919063ffffffff16565b90505b600254600160d81b900460ff1615615876576158718661378f565b820191505b6001600160a01b03861660009081526018602052604090205460ff16806158b557506001600160a01b03851660009081526018602052604090205460ff165b156158c85760318210156158c857603191505b60006158d9606461211d8786614cf9565b90506158e3615c2d565b80156158ef5750600082115b156159205761592061591b606461211d856159156031548b6148fd90919063ffffffff16565b90614cf9565b615c3d565b3060009081526033602052604090205461593a90826148a3565b306000818152603360205260409020919091556031546001600160a01b03891690600080516020615cb7833981519152906159769085906148fd565b60408051918252519081900360200190a36159918582614cb7565b979650505050505050565b600b5442101590565b602f5460ff166159e35760006159b961209e565b905060006159d860075461211d60065485614cf990919063ffffffff16565b90506129b381614d52565b565b600a546159f39082906148a3565b600b81905550615a3460045461211d615a2b615a2260075461211d600654600454614cf990919063ffffffff16565b600454906148a3565b60035490614cf9565b60035550600c80546001019055565b600254600160e01b900460ff1690565b6000615a78615a6f600a546005546148fd90919063ffffffff16565b600c54906148fd565b9050615a85816005614cf9565b602981905560285411615aa6576002805460ff60e01b191690556028546029555b612f4561419e60295460285403612cfe602454612cfe602754612cfe602654602b546148a390919063ffffffff16565b601d546019546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015615b4b57600080fd5b505af1158015615b5f573d6000803e3d6000fd5b50505050506040513d6060811015615b7657600080fd5b50505050565b601d54601c546019546040805162e8e33760e81b81523060048201526001600160a01b039384166024820152604481018790526064810186905260006084820181905260a4820181905292841660c48201524260e48201529051929093169263e8e33700926101048083019360609383900390910190829087803b158015615c0357600080fd5b505af1158015615c17573d6000803e3d6000fd5b505050506040513d6060811015615b7657600080fd5b600254600160d01b900460ff1690565b615c4a3061dead836149d6565b505056fe7365742066656520686967686572207468616e206d61782066656520616c6c6f77696e6754617820427261636b65742066756e6374696f6e206861736e2774206368616e676564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254e657874207265626173652063616e206e6f7420626520696e207468652070617374a26469706673582212209b36d5d1aa9f4f10f44bbf37d23c32cd65fbdb833d1f75b1da9190857f44ea9064736f6c63430007060033

Deployed ByteCode Sourcemap

11113:43403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41912:336;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41912:336:0;;:::i;:::-;;49171:313;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49171:313:0;;;;;;;:::i;11921:58::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42489:230;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42489:230:0;;;;:::i;5029:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11457:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13817:81;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;13817:81:0;;;;;;;;;;;;;;34587:243;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34587:243:0;;;;;;;;:::i;11808:42::-;;;;;;;;;;;;;:::i;24056:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24056:170:0;;;;;;;:::i;41657:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41657:247:0;;;;:::i;13175:44::-;;;;;;;;;;;;;:::i;17014:102::-;;;;;;;;;;;;;:::i;12439:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12439:37:0;;:::i;48551:337::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48551:337:0;;;;:::i;14643:36::-;;;;;;;;;;;;;:::i;42727:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42727:239:0;;;;;;;:::i;21418:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21418:378:0;-1:-1:-1;;;;;21418:378:0;;:::i;22672:774::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22672:774:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22672:774:0;;;;;;;;;;;;;;;;;;;;;;26473:453;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26473:453:0;;;;;;;;;;;;;;;;;:::i;11413:37::-;;;;;;;;;;;;;:::i;13728:82::-;;;;;;;;;;;;;:::i;17579:91::-;;;;;;;;;;;;;:::i;19296:203::-;;;;;;;;;;;;;:::i;14594:42::-;;;;;;;;;;;;;:::i;5215:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47184:281;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47184:281:0;;;;;;;;:::i;12483:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12483:27:0;;:::i;34185:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34185:394:0;;;;;;;;:::i;13047:62::-;;;;;;;;;;;;;:::i;38497:690::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38497:690:0;;;;;;;;;;:::i;19048:240::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11672:39;;;;;;;;;;;;;:::i;48896:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48896:267:0;;:::i;47739:288::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47739:288:0;;;;:::i;12581:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12581:48:0;-1:-1:-1;;;;;12581:48:0;;:::i;14141:24::-;;;;;;;;;;;;;:::i;12795:52::-;;;;;;;;;;;;;:::i;12157:30::-;;;;;;;;;;;;;:::i;14686:73::-;;;;;;;;;;;;;:::i;11986:57::-;;;;;;;;;;;;;:::i;11365:41::-;;;;;;;;;;;;;:::i;50293:262::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50293:262:0;;:::i;11588:37::-;;;;;;;;;;;;;:::i;12194:39::-;;;;;;;;;;;;;:::i;35971:447::-;;;;;;;;;;;;;:::i;11765:36::-;;;;;;;;;;;;;:::i;40167:648::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40167:648:0;;;;;;;;;;:::i;30785:1286::-;;;;;;;;;;;;;:::i;12854:56::-;;;;;;;;;;;;;:::i;12240:36::-;;;;;;;;;;;;;:::i;19507:102::-;;;;;;;;;;;;;:::i;17799:126::-;;;;;;;;;;;;;:::i;11291:30::-;;;;;;;;;;;;;:::i;17310:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17310:136:0;-1:-1:-1;;;;;17310:136:0;;:::i;10590:126::-;;;;;;;;;;;;;:::i;12365:31::-;;;;;;;;;;;;;:::i;24234:156::-;;;;;;;;;;;;;:::i;46870:306::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46870:306:0;-1:-1:-1;;;;;46870:306:0;;:::i;17454:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17454:117:0;;:::i;14508:34::-;;;;;;;;;;;;;:::i;13905:86::-;;;;;;;;;;;;;:::i;14462:39::-;;;;;;;;;;;;;:::i;20044:683::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20044:683:0;-1:-1:-1;;;;;20044:683:0;;:::i;12052:37::-;;;;;;;;;;;;;:::i;46327:135::-;;;;;;;;;;;;;:::i;11632:31::-;;;;;;;;;;;;;:::i;10401:79::-;;;;;;;;;;;;;:::i;49754:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49754:234:0;;;;:::i;42256:225::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42256:225:0;;;;;;;;;;:::i;11328:30::-;;;;;;;;;;;;;:::i;12747:41::-;;;;;;;;;;;;;:::i;5120:87::-;;;;;;;;;;;;;:::i;14427:28::-;;;;;;;;;;;;;:::i;14282:31::-;;;;;;;;;;;;;:::i;13998:70::-;;;;;;;;;;;;;:::i;40823:826::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40823:826:0;;;;;;;;;;:::i;49996:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49996:289:0;;:::i;14766:133::-;;;;;;;;;;;;;:::i;23454:594::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23454:594:0;-1:-1:-1;;;;;23454:594:0;;:::i;33589:588::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33589:588:0;;;;;;;;:::i;14172:19::-;;;;;;;;;;;;;:::i;24398:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24398:199:0;;;;;;;;:::i;12636:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12636:48:0;-1:-1:-1;;;;;12636:48:0;;:::i;14390:30::-;;;;;;;;;;;;;:::i;12517:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12517:57:0;-1:-1:-1;;;;;12517:57:0;;:::i;48102:405::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48102:405:0;;;;:::i;11543:38::-;;;;;;;;;;;;;:::i;46470:392::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46470:392:0;;:::i;12096:54::-;;;;;;;;;;;;;:::i;11497:39::-;;;;;;;;;;;;;:::i;12691:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12691:47:0;-1:-1:-1;;;;;12691:47:0;;:::i;14108:26::-;;;;;;;;;;;;;:::i;14320:30::-;;;;;;;;;;;;;:::i;42974:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42974:289:0;;;;;;;;;;;;;;:::i;11237:47::-;;;;;;;;;;;;;:::i;20999:359::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20999:359:0;-1:-1:-1;;;;;20999:359:0;;:::i;17678:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17678:113:0;-1:-1:-1;;;;;17678:113:0;;:::i;19617:419::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19617:419:0;;:::i;11857:57::-;;;;;;;;;;;;;:::i;43271:709::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43271:709:0;;;;;;;;;;;;;;;;;;;:::i;43988:2004::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43988:2004:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17124:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17124:178:0;;;;;;;;;;:::i;46097:222::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46097:222:0;-1:-1:-1;;;;;46097:222:0;;:::i;47473:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47473:222:0;;;;:::i;12329:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12329:29:0;;:::i;14549:38::-;;;;;;;;;;;;;:::i;10724:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10724:152:0;-1:-1:-1;;;;;10724:152:0;;:::i;49492:254::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49492:254:0;;;;:::i;11718:40::-;;;;;;;;;;;;;:::i;50563:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50563:269:0;;:::i;12403:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12403:29:0;;:::i;14077:24::-;;;;;;;;;;;;;:::i;14357:26::-;;;;;;;;;;;;;:::i;21804:860::-;;;;;;;;;;;;;:::i;41912:336::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42015:6:::1;41995:16;;:26;;41987:50;;;::::0;;-1:-1:-1;;;41987:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41987:50:0;;;;;;;;;;;;;::::1;;12908:2;42070:6;:37;;42048:111;;;::::0;;-1:-1:-1;;;42048:111:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42048:111:0;;;;;;;;;;;;;::::1;;42170:16;:25:::0;;;42213:27:::1;::::0;42189:6;;42213:27:::1;::::0;;;::::1;41912:336:::0;:::o;49171:313::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49305:11:::1;:26:::0;;;49342:22:::1;:48:::0;;;49406:70:::1;::::0;49460:15:::1;::::0;49367:23;;49319:12;;49406:70:::1;::::0;-1:-1:-1;;49406:70:0::1;49171:313:::0;;:::o;11921:58::-;;;;:::o;42489:230::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42570:17:::1;::::0;::::1;-1:-1:-1::0;;;42570:17:0;;::::1;;:27;;::::0;::::1;;;;42562:51;;;::::0;;-1:-1:-1;;;42562:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42562:51:0;;;;;;;;;;;;;::::1;;42624:17;:26:::0;;-1:-1:-1;;;;42624:26:0::1;-1:-1:-1::0;;;42624:26:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;42666:45:::1;::::0;;;;;42695:15:::1;42666:45;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;42489:230:::0;:::o;5029:83::-;5099:5;5092:12;;;;;;;;-1:-1:-1;;5092:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5066:13;;5092:12;;5099:5;;5092:12;;5099:5;5092:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5029:83;:::o;11457:33::-;;;-1:-1:-1;;;11457:33:0;;;;;:::o;13817:81::-;;;-1:-1:-1;;;;;13817:81:0;;:::o;34587:243::-;34720:10;34678:4;34702:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34702:38:0;;;;;;;;;;;:46;;;34764:36;;;;;;;34678:4;;34702:38;;34720:10;;-1:-1:-1;;;;;;;;;;;34764:36:0;;;;;;;-1:-1:-1;34818:4:0;34587:243;;;;;:::o;11808:42::-;;;;:::o;24056:170::-;24151:4;24212:6;24180:29;24200:8;24180:19;:29::i;:::-;:38;;24056:170;-1:-1:-1;;;24056:170:0:o;41657:247::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;41748:27:::1;::::0;::::1;-1:-1:-1::0;;;41748:27:0;;::::1;;:37;;::::0;::::1;;;;41740:61;;;::::0;;-1:-1:-1;;;41740:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41740:61:0;;;;;;;;;;;;;::::1;;41812:27;:36:::0;;-1:-1:-1;;;;41812:36:0::1;-1:-1:-1::0;;;41812:36:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;41866:30:::1;::::0;::::1;::::0;-1:-1:-1;;41866:30:0::1;41657:247:::0;:::o;13175:44::-;13216:3;13175:44;:::o;17014:102::-;17096:12;;17014:102;:::o;12439:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12439:37:0;;-1:-1:-1;12439:37:0;:::o;48551:337::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;48653:19:::1;::::0;::::1;-1:-1:-1::0;;;48653:19:0;;::::1;;:43;;::::0;::::1;;;;48631:128;;;;-1:-1:-1::0;;;48631:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48770:19;:42:::0;;-1:-1:-1;;;;48770:42:0::1;-1:-1:-1::0;;;48770:42:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48828:52:::1;::::0;48864:15:::1;::::0;48770:42;48828:52:::1;::::0;-1:-1:-1;;48828:52:0::1;48551:337:::0;:::o;14643:36::-;;;;:::o;42727:239::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;42834:15:::1;:24:::0;;;42869:26:::1;:37:::0;;;42922:36:::1;::::0;42898:8;;42852:6;;42922:36:::1;::::0;-1:-1:-1;;42922:36:0::1;42727:239:::0;;:::o;21418:378::-;21515:7;21540:24;21582:9;21577:176;21601:20;:27;21597:31;;21577:176;;;21685:20;21706:1;21685:23;;;;;;;;;;;;;;;;;;;21670:71;;;-1:-1:-1;;;21670:71:0;;-1:-1:-1;;;;;21670:71:0;;;;;;;;;21685:23;;;;;21670:63;;:71;;;;;;;;;;;21685:23;21670:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21670:71:0;21650:91;;;;;21630:3;;21577:176;;;-1:-1:-1;21772:16:0;-1:-1:-1;21418:378:0;;;;:::o;22672:774::-;22767:15;22793:16;22820;22860:25;22896:14;22921;22946:26;23014:12;23027:3;23014:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23014:17:0;22985:47;;23086:17;-1:-1:-1;;;;;23086:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23086:41:0;;;;;;;;;;;;23149:26;;-1:-1:-1;;;23149:26:0;;;;23086:41;;-1:-1:-1;23086:41:0;;-1:-1:-1;23086:41:0;-1:-1:-1;;;;;;23149:24:0;;;;;:26;;;;;23086:41;23149:26;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23149:26:0;23195;;;-1:-1:-1;;;23195:26:0;;;;23149;;-1:-1:-1;;;;;;23195:24:0;;;;;:26;;;;;23149;;23195;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23195:26:0;;-1:-1:-1;;;;;;23238:23:0;;23256:4;23238:23;23234:156;;;23289:8;-1:-1:-1;;;;;23278:19:0;;;;;23234:156;;;-1:-1:-1;;;;;23319:23:0;;23337:4;23319:23;23315:75;;;23370:8;-1:-1:-1;;;;;23359:19:0;;;;;23315:75;23402:36;;;;22672:774;;;;;:::o;26473:453::-;26616:4;26603:2;-1:-1:-1;;;;;15162:18:0;;15154:66;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26637:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;26661:10:::1;26637:35:::0;;;;;;;;-1:-1:-1;;26637:50:0::1;26633:221;;26742:100;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;26742:100:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;26742:23:0;::::1;-1:-1:-1::0;26742:23:0;;;:17:::1;:23:::0;;;;;26780:10:::1;26742:63:::0;;;;;;;;;;:100:::1;::::0;26810:5;;26742:67:::1;:100::i;:::-;-1:-1:-1::0;;;;;26704:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;26728:10:::1;26704:35:::0;;;;;;;:138;26633:221:::1;26866:30;26880:4;26886:2;26890:5;26866:13;:30::i;:::-;-1:-1:-1::0;26914:4:0::1;::::0;26473:453;-1:-1:-1;;;;;26473:453:0:o;11413:37::-;;;-1:-1:-1;;;11413:37:0;;;;;:::o;13728:82::-;;;-1:-1:-1;;;;;13728:82:0;;:::o;17579:91::-;17651:11;;17579:91;:::o;19296:203::-;19464:16;;19425:12;:18;;;;13604:42;19349:7;19401:18;;;;;19349:7;;19385:106;;19464:16;;19386:58;;19425:18;19386:34;;-1:-1:-1;;13461:54:0;19386:14;:34::i;:::-;:38;;:58::i;:::-;19385:64;;:106::i;:::-;19369:122;;19296:203;:::o;14594:42::-;;;;:::o;5215:83::-;5281:9;;;;5215:83;:::o;47184:281::-;10542:6;;47286:12;;10542:6;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47321:62:::1;::::0;;47367:15:::1;47321:62:::0;;;;47359:6;;47347:10:::1;::::0;-1:-1:-1;;;;;47321:62:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;47401:56;::::0;;-1:-1:-1;;;47401:56:0;;47438:10:::1;47401:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;47401:36:0;::::1;::::0;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;-1:-1:-1;47401:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47401:56:0;;47184:281;-1:-1:-1;;;47184:281:0:o;12483:27::-;;;;;;;;;;;;34185:394;34358:10;34277:4;34340:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34340:58:0;;;;;;;;;;:74;;34403:10;34340:62;:74::i;:::-;34317:10;34299:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34299:38:0;;;;;;;;;;;;:115;;;34430:119;;;;;;34299:38;;-1:-1:-1;;;;;;;;;;;34430:119:0;;;;;;;;;;-1:-1:-1;34567:4:0;34185:394;;;;:::o;13047:62::-;13093:16;13047:62;:::o;38497:690::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38608:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;;::::1;;:40;;::::0;::::1;;;;38600:70;;;::::0;;-1:-1:-1;;;38600:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38600:70:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;38683:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;:39;;-1:-1:-1;;38683:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38735:390:::1;;38762:12;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;38762:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;38762:31:0::1;-1:-1:-1::0;;;;;38762:31:0;::::1;;::::0;;38735:390:::1;;;38831:9;38826:288;38850:12;:19:::0;38846:23;::::1;38826:288;;;38918:12;-1:-1:-1::0;;;;;38899:31:0::1;:12;38912:1;38899:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38899:15:0::1;:31;38895:204;;;38973:12;38986:19:::0;;-1:-1:-1;;38986:23:0;;;38973:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;38955:12:::1;:15:::0;;-1:-1:-1;;;;;38973:37:0;;::::1;::::0;38968:1;;38955:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;38955:55:0::1;;;;;-1:-1:-1::0;;;;;38955:55:0::1;;;;;;39033:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39033:18:0;;;;;-1:-1:-1;;;;;;39033:18:0::1;::::0;;;;;39074:5:::1;;38895:204;38871:3;;38826:288;;;;38735:390;39142:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;39142:37:0;::::1;::::0;::::1;::::0;;;::::1;38497:690:::0;;:::o;19048:240::-;19205:16;;19195:4;19095:20;19174:27;;;:12;:27;;;;;;:47;;;;;19048:240::o;11672:39::-;;;;:::o;48896:267::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13164:4:::1;48988:16;:40;;48980:61;;;::::0;;-1:-1:-1;;;48980:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;48980:61:0;;;;;;;;;;;;;::::1;;49052:15;:34:::0;;;49102:53:::1;::::0;49139:15:::1;::::0;49070:16;;49102:53:::1;::::0;;;::::1;48896:267:::0;:::o;47739:288::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47832:13:::1;::::0;::::1;-1:-1:-1::0;;;47832:13:0;;::::1;;:31;;::::0;::::1;;;;47810:109;;;::::0;;-1:-1:-1;;;47810:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;47930:13;:30:::0;;-1:-1:-1;;;;47930:30:0::1;-1:-1:-1::0;;;47930:30:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;47976:43:::1;::::0;48003:15:::1;::::0;47930:30;47976:43:::1;::::0;-1:-1:-1;;47976:43:0::1;47739:288:::0;:::o;12581:48::-;;;;;;;;;;;;;;;:::o;14141:24::-;;;-1:-1:-1;;;;;14141:24:0;;:::o;12795:52::-;12846:1;12795:52;:::o;12157:30::-;;;;:::o;14686:73::-;;;;:::o;11986:57::-;;;;:::o;11365:41::-;;;-1:-1:-1;;;11365:41:0;;;;;:::o;50293:262::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13024:16:::1;50379:7;:30;50371:68;;;::::0;;-1:-1:-1;;;50371:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50371:68:0;;;;;;;;;;;;;::::1;;50450:24;:34:::0;;;50500:47:::1;::::0;50531:15:::1;::::0;50477:7;;50500:47:::1;::::0;;;::::1;50293:262:::0;:::o;11588:37::-;;;-1:-1:-1;;;11588:37:0;;;;;:::o;12194:39::-;;;;:::o;35971:447::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;36034:6:::1;::::0;::::1;;36033:7;36025:29;;;::::0;;-1:-1:-1;;;36025:29:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36025:29:0;;;;;;;;;;;;;::::1;;36087:15;36073:10;;:29;;36065:53;;;::::0;;-1:-1:-1;;;36065:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36065:53:0;;;;;;;;;;;;;::::1;;36131:25;36159:22;:20;:22::i;:::-;36131:50;;36192:18;36234:62;36273:22;;36234:34;36256:11;;36234:17;:21;;:34;;;;:::i;:62::-;36325:51;::::0;;;;;36360:15:::1;36325:51;::::0;::::1;::::0;;;36192:115;;-1:-1:-1;36325:51:0::1;::::0;;;;;;;;;::::1;36387:23;36398:11;36387:10;:23::i;:::-;;10573:1;;35971:447::o:0;11765:36::-;;;;:::o;40167:648::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40260:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;::::1;;:37;;::::0;::::1;;;;40252:67;;;::::0;;-1:-1:-1;;;40252:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40252:67:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;40332:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;:36;;-1:-1:-1;;40332:36:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;40381:372:::1;;40408:10;:27:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;40408:27:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;40408:27:0::1;-1:-1:-1::0;;;;;40408:27:0;::::1;;::::0;;40381:372:::1;;;40473:9;40468:274;40492:10;:17:::0;40488:21;::::1;40468:274;;;40556:10;-1:-1:-1::0;;;;;40539:27:0::1;:10;40550:1;40539:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40539:13:0::1;:27;40535:192;;;40607:10;40618:17:::0;;-1:-1:-1;;40618:21:0;;;40607:33;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;40591:10:::1;:13:::0;;-1:-1:-1;;;;;40607:33:0;;::::1;::::0;40602:1;;40591:13;::::1;;;;;;;;;;;;;:49;;;;;-1:-1:-1::0;;;;;40591:49:0::1;;;;;-1:-1:-1::0;;;;;40591:49:0::1;;;;;;40663:10;:16;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;40663:16:0;;;;;-1:-1:-1;;;;;;40663:16:0::1;::::0;;;;;40702:5:::1;;40535:192;40511:3;;40468:274;;;;40381:372;40770:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;40770:37:0;::::1;::::0;::::1;::::0;;;::::1;40167:648:::0;;:::o;30785:1286::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;30841:20:::1;30864:29;30880:12;;30864:11;;:15;;:29;;;;:::i;:::-;30841:52;;30906:27;30936:97;30966:15;;30996:26;;30936:15;:97::i;:::-;:134;;31058:12;;30936:134;;;31045:1;30936:134;31158:16;::::0;31133:4:::1;31081:28;31112:27:::0;;;:12:::1;:27;::::0;;;;;30906:164;;-1:-1:-1;31081:28:0;31112:73:::1;::::0;:31:::1;:73::i;:::-;31081:104:::0;-1:-1:-1;31198:23:0::1;31224:90;31301:12:::0;31224:62:::1;31259:26;:19:::0;31283:1:::1;31259:23;:26::i;:::-;31224:20:::0;;:34:::1;:62::i;:90::-;31198:116;;31327:19;31349:101;31437:12;31349:73;31384:37;31405:15;;31384:16;31398:1;31384:9;;:13;;:16;;;;:::i;:::-;:20:::0;::::1;:37::i;:::-;31349:20:::0;;:34:::1;:73::i;:101::-;31327:123:::0;-1:-1:-1;31463:24:0::1;31490:78;31327:123:::0;31490:51:::1;:20:::0;31525:15;31490:34:::1;:51::i;:78::-;31463:105:::0;-1:-1:-1;31585:19:0;;31581:84:::1;;31621:32;31637:15;31621;:32::i;:::-;31681:15:::0;;31677:108:::1;;31751:21;::::0;31713:60:::1;::::0;31738:11;;-1:-1:-1;;;;;31751:21:0::1;31713:24;:60::i;:::-;31801:20:::0;;31797:108:::1;;31876:16;::::0;31838:55:::1;::::0;31858:16;;-1:-1:-1;;;;;31876:16:0::1;31838:19;:55::i;:::-;31922:141;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;10573:1;;;;;;30785:1286::o:0;12854:56::-;12908:2;12854:56;:::o;12240:36::-;;;;:::o;19507:102::-;19586:15;19507:102;:::o;17799:126::-;17852:7;17879:38;17900:16;;17879;;:20;;:38;;;;:::i;11291:30::-;;;-1:-1:-1;;;11291:30:0;;;;;:::o;17310:136::-;17421:16;;-1:-1:-1;;;;;17399:17:0;;17372:7;17399:17;;;:12;:17;;;;;;17372:7;;17399:39;;:17;:21;:39::i;10590:126::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;10671:6:::1;::::0;10652:26:::1;::::0;10671:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;10671:6:0::1;::::0;10652:26:::1;::::0;;;::::1;10689:6;:19:::0;;-1:-1:-1;;;;;;10689:19:0::1;::::0;;10590:126::o;12365:31::-;;;;:::o;24234:156::-;24279:9;24274:109;24298:12;:19;24294:23;;24274:109;;;24348:12;24361:1;24348:15;;;;;;;;;;;;;;;;;24339:32;;;-1:-1:-1;;;;;;24339:32:0;;;;-1:-1:-1;;;;;24348:15:0;;;;24339:30;;:32;;;;;;;;;;24348:15;;24339:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24319:3:0;;;;;-1:-1:-1;24274:109:0;;-1:-1:-1;24274:109:0;;;24234:156::o;46870:306::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;46954:25:0;::::1;46946:53;;;::::0;;-1:-1:-1;;;46946:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46946:53:0;;;;;;;;;;;;;::::1;;47060:36;::::0;47028:21:::1;::::0;-1:-1:-1;;;;;47060:27:0;::::1;::::0;:36;::::1;;;::::0;47028:21;;47010:15:::1;47060:36:::0;47010:15;47060:36;47028:21;47060:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;47150:15;47139:9;-1:-1:-1::0;;;;;47112:54:0::1;47130:7;47112:54;;;;;;;;;;10573:1;46870:306:::0;:::o;17454:117::-;17517:7;17544:12;17557:5;17544:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17544:19:0;;17454:117;-1:-1:-1;;17454:117:0:o;14508:34::-;;;;:::o;13905:86::-;;;-1:-1:-1;;;;;13905:86:0;;:::o;14462:39::-;;;;:::o;20044:683::-;20144:7;20169:17;20189;20199:6;20189:9;:17::i;:::-;20169:37;;20217:32;20260:40;20430:35;20458:6;20430:27;:35::i;:::-;20403:62;;20511:67;20561:6;20511:35;:67::i;:::-;20476:102;-1:-1:-1;20591:101:0;20476:102;20591:39;:9;20605:24;20591:13;:39::i;:101::-;-1:-1:-1;20710:9:0;;20044:683;-1:-1:-1;;;;20044:683:0:o;12052:37::-;;;;:::o;46327:135::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;46383:11:::1;:18:::0;;-1:-1:-1;;;;46383:18:0::1;-1:-1:-1::0;;;46383:18:0::1;::::0;;46417:37:::1;::::0;46438:15:::1;::::0;46397:4:::1;::::0;46417:37:::1;::::0;46383:18;;46417:37:::1;46327:135::o:0;11632:31::-;;;-1:-1:-1;;;11632:31:0;;;;;:::o;10401:79::-;10466:6;;;;;-1:-1:-1;;;;;10466:6:0;;10401:79::o;49754:234::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49836:18:::1;::::0;::::1;-1:-1:-1::0;;;49836:18:0;;::::1;;:28;;::::0;::::1;;;;49828:52;;;::::0;;-1:-1:-1;;;49828:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49828:52:0;;;;;;;;;;;;;::::1;;49891:18;:27:::0;;-1:-1:-1;;;;49891:27:0::1;-1:-1:-1::0;;;49891:27:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49934:46:::1;::::0;49964:15:::1;::::0;49891:27;49934:46:::1;::::0;-1:-1:-1;;49934:46:0::1;49754:234:::0;:::o;42256:225::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42344:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;42336:53;;;::::0;;-1:-1:-1;;;42336:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42336:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;42400:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;:28;;-1:-1:-1;;42400:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42446:27;;42400:28;;:19;42446:27:::1;::::0;::::1;42256:225:::0;;:::o;11328:30::-;;;-1:-1:-1;;;11328:30:0;;;;;:::o;12747:41::-;12786:2;12747:41;:::o;5120:87::-;5192:7;5185:14;;;;;;;;-1:-1:-1;;5185:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5159:13;;5185:14;;5192:7;;5185:14;;5192:7;5185:14;;;;;;;;;;;;;;;;;;;;;;;;14427:28;;;;:::o;14282:31::-;;;;:::o;13998:70::-;;;-1:-1:-1;;;;;13998:70:0;;:::o;40823:826::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40953:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;40931:109;;;::::0;;-1:-1:-1;;;40931:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40931:109:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;41053:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;41053:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41107:475:::1;;41134:12;:24:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;41134:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;41134:24:0::1;-1:-1:-1::0;;;;;41134:24:0;::::1;;::::0;;41173:16:::1;:18:::0;;;;::::1;::::0;;41107:475:::1;;;41232:12;:19:::0;41254:1:::1;-1:-1:-1::0;41224:51:0::1;;;::::0;;-1:-1:-1;;;41224:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41224:51:0;;;;;;;;;;;;;::::1;;41295:9;41290:281;41314:12;:19:::0;41310:23;::::1;41290:281;;;41382:5;-1:-1:-1::0;;;;;41363:24:0::1;:12;41376:1;41363:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41363:15:0::1;:24;41359:197;;;41430:12;41443:19:::0;;-1:-1:-1;;41443:23:0;;;41430:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41412:12:::1;:15:::0;;-1:-1:-1;;;;;41430:37:0;;::::1;::::0;41425:1;;41412:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;41412:55:0::1;;;;;-1:-1:-1::0;;;;;41412:55:0::1;;;;;;41490:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41490:18:0;;;;;-1:-1:-1;;;;;;41490:18:0::1;::::0;;;;;41531:5:::1;;41359:197;41335:3;;41290:281;;;;41107:475;41599:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;41599:42:0;::::1;::::0;::::1;::::0;;;::::1;40823:826:::0;;:::o;49996:289::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;50106:15:::1;50092:11;:29;50070:113;;;;-1:-1:-1::0;;;50070:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50194:10;:24:::0;;;50234:43:::1;::::0;50261:15:::1;::::0;50207:11;;50234:43:::1;::::0;;;::::1;49996:289:::0;:::o;14766:133::-;;;;:::o;23454:594::-;23538:7;23609:17;23629:48;23668:8;23629:38;:48::i;:::-;23609:68;;23726:16;23745:50;23768:26;:24;:26::i;:::-;23745:18;:9;23759:3;23745:13;:18::i;:50::-;23726:69;;23859:16;23878:37;23891:8;14241:2;23878:12;:37::i;:::-;23992:20;;23980:32;;23454:594;-1:-1:-1;;;;;23454:594:0:o;33589:588::-;33745:10;33686:4;33727:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33727:38:0;;;;;;;;;;33780:27;;;33776:237;;33842:10;33865:1;33824:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33824:38:0;;;;;;;;;:42;33776:237;;;33940:61;:8;33971:15;33940:12;:61::i;:::-;33917:10;33899:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;33899:38:0;;;;;;;;;:102;33776:237;34051:10;34098:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34028:119:0;;34098:38;;;;;;;;;;;34028:119;;;;;;;;;34051:10;-1:-1:-1;;;;;;;;;;;34028:119:0;;;;;;;;;;-1:-1:-1;34165:4:0;;33589:588;-1:-1:-1;;;33589:588:0:o;14172:19::-;;;-1:-1:-1;;;;;14172:19:0;;:::o;24398:199::-;24509:4;24491:2;-1:-1:-1;;;;;15162:18:0;;15154:66;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;-1:-1:-1;;;15154:66:0;;;;;;;;;;;;;;;24531:36:::1;24545:10;24557:2;24561:5;24531:13;:36::i;:::-;-1:-1:-1::0;24585:4:0::1;::::0;24398:199;-1:-1:-1;;;;24398:199:0:o;12636:48::-;;;;;;;;;;;;;;;:::o;14390:30::-;;;;:::o;12517:57::-;;;;;;;;;;;;;;;:::o;48102:405::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;48206:19:::1;::::0;::::1;-1:-1:-1::0;;;48206:19:0;;::::1;;:43;;::::0;::::1;;;;48184:123;;;::::0;;-1:-1:-1;;;48184:123:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48326:19;::::0;-1:-1:-1;;;48326:19:0;::::1;;;48318:58;;;::::0;;-1:-1:-1;;;48318:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48387:19;:42:::0;;-1:-1:-1;;;;48387:42:0::1;-1:-1:-1::0;;;48387:42:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48445:54:::1;::::0;48483:15:::1;::::0;48387:42;48445:54:::1;::::0;-1:-1:-1;;48445:54:0::1;48102:405:::0;:::o;11543:38::-;;;-1:-1:-1;;;11543:38:0;;;;;:::o;46470:392::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;12846:1:::1;46607:24;:52;;46585:126;;;::::0;;-1:-1:-1;;;46585:126:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46585:126:0;;;;;;;;;;;;;::::1;;46722:20;:47:::0;;;46785:69:::1;::::0;46838:15:::1;::::0;46745:24;;46785:69:::1;::::0;;;::::1;46470:392:::0;:::o;12096:54::-;;;;:::o;11497:39::-;;;-1:-1:-1;;;11497:39:0;;;;;:::o;12691:47::-;;;;;;;;;;;;;;;:::o;14108:26::-;;;-1:-1:-1;;;;;14108:26:0;;:::o;14320:30::-;;;;:::o;42974:289::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;43112:11:::1;:22:::0;;-1:-1:-1;;;;43112:22:0::1;-1:-1:-1::0;;;43112:22:0;::::1;;;;::::0;;43164:32:::1;43189:6:::0;43164:20:::1;-1:-1:-1::0;;43179:4:0;43164:14:::1;:20::i;:32::-;43145:16;:51:::0;43212:43:::1;::::0;43248:6;;43242:4;;43212:43;::::1;;::::0;::::1;::::0;;;::::1;42974:289:::0;;;:::o;11237:47::-;;;-1:-1:-1;;;11237:47:0;;;;;:::o;20999:359::-;21088:7;21113:17;21148:9;21143:179;21167:12;:19;21163:23;;21143:179;;;21238:12;21251:1;21238:15;;;;;;;;;;;;;;;;;;;21221:89;;;-1:-1:-1;;;21221:89:0;;-1:-1:-1;;;;;21221:89:0;;;;;;;;;21238:15;;;;;21221:49;;:89;;;;;;;;;;;21238:15;21221:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21221:89:0;21208:102;;;;;21188:3;;21143:179;;17678:113;-1:-1:-1;;;;;17764:19:0;17740:4;17764:19;;;:12;:19;;;;;;;;;17678:113::o;19617:419::-;19700:7;;;19764:136;19788:12;:19;19784:23;;19764:136;;;19829:59;19850:37;19881:5;19850:26;19860:12;19873:1;19860:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19860:15:0;19850:9;:26::i;:37::-;19829:16;;:20;:59::i;:::-;-1:-1:-1;19809:3:0;;19764:136;;;;19928:100;19984:33;20011:5;19984:22;:20;:22::i;:33::-;19928:37;19941:23;:16;19962:1;19941:20;:23::i;19928:100::-;19912:116;19617:419;-1:-1:-1;;;19617:419:0:o;11857:57::-;;;;:::o;43271:709::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;43455:32:0;::::1;43447:71;;;::::0;;-1:-1:-1;;;43447:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43537:31:0;::::1;43529:69;;;::::0;;-1:-1:-1;;;43529:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43529:69:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43631:36:0;::::1;43609:116;;;::::0;;-1:-1:-1;;;43609:116:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43736:17;:38:::0;;-1:-1:-1;;;;;;43736:38:0;;::::1;-1:-1:-1::0;;;;;43736:38:0;;::::1;::::0;;::::1;::::0;;;43785:16:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;43832:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;43894:78:::1;::::0;::::1;::::0;-1:-1:-1;;43894:78:0::1;43271:709:::0;;;:::o;43988:2004::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;44595:22:::1;44620:75;44670:14:::0;44620:31:::1;:13:::0;44638:12;44620:17:::1;:31::i;:75::-;44595:100:::0;-1:-1:-1;44708:23:0::1;44734:87;44794:16:::0;44734:41:::1;44595:100:::0;44753:21;44734:18:::1;:41::i;:87::-;44708:113;;12786:2;44856:13;:29;;:76;;;;;12786:2;44902:14;:30;;44856:76;:121;;;;;12786:2;44949:12;:28;;44856:121;:175;;;;;12786:2;44994:21;:37;;44856:175;:224;;;;;12786:2;45048:16;:32;;44856:224;44834:310;;;;-1:-1:-1::0;;;44834:310:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12786:2;45165:14;:29;45157:63;;;::::0;;-1:-1:-1;;;45157:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45157:63:0;;;;;;;;;;;;;::::1;;12786:2;45241:15;:30;45233:65;;;::::0;;-1:-1:-1;;;45233:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45233:65:0;;;;;;;;;;;;;::::1;;45311:12;:28:::0;;;45350:9:::1;:26:::0;;;45387:11:::1;:26:::0;;;45424:20:::1;:44:::0;;;45479:15:::1;:34:::0;;;45524:7:::1;:18:::0;;;45553:11:::1;:26:::0;;;45604:44:::1;45362:14:::0;45604:29:::1;45326:13:::0;45401:12;45604:16:::1;:29::i;:44::-;45590:11;:58;;;;45661:176;45686:140;45788:23;;45767:18;;:44;45686:58;45728:15;;45686:37;45702:20;;45686:11;;:15;;:37;;;;:::i;:140::-;45661:10;:176::i;:::-;45894:12;45878:14;45863:13;45855:129;45908:21;45931:16;45949:8;45959:11;;45972;;45855:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10573:1;;43988:2004:::0;;;;;;;:::o;17124:178::-;-1:-1:-1;;;;;17260:25:0;;;17228:7;17260:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;17124:178::o;46097:222::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;46179:27:0;::::1;46171:63;;;::::0;;-1:-1:-1;;;46171:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46171:63:0;;;;;;;;;;;;;::::1;;46245:10;:24:::0;;-1:-1:-1;;;;;;46245:24:0::1;-1:-1:-1::0;;;;;46245:24:0;::::1;::::0;;::::1;::::0;;;46285:26:::1;::::0;::::1;::::0;-1:-1:-1;;46285:26:0::1;46097:222:::0;:::o;47473:::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;47552:10:::1;::::0;::::1;-1:-1:-1::0;;;47552:10:0;;::::1;;:25;;::::0;::::1;;;;47544:49;;;::::0;;-1:-1:-1;;;47544:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47544:49:0;;;;;;;;;;;;;::::1;;47604:10;:24:::0;;-1:-1:-1;;;;47604:24:0::1;-1:-1:-1::0;;;47604:24:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;47644:43:::1;::::0;47671:15:::1;::::0;47604:24;47644:43:::1;::::0;-1:-1:-1;;47644:43:0::1;47473:222:::0;:::o;12329:29::-;;;;;;;;;;;;14549:38;;;;:::o;10724:152::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;10802:27:::1;::::0;-1:-1:-1;;;;;10802:27:0;::::1;::::0;::::1;::::0;;;::::1;10840:28;10859:8;10840:18;:28::i;49492:254::-:0;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;49579:21:::1;::::0;::::1;-1:-1:-1::0;;;49579:21:0;;::::1;;:33;;::::0;::::1;;;;49571:57;;;::::0;;-1:-1:-1;;;49571:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49571:57:0;;;;;;;;;;;;;::::1;;49639:21;:32:::0;;-1:-1:-1;;;;49639:32:0::1;-1:-1:-1::0;;;49639:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49687:51:::1;::::0;49722:15:::1;::::0;49639:32;49687:51:::1;::::0;-1:-1:-1;;49687:51:0::1;49492:254:::0;:::o;11718:40::-;;;;:::o;50563:269::-;10542:6;;;;;-1:-1:-1;;;;;10542:6:0;10528:10;:20;10520:42;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;-1:-1:-1;;;10520:42:0;;;;;;;;;;;;;;;13093:16:::1;50654:7;:29;50646:66;;;::::0;;-1:-1:-1;;;50646:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50646:66:0;;;;;;;;;;;;;::::1;;50723:23;:33:::0;;;50772:52:::1;::::0;50808:15:::1;::::0;50749:7;;50772:52:::1;::::0;;;::::1;50563:269:::0;:::o;12403:29::-;;;;;;;;;;;;14077:24;;;-1:-1:-1;;;;;14077:24:0;;:::o;14357:26::-;;;;:::o;21804:860::-;21861:7;21881:16;21908;21935:25;21971:14;21996;22021:26;22058:15;22091:9;22086:544;22110:12;:19;22106:23;;22086:544;;;22180:12;22193:1;22180:15;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22180:15:0;22151:45;;22254:17;-1:-1:-1;;;;;22254:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22254:45:0;;;;;;;;;;;;22325:26;;-1:-1:-1;;;22325:26:0;;;;22254:45;;-1:-1:-1;22254:45:0;;-1:-1:-1;22254:45:0;-1:-1:-1;;;;;;22325:24:0;;;;;:26;;;;;22254:45;22325:26;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22325:26:0;22375;;;-1:-1:-1;;;22375:26:0;;;;22325;;-1:-1:-1;;;;;;22375:24:0;;;;;:26;;;;;22325;;22375;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22375:26:0;;-1:-1:-1;;;;;;22422:23:0;;22440:4;22422:23;22418:201;;;22477:8;-1:-1:-1;;;;;22466:19:0;;;;;22418:201;;;-1:-1:-1;;;;;22540:23:0;;22558:4;22540:23;22536:83;;;22595:8;-1:-1:-1;;;;;22584:19:0;;;;;22536:83;22131:3;;22086:544;;;-1:-1:-1;22649:7:0;-1:-1:-1;;;;;;;21804:860:0;:::o;2297:181::-;2355:7;2387:5;;;2411:6;;;;2403:46;;;;;-1:-1:-1;;;2403:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3122:132;3180:7;3207:39;3211:1;3214;3207:39;;;;;;;;;;;;;;;;;:3;:39::i;2630:226::-;2750:7;2786:12;2778:6;;;;2770:29;;;;-1:-1:-1;;;2770:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2822:5:0;;;2630:226::o;24998:1467::-;-1:-1:-1;;;;;25164:20:0;;25124:4;25164:20;;;:12;:20;;;;;;25124:4;;25164:20;;;:47;;-1:-1:-1;;;;;;25188:23:0;;;;;;:12;:23;;;;;;;;25164:47;25246:27;;25141:70;;-1:-1:-1;;;;25246:27:0;;;;;:46;;;25277:15;25246:46;25224:115;;;;;-1:-1:-1;;;25224:115:0;;;;;;;;;;;;-1:-1:-1;;;25224:115:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25356:36:0;;;;;;:25;:36;;;;;;;;:56;;;;;25397:15;25396:16;25356:56;25352:148;;;25447:24;;25437:6;:34;;25429:59;;;;;-1:-1:-1;;;25429:59:0;;;;;;;;;;;;-1:-1:-1;;;25429:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25516:33:0;;;;;;:25;:33;;;;;;;;:53;;;;;25554:15;25553:16;25516:53;25512:152;;;25604:23;;25594:6;:33;;25586:66;;;;;-1:-1:-1;;;25586:66:0;;;;;;;;;;;;-1:-1:-1;;;25586:66:0;;;;;;;;;;;;;;;25680:6;;;;25676:87;;;25710:41;25725:6;25733:9;25744:6;25710:14;:41::i;:::-;25703:48;;;;;25676:87;25775:17;25795:28;25806:16;;25795:6;:10;;:28;;;;:::i;:::-;25775:48;;25840:16;:14;:16::i;:::-;25836:59;;;25873:10;:8;:10::i;:::-;-1:-1:-1;;;;;25930:20:0;;;;;;:12;:20;;;;;;:35;;25955:9;25930:24;:35::i;:::-;-1:-1:-1;;;;;25907:20:0;;;;;;:12;:20;;;;;:58;;;;26006:32;25920:6;26028:9;26006:13;:32::i;:::-;:102;;26099:9;26006:102;;;26050:37;26058:6;26066:9;26077;26050:7;:37::i;:::-;-1:-1:-1;;;;;26145:23:0;;;;;;:12;:23;;;;;;25978:130;;-1:-1:-1;26145:70:0;;25978:130;26145:27;:70::i;:::-;-1:-1:-1;;;;;26119:23:0;;;;;;;:12;:23;;;;;:96;;;;26323:16;;26233:118;;;;-1:-1:-1;;;;;;;;;;;26233:118:0;26301:39;;:17;;:21;:39::i;:::-;26233:118;;;;;;;;;;;;;;;26368:14;:12;:14::i;:::-;:28;;;;-1:-1:-1;26386:10:0;;-1:-1:-1;;;26386:10:0;;;;26368:28;26364:70;;;26413:9;:7;:9::i;:::-;-1:-1:-1;26453:4:0;;24998:1467;-1:-1:-1;;;;;;24998:1467:0:o;2486:136::-;2544:7;2571:43;2575:1;2578;2571:43;;;;;;;;;;;;;;;;;:3;:43::i;2864:250::-;2922:7;2946:6;2942:47;;-1:-1:-1;2976:1:0;2969:8;;2942:47;3013:5;;;3017:1;3013;:5;:1;3037:5;;;;;:10;3029:56;;;;-1:-1:-1;;;3029:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35159:804;35216:7;35252:15;35284:16;35280:118;;35339:12;;35322:30;;;;;;;35332:5;;35322:30;;;;;;;;;;-1:-1:-1;;35374:12:0;;35367:19;;35280:118;35428:1;35414:11;:15;35410:188;;;35461:12;;:39;;35486:12;;;;35461:16;:39::i;:::-;35446:12;:54;35410:188;;;35548:12;;:38;;35573:11;35548:16;:38::i;:::-;35533:12;:53;35410:188;35614:12;;-1:-1:-1;;;;;;35610:83:0;;;-1:-1:-1;;;;;35656:12:0;:25;35610:83;35739:12;;35724:28;;-1:-1:-1;;13461:54:0;35724:14;:28::i;:::-;35705:16;:47;35765:24;35783:5;35765:17;:24::i;:::-;35806:20;:18;:20::i;:::-;35802:76;;;35843:23;:21;:23::i;:::-;35912:12;;35895:30;;;;;;;35905:5;;35895:30;;;;;;;;;;-1:-1:-1;;35943:12:0;;35159:804;;;:::o;26934:1010::-;27008:12;27023:27;:20;27048:1;27023:24;:27::i;:::-;27008:42;-1:-1:-1;27061:17:0;27081:30;:20;27008:42;27081:24;:30::i;:::-;27128:18;;27061:50;;-1:-1:-1;;;;27128:18:0;;;;27124:813;;;27188:21;27226:40;27246:4;27260;27226:19;:40::i;:::-;27283:18;27304:41;:21;27330:14;27304:25;:41::i;:::-;27283:62;;27362:36;27376:9;27387:10;27362:13;:36::i;:::-;27420:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27124:813;;;;;27528:10;;27521:75;;;-1:-1:-1;;;27521:75:0;;27576:4;27521:75;;;;;;27496:22;;-1:-1:-1;;;;;27528:10:0;;27521:28;;:75;;;;;;;;;;;;;;27528:10;27521:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27521:75:0;;-1:-1:-1;27613:45:0;27638:4;27652;27613:24;:45::i;:::-;27703:10;;27696:57;;;-1:-1:-1;;;27696:57:0;;27747:4;27696:57;;;;;;27675:18;;27696:91;;27772:14;;-1:-1:-1;;;;;27703:10:0;;;;27696:42;;:57;;;;;;;;;;;;;;;27703:10;27696:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27696:57:0;;:75;:91::i;:::-;27675:112;;27804:46;27828:9;27839:10;27804:23;:46::i;:::-;27872:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27124:813;;26934:1010;;;:::o;29043:447::-;29169:16;;;29183:1;29169:16;;;;;;;;;29145:21;;29169:16;;;;;;;;;;-1:-1:-1;29169:16:0;29145:40;;29214:4;29196;29201:1;29196:7;;;;;;;;-1:-1:-1;;;;;29196:23:0;;;:7;;;;;;;;;;:23;;;;29240:6;;:13;;;-1:-1:-1;;;29240:13:0;;;;:6;;;;;:11;;:13;;;;;29196:7;;29240:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29240:13:0;29230:7;;:4;;29235:1;;29230:7;;;;;;-1:-1:-1;;;;;29230:23:0;;;:7;;;;;;;;;:23;29274:10;;29264:7;;29274:10;;;29264:4;;29269:1;;29264:7;;;;;;;;;;;:20;-1:-1:-1;;;;;29264:20:0;;;-1:-1:-1;;;;;29264:20:0;;;;;29297:6;;;;;;;;;-1:-1:-1;;;;;29297:6:0;-1:-1:-1;;;;;29297:60:0;;29372:11;29398:1;29414:4;29433:8;29456:15;29297:185;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29297:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29043:447;;;:::o;28627:408::-;28748:16;;;28762:1;28748:16;;;;;;;;28724:21;;28748:16;;;;;;;;;;-1:-1:-1;28748:16:0;28724:40;;28793:4;28775;28780:1;28775:7;;;;;;;;-1:-1:-1;;;;;28775:23:0;;;:7;;;;;;;;;;:23;;;;28819:6;;:13;;;-1:-1:-1;;;28819:13:0;;;;:6;;;;;:11;;:13;;;;;28775:7;;28819:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28819:13:0;28809:7;;:4;;28814:1;;28809:7;;;;;;-1:-1:-1;;;;;28809:23:0;;;:7;;;;;;;;;;:23;;;;28845:6;;:182;;-1:-1:-1;;;28845:182:0;;;;;;;;:6;:182;;;;;;;;;;;;;29001:15;28845:182;;;;;;;;;;;;;;;;;;;;;:6;;;;;:57;;28917:11;;28845:6;;28959:4;;28978:8;;28845:182;;;;;;;;;;;;;;;;:6;:182;;;;;;;;;;;;;;;;3783:106;3841:7;3872:1;3868;:5;:13;;3880:1;3868:13;;;-1:-1:-1;3876:1:0;;3783:106;-1:-1:-1;3783:106:0:o;46000:89::-;46058:12;:23;46000:89::o;10884:222::-;-1:-1:-1;;;;;10958:22:0;;10950:66;;;;;-1:-1:-1;;;10950:66:0;;;;;;;;;;;;-1:-1:-1;;;10950:66:0;;;;;;;;;;;;;;;11053:6;;11032:38;;-1:-1:-1;;;;;11032:38:0;;;;11053:6;;;;;11032:38;;;;;11081:6;:17;;-1:-1:-1;;;;;11081:17:0;;;;;-1:-1:-1;;;;;;11081:17:0;;;;;;;;;10884:222::o;3262:225::-;3382:7;3417:12;3410:5;3402:28;;;;-1:-1:-1;;;3402:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3441:9;3457:1;3453;:5;;;;;;;3262:225;-1:-1:-1;;;;;3262:225:0:o;24605:385::-;24723:4;24740:17;24760:28;24771:16;;24760:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;24820:18:0;;;;;;:12;:18;;;;;;24740:48;;-1:-1:-1;24820:33:0;;24740:48;24820:22;:33::i;:::-;-1:-1:-1;;;;;24799:18:0;;;;;;;:12;:18;;;;;;:54;;;;24883:16;;;;;;;:31;;24904:9;24883:20;:31::i;:::-;-1:-1:-1;;;;;24864:16:0;;;;;;;:12;:16;;;;;;;;;:50;;;;24932:26;;;;;;;24864:16;;24932:26;;;;-1:-1:-1;;;;;;;;;;;24932:26:0;;;;;;;;-1:-1:-1;24978:4:0;;24605:385;-1:-1:-1;;;;24605:385:0:o;18762:278::-;18871:10;18811:4;18845:37;;;:25;:37;;;;;;;;18844:38;:58;;;;-1:-1:-1;18896:6:0;;;;18895:7;18844:58;:82;;;;-1:-1:-1;18915:11:0;;-1:-1:-1;;;18915:11:0;;;;18844:82;:128;;;;;18971:1;18939:29;18955:12;;18939:11;;:15;;:29;;;;:::i;:::-;:33;18844:128;:188;;;;-1:-1:-1;;19016:16:0;;19006:4;18985:27;;;;:12;:27;;;;;;:47;;;18762:278::o;29498:1279::-;15041:6;:13;;-1:-1:-1;;15041:13:0;15050:4;15041:13;;;29586:12:::1;::::0;29570:11:::1;::::0;15041:6;;29570:29:::1;::::0;:11;:15:::1;:29::i;:::-;29547:52;;29612:27;29642:97;29672:15;;29702:26;;29642:15;:97::i;:::-;:134;;29764:12;;29642:134;;;29751:1;29642:134;29864:16;::::0;29839:4:::1;29787:28;29818:27:::0;;;:12:::1;:27;::::0;;;;;29612:164;;-1:-1:-1;29787:28:0;29818:73:::1;::::0;:31:::1;:73::i;:::-;29787:104:::0;-1:-1:-1;29904:23:0::1;29930:90;30007:12:::0;29930:62:::1;29965:26;:19:::0;29989:1:::1;29965:23;:26::i;29930:90::-;29904:116;;30033:19;30055:101;30143:12;30055:73;30090:37;30111:15;;30090:16;30104:1;30090:9;;:13;;:16;;;;:::i;30055:101::-;30033:123:::0;-1:-1:-1;30169:24:0::1;30196:78;30033:123:::0;30196:51:::1;:20:::0;30231:15;30196:34:::1;:51::i;:78::-;30169:105:::0;-1:-1:-1;30291:19:0;;30287:84:::1;;30327:32;30343:15;30327;:32::i;:::-;30387:15:::0;;30383:108:::1;;30457:21;::::0;30419:60:::1;::::0;30444:11;;-1:-1:-1;;;;;30457:21:0::1;30419:24;:60::i;:::-;30507:20:::0;;30503:108:::1;;30582:16;::::0;30544:55:::1;::::0;30564:16;;-1:-1:-1;;;;;30582:16:0::1;30544:19;:55::i;:::-;30628:141;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;15077:6:0;:14;;-1:-1:-1;;15077:14:0;;;-1:-1:-1;;;;29498:1279:0:o;18365:389::-;-1:-1:-1;;;;;18478:18:0;;18452:4;18478:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;18500:16:0;;;;;;:12;:16;;;;;;;;18478:38;18474:273;;;-1:-1:-1;18540:5:0;18533:12;;18474:273;18567:21;;-1:-1:-1;;;18567:21:0;;;;18563:184;;;-1:-1:-1;18612:4:0;18605:11;;18563:184;-1:-1:-1;;;;;18657:31:0;;;;;;:25;:31;;;;;;;;;:77;;-1:-1:-1;;;;;;18705:29:0;;;;;;:25;:29;;;;;;;;18657:77;18649:86;;;;32079:1367;32241:11;;32282:7;;-1:-1:-1;;;;;32351:36:0;;32202:7;32351:36;;;:25;:36;;;;;;32202:7;;32241:11;32282:7;32351:36;;32347:143;;;32415:12;;32404:23;;32453:25;32466:11;;32453:8;:12;;:25;;;;:::i;:::-;32442:36;;32347:143;32531:19;;-1:-1:-1;;;32531:19:0;;;;32527:92;;;32579:28;32600:6;32579:20;:28::i;:::-;32567:40;;;;32527:92;-1:-1:-1;;;;;32699:23:0;;;;;;:15;:23;;;;;;;;;:53;;-1:-1:-1;;;;;;32726:26:0;;;;;;:15;:26;;;;;;;;32699:53;32694:120;;;32785:2;32774:8;:13;32770:32;;;32800:2;32789:13;;32770:32;32826:17;32846:43;13216:3;32846:23;:9;32860:8;32846:13;:23::i;:43::-;32826:63;;32990:12;:10;:12::i;:::-;:28;;;;;33017:1;33006:8;:12;32990:28;32986:220;;;33093:101;33123:56;33175:3;33123:47;33161:8;33124:31;33138:16;;33124:9;:13;;:31;;;;:::i;:::-;33123:37;;:47::i;:56::-;33093:11;:101::i;:::-;33269:4;33248:27;;;;:12;:27;;;;;;:66;;33294:9;33248:31;:66::i;:::-;33239:4;33218:27;;;;:12;:27;;;;;:96;;;;33376:16;;-1:-1:-1;;;;;33330:64:0;;;-1:-1:-1;;;;;;;;;;;33330:64:0;33362:31;;:9;;:13;:31::i;:::-;33330:64;;;;;;;;;;;;;;;33414:24;:9;33428;33414:13;:24::i;:::-;33407:31;32079:1367;-1:-1:-1;;;;;;;32079:1367:0:o;17933:108::-;18004:10;;18018:15;-1:-1:-1;18004:29:0;17933:108;:::o;34838:313::-;34881:6;;;;34876:268;;34904:25;34932:22;:20;:22::i;:::-;34904:50;;34969:18;35015:62;35054:22;;35015:34;35037:11;;35015:17;:21;;:34;;;;:::i;:62::-;34969:123;;35109:23;35120:11;35109:10;:23::i;34876:268::-;34838:313::o;36426:683::-;36550:15;;36540:26;;:5;;:9;:26::i;:::-;36527:10;:39;;;;36808:186;36981:12;;36808:158;36848:107;36883:57;36917:22;;36883:29;36900:11;;36883:12;;:16;;:29;;;;:::i;:57::-;36848:12;;;:16;:107::i;:::-;36808:11;;;:25;:158::i;:186::-;36794:11;:200;-1:-1:-1;37085:11:0;:16;;37100:1;37085:16;;;36426:683::o;18147:104::-;18224:19;;-1:-1:-1;;;18224:19:0;;;;;18147:104::o;37202:1217::-;37609:32;37644:75;37674:34;37692:15;;37674:13;;:17;;:34;;;;:::i;:::-;37644:11;;;:15;:75::i;:::-;37609:110;-1:-1:-1;37805:31:0;37609:110;37834:1;37805:28;:31::i;:::-;37779:23;:57;;;37995:18;;:45;37991:164;;38057:19;:27;;-1:-1:-1;;;;38057:27:0;;;38125:18;;38099:23;:44;37991:164;38194:217;38219:181;38376:23;;38355:18;;:44;38219:117;38324:11;;38219:86;38289:15;;38219:51;38249:20;;38219:11;;:29;;:51;;;;:::i;27952:293::-;28036:6;;28179:17;;28036:201;;;-1:-1:-1;;;28036:201:0;;28101:4;28036:201;;;;;;;;;;:6;:201;;;;;;;;;;-1:-1:-1;;;;;28179:17:0;;;28036:201;;;;28211:15;28036:201;;;;;;:6;;;;;:22;;28066:11;;28036:201;;;;;;;;;;;;;;;28066:11;28036:6;:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27952:293:0:o;28253:366::-;28377:6;;28439:10;;28553:17;;28377:234;;;-1:-1:-1;;;28377:234:0;;28419:4;28377:234;;;;-1:-1:-1;;;;;28439:10:0;;;28377:234;;;;;;;;;;;;;;;;:6;:234;;;;;;;;;;;;28553:17;;;28377:234;;;;28585:15;28377:234;;;;;;:6;;;;;:19;;:234;;;;;;;;;;;;;;;;:6;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18049:90;18118:13;;-1:-1:-1;;;18118:13:0;;;;;18049:90::o;33454:127::-;33516:57;33538:4;13604:42;33560:12;33516:13;:57::i;:::-;;33454:127;:::o

Swarm Source

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