Token EverRise

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
71,618,033,988 RISE

Holders:
683 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Token migration announcement. EverRise token contract has migrated to 0xC17c30e98541188614dF99239cABD40280810cA3.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EverRise

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-22
*/

// Copyright (c) 2021 EverRise Pte Ltd. All rights reserved.
// EverRise licenses this file to you under the MIT license.
/*
The EverRise token is the keystone in the EverRise Ecosytem of dApps
 and the overaching key that unlocks multi-blockchain unification via
 the EverBridge.

On EverRise token txns 6% buyback and business development fees are collected
* 4% for token Buyback from the market, 
     with bought back tokens directly distributed as staking rewards
* 2% for Business Development (Development, Sustainability and Marketing)

 ________                              _______   __
/        |                            /       \ /  |
$$$$$$$$/__     __  ______    ______  $$$$$$$  |$$/   _______   ______
$$ |__  /  \   /  |/      \  /      \ $$ |__$$ |/  | /       | /      \
$$    | $$  \ /$$//$$$$$$  |/$$$$$$  |$$    $$< $$ |/$$$$$$$/ /$$$$$$  |
$$$$$/   $$  /$$/ $$    $$ |$$ |  $$/ $$$$$$$  |$$ |$$      \ $$    $$ |
$$ |_____ $$ $$/  $$$$$$$$/ $$ |      $$ |  $$ |$$ | $$$$$$  |$$$$$$$$/
$$       | $$$/   $$       |$$ |      $$ |  $$ |$$ |/     $$/ $$       |
$$$$$$$$/   $/     $$$$$$$/ $$/       $$/   $$/ $$/ $$$$$$$/   $$$$$$$/

Learn more about EverRise and the EverRise Ecosystem of dApps and
how our utilities, and our partners, can help protect your investors
and help your project grow: https://www.everrise.com
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.8;

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

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

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

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

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

    function transferFromWithPermit(
        address sender,
        address recipient,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bool);

    function totalSupply() external view returns (uint256);

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

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

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

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);
}

// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

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

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

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

    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 DOMAIN_SEPARATOR() external view returns (bytes32);

    function nonces(address owner) external view 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 name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
}

// pragma solidity >=0.6.2;

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

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

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

    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

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

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

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

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

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

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

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

// pragma solidity >=0.6.2;

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

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

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

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

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

interface IEverStake {
    function createRewards(address acount, uint256 tAmount) external;

    function deliver(uint256 tAmount) external;

    function getTotalAmountStaked() external view returns (uint256);

    function getTotalRewardsDistributed() external view returns (uint256);
}

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

// helper methods for discovering LP pair addresses
library PairHelper {
    bytes private constant token0Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token0.selector);
    bytes private constant token1Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token1.selector);

    function token0(address pair) internal view returns (address) {
        return token(pair, token0Selector);
    }

    function token1(address pair) internal view returns (address) {
        return token(pair, token1Selector);
    }

    function token(address pair, bytes memory selector)
        private
        view
        returns (address)
    {
        // Do not check if pair is not a contract to avoid warning in txn log
        if (!isContract(pair)) return address(0); 

        (bool success, bytes memory data) = pair.staticcall(selector);

        if (success && data.length >= 32) {
            return abi.decode(data, (address));
        }
        
        return address(0);
    }

    function isContract(address account) private view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }

        return (codehash != accountHash && codehash != 0x0);
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _buybackOwner;

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    modifier onlyBuybackOwner() {
        require(
            _buybackOwner == _msgSender(),
            "Ownable: caller is not the buyback owner"
        );
        _;
    }

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        _buybackOwner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    // Allow contract ownership and access to contract onlyOwner functions
    // to be locked using EverOwn with control gated by community vote.
    //
    // EverRise ($RISE) stakers become voting members of the
    // decentralized autonomous organization (DAO) that controls access
    // to the token contract via the EverRise Ecosystem dApp EverOwn
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferBuybackOwnership(address newOwner)
        external
        virtual
        onlyOwner
    {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );

        emit OwnershipTransferred(_buybackOwner, newOwner);
        _buybackOwner = newOwner;
    }

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

    function buybackOwner() public view returns (address) {
        return _buybackOwner;
    }
}

contract EverRise is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using PairHelper for address;

    struct TransferDetails {
        uint112 balance0;
        uint112 balance1;
        uint32 blockNumber;
        address to;
        address origin;
    }

    address payable public businessDevelopmentAddress =
        payable(0x23F4d6e1072E42e5d25789e3260D19422C2d3674); // Business Development Address
    address public stakingAddress;
    address public everMigrateAddress;

    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private lastCoolDownTrade;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isEverRiseEcosystemContract;
    address[] public allEcosystemContracts;

    mapping(address => bool) private _isAuthorizedSwapToken;
    address[] public allAuthorizedSwapTokens;

    uint256 private constant MAX = ~uint256(0);

    string private constant _name = "EverRise";
    string private constant _symbol = "RISE";
    // Large data type for maths
    uint256 private constant _decimals = 18;
    // Short data type for decimals function (no per function conversion)
    uint8 private constant _decimalsShort = uint8(_decimals);
    // Golden supply
    uint256 private constant _tTotal = 7_1_618_033_988 * 10**_decimals;

    uint256 private _holders = 0;

    // Fee and max txn are set by setTradingEnabled
    // to allow upgrading balances to arrange their wallets
    // and stake their assets before trading start
    uint256 public liquidityFee = 0;
    uint256 private _previousLiquidityFee = liquidityFee;
    uint256 private _maxTxAmount = _tTotal;
    
    uint256 private constant _tradeStartLiquidityFee = 6;
    uint256 private _tradeStartMaxTxAmount = _tTotal.div(1000); // Max txn 0.1% of supply

    uint256 public businessDevelopmentDivisor = 2;

    uint256 private minimumTokensBeforeSwap = 5 * 10**6 * 10**_decimals;
    uint256 private buyBackUpperLimit = 10 * 10**18;
    uint256 private buyBackTriggerTokenLimit = 1 * 10**6 * 10**_decimals;
    uint256 private buyBackMinAvailability = 1 * 10**18; //1 BNB

    uint256 private buyVolume = 0;
    uint256 private sellVolume = 0;
    uint256 public totalBuyVolume = 0;
    uint256 public totalSellVolume = 0;
    uint256 public totalVolume = 0;
    uint256 private nextBuybackAmount = 0;
    uint256 private buyBackTriggerVolume = 100 * 10**6 * 10**_decimals;

    uint256 private tradingStart = MAX;
    uint256 private tradingStartCooldown = MAX;

    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.
    uint256 private constant _FALSE = 1;
    uint256 private constant _TRUE = 2;

    uint256 private _checkingTokens;
    uint256 private _inSwapAndLiquify;

    // Infrequently set booleans
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = false;
    bool public liquidityLocked = false;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    IEverStake stakeToken;

    bytes32 public immutable DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint256) public nonces;

    TransferDetails lastTransfer;

    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SwapTokensForETH(uint256 amountIn, address[] path);
    event SwapTokensForTokens(uint256 amountIn, address[] path);

    event ExcludeFromFeeUpdated(address account);
    event IncludeInFeeUpdated(address account);

    event LiquidityFeeUpdated(uint256 prevValue, uint256 newValue);
    event MaxTxAmountUpdated(uint256 prevValue, uint256 newValue);
    event BusinessDevelopmentDivisorUpdated(
        uint256 prevValue,
        uint256 newValue
    );
    event MinTokensBeforeSwapUpdated(uint256 prevValue, uint256 newValue);
    event BuybackMinAvailabilityUpdated(uint256 prevValue, uint256 newValue);

    event TradingEnabled();
    event BuyBackAndRewardStakers(uint256 amount);
    event BuybackUpperLimitUpdated(uint256 prevValue, uint256 newValue);
    event BuyBackTriggerTokenLimitUpdated(uint256 prevValue, uint256 newValue);

    event RouterAddressUpdated(address prevAddress, address newAddress);
    event BusinessDevelopmentAddressUpdated(
        address prevAddress,
        address newAddress
    );
    event StakingAddressUpdated(address prevAddress, address newAddress);
    event EverMigrateAddressUpdated(address prevAddress, address newAddress);

    event EverRiseEcosystemContractAdded(address contractAddress);
    event EverRiseEcosystemContractRemoved(address contractAddress);

    event HoldersIncreased(uint256 prevValue, uint256 newValue);
    event HoldersDecreased(uint256 prevValue, uint256 newValue);

    event AuthorizedSwapTokenAdded(address tokenAddress);
    event AuthorizedSwapTokenRemoved(address tokenAddress);

    event LiquidityLocked();
    event LiquidityUnlocked();

    event StakingIncreased(uint256 amount);
    event StakingDecreased(uint256 amount);

    modifier lockTheSwap() {
        require(_inSwapAndLiquify != _TRUE);
        _inSwapAndLiquify = _TRUE;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _inSwapAndLiquify = _FALSE;
    }

    modifier tokenCheck() {
        require(_checkingTokens != _TRUE);
        _checkingTokens = _TRUE;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _checkingTokens = _FALSE;
    }

    constructor(address _stakingAddress, address routerAddress) {
        require(
            _stakingAddress != address(0),
            "_stakingAddress should not be to the zero address"
        );
        require(
            routerAddress != address(0),
            "routerAddress should not be the zero address"
        );


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

        stakingAddress = _stakingAddress;
        stakeToken = IEverStake(_stakingAddress);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); //Pancakeswap router mainnet - BSC
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); //Testnet
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); //Sushiswap router mainnet - Polygon
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Uniswap V2 router mainnet - ETH
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5e0829caced8ffdd4de3c43696c57f7d7a678ff); //Quickswap V2 router mainnet - Polygon
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(_name)),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
        _tOwned[_msgSender()] = _tTotal;
        // Track holder change
        _holders = 1;
        emit HoldersIncreased(0, 1);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _everRiseEcosystemContractAdd(_stakingAddress);
        authorizedSwapTokenAdd(address(this));
        authorizedSwapTokenAdd(uniswapV2Router.WETH());

        emit Transfer(address(0), _msgSender(), _tTotal);
        lockLiquidity();
    }

    // Function to receive ETH when msg.data is be empty
    // Receives ETH from uniswapV2Router when swapping
    receive() external payable {}

    // Fallback function to receive ETH when msg.data is not empty
    fallback() external payable {}

    function transferBalance(uint256 amount) external onlyOwner {
        _msgSender().transfer(amount);
    }

    function setBuyBackTriggerVolume(uint256 amount) external onlyBuybackOwner {
        buyBackTriggerVolume = amount;
    }

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

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function transferFromWithPermit(
        address sender,
        address recipient,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bool) {
        permit(sender, _msgSender(), amount, deadline, v, r, s);
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function manualBuyback(uint256 amount, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        require(amount > 0 && numOfDecimals >= 0, "Invalid Input");

        uint256 value = amount.mul(10**18).div(10**numOfDecimals);

        uint256 tokensReceived = swapETHForTokensNoFee(
            address(this),
            stakingAddress,
            value
        );

        //Distribute the rewards to the staking pool
        distributeStakingRewards(tokensReceived);
    }

    function swapTokens(
        address fromToken,
        address toToken,
        uint256 amount,
        uint256 numOfDecimals,
        uint256 fromTokenDecimals
    ) external onlyBuybackOwner {
        require(_isAuthorizedSwapToken[fromToken], "fromToken is not an authorized token");
        require(_isAuthorizedSwapToken[toToken], "toToken is not an authorized token");

        uint256 actualAmount = amount
            .mul(10**fromTokenDecimals)
            .div(10**numOfDecimals);

        if (toToken == uniswapV2Router.WETH()) {
            swapTokensForEth(fromToken, address(this), actualAmount);
        } else if (fromToken == uniswapV2Router.WETH()) {
            swapETHForTokens(toToken, address(this), actualAmount);
        } else {
            swapTokensForTokens(
                fromToken,
                toToken,
                address(this),
                actualAmount
            );
        }
    }

    function lockLiquidity() public onlyOwner {
        liquidityLocked = true;
        emit LiquidityLocked();
    }

    function unlockLiquidity() external onlyOwner {
        liquidityLocked = false;
        emit LiquidityUnlocked();
    }

    function excludeFromFee(address account) external onlyOwner {
        require(
            !_isExcludedFromFee[account],
            "Account is not excluded for fees"
        );

        _excludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        require(
            _isExcludedFromFee[account],
            "Account is not included for fees"
        );

        _includeInFee(account);
    }

    function setLiquidityFeePercent(uint256 liquidityFeeRate) external onlyOwner {
        require(liquidityFeeRate <= 10, "liquidityFeeRate should be less than 10%");

        uint256 prevValue = liquidityFee;
        liquidityFee = liquidityFeeRate;
        emit LiquidityFeeUpdated(prevValue, liquidityFee);
    }

    function setMaxTxAmount(uint256 txAmount) external onlyOwner {
        uint256 prevValue = _maxTxAmount;
        _maxTxAmount = txAmount;
        emit MaxTxAmountUpdated(prevValue, txAmount);
    }

    function setBusinessDevelopmentDivisor(uint256 divisor) external onlyOwner {
        require(
            divisor <= liquidityFee,
            "Business Development divisor should be less than liquidity fee"
        );

        uint256 prevValue = businessDevelopmentDivisor;
        businessDevelopmentDivisor = divisor;
        emit BusinessDevelopmentDivisorUpdated(
            prevValue,
            businessDevelopmentDivisor
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap)
        external
        onlyOwner
    {
        uint256 prevValue = minimumTokensBeforeSwap;
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(prevValue, minimumTokensBeforeSwap);
    }

    function setBuybackUpperLimit(uint256 buyBackLimit, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackUpperLimit;
        buyBackUpperLimit = buyBackLimit
            .mul(10**18)
            .div(10**numOfDecimals);
        emit BuybackUpperLimitUpdated(prevValue, buyBackUpperLimit);
    }

    function setBuybackTriggerTokenLimit(uint256 buyBackTriggerLimit)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackTriggerTokenLimit;
        buyBackTriggerTokenLimit = buyBackTriggerLimit;
        emit BuyBackTriggerTokenLimitUpdated(
            prevValue,
            buyBackTriggerTokenLimit
        );
    }

    function setBuybackMinAvailability(uint256 amount, uint256 numOfDecimals)
        external
        onlyBuybackOwner
    {
        uint256 prevValue = buyBackMinAvailability;
        buyBackMinAvailability = amount
            .mul(10**18)
            .div(10**numOfDecimals);
        emit BuybackMinAvailabilityUpdated(prevValue, buyBackMinAvailability);
    }

    function setBuyBackEnabled(bool _enabled) public onlyBuybackOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function setTradingEnabled(uint256 _tradeStartDelay, uint256 _tradeStartCoolDown) external onlyOwner {
        require(_tradeStartDelay < 10, "tradeStartDelay should be less than 10 minutes");
        require(_tradeStartCoolDown < 120, "tradeStartCoolDown should be less than 120 minutes");
        require(_tradeStartDelay < _tradeStartCoolDown, "tradeStartDelay must be less than tradeStartCoolDown");
        // Can only be called once
        require(tradingStart == MAX && tradingStartCooldown == MAX, "Trading has already started");
        // Set initial values
        liquidityFee = _tradeStartLiquidityFee;
        _previousLiquidityFee = liquidityFee;
        _maxTxAmount = _tradeStartMaxTxAmount;

        setBuyBackEnabled(true);
        setSwapAndLiquifyEnabled(true);
        // Add time buffer to allow switching on trading on every chain
        // before announcing to community
        tradingStart = block.timestamp + _tradeStartDelay * 1 minutes;
        tradingStartCooldown = tradingStart + _tradeStartCoolDown * 1 minutes;
        // Announce to blockchain immediately, even though trades
        // can't start until delay passes (snipers no sniping)
        emit TradingEnabled();
    }

    function setBusinessDevelopmentAddress(address _businessDevelopmentAddress)
        external
        onlyOwner
    {
        require(
            _businessDevelopmentAddress != address(0),
            "_businessDevelopmentAddress should not be the zero address"
        );

        address prevAddress = businessDevelopmentAddress;
        businessDevelopmentAddress = payable(_businessDevelopmentAddress);
        emit BusinessDevelopmentAddressUpdated(
            prevAddress,
            _businessDevelopmentAddress
        );
    }

    function setEverMigrateAddress(address _everMigrateAddress)
        external
        onlyOwner
    {
        require(
            _everMigrateAddress != address(0),
            "_everMigrateAddress should not be the zero address"
        );

        address prevAddress = everMigrateAddress;
        everMigrateAddress = _everMigrateAddress;
        emit EverMigrateAddressUpdated(prevAddress, _everMigrateAddress);

        _everRiseEcosystemContractAdd(_everMigrateAddress);
    }

    function setStakingAddress(address _stakingAddress) external onlyOwner {
        require(
            _stakingAddress != address(0),
            "_stakingAddress should not be to zero address"
        );

        address prevAddress = stakingAddress;
        stakingAddress = _stakingAddress;
        stakeToken = IEverStake(_stakingAddress);
        emit StakingAddressUpdated(prevAddress, _stakingAddress);

        _everRiseEcosystemContractAdd(_stakingAddress);
    }

    function setRouterAddress(address routerAddress) external onlyOwner {
        require(
            routerAddress != address(0),
            "routerAddress should not be the zero address"
        );

        address prevAddress = address(uniswapV2Router);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress); 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        emit RouterAddressUpdated(prevAddress, routerAddress);
    }

    function everRiseEcosystemContractAdd(address contractAddress) external onlyOwner {
        require(contractAddress != address(0), "contractAddress should not be the zero address");
        require(contractAddress != address(this), "EverRise token should not be added as an Ecosystem contract");
        require(
            !_isEverRiseEcosystemContract[contractAddress],
            "contractAddress is already included as an EverRise Ecosystem contract"
        );

        _everRiseEcosystemContractAdd(contractAddress);
    }

    function everRiseEcosystemContractRemove(address contractAddress) external onlyOwner {
        require(
            _isEverRiseEcosystemContract[contractAddress],
            "contractAddress is not included as EverRise Ecosystem contract"
        );

        _isEverRiseEcosystemContract[contractAddress] = false;

        for (uint256 i = 0; i < allEcosystemContracts.length; i++) {
            if (allEcosystemContracts[i] == contractAddress) {
                allEcosystemContracts[i] = allEcosystemContracts[allEcosystemContracts.length - 1];
                allEcosystemContracts.pop();
                break;
            }
        }

        emit EverRiseEcosystemContractRemoved(contractAddress);
        _includeInFee(contractAddress);
    }

    function balanceOf(address account)
        external
        view
        override
        returns (uint256)
    {
        uint256 balance0 = _balanceOf(account);
        if (
            !inSwapAndLiquify() &&
            lastTransfer.blockNumber == uint32(block.number) &&
            account == lastTransfer.to
        ) {
            // Balance being checked is same address as last to in _transfer
            // check if likely same txn and a Liquidity Add
            _validateIfLiquidityAdd(account, uint112(balance0));
        }

        return balance0;
    }

    function maxTxAmount() external view returns (uint256) {
        if (isTradingEnabled() && inTradingStartCoolDown()) {
            uint256 maxTxn = maxTxCooldownAmount();
            return maxTxn < _maxTxAmount ? maxTxn : _maxTxAmount;
        }

        return _maxTxAmount;
    }

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

    function getTotalAmountStaked() external view returns (uint256)
    {
        return stakeToken.getTotalAmountStaked();
    }

    function getTotalRewardsDistributed() external view returns (uint256)
    {
        return stakeToken.getTotalRewardsDistributed();
    }

    function holders() external view returns (uint256) {
        return _holders;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function buyBackUpperLimitAmount() external view returns (uint256) {
        return buyBackUpperLimit;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function allEcosystemContractsLength() external view returns (uint) {
        return allEcosystemContracts.length;
    }

    function allAuthorizedSwapTokensLength() external view returns (uint) {
        return allAuthorizedSwapTokens.length;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function authorizedSwapTokenAdd(address tokenAddress) public onlyOwner {
        require(tokenAddress != address(0), "tokenAddress should not be the zero address");
        require(!_isAuthorizedSwapToken[tokenAddress], "tokenAddress is already an authorized token");

        _isAuthorizedSwapToken[tokenAddress] = true;
        allAuthorizedSwapTokens.push(tokenAddress);

        emit AuthorizedSwapTokenAdded(tokenAddress);
    }

    function authorizedSwapTokenRemove(address tokenAddress) public onlyOwner {
        require(tokenAddress != address(this), "cannot remove this contract from authorized tokens");
        require(tokenAddress != uniswapV2Router.WETH(), "cannot remove the WETH type contract from authorized tokens");
        require(_isAuthorizedSwapToken[tokenAddress], "tokenAddress is not an authorized token");

        _isAuthorizedSwapToken[tokenAddress] = false;

        for (uint256 i = 0; i < allAuthorizedSwapTokens.length; i++) {
            if (allAuthorizedSwapTokens[i] == tokenAddress) {
                allAuthorizedSwapTokens[i] = allAuthorizedSwapTokens[allAuthorizedSwapTokens.length - 1];
                allAuthorizedSwapTokens.pop();
                break;
            }
        }

        emit AuthorizedSwapTokenRemoved(tokenAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function isTradingEnabled() public view returns (bool) {
        // Trading has been set and has time buffer has elapsed
        return tradingStart < block.timestamp;
    }

    function inTradingStartCoolDown() public view returns (bool) {
        // Trading has been started and the cool down period has elapsed
        return tradingStartCooldown >= block.timestamp;
    }

    function maxTxCooldownAmount() public pure returns (uint256) {
        return _tTotal.div(2000);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(from != to, "Transfer to and from addresses the same");
        require(!inTokenCheck(), "Invalid reentrancy from token0/token1 balanceOf check");

        address _owner = owner();
        bool isIgnoredAddress = from == _owner || to == _owner ||
             _isEverRiseEcosystemContract[from] || _isEverRiseEcosystemContract[to];
        
        bool _isTradingEnabled = isTradingEnabled();

        require(amount <= _maxTxAmount || isIgnoredAddress || !_isTradingEnabled,
            "Transfer amount exceeds the maxTxAmount");
        
        address _pair = uniswapV2Pair;
        require(_isTradingEnabled || isIgnoredAddress || (from != _pair && to != _pair),
            "Trading is not enabled");

        bool notInSwapAndLiquify = !inSwapAndLiquify();
        if (_isTradingEnabled && inTradingStartCoolDown() && !isIgnoredAddress && notInSwapAndLiquify) {
            validateDuringTradingCoolDown(to, from, amount);
        }

        uint256 contractTokenBalance = _balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        bool contractAction = _isTradingEnabled &&
            notInSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            to == _pair;

        // Following block is for the contract to convert the tokens to ETH and do the buy back
        if (contractAction) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
            if (buyBackEnabled &&
                address(this).balance > buyBackMinAvailability &&
                buyVolume.add(sellVolume) > buyBackTriggerVolume
            ) {
                if (nextBuybackAmount > address(this).balance) {
                    // Don't try to buyback more than is available.
                    // For example some "ETH" balance may have been
                    // temporally switched to stable coin in crypto-market
                    // downturn using swapTokens, for switching back later
                    nextBuybackAmount = address(this).balance;
                }

                if (nextBuybackAmount > 0) {
                    uint256 tokensReceived = buyBackTokens(nextBuybackAmount);
                    //Distribute the rewards to the staking pool
                    distributeStakingRewards(tokensReceived);
                    nextBuybackAmount = 0; //reset the next buyback amount
                    buyVolume = 0; //reset the buy volume
                    sellVolume = 0; // reset the sell volume
                }
            }
        }

        if (_isTradingEnabled) {
            // Compute Sell Volume and set the next buyback amount
            if (to == _pair) {
                sellVolume = sellVolume.add(amount);
                totalSellVolume = totalSellVolume.add(amount);
                if (amount > buyBackTriggerTokenLimit) {
                    uint256 balance = address(this).balance;
                    if (balance > buyBackUpperLimit) balance = buyBackUpperLimit;
                    nextBuybackAmount = nextBuybackAmount.add(balance.div(100));
                }
            }
            // Compute Buy Volume
            else if (from == _pair) {
                buyVolume = buyVolume.add(amount);
                totalBuyVolume = totalBuyVolume.add(amount);
            }
            
            totalVolume = totalVolume.add(amount);
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        
        // For safety Liquidity Adds should only be done by an owner, 
        // and transfers to and from EverRise Ecosystem contracts
        // are not considered LP adds
        if (isIgnoredAddress || buybackOwner() == _msgSender()) {
            // Clear transfer data
            _clearTransferIfNeeded();
        } else if (notInSwapAndLiquify) {
            // Not in a swap during a LP add, so record the transfer details
            _recordPotentialLiquidityAddTransaction(to);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function _recordPotentialLiquidityAddTransaction(address to)
        private
        tokenCheck {
        uint112 balance0 = uint112(_balanceOf(to));
        address token1 = to.token1();
        if (token1 == address(this)) {
            // Switch token so token1 is always other side of pair
            token1 = to.token0();
        }

        uint112 balance1;
        if (token1 == address(0)) {
            // Not a LP pair, or not yet (contract being created)
            balance1 = 0;
        } else {
            balance1 = uint112(IERC20(token1).balanceOf(to));
        }

        lastTransfer = TransferDetails({
            balance0: balance0,
            balance1: balance1,
            blockNumber: uint32(block.number),
            to: to,
            origin: tx.origin
        });
    }

    function _clearTransferIfNeeded() private {
        // Not Liquidity Add or is owner, clear data from same block to allow balanceOf
        if (lastTransfer.blockNumber == uint32(block.number)) {
            // Don't need to clear if different block
            lastTransfer = TransferDetails({
                balance0: 0,
                balance1: 0,
                blockNumber: 0,
                to: address(0),
                origin: address(0)
            });
        }
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(address(this), address(this), contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Business Development address
        transferToAddressETH(
            businessDevelopmentAddress,
            transferredBalance
                .mul(businessDevelopmentDivisor)
                .div(liquidityFee)
        );
    }

    function buyBackTokens(uint256 amount)
        private
        lockTheSwap
        returns (uint256)
    {
        uint256 tokensReceived;
        if (amount > 0) {
            tokensReceived = swapETHForTokensNoFee(
                address(this),
                stakingAddress,
                amount
            );
        }
        return tokensReceived;
    }

    function swapTokensForEth(
        address tokenAddress,
        address toAddress,
        uint256 tokenAmount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = tokenAddress;
        path[1] = uniswapV2Router.WETH();

        IERC20(tokenAddress).approve(address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            toAddress, // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function swapETHForTokensNoFee(
        address tokenAddress,
        address toAddress,
        uint256 amount
    ) private returns (uint256) {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = tokenAddress;

        // make the swap
        uint256[] memory amounts = uniswapV2Router.swapExactETHForTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
        return amounts[1];
    }

    function swapETHForTokens(
        address tokenAddress,
        address toAddress,
        uint256 amount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = tokenAddress;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }

    function swapTokensForTokens(
        address fromTokenAddress,
        address toTokenAddress,
        address toAddress,
        uint256 tokenAmount
    ) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](3);
        path[0] = fromTokenAddress;
        path[1] = uniswapV2Router.WETH();
        path[2] = toTokenAddress;

        IERC20(fromTokenAddress).approve(address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp.add(120)
        );

        emit SwapTokensForTokens(tokenAmount, path);
    }

    function distributeStakingRewards(uint256 amount) private {
        if (amount > 0) {
            stakeToken.createRewards(address(this), amount);
            stakeToken.deliver(amount);

            emit BuyBackAndRewardStakers(amount);
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        _actualTokenTransfer(sender, recipient, amount);

        if (!takeFee) restoreAllFee();
    }

    function _actualTokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);

        uint256 senderBefore = _tOwned[sender];
        uint256 senderAfter = senderBefore.sub(tAmount);
        _tOwned[sender] = senderAfter;

        uint256 recipientBefore = _tOwned[recipient];
        uint256 recipientAfter = recipientBefore.add(tTransferAmount);
        _tOwned[recipient] = recipientAfter;

        // Track holder change
        if (recipientBefore == 0 && recipientAfter > 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.add(1);
            _holders = holdersAfter;

            emit HoldersIncreased(holdersBefore, holdersAfter);
        }

        if (senderBefore > 0 && senderAfter == 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.sub(1);
            _holders = holdersAfter;

            emit HoldersDecreased(holdersBefore, holdersAfter);
        }

        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);

        if (recipient == stakingAddress) {
            // Increases by the amount entering staking (transfer - fees)
            // Howver, fees should be zero for staking so same as full amount.
            emit StakingIncreased(tTransferAmount);
        } else if (sender == stakingAddress) {
            // Decreases by the amount leaving staking (full amount)
            emit StakingDecreased(tAmount);
        }
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) private {
        require(deadline >= block.timestamp, "EverRise: EXPIRED");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        if (v < 27) {
            v += 27;
        } else if (v > 30) {
            digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest));
        }
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "EverRise: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 beforeAmount = _tOwned[address(this)];
        uint256 afterAmount = beforeAmount.add(tLiquidity);
        _tOwned[address(this)] = afterAmount;

        // Track holder change
        if (beforeAmount == 0 && afterAmount > 0) {
            uint256 holdersBefore = _holders;
            uint256 holdersAfter = holdersBefore.add(1);
            _holders = holdersAfter;

            emit HoldersIncreased(holdersBefore, holdersAfter);
        }
    }

    function removeAllFee() private {
        if (liquidityFee == 0) return;

        _previousLiquidityFee = liquidityFee;

        liquidityFee = 0;
    }

    function restoreAllFee() private {
        liquidityFee = _previousLiquidityFee;
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function _everRiseEcosystemContractAdd(address contractAddress) private {
        if (_isEverRiseEcosystemContract[contractAddress]) return;

        _isEverRiseEcosystemContract[contractAddress] = true;
        allEcosystemContracts.push(contractAddress);

        emit EverRiseEcosystemContractAdded(contractAddress);
        _excludeFromFee(contractAddress);
    }

    function _excludeFromFee(address account) private {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFeeUpdated(account);
    }

    function _includeInFee(address account) private {
        _isExcludedFromFee[account] = false;
        emit IncludeInFeeUpdated(account);
    }

    function validateDuringTradingCoolDown(address to, address from, uint256 amount) private {
        address pair = uniswapV2Pair;
        bool disallow;

        // Disallow multiple same source trades in same block
        if (from == pair) {
            disallow = lastCoolDownTrade[to] == block.number || lastCoolDownTrade[tx.origin] == block.number;
            lastCoolDownTrade[to] = block.number;
            lastCoolDownTrade[tx.origin] = block.number;
        } else if (to == pair) {
            disallow = lastCoolDownTrade[from] == block.number || lastCoolDownTrade[tx.origin] == block.number;
            lastCoolDownTrade[from] = block.number;
            lastCoolDownTrade[tx.origin] = block.number;
        }

        require(!disallow, "Multiple trades in same block from same source are not allowed during trading start cooldown");

        require(amount <= maxTxCooldownAmount(), "Max transaction is 0.05% of total supply during trading start cooldown");
    }

    function inSwapAndLiquify() private view returns (bool) {
        return _inSwapAndLiquify == _TRUE;
    }

    function inTokenCheck() private view returns (bool) {
        return _checkingTokens == _TRUE;
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256
        )
    {
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tLiquidity);
        return (tTransferAmount, tLiquidity);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(liquidityFee).div(10**2);
    }

    function _balanceOf(address account) private view returns (uint256) {
        return _tOwned[account];
    }

    // account must be recorded in _transfer and same block
    function _validateIfLiquidityAdd(address account, uint112 balance0)
        private
        view
    {
        // Test to see if this tx is part of a Liquidity Add
        // using the data recorded in _transfer
        TransferDetails memory _lastTransfer = lastTransfer;
        if (_lastTransfer.origin == tx.origin) {
            // May be same transaction as _transfer, check LP balances
            address token1 = account.token1();

            if (token1 == address(this)) {
                // Switch token so token1 is always other side of pair
                token1 = account.token0();
            }

            // Not LP pair
            if (token1 == address(0)) return;

            uint112 balance1 = uint112(IERC20(token1).balanceOf(account));

            if (balance0 > _lastTransfer.balance0 &&
                balance1 > _lastTransfer.balance1) {
                // Both pair balances have increased, this is a Liquidty Add
                require(false, "Liquidity can be added by the owner only");
            } else if (balance0 < _lastTransfer.balance0 &&
                balance1 < _lastTransfer.balance1)
            {
                // Both pair balances have decreased, this is a Liquidty Remove
                require(!liquidityLocked, "Liquidity cannot be removed while locked");
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"AuthorizedSwapTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"AuthorizedSwapTokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"BusinessDevelopmentAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BusinessDevelopmentDivisorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackAndRewardStakers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuyBackTriggerTokenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackMinAvailabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackUpperLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"EverMigrateAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"EverRiseEcosystemContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"EverRiseEcosystemContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"HoldersDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"HoldersIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"LiquidityFeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LiquidityLocked","type":"event"},{"anonymous":false,"inputs":[],"name":"LiquidityUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"RouterAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"StakingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allAuthorizedSwapTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allAuthorizedSwapTokensLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allEcosystemContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allEcosystemContractsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"authorizedSwapTokenAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"authorizedSwapTokenRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"everMigrateAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"everRiseEcosystemContractAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"everRiseEcosystemContractRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalAmountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inTradingStartCoolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","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":"liquidityLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxCooldownAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_businessDevelopmentAddress","type":"address"}],"name":"setBusinessDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBusinessDevelopmentDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyBackTriggerVolume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackMinAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackTriggerLimit","type":"uint256"}],"name":"setBuybackTriggerTokenLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_everMigrateAddress","type":"address"}],"name":"setEverMigrateAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tradeStartDelay","type":"uint256"},{"internalType":"uint256","name":"_tradeStartCoolDown","type":"uint256"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"},{"internalType":"uint256","name":"fromTokenDecimals","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferBuybackOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferFromWithPermit","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600280546001600160a01b0319167323f4d6e1072e42e5d25789e3260d19422c2d36741790556000600d819055600e819055600f55620000476012600a62000c6e565b62000058906410acc4794462000c7c565b601055620000956103e8620000706012600a62000c6e565b62000081906410acc4794462000c7c565b6200075160201b62002d8b1790919060201c565b60115560026012556012600a620000ad919062000c6e565b620000bc90624c4b4062000c7c565b601355678ac7230489e80000601455620000d96012600a62000c6e565b620000e890620f424062000c7c565b601555670de0b6b3a76400006016556000601755600060185560006019556000601a556000601b556000601c556012600a62000125919062000c6e565b62000135906305f5e10062000c7c565b601d55600019601e819055601f556022805462ffffff191690553480156200015c57600080fd5b50604051620065b7380380620065b78339810160408190526200017f9162000cbb565b60008054336001600160a01b031991821681178355600180549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038216620002435760405162461bcd60e51b815260206004820152603160248201527f5f7374616b696e67416464726573732073686f756c64206e6f7420626520746f60448201527020746865207a65726f206164647265737360781b60648201526084015b60405180910390fd5b6001600160a01b038116620002b05760405162461bcd60e51b815260206004820152602c60248201527f726f75746572416464726573732073686f756c64206e6f74206265207468652060448201526b7a65726f206164647265737360a01b60648201526084016200023a565b60016020818155602191909155600380546001600160a01b03199081166001600160a01b03868116918217909355602480549092161790556040805163c45a015560e01b8152905184939284169263c45a01559260048082019391829003018186803b1580156200032057600080fd5b505afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000cf3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000cf3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200042857600080fd5b505af11580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000cf3565b602380546001600160a01b0319166001600160a01b03928316179055602280546301000000600160b81b0319166301000000928416929092029190911790556040805180820182526008815267457665725269736560c01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527fce794fa9785f2c930c5f814f254aa188dca4e3e9bde647a87f3a0c8d20d90736918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120608052620005856012600a62000c6e565b62000596906410acc4794462000c7c565b336000908152600560209081526040808320939093556001600d8190558351928352908201527f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e910160405180910390a1600160086000620006006000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260089092529020805490911660011790556200064b83620007a4565b620006563062000870565b620006ea602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620006a957600080fd5b505afa158015620006be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e4919062000cf3565b62000870565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200071c6012600a62000c6e565b6200072d906410acc4794462000c7c565b60405190815260200160405180910390a36200074862000a43565b50505062000d8c565b60006200079b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000aca60201b60201c565b90505b92915050565b6001600160a01b03811660009081526009602052604090205460ff1615620007c95750565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fa4156168c286809bc7d80fb9dd33a0f1f71f9cfd58c0fae72c11b2fab3a3e761910160405180910390a16200086d8162000b06565b50565b6000546001600160a01b03163314620008bb5760405162461bcd60e51b815260206004820181905260248201526000805160206200659783398151915260448201526064016200023a565b6001600160a01b038116620009275760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e416464726573732073686f756c64206e6f7420626520746865207a60448201526a65726f206164647265737360a81b60648201526084016200023a565b6001600160a01b0381166000908152600b602052604090205460ff1615620009a65760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e4164647265737320697320616c726561647920616e20617574686f60448201526a3934bd32b2103a37b5b2b760a91b60648201526084016200023a565b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001908117909155600c805491820181559093527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b0319168417905590519182527f3d8bc8d3643383e535cf1332154e6a0eb63b44cd5aed5582a88dab55793e0cbc91015b60405180910390a150565b6000546001600160a01b0316331462000a8e5760405162461bcd60e51b815260206004820181905260248201526000805160206200659783398151915260448201526064016200023a565b6022805462ff00001916620100001790556040517f8f4e75b2b71b51d3107f168f33d4f291c4ef089a69b1075bcbf4476c69e81d0690600090a1565b6000818362000aee5760405162461bcd60e51b81526004016200023a919062000d11565b50600062000afd848662000d69565b95945050505050565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e910162000a38565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000bb257816000190482111562000b965762000b9662000b5b565b8085161562000ba457918102915b93841c939080029062000b76565b509250929050565b60008262000bcb575060016200079e565b8162000bda575060006200079e565b816001811462000bf3576002811462000bfe5762000c1e565b60019150506200079e565b60ff84111562000c125762000c1262000b5b565b50506001821b6200079e565b5060208310610133831016604e8410600b841016171562000c43575081810a6200079e565b62000c4f838362000b71565b806000190482111562000c665762000c6662000b5b565b029392505050565b60006200079b838362000bba565b600081600019048311821515161562000c995762000c9962000b5b565b500290565b80516001600160a01b038116811462000cb657600080fd5b919050565b6000806040838503121562000ccf57600080fd5b62000cda8362000c9e565b915062000cea6020840162000c9e565b90509250929050565b60006020828403121562000d0657600080fd5b6200079b8262000c9e565b600060208083528351808285015260005b8181101562000d405785810183015185820160400152820162000d22565b8181111562000d53576000604083870101525b50601f01601f1916929092016040019392505050565b60008262000d8757634e487b7160e01b600052601260045260246000fd5b500490565b6080516157e862000daf6000396000818161060401526143cb01526157e86000f3fe6080604052600436106103ef5760003560e01c80638188f71c11610206578063bf322d3211610117578063dd62ed3e116100a5578063ec28438a11610077578063ec28438a14610c57578063f0f165af14610c77578063f2fde38b14610c97578063f4e0d9ac14610cb7578063ff7d2e8214610cd757005b8063dd62ed3e14610bbe578063e0223bab14610c04578063e7c52d4414610c22578063ea2f0b3714610c3757005b8063ce71bcd7116100e9578063ce71bcd714610b29578063d6e03cd414610b3e578063d7b4be2414610b5e578063d96d54d814610b7e578063d98daa4314610b9e57005b8063bf322d3214610ab3578063c30fccd914610ad3578063c49b9a8014610af3578063ca5f084f14610b1357005b8063a457c2d711610194578063aed262b111610166578063aed262b114610a33578063b51d404214610a53578063b9e5a03b14610a73578063bb2f719914610a89578063bdc653ef14610a9e57005b8063a457c2d7146109b3578063a725a93f146109d3578063a81d2478146109f3578063a9059cbb14610a1357005b80638ee88c53116101d85780638ee88c531461091b57806390fe60441461093b57806395d89b411461095b57806398118cb414610988578063a073d37f1461099e57005b80638188f71c146108b35780638a60c4c1146108c85780638c0b5e22146108e85780638da5cb5b146108fd57005b806341cb87fc1161030057806357976fb41161028e57806369ef78931161026057806369ef7893146108195780636b25faf9146108395780636b54acd91461085157806370a08231146108665780637ecebe001461088657005b806357976fb4146107a45780635f7e3821146107c45780635f81a57c146107e45780636053a0e3146107fa57005b806349bd5a5e116102d257806349bd5a5e146106f15780634a74bb02146107115780634f27ec3e1461072b5780635342acb41461074b578063567a78c71461078457005b806341cb87fc1461067b57806341e70fa61461069b578063437823ec146106b157806343d91bf1146106d157005b806329d9ec5e1161037d578063313ce5671161034f578063313ce567146105d65780633644e515146105f257806339509351146106265780633a234fc1146106465780633d988cec1461065b57005b806329d9ec5e146105425780632ce04ce31461056257806330adf81f1461058257806330c2c13b146105b657005b80631694505e116103c15780631694505e1461049957806318160ddd146104d857806323b872dd146104ed578063246d9fe81461050d57806329370cc61461052257005b8063064a59d0146103f857806306fdde0314610420578063095ea7b31461045a5780630a96478a1461047a57005b366103f657005b005b34801561040457600080fd5b50601e5442115b60405190151581526020015b60405180910390f35b34801561042c57600080fd5b50604080518082019091526008815267457665725269736560c01b60208201525b6040516104179190615076565b34801561046657600080fd5b5061040b6104753660046150be565b610cf7565b34801561048657600080fd5b50600a545b604051908152602001610417565b3480156104a557600080fd5b506022546104c090630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610417565b3480156104e457600080fd5b5061048b610d0e565b3480156104f957600080fd5b5061040b6105083660046150ea565b610d30565b34801561051957600080fd5b5061048b610daa565b34801561052e57600080fd5b506103f661053d366004615139565b610e27565b34801561054e57600080fd5b506103f661055d366004615156565b610eae565b34801561056e57600080fd5b506004546104c0906001600160a01b031681565b34801561058e57600080fd5b5061048b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156105c257600080fd5b506103f66105d1366004615178565b610f46565b3480156105e257600080fd5b5060405160128152602001610417565b3480156105fe57600080fd5b5061048b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063257600080fd5b5061040b6106413660046150be565b6112ca565b34801561065257600080fd5b50600c5461048b565b34801561066757600080fd5b506104c0610676366004615195565b611300565b34801561068757600080fd5b506103f6610696366004615178565b61132a565b3480156106a757600080fd5b5061048b601a5481565b3480156106bd57600080fd5b506103f66106cc366004615178565b6115bf565b3480156106dd57600080fd5b506103f66106ec3660046151ae565b61165e565b3480156106fd57600080fd5b506023546104c0906001600160a01b031681565b34801561071d57600080fd5b5060225461040b9060ff1681565b34801561073757600080fd5b506103f6610746366004615195565b611903565b34801561075757600080fd5b5061040b610766366004615178565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561079057600080fd5b506103f661079f366004615178565b6119eb565b3480156107b057600080fd5b5060225461040b9062010000900460ff1681565b3480156107d057600080fd5b506002546104c0906001600160a01b031681565b3480156107f057600080fd5b5061048b601b5481565b34801561080657600080fd5b5060225461040b90610100900460ff1681565b34801561082557600080fd5b506103f6610834366004615178565b611ba7565b34801561084557600080fd5b50601f5442111561040b565b34801561085d57600080fd5b506103f6611dcc565b34801561087257600080fd5b5061048b610881366004615178565b611e2d565b34801561089257600080fd5b5061048b6108a1366004615178565b60256020526000908152604090205481565b3480156108bf57600080fd5b50600d5461048b565b3480156108d457600080fd5b506103f66108e3366004615195565b611e93565b3480156108f457600080fd5b5061048b611eee565b34801561090957600080fd5b506000546001600160a01b03166104c0565b34801561092757600080fd5b506103f6610936366004615195565b611f3a565b34801561094757600080fd5b506103f6610956366004615156565b612004565b34801561096757600080fd5b506040805180820190915260048152635249534560e01b602082015261044d565b34801561099457600080fd5b5061048b600e5481565b3480156109aa57600080fd5b5060135461048b565b3480156109bf57600080fd5b5061040b6109ce3660046150be565b612252565b3480156109df57600080fd5b506103f66109ee366004615178565b6122a1565b3480156109ff57600080fd5b506103f6610a0e366004615195565b61234d565b348015610a1f57600080fd5b5061040b610a2e3660046150be565b61237c565b348015610a3f57600080fd5b506103f6610a4e366004615156565b612389565b348015610a5f57600080fd5b506103f6610a6e366004615156565b61243c565b348015610a7f57600080fd5b5061048b60195481565b348015610a9557600080fd5b506103f66124b3565b348015610aaa57600080fd5b5060145461048b565b348015610abf57600080fd5b506104c0610ace366004615195565b612519565b348015610adf57600080fd5b506103f6610aee366004615178565b612529565b348015610aff57600080fd5b506103f6610b0e366004615139565b6126d0565b348015610b1f57600080fd5b5061048b60125481565b348015610b3557600080fd5b5061048b61273b565b348015610b4a57600080fd5b5061040b610b593660046151ff565b61275e565b348015610b6a57600080fd5b506003546104c0906001600160a01b031681565b348015610b8a57600080fd5b506103f6610b99366004615178565b6127c9565b348015610baa57600080fd5b506103f6610bb9366004615195565b6128c9565b348015610bca57600080fd5b5061048b610bd9366004615276565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c1057600080fd5b506001546001600160a01b03166104c0565b348015610c2e57600080fd5b5061048b612931565b348015610c4357600080fd5b506103f6610c52366004615178565b612976565b348015610c6357600080fd5b506103f6610c72366004615195565b612a11565b348015610c8357600080fd5b506103f6610c92366004615195565b612a79565b348015610ca357600080fd5b506103f6610cb2366004615178565b612ae1565b348015610cc357600080fd5b506103f6610cd2366004615178565b612b8c565b348015610ce357600080fd5b506103f6610cf2366004615178565b612c96565b6000610d04338484612dd4565b5060015b92915050565b6000610d1c6012600a6153a9565b610d2b906410acc479446153b5565b905090565b6000610d3d848484612ef8565b610da08433610d9b85604051806060016040528060288152602001615766602891396001600160a01b038a16600090815260066020526040812090335b6001600160a01b03168152602081019190915260400160002054919061351d565b612dd4565b5060019392505050565b6024546040805163048db3fd60e31b815290516000926001600160a01b03169163246d9fe8916004808301926020929190829003018186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2b91906153d4565b6001546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610e51906153ed565b60405180910390fd5b602280548215156101000261ff00199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610ea390831515815260200190565b60405180910390a150565b6001546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610e51906153ed565b601454610f01610ee983600a6153a9565b610efb85670de0b6b3a7640000613557565b90612d8b565b60148190556040805183815260208101929092527ff6d009afa11079b7b679b7589d0a18b287e11234d83e6eb4042a6fc3d4f8e85b91015b60405180910390a1505050565b6000546001600160a01b03163314610f705760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b038116301415610fe45760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f742072656d6f7665207468697320636f6e74726163742066726f6d60448201527120617574686f72697a656420746f6b656e7360701b6064820152608401610e51565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561103257600080fd5b505afa158015611046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106a919061546a565b6001600160a01b0316816001600160a01b031614156110f15760405162461bcd60e51b815260206004820152603b60248201527f63616e6e6f742072656d6f7665207468652057455448207479706520636f6e7460448201527f726163742066726f6d20617574686f72697a656420746f6b656e7300000000006064820152608401610e51565b6001600160a01b0381166000908152600b602052604090205460ff166111695760405162461bcd60e51b815260206004820152602760248201527f746f6b656e41646472657373206973206e6f7420616e20617574686f72697a6560448201526632103a37b5b2b760c91b6064820152608401610e51565b6001600160a01b0381166000908152600b60205260408120805460ff191690555b600c5481101561129057816001600160a01b0316600c82815481106111b1576111b1615487565b6000918252602090912001546001600160a01b0316141561127e57600c80546111dc9060019061549d565b815481106111ec576111ec615487565b600091825260209091200154600c80546001600160a01b03909216918390811061121857611218615487565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c805480611257576112576154b4565b600082815260209020810160001990810180546001600160a01b0319169055019055611290565b80611288816154ca565b91505061118a565b506040516001600160a01b03821681527fcd95bc912b4e5dedb4c1e8c1054dd088420422db8284dcd4178ca3b2e262038890602001610ea3565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610d04918590610d9b90866135d6565b600a818154811061131057600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146113545760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b0381166113bf5760405162461bcd60e51b815260206004820152602c60248201527f726f75746572416464726573732073686f756c64206e6f74206265207468652060448201526b7a65726f206164647265737360a01b6064820152608401610e51565b6000602260039054906101000a90046001600160a01b031690506000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561141757600080fd5b505afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f919061546a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561149757600080fd5b505afa1580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf919061546a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561151557600080fd5b505afa158015611529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154d919061546a565b602380546001600160a01b0319166001600160a01b03928316179055602280546301000000600160b81b03191663010000008484160217905560408051848316815291851660208301527f1b40f7040327d783cc3cffdd488e8233012f50d648b53c5218f73ef4a5b714059101610f39565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b03811660009081526008602052604090205460ff16156116525760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f74206578636c7564656420666f7220666565736044820152606401610e51565b61165b81613635565b50565b6001546001600160a01b031633146116885760405162461bcd60e51b8152600401610e51906153ed565b6001600160a01b0385166000908152600b602052604090205460ff166116fc5760405162461bcd60e51b8152602060048201526024808201527f66726f6d546f6b656e206973206e6f7420616e20617574686f72697a6564207460448201526337b5b2b760e11b6064820152608401610e51565b6001600160a01b0384166000908152600b602052604090205460ff1661176f5760405162461bcd60e51b815260206004820152602260248201527f746f546f6b656e206973206e6f7420616e20617574686f72697a656420746f6b60448201526132b760f11b6064820152608401610e51565b600061179461177f84600a6153a9565b610efb61178d85600a6153a9565b8790613557565b9050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c919061546a565b6001600160a01b0316856001600160a01b0316141561184557611840863083613689565b6118fb565b602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb919061546a565b6001600160a01b0316866001600160a01b031614156118ef576118408530836138c3565b6118fb86863084613a6a565b505050505050565b6000546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610e5190615435565b600e548111156119a55760405162461bcd60e51b815260206004820152603e60248201527f427573696e65737320446576656c6f706d656e742064697669736f722073686f60448201527f756c64206265206c657373207468616e206c69717569646974792066656500006064820152608401610e51565b601280549082905560408051828152602081018490527f61d33f750b58b2dd826e84c405ba34ae015788522fb94e7c971fb89eb1727bc091015b60405180910390a15050565b6000546001600160a01b03163314611a155760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b038116611a825760405162461bcd60e51b815260206004820152602e60248201527f636f6e7472616374416464726573732073686f756c64206e6f7420626520746860448201526d65207a65726f206164647265737360901b6064820152608401610e51565b6001600160a01b038116301415611b015760405162461bcd60e51b815260206004820152603b60248201527f457665725269736520746f6b656e2073686f756c64206e6f742062652061646460448201527f656420617320616e2045636f73797374656d20636f6e747261637400000000006064820152608401610e51565b6001600160a01b03811660009081526009602052604090205460ff1615611b9e5760405162461bcd60e51b815260206004820152604560248201527f636f6e74726163744164647265737320697320616c726561647920696e636c7560448201527f64656420617320616e2045766572526973652045636f73797374656d20636f6e6064820152641d1c9858dd60da1b608482015260a401610e51565b61165b81613ce4565b6000546001600160a01b03163314611bd15760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b03811660009081526009602052604090205460ff16611c5f5760405162461bcd60e51b815260206004820152603e60248201527f636f6e747261637441646472657373206973206e6f7420696e636c756465642060448201527f61732045766572526973652045636f73797374656d20636f6e747261637400006064820152608401610e51565b6001600160a01b0381166000908152600960205260408120805460ff191690555b600a54811015611d8657816001600160a01b0316600a8281548110611ca757611ca7615487565b6000918252602090912001546001600160a01b03161415611d7457600a8054611cd29060019061549d565b81548110611ce257611ce2615487565b600091825260209091200154600a80546001600160a01b039092169183908110611d0e57611d0e615487565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611d4d57611d4d6154b4565b600082815260209020810160001990810180546001600160a01b0319169055019055611d86565b80611d7e816154ca565b915050611c80565b506040516001600160a01b03821681527fd5cf137fae5e29474768fa6da67bb8364d5c03e6d1138a35cff110303d38e68d9060200160405180910390a161165b81613daa565b6000546001600160a01b03163314611df65760405162461bcd60e51b8152600401610e5190615435565b6022805462ff0000191690556040517f175e049bb68bcee8f7b1c836f5d07f408d5f8ae38c23e4dca3f68888334529a790600090a1565b6001600160a01b038116600090815260056020526040812054602154600214158015611e6b57506026544363ffffffff908116600160e01b90920416145b8015611e8457506027546001600160a01b038481169116145b15610d0857610d088382613dfb565b6000546001600160a01b03163314611ebd5760405162461bcd60e51b8152600401610e5190615435565b604051339082156108fc029083906000818181858888f19350505050158015611eea573d6000803e3d6000fd5b5050565b6000611efb601e54421190565b8015611f095750601f544211155b15611f33576000611f1861273b565b90506010548110611f2b57601054611f2d565b805b91505090565b5060105490565b6000546001600160a01b03163314611f645760405162461bcd60e51b8152600401610e5190615435565b600a811115611fc65760405162461bcd60e51b815260206004820152602860248201527f6c6971756964697479466565526174652073686f756c64206265206c657373206044820152677468616e2031302560c01b6064820152608401610e51565b600e80549082905560408051828152602081018490527f2596ea4192286cc20062cf773414aef3b23a5b57b4bdc47f888e9d9059d838c491016119df565b6000546001600160a01b0316331461202e5760405162461bcd60e51b8152600401610e5190615435565b600a82106120955760405162461bcd60e51b815260206004820152602e60248201527f7472616465537461727444656c61792073686f756c64206265206c657373207460448201526d68616e203130206d696e7574657360901b6064820152608401610e51565b607881106121005760405162461bcd60e51b815260206004820152603260248201527f74726164655374617274436f6f6c446f776e2073686f756c64206265206c657360448201527173207468616e20313230206d696e7574657360701b6064820152608401610e51565b80821061216c5760405162461bcd60e51b815260206004820152603460248201527f7472616465537461727444656c6179206d757374206265206c6573732074686160448201527337103a3930b232a9ba30b93a21b7b7b62237bbb760611b6064820152608401610e51565b601e546000191480156121825750601f54600019145b6121ce5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e672068617320616c7265616479207374617274656400000000006044820152606401610e51565b6006600e819055600f556011546010556121e86001610e27565b6121f260016126d0565b6121fd82603c6153b5565b61220790426154e5565b601e5561221581603c6153b5565b601e5461222291906154e5565b601f556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a15050565b6000610d043384610d9b8560405180606001604052806025815260200161578e602591393360009081526006602090815260408083206001600160a01b038d168452909152902054919061351d565b6000546001600160a01b031633146122cb5760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b0381166122f15760405162461bcd60e51b8152600401610e51906154fd565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146123775760405162461bcd60e51b8152600401610e51906153ed565b601d55565b6000610d04338484612ef8565b6001546001600160a01b031633146123b35760405162461bcd60e51b8152600401610e51906153ed565b6000821180156123c1575060015b6123fd5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610e51565b600061240d610ee983600a6153a9565b60035490915060009061242b9030906001600160a01b031684614073565b905061243681614275565b50505050565b6001546001600160a01b031633146124665760405162461bcd60e51b8152600401610e51906153ed565b601654612477610ee983600a6153a9565b60168190556040805183815260208101929092527f364183e369117c179345d1999f4cb03bd7d74226bacee97755da5df8e069f5b19101610f39565b6000546001600160a01b031633146124dd5760405162461bcd60e51b8152600401610e5190615435565b6022805462ff00001916620100001790556040517f8f4e75b2b71b51d3107f168f33d4f291c4ef089a69b1075bcbf4476c69e81d0690600090a1565b600c818154811061131057600080fd5b6000546001600160a01b031633146125535760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b0381166125bd5760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e416464726573732073686f756c64206e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610e51565b6001600160a01b0381166000908152600b602052604090205460ff161561263a5760405162461bcd60e51b815260206004820152602b60248201527f746f6b656e4164647265737320697320616c726561647920616e20617574686f60448201526a3934bd32b2103a37b5b2b760a91b6064820152608401610e51565b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001908117909155600c805491820181559093527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b0319168417905590519182527f3d8bc8d3643383e535cf1332154e6a0eb63b44cd5aed5582a88dab55793e0cbc9101610ea3565b6000546001600160a01b031633146126fa5760405162461bcd60e51b8152600401610e5190615435565b6022805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990602001610ea3565b6000610d2b6107d061274f6012600a6153a9565b610efb906410acc479446153b5565b600061276f8833888888888861436b565b61277a888888612ef8565b6127bb8833610d9b89604051806060016040528060288152602001615766602891396001600160a01b038e1660009081526006602052604081209033610d7a565b506001979650505050505050565b6000546001600160a01b031633146127f35760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b03811661286f5760405162461bcd60e51b815260206004820152603a60248201527f5f627573696e657373446576656c6f706d656e74416464726573732073686f7560448201527f6c64206e6f7420626520746865207a65726f20616464726573730000000000006064820152608401610e51565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8a3c262f9b6b936f841c67b93e30a43a2aff5ea1b29ed9038cfb8cb6f4e82f4b91016119df565b6001546001600160a01b031633146128f35760405162461bcd60e51b8152600401610e51906153ed565b601580549082905560408051828152602081018490527f06f3c27e71f7455c0b87bef6c8c68d6ee266e593dbdeba36a44dc1ac1855cf3f91016119df565b602454604080516339f14b5160e21b815290516000926001600160a01b03169163e7c52d44916004808301926020929190829003018186803b158015610def57600080fd5b6000546001600160a01b031633146129a05760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b03811660009081526008602052604090205460ff16612a085760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206973206e6f7420696e636c7564656420666f7220666565736044820152606401610e51565b61165b81613daa565b6000546001600160a01b03163314612a3b5760405162461bcd60e51b8152600401610e5190615435565b601080549082905560408051828152602081018490527fadcf01123294f8514884e924e20eb4f3032288087368896a17c71f09668247c891016119df565b6000546001600160a01b03163314612aa35760405162461bcd60e51b8152600401610e5190615435565b601380549082905560408051828152602081018490527fd2f58a5c369e86bc74f3b5be6f9a34224ebb43d603f7acee04b07ef21c7d14bf91016119df565b6000546001600160a01b03163314612b0b5760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b038116612b315760405162461bcd60e51b8152600401610e51906154fd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612bb65760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b038116612c225760405162461bcd60e51b815260206004820152602d60248201527f5f7374616b696e67416464726573732073686f756c64206e6f7420626520746f60448201526c207a65726f206164647265737360981b6064820152608401610e51565b600380546001600160a01b038381166001600160a01b03198084168217909455602480549094168117909355604080519190921680825260208201939093527f03fbfa1263b46c684780f3c24be11a2e189a59bedf0e316a7eae861cc769eb4f91015b60405180910390a1611eea82613ce4565b6000546001600160a01b03163314612cc05760405162461bcd60e51b8152600401610e5190615435565b6001600160a01b038116612d315760405162461bcd60e51b815260206004820152603260248201527f5f657665724d696772617465416464726573732073686f756c64206e6f7420626044820152716520746865207a65726f206164647265737360701b6064820152608401610e51565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f322e4b9bc06d4314ec72e9343d238223587c4a986a760408cf287fdc05aa5b959101612c85565b6000612dcd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614610565b9392505050565b6001600160a01b038316612e365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e51565b6001600160a01b038216612e975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e51565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612f5c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e51565b6001600160a01b038216612fbe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e51565b600081116130205760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e51565b816001600160a01b0316836001600160a01b031614156130925760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220746f20616e642066726f6d20616464726573736573207460448201526668652073616d6560c81b6064820152608401610e51565b602054600214156131035760405162461bcd60e51b815260206004820152603560248201527f496e76616c6964207265656e7472616e63792066726f6d20746f6b656e302f746044820152746f6b656e312062616c616e63654f6620636865636b60581b6064820152608401610e51565b600080546001600160a01b03908116919085168214806131345750816001600160a01b0316846001600160a01b0316145b8061315757506001600160a01b03851660009081526009602052604090205460ff165b8061317a57506001600160a01b03841660009081526009602052604090205460ff165b90506000613189601e54421190565b9050601054841115806131995750815b806131a2575080155b6131fe5760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152661e105b5bdd5b9d60ca1b6064820152608401610e51565b6023546001600160a01b031681806132135750825b8061324d5750806001600160a01b0316876001600160a01b03161415801561324d5750806001600160a01b0316866001600160a01b031614155b6132925760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610e51565b60006132a060215460021490565b1590508280156132b25750601f544211155b80156132bc575083155b80156132c55750805b156132d5576132d587898861463e565b3060009081526005602052604081205460135490915081101560008580156132fa5750835b8015613308575060225460ff165b80156133255750846001600160a01b03168a6001600160a01b0316145b905080156133b957811561334157601354925061334183614853565b602254610100900460ff168015613359575060165447115b80156133745750601d54601854601754613372916135d6565b115b156133b95747601c5411156133885747601c555b601c54156133b957600061339d601c546148bb565b90506133a881614275565b506000601c81905560178190556018555b851561348157846001600160a01b03168a6001600160a01b03161415613435576018546133e6908a6135d6565b601855601a546133f6908a6135d6565b601a5560155489111561343057601454479081111561341457506014545b61342b613422826064612d8b565b601c54906135d6565b601c55505b613470565b846001600160a01b03168b6001600160a01b031614156134705760175461345c908a6135d6565b60175560195461346c908a6135d6565b6019555b601b5461347d908a6135d6565b601b555b6001600160a01b038b1660009081526008602052604090205460019060ff16806134c357506001600160a01b038b1660009081526008602052604090205460ff165b156134cc575060005b87806134e257506001546001600160a01b031633145b156134f4576134ef614900565b613503565b8415613503576135038b614966565b61350f8c8c8c84614b19565b505050505050505050505050565b600081848411156135415760405162461bcd60e51b8152600401610e519190615076565b50600061354e848661549d565b95945050505050565b60008261356657506000610d08565b600061357283856153b5565b90508261357f8583615543565b14612dcd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e51565b6000806135e383856154e5565b905083811015612dcd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e51565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e9101610ea3565b60408051600280825260608201835260009260208301908036833701905050905083816000815181106136be576136be615487565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561372c57600080fd5b505afa158015613740573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613764919061546a565b8160018151811061377757613777615487565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529085169063095ea7b390604401602060405180830381600087803b1580156137da57600080fd5b505af11580156137ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613812919061557b565b5060225460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac947906138529085906000908690899042906004016155dc565b600060405180830381600087803b15801561386c57600080fd5b505af1158015613880573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516138b5929190615618565b60405180910390a150505050565b604080516002808252606082018352600092602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561393257600080fd5b505afa158015613946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396a919061546a565b8160008151811061397d5761397d615487565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106139b1576139b1615487565b6001600160a01b039283166020918202929092010152602254630100000090041663b6f9de9583600084876139e84261012c6135d6565b6040518663ffffffff1660e01b8152600401613a079493929190615631565b6000604051808303818588803b158015613a2057600080fd5b505af1158015613a34573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516138b5929190615618565b60408051600380825260808201909252600091602082016060803683370190505090508481600081518110613aa157613aa1615487565b60200260200101906001600160a01b031690816001600160a01b031681525050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0f57600080fd5b505afa158015613b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b47919061546a565b81600181518110613b5a57613b5a615487565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600281518110613b8e57613b8e615487565b6001600160a01b03928316602091820292909201015260225460405163095ea7b360e01b8152630100000090910482166004820152602481018490529086169063095ea7b390604401602060405180830381600087803b158015613bf157600080fd5b505af1158015613c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c29919061557b565b50602254630100000090046001600160a01b0316635c11d7958360008487613c524260786135d6565b6040518663ffffffff1660e01b8152600401613c729594939291906155dc565b600060405180830381600087803b158015613c8c57600080fd5b505af1158015613ca0573d6000803e3d6000fd5b505050507f7ec0e62e5eb75d92620f9df4e706e28dac160965ba772960cde791c4890384478282604051613cd5929190615618565b60405180910390a15050505050565b6001600160a01b03811660009081526009602052604090205460ff1615613d085750565b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fa4156168c286809bc7d80fb9dd33a0f1f71f9cfd58c0fae72c11b2fab3a3e761910160405180910390a161165b81613635565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527fead11242b7eb5b3a03a27edc0039f1305d251bf91b3d1e94c3861c3d6e4ac1289101610ea3565b6040805160a0810182526026546001600160701b038082168352600160701b8204166020830152600160e01b900463ffffffff16918101919091526027546001600160a01b039081166060830152602854166080820181905232141561406e576000613e6f846001600160a01b0316614b41565b90506001600160a01b038116301415613e9757613e94846001600160a01b0316614b78565b90505b6001600160a01b038116613eab5750505050565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908316906370a082319060240160206040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2891906153d4565b905082600001516001600160701b0316846001600160701b0316118015613f64575082602001516001600160701b0316816001600160701b0316115b15613fc25760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e20626520616464656420627920746865206f776044820152676e6572206f6e6c7960c01b6064820152608401610e51565b82600001516001600160701b0316846001600160701b0316108015613ffc575082602001516001600160701b0316816001600160701b0316105b1561406b5760225462010000900460ff161561406b5760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792063616e6e6f742062652072656d6f766564207768696c60448201526719481b1bd8dad95960c21b6064820152608401610e51565b50505b505050565b60408051600280825260608201835260009283929190602083019080368337019050509050602260039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140e657600080fd5b505afa1580156140fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411e919061546a565b8160008151811061413157614131615487565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061416557614165615487565b6001600160a01b039283166020918202929092010152602254600091630100000090910416637ff36ab58583858961419f4261012c6135d6565b6040518663ffffffff1660e01b81526004016141be9493929190615631565b6000604051808303818588803b1580156141d757600080fd5b505af11580156141eb573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526142149190810190615666565b90507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248483604051614247929190615618565b60405180910390a18060018151811061426257614262615487565b6020026020010151925050509392505050565b801561165b576024805460405163c0e89b5760e01b81523060048201529182018390526001600160a01b03169063c0e89b5790604401600060405180830381600087803b1580156142c557600080fd5b505af11580156142d9573d6000803e3d6000fd5b505060248054604051633bd5d17360e01b8152600481018690526001600160a01b039091169350633bd5d173925001600060405180830381600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050507f8229f1003fbf3f8330019fe361ce2a589cf490e3f2991f80a1dd1602898eebaa81604051610ea391815260200190565b428410156143af5760405162461bcd60e51b8152602060048201526011602482015270115d995c949a5cd94e8811561412549151607a1b6044820152606401610e51565b6001600160a01b038716600090815260256020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918761441d836154ca565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161449692919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050601b8460ff1610156144cc576144c5601b85615724565b9350614524565b601e8460ff161115614524576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052605c016040516020818303038152906040528051906020012090505b6040805160008082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015614578573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906145ae5750886001600160a01b0316816001600160a01b0316145b6145fa5760405162461bcd60e51b815260206004820152601b60248201527f45766572526973653a20494e56414c49445f5349474e415455524500000000006044820152606401610e51565b614605898989612dd4565b505050505050505050565b600081836146315760405162461bcd60e51b8152600401610e519190615076565b50600061354e8486615543565b6023546001600160a01b039081169060009084168214156146b8576001600160a01b03851660009081526007602052604090205443148061468d57503260009081526007602052604090205443145b6001600160a01b0386166000908152600760205260408082204390819055328352912055905061472d565b816001600160a01b0316856001600160a01b0316141561472d576001600160a01b03841660009081526007602052604090205443148061470657503260009081526007602052604090205443145b6001600160a01b038516600090815260076020526040808220439081905532835291205590505b80156147c75760405162461bcd60e51b815260206004820152605c60248201527f4d756c7469706c652074726164657320696e2073616d6520626c6f636b20667260448201527f6f6d2073616d6520736f7572636520617265206e6f7420616c6c6f776564206460648201527f7572696e672074726164696e6720737461727420636f6f6c646f776e00000000608482015260a401610e51565b6147cf61273b565b83111561406b5760405162461bcd60e51b815260206004820152604660248201527f4d6178207472616e73616374696f6e20697320302e303525206f6620746f746160448201527f6c20737570706c7920647572696e672074726164696e6720737461727420636f60648201526537b63237bbb760d11b608482015260a401610e51565b6002602154141561486357600080fd5b600260215547614874308084613689565b60006148804783614baf565b600254600e546012549293506148b1926001600160a01b03909216916148ac9190610efb908690613557565b614bf1565b5050600160215550565b6000600260215414156148cd57600080fd5b6002602155600082156148f5576003546148f29030906001600160a01b031685614073565b90505b600160215592915050565b6026544363ffffffff908116600160e01b909204161415614964576040805160a08101825260008082526020820181905291810182905260608101829052608001819052602655602780546001600160a01b03199081169091556028805490911690555b565b6002602054141561497657600080fd5b6002602055600061499c826001600160a01b031660009081526005602052604090205490565b905060006149b2836001600160a01b0316614b41565b90506001600160a01b0381163014156149da576149d7836001600160a01b0316614b78565b90505b60006001600160a01b0382166149f257506000614a6e565b6040516370a0823160e01b81526001600160a01b0385811660048301528316906370a082319060240160206040518083038186803b158015614a3357600080fd5b505afa158015614a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a6b91906153d4565b90505b6040805160a0810182526001600160701b039485168082529290941660208086018290524363ffffffff169286018390526001600160a01b039690961660608601819052326080909601869052602680546001600160e01b031916909417600160701b909202919091176001600160e01b0316600160e01b90920291909117909155602780546001600160a01b03199081169092179055602880549091169092179091555060019055565b80614b2657614b26614c27565b614b31848484614c3d565b8061243657612436600f54600e55565b6040805160048152602481019091526020810180516001600160e01b031663d21220a760e01b179052600090610d08908390614e88565b6040805160048152602481019091526020810180516001600160e01b0316630dfe168160e01b179052600090610d08908390614e88565b6000612dcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061351d565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561406e573d6000803e3d6000fd5b600e54614c3057565b600e8054600f5560009055565b600080614c4983614f3b565b6001600160a01b038716600090815260056020526040812054929450909250614c728286614baf565b6001600160a01b03808916600090815260056020526040808220849055918916815290812054919250614ca582876135d6565b6001600160a01b0389166000908152600560205260409020819055905081158015614cd05750600081115b15614d2957600d546000614ce58260016135d6565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e910160405180910390a150505b600084118015614d37575082155b15614d9057600d546000614d4c826001614baf565b600d81905560408051848152602081018390529192507fcb954675aa33bcbae534f2608dbb8882f530e636989798e66a81ba5d04b5f304910160405180910390a150505b614d9985614f62565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051614dde91815260200190565b60405180910390a36003546001600160a01b0389811691161415614e34576040518681527fe958c86d09c7f3f54dfbf230d4bdaac7d411ead5c94c9df118c366c67a6862609060200160405180910390a1614605565b6003546001600160a01b038a811691161415614605576040518781527f1027e95115b9619b843286ee167b4722741601c4a1778845c70fb2aabb567f649060200160405180910390a1505050505050505050565b6000614e9383614ff2565b614e9f57506000610d08565b600080846001600160a01b031684604051614eba9190615749565b600060405180830381855afa9150503d8060008114614ef5576040519150601f19603f3d011682016040523d82523d6000602084013e614efa565b606091505b5091509150818015614f0e57506020815110155b15614f305780806020019051810190614f27919061546a565b92505050610d08565b506000949350505050565b6000806000614f498461502e565b90506000614f578583614baf565b959194509092505050565b3060009081526005602052604081205490614f7d82846135d6565b306000908152600560205260409020819055905081158015614f9f5750600081115b1561406e57600d546000614fb48260016135d6565b600d81905560408051848152602081018390529192507f29dbf52f1b5bddb8f65ec96f0076b34fa16b800654ea7ed5eec0224a3aef989e9101613cd5565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061502657508115155b949350505050565b6000610d086064610efb600e548561355790919063ffffffff16565b60005b8381101561506557818101518382015260200161504d565b838111156124365750506000910152565b602081526000825180602084015261509581604085016020870161504a565b601f01601f19169190910160400192915050565b6001600160a01b038116811461165b57600080fd5b600080604083850312156150d157600080fd5b82356150dc816150a9565b946020939093013593505050565b6000806000606084860312156150ff57600080fd5b833561510a816150a9565b9250602084013561511a816150a9565b929592945050506040919091013590565b801515811461165b57600080fd5b60006020828403121561514b57600080fd5b8135612dcd8161512b565b6000806040838503121561516957600080fd5b50508035926020909101359150565b60006020828403121561518a57600080fd5b8135612dcd816150a9565b6000602082840312156151a757600080fd5b5035919050565b600080600080600060a086880312156151c657600080fd5b85356151d1816150a9565b945060208601356151e1816150a9565b94979496505050506040830135926060810135926080909101359150565b600080600080600080600060e0888a03121561521a57600080fd5b8735615225816150a9565b96506020880135615235816150a9565b95506040880135945060608801359350608088013560ff8116811461525957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561528957600080fd5b8235615294816150a9565b915060208301356152a4816150a9565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156153005781600019048211156152e6576152e66152af565b808516156152f357918102915b93841c93908002906152ca565b509250929050565b60008261531757506001610d08565b8161532457506000610d08565b816001811461533a576002811461534457615360565b6001915050610d08565b60ff841115615355576153556152af565b50506001821b610d08565b5060208310610133831016604e8410600b8410161715615383575081810a610d08565b61538d83836152c5565b80600019048211156153a1576153a16152af565b029392505050565b6000612dcd8383615308565b60008160001904831182151516156153cf576153cf6152af565b500290565b6000602082840312156153e657600080fd5b5051919050565b60208082526028908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520627579626160408201526731b59037bbb732b960c11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561547c57600080fd5b8151612dcd816150a9565b634e487b7160e01b600052603260045260246000fd5b6000828210156154af576154af6152af565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156154de576154de6152af565b5060010190565b600082198211156154f8576154f86152af565b500190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60008261556057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561558d57600080fd5b8151612dcd8161512b565b600081518084526020808501945080840160005b838110156155d15781516001600160a01b0316875295820195908201906001016155ac565b509495945050505050565b85815284602082015260a0604082015260006155fb60a0830186615598565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006150266040830184615598565b84815260806020820152600061564a6080830186615598565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121561567957600080fd5b825167ffffffffffffffff8082111561569157600080fd5b818501915085601f8301126156a557600080fd5b8151818111156156b7576156b7615565565b8060051b604051601f19603f830116810181811085821117156156dc576156dc615565565b6040529182528482019250838101850191888311156156fa57600080fd5b938501935b82851015615718578451845293850193928501926156ff565b98975050505050505050565b600060ff821660ff84168060ff03821115615741576157416152af565b019392505050565b6000825161575b81846020870161504a565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fd65f2acbdf0d1060de78c3c064c035b11854e266bff40e381a04b9a77c0c36764736f6c634300080800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be84000000000000000000000000f491e7b69e4244ad4002bc14e878a34207e38c29

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

0000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be84000000000000000000000000f491e7b69e4244ad4002bc14e878a34207e38c29

-----Decoded View---------------
Arg [0] : _stakingAddress (address): 0x1490eaa0de0b2d4f9fe0e354a7d99d6c6532be84
Arg [1] : routerAddress (address): 0xf491e7b69e4244ad4002bc14e878a34207e38c29

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001490eaa0de0b2d4f9fe0e354a7d99d6c6532be84
Arg [1] : 000000000000000000000000f491e7b69e4244ad4002bc14e878a34207e38c29


Deployed ByteCode Sourcemap

17679:44845:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43251:176;;;;;;;;;;-1:-1:-1;43389:12:0;;43404:15;-1:-1:-1;43251:176:0;;;179:14:1;;172:22;154:41;;142:2;127:18;43251:176:0;;;;;;;;41465:85;;;;;;;;;;-1:-1:-1;41537:5:0;;;;;;;;;;;;-1:-1:-1;;;41537:5:0;;;;41465:85;;;;;;;:::i;27718:195::-;;;;;;;;;;-1:-1:-1;27718:195:0;;;;;:::i;:::-;;:::i;41096:122::-;;;;;;;;;;-1:-1:-1;41182:21:0;:28;41096:122;;;1459:25:1;;;1447:2;1432:18;41096:122:0;1313:177:1;21066:41:0;;;;;;;;;;-1:-1:-1;21066:41:0;;;;;;;-1:-1:-1;;;;;21066:41:0;;;;;;-1:-1:-1;;;;;1685:32:1;;;1667:51;;1655:2;1640:18;21066:41:0;1495:229:1;41360:97:0;;;;;;;;;;;;;:::i;27921:448::-;;;;;;;;;;-1:-1:-1;27921:448:0;;;;;:::i;:::-;;:::i;40337:128::-;;;;;;;;;;;;;:::i;34342:157::-;;;;;;;;;;-1:-1:-1;34342:157:0;;;;;:::i;:::-;;:::i;33237:356::-;;;;;;;;;;-1:-1:-1;33237:356:0;;;;;:::i;:::-;;:::i;18157:33::-;;;;;;;;;;-1:-1:-1;18157:33:0;;;;-1:-1:-1;;;;;18157:33:0;;;21334:117;;;;;;;;;;-1:-1:-1;21334:117:0;21385:66;21334:117;;42202:862;;;;;;;;;;-1:-1:-1;42202:862:0;;;;;:::i;:::-;;:::i;41655:90::-;;;;;;;;;;-1:-1:-1;41655:90:0;;18887:2;3596:36:1;;3584:2;3569:18;41655:90:0;3454:184:1;21181:41:0;;;;;;;;;;;;;;;28985:302;;;;;;;;;;-1:-1:-1;28985:302:0;;;;;:::i;:::-;;:::i;41226:126::-;;;;;;;;;;-1:-1:-1;41314:23:0;:30;41226:126;;18511:38;;;;;;;;;;-1:-1:-1;18511:38:0;;;;;:::i;:::-;;:::i;37302:618::-;;;;;;;;;;-1:-1:-1;37302:618:0;;;;;:::i;:::-;;:::i;20072:34::-;;;;;;;;;;;;;;;;31444:226;;;;;;;;;;-1:-1:-1;31444:226:0;;;;;:::i;:::-;;:::i;30225:956::-;;;;;;;;;;-1:-1:-1;30225:956:0;;;;;:::i;:::-;;:::i;21114:28::-;;;;;;;;;;-1:-1:-1;21114:28:0;;;;-1:-1:-1;;;;;21114:28:0;;;20933:41;;;;;;;;;;-1:-1:-1;20933:41:0;;;;;;;;32442:460;;;;;;;;;;-1:-1:-1;32442:460:0;;;;;:::i;:::-;;:::i;40962:126::-;;;;;;;;;;-1:-1:-1;40962:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;41053:27:0;41029:4;41053:27;;;:18;:27;;;;;;;;;40962:126;37928:539;;;;;;;;;;-1:-1:-1;37928:539:0;;;;;:::i;:::-;;:::i;21022:35::-;;;;;;;;;;-1:-1:-1;21022:35:0;;;;;;;;;;;17970:112;;;;;;;;;;-1:-1:-1;17970:112:0;;;;-1:-1:-1;;;;;17970:112:0;;;20113:30;;;;;;;;;;;;;;;;20981:34;;;;;;;;;;-1:-1:-1;20981:34:0;;;;;;;;;;;38475:768;;;;;;;;;;-1:-1:-1;38475:768:0;;;;;:::i;:::-;;:::i;43435:200::-;;;;;;;;;;-1:-1:-1;43588:20:0;;43612:15;-1:-1:-1;43588:39:0;43435:200;;31313:123;;;;;;;;;;;;;:::i;39251:587::-;;;;;;;;;;-1:-1:-1;39251:587:0;;;;;:::i;:::-;;:::i;21458:41::-;;;;;;;;;;-1:-1:-1;21458:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;40621:85;;;;;;;;;;-1:-1:-1;40690:8:0;;40621:85;;27262:108;;;;;;;;;;-1:-1:-1;27262:108:0;;;;;:::i;:::-;;:::i;39846:289::-;;;;;;;;;;;;;:::i;17492:79::-;;;;;;;;;;-1:-1:-1;17530:7:0;17557:6;-1:-1:-1;;;;;17557:6:0;17492:79;;31907:318;;;;;;;;;;-1:-1:-1;31907:318:0;;;;;:::i;:::-;;:::i;34507:1233::-;;;;;;;;;;-1:-1:-1;34507:1233:0;;;;;:::i;:::-;;:::i;41558:89::-;;;;;;;;;;-1:-1:-1;41632:7:0;;;;;;;;;;;;-1:-1:-1;;;41632:7:0;;;;41558:89;;19334:31;;;;;;;;;;;;;;;;40714:122;;;;;;;;;;-1:-1:-1;40805:23:0;;40714:122;;29295:402;;;;;;;;;;-1:-1:-1;29295:402:0;;;;;:::i;:::-;;:::i;17146:338::-;;;;;;;;;;-1:-1:-1;17146:338:0;;;;;:::i;:::-;;:::i;27378:123::-;;;;;;;;;;-1:-1:-1;27378:123:0;;;;;:::i;:::-;;:::i;27509:201::-;;;;;;;;;;-1:-1:-1;27509:201:0;;;;;:::i;:::-;;:::i;29705:512::-;;;;;;;;;;-1:-1:-1;29705:512:0;;;;;:::i;:::-;;:::i;33965:369::-;;;;;;;;;;-1:-1:-1;33965:369:0;;;;;:::i;:::-;;:::i;20032:33::-;;;;;;;;;;;;;;;;31189:116;;;;;;;;;;;;;:::i;40844:110::-;;;;;;;;;;-1:-1:-1;40929:17:0;;40844:110;;18620:40;;;;;;;;;;-1:-1:-1;18620:40:0;;;;;:::i;:::-;;:::i;41753:441::-;;;;;;;;;;-1:-1:-1;41753:441:0;;;;;:::i;:::-;;:::i;43072:171::-;;;;;;;;;;-1:-1:-1;43072:171:0;;;;;:::i;:::-;;:::i;19634:45::-;;;;;;;;;;;;;;;;43643:104;;;;;;;;;;;;;:::i;28377:600::-;;;;;;;;;;-1:-1:-1;28377:600:0;;;;;:::i;:::-;;:::i;18121:29::-;;;;;;;;;;-1:-1:-1;18121:29:0;;;;-1:-1:-1;;;;;18121:29:0;;;35748:551;;;;;;;;;;-1:-1:-1;35748:551:0;;;;;:::i;:::-;;:::i;33601:356::-;;;;;;;;;;-1:-1:-1;33601:356:0;;;;;:::i;:::-;;:::i;40143:186::-;;;;;;;;;;-1:-1:-1;40143:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;40294:18:0;;;40262:7;40294:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;40143:186;17579:93;;;;;;;;;;-1:-1:-1;17651:13:0;;-1:-1:-1;;;;;17651:13:0;17579:93;;40473:140;;;;;;;;;;;;;:::i;31678:221::-;;;;;;;;;;-1:-1:-1;31678:221:0;;;;;:::i;:::-;;:::i;32233:201::-;;;;;;;;;;-1:-1:-1;32233:201:0;;;;;:::i;:::-;;:::i;32910:319::-;;;;;;;;;;-1:-1:-1;32910:319:0;;;;;:::i;:::-;;:::i;16890:248::-;;;;;;;;;;-1:-1:-1;16890:248:0;;;;;:::i;:::-;;:::i;36811:483::-;;;;;;;;;;-1:-1:-1;36811:483:0;;;;;:::i;:::-;;:::i;36307:496::-;;;;;;;;;;-1:-1:-1;36307:496:0;;;;;:::i;:::-;;:::i;27718:195::-;27822:4;27844:39;15532:10;27867:7;27876:6;27844:8;:39::i;:::-;-1:-1:-1;27901:4:0;27718:195;;;;;:::o;41360:97::-;41415:7;19109:13;18887:2;19109;:13;:::i;:::-;19091:31;;:15;:31;:::i;:::-;41435:14;;41360:97;:::o;27921:448::-;28055:4;28072:36;28082:6;28090:9;28101:6;28072:9;:36::i;:::-;28119:220;28142:6;15532:10;28190:138;28246:6;28190:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28190:19:0;;;;;;:11;:19;;;;;;15532:10;28210:12;-1:-1:-1;;;;;28190:33:0;;;;;;;;;;;;-1:-1:-1;28190:33:0;;;:138;:37;:138::i;:::-;28119:8;:220::i;:::-;-1:-1:-1;28357:4:0;27921:448;;;;;:::o;40337:128::-;40424:10;;:33;;;-1:-1:-1;;;40424:33:0;;;;40392:7;;-1:-1:-1;;;;;40424:10:0;;:31;;:33;;;;;;;;;;;;;;:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34342:157::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;;;;;;;;;34419:14:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;34419:25:0;;::::1;;::::0;;34460:31:::1;::::0;::::1;::::0;::::1;::::0;34436:8;179:14:1;172:22;154:41;;142:2;127:18;;14:187;34460:31:0::1;;;;;;;;34342:157:::0;:::o;33237:356::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;33392:17:::1;::::0;33440:75:::1;33497:17;33501:13:::0;33497:2:::1;:17;:::i;:::-;33440:38;:12:::0;33471:6:::1;33440:30;:38::i;:::-;:56:::0;::::1;:75::i;:::-;33420:17;:95:::0;;;33531:54:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;;33531:54:0::1;::::0;8302:18:1;33531:54:0::1;;;;;;;;33361:232;33237:356:::0;;:::o;42202:862::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42295:29:0;::::1;42319:4;42295:29;;42287:92;;;::::0;-1:-1:-1;;;42287:92:0;;8971:2:1;42287:92:0::1;::::0;::::1;8953:21:1::0;9010:2;8990:18;;;8983:30;9049:34;9029:18;;;9022:62;-1:-1:-1;;;9100:18:1;;;9093:48;9158:19;;42287:92:0::1;8769:414:1::0;42287:92:0::1;42414:15;;;;;;;;;-1:-1:-1::0;;;;;42414:15:0::1;-1:-1:-1::0;;;;;42414:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42398:38:0::1;:12;-1:-1:-1::0;;;;;42398:38:0::1;;;42390:110;;;::::0;-1:-1:-1;;;42390:110:0;;9646:2:1;42390:110:0::1;::::0;::::1;9628:21:1::0;9685:2;9665:18;;;9658:30;9724:34;9704:18;;;9697:62;9795:29;9775:18;;;9768:57;9842:19;;42390:110:0::1;9444:423:1::0;42390:110:0::1;-1:-1:-1::0;;;;;42519:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;::::1;;42511:88;;;::::0;-1:-1:-1;;;42511:88:0;;10074:2:1;42511:88:0::1;::::0;::::1;10056:21:1::0;10113:2;10093:18;;;10086:30;10152:34;10132:18;;;10125:62;-1:-1:-1;;;10203:18:1;;;10196:37;10250:19;;42511:88:0::1;9872:403:1::0;42511:88:0::1;-1:-1:-1::0;;;;;42612:36:0;::::1;42651:5;42612:36:::0;;;:22:::1;:36;::::0;;;;:44;;-1:-1:-1;;42612:44:0::1;::::0;;42669:330:::1;42693:23;:30:::0;42689:34;::::1;42669:330;;;42779:12;-1:-1:-1::0;;;;;42749:42:0::1;:23;42773:1;42749:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;42749:26:0::1;:42;42745:243;;;42841:23;42865:30:::0;;:34:::1;::::0;42898:1:::1;::::0;42865:34:::1;:::i;:::-;42841:59;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;42812:23:::1;:26:::0;;-1:-1:-1;;;;;42841:59:0;;::::1;::::0;42836:1;;42812:26;::::1;;;;;:::i;:::-;;;;;;;;;:88;;;;;-1:-1:-1::0;;;;;42812:88:0::1;;;;;-1:-1:-1::0;;;;;42812:88:0::1;;;;;;42919:23;:29;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;42919:29:0;;;;;-1:-1:-1;;;;;;42919:29:0::1;::::0;;;;;42967:5:::1;;42745:243;42725:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42669:330;;;-1:-1:-1::0;43016:40:0::1;::::0;-1:-1:-1;;;;;1685:32:1;;1667:51;;43016:40:0::1;::::0;1655:2:1;1640:18;43016:40:0::1;1495:229:1::0;28985:302:0;15532:10;29102:4;29196:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29196:34:0;;;;;;;;;;29102:4;;29124:133;;29174:7;;29196:50;;29235:10;29196:38;:50::i;18511:38::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18511:38:0;;-1:-1:-1;18511:38:0;:::o;37302:618::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37403:27:0;::::1;37381:121;;;::::0;-1:-1:-1;;;37381:121:0;;11016:2:1;37381:121:0::1;::::0;::::1;10998:21:1::0;11055:2;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;-1:-1:-1;;;11145:18:1;;;11138:42;11197:19;;37381:121:0::1;10814:408:1::0;37381:121:0::1;37515:19;37545:15;;;;;;;;;-1:-1:-1::0;;;;;37545:15:0::1;37515:46;;37572:35;37629:13;37572:71;;37689:16;-1:-1:-1::0;;;;;37689:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37671:53:0::1;;37747:4;37767:16;-1:-1:-1::0;;;;;37767:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37671:130;::::0;-1:-1:-1;;;;;;37671:130:0::1;::::0;;;;;;-1:-1:-1;;;;;11457:15:1;;;37671:130:0::1;::::0;::::1;11439:34:1::0;11509:15;;11489:18;;;11482:43;11374:18;;37671:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37655:13;:146:::0;;-1:-1:-1;;;;;;37655:146:0::1;-1:-1:-1::0;;;;;37655:146:0;;::::1;;::::0;;37814:15:::1;:34:::0;;-1:-1:-1;;;;;;37814:34:0::1;::::0;;;::::1;;;::::0;;37864:48:::1;::::0;;11457:15:1;;;11439:34;;11509:15;;;11504:2;11489:18;;11482:43;37864:48:0::1;::::0;11374:18:1;37864:48:0::1;11227:304:1::0;31444:226:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31538:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;31537:28;31515:110;;;::::0;-1:-1:-1;;;31515:110:0;;11738:2:1;31515:110:0::1;::::0;::::1;11720:21:1::0;;;11757:18;;;11750:30;11816:34;11796:18;;;11789:62;11868:18;;31515:110:0::1;11536:356:1::0;31515:110:0::1;31638:24;31654:7;31638:15;:24::i;:::-;31444:226:::0;:::o;30225:956::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30444:33:0;::::1;;::::0;;;:22:::1;:33;::::0;;;;;::::1;;30436:82;;;::::0;-1:-1:-1;;;30436:82:0;;12099:2:1;30436:82:0::1;::::0;::::1;12081:21:1::0;12138:2;12118:18;;;12111:30;12177:34;12157:18;;;12150:62;-1:-1:-1;;;12228:18:1;;;12221:34;12272:19;;30436:82:0::1;11897:400:1::0;30436:82:0::1;-1:-1:-1::0;;;;;30537:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;30529:78;;;::::0;-1:-1:-1;;;30529:78:0;;12504:2:1;30529:78:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:34;12562:18;;;12555:62;-1:-1:-1;;;12633:18:1;;;12626:32;12675:19;;30529:78:0::1;12302:398:1::0;30529:78:0::1;30620:20;30643:84;30709:17;30713:13:::0;30709:2:::1;:17;:::i;:::-;30643:47;30668:21;30672:17:::0;30668:2:::1;:21;:::i;:::-;30643:6:::0;;:24:::1;:47::i;:84::-;30620:107;;30755:15;;;;;;;;;-1:-1:-1::0;;;;;30755:15:0::1;-1:-1:-1::0;;;;;30755:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30744:33:0::1;:7;-1:-1:-1::0;;;;;30744:33:0::1;;30740:434;;;30794:56;30811:9;30830:4;30837:12;30794:16;:56::i;:::-;30740:434;;;30885:15;;;;;;;;;-1:-1:-1::0;;;;;30885:15:0::1;-1:-1:-1::0;;;;;30885:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30872:35:0::1;:9;-1:-1:-1::0;;;;;30872:35:0::1;;30868:306;;;30924:54;30941:7;30958:4;30965:12;30924:16;:54::i;30868:306::-;31011:151;31049:9;31077:7;31111:4;31135:12;31011:19;:151::i;:::-;30425:756;30225:956:::0;;;;;:::o;32442:460::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32561:12:::1;;32550:7;:23;;32528:135;;;::::0;-1:-1:-1;;;32528:135:0;;12907:2:1;32528:135:0::1;::::0;::::1;12889:21:1::0;12946:2;12926:18;;;12919:30;12985:34;12965:18;;;12958:62;13056:32;13036:18;;;13029:60;13106:19;;32528:135:0::1;12705:426:1::0;32528:135:0::1;32696:26;::::0;;32733:36;;;;32785:109:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32785:109:0::1;::::0;8302:18:1;32785:109:0::1;;;;;;;;32517:385;32442:460:::0;:::o;37928:539::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38029:29:0;::::1;38021:88;;;::::0;-1:-1:-1;;;38021:88:0;;13338:2:1;38021:88:0::1;::::0;::::1;13320:21:1::0;13377:2;13357:18;;;13350:30;13416:34;13396:18;;;13389:62;-1:-1:-1;;;13467:18:1;;;13460:44;13521:19;;38021:88:0::1;13136:410:1::0;38021:88:0::1;-1:-1:-1::0;;;;;38128:32:0;::::1;38155:4;38128:32;;38120:104;;;::::0;-1:-1:-1;;;38120:104:0;;13753:2:1;38120:104:0::1;::::0;::::1;13735:21:1::0;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;13902:29;13882:18;;;13875:57;13949:19;;38120:104:0::1;13551:423:1::0;38120:104:0::1;-1:-1:-1::0;;;;;38258:45:0;::::1;;::::0;;;:28:::1;:45;::::0;;;;;::::1;;38257:46;38235:165;;;::::0;-1:-1:-1;;;38235:165:0;;14181:2:1;38235:165:0::1;::::0;::::1;14163:21:1::0;14220:2;14200:18;;;14193:30;14259:34;14239:18;;;14232:62;14330:34;14310:18;;;14303:62;-1:-1:-1;;;14381:19:1;;;14374:36;14427:19;;38235:165:0::1;13979:473:1::0;38235:165:0::1;38413:46;38443:15;38413:29;:46::i;38475:768::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38593:45:0;::::1;;::::0;;;:28:::1;:45;::::0;;;;;::::1;;38571:157;;;::::0;-1:-1:-1;;;38571:157:0;;14659:2:1;38571:157:0::1;::::0;::::1;14641:21:1::0;14698:2;14678:18;;;14671:30;14737:34;14717:18;;;14710:62;14808:32;14788:18;;;14781:60;14858:19;;38571:157:0::1;14457:426:1::0;38571:157:0::1;-1:-1:-1::0;;;;;38741:45:0;::::1;38789:5;38741:45:::0;;;:28:::1;:45;::::0;;;;:53;;-1:-1:-1;;38741:53:0::1;::::0;;38807:321:::1;38831:21;:28:::0;38827:32;::::1;38807:321;;;38913:15;-1:-1:-1::0;;;;;38885:43:0::1;:21;38907:1;38885:24;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38885:24:0::1;:43;38881:236;;;38976:21;38998:28:::0;;:32:::1;::::0;39029:1:::1;::::0;38998:32:::1;:::i;:::-;38976:55;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38949:21:::1;:24:::0;;-1:-1:-1;;;;;38976:55:0;;::::1;::::0;38971:1;;38949:24;::::1;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1::0;;;;;38949:82:0::1;;;;;-1:-1:-1::0;;;;;38949:82:0::1;;;;;;39050:21;:27;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39050:27:0;;;;;-1:-1:-1;;;;;;39050:27:0::1;::::0;;;;;39096:5:::1;;38881:236;38861:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38807:321;;;-1:-1:-1::0;39145:49:0::1;::::0;-1:-1:-1;;;;;1685:32:1;;1667:51;;39145:49:0::1;::::0;1655:2:1;1640:18;39145:49:0::1;;;;;;;39205:30;39219:15;39205:13;:30::i;31313:123::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;31370:15:::1;:23:::0;;-1:-1:-1;;31370:23:0::1;::::0;;31409:19:::1;::::0;::::1;::::0;31388:5:::1;::::0;31409:19:::1;31313:123::o:0;39251:587::-;-1:-1:-1;;;;;61053:16:0;;39355:7;61053:16;;;:7;:16;;;;;;60303:17;;20809:1;60303:26;39447:19;:84;;;;-1:-1:-1;39483:12:0;:24;39518:12;39483:48;;;;-1:-1:-1;;;39483:24:0;;;;:48;39447:84;:127;;;;-1:-1:-1;39559:15:0;;-1:-1:-1;;;;;39548:26:0;;;39559:15;;39548:26;39447:127;39429:374;;;39740:51;39764:7;39781:8;39740:23;:51::i;27262:108::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;27333:29:::1;::::0;15532:10;;27333:29;::::1;;;::::0;27355:6;;27333:29:::1;::::0;;;27355:6;15532:10;27333:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27262:108:::0;:::o;39846:289::-;39892:7;39916:18;43389:12;;43404:15;-1:-1:-1;43389:30:0;43251:176;39916:18;:46;;;;-1:-1:-1;43588:20:0;;43612:15;-1:-1:-1;43588:39:0;39938:24;39912:184;;;39979:14;39996:21;:19;:21::i;:::-;39979:38;;40048:12;;40039:6;:21;:45;;40072:12;;40039:45;;;40063:6;40039:45;40032:52;;;39846:289;:::o;39912:184::-;-1:-1:-1;40115:12:0;;;39846:289::o;31907:318::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32023:2:::1;32003:16;:22;;31995:75;;;::::0;-1:-1:-1;;;31995:75:0;;15090:2:1;31995:75:0::1;::::0;::::1;15072:21:1::0;15129:2;15109:18;;;15102:30;15168:34;15148:18;;;15141:62;-1:-1:-1;;;15219:18:1;;;15212:38;15267:19;;31995:75:0::1;14888:404:1::0;31995:75:0::1;32103:12;::::0;;32126:31;;;;32173:44:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32173:44:0::1;::::0;8302:18:1;32173:44:0::1;8155:248:1::0;34507:1233:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;34646:2:::1;34627:16;:21;34619:80;;;::::0;-1:-1:-1;;;34619:80:0;;15499:2:1;34619:80:0::1;::::0;::::1;15481:21:1::0;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:44;15682:19;;34619:80:0::1;15297:410:1::0;34619:80:0::1;34740:3;34718:19;:25;34710:88;;;::::0;-1:-1:-1;;;34710:88:0;;15914:2:1;34710:88:0::1;::::0;::::1;15896:21:1::0;15953:2;15933:18;;;15926:30;15992:34;15972:18;;;15965:62;-1:-1:-1;;;16043:18:1;;;16036:48;16101:19;;34710:88:0::1;15712:414:1::0;34710:88:0::1;34836:19;34817:16;:38;34809:103;;;::::0;-1:-1:-1;;;34809:103:0;;16333:2:1;34809:103:0::1;::::0;::::1;16315:21:1::0;16372:2;16352:18;;;16345:30;16411:34;16391:18;;;16384:62;-1:-1:-1;;;16462:18:1;;;16455:50;16522:19;;34809:103:0::1;16131:416:1::0;34809:103:0::1;34967:12;::::0;-1:-1:-1;;34967:19:0::1;:50:::0;::::1;;;-1:-1:-1::0;34990:20:0::1;::::0;-1:-1:-1;;34990:27:0::1;34967:50;34959:90;;;::::0;-1:-1:-1;;;34959:90:0;;16754:2:1;34959:90:0::1;::::0;::::1;16736:21:1::0;16793:2;16773:18;;;16766:30;16832:29;16812:18;;;16805:57;16879:18;;34959:90:0::1;16552:351:1::0;34959:90:0::1;19533:1;35091:12;:38:::0;;;35140:21:::1;:36:::0;35202:22:::1;::::0;35187:12:::1;:37:::0;35237:23:::1;-1:-1:-1::0;35237:17:0::1;:23::i;:::-;35271:30;35296:4;35271:24;:30::i;:::-;35461:28;:16:::0;35480:9:::1;35461:28;:::i;:::-;35443:46;::::0;:15:::1;:46;:::i;:::-;35428:12;:61:::0;35538:31:::1;:19:::0;35560:9:::1;35538:31;:::i;:::-;35523:12;;:46;;;;:::i;:::-;35500:20;:69:::0;35716:16:::1;::::0;::::1;::::0;;;::::1;34507:1233:::0;;:::o;29295:402::-;29417:4;29439:228;15532:10;29489:7;29511:145;29568:15;29511:145;;;;;;;;;;;;;;;;;15532:10;29511:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29511:34:0;;;;;;;;;;;;:38;:145::i;17146:338::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17290:22:0;::::1;17268:110;;;;-1:-1:-1::0;;;17268:110:0::1;;;;;;;:::i;:::-;17417:13;::::0;17396:45:::1;::::0;-1:-1:-1;;;;;17396:45:0;;::::1;::::0;17417:13:::1;::::0;17396:45:::1;::::0;17417:13:::1;::::0;17396:45:::1;17452:13;:24:::0;;-1:-1:-1;;;;;;17452:24:0::1;-1:-1:-1::0;;;;;17452:24:0;;;::::1;::::0;;;::::1;::::0;;17146:338::o;27378:123::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;27464:20:::1;:29:::0;27378:123::o;27509:201::-;27616:4;27638:42;15532:10;27662:9;27673:6;27638:9;:42::i;29705:512::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;29844:1:::1;29835:6;:10;:32;;;;-1:-1:-1::0;29849:18:0;29835:32:::1;29827:58;;;::::0;-1:-1:-1;;;29827:58:0;;17650:2:1;29827:58:0::1;::::0;::::1;17632:21:1::0;17689:2;17669:18;;;17662:30;-1:-1:-1;;;17708:18:1;;;17701:43;17761:18;;29827:58:0::1;17448:337:1::0;29827:58:0::1;29898:13;29914:41;29937:17;29941:13:::0;29937:2:::1;:17;:::i;29914:41::-;30057:14;::::0;29898:57;;-1:-1:-1;29968:22:0::1;::::0;29993:109:::1;::::0;30037:4:::1;::::0;-1:-1:-1;;;;;30057:14:0::1;29898:57:::0;29993:21:::1;:109::i;:::-;29968:134;;30169:40;30194:14;30169:24;:40::i;:::-;29816:401;;29705:512:::0;;:::o;33965:369::-;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;34119:22:::1;::::0;34177:69:::1;34228:17;34232:13:::0;34228:2:::1;:17;:::i;34177:69::-;34152:22;:94:::0;;;34262:64:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;;34262:64:0::1;::::0;8302:18:1;34262:64:0::1;8155:248:1::0;31189:116:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;31242:15:::1;:22:::0;;-1:-1:-1;;31242:22:0::1;::::0;::::1;::::0;;31280:17:::1;::::0;::::1;::::0;31242:22;;31280:17:::1;31189:116::o:0;18620:40::-;;;;;;;;;;;;41753:441;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41843:26:0;::::1;41835:82;;;::::0;-1:-1:-1;;;41835:82:0;;17992:2:1;41835:82:0::1;::::0;::::1;17974:21:1::0;18031:2;18011:18;;;18004:30;18070:34;18050:18;;;18043:62;-1:-1:-1;;;18121:18:1;;;18114:41;18172:19;;41835:82:0::1;17790:407:1::0;41835:82:0::1;-1:-1:-1::0;;;;;41937:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;::::1;;41936:37;41928:93;;;::::0;-1:-1:-1;;;41928:93:0;;18404:2:1;41928:93:0::1;::::0;::::1;18386:21:1::0;18443:2;18423:18;;;18416:30;18482:34;18462:18;;;18455:62;-1:-1:-1;;;18533:18:1;;;18526:41;18584:19;;41928:93:0::1;18202:407:1::0;41928:93:0::1;-1:-1:-1::0;;;;;42034:36:0;::::1;;::::0;;;:22:::1;:36;::::0;;;;;;;:43;;-1:-1:-1;;42034:43:0::1;42073:4;42034:43:::0;;::::1;::::0;;;42088:23:::1;:42:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;42088:42:0::1;::::0;::::1;::::0;;42148:38;;1667:51:1;;;42148:38:0::1;::::0;1640:18:1;42148:38:0::1;1495:229:1::0;43072:171:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;43149:21:::1;:32:::0;;-1:-1:-1;;43149:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43197:38:::1;::::0;154:41:1;;;43197:38:0::1;::::0;142:2:1;127:18;43197:38:0::1;14:187:1::0;43643:104:0;43695:7;43722:17;43734:4;19109:13;18887:2;19109;:13;:::i;:::-;19091:31;;:15;:31;:::i;28377:600::-;28597:4;28614:55;28621:6;15532:10;28643:6;28651:8;28661:1;28664;28667;28614:6;:55::i;:::-;28680:36;28690:6;28698:9;28709:6;28680:9;:36::i;:::-;28727:220;28750:6;15532:10;28798:138;28854:6;28798:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28798:19:0;;;;;;:11;:19;;;;;;15532:10;28818:12;15436:115;28727:220;-1:-1:-1;28965:4:0;28377:600;;;;;;;;;:::o;35748:551::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35899:41:0;::::1;35877:149;;;::::0;-1:-1:-1;;;35877:149:0;;18816:2:1;35877:149:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:34;18874:18;;;18867:62;18965:28;18945:18;;;18938:56;19011:19;;35877:149:0::1;18614:422:1::0;35877:149:0::1;36061:26;::::0;;-1:-1:-1;;;;;36098:65:0;;::::1;-1:-1:-1::0;;;;;;36098:65:0;::::1;::::0;::::1;::::0;;;36179:112:::1;::::0;;36061:26;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;36179:112:0::1;::::0;11374:18:1;36179:112:0::1;11227:304:1::0;33601:356:0;16206:13;;-1:-1:-1;;;;;16206:13:0;15532:10;16206:29;16184:119;;;;-1:-1:-1;;;16184:119:0;;;;;;;:::i;:::-;33747:24:::1;::::0;;33782:46;;;;33844:105:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;33844:105:0::1;::::0;8302:18:1;33844:105:0::1;8155:248:1::0;40473:140:0;40566:10;;:39;;;-1:-1:-1;;;40566:39:0;;;;40534:7;;-1:-1:-1;;;;;40566:10:0;;:37;;:39;;;;;;;;;;;;;;:10;:39;;;;;;;;;;31678:221;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31769:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;31747:109;;;::::0;-1:-1:-1;;;31747:109:0;;19243:2:1;31747:109:0::1;::::0;::::1;19225:21:1::0;;;19262:18;;;19255:30;19321:34;19301:18;;;19294:62;19373:18;;31747:109:0::1;19041:356:1::0;31747:109:0::1;31869:22;31883:7;31869:13;:22::i;32233:201::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;32325:12:::1;::::0;;32348:23;;;;32387:39:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;32387:39:0::1;::::0;8302:18:1;32387:39:0::1;8155:248:1::0;32910:319:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;33059:23:::1;::::0;;33093:50;;;;33159:62:::1;::::0;;8329:25:1;;;8385:2;8370:18;;8363:34;;;33159:62:0::1;::::0;8302:18:1;33159:62:0::1;8155:248:1::0;16890::0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16981:22:0;::::1;16973:73;;;;-1:-1:-1::0;;;16973:73:0::1;;;;;;;:::i;:::-;17085:6;::::0;;17064:38:::1;::::0;-1:-1:-1;;;;;17064:38:0;;::::1;::::0;17085:6;::::1;::::0;17064:38:::1;::::0;::::1;17113:6;:17:::0;;-1:-1:-1;;;;;;17113:17:0::1;-1:-1:-1::0;;;;;17113:17:0;;;::::1;::::0;;;::::1;::::0;;16890:248::o;36811:483::-;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36915:29:0;::::1;36893:124;;;::::0;-1:-1:-1;;;36893:124:0;;19604:2:1;36893:124:0::1;::::0;::::1;19586:21:1::0;19643:2;19623:18;;;19616:30;19682:34;19662:18;;;19655:62;-1:-1:-1;;;19733:18:1;;;19726:43;19786:19;;36893:124:0::1;19402:409:1::0;36893:124:0::1;37052:14;::::0;;-1:-1:-1;;;;;37077:32:0;;::::1;-1:-1:-1::0;;;;;;37077:32:0;;::::1;::::0;::::1;::::0;;;37120:10:::1;:40:::0;;;;::::1;::::0;::::1;::::0;;;37176:51:::1;::::0;;37052:14;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;37176:51:0::1;::::0;11374:18:1;37176:51:0::1;;;;;;;;37240:46;37270:15;37240:29;:46::i;36307:496::-:0;16058:6;;-1:-1:-1;;;;;16058:6:0;15532:10;16058:22;16050:67;;;;-1:-1:-1;;;16050:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36442:33:0;::::1;36420:133;;;::::0;-1:-1:-1;;;36420:133:0;;20018:2:1;36420:133:0::1;::::0;::::1;20000:21:1::0;20057:2;20037:18;;;20030:30;20096:34;20076:18;;;20069:62;-1:-1:-1;;;20147:18:1;;;20140:48;20205:19;;36420:133:0::1;19816:414:1::0;36420:133:0::1;36588:18;::::0;;-1:-1:-1;;;;;36617:40:0;;::::1;-1:-1:-1::0;;;;;;36617:40:0;::::1;::::0;::::1;::::0;;;36673:59:::1;::::0;;36588:18;;;::::1;11439:34:1::0;;;11504:2;11489:18;;11482:43;;;;36673:59:0::1;::::0;11374:18:1;36673:59:0::1;11227:304:1::0;12921:132:0;12979:7;13006:39;13010:1;13013;13006:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12999:46;12921:132;-1:-1:-1;;;12921:132:0:o;43755:371::-;-1:-1:-1;;;;;43882:19:0;;43874:68;;;;-1:-1:-1;;;43874:68:0;;20437:2:1;43874:68:0;;;20419:21:1;20476:2;20456:18;;;20449:30;20515:34;20495:18;;;20488:62;-1:-1:-1;;;20566:18:1;;;20559:34;20610:19;;43874:68:0;20235:400:1;43874:68:0;-1:-1:-1;;;;;43961:21:0;;43953:68;;;;-1:-1:-1;;;43953:68:0;;20842:2:1;43953:68:0;;;20824:21:1;20881:2;20861:18;;;20854:30;20920:34;20900:18;;;20893:62;-1:-1:-1;;;20971:18:1;;;20964:32;21013:19;;43953:68:0;20640:398:1;43953:68:0;-1:-1:-1;;;;;44034:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44086:32;;1459:25:1;;;44086:32:0;;1432:18:1;44086:32:0;;;;;;;43755:371;;;:::o;44134:4726::-;-1:-1:-1;;;;;44256:18:0;;44248:68;;;;-1:-1:-1;;;44248:68:0;;21245:2:1;44248:68:0;;;21227:21:1;21284:2;21264:18;;;21257:30;21323:34;21303:18;;;21296:62;-1:-1:-1;;;21374:18:1;;;21367:35;21419:19;;44248:68:0;21043:401:1;44248:68:0;-1:-1:-1;;;;;44335:16:0;;44327:64;;;;-1:-1:-1;;;44327:64:0;;21651:2:1;44327:64:0;;;21633:21:1;21690:2;21670:18;;;21663:30;21729:34;21709:18;;;21702:62;-1:-1:-1;;;21780:18:1;;;21773:33;21823:19;;44327:64:0;21449:399:1;44327:64:0;44419:1;44410:6;:10;44402:64;;;;-1:-1:-1;;;44402:64:0;;22055:2:1;44402:64:0;;;22037:21:1;22094:2;22074:18;;;22067:30;22133:34;22113:18;;;22106:62;-1:-1:-1;;;22184:18:1;;;22177:39;22233:19;;44402:64:0;21853:405:1;44402:64:0;44493:2;-1:-1:-1;;;;;44485:10:0;:4;-1:-1:-1;;;;;44485:10:0;;;44477:62;;;;-1:-1:-1;;;44477:62:0;;22465:2:1;44477:62:0;;;22447:21:1;22504:2;22484:18;;;22477:30;22543:34;22523:18;;;22516:62;-1:-1:-1;;;22594:18:1;;;22587:37;22641:19;;44477:62:0;22263:403:1;44477:62:0;60415:15;;20809:1;60415:24;44558:15;44550:81;;;;-1:-1:-1;;;44550:81:0;;22873:2:1;44550:81:0;;;22855:21:1;22912:2;22892:18;;;22885:30;22951:34;22931:18;;;22924:62;-1:-1:-1;;;23002:18:1;;;22995:51;23063:19;;44550:81:0;22671:417:1;44550:81:0;44644:14;17557:6;;-1:-1:-1;;;;;17557:6:0;;;;44644:14;44703;;;;;:30;;;44727:6;-1:-1:-1;;;;;44721:12:0;:2;-1:-1:-1;;;;;44721:12:0;;44703:30;:82;;;-1:-1:-1;;;;;;44751:34:0;;;;;;:28;:34;;;;;;;;44703:82;:118;;;-1:-1:-1;;;;;;44789:32:0;;;;;;:28;:32;;;;;;;;44703:118;44679:142;;44842:22;44867:18;43389:12;;43404:15;-1:-1:-1;43389:30:0;43251:176;44867:18;44842:43;;44916:12;;44906:6;:22;;:42;;;;44932:16;44906:42;:64;;;;44953:17;44952:18;44906:64;44898:129;;;;-1:-1:-1;;;44898:129:0;;23295:2:1;44898:129:0;;;23277:21:1;23334:2;23314:18;;;23307:30;23373:34;23353:18;;;23346:62;-1:-1:-1;;;23424:18:1;;;23417:37;23471:19;;44898:129:0;23093:403:1;44898:129:0;45064:13;;-1:-1:-1;;;;;45064:13:0;45096:17;;:37;;;45117:16;45096:37;:71;;;;45146:5;-1:-1:-1;;;;;45138:13:0;:4;-1:-1:-1;;;;;45138:13:0;;;:28;;;;;45161:5;-1:-1:-1;;;;;45155:11:0;:2;-1:-1:-1;;;;;45155:11:0;;;45138:28;45088:119;;;;-1:-1:-1;;;45088:119:0;;23703:2:1;45088:119:0;;;23685:21:1;23742:2;23722:18;;;23715:30;-1:-1:-1;;;23761:18:1;;;23754:52;23823:18;;45088:119:0;23501:346:1;45088:119:0;45220:24;45248:18;60303:17;;20809:1;60303:26;;60229:108;45248:18;45247:19;45220:46;;45281:17;:45;;;;-1:-1:-1;43588:20:0;;43612:15;-1:-1:-1;43588:39:0;45302:24;45281:66;;;;;45331:16;45330:17;45281:66;:89;;;;;45351:19;45281:89;45277:169;;;45387:47;45417:2;45421:4;45427:6;45387:29;:47::i;:::-;45508:4;45458:28;61053:16;;;:7;:16;;;;;;45593:23;;45458:56;;-1:-1:-1;45556:60:0;;;45525:28;45651:17;:53;;;;;45685:19;45651:53;:91;;;;-1:-1:-1;45721:21:0;;;;45651:91;:119;;;;;45765:5;-1:-1:-1;;;;;45759:11:0;:2;-1:-1:-1;;;;;45759:11:0;;45651:119;45629:141;;45884:14;45880:1319;;;45919:23;45915:161;;;45986:23;;45963:46;;46028:32;46039:20;46028:10;:32::i;:::-;46094:14;;;;;;;:81;;;;;46153:22;;46129:21;:46;46094:81;:150;;;;-1:-1:-1;46224:20:0;;46210:10;;46196:9;;:25;;:13;:25::i;:::-;:48;46094:150;46090:1098;;;46303:21;46283:17;;:41;46279:421;;;46659:21;46639:17;:41;46279:421;46724:17;;:21;46720:453;;46770:22;46795:32;46809:17;;46795:13;:32::i;:::-;46770:57;;46916:40;46941:14;46916:24;:40::i;:::-;-1:-1:-1;46999:1:0;46979:17;:21;;;47055:9;:13;;;47114:10;:14;46720:453;47215:17;47211:841;;;47327:5;-1:-1:-1;;;;;47321:11:0;:2;-1:-1:-1;;;;;47321:11:0;;47317:658;;;47366:10;;:22;;47381:6;47366:14;:22::i;:::-;47353:10;:35;47425:15;;:27;;47445:6;47425:19;:27::i;:::-;47407:15;:45;47484:24;;47475:33;;47471:286;;;47609:17;;47551:21;;47599:27;;47595:60;;;-1:-1:-1;47638:17:0;;47595:60;47698:39;47720:16;:7;47732:3;47720:11;:16::i;:::-;47698:17;;;:21;:39::i;:::-;47678:17;:59;-1:-1:-1;47471:286:0;47317:658;;;47838:5;-1:-1:-1;;;;;47830:13:0;:4;-1:-1:-1;;;;;47830:13:0;;47826:149;;;47876:9;;:21;;47890:6;47876:13;:21::i;:::-;47864:9;:33;47933:14;;:26;;47952:6;47933:18;:26::i;:::-;47916:14;:43;47826:149;48017:11;;:23;;48033:6;48017:15;:23::i;:::-;48003:11;:37;47211:841;-1:-1:-1;;;;;48185:24:0;;48064:12;48185:24;;;:18;:24;;;;;;48079:4;;48185:24;;;:50;;-1:-1:-1;;;;;;48213:22:0;;;;;;:18;:22;;;;;;;;48185:50;48181:98;;;-1:-1:-1;48262:5:0;48181:98;48481:16;:50;;;-1:-1:-1;17651:13:0;;-1:-1:-1;;;;;17651:13:0;15532:10;48501:30;48481:50;48477:322;;;48584:24;:22;:24::i;:::-;48477:322;;;48630:19;48626:173;;;48744:43;48784:2;48744:39;:43::i;:::-;48811:41;48826:4;48832:2;48836:6;48844:7;48811:14;:41::i;:::-;44237:4623;;;;;;;;;44134:4726;;;:::o;12429:226::-;12549:7;12585:12;12577:6;;;;12569:29;;;;-1:-1:-1;;;12569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;12609:9:0;12621:5;12625:1;12621;:5;:::i;:::-;12609:17;12429:226;-1:-1:-1;;;;;12429:226:0:o;12663:250::-;12721:7;12745:6;12741:47;;-1:-1:-1;12775:1:0;12768:8;;12741:47;12800:9;12812:5;12816:1;12812;:5;:::i;:::-;12800:17;-1:-1:-1;12845:1:0;12836:5;12840:1;12800:17;12836:5;:::i;:::-;:10;12828:56;;;;-1:-1:-1;;;12828:56:0;;24276:2:1;12828:56:0;;;24258:21:1;24315:2;24295:18;;;24288:30;24354:34;24334:18;;;24327:62;-1:-1:-1;;;24405:18:1;;;24398:31;24446:19;;12828:56:0;24074:397:1;12096:181:0;12154:7;;12186:5;12190:1;12186;:5;:::i;:::-;12174:17;;12215:1;12210;:6;;12202:46;;;;-1:-1:-1;;;12202:46:0;;24678:2:1;12202:46:0;;;24660:21:1;24717:2;24697:18;;;24690:30;24756:29;24736:18;;;24729:57;24803:18;;12202:46:0;24476:351:1;58913:149:0;-1:-1:-1;;;;;58974:27:0;;;;;;:18;:27;;;;;;;;;:34;;-1:-1:-1;;58974:34:0;59004:4;58974:34;;;59024:30;;1667:51:1;;;59024:30:0;;1640:18:1;59024:30:0;1495:229:1;51147:733:0;51372:16;;;51386:1;51372:16;;;;;;;;51348:21;;51372:16;;;;;;;;;;-1:-1:-1;51372:16:0;51348:40;;51409:12;51399:4;51404:1;51399:7;;;;;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;51399:22:0;;;-1:-1:-1;;;;;51399:22:0;;;;;51442:15;;;;;;;;;-1:-1:-1;;;;;51442:15:0;-1:-1:-1;;;;;51442:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51432:4;51437:1;51432:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51432:32:0;;;:7;;;;;;;;;:32;51514:15;;51477:67;;-1:-1:-1;;;51477:67:0;;51514:15;;;;;;51477:67;;;25138:51:1;25205:18;;;25198:34;;;51477:28:0;;;;;;25111:18:1;;51477:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;51583:15:0;;:236;;-1:-1:-1;;;51583:236:0;;:15;;;;-1:-1:-1;;;;;51583:15:0;;:66;;:236;;51664:11;;51690:1;;51734:4;;51753:9;;51793:15;;51583:236;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51837:35;51854:11;51867:4;51837:35;;;;;;;:::i;:::-;;;;;;;;51277:603;51147:733;;;:::o;52613:668::-;52833:16;;;52847:1;52833:16;;;;;;;;52809:21;;52833:16;;;;;;;;;;-1:-1:-1;52833:16:0;52809:40;;52870:15;;;;;;;;;-1:-1:-1;;;;;52870:15:0;-1:-1:-1;;;;;52870:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52860:4;52865:1;52860:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52860:32:0;;;-1:-1:-1;;;;;52860:32:0;;;;;52913:12;52903:4;52908:1;52903:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52903:22:0;;;:7;;;;;;;;;:22;52964:15;;;;;;:66;53052:6;53084:1;53131:4;53150:9;53190:24;:15;53210:3;53190:19;:24::i;:::-;52964:261;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53243:30;53260:6;53268:4;53243:30;;;;;;;:::i;53289:834::-;53554:16;;;53568:1;53554:16;;;;;;;;;53530:21;;53554:16;;;;;;;;;;-1:-1:-1;53554:16:0;53530:40;;53591:16;53581:4;53586:1;53581:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;53581:26:0;;;-1:-1:-1;;;;;53581:26:0;;;;;53628:15;;;;;;;;;-1:-1:-1;;;;;53628:15:0;-1:-1:-1;;;;;53628:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53618:4;53623:1;53618:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;53618:32:0;;;-1:-1:-1;;;;;53618:32:0;;;;;53671:14;53661:4;53666:1;53661:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53661:24:0;;;:7;;;;;;;;;:24;53739:15;;53698:71;;-1:-1:-1;;;53698:71:0;;53739:15;;;;;;53698:71;;;25138:51:1;25205:18;;;25198:34;;;53698:32:0;;;;;;25111:18:1;;53698:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;53808:15:0;;;;;-1:-1:-1;;;;;53808:15:0;:69;53892:11;53918:1;53965:4;53984:9;54024:24;:15;54044:3;54024:19;:24::i;:::-;53808:251;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54077:38;54097:11;54110:4;54077:38;;;;;;;:::i;:::-;;;;;;;;53459:664;53289:834;;;;:::o;58530:375::-;-1:-1:-1;;;;;58617:45:0;;;;;;:28;:45;;;;;;;;58613:58;;;58530:375;:::o;58613:58::-;-1:-1:-1;;;;;58683:45:0;;;;;;:28;:45;;;;;;;;:52;;-1:-1:-1;;58683:52:0;58731:4;58683:52;;;;;;58746:21;:43;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58746:43:0;;;;;58807:47;;1667:51:1;;;58807:47:0;;1640:18:1;58807:47:0;;;;;;;58865:32;58881:15;58865;:32::i;59070:146::-;-1:-1:-1;;;;;59129:27:0;;59159:5;59129:27;;;:18;:27;;;;;;;;;:35;;-1:-1:-1;;59129:35:0;;;59180:28;;1667:51:1;;;59180:28:0;;1640:18:1;59180:28:0;1495:229:1;61146:1375:0;61372:51;;;;;;;;61411:12;61372:51;-1:-1:-1;;;;;61372:51:0;;;;;-1:-1:-1;;;61372:51:0;;;;;;;-1:-1:-1;;;61372:51:0;;;;;;;;;;;;;-1:-1:-1;;;;;61372:51:0;;;;;;;;;;;;;;;;61462:9;61438:33;61434:1080;;;61560:14;61577:16;:7;-1:-1:-1;;;;;61577:14:0;;:16::i;:::-;61560:33;-1:-1:-1;;;;;;61614:23:0;;61632:4;61614:23;61610:161;;;61739:16;:7;-1:-1:-1;;;;;61739:14:0;;:16::i;:::-;61730:25;;61610:161;-1:-1:-1;;;;;61819:20:0;;61815:33;;61841:7;;61146:1375;;:::o;61815:33::-;61891;;-1:-1:-1;;;61891:33:0;;-1:-1:-1;;;;;1685:32:1;;;61891:33:0;;;1667:51:1;61864:16:0;;61891:24;;;;;;1640:18:1;;61891:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61864:61;;61957:13;:22;;;-1:-1:-1;;;;;61946:33:0;:8;-1:-1:-1;;;;;61946:33:0;;:87;;;;;62011:13;:22;;;-1:-1:-1;;;;;62000:33:0;:8;-1:-1:-1;;;;;62000:33:0;;61946:87;61942:561;;;62132:58;;-1:-1:-1;;;62132:58:0;;27600:2:1;62132:58:0;;;27582:21:1;27639:2;27619:18;;;27612:30;27678:34;27658:18;;;27651:62;-1:-1:-1;;;27729:18:1;;;27722:38;27777:19;;62132:58:0;27398:404:1;61942:561:0;62227:13;:22;;;-1:-1:-1;;;;;62216:33:0;:8;-1:-1:-1;;;;;62216:33:0;;:87;;;;;62281:13;:22;;;-1:-1:-1;;;;;62270:33:0;:8;-1:-1:-1;;;;;62270:33:0;;62216:87;62212:291;;;62427:15;;;;;;;62426:16;62418:69;;;;-1:-1:-1;;;62418:69:0;;28009:2:1;62418:69:0;;;27991:21:1;28048:2;28028:18;;;28021:30;28087:34;28067:18;;;28060:62;-1:-1:-1;;;28138:18:1;;;28131:38;28186:19;;62418:69:0;27807:404:1;62418:69:0;61473:1041;;61434:1080;61250:1271;61146:1375;;:::o;51888:717::-;52131:16;;;52145:1;52131:16;;;;;;;;52027:7;;;;52131:16;52145:1;52131:16;;;;;;;;;;-1:-1:-1;52131:16:0;52107:40;;52168:15;;;;;;;;;-1:-1:-1;;;;;52168:15:0;-1:-1:-1;;;;;52168:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52158:4;52163:1;52158:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52158:32:0;;;-1:-1:-1;;;;;52158:32:0;;;;;52211:12;52201:4;52206:1;52201:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52201:22:0;;;:7;;;;;;;;;:22;52289:15;;52262:24;;52289:15;;;;;:37;52348:6;52262:24;52427:4;52446:9;52486:24;:15;52506:3;52486:19;:24::i;:::-;52289:232;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52289:232:0;;;;;;;;;;;;:::i;:::-;52262:259;;52539:30;52556:6;52564:4;52539:30;;;;;;;:::i;:::-;;;;;;;;52587:7;52595:1;52587:10;;;;;;;;:::i;:::-;;;;;;;52580:17;;;;51888:717;;;;;:::o;54131:260::-;54204:10;;54200:184;;54231:10;;;:47;;-1:-1:-1;;;54231:47:0;;54264:4;54231:47;;;25138:51:1;25205:18;;;25198:34;;;-1:-1:-1;;;;;54231:10:0;;:24;;25111:18:1;;54231:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54293:10:0;;;:26;;-1:-1:-1;;;54293:26:0;;;;;1459:25:1;;;-1:-1:-1;;;;;54293:10:0;;;;-1:-1:-1;54293:18:0;;-1:-1:-1;1432:18:1;54293:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54341:31;54365:6;54341:31;;;;1459:25:1;;1447:2;1432:18;;1313:177;56392:1180:0;56613:15;56601:8;:27;;56593:57;;;;-1:-1:-1;;;56593:57:0;;29528:2:1;56593:57:0;;;29510:21:1;29567:2;29547:18;;;29540:30;-1:-1:-1;;;29586:18:1;;;29579:47;29643:18;;56593:57:0;29326:341:1;56593:57:0;-1:-1:-1;;;;;57012:13:0;;56663:14;57012:13;;;:6;:13;;;;;:15;;56768:16;;21385:66;;56914:5;;56946:7;;56980:5;;56663:14;57012:15;;;:::i;:::-;;;;-1:-1:-1;56835:250:0;;;;;;29959:25:1;;;;-1:-1:-1;;;;;30058:15:1;;;30038:18;;;30031:43;30110:15;;;;30090:18;;;30083:43;30142:18;;;30135:34;30185:19;;;30178:35;30229:19;;;30222:35;;;29931:19;;56835:250:0;;;;;;;;;;;;56803:301;;;;;;56704:415;;;;;;;;-1:-1:-1;;;30526:27:1;;30578:1;30569:11;;30562:27;;;;30614:2;30605:12;;30598:28;30651:2;30642:12;;30268:392;56704:415:0;;;;;;;;;;;;;56680:450;;;;;;56663:467;;57149:2;57145:1;:6;;;57141:171;;;57168:7;57173:2;57168:7;;:::i;:::-;;;57141:171;;;57201:2;57197:1;:6;;;57193:119;;;57239:60;;31116:66:1;57239:60:0;;;31104:79:1;31199:12;;;31192:28;;;31236:12;;57239:60:0;;;;;;;;;;;;57229:71;;;;;;57220:80;;57193:119;57349:26;;;57322:24;57349:26;;;;;;;;;31486:25:1;;;31559:4;31547:17;;31527:18;;;31520:45;;;;31581:18;;;31574:34;;;31624:18;;;31617:34;;;57349:26:0;;31458:19:1;;57349:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;57349:26:0;;-1:-1:-1;;57349:26:0;;;-1:-1:-1;;;;;;;57408:30:0;;;;;;:59;;;57462:5;-1:-1:-1;;;;;57442:25:0;:16;-1:-1:-1;;;;;57442:25:0;;57408:59;57386:136;;;;-1:-1:-1;;;57386:136:0;;31864:2:1;57386:136:0;;;31846:21:1;31903:2;31883:18;;;31876:30;31942:29;31922:18;;;31915:57;31989:18;;57386:136:0;31662:351:1;57386:136:0;57533:31;57542:5;57549:7;57558:5;57533:8;:31::i;:::-;56582:990;;56392:1180;;;;;;;:::o;13061:312::-;13181:7;13216:12;13209:5;13201:28;;;;-1:-1:-1;;;13201:28:0;;;;;;;;:::i;:::-;-1:-1:-1;13240:9:0;13252:5;13256:1;13252;:5;:::i;59224:997::-;59339:13;;-1:-1:-1;;;;;59339:13:0;;;;59324:12;;59456;;;;59452:508;;;-1:-1:-1;;;;;59496:21:0;;;;;;:17;:21;;;;;;59521:12;59496:37;;:85;;-1:-1:-1;59555:9:0;59537:28;;;;:17;:28;;;;;;59569:12;59537:44;59496:85;-1:-1:-1;;;;;59596:21:0;;;;;;:17;:21;;;;;;59620:12;59596:36;;;;59665:9;59647:28;;;;:43;59485:96;-1:-1:-1;59452:508:0;;;59718:4;-1:-1:-1;;;;;59712:10:0;:2;-1:-1:-1;;;;;59712:10:0;;59708:252;;;-1:-1:-1;;;;;59750:23:0;;;;;;:17;:23;;;;;;59777:12;59750:39;;:87;;-1:-1:-1;59811:9:0;59793:28;;;;:17;:28;;;;;;59825:12;59793:44;59750:87;-1:-1:-1;;;;;59852:23:0;;;;;;:17;:23;;;;;;59878:12;59852:38;;;;59923:9;59905:28;;;;:43;59739:98;-1:-1:-1;59708:252:0;59981:8;59980:9;59972:114;;;;-1:-1:-1;;;59972:114:0;;32220:2:1;59972:114:0;;;32202:21:1;32259:2;32239:18;;;32232:30;32298:34;32278:18;;;32271:62;32369:34;32349:18;;;32342:62;32441:30;32420:19;;;32413:59;32489:19;;59972:114:0;32018:496:1;59972:114:0;60117:21;:19;:21::i;:::-;60107:6;:31;;60099:114;;;;-1:-1:-1;;;60099:114:0;;32721:2:1;60099:114:0;;;32703:21:1;32760:2;32740:18;;;32733:30;32799:34;32779:18;;;32772:62;32870:34;32850:18;;;32843:62;-1:-1:-1;;;32921:19:1;;;32914:37;32968:19;;60099:114:0;32519:474:1;50206:547:0;20809:1;23656:17;;:26;;23648:35;;;;;;20809:1;23694:17;:25;50312:21:::1;50344:68;50369:4;::::0;50391:20;50344:16:::1;:68::i;:::-;50423:26;50452:41;:21;50478:14:::0;50452:25:::1;:41::i;:::-;50589:26;::::0;50721:12:::1;::::0;50671:26:::1;::::0;50423:70;;-1:-1:-1;50554:191:0::1;::::0;-1:-1:-1;;;;;50589:26:0;;::::1;::::0;50630:104:::1;::::0;50721:12;50630:68:::1;::::0;50423:70;;50630:40:::1;:68::i;:104::-;50554:20;:191::i;:::-;-1:-1:-1::0;;20768:1:0;23876:17;:26;-1:-1:-1;50206:547:0:o;50761:378::-;50856:7;20809:1;23656:17;;:26;;23648:35;;;;;;20809:1;23694:17;:25;50881:22:::1;50918:10:::0;;50914:186:::1;;51034:14;::::0;50962:126:::1;::::0;51010:4:::1;::::0;-1:-1:-1;;;;;51034:14:0::1;51067:6:::0;50962:21:::1;:126::i;:::-;50945:143;;50914:186;20768:1:::0;23876:17;:26;51117:14;50761:378;-1:-1:-1;;50761:378:0:o;49703:495::-;49849:12;:24;49884:12;49849:48;;;;-1:-1:-1;;;49849:24:0;;;;:48;49845:346;;;49984:195;;;;;;;;-1:-1:-1;49984:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;49969:12;:210;;;;-1:-1:-1;;;;;;49969:210:0;;;;;;;;;;;;;;49845:346;49703:495::o;48868:827::-;20809:1;23959:15;;:24;;23951:33;;;;;;20809:1;23995:15;:23;48977:16:::1;49004:14;49015:2:::0;-1:-1:-1;;;;;61053:16:0;61026:7;61053:16;;;:7;:16;;;;;;;60967:110;49004:14:::1;48977:42;;49030:14;49047:11;:2;-1:-1:-1::0;;;;;49047:9:0::1;;:11::i;:::-;49030:28:::0;-1:-1:-1;;;;;;49073:23:0;::::1;49091:4;49073:23;49069:144;;;49190:11;:2;-1:-1:-1::0;;;;;49190:9:0::1;;:11::i;:::-;49181:20;;49069:144;49225:16;-1:-1:-1::0;;;;;49256:20:0;::::1;49252:213;;-1:-1:-1::0;49371:1:0::1;49252:213;;;49424:28;::::0;-1:-1:-1;;;49424:28:0;;-1:-1:-1;;;;;1685:32:1;;;49424:28:0::1;::::0;::::1;1667:51:1::0;49424:24:0;::::1;::::0;::::1;::::0;1640:18:1;;49424:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49405:48;;49252:213;49492:195;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;49492:195:0;;::::1;::::0;;;;;;::::1;;::::0;;::::1;::::0;;;49609:12:::1;49492:195;;::::0;;;;;;-1:-1:-1;;;;;49492:195:0;;;::::1;::::0;;;;;;49666:9:::1;49492:195:::0;;;;;;;49477:12:::1;:210:::0;;-1:-1:-1;;;;;;49477:210:0;;;;-1:-1:-1;;;49477:210:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;49477:210:0::1;-1:-1:-1::0;;;49477:210:0;;::::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;49477:210:0;;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;24175:24:0;;48868:827::o;54399:289::-;54555:7;54550:28;;54564:14;:12;:14::i;:::-;54591:47;54612:6;54620:9;54631:6;54591:20;:47::i;:::-;54656:7;54651:29;;54665:15;58345:21;;58330:12;:36;58286:88;14150:115;13964:54;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13964:54:0;-1:-1:-1;;;13964:54:0;;;14203:7;;14230:27;;14236:4;;14230:5;:27::i;14027:115::-;13854:54;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13854:54:0;-1:-1:-1;;;13854:54:0;;;14080:7;;14107:27;;14113:4;;14107:5;:27::i;12285:136::-;12343:7;12370:43;12374:1;12377;12370:43;;;;;;;;;;;;;;;;;:3;:43::i;58382:140::-;58488:26;;-1:-1:-1;;;;;58488:18:0;;;:26;;;;;58507:6;;58488:26;;;;58507:6;58488:18;:26;;;;;;;;;;;;;;;;;;;58120:158;58167:12;;58163:30;;58120:158::o;58163:30::-;58229:12;;;58205:21;:36;-1:-1:-1;58254:16:0;;58120:158::o;54696:1688::-;54846:23;54884:18;54916:19;54927:7;54916:10;:19::i;:::-;-1:-1:-1;;;;;54971:15:0;;54948:20;54971:15;;;:7;:15;;;;;;54831:104;;-1:-1:-1;54831:104:0;;-1:-1:-1;55019:25:0;54971:15;55036:7;55019:16;:25::i;:::-;-1:-1:-1;;;;;55055:15:0;;;;;;;:7;:15;;;;;;:29;;;55123:18;;;;;;;;;54997:47;;-1:-1:-1;55177:36:0;55123:18;55197:15;55177:19;:36::i;:::-;-1:-1:-1;;;;;55224:18:0;;;;;;:7;:18;;;;;:35;;;55152:61;-1:-1:-1;55308:20:0;;:42;;;;;55349:1;55332:14;:18;55308:42;55304:270;;;55391:8;;55367:21;55437:20;55391:8;55455:1;55437:17;:20::i;:::-;55472:8;:23;;;55517:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;55414:43:0;;-1:-1:-1;55517:45:0;;8302:18:1;55517:45:0;;;;;;;55352:222;;55304:270;55605:1;55590:12;:16;:36;;;;-1:-1:-1;55610:16:0;;55590:36;55586:264;;;55667:8;;55643:21;55713:20;55667:8;55731:1;55713:17;:20::i;:::-;55748:8;:23;;;55793:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;55690:43:0;;-1:-1:-1;55793:45:0;;8302:18:1;55793:45:0;;;;;;;55628:222;;55586:264;55862:26;55877:10;55862:14;:26::i;:::-;55921:9;-1:-1:-1;;;;;55904:44:0;55913:6;-1:-1:-1;;;;;55904:44:0;;55932:15;55904:44;;;;1459:25:1;;1447:2;1432:18;;1313:177;55904:44:0;;;;;;;;55978:14;;-1:-1:-1;;;;;55965:27:0;;;55978:14;;55965:27;55961:416;;;56169:33;;1459:25:1;;;56169:33:0;;1447:2:1;1432:18;56169:33:0;;;;;;;55961:416;;;56234:14;;-1:-1:-1;;;;;56224:24:0;;;56234:14;;56224:24;56220:157;;;56340:25;;1459::1;;;56340::0;;1447:2:1;1432:18;56340:25:0;;;;;;;54820:1564;;;;;;54696:1688;;;:::o;14273:473::-;14374:7;14483:16;14494:4;14483:10;:16::i;:::-;14478:40;;-1:-1:-1;14516:1:0;14501:17;;14478:40;14533:12;14547:17;14568:4;-1:-1:-1;;;;;14568:15:0;14584:8;14568:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14532:61;;;;14610:7;:28;;;;;14636:2;14621:4;:11;:17;;14610:28;14606:95;;;14673:4;14662:27;;;;;;;;;;;;:::i;:::-;14655:34;;;;;;14606:95;-1:-1:-1;14736:1:0;;14273:473;-1:-1:-1;;;;14273:473:0:o;60455:323::-;60555:7;60577;60612:18;60633:30;60655:7;60633:21;:30::i;:::-;60612:51;-1:-1:-1;60674:23:0;60700;:7;60612:51;60700:11;:23::i;:::-;60674:49;60759:10;;-1:-1:-1;60455:323:0;;-1:-1:-1;;;60455:323:0:o;57580:532::-;57682:4;57643:20;57666:22;;;:7;:22;;;;;;;57721:28;57666:22;57738:10;57721:16;:28::i;:::-;57776:4;57760:22;;;;:7;:22;;;;;:36;;;57699:50;-1:-1:-1;57845:17:0;;:36;;;;;57880:1;57866:11;:15;57845:36;57841:264;;;57922:8;;57898:21;57968:20;57922:8;57986:1;57968:17;:20::i;:::-;58003:8;:23;;;58048:45;;;8329:25:1;;;8385:2;8370:18;;8363:34;;;57945:43:0;;-1:-1:-1;58048:45:0;;8302:18:1;58048:45:0;8155:248:1;14754:642:0;14813:4;15294:20;;15124:66;15345:23;;;;;;:42;;-1:-1:-1;15372:15:0;;;15345:42;15337:51;14754:642;-1:-1:-1;;;;14754:642:0:o;60786:173::-;60883:7;60915:36;60945:5;60915:25;60927:12;;60915:7;:11;;:25;;;;:::i;206:258:1:-;278:1;288:113;302:6;299:1;296:13;288:113;;;378:11;;;372:18;359:11;;;352:39;324:2;317:10;288:113;;;419:6;416:1;413:13;410:48;;;-1:-1:-1;;454:1:1;436:16;;429:27;206:258::o;469:383::-;618:2;607:9;600:21;581:4;650:6;644:13;693:6;688:2;677:9;673:18;666:34;709:66;768:6;763:2;752:9;748:18;743:2;735:6;731:15;709:66;:::i;:::-;836:2;815:15;-1:-1:-1;;811:29:1;796:45;;;;843:2;792:54;;469:383;-1:-1:-1;;469:383:1:o;857:131::-;-1:-1:-1;;;;;932:31:1;;922:42;;912:70;;978:1;975;968:12;993:315;1061:6;1069;1122:2;1110:9;1101:7;1097:23;1093:32;1090:52;;;1138:1;1135;1128:12;1090:52;1177:9;1164:23;1196:31;1221:5;1196:31;:::i;:::-;1246:5;1298:2;1283:18;;;;1270:32;;-1:-1:-1;;;993:315:1:o;1729:456::-;1806:6;1814;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:33;2028:32;2069:33;:::i;:::-;1729:456;;2121:7;;-1:-1:-1;;;2175:2:1;2160:18;;;;2147:32;;1729:456::o;2190:118::-;2276:5;2269:13;2262:21;2255:5;2252:32;2242:60;;2298:1;2295;2288:12;2313:241;2369:6;2422:2;2410:9;2401:7;2397:23;2393:32;2390:52;;;2438:1;2435;2428:12;2390:52;2477:9;2464:23;2496:28;2518:5;2496:28;:::i;2559:248::-;2627:6;2635;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;-1:-1:-1;;2727:23:1;;;2797:2;2782:18;;;2769:32;;-1:-1:-1;2559:248:1:o;3202:247::-;3261:6;3314:2;3302:9;3293:7;3289:23;3285:32;3282:52;;;3330:1;3327;3320:12;3282:52;3369:9;3356:23;3388:31;3413:5;3388:31;:::i;3643:180::-;3702:6;3755:2;3743:9;3734:7;3730:23;3726:32;3723:52;;;3771:1;3768;3761:12;3723:52;-1:-1:-1;3794:23:1;;3643:180;-1:-1:-1;3643:180:1:o;3828:594::-;3923:6;3931;3939;3947;3955;4008:3;3996:9;3987:7;3983:23;3979:33;3976:53;;;4025:1;4022;4015:12;3976:53;4064:9;4051:23;4083:31;4108:5;4083:31;:::i;:::-;4133:5;-1:-1:-1;4190:2:1;4175:18;;4162:32;4203:33;4162:32;4203:33;:::i;:::-;3828:594;;4255:7;;-1:-1:-1;;;;4309:2:1;4294:18;;4281:32;;4360:2;4345:18;;4332:32;;4411:3;4396:19;;;4383:33;;-1:-1:-1;3828:594:1:o;4651:829::-;4762:6;4770;4778;4786;4794;4802;4810;4863:3;4851:9;4842:7;4838:23;4834:33;4831:53;;;4880:1;4877;4870:12;4831:53;4919:9;4906:23;4938:31;4963:5;4938:31;:::i;:::-;4988:5;-1:-1:-1;5045:2:1;5030:18;;5017:32;5058:33;5017:32;5058:33;:::i;:::-;5110:7;-1:-1:-1;5164:2:1;5149:18;;5136:32;;-1:-1:-1;5215:2:1;5200:18;;5187:32;;-1:-1:-1;5271:3:1;5256:19;;5243:33;5320:4;5307:18;;5295:31;;5285:59;;5340:1;5337;5330:12;5285:59;4651:829;;;;-1:-1:-1;4651:829:1;;;;5363:7;5417:3;5402:19;;5389:33;;-1:-1:-1;5469:3:1;5454:19;;;5441:33;;4651:829;-1:-1:-1;;4651:829:1:o;5485:388::-;5553:6;5561;5614:2;5602:9;5593:7;5589:23;5585:32;5582:52;;;5630:1;5627;5620:12;5582:52;5669:9;5656:23;5688:31;5713:5;5688:31;:::i;:::-;5738:5;-1:-1:-1;5795:2:1;5780:18;;5767:32;5808:33;5767:32;5808:33;:::i;:::-;5860:7;5850:17;;;5485:388;;;;;:::o;5878:127::-;5939:10;5934:3;5930:20;5927:1;5920:31;5970:4;5967:1;5960:15;5994:4;5991:1;5984:15;6010:422;6099:1;6142:5;6099:1;6156:270;6177:7;6167:8;6164:21;6156:270;;;6236:4;6232:1;6228:6;6224:17;6218:4;6215:27;6212:53;;;6245:18;;:::i;:::-;6295:7;6285:8;6281:22;6278:55;;;6315:16;;;;6278:55;6394:22;;;;6354:15;;;;6156:270;;;6160:3;6010:422;;;;;:::o;6437:806::-;6486:5;6516:8;6506:80;;-1:-1:-1;6557:1:1;6571:5;;6506:80;6605:4;6595:76;;-1:-1:-1;6642:1:1;6656:5;;6595:76;6687:4;6705:1;6700:59;;;;6773:1;6768:130;;;;6680:218;;6700:59;6730:1;6721:10;;6744:5;;;6768:130;6805:3;6795:8;6792:17;6789:43;;;6812:18;;:::i;:::-;-1:-1:-1;;6868:1:1;6854:16;;6883:5;;6680:218;;6982:2;6972:8;6969:16;6963:3;6957:4;6954:13;6950:36;6944:2;6934:8;6931:16;6926:2;6920:4;6917:12;6913:35;6910:77;6907:159;;;-1:-1:-1;7019:19:1;;;7051:5;;6907:159;7098:34;7123:8;7117:4;7098:34;:::i;:::-;7168:6;7164:1;7160:6;7156:19;7147:7;7144:32;7141:58;;;7179:18;;:::i;:::-;7217:20;;6437:806;-1:-1:-1;;;6437:806:1:o;7248:131::-;7308:5;7337:36;7364:8;7358:4;7337:36;:::i;7384:168::-;7424:7;7490:1;7486;7482:6;7478:14;7475:1;7472:21;7467:1;7460:9;7453:17;7449:45;7446:71;;;7497:18;;:::i;:::-;-1:-1:-1;7537:9:1;;7384:168::o;7557:184::-;7627:6;7680:2;7668:9;7659:7;7655:23;7651:32;7648:52;;;7696:1;7693;7686:12;7648:52;-1:-1:-1;7719:16:1;;7557:184;-1:-1:-1;7557:184:1:o;7746:404::-;7948:2;7930:21;;;7987:2;7967:18;;;7960:30;8026:34;8021:2;8006:18;;7999:62;-1:-1:-1;;;8092:2:1;8077:18;;8070:38;8140:3;8125:19;;7746:404::o;8408:356::-;8610:2;8592:21;;;8629:18;;;8622:30;8688:34;8683:2;8668:18;;8661:62;8755:2;8740:18;;8408:356::o;9188:251::-;9258:6;9311:2;9299:9;9290:7;9286:23;9282:32;9279:52;;;9327:1;9324;9317:12;9279:52;9359:9;9353:16;9378:31;9403:5;9378:31;:::i;10280:127::-;10341:10;10336:3;10332:20;10329:1;10322:31;10372:4;10369:1;10362:15;10396:4;10393:1;10386:15;10412:125;10452:4;10480:1;10477;10474:8;10471:34;;;10485:18;;:::i;:::-;-1:-1:-1;10522:9:1;;10412:125::o;10542:127::-;10603:10;10598:3;10594:20;10591:1;10584:31;10634:4;10631:1;10624:15;10658:4;10655:1;10648:15;10674:135;10713:3;-1:-1:-1;;10734:17:1;;10731:43;;;10754:18;;:::i;:::-;-1:-1:-1;10801:1:1;10790:13;;10674:135::o;16908:128::-;16948:3;16979:1;16975:6;16972:1;16969:13;16966:39;;;16985:18;;:::i;:::-;-1:-1:-1;17021:9:1;;16908:128::o;17041:402::-;17243:2;17225:21;;;17282:2;17262:18;;;17255:30;17321:34;17316:2;17301:18;;17294:62;-1:-1:-1;;;17387:2:1;17372:18;;17365:36;17433:3;17418:19;;17041:402::o;23852:217::-;23892:1;23918;23908:132;;23962:10;23957:3;23953:20;23950:1;23943:31;23997:4;23994:1;23987:15;24025:4;24022:1;24015:15;23908:132;-1:-1:-1;24054:9:1;;23852:217::o;24832:127::-;24893:10;24888:3;24884:20;24881:1;24874:31;24924:4;24921:1;24914:15;24948:4;24945:1;24938:15;25243:245;25310:6;25363:2;25351:9;25342:7;25338:23;25334:32;25331:52;;;25379:1;25376;25369:12;25331:52;25411:9;25405:16;25430:28;25452:5;25430:28;:::i;25493:461::-;25546:3;25584:5;25578:12;25611:6;25606:3;25599:19;25637:4;25666:2;25661:3;25657:12;25650:19;;25703:2;25696:5;25692:14;25724:1;25734:195;25748:6;25745:1;25742:13;25734:195;;;25813:13;;-1:-1:-1;;;;;25809:39:1;25797:52;;25869:12;;;;25904:15;;;;25845:1;25763:9;25734:195;;;-1:-1:-1;25945:3:1;;25493:461;-1:-1:-1;;;;;25493:461:1:o;25959:582::-;26258:6;26247:9;26240:25;26301:6;26296:2;26285:9;26281:18;26274:34;26344:3;26339:2;26328:9;26324:18;26317:31;26221:4;26365:57;26417:3;26406:9;26402:19;26394:6;26365:57;:::i;:::-;-1:-1:-1;;;;;26458:32:1;;;;26453:2;26438:18;;26431:60;-1:-1:-1;26522:3:1;26507:19;26500:35;26357:65;25959:582;-1:-1:-1;;;25959:582:1:o;26546:332::-;26753:6;26742:9;26735:25;26796:2;26791;26780:9;26776:18;26769:30;26716:4;26816:56;26868:2;26857:9;26853:18;26845:6;26816:56;:::i;26883:510::-;27154:6;27143:9;27136:25;27197:3;27192:2;27181:9;27177:18;27170:31;27117:4;27218:57;27270:3;27259:9;27255:19;27247:6;27218:57;:::i;:::-;-1:-1:-1;;;;;27311:32:1;;;;27306:2;27291:18;;27284:60;-1:-1:-1;27375:2:1;27360:18;27353:34;27210:65;26883:510;-1:-1:-1;;26883:510:1:o;28216:1105::-;28311:6;28342:2;28385;28373:9;28364:7;28360:23;28356:32;28353:52;;;28401:1;28398;28391:12;28353:52;28434:9;28428:16;28463:18;28504:2;28496:6;28493:14;28490:34;;;28520:1;28517;28510:12;28490:34;28558:6;28547:9;28543:22;28533:32;;28603:7;28596:4;28592:2;28588:13;28584:27;28574:55;;28625:1;28622;28615:12;28574:55;28654:2;28648:9;28676:2;28672;28669:10;28666:36;;;28682:18;;:::i;:::-;28728:2;28725:1;28721:10;28760:2;28754:9;28823:2;28819:7;28814:2;28810;28806:11;28802:25;28794:6;28790:38;28878:6;28866:10;28863:22;28858:2;28846:10;28843:18;28840:46;28837:72;;;28889:18;;:::i;:::-;28925:2;28918:22;28975:18;;;29009:15;;;;-1:-1:-1;29051:11:1;;;29047:20;;;29079:19;;;29076:39;;;29111:1;29108;29101:12;29076:39;29135:11;;;;29155:135;29171:6;29166:3;29163:15;29155:135;;;29237:10;;29225:23;;29188:12;;;;29268;;;;29155:135;;;29309:6;28216:1105;-1:-1:-1;;;;;;;;28216:1105:1:o;30665:204::-;30703:3;30739:4;30736:1;30732:12;30771:4;30768:1;30764:12;30806:3;30800:4;30796:14;30791:3;30788:23;30785:49;;;30814:18;;:::i;:::-;30850:13;;30665:204;-1:-1:-1;;;30665:204:1:o;32998:274::-;33127:3;33165:6;33159:13;33181:53;33227:6;33222:3;33215:4;33207:6;33203:17;33181:53;:::i;:::-;33250:16;;;;;32998:274;-1:-1:-1;;32998:274:1:o

Swarm Source

ipfs://fd65f2acbdf0d1060de78c3c064c035b11854e266bff40e381a04b9a77c0c367
Loading