ETH Price: $3,391.57 (+1.70%)

Token

LUNARBURN (LUNAR)
 

Overview

Max Total Supply

962,924,299.188142547 LUNAR

Holders

217

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
254.459017027 LUNAR

Value
$0.00
0xa685c9f4d20841dcb94b94e886176c6118613ff3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LUNARBURN

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-26
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal 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);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        return success;
    }

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract LUNARBURN is Context, IERC20, Ownable {
    using Address for address;
    using Address for address payable;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    string private _name     = "LUNARBURN";
    string private _symbol   = "LUNAR";
    uint8  private _decimals = 9;
   
    uint256 private constant MAX = type(uint256).max;
    uint256 private _tTotal = 1e9 * (10 ** _decimals);
    uint256 private _tTotalSupply = 1e9 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public taxFeeonBuy;
    uint256 public taxFeeonSell;

    uint256 public liquidityFeeonBuy;
    uint256 public liquidityFeeonSell;

    uint256 public marketingFeeonBuy;
    uint256 public marketingFeeonSell;

    uint256 public burnFeeOnBuy;
    uint256 public burnFeeOnSell;

    uint256 private _taxFee;
    uint256 private _liquidityFee;
    uint256 private _marketingFee;

    uint256 private totalBuyFees;
    uint256 private totalSellFees;

    address public marketingWallet;

    bool public walletToWalletTransferWithoutFee;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapEnabled;
    bool public tradingEnabled;
    uint256 public swapTokensAtAmount;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event SwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 amount);
    event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event WalletToWalletTransferWithoutFeeEnabled(bool enabled);
    
    constructor() 
    {        
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; 
        } else if (block.chainid == 97) {
            router =  0xD99D1c33F9fC3444f8101754aBC46c52416550D1; 
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _approve(address(this), address(uniswapV2Router), MAX);

        taxFeeonBuy = 10;
        taxFeeonSell = 10;

        liquidityFeeonBuy = 70;
        liquidityFeeonSell = 60;

        marketingFeeonBuy = 60;
        marketingFeeonSell = 70;

        burnFeeOnBuy = 10;
        burnFeeOnSell = 10;

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy;
        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell;

        marketingWallet = 0x4b9CAcda4D8DA50a69114543BCC834D19799F211;
        
        swapEnabled = true;
        swapTokensAtAmount = _tTotal / 5000;

        maxTransactionLimitEnabled  = true;

        maxTransactionAmountBuy     = _tTotal * 20 / 1000;
        maxTransactionAmountSell    = _tTotal * 20 / 1000;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;
    
        walletToWalletTransferWithoutFee = true;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcluded[address(this)] = true;
        _isExcluded[address(uniswapV2Pair)] = true;

        _rOwned[owner()] = _rTotal;
        _tOwned[owner()] = _tTotal;

        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _tTotalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalReflectionDistributed() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount - tFee - tLiquidity - tMarketing;
        return (tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rLiquidity - rMarketing;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 liquidityAmount = tLiquidity * (liquidityFeeonBuy + liquidityFeeonSell) / (liquidityFeeonBuy + liquidityFeeonSell + burnFeeOnBuy + burnFeeOnSell);
        uint256 burnAmount = tLiquidity - liquidityAmount;

        if(liquidityAmount > 0){
            uint256 currentRate =  _getRate();
            uint256 rLiquidity = liquidityAmount * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + liquidityAmount;
        }

        if(burnAmount > 0){
            uint256 currentRate =  _getRate();
            uint256 rBurn = burnAmount * currentRate;
            _rOwned[address(0xdead)] = _rOwned[address(0xdead)] + rBurn;
            if(_isExcluded[address(0xdead)])
                _tOwned[address(0xdead)] = _tOwned[address(0xdead)] + burnAmount;

            _tTotalSupply -= burnAmount;
        }
    }

    function _takeMarketing(uint256 tMarketing) private {
        if (tMarketing > 0) {
            uint256 currentRate =  _getRate();
            uint256 rMarketing = tMarketing * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
        }
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 1000;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount * _liquidityFee / 1000;
    }
    
    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount * _marketingFee / 1000;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function setBuyFee() private{
        if(_taxFee == taxFeeonBuy && _liquidityFee == (liquidityFeeonBuy + burnFeeOnBuy) && _marketingFee == marketingFeeonBuy ) return;

        _taxFee = taxFeeonBuy;
        _marketingFee = marketingFeeonBuy;
        _liquidityFee = liquidityFeeonBuy + burnFeeOnBuy;
    }

    function setSellFee() private{
        if(_taxFee == taxFeeonSell && _liquidityFee == (liquidityFeeonSell + burnFeeOnSell) && _marketingFee == marketingFeeonSell ) return;

        _taxFee = taxFeeonSell;
        _marketingFee = marketingFeeonSell;
        _liquidityFee = liquidityFeeonSell + burnFeeOnSell;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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 enableTrading() external onlyOwner{
        require(tradingEnabled == false, "Trading is already enabled");
        tradingEnabled = true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(tradingEnabled, "Trading is not enabled yet");
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapEnabled
        ) {
            inSwapAndLiquify = true;
            
            uint256 marketingShare = marketingFeeonBuy + marketingFeeonSell;
            uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell;

            uint256 totalShare = marketingShare + liquidityShare;

            if(totalShare > 0) {
                if(liquidityShare > 0) {
                    uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare;
                    swapAndLiquify(liquidityTokens);
                }
                
                if(marketingShare > 0) {
                    uint256 marketingTokens = (contractTokenBalance * marketingShare) / totalShare;
                    swapAndSendMarketing(marketingTokens);
                } 
            }

            inSwapAndLiquify = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);

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

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() {
        require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount);
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
         if (_isExcludedFromFees[sender] || 
            _isExcludedFromFees[recipient] 
            ) {
            removeAllFee();
        }else if(recipient == uniswapV2Pair){
            setSellFee();
        }else if(sender == uniswapV2Pair){
            setBuyFee();
        }else if(walletToWalletTransferWithoutFee){
            removeAllFee();
        }else{
            setSellFee();
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; 
        _takeMarketing(tMarketing);  
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
        require(_marketingWallet!=address(0), "Marketing wallet is the zero address");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

    function setBuyFeePercentages(uint256 _taxFeeonBuy, uint256 _liquidityFeeonBuy, uint256 _marketingFeeonBuy, uint256 _burnFeeOnBuy) external onlyOwner {
        taxFeeonBuy = _taxFeeonBuy;
        liquidityFeeonBuy = _liquidityFeeonBuy;
        marketingFeeonBuy = _marketingFeeonBuy;
        burnFeeOnBuy = _burnFeeOnBuy;

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy + burnFeeOnBuy;

        require(totalBuyFees <= 150, "Buy fees cannot be greater than 15%");

        emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, marketingFeeonBuy);
    }

    function setSellFeePercentages(uint256 _taxFeeonSell, uint256 _liquidityFeeonSell, uint256 _marketingFeeonSell, uint256 _burnFeeOnSell) external onlyOwner {
        taxFeeonSell = _taxFeeonSell;
        liquidityFeeonSell = _liquidityFeeonSell;
        marketingFeeonSell = _marketingFeeonSell;
        burnFeeOnSell = _burnFeeOnSell;

        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell + burnFeeOnSell;

        require(totalSellFees <= 150, "Sell fees cannot be greater than 15%");

        emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, marketingFeeonSell);
    }

    function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner {
        require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value");
        walletToWalletTransferWithoutFee = enable;
        emit WalletToWalletTransferWithoutFeeEnabled(enable);
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= totalSupply() / (10 ** decimals()) / 1000 && 
            _maxTransactionAmountSell >= totalSupply() / (10 ** decimals()) / 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());
        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","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":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009608090815268262aa720a9212aa92760b91b60a0526007906200002a90826200088c565b50604080518082019091526005815264262aa720a960d91b60208201526008906200005690826200088c565b506009805460ff1916811781556200007090600a62000a6d565b6200008090633b9aca0062000a85565b600a908155600954620000999160ff9091169062000a6d565b620000a990633b9aca0062000a85565b600b55600a54620000bd9060001962000ab5565b620000cb9060001962000acc565b600c55601c80546001600160a01b03191661dead179055348015620000ef57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000466038036200015857507310ed43c718714eb63d5aa57b78b54704e256024e620001b4565b466061036200017d575073d99d1c33f9fc3444f8101754abc46c52416550d1620001b4565b46600114806200018d5750466005145b15620001af5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001b4565b600080fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e919062000ae2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000292919062000ae2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000ae2565b601e80546001600160a01b039283166001600160a01b031991821617909155601d8054928416929091168217905562000344903090600019620006ac565b600a600e819055600f81905560466010819055603c60118190556012819055601382905560148390556015839055906200037f908362000b0d565b6200038b919062000b0d565b62000397919062000b0d565b601955601554601354601154600f54620003b2919062000b0d565b620003be919062000b0d565b620003ca919062000b0d565b601a55601b80546001600160a01b031916734b9cacda4d8da50a69114543bcc834d19799f211179055601e805460ff60a81b1916600160a81b179055600a5462000418906113889062000b23565b601f556021805460ff19166001179055600a546103e8906200043c90601462000a85565b62000448919062000b23565b602255600a546103e8906200045f90601462000a85565b6200046b919062000b23565b602355600160206000620004876000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790559280527f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe98054851660019081179091553084528284208054861682179055601b8054831685528385208054871683179055601c54909216845291832080549094168217909355825460ff60a01b1916600160a01b17909255600490620005436000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600484527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805486166001908117909155308252838220805487168217905560059094528281208054861685179055601e54909116815290812080549093168217909255600c5491620005ec6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a546002600062000627620007d860201b60201c565b6001600160a01b03168152602081019190915260400160002055620006546000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200069c91815260200190565b60405180910390a3505062000b3a565b6001600160a01b038316620007145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200070b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200081257607f821691505b6020821081036200083357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200088757600081815260208120601f850160051c81016020861015620008625750805b601f850160051c820191505b8181101562000883578281556001016200086e565b5050505b505050565b81516001600160401b03811115620008a857620008a8620007e7565b620008c081620008b98454620007fd565b8462000839565b602080601f831160018114620008f85760008415620008df5750858301515b600019600386901b1c1916600185901b17855562000883565b600085815260208120601f198616915b82811015620009295788860151825594840194600190910190840162000908565b5085821015620009485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009af57816000190482111562000993576200099362000958565b80851615620009a157918102915b93841c939080029062000973565b509250929050565b600082620009c85750600162000a67565b81620009d75750600062000a67565b8160018114620009f05760028114620009fb5762000a1b565b600191505062000a67565b60ff84111562000a0f5762000a0f62000958565b50506001821b62000a67565b5060208310610133831016604e8410600b841016171562000a40575081810a62000a67565b62000a4c83836200096e565b806000190482111562000a635762000a6362000958565b0290505b92915050565b600062000a7e60ff841683620009b7565b9392505050565b808202811582820484141762000a675762000a6762000958565b634e487b7160e01b600052601260045260246000fd5b60008262000ac75762000ac762000a9f565b500690565b8181038181111562000a675762000a6762000958565b60006020828403121562000af557600080fd5b81516001600160a01b038116811462000a7e57600080fd5b8082018082111562000a675762000a6762000958565b60008262000b355762000b3562000a9f565b500490565b6139118062000b4a6000396000f3fe60806040526004361061031e5760003560e01c80635f35bc5c116101ab578063a9059cbb116100f7578063dd62ed3e11610095578063e3b467911161006f578063e3b4679114610951578063e982f35114610971578063f2fde38b14610991578063f9d0831a146109b157600080fd5b8063dd62ed3e146108d5578063e01af92c1461091b578063e2f456051461093b57600080fd5b8063b577554a116100d1578063b577554a14610860578063b6f7f68114610875578063bb85c6d114610895578063c0246668146108b557600080fd5b8063a9059cbb1461080a578063a938d1c91461082a578063afa4f3b21461084057600080fd5b806388f820201161016457806393a7781f1161013e57806393a7781f146107a957806395d89b41146107bf578063989a124f146107d4578063a457c2d7146107ea57600080fd5b806388f820201461073d5780638a8c523c146107765780638da5cb5b1461078b57600080fd5b80635f35bc5c1461069b57806365a8ee4f146106b15780636ddd1713146106c757806370a08231146106e8578063715018a61461070857806375f0a8741461071d57600080fd5b80633685d4191161026a5780634b93d059116102235780635654d0b3116101fd5780635654d0b31461062f57806356a6cabf1461064f57806359136fa51461066f5780635a04e0351461068557600080fd5b80634b93d059146105c057806352390c02146105d65780635342acb4146105f657600080fd5b80633685d419146104ff578063395093511461051f5780633bd5d1731461053f5780634549b0391461055f57806349bd5a5e1461057f5780634ada218b1461059f57600080fd5b80631694505e116102d757806323b872dd116102b157806323b872dd146104835780632ba86bf2146104a35780632d838119146104bd578063313ce567146104dd57600080fd5b80631694505e146103fe57806318160ddd1461043657806318d9ceae1461044b57600080fd5b80630105d0fd1461032a57806306fdde0314610353578063095ea7b314610375578063142725fc146103a5578063150c880c146103bb5780631529fbbf146103dd57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034060225481565b6040519081526020015b60405180910390f35b34801561035f57600080fd5b506103686109d1565b60405161034a919061335f565b34801561038157600080fd5b506103956103903660046133c2565b610a63565b604051901515815260200161034a565b3480156103b157600080fd5b5061034060115481565b3480156103c757600080fd5b506103db6103d63660046133fc565b610a7a565b005b3480156103e957600080fd5b50601b5461039590600160a01b900460ff1681565b34801561040a57600080fd5b50601d5461041e906001600160a01b031681565b6040516001600160a01b03909116815260200161034a565b34801561044257600080fd5b50600b54610340565b34801561045757600080fd5b50610395610466366004613435565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561048f57600080fd5b5061039561049e366004613452565b610b86565b3480156104af57600080fd5b506021546103959060ff1681565b3480156104c957600080fd5b506103406104d8366004613493565b610bd8565b3480156104e957600080fd5b5060095460405160ff909116815260200161034a565b34801561050b57600080fd5b506103db61051a366004613435565b610c5c565b34801561052b57600080fd5b5061039561053a3660046133c2565b610e12565b34801561054b57600080fd5b506103db61055a366004613493565b610e49565b34801561056b57600080fd5b5061034061057a3660046134ac565b610f37565b34801561058b57600080fd5b50601e5461041e906001600160a01b031681565b3480156105ab57600080fd5b50601e5461039590600160b01b900460ff1681565b3480156105cc57600080fd5b5061034060105481565b3480156105e257600080fd5b506103db6105f1366004613435565b610fc6565b34801561060257600080fd5b50610395610611366004613435565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063b57600080fd5b506103db61064a3660046134d1565b611119565b34801561065b57600080fd5b506103db61066a3660046134d1565b61122e565b34801561067b57600080fd5b5061034060235481565b34801561069157600080fd5b5061034060125481565b3480156106a757600080fd5b50610340600f5481565b3480156106bd57600080fd5b5061034060135481565b3480156106d357600080fd5b50601e5461039590600160a81b900460ff1681565b3480156106f457600080fd5b50610340610703366004613435565b611312565b34801561071457600080fd5b506103db611371565b34801561072957600080fd5b50601b5461041e906001600160a01b031681565b34801561074957600080fd5b50610395610758366004613435565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561078257600080fd5b506103db6113e5565b34801561079757600080fd5b506000546001600160a01b031661041e565b3480156107b557600080fd5b50610340600e5481565b3480156107cb57600080fd5b5061036861147e565b3480156107e057600080fd5b5061034060155481565b3480156107f657600080fd5b506103956108053660046133c2565b61148d565b34801561081657600080fd5b506103956108253660046133c2565b6114c4565b34801561083657600080fd5b5061034060145481565b34801561084c57600080fd5b506103db61085b366004613493565b6114d1565b34801561086c57600080fd5b50600d54610340565b34801561088157600080fd5b506103db6108903660046134ee565b6115bb565b3480156108a157600080fd5b506103db6108b0366004613435565b61174a565b3480156108c157600080fd5b506103db6108d03660046133fc565b611893565b3480156108e157600080fd5b506103406108f0366004613510565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561092757600080fd5b506103db6109363660046134d1565b611998565b34801561094757600080fd5b50610340601f5481565b34801561095d57600080fd5b506103db61096c36600461353e565b611a0f565b34801561097d57600080fd5b506103db61098c36600461353e565b611b1e565b34801561099d57600080fd5b506103db6109ac366004613435565b611c23565b3480156109bd57600080fd5b506103db6109cc366004613435565b611d0d565b6060600780546109e090613570565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90613570565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b6000610a70338484611e8f565b5060015b92915050565b6000546001600160a01b03163314610aad5760405162461bcd60e51b8152600401610aa4906135aa565b60405180910390fd5b6001600160a01b038216600090815260208052604090205481151560ff909116151503610b285760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610aa4565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610b93848484611fb3565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610bce918691610bc99086906135f5565b611e8f565b5060019392505050565b6000600c54821115610c3f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aa4565b6000610c4961231e565b9050610c558184613608565b9392505050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03811660009081526005602052604090205460ff16610cee5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610aa4565b60005b600654811015610e0e57816001600160a01b031660068281548110610d1857610d1861362a565b6000918252602090912001546001600160a01b031603610dfc5760068054610d42906001906135f5565b81548110610d5257610d5261362a565b600091825260209091200154600680546001600160a01b039092169183908110610d7e57610d7e61362a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dd657610dd6613640565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e0681613656565b915050610cf1565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a70918590610bc990869061366f565b3360008181526005602052604090205460ff1615610ebe5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610aa4565b6000610ec983612341565b505050506001600160a01b038516600090815260016020526040902054929350610ef79284925090506135f5565b6001600160a01b038316600090815260016020526040902055600c54610f1e9082906135f5565b600c55600d54610f2f90849061366f565b600d55505050565b6000600a54831115610f8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aa4565b81610fab576000610f9b84612341565b50949650610a7495505050505050565b6000610fb684612341565b50939650610a7495505050505050565b6000546001600160a01b03163314610ff05760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03811660009081526005602052604090205460ff16156110595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610aa4565b6001600160a01b038116600090815260016020526040902054156110b3576001600160a01b03811660009081526001602052604090205461109990610bd8565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146111435760405162461bcd60e51b8152600401610aa4906135aa565b801515601b60149054906101000a900460ff161515036111d65760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610aa4565b601b8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e79061122390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112585760405162461bcd60e51b8152600401610aa4906135aa565b60215460ff161515811515036112cb5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610aa4565b6021805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001611223565b6001600160a01b03811660009081526005602052604081205460ff161561134f57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a7490610bd8565b6000546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610aa4906135aa565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461140f5760405162461bcd60e51b8152600401610aa4906135aa565b601e54600160b01b900460ff16156114695760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610aa4565b601e805460ff60b01b1916600160b01b179055565b6060600880546109e090613570565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a70918590610bc99086906135f5565b6000610a70338484611fb3565b6000546001600160a01b031633146114fb5760405162461bcd60e51b8152600401610aa4906135aa565b620186a0611508600b5490565b6115129190613608565b81116115865760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610aa4565b601f8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001611223565b6000546001600160a01b031633146115e55760405162461bcd60e51b8152600401610aa4906135aa565b6103e86115f460095460ff1690565b6115ff90600a613766565b600b5461160c9190613608565b6116169190613608565b821015801561165557506103e861162f60095460ff1690565b61163a90600a613766565b600b546116479190613608565b6116519190613608565b8110155b6116c75760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610aa4565b60095460ff166116d890600a613766565b6116e29083613775565b60225560095460ff166116f690600a613766565b6117009082613775565b60238190556022546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb1319261173e928252602082015260400190565b60405180910390a15050565b6000546001600160a01b031633146117745760405162461bcd60e51b8152600401610aa4906135aa565b601b546001600160a01b03908116908216036117e35760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610aa4565b6001600160a01b0381166118455760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610aa4565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001611223565b6000546001600160a01b031633146118bd5760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036119405760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610aa4565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610b7a565b6000546001600160a01b031633146119c25760405162461bcd60e51b8152600401610aa4906135aa565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129061122390831515815260200190565b6000546001600160a01b03163314611a395760405162461bcd60e51b8152600401610aa4906135aa565b600e8490556010839055601282905560148190558082611a59858761366f565b611a63919061366f565b611a6d919061366f565b601981905560961015611ace5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231352560e81b6064820152608401610aa4565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611b485760405162461bcd60e51b8152600401610aa4906135aa565b600f8490556011839055601382905560158190558082611b68858761366f565b611b72919061366f565b611b7c919061366f565b601a81905560961015611bdd5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031352560e01b6064820152608401610aa4565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611b10565b6000546001600160a01b03163314611c4d5760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b038116611cb25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d375760405162461bcd60e51b8152600401610aa4906135aa565b306001600160a01b03821603611d8f5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610aa4565b6001600160a01b038116611da757610e0e334761239c565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e14919061378c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8891906137a5565b5050505b50565b6001600160a01b038316611ef15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa4565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa4565b600081116120795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa4565b6001600160a01b03831660009081526004602052604090205460ff161580156120bb57506001600160a01b03821660009081526004602052604090205460ff16155b1561211957601e54600160b01b900460ff166121195760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aa4565b60215460ff16156121f957601e546001600160a01b038481169116148061214d5750601e546001600160a01b038381169116145b801561217157506001600160a01b038316600090815260208052604090205460ff16155b801561219557506001600160a01b038216600090815260208052604090205460ff16155b156121f957601e546001600160a01b03908116908416036121d7576022548111156121d25760405162461bcd60e51b8152600401610aa4906137c2565b6121f9565b6023548111156121f95760405162461bcd60e51b8152600401610aa4906137c2565b600061220430611312565b601f54909150811080159081906122255750601e54600160a01b900460ff16155b801561223e5750601e546001600160a01b038581169116145b80156122535750601e54600160a81b900460ff165b1561230c57601e805460ff60a01b1916600160a01b17905560135460125460009161227d9161366f565b90506000601154601054612291919061366f565b9050600061229f828461366f565b905080156122fb5781156122d1576000816122ba8488613775565b6122c49190613608565b90506122cf8161244b565b505b82156122fb576000816122e48588613775565b6122ee9190613608565b90506122f981612699565b505b5050601e805460ff60a01b19169055505b612317858585612838565b5050505050565b600080600061232b612a3b565b909250905061233a8183613608565b9250505090565b600080600080600080600080600080600061235b8c612bbe565b9350935093509350600080600061237c8f87878761237761231e565b612c1d565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156123ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610aa4565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461243b576040519150601f19603f3d011682016040523d82523d6000602084013e612440565b606091505b509095945050505050565b6000612458600283613608565b9050600061246682846135f5565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106124a0576124a061362a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d919061381f565b816001815181106125305761253061362a565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac9479061257690879060009086903090429060040161383c565b600060405180830381600087803b15801561259057600080fd5b505af11580156125a4573d6000803e3d6000fd5b50505050600082476125b691906135f5565b601d54601c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612628573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061264d91906138ad565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b6040805160028082526060820183524792600092919060208301908036833701905050905030816000815181106126d2576126d261362a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561272b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274f919061381f565b816001815181106127625761276261362a565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac947906127a890869060009086903090429060040161383c565b600060405180830381600087803b1580156127c257600080fd5b505af11580156127d6573d6000803e3d6000fd5b50505050600082476127e891906135f5565b601b54909150612801906001600160a01b03168261239c565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611b10565b6001600160a01b03831660009081526004602052604090205460ff168061287757506001600160a01b03821660009081526004602052604090205460ff165b1561288957612884612c8f565b6128e7565b601e546001600160a01b03908116908316036128a757612884612cc3565b601e546001600160a01b03908116908416036128c557612884612d1d565b601b54600160a01b900460ff16156128df57612884612c8f565b6128e7612cc3565b6001600160a01b03831660009081526005602052604090205460ff16801561292857506001600160a01b03821660009081526005602052604090205460ff16155b1561293d57612938838383612d72565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561297e57506001600160a01b03821660009081526005602052604090205460ff165b1561298e57612938838383612eb3565b6001600160a01b03831660009081526005602052604090205460ff161580156129d057506001600160a01b03821660009081526005602052604090205460ff16155b156129e057612938838383612f6d565b6001600160a01b03831660009081526005602052604090205460ff168015612a2057506001600160a01b03821660009081526005602052604090205460ff165b15612a3057612938838383612fc0565b612938838383612f6d565b600c54600a546000918291825b600654811015612b8d57826001600060068481548110612a6a57612a6a61362a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ad55750816002600060068481548110612aae57612aae61362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612aeb57600c54600a54945094505050509091565b6001600060068381548110612b0257612b0261362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b3190846135f5565b92506002600060068381548110612b4a57612b4a61362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b7990836135f5565b915080612b8581613656565b915050612a48565b50600a54600c54612b9e9190613608565b821015612bb557600c54600a549350935050509091565b90939092509050565b6000806000806000612bcf86613043565b90506000612bdc87613060565b90506000612be988613073565b905060008183612bf9868c6135f5565b612c0391906135f5565b612c0d91906135f5565b9993985091965094509092505050565b6000808080612c2c858a613775565b90506000612c3a868a613775565b90506000612c48878a613775565b90506000612c56888a613775565b905060008183612c6686886135f5565b612c7091906135f5565b612c7a91906135f5565b949d949c50929a509298505050505050505050565b601654158015612c9f5750601754155b8015612cab5750601854155b15612cb257565b600060168190556018819055601755565b600f54601654148015612ce65750601554601154612ce1919061366f565b601754145b8015612cf55750601354601854145b15612cfc57565b600f54601655601354601855601554601154612d18919061366f565b601755565b600e54601654148015612d405750601454601054612d3b919061366f565b601754145b8015612d4f5750601254601854145b15612d5657565b600e54601655601254601855601454601054612d18919061366f565b6000806000806000806000612d8688612341565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612dc591906135f5565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612df59088906135f5565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612e2590879061366f565b6001600160a01b038a16600090815260016020526040902055612e4781613086565b612e5082613116565b612e5a8584613339565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e9f91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612ec788612341565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612f0691906135f5565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612f3d90859061366f565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612e2590879061366f565b6000806000806000806000612f8188612341565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612df591906135f5565b6000806000806000806000612fd488612341565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461301391906135f5565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612f069088906135f5565b60006103e8601654836130569190613775565b610a749190613608565b60006103e8601754836130569190613775565b60006103e8601854836130569190613775565b8015611e8c57600061309661231e565b905060006130a48284613775565b306000908152600160205260409020549091506130c290829061366f565b3060009081526001602090815260408083209390935560059052205460ff1615612938573060009081526002602052604090205461310190849061366f565b30600090815260026020526040902055505050565b600060155460145460115460105461312e919061366f565b613138919061366f565b613142919061366f565b601154601054613152919061366f565b61315c9084613775565b6131669190613608565b9050600061317482846135f5565b9050811561320557600061318661231e565b905060006131948285613775565b306000908152600160205260409020549091506131b290829061366f565b3060009081526001602090815260408083209390935560059052205460ff161561320257306000908152600260205260409020546131f190859061366f565b306000908152600260205260409020555b50505b801561293857600061321561231e565b905060006132238284613775565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5490915061325e90829061366f565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561331b5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546132ed90849061366f565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b600082825461332d91906135f5565b90915550505050505050565b81600c5461334791906135f5565b600c55600d5461335890829061366f565b600d555050565b600060208083528351808285015260005b8181101561338c57858101830151858201604001528201613370565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e8c57600080fd5b600080604083850312156133d557600080fd5b82356133e0816133ad565b946020939093013593505050565b8015158114611e8c57600080fd5b6000806040838503121561340f57600080fd5b823561341a816133ad565b9150602083013561342a816133ee565b809150509250929050565b60006020828403121561344757600080fd5b8135610c55816133ad565b60008060006060848603121561346757600080fd5b8335613472816133ad565b92506020840135613482816133ad565b929592945050506040919091013590565b6000602082840312156134a557600080fd5b5035919050565b600080604083850312156134bf57600080fd5b82359150602083013561342a816133ee565b6000602082840312156134e357600080fd5b8135610c55816133ee565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806040838503121561352357600080fd5b823561352e816133ad565b9150602083013561342a816133ad565b6000806000806080858703121561355457600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061358457607f821691505b6020821081036135a457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a7457610a746135df565b60008261362557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613668576136686135df565b5060010190565b80820180821115610a7457610a746135df565b600181815b808511156136bd5781600019048211156136a3576136a36135df565b808516156136b057918102915b93841c9390800290613687565b509250929050565b6000826136d457506001610a74565b816136e157506000610a74565b81600181146136f757600281146137015761371d565b6001915050610a74565b60ff841115613712576137126135df565b50506001821b610a74565b5060208310610133831016604e8410600b8410161715613740575081810a610a74565b61374a8383613682565b806000190482111561375e5761375e6135df565b029392505050565b6000610c5560ff8416836136c5565b8082028115828204841417610a7457610a746135df565b60006020828403121561379e57600080fd5b5051919050565b6000602082840312156137b757600080fd5b8151610c55816133ee565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b60006020828403121561383157600080fd5b8151610c55816133ad565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561388c5784516001600160a01b031683529383019391830191600101613867565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138c257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204fda38bc5e704d767e3bf05da9a3a420a5eb49eae283225ea75c401dc54ca58364736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80635f35bc5c116101ab578063a9059cbb116100f7578063dd62ed3e11610095578063e3b467911161006f578063e3b4679114610951578063e982f35114610971578063f2fde38b14610991578063f9d0831a146109b157600080fd5b8063dd62ed3e146108d5578063e01af92c1461091b578063e2f456051461093b57600080fd5b8063b577554a116100d1578063b577554a14610860578063b6f7f68114610875578063bb85c6d114610895578063c0246668146108b557600080fd5b8063a9059cbb1461080a578063a938d1c91461082a578063afa4f3b21461084057600080fd5b806388f820201161016457806393a7781f1161013e57806393a7781f146107a957806395d89b41146107bf578063989a124f146107d4578063a457c2d7146107ea57600080fd5b806388f820201461073d5780638a8c523c146107765780638da5cb5b1461078b57600080fd5b80635f35bc5c1461069b57806365a8ee4f146106b15780636ddd1713146106c757806370a08231146106e8578063715018a61461070857806375f0a8741461071d57600080fd5b80633685d4191161026a5780634b93d059116102235780635654d0b3116101fd5780635654d0b31461062f57806356a6cabf1461064f57806359136fa51461066f5780635a04e0351461068557600080fd5b80634b93d059146105c057806352390c02146105d65780635342acb4146105f657600080fd5b80633685d419146104ff578063395093511461051f5780633bd5d1731461053f5780634549b0391461055f57806349bd5a5e1461057f5780634ada218b1461059f57600080fd5b80631694505e116102d757806323b872dd116102b157806323b872dd146104835780632ba86bf2146104a35780632d838119146104bd578063313ce567146104dd57600080fd5b80631694505e146103fe57806318160ddd1461043657806318d9ceae1461044b57600080fd5b80630105d0fd1461032a57806306fdde0314610353578063095ea7b314610375578063142725fc146103a5578063150c880c146103bb5780631529fbbf146103dd57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034060225481565b6040519081526020015b60405180910390f35b34801561035f57600080fd5b506103686109d1565b60405161034a919061335f565b34801561038157600080fd5b506103956103903660046133c2565b610a63565b604051901515815260200161034a565b3480156103b157600080fd5b5061034060115481565b3480156103c757600080fd5b506103db6103d63660046133fc565b610a7a565b005b3480156103e957600080fd5b50601b5461039590600160a01b900460ff1681565b34801561040a57600080fd5b50601d5461041e906001600160a01b031681565b6040516001600160a01b03909116815260200161034a565b34801561044257600080fd5b50600b54610340565b34801561045757600080fd5b50610395610466366004613435565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561048f57600080fd5b5061039561049e366004613452565b610b86565b3480156104af57600080fd5b506021546103959060ff1681565b3480156104c957600080fd5b506103406104d8366004613493565b610bd8565b3480156104e957600080fd5b5060095460405160ff909116815260200161034a565b34801561050b57600080fd5b506103db61051a366004613435565b610c5c565b34801561052b57600080fd5b5061039561053a3660046133c2565b610e12565b34801561054b57600080fd5b506103db61055a366004613493565b610e49565b34801561056b57600080fd5b5061034061057a3660046134ac565b610f37565b34801561058b57600080fd5b50601e5461041e906001600160a01b031681565b3480156105ab57600080fd5b50601e5461039590600160b01b900460ff1681565b3480156105cc57600080fd5b5061034060105481565b3480156105e257600080fd5b506103db6105f1366004613435565b610fc6565b34801561060257600080fd5b50610395610611366004613435565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063b57600080fd5b506103db61064a3660046134d1565b611119565b34801561065b57600080fd5b506103db61066a3660046134d1565b61122e565b34801561067b57600080fd5b5061034060235481565b34801561069157600080fd5b5061034060125481565b3480156106a757600080fd5b50610340600f5481565b3480156106bd57600080fd5b5061034060135481565b3480156106d357600080fd5b50601e5461039590600160a81b900460ff1681565b3480156106f457600080fd5b50610340610703366004613435565b611312565b34801561071457600080fd5b506103db611371565b34801561072957600080fd5b50601b5461041e906001600160a01b031681565b34801561074957600080fd5b50610395610758366004613435565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561078257600080fd5b506103db6113e5565b34801561079757600080fd5b506000546001600160a01b031661041e565b3480156107b557600080fd5b50610340600e5481565b3480156107cb57600080fd5b5061036861147e565b3480156107e057600080fd5b5061034060155481565b3480156107f657600080fd5b506103956108053660046133c2565b61148d565b34801561081657600080fd5b506103956108253660046133c2565b6114c4565b34801561083657600080fd5b5061034060145481565b34801561084c57600080fd5b506103db61085b366004613493565b6114d1565b34801561086c57600080fd5b50600d54610340565b34801561088157600080fd5b506103db6108903660046134ee565b6115bb565b3480156108a157600080fd5b506103db6108b0366004613435565b61174a565b3480156108c157600080fd5b506103db6108d03660046133fc565b611893565b3480156108e157600080fd5b506103406108f0366004613510565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561092757600080fd5b506103db6109363660046134d1565b611998565b34801561094757600080fd5b50610340601f5481565b34801561095d57600080fd5b506103db61096c36600461353e565b611a0f565b34801561097d57600080fd5b506103db61098c36600461353e565b611b1e565b34801561099d57600080fd5b506103db6109ac366004613435565b611c23565b3480156109bd57600080fd5b506103db6109cc366004613435565b611d0d565b6060600780546109e090613570565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90613570565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b6000610a70338484611e8f565b5060015b92915050565b6000546001600160a01b03163314610aad5760405162461bcd60e51b8152600401610aa4906135aa565b60405180910390fd5b6001600160a01b038216600090815260208052604090205481151560ff909116151503610b285760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610aa4565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6000610b93848484611fb3565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610bce918691610bc99086906135f5565b611e8f565b5060019392505050565b6000600c54821115610c3f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aa4565b6000610c4961231e565b9050610c558184613608565b9392505050565b6000546001600160a01b03163314610c865760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03811660009081526005602052604090205460ff16610cee5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610aa4565b60005b600654811015610e0e57816001600160a01b031660068281548110610d1857610d1861362a565b6000918252602090912001546001600160a01b031603610dfc5760068054610d42906001906135f5565b81548110610d5257610d5261362a565b600091825260209091200154600680546001600160a01b039092169183908110610d7e57610d7e61362a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dd657610dd6613640565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e0681613656565b915050610cf1565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a70918590610bc990869061366f565b3360008181526005602052604090205460ff1615610ebe5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610aa4565b6000610ec983612341565b505050506001600160a01b038516600090815260016020526040902054929350610ef79284925090506135f5565b6001600160a01b038316600090815260016020526040902055600c54610f1e9082906135f5565b600c55600d54610f2f90849061366f565b600d55505050565b6000600a54831115610f8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aa4565b81610fab576000610f9b84612341565b50949650610a7495505050505050565b6000610fb684612341565b50939650610a7495505050505050565b6000546001600160a01b03163314610ff05760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03811660009081526005602052604090205460ff16156110595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610aa4565b6001600160a01b038116600090815260016020526040902054156110b3576001600160a01b03811660009081526001602052604090205461109990610bd8565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146111435760405162461bcd60e51b8152600401610aa4906135aa565b801515601b60149054906101000a900460ff161515036111d65760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610aa4565b601b8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e79061122390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112585760405162461bcd60e51b8152600401610aa4906135aa565b60215460ff161515811515036112cb5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610aa4565b6021805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001611223565b6001600160a01b03811660009081526005602052604081205460ff161561134f57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a7490610bd8565b6000546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610aa4906135aa565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461140f5760405162461bcd60e51b8152600401610aa4906135aa565b601e54600160b01b900460ff16156114695760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610aa4565b601e805460ff60b01b1916600160b01b179055565b6060600880546109e090613570565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a70918590610bc99086906135f5565b6000610a70338484611fb3565b6000546001600160a01b031633146114fb5760405162461bcd60e51b8152600401610aa4906135aa565b620186a0611508600b5490565b6115129190613608565b81116115865760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610aa4565b601f8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001611223565b6000546001600160a01b031633146115e55760405162461bcd60e51b8152600401610aa4906135aa565b6103e86115f460095460ff1690565b6115ff90600a613766565b600b5461160c9190613608565b6116169190613608565b821015801561165557506103e861162f60095460ff1690565b61163a90600a613766565b600b546116479190613608565b6116519190613608565b8110155b6116c75760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610aa4565b60095460ff166116d890600a613766565b6116e29083613775565b60225560095460ff166116f690600a613766565b6117009082613775565b60238190556022546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb1319261173e928252602082015260400190565b60405180910390a15050565b6000546001600160a01b031633146117745760405162461bcd60e51b8152600401610aa4906135aa565b601b546001600160a01b03908116908216036117e35760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610aa4565b6001600160a01b0381166118455760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610aa4565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001611223565b6000546001600160a01b031633146118bd5760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036119405760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610aa4565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610b7a565b6000546001600160a01b031633146119c25760405162461bcd60e51b8152600401610aa4906135aa565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129061122390831515815260200190565b6000546001600160a01b03163314611a395760405162461bcd60e51b8152600401610aa4906135aa565b600e8490556010839055601282905560148190558082611a59858761366f565b611a63919061366f565b611a6d919061366f565b601981905560961015611ace5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231352560e81b6064820152608401610aa4565b600e54601054601254604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a150505050565b6000546001600160a01b03163314611b485760405162461bcd60e51b8152600401610aa4906135aa565b600f8490556011839055601382905560158190558082611b68858761366f565b611b72919061366f565b611b7c919061366f565b601a81905560961015611bdd5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031352560e01b6064820152608401610aa4565b600f54601154601354604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611b10565b6000546001600160a01b03163314611c4d5760405162461bcd60e51b8152600401610aa4906135aa565b6001600160a01b038116611cb25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d375760405162461bcd60e51b8152600401610aa4906135aa565b306001600160a01b03821603611d8f5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610aa4565b6001600160a01b038116611da757610e0e334761239c565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e14919061378c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8891906137a5565b5050505b50565b6001600160a01b038316611ef15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa4565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa4565b600081116120795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa4565b6001600160a01b03831660009081526004602052604090205460ff161580156120bb57506001600160a01b03821660009081526004602052604090205460ff16155b1561211957601e54600160b01b900460ff166121195760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aa4565b60215460ff16156121f957601e546001600160a01b038481169116148061214d5750601e546001600160a01b038381169116145b801561217157506001600160a01b038316600090815260208052604090205460ff16155b801561219557506001600160a01b038216600090815260208052604090205460ff16155b156121f957601e546001600160a01b03908116908416036121d7576022548111156121d25760405162461bcd60e51b8152600401610aa4906137c2565b6121f9565b6023548111156121f95760405162461bcd60e51b8152600401610aa4906137c2565b600061220430611312565b601f54909150811080159081906122255750601e54600160a01b900460ff16155b801561223e5750601e546001600160a01b038581169116145b80156122535750601e54600160a81b900460ff165b1561230c57601e805460ff60a01b1916600160a01b17905560135460125460009161227d9161366f565b90506000601154601054612291919061366f565b9050600061229f828461366f565b905080156122fb5781156122d1576000816122ba8488613775565b6122c49190613608565b90506122cf8161244b565b505b82156122fb576000816122e48588613775565b6122ee9190613608565b90506122f981612699565b505b5050601e805460ff60a01b19169055505b612317858585612838565b5050505050565b600080600061232b612a3b565b909250905061233a8183613608565b9250505090565b600080600080600080600080600080600061235b8c612bbe565b9350935093509350600080600061237c8f87878761237761231e565b612c1d565b919f509d509b509599509397509195509350505050919395979092949650565b6000814710156123ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610aa4565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461243b576040519150601f19603f3d011682016040523d82523d6000602084013e612440565b606091505b509095945050505050565b6000612458600283613608565b9050600061246682846135f5565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106124a0576124a061362a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d919061381f565b816001815181106125305761253061362a565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac9479061257690879060009086903090429060040161383c565b600060405180830381600087803b15801561259057600080fd5b505af11580156125a4573d6000803e3d6000fd5b50505050600082476125b691906135f5565b601d54601c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015612628573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061264d91906138ad565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b6040805160028082526060820183524792600092919060208301908036833701905050905030816000815181106126d2576126d261362a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561272b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274f919061381f565b816001815181106127625761276261362a565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac947906127a890869060009086903090429060040161383c565b600060405180830381600087803b1580156127c257600080fd5b505af11580156127d6573d6000803e3d6000fd5b50505050600082476127e891906135f5565b601b54909150612801906001600160a01b03168261239c565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629999101611b10565b6001600160a01b03831660009081526004602052604090205460ff168061287757506001600160a01b03821660009081526004602052604090205460ff165b1561288957612884612c8f565b6128e7565b601e546001600160a01b03908116908316036128a757612884612cc3565b601e546001600160a01b03908116908416036128c557612884612d1d565b601b54600160a01b900460ff16156128df57612884612c8f565b6128e7612cc3565b6001600160a01b03831660009081526005602052604090205460ff16801561292857506001600160a01b03821660009081526005602052604090205460ff16155b1561293d57612938838383612d72565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561297e57506001600160a01b03821660009081526005602052604090205460ff165b1561298e57612938838383612eb3565b6001600160a01b03831660009081526005602052604090205460ff161580156129d057506001600160a01b03821660009081526005602052604090205460ff16155b156129e057612938838383612f6d565b6001600160a01b03831660009081526005602052604090205460ff168015612a2057506001600160a01b03821660009081526005602052604090205460ff165b15612a3057612938838383612fc0565b612938838383612f6d565b600c54600a546000918291825b600654811015612b8d57826001600060068481548110612a6a57612a6a61362a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ad55750816002600060068481548110612aae57612aae61362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612aeb57600c54600a54945094505050509091565b6001600060068381548110612b0257612b0261362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b3190846135f5565b92506002600060068381548110612b4a57612b4a61362a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b7990836135f5565b915080612b8581613656565b915050612a48565b50600a54600c54612b9e9190613608565b821015612bb557600c54600a549350935050509091565b90939092509050565b6000806000806000612bcf86613043565b90506000612bdc87613060565b90506000612be988613073565b905060008183612bf9868c6135f5565b612c0391906135f5565b612c0d91906135f5565b9993985091965094509092505050565b6000808080612c2c858a613775565b90506000612c3a868a613775565b90506000612c48878a613775565b90506000612c56888a613775565b905060008183612c6686886135f5565b612c7091906135f5565b612c7a91906135f5565b949d949c50929a509298505050505050505050565b601654158015612c9f5750601754155b8015612cab5750601854155b15612cb257565b600060168190556018819055601755565b600f54601654148015612ce65750601554601154612ce1919061366f565b601754145b8015612cf55750601354601854145b15612cfc57565b600f54601655601354601855601554601154612d18919061366f565b601755565b600e54601654148015612d405750601454601054612d3b919061366f565b601754145b8015612d4f5750601254601854145b15612d5657565b600e54601655601254601855601454601054612d18919061366f565b6000806000806000806000612d8688612341565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612dc591906135f5565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612df59088906135f5565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612e2590879061366f565b6001600160a01b038a16600090815260016020526040902055612e4781613086565b612e5082613116565b612e5a8584613339565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e9f91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612ec788612341565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612f0691906135f5565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612f3d90859061366f565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612e2590879061366f565b6000806000806000806000612f8188612341565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612df591906135f5565b6000806000806000806000612fd488612341565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461301391906135f5565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612f069088906135f5565b60006103e8601654836130569190613775565b610a749190613608565b60006103e8601754836130569190613775565b60006103e8601854836130569190613775565b8015611e8c57600061309661231e565b905060006130a48284613775565b306000908152600160205260409020549091506130c290829061366f565b3060009081526001602090815260408083209390935560059052205460ff1615612938573060009081526002602052604090205461310190849061366f565b30600090815260026020526040902055505050565b600060155460145460115460105461312e919061366f565b613138919061366f565b613142919061366f565b601154601054613152919061366f565b61315c9084613775565b6131669190613608565b9050600061317482846135f5565b9050811561320557600061318661231e565b905060006131948285613775565b306000908152600160205260409020549091506131b290829061366f565b3060009081526001602090815260408083209390935560059052205460ff161561320257306000908152600260205260409020546131f190859061366f565b306000908152600260205260409020555b50505b801561293857600061321561231e565b905060006132238284613775565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5490915061325e90829061366f565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561331b5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546132ed90849061366f565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b82600b600082825461332d91906135f5565b90915550505050505050565b81600c5461334791906135f5565b600c55600d5461335890829061366f565b600d555050565b600060208083528351808285015260005b8181101561338c57858101830151858201604001528201613370565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e8c57600080fd5b600080604083850312156133d557600080fd5b82356133e0816133ad565b946020939093013593505050565b8015158114611e8c57600080fd5b6000806040838503121561340f57600080fd5b823561341a816133ad565b9150602083013561342a816133ee565b809150509250929050565b60006020828403121561344757600080fd5b8135610c55816133ad565b60008060006060848603121561346757600080fd5b8335613472816133ad565b92506020840135613482816133ad565b929592945050506040919091013590565b6000602082840312156134a557600080fd5b5035919050565b600080604083850312156134bf57600080fd5b82359150602083013561342a816133ee565b6000602082840312156134e357600080fd5b8135610c55816133ee565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806040838503121561352357600080fd5b823561352e816133ad565b9150602083013561342a816133ad565b6000806000806080858703121561355457600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061358457607f821691505b6020821081036135a457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a7457610a746135df565b60008261362557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613668576136686135df565b5060010190565b80820180821115610a7457610a746135df565b600181815b808511156136bd5781600019048211156136a3576136a36135df565b808516156136b057918102915b93841c9390800290613687565b509250929050565b6000826136d457506001610a74565b816136e157506000610a74565b81600181146136f757600281146137015761371d565b6001915050610a74565b60ff841115613712576137126135df565b50506001821b610a74565b5060208310610133831016604e8410600b8410161715613740575081810a610a74565b61374a8383613682565b806000190482111561375e5761375e6135df565b029392505050565b6000610c5560ff8416836136c5565b8082028115828204841417610a7457610a746135df565b60006020828403121561379e57600080fd5b5051919050565b6000602082840312156137b757600080fd5b8151610c55816133ee565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b60006020828403121561383157600080fd5b8151610c55816133ad565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561388c5784516001600160a01b031683529383019391830191600101613867565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138c257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204fda38bc5e704d767e3bf05da9a3a420a5eb49eae283225ea75c401dc54ca58364736f6c63430008110033

Deployed Bytecode Sourcemap

12885:27311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38271:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;38271:39:0;;;;;;;;17545:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18463:161::-;;;;;;;;;;-1:-1:-1;18463:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18463:161:0;1205:187:1;13839:33:0;;;;;;;;;;;;;;;;39680:364;;;;;;;;;;-1:-1:-1;39680:364:0;;;;;:::i;:::-;;:::i;:::-;;14249:44;;;;;;;;;;-1:-1:-1;14249:44:0;;;;-1:-1:-1;;;14249:44:0;;;;;;14380:42;;;;;;;;;;-1:-1:-1;14380:42:0;;;;-1:-1:-1;;;;;14380:42:0;;;;;;-1:-1:-1;;;;;2098:32:1;;;2080:51;;2068:2;2053:18;14380:42:0;1907:230:1;17822:101:0;;;;;;;;;;-1:-1:-1;17902:13:0;;17822:101;;40052:141;;;;;;;;;;-1:-1:-1;40052:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;40151:34:0;40127:4;40151:34;;;:25;:34;;;;;;;;;40052:141;18632:266;;;;;;;;;;-1:-1:-1;18632:266:0;;;;;:::i;:::-;;:::i;38222:42::-;;;;;;;;;;-1:-1:-1;38222:42:0;;;;;;;;20425:250;;;;;;;;;;-1:-1:-1;20425:250:0;;;;;:::i;:::-;;:::i;17731:83::-;;;;;;;;;;-1:-1:-1;17797:9:0;;17731:83;;17797:9;;;;3182:36:1;;3170:2;3155:18;17731:83:0;3040:184:1;21024:479:0;;;;;;;;;;-1:-1:-1;21024:479:0;;;;;:::i;:::-;;:::i;18906:215::-;;;;;;;;;;-1:-1:-1;18906:215:0;;;;;:::i;:::-;;:::i;19602:369::-;;;;;;;;;;-1:-1:-1;19602:369:0;;;;;:::i;:::-;;:::i;19979:438::-;;;;;;;;;;-1:-1:-1;19979:438:0;;;;;:::i;:::-;;:::i;14429:29::-;;;;;;;;;;-1:-1:-1;14429:29:0;;;;-1:-1:-1;;;;;14429:29:0;;;14533:26;;;;;;;;;;-1:-1:-1;14533:26:0;;;;-1:-1:-1;;;14533:26:0;;;;;;13800:32;;;;;;;;;;;;;;;;20683:333;;;;;;;;;;-1:-1:-1;20683:333:0;;;;;:::i;:::-;;:::i;27059:124::-;;;;;;;;;;-1:-1:-1;27059:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;27147:28:0;27123:4;27147:28;;;:19;:28;;;;;;;;;27059:124;37814:335;;;;;;;;;;-1:-1:-1;37814:335:0;;;;;:::i;:::-;;:::i;38636:347::-;;;;;;;;;;-1:-1:-1;38636:347:0;;;;;:::i;:::-;;:::i;38317:40::-;;;;;;;;;;;;;;;;13881:32;;;;;;;;;;;;;;;;13764:27;;;;;;;;;;;;;;;;13920:33;;;;;;;;;;;;;;;;14503:23;;;;;;;;;;-1:-1:-1;14503:23:0;;;;-1:-1:-1;;;14503:23:0;;;;;;17931:198;;;;;;;;;;-1:-1:-1;17931:198:0;;;;;:::i;:::-;;:::i;1001:148::-;;;;;;;;;;;;;:::i;14210:30::-;;;;;;;;;;-1:-1:-1;14210:30:0;;;;-1:-1:-1;;;;;14210:30:0;;;19362:120;;;;;;;;;;-1:-1:-1;19362:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19454:20:0;19430:4;19454:20;;;:11;:20;;;;;;;;;19362:120;27536:156;;;;;;;;;;;;;:::i;787:79::-;;;;;;;;;;-1:-1:-1;825:7:0;852:6;-1:-1:-1;;;;;852:6:0;787:79;;13731:26;;;;;;;;;;;;;;;;17636:87;;;;;;;;;;;;;:::i;13996:28::-;;;;;;;;;;;;;;;;19129:225;;;;;;;;;;-1:-1:-1;19129:225:0;;;;;:::i;:::-;;:::i;18137:167::-;;;;;;;;;;-1:-1:-1;18137:167:0;;;;;:::i;:::-;;:::i;13962:27::-;;;;;;;;;;;;;;;;31816:289;;;;;;;;;;-1:-1:-1;31816:289:0;;;;;:::i;:::-;;:::i;19490:104::-;;;;;;;;;;-1:-1:-1;19576:10:0;;19490:104;;38991:681;;;;;;;;;;-1:-1:-1;38991:681:0;;;;;:::i;:::-;;:::i;36217:371::-;;;;;;;;;;-1:-1:-1;36217:371:0;;;;;:::i;:::-;;:::i;35913:292::-;;;;;;;;;;-1:-1:-1;35913:292:0;;;;;:::i;:::-;;:::i;18312:143::-;;;;;;;;;;-1:-1:-1;18312:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18420:18:0;;;18393:7;18420:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18312:143;32117;;;;;;;;;;-1:-1:-1;32117:143:0;;;;;:::i;:::-;;:::i;14566:33::-;;;;;;;;;;;;;;;;36596:589;;;;;;;;;;-1:-1:-1;36596:589:0;;;;;:::i;:::-;;:::i;37193:613::-;;;;;;;;;;-1:-1:-1;37193:613:0;;;;;:::i;:::-;;:::i;1157:244::-;;;;;;;;;;-1:-1:-1;1157:244:0;;;;;:::i;:::-;;:::i;21548:442::-;;;;;;;;;;-1:-1:-1;21548:442:0;;;;;:::i;:::-;;:::i;17545:83::-;17582:13;17615:5;17608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17545:83;:::o;18463:161::-;18538:4;18555:39;191:10;18578:7;18587:6;18555:8;:39::i;:::-;-1:-1:-1;18612:4:0;18463:161;;;;;:::o;39680:364::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;39806:34:0;::::1;;::::0;;;:25:::1;:34:::0;;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;39784:132:::1;;;::::0;-1:-1:-1;;;39784:132:0;;5981:2:1;39784:132:0::1;::::0;::::1;5963:21:1::0;6020:2;6000:18;;;5993:30;6059:34;6039:18;;;6032:62;-1:-1:-1;;;6110:18:1;;;6103:34;6154:19;;39784:132:0::1;5779:400:1::0;39784:132:0::1;-1:-1:-1::0;;;;;39927:34:0;::::1;;::::0;;;:25:::1;:34:::0;;;;;;;;:44;;-1:-1:-1;;39927:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39987:49;;1345:41:1;;;39987:49:0::1;::::0;1318:18:1;39987:49:0::1;;;;;;;;39680:364:::0;;:::o;18632:266::-;18730:4;18747:36;18757:6;18765:9;18776:6;18747:9;:36::i;:::-;-1:-1:-1;;;;;18825:19:0;;;;;;:11;:19;;;;;;;;191:10;18825:33;;;;;;;;;18794:74;;18803:6;;18825:42;;18861:6;;18825:42;:::i;:::-;18794:8;:74::i;:::-;-1:-1:-1;18886:4:0;18632:266;;;;;:::o;20425:250::-;20491:7;20530;;20519;:18;;20511:73;;;;-1:-1:-1;;;20511:73:0;;6651:2:1;20511:73:0;;;6633:21:1;6690:2;6670:18;;;6663:30;6729:34;6709:18;;;6702:62;-1:-1:-1;;;6780:18:1;;;6773:40;6830:19;;20511:73:0;6449:406:1;20511:73:0;20595:19;20618:10;:8;:10::i;:::-;20595:33;-1:-1:-1;20646:21:0;20595:33;20646:7;:21;:::i;:::-;20639:28;20425:250;-1:-1:-1;;;20425:250:0:o;21024:479::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21106:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21098:60;;;::::0;-1:-1:-1;;;21098:60:0;;7284:2:1;21098:60:0::1;::::0;::::1;7266:21:1::0;7323:2;7303:18;;;7296:30;7362:29;7342:18;;;7335:57;7409:18;;21098:60:0::1;7082:351:1::0;21098:60:0::1;21174:9;21169:327;21193:9;:16:::0;21189:20;::::1;21169:327;;;21251:7;-1:-1:-1::0;;;;;21235:23:0::1;:9;21245:1;21235:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21235:12:0::1;:23:::0;21231:254:::1;;21294:9;21304:16:::0;;:20:::1;::::0;21323:1:::1;::::0;21304:20:::1;:::i;:::-;21294:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21279:9:::1;:12:::0;;-1:-1:-1;;;;;21294:31:0;;::::1;::::0;21289:1;;21279:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21279:46:0::1;-1:-1:-1::0;;;;;21279:46:0;;::::1;;::::0;;21344:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21383:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21383:28:0::1;::::0;;21430:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21430:15:0;;;;;-1:-1:-1;;;;;;21430:15:0::1;::::0;;;;;21169:327:::1;21024:479:::0;:::o;21231:254::-:1;21211:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21169:327;;;;21024:479:::0;:::o;18906:215::-;191:10;18994:4;19043:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19043:34:0;;;;;;;;;;18994:4;;19011:80;;19034:7;;19043:47;;19080:10;;19043:47;:::i;19602:369::-;191:10;19654:14;19703:19;;;:11;:19;;;;;;;;19702:20;19694:77;;;;-1:-1:-1;;;19694:77:0;;8174:2:1;19694:77:0;;;8156:21:1;8213:2;8193:18;;;8186:30;8252:34;8232:18;;;8225:62;-1:-1:-1;;;8303:18:1;;;8296:42;8355:19;;19694:77:0;7972:408:1;19694:77:0;19783:15;19808:19;19819:7;19808:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19856:15:0;;;;;;:7;:15;;;;;;19782:45;;-1:-1:-1;19856:25:0;;19782:45;;-1:-1:-1;19856:15:0;-1:-1:-1;19856:25:0;:::i;:::-;-1:-1:-1;;;;;19838:15:0;;;;;;:7;:15;;;;;:43;19902:7;;:17;;19912:7;;19902:17;:::i;:::-;19892:7;:27;19943:10;;:20;;19956:7;;19943:20;:::i;:::-;19930:10;:33;-1:-1:-1;;;19602:369:0:o;19979:438::-;20069:7;20108;;20097;:18;;20089:62;;;;-1:-1:-1;;;20089:62:0;;8587:2:1;20089:62:0;;;8569:21:1;8626:2;8606:18;;;8599:30;8665:33;8645:18;;;8638:61;8716:18;;20089:62:0;8385:355:1;20089:62:0;20167:17;20162:248;;20202:15;20227:19;20238:7;20227:10;:19::i;:::-;-1:-1:-1;20201:45:0;;-1:-1:-1;20261:14:0;;-1:-1:-1;;;;;;20261:14:0;20162:248;20310:23;20342:19;20353:7;20342:10;:19::i;:::-;-1:-1:-1;20308:53:0;;-1:-1:-1;20376:22:0;;-1:-1:-1;;;;;;20376:22:0;20683:333;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20766:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20765:21;20757:61;;;::::0;-1:-1:-1;;;20757:61:0;;8947:2:1;20757:61:0::1;::::0;::::1;8929:21:1::0;8986:2;8966:18;;;8959:30;9025:29;9005:18;;;8998:57;9072:18;;20757:61:0::1;8745:351:1::0;20757:61:0::1;-1:-1:-1::0;;;;;20832:16:0;::::1;20851:1;20832:16:::0;;;:7:::1;:16;::::0;;;;;:20;20829:108:::1;;-1:-1:-1::0;;;;;20908:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20888:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20869:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20829:108:::1;-1:-1:-1::0;;;;;20947:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20947:27:0::1;20970:4;20947:27:::0;;::::1;::::0;;;20985:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20985:23:0::1;::::0;;::::1;::::0;;20683:333::o;37814:335::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;37949:6:::1;37913:42;;:32;;;;;;;;;;;:42;;::::0;37905:121:::1;;;::::0;-1:-1:-1;;;37905:121:0;;9303:2:1;37905:121:0::1;::::0;::::1;9285:21:1::0;9342:2;9322:18;;;9315:30;9381:34;9361:18;;;9354:62;9452:34;9432:18;;;9425:62;-1:-1:-1;;;9503:19:1;;;9496:33;9546:19;;37905:121:0::1;9101:470:1::0;37905:121:0::1;38037:32;:41:::0;;;::::1;;-1:-1:-1::0;;;38037:41:0::1;-1:-1:-1::0;;;;38037:41:0;;::::1;;::::0;;38094:47:::1;::::0;::::1;::::0;::::1;::::0;38072:6;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;38094:47:0::1;;;;;;;;37814:335:::0;:::o;38636:347::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;38749:26:::1;::::0;::::1;;38739:36;;::::0;::::1;;::::0;38717:137:::1;;;::::0;-1:-1:-1;;;38717:137:0;;9778:2:1;38717:137:0::1;::::0;::::1;9760:21:1::0;9817:2;9797:18;;;9790:30;9856:34;9836:18;;;9829:62;-1:-1:-1;;;9907:18:1;;;9900:48;9965:19;;38717:137:0::1;9576:414:1::0;38717:137:0::1;38865:26;:35:::0;;-1:-1:-1;;38865:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38916:59:::1;::::0;38865:35:::1;38948:26:::0;;;1370:14:1;1363:22;1345:41;;38916:59:0::1;::::0;1333:2:1;1318:18;38916:59:0::1;1205:187:1::0;17931:198:0;-1:-1:-1;;;;;18021:20:0;;17997:7;18021:20;;;:11;:20;;;;;;;;18017:49;;;-1:-1:-1;;;;;;18050:16:0;;;;;:7;:16;;;;;;;17931:198::o;18017:49::-;-1:-1:-1;;;;;18104:16:0;;;;;;:7;:16;;;;;;18084:37;;:19;:37::i;1001:148::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;1108:1:::1;1092:6:::0;;1071:40:::1;::::0;-1:-1:-1;;;;;1092:6:0;;::::1;::::0;1071:40:::1;::::0;1108:1;;1071:40:::1;1139:1;1122:19:::0;;-1:-1:-1;;;;;;1122:19:0::1;::::0;;1001:148::o;27536:156::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;27598:14:::1;::::0;-1:-1:-1;;;27598:14:0;::::1;;;:23;27590:62;;;::::0;-1:-1:-1;;;27590:62:0;;10197:2:1;27590:62:0::1;::::0;::::1;10179:21:1::0;10236:2;10216:18;;;10209:30;10275:28;10255:18;;;10248:56;10321:18;;27590:62:0::1;9995:350:1::0;27590:62:0::1;27663:14;:21:::0;;-1:-1:-1;;;;27663:21:0::1;-1:-1:-1::0;;;27663:21:0::1;::::0;;27536:156::o;17636:87::-;17675:13;17708:7;17701:14;;;;;:::i;19129:225::-;191:10;19222:4;19271:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19271:34:0;;;;;;;;;;19222:4;;19239:85;;19262:7;;19271:52;;19308:15;;19271:52;:::i;18137:167::-;18215:4;18232:42;191:10;18256:9;18267:6;18232:9;:42::i;31816:289::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;31934:3:::1;31918:13;17902::::0;;;17822:101;31918:13:::1;:19;;;;:::i;:::-;31906:9;:31;31898:106;;;::::0;-1:-1:-1;;;31898:106:0;;10552:2:1;31898:106:0::1;::::0;::::1;10534:21:1::0;10591:2;10571:18;;;10564:30;10630:34;10610:18;;;10603:62;10701:32;10681:18;;;10674:60;10751:19;;31898:106:0::1;10350:426:1::0;31898:106:0::1;32015:18;:30:::0;;;32061:36:::1;::::0;160:25:1;;;32061:36:0::1;::::0;148:2:1;133:18;32061:36:0::1;14:177:1::0;38991:681:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;39212:4:::1;39198:10;17797:9:::0;;;;;17731:83;39198:10:::1;39192:16;::::0;:2:::1;:16;:::i;:::-;17902:13:::0;;39175:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;39146:24;:70;;:158;;;;;39300:4;39286:10;17797:9:::0;;;;;17731:83;39286:10:::1;39280:16;::::0;:2:::1;:16;:::i;:::-;17902:13:::0;;39263:34:::1;;;;:::i;:::-;:41;;;;:::i;:::-;39234:25;:70;;39146:158;39124:272;;;::::0;-1:-1:-1;;;39124:272:0;;12366:2:1;39124:272:0::1;::::0;::::1;12348:21:1::0;12405:2;12385:18;;;12378:30;12444:34;12424:18;;;12417:62;12515:33;12495:18;;;12488:61;12566:19;;39124:272:0::1;12164:427:1::0;39124:272:0::1;17797:9:::0;;;;39464:16:::1;::::0;:2:::1;:16;:::i;:::-;39435:46;::::0;:24;:46:::1;:::i;:::-;39408:23;:73:::0;17797:9;;;;39548:16:::1;::::0;:2:::1;:16;:::i;:::-;39519:46;::::0;:25;:46:::1;:::i;:::-;39492:24;:73:::0;;;39614:23:::1;::::0;39581:83:::1;::::0;::::1;::::0;::::1;::::0;12943:25:1;;12999:2;12984:18;;12977:34;12931:2;12916:18;;12769:248;39581:83:0::1;;;;;;;;38991:681:::0;;:::o;36217:371::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;36332:15:::1;::::0;-1:-1:-1;;;;;36332:15:0;;::::1;36312:35:::0;;::::1;::::0;36304:88:::1;;;::::0;-1:-1:-1;;;36304:88:0;;13224:2:1;36304:88:0::1;::::0;::::1;13206:21:1::0;13263:2;13243:18;;;13236:30;13302:34;13282:18;;;13275:62;-1:-1:-1;;;13353:18:1;;;13346:38;13401:19;;36304:88:0::1;13022:404:1::0;36304:88:0::1;-1:-1:-1::0;;;;;36411:28:0;::::1;36403:77;;;::::0;-1:-1:-1;;;36403:77:0;;13633:2:1;36403:77:0::1;::::0;::::1;13615:21:1::0;13672:2;13652:18;;;13645:30;13711:34;13691:18;;;13684:62;-1:-1:-1;;;13762:18:1;;;13755:34;13806:19;;36403:77:0::1;13431:400:1::0;36403:77:0::1;36491:15;:34:::0;;-1:-1:-1;;;;;;36491:34:0::1;-1:-1:-1::0;;;;;36491:34:0;::::1;::::0;;::::1;::::0;;;36541:39:::1;::::0;2080:51:1;;;36541:39:0::1;::::0;2068:2:1;2053:18;36541:39:0::1;1907:230:1::0;35913:292:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36008:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;36000:95:::1;;;::::0;-1:-1:-1;;;36000:95:0;;14038:2:1;36000:95:0::1;::::0;::::1;14020:21:1::0;14077:2;14057:18;;;14050:30;14116:34;14096:18;;;14089:62;-1:-1:-1;;;14167:18:1;;;14160:40;14217:19;;36000:95:0::1;13836:406:1::0;36000:95:0::1;-1:-1:-1::0;;;;;36106:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36106:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36163:34;;1345:41:1;;;36163:34:0::1;::::0;1318:18:1;36163:34:0::1;1205:187:1::0;32117:143:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;32186:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32186:22:0::1;-1:-1:-1::0;;;;32186:22:0;;::::1;;::::0;;32224:28:::1;::::0;::::1;::::0;::::1;::::0;32200:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;36596:589:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;36757:11:::1;:26:::0;;;36794:17:::1;:38:::0;;;36843:17:::1;:38:::0;;;36892:12:::1;:28:::0;;;36907:13;36863:18;36948:31:::1;36814:18:::0;36771:12;36948:31:::1;:::i;:::-;:51;;;;:::i;:::-;:66;;;;:::i;:::-;36933:12;:81:::0;;;37051:3:::1;-1:-1:-1::0;37035:19:0::1;37027:67;;;::::0;-1:-1:-1;;;37027:67:0;;14449:2:1;37027:67:0::1;::::0;::::1;14431:21:1::0;14488:2;14468:18;;;14461:30;14527:34;14507:18;;;14500:62;-1:-1:-1;;;14578:18:1;;;14571:33;14621:19;;37027:67:0::1;14247:399:1::0;37027:67:0::1;37127:11;::::0;37140:17:::1;::::0;37159::::1;::::0;37112:65:::1;::::0;;14853:25:1;;;14909:2;14894:18;;14887:34;;;;14937:18;;;14930:34;37112:65:0::1;::::0;14841:2:1;14826:18;37112:65:0::1;;;;;;;;36596:589:::0;;;;:::o;37193:613::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;37359:12:::1;:28:::0;;;37398:18:::1;:40:::0;;;37449:18:::1;:40:::0;;;37500:13:::1;:30:::0;;;37516:14;37470:19;37559:33:::1;37419:19:::0;37374:13;37559:33:::1;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;37543:13;:86:::0;;;37667:3:::1;-1:-1:-1::0;37650:20:0::1;37642:69;;;::::0;-1:-1:-1;;;37642:69:0;;15177:2:1;37642:69:0::1;::::0;::::1;15159:21:1::0;15216:2;15196:18;;;15189:30;15255:34;15235:18;;;15228:62;-1:-1:-1;;;15306:18:1;;;15299:34;15350:19;;37642:69:0::1;14975:400:1::0;37642:69:0::1;37745:12;::::0;37759:18:::1;::::0;37779::::1;::::0;37729:69:::1;::::0;;14853:25:1;;;14909:2;14894:18;;14887:34;;;;14937:18;;;14930:34;37729:69:0::1;::::0;14841:2:1;14826:18;37729:69:0::1;14651:319:1::0;1157:244:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1246:22:0;::::1;1238:73;;;::::0;-1:-1:-1;;;1238:73:0;;15582:2:1;1238:73:0::1;::::0;::::1;15564:21:1::0;15621:2;15601:18;;;15594:30;15660:34;15640:18;;;15633:62;-1:-1:-1;;;15711:18:1;;;15704:36;15757:19;;1238:73:0::1;15380:402:1::0;1238:73:0::1;1348:6;::::0;;1327:38:::1;::::0;-1:-1:-1;;;;;1327:38:0;;::::1;::::0;1348:6;::::1;::::0;1327:38:::1;::::0;::::1;1376:6;:17:::0;;-1:-1:-1;;;;;;1376:17:0::1;-1:-1:-1::0;;;;;1376:17:0;;;::::1;::::0;;;::::1;::::0;;1157:244::o;21548:442::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;21644:4:::1;-1:-1:-1::0;;;;;21627:22:0;::::1;::::0;21619:67:::1;;;::::0;-1:-1:-1;;;21619:67:0;;15989:2:1;21619:67:0::1;::::0;::::1;15971:21:1::0;;;16008:18;;;16001:30;16067:34;16047:18;;;16040:62;16119:18;;21619:67:0::1;15787:356:1::0;21619:67:0::1;-1:-1:-1::0;;;;;21701:21:0;::::1;21697:127;;21739:52;21747:10;21769:21;21739:29;:52::i;21697:127::-;21896:35;::::0;-1:-1:-1;;;21896:35:0;;21925:4:::1;21896:35;::::0;::::1;2080:51:1::0;21861:5:0;;21834:17:::1;::::0;-1:-1:-1;;;;;21896:20:0;::::1;::::0;::::1;::::0;2053:18:1;;21896:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21942:40;::::0;-1:-1:-1;;;21942:40:0;;21962:10:::1;21942:40;::::0;::::1;16511:51:1::0;16578:18;;;16571:34;;;21878:53:0;;-1:-1:-1;;;;;;21942:19:0;::::1;::::0;::::1;::::0;16484:18:1;;21942:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21608:382;;984:1;21548:442:::0;:::o;27191:337::-;-1:-1:-1;;;;;27284:19:0;;27276:68;;;;-1:-1:-1;;;27276:68:0;;17068:2:1;27276:68:0;;;17050:21:1;17107:2;17087:18;;;17080:30;17146:34;17126:18;;;17119:62;-1:-1:-1;;;17197:18:1;;;17190:34;17241:19;;27276:68:0;16866:400:1;27276:68:0;-1:-1:-1;;;;;27363:21:0;;27355:68;;;;-1:-1:-1;;;27355:68:0;;17473:2:1;27355:68:0;;;17455:21:1;17512:2;17492:18;;;17485:30;17551:34;17531:18;;;17524:62;-1:-1:-1;;;17602:18:1;;;17595:32;17644:19;;27355:68:0;17271:398:1;27355:68:0;-1:-1:-1;;;;;27436:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27488:32;;160:25:1;;;27488:32:0;;133:18:1;27488:32:0;;;;;;;27191:337;;;:::o;27704:2466::-;-1:-1:-1;;;;;27826:18:0;;27818:68;;;;-1:-1:-1;;;27818:68:0;;17876:2:1;27818:68:0;;;17858:21:1;17915:2;17895:18;;;17888:30;17954:34;17934:18;;;17927:62;-1:-1:-1;;;18005:18:1;;;17998:35;18050:19;;27818:68:0;17674:401:1;27818:68:0;27914:1;27905:6;:10;27897:64;;;;-1:-1:-1;;;27897:64:0;;18282:2:1;27897:64:0;;;18264:21:1;18321:2;18301:18;;;18294:30;18360:34;18340:18;;;18333:62;-1:-1:-1;;;18411:18:1;;;18404:39;18460:19;;27897:64:0;18080:405:1;27897:64:0;-1:-1:-1;;;;;27978:25:0;;;;;;:19;:25;;;;;;;;27977:26;:54;;;;-1:-1:-1;;;;;;28008:23:0;;;;;;:19;:23;;;;;;;;28007:24;27977:54;27974:139;;;28056:14;;-1:-1:-1;;;28056:14:0;;;;28048:53;;;;-1:-1:-1;;;28048:53:0;;18692:2:1;28048:53:0;;;18674:21:1;18731:2;18711:18;;;18704:30;18770:28;18750:18;;;18743:56;18816:18;;28048:53:0;18490:350:1;28048:53:0;28129:26;;;;28125:770;;;28195:13;;-1:-1:-1;;;;;28187:21:0;;;28195:13;;28187:21;;:44;;-1:-1:-1;28218:13:0;;-1:-1:-1;;;;;28212:19:0;;;28218:13;;28212:19;28187:44;28186:107;;;;-1:-1:-1;;;;;;28253:31:0;;;;;;:25;:31;;;;;;;;:40;28186:107;:169;;;;-1:-1:-1;;;;;;28315:29:0;;;;;;:25;:29;;;;;;;;:40;28186:169;28182:702;;;28402:13;;-1:-1:-1;;;;;28402:13:0;;;28394:21;;;;28390:479;;28484:23;;28474:6;:33;;28440:180;;;;-1:-1:-1;;;28440:180:0;;;;;;;:::i;:::-;28390:479;;;28713:24;;28703:6;:34;;28669:180;;;;-1:-1:-1;;;28669:180:0;;;;;;;:::i;:::-;28907:28;28938:24;28956:4;28938:9;:24::i;:::-;29032:18;;28907:55;;-1:-1:-1;29008:42:0;;;;;;;29079:53;;-1:-1:-1;29116:16:0;;-1:-1:-1;;;29116:16:0;;;;29115:17;29079:53;:89;;;;-1:-1:-1;29155:13:0;;-1:-1:-1;;;;;29149:19:0;;;29155:13;;29149:19;29079:89;:117;;;;-1:-1:-1;29185:11:0;;-1:-1:-1;;;29185:11:0;;;;29079:117;29061:985;;;29223:16;:23;;-1:-1:-1;;;;29223:23:0;-1:-1:-1;;;29223:23:0;;;29320:18;;29300:17;;29223:23;;29300:38;;;:::i;:::-;29275:63;;29353:22;29398:18;;29378:17;;:38;;;;:::i;:::-;29353:63;-1:-1:-1;29433:18:0;29454:31;29353:63;29454:14;:31;:::i;:::-;29433:52;-1:-1:-1;29505:14:0;;29502:492;;29543:18;;29540:198;;29586:23;29654:10;29613:37;29636:14;29613:20;:37;:::i;:::-;29612:52;;;;:::i;:::-;29586:78;;29687:31;29702:15;29687:14;:31::i;:::-;29563:175;29540:198;29777:18;;29774:204;;29820:23;29888:10;29847:37;29870:14;29847:20;:37;:::i;:::-;29846:52;;;;:::i;:::-;29820:78;;29921:37;29942:15;29921:20;:37::i;:::-;29797:181;29774:204;-1:-1:-1;;30010:16:0;:24;;-1:-1:-1;;;;30010:24:0;;;-1:-1:-1;29061:985:0;30132:30;30147:4;30152:2;30155:6;30132:14;:30::i;:::-;27807:2363;;27704:2466;;;:::o;23566:160::-;23607:7;23628:15;23645;23664:19;:17;:19::i;:::-;23627:56;;-1:-1:-1;23627:56:0;-1:-1:-1;23701:17:0;23627:56;;23701:17;:::i;:::-;23694:24;;;;23566:160;:::o;22147:472::-;22206:7;22215;22224;22233;22242;22251;22260;22281:23;22306:12;22320:18;22340;22362:20;22374:7;22362:11;:20::i;:::-;22280:102;;;;;;;;22394:15;22411:23;22436:12;22452:62;22464:7;22473:4;22479:10;22491;22503;:8;:10::i;:::-;22452:11;:62::i;:::-;22393:121;;-1:-1:-1;22393:121:0;-1:-1:-1;22393:121:0;-1:-1:-1;22565:15:0;;-1:-1:-1;22582:4:0;;-1:-1:-1;22588:10:0;;-1:-1:-1;22600:10:0;-1:-1:-1;;;;22147:472:0;;;;;;;;;:::o;2774:346::-;2853:4;2902:6;2877:21;:31;;2869:73;;;;-1:-1:-1;;;2869:73:0;;19475:2:1;2869:73:0;;;19457:21:1;19514:2;19494:18;;;19487:30;19553:31;19533:18;;;19526:59;19602:18;;2869:73:0;19273:353:1;2869:73:0;3034:12;3052:9;-1:-1:-1;;;;;3052:14:0;3075:6;3052:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3033:54:0;;2774:346;-1:-1:-1;;;;;2774:346:0:o;30178:947::-;30237:12;30252:10;30261:1;30252:6;:10;:::i;:::-;30237:25;-1:-1:-1;30273:17:0;30293:13;30237:25;30293:6;:13;:::i;:::-;30402:16;;;30416:1;30402:16;;;;;;;;30273:33;;-1:-1:-1;30344:21:0;;30319:22;;30402:16;;;;;;;;;;-1:-1:-1;30402:16:0;30378:40;;30447:4;30429;30434:1;30429:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30429:23:0;;;:7;;;;;;;;;;:23;;;;30473:15;;:22;;;-1:-1:-1;;;30473:22:0;;;;:15;;;;;:20;;:22;;;;;30429:7;;30473:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30463:4;30468:1;30463:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30463:32:0;;;:7;;;;;;;;;:32;30508:15;;:207;;-1:-1:-1;;;30508:207:0;;:15;;;:66;;:207;;30589:4;;30508:15;;30652:4;;30679;;30699:15;;30508:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30736:18;30781:14;30757:21;:38;;;;:::i;:::-;30808:15;;31011:4;;30808:248;;-1:-1:-1;;;30808:248:0;;30881:4;30808:248;;;21555:34:1;21605:18;;;21598:34;;;30808:15:0;21648:18:1;;;21641:34;;;21691:18;;;21684:34;-1:-1:-1;;;;;31011:4:0;;;21734:19:1;;;21727:44;31030:15:0;21787:19:1;;;21780:35;30736:59:0;;-1:-1:-1;30808:15:0;;:31;;30736:59;;21489:19:1;;30808:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;31074:43:0;;;14853:25:1;;;14909:2;14894:18;;14887:34;;;14937:18;;;14930:34;;;31074:43:0;;-1:-1:-1;14841:2:1;14826:18;31074:43:0;;;;;;;30226:899;;;;;30178:947;:::o;31133:675::-;31286:16;;;31300:1;31286:16;;;;;;;;31228:21;;31203:22;;31286:16;31300:1;31286:16;;;;;;;;;;-1:-1:-1;31286:16:0;31262:40;;31331:4;31313;31318:1;31313:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31313:23:0;;;:7;;;;;;;;;;:23;;;;31357:15;;:22;;;-1:-1:-1;;;31357:22:0;;;;:15;;;;;:20;;:22;;;;;31313:7;;31357:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31347:4;31352:1;31347:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31347:32:0;;;:7;;;;;;;;;:32;31392:15;;:214;;-1:-1:-1;;;31392:214:0;;:15;;;:66;;:214;;31473:11;;31392:15;;31543:4;;31570;;31590:15;;31392:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31619:18;31664:14;31640:21;:38;;;;:::i;:::-;31699:15;;31619:59;;-1:-1:-1;31691:46:0;;-1:-1:-1;;;;;31699:15:0;31619:59;31691:34;:46::i;:::-;-1:-1:-1;31755:45:0;;;12943:25:1;;;12999:2;12984:18;;12977:34;;;31755:45:0;;12916:18:1;31755:45:0;12769:248:1;32268:1117:0;-1:-1:-1;;;;;32367:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;32412:30:0;;;;;;:19;:30;;;;;;;;32367:75;32363:406;;;32474:14;:12;:14::i;:::-;32363:406;;;32521:13;;-1:-1:-1;;;;;32521:13:0;;;32508:26;;;;32505:264;;32550:12;:10;:12::i;32505:264::-;32592:13;;-1:-1:-1;;;;;32592:13:0;;;32582:23;;;;32579:190;;32621:11;:9;:11::i;32579:190::-;32652:32;;-1:-1:-1;;;32652:32:0;;;;32649:120;;;32700:14;:12;:14::i;32649:120::-;32745:12;:10;:12::i;:::-;-1:-1:-1;;;;;32785:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32809:22:0;;;;;;:11;:22;;;;;;;;32808:23;32785:46;32781:597;;;32848:48;32870:6;32878:9;32889:6;32848:21;:48::i;:::-;32268:1117;;;:::o;32781:597::-;-1:-1:-1;;;;;32919:19:0;;;;;;:11;:19;;;;;;;;32918:20;:46;;;;-1:-1:-1;;;;;;32942:22:0;;;;;;:11;:22;;;;;;;;32918:46;32914:464;;;32981:46;33001:6;33009:9;33020:6;32981:19;:46::i;32914:464::-;-1:-1:-1;;;;;33050:19:0;;;;;;:11;:19;;;;;;;;33049:20;:47;;;;-1:-1:-1;;;;;;33074:22:0;;;;;;:11;:22;;;;;;;;33073:23;33049:47;33045:333;;;33113:44;33131:6;33139:9;33150:6;33113:17;:44::i;33045:333::-;-1:-1:-1;;;;;33179:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33202:22:0;;;;;;:11;:22;;;;;;;;33179:45;33175:203;;;33241:48;33263:6;33271:9;33282:6;33241:21;:48::i;33175:203::-;33322:44;33340:6;33348:9;33359:6;33322:17;:44::i;23734:552::-;23831:7;;23867;;23784;;;;;23891:283;23915:9;:16;23911:20;;23891:283;;;23981:7;23957;:21;23965:9;23975:1;23965:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23965:12:0;23957:21;;;;;;;;;;;;;:31;;:66;;;24016:7;23992;:21;24000:9;24010:1;24000:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24000:12:0;23992:21;;;;;;;;;;;;;:31;23957:66;23953:97;;;24033:7;;24042;;24025:25;;;;;;;23734:552;;:::o;23953:97::-;24085:7;:21;24093:9;24103:1;24093:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24093:12:0;24085:21;;;;;;;;;;;;;24075:31;;:7;:31;:::i;:::-;24065:41;;24141:7;:21;24149:9;24159:1;24149:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24149:12:0;24141:21;;;;;;;;;;;;;24131:31;;:7;:31;:::i;:::-;24121:41;-1:-1:-1;23933:3:0;;;;:::i;:::-;;;;23891:283;;;;24208:7;;24198;;:17;;;;:::i;:::-;24188:7;:27;24184:58;;;24225:7;;24234;;24217:25;;;;;;23734:552;;:::o;24184:58::-;24261:7;;24270;;-1:-1:-1;23734:552:0;-1:-1:-1;23734:552:0:o;22627:420::-;22687:7;22696;22705;22714;22734:12;22749:24;22765:7;22749:15;:24::i;:::-;22734:39;;22784:18;22805:30;22827:7;22805:21;:30::i;:::-;22784:51;;22846:18;22867:30;22889:7;22867:21;:30::i;:::-;22846:51;-1:-1:-1;22908:23:0;22846:51;22951:10;22934:14;22944:4;22934:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;22908:66;23010:4;;-1:-1:-1;23016:10:0;;-1:-1:-1;23016:10:0;-1:-1:-1;22627:420:0;;-1:-1:-1;;;22627:420:0:o;23055:503::-;23190:7;;;;23246:21;23256:11;23246:7;:21;:::i;:::-;23228:39;-1:-1:-1;23278:12:0;23293:18;23300:11;23293:4;:18;:::i;:::-;23278:33;-1:-1:-1;23322:18:0;23343:24;23356:11;23343:10;:24;:::i;:::-;23322:45;-1:-1:-1;23378:18:0;23399:24;23412:11;23399:10;:24;:::i;:::-;23378:45;-1:-1:-1;23434:23:0;23378:45;23477:10;23460:14;23470:4;23460:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;23519:7;;;;-1:-1:-1;23545:4:0;;-1:-1:-1;23055:503:0;;-1:-1:-1;;;;;;;;;23055:503:0:o;26190:206::-;26236:7;;:12;:34;;;;-1:-1:-1;26252:13:0;;:18;26236:34;:56;;;;-1:-1:-1;26274:13:0;;:18;26236:56;26233:68;;;26190:206::o;26233:68::-;26331:1;26321:7;:11;;;26343:13;:17;;;26371:13;:17;26190:206::o;26727:320::-;26781:12;;26770:7;;:23;:80;;;;;26836:13;;26815:18;;:34;;;;:::i;:::-;26797:13;;:53;26770:80;:119;;;;;26871:18;;26854:13;;:35;26770:119;26767:132;;;26727:320::o;26767:132::-;26921:12;;26911:7;:22;26960:18;;26944:13;:34;27026:13;;27005:18;;:34;;27026:13;27005:34;:::i;:::-;26989:13;:50;26727:320::o;26408:311::-;26461:11;;26450:7;;:22;:77;;;;;26514:12;;26494:17;;:32;;;;:::i;:::-;26476:13;;:51;26450:77;:115;;;;;26548:17;;26531:13;;:34;26450:115;26447:128;;;26408:311::o;26447:128::-;26597:11;;26587:7;:21;26635:17;;26619:13;:33;26699:12;;26679:17;;:32;;26699:12;26679:32;:::i;34596:614::-;34699:15;34716:23;34741:12;34755:23;34780:12;34794:18;34814;34836:19;34847:7;34836:10;:19::i;:::-;34698:157;;;;;;;;;;;;;;34902:7;34884;:15;34892:6;-1:-1:-1;;;;;34884:15:0;-1:-1:-1;;;;;34884:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34866:15:0;;;;;;:7;:15;;;;;;;;:43;;;;34938:7;:15;;;;:25;;34956:7;;34938:25;:::i;:::-;-1:-1:-1;;;;;34920:15:0;;;;;;;:7;:15;;;;;;:43;;;;34995:18;;;;;;;:36;;35016:15;;34995:36;:::i;:::-;-1:-1:-1;;;;;34974:18:0;;;;;;:7;:18;;;;;:57;35043:26;35058:10;35043:14;:26::i;:::-;35082;35097:10;35082:14;:26::i;:::-;35119:23;35131:4;35137;35119:11;:23::i;:::-;35175:9;-1:-1:-1;;;;;35158:44:0;35167:6;-1:-1:-1;;;;;35158:44:0;;35186:15;35158:44;;;;160:25:1;;148:2;133:18;;14:177;35158:44:0;;;;;;;;34687:523;;;;;;;34596:614;;;:::o;33954:634::-;34055:15;34072:23;34097:12;34111:23;34136:12;34150:18;34170;34192:19;34203:7;34192:10;:19::i;:::-;34054:157;;;;;;;;;;;;;;34258:7;34240;:15;34248:6;-1:-1:-1;;;;;34240:15:0;-1:-1:-1;;;;;34240:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34222:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;34297:18;;;;;:7;:18;;;;;:36;;34318:15;;34297:36;:::i;:::-;-1:-1:-1;;;;;34276:18:0;;;;;;:7;:18;;;;;;;;:57;;;;34365:7;:18;;;;:36;;34386:15;;34365:36;:::i;33393:553::-;33492:15;33509:23;33534:12;33548:23;33573:12;33587:18;33607;33629:19;33640:7;33629:10;:19::i;:::-;33491:157;;;;;;;;;;;;;;33695:7;33677;:15;33685:6;-1:-1:-1;;;;;33677:15:0;-1:-1:-1;;;;;33677:15:0;;;;;;;;;;;;;:25;;;;:::i;35218:687::-;35321:15;35338:23;35363:12;35377:23;35402:12;35416:18;35436;35458:19;35469:7;35458:10;:19::i;:::-;35320:157;;;;;;;;;;;;;;35524:7;35506;:15;35514:6;-1:-1:-1;;;;;35506:15:0;-1:-1:-1;;;;;35506:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;35488:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35560:7;:15;;;;:25;;35578:7;;35560:25;:::i;25765:123::-;25829:7;25876:4;25866:7;;25856;:17;;;;:::i;:::-;:24;;;;:::i;25896:135::-;25966:7;26019:4;26003:13;;25993:7;:23;;;;:::i;26043:135::-;26113:7;26166:4;26150:13;;26140:7;:23;;;;:::i;25345:408::-;25412:14;;25408:338;;25443:19;25466:10;:8;:10::i;:::-;25443:33;-1:-1:-1;25491:18:0;25512:24;25443:33;25512:10;:24;:::i;:::-;25592:4;25576:22;;;;:7;:22;;;;;;25491:45;;-1:-1:-1;25576:35:0;;25491:45;;25576:35;:::i;:::-;25567:4;25551:22;;;;:7;:22;;;;;;;;:60;;;;25629:11;:26;;;;;;25626:108;;;25715:4;25699:22;;;;:7;:22;;;;;;:35;;25724:10;;25699:35;:::i;:::-;25690:4;25674:22;;;;:7;:22;;;;;:60;25428:318;;25345:408;:::o;24298:1039::-;24361:23;24500:13;;24485:12;;24464:18;;24444:17;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;24421:18;;24401:17;;:38;;;;:::i;:::-;24387:53;;:10;:53;:::i;:::-;:127;;;;:::i;:::-;24361:153;-1:-1:-1;24525:18:0;24546:28;24361:153;24546:10;:28;:::i;:::-;24525:49;-1:-1:-1;24590:19:0;;24587:351;;24625:19;24648:10;:8;:10::i;:::-;24625:33;-1:-1:-1;24673:18:0;24694:29;24625:33;24694:15;:29;:::i;:::-;24779:4;24763:22;;;;:7;:22;;;;;;24673:50;;-1:-1:-1;24763:35:0;;24673:50;;24763:35;:::i;:::-;24754:4;24738:22;;;;:7;:22;;;;;;;;:60;;;;24816:11;:26;;;;;;24813:113;;;24902:4;24886:22;;;;:7;:22;;;;;;:40;;24911:15;;24886:40;:::i;:::-;24877:4;24861:22;;;;:7;:22;;;;;:65;24813:113;24610:328;;24587:351;24953:14;;24950:380;;24983:19;25006:10;:8;:10::i;:::-;24983:33;-1:-1:-1;25031:13:0;25047:24;24983:33;25047:10;:24;:::i;:::-;25129:6;25113:24;;:7;:24;;;;25031:40;;-1:-1:-1;25113:32:0;;25031:40;;25113:32;:::i;:::-;25102:6;25086:24;;;:59;25163:11;25086:24;25163:28;;;;;25160:114;;;25253:6;25237:24;;:7;:24;;;;:37;;25264:10;;25237:37;:::i;:::-;25226:6;25210:24;;:7;:24;;;:64;25160:114;25308:10;25291:13;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;24350:987:0;;24298:1039;:::o;21998:141::-;22086:4;22076:7;;:14;;;;:::i;:::-;22066:7;:24;22114:10;;:17;;22127:4;;22114:17;:::i;:::-;22101:10;:30;-1:-1:-1;;21998:141:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:118::-;1483:5;1476:13;1469:21;1462:5;1459:32;1449:60;;1505:1;1502;1495:12;1520:382;1585:6;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:30;1799:32;1840:30;:::i;:::-;1889:7;1879:17;;;1520:382;;;;;:::o;2142:247::-;2201:6;2254:2;2242:9;2233:7;2229:23;2225:32;2222:52;;;2270:1;2267;2260:12;2222:52;2309:9;2296:23;2328:31;2353:5;2328:31;:::i;2394:456::-;2471:6;2479;2487;2540:2;2528:9;2519:7;2515:23;2511:32;2508:52;;;2556:1;2553;2546:12;2508:52;2595:9;2582:23;2614:31;2639:5;2614:31;:::i;:::-;2664:5;-1:-1:-1;2721:2:1;2706:18;;2693:32;2734:33;2693:32;2734:33;:::i;:::-;2394:456;;2786:7;;-1:-1:-1;;;2840:2:1;2825:18;;;;2812:32;;2394:456::o;2855:180::-;2914:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;-1:-1:-1;3006:23:1;;2855:180;-1:-1:-1;2855:180:1:o;3229:309::-;3294:6;3302;3355:2;3343:9;3334:7;3330:23;3326:32;3323:52;;;3371:1;3368;3361:12;3323:52;3407:9;3394:23;3384:33;;3467:2;3456:9;3452:18;3439:32;3480:28;3502:5;3480:28;:::i;3751:241::-;3807:6;3860:2;3848:9;3839:7;3835:23;3831:32;3828:52;;;3876:1;3873;3866:12;3828:52;3915:9;3902:23;3934:28;3956:5;3934:28;:::i;3997:248::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;-1:-1:-1;;4165:23:1;;;4235:2;4220:18;;;4207:32;;-1:-1:-1;3997:248:1:o;4250:388::-;4318:6;4326;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;:::-;4503:5;-1:-1:-1;4560:2:1;4545:18;;4532:32;4573:33;4532:32;4573:33;:::i;4643:385::-;4729:6;4737;4745;4753;4806:3;4794:9;4785:7;4781:23;4777:33;4774:53;;;4823:1;4820;4813:12;4774:53;-1:-1:-1;;4846:23:1;;;4916:2;4901:18;;4888:32;;-1:-1:-1;4967:2:1;4952:18;;4939:32;;5018:2;5003:18;4990:32;;-1:-1:-1;4643:385:1;-1:-1:-1;4643:385:1:o;5033:380::-;5112:1;5108:12;;;;5155;;;5176:61;;5230:4;5222:6;5218:17;5208:27;;5176:61;5283:2;5275:6;5272:14;5252:18;5249:38;5246:161;;5329:10;5324:3;5320:20;5317:1;5310:31;5364:4;5361:1;5354:15;5392:4;5389:1;5382:15;5246:161;;5033:380;;;:::o;5418:356::-;5620:2;5602:21;;;5639:18;;;5632:30;5698:34;5693:2;5678:18;;5671:62;5765:2;5750:18;;5418:356::o;6184:127::-;6245:10;6240:3;6236:20;6233:1;6226:31;6276:4;6273:1;6266:15;6300:4;6297:1;6290:15;6316:128;6383:9;;;6404:11;;;6401:37;;;6418:18;;:::i;6860:217::-;6900:1;6926;6916:132;;6970:10;6965:3;6961:20;6958:1;6951:31;7005:4;7002:1;6995:15;7033:4;7030:1;7023:15;6916:132;-1:-1:-1;7062:9:1;;6860:217::o;7438:127::-;7499:10;7494:3;7490:20;7487:1;7480:31;7530:4;7527:1;7520:15;7554:4;7551:1;7544:15;7570:127;7631:10;7626:3;7622:20;7619:1;7612:31;7662:4;7659:1;7652:15;7686:4;7683:1;7676:15;7702:135;7741:3;7762:17;;;7759:43;;7782:18;;:::i;:::-;-1:-1:-1;7829:1:1;7818:13;;7702:135::o;7842:125::-;7907:9;;;7928:10;;;7925:36;;;7941:18;;:::i;10781:422::-;10870:1;10913:5;10870:1;10927:270;10948:7;10938:8;10935:21;10927:270;;;11007:4;11003:1;10999:6;10995:17;10989:4;10986:27;10983:53;;;11016:18;;:::i;:::-;11066:7;11056:8;11052:22;11049:55;;;11086:16;;;;11049:55;11165:22;;;;11125:15;;;;10927:270;;;10931:3;10781:422;;;;;:::o;11208:806::-;11257:5;11287:8;11277:80;;-1:-1:-1;11328:1:1;11342:5;;11277:80;11376:4;11366:76;;-1:-1:-1;11413:1:1;11427:5;;11366:76;11458:4;11476:1;11471:59;;;;11544:1;11539:130;;;;11451:218;;11471:59;11501:1;11492:10;;11515:5;;;11539:130;11576:3;11566:8;11563:17;11560:43;;;11583:18;;:::i;:::-;-1:-1:-1;;11639:1:1;11625:16;;11654:5;;11451:218;;11753:2;11743:8;11740:16;11734:3;11728:4;11725:13;11721:36;11715:2;11705:8;11702:16;11697:2;11691:4;11688:12;11684:35;11681:77;11678:159;;;-1:-1:-1;11790:19:1;;;11822:5;;11678:159;11869:34;11894:8;11888:4;11869:34;:::i;:::-;11939:6;11935:1;11931:6;11927:19;11918:7;11915:32;11912:58;;;11950:18;;:::i;:::-;11988:20;;11208:806;-1:-1:-1;;;11208:806:1:o;12019:140::-;12077:5;12106:47;12147:4;12137:8;12133:19;12127:4;12106:47;:::i;12596:168::-;12669:9;;;12700;;12717:15;;;12711:22;;12697:37;12687:71;;12738:18;;:::i;16148:184::-;16218:6;16271:2;16259:9;16250:7;16246:23;16242:32;16239:52;;;16287:1;16284;16277:12;16239:52;-1:-1:-1;16310:16:1;;16148:184;-1:-1:-1;16148:184:1:o;16616:245::-;16683:6;16736:2;16724:9;16715:7;16711:23;16707:32;16704:52;;;16752:1;16749;16742:12;16704:52;16784:9;16778:16;16803:28;16825:5;16803:28;:::i;18845:423::-;19047:2;19029:21;;;19086:2;19066:18;;;19059:30;19125:34;19120:2;19105:18;;19098:62;19196:29;19191:2;19176:18;;19169:57;19258:3;19243:19;;18845:423::o;19973:251::-;20043:6;20096:2;20084:9;20075:7;20071:23;20067:32;20064:52;;;20112:1;20109;20102:12;20064:52;20144:9;20138:16;20163:31;20188:5;20163:31;:::i;20229:980::-;20491:4;20539:3;20528:9;20524:19;20570:6;20559:9;20552:25;20596:2;20634:6;20629:2;20618:9;20614:18;20607:34;20677:3;20672:2;20661:9;20657:18;20650:31;20701:6;20736;20730:13;20767:6;20759;20752:22;20805:3;20794:9;20790:19;20783:26;;20844:2;20836:6;20832:15;20818:29;;20865:1;20875:195;20889:6;20886:1;20883:13;20875:195;;;20954:13;;-1:-1:-1;;;;;20950:39:1;20938:52;;21045:15;;;;21010:12;;;;20986:1;20904:9;20875:195;;;-1:-1:-1;;;;;;;21126:32:1;;;;21121:2;21106:18;;21099:60;-1:-1:-1;;;21190:3:1;21175:19;21168:35;21087:3;20229:980;-1:-1:-1;;;20229:980:1:o;21826:306::-;21914:6;21922;21930;21983:2;21971:9;21962:7;21958:23;21954:32;21951:52;;;21999:1;21996;21989:12;21951:52;22028:9;22022:16;22012:26;;22078:2;22067:9;22063:18;22057:25;22047:35;;22122:2;22111:9;22107:18;22101:25;22091:35;;21826:306;;;;;:::o

Swarm Source

ipfs://4fda38bc5e704d767e3bf05da9a3a420a5eb49eae283225ea75c401dc54ca583
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.