ETH Price: $3,355.96 (-2.82%)
Gas: 3 Gwei

Token

Pushin P (PushinP)
 

Overview

Max Total Supply

1,000,000,000 PushinP

Holders

442

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
292,171.438240322 PushinP

Value
$0.00
0x9db5ff3eab3ba4806d5f2688735f8766c860c3bd
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:
PushinP

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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


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 SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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 {
        require(address(this).balance >= amount, "Address: insufficient balance");

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


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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        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");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 PushinP is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0xB9738E9b547fb38D7a2c145e7f1A1D33B27C4189); // Marketing Wallet
    address payable private ecosystemWallet = payable(0x8923368A7376DC2ABEbBd79ba519f46eebdaF8c1); // Ecosystem Wallet
    address payable private devWallet = payable (0x46C4DDa239D7C13592C763fb1f0BCf26eB250813); // dev Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    mapping (address => bool) public isTimelockExempt;
    
    address[] private _excluded;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 9;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Pushin P";
    string private _symbol = "PushinP";
    

    uint256 public _maxWalletToken = _tTotal.div(100).mul(2);
    uint256 public _maxSellLimit = _tTotal.div(1000).mul(2); //0.2%

    uint256 public _buyLiquidityFee = 0; //2%
    uint256 public _buyDevFee = 20;    
    uint256 public _buyMarketingFee = 80;   
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 30;
    uint256 public _sellMarketingFee = 100;  //10%
    uint256 public _sellDevFee = 20;   //10%
    uint256 public _sellReflectionFee = 0;
    
    uint256 private ecosystemFee = 50;   //5%
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;

    bool public cooldownEnabled = false;
    uint256 public cooldownTimerInterval = 1 hours;
    mapping (address => uint) private cooldownTimer;

    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(5); //0.05%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;
        isTimelockExempt[owner()] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[0x000000000000000000000000000000000000dEaD] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function disableAntiBotmode() external onlyOwner() {
       antiBotmode=false;
       _maxWalletToken = _tTotal.div(1000).mul(2); //0.2% 
        cooldownEnabled = true;
       swapTokenswithoutImpact(balanceOf(address(this)));
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

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

    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()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

    function totalFees() 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].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(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.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[from], "You have no power here!");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }
        
        if(cooldownEnabled && to == uniswapV2Pair && !isTimelockExempt[from]){
            require(cooldownTimer[from] < block.timestamp, "Please wait for cooldown between sells");
            cooldownTimer[from] = block.timestamp + cooldownTimerInterval;
        }


        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            require(amount<=_maxSellLimit,"Amount Greater than max sell limit");
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //Punish high slippage bots for next - only bot txns go through here
        if(launchedAt>0 && from!= owner() && block.number >= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=990;    //90%
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    
    function swapTokenswithoutImpact(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(	
            totalETHFee	
        );
         
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }

        _transfer(uniswapV2Pair,DEAD,contractTokenBalance);
        IUniswapV2Pair(uniswapV2Pair).sync();
        
    }
    

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        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]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _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) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _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) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

     // enable cooldown between sells
    function changeCooldownSettings(bool newStatus, uint256 newInterval) external onlyOwner {
        require(newInterval <= 24 hours, "Exceeds the limit");
        cooldownEnabled = newStatus;
        cooldownTimerInterval = newInterval;
    }


    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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _marketingWallet,address _ecosystemWallet, address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
        ecosystemWallet = payable(_ecosystemWallet);
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isLocked(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_locked(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner {
        isTimelockExempt[holder] = exempt;
    }

    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxSellPercent_base1000(uint256 maxSellPercent_base1000) external onlyOwner() {
        _maxSellLimit = _tTotal.div(1000).mul(maxSellPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function distribute_airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
            }
    }

     function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _ecosystemFee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        ecosystemFee=_ecosystemFee;

        totalFee = liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);

    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"},{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeCooldownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"distribute_airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","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":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTimelockExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_locked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellPercent_base1000","type":"uint256"}],"name":"setMaxSellPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_ecosystemWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"totalFees","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":"tradingOpen","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":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673b9738e9b547fb38d7a2c145e7f1a1d33b27c418917909155600480548216738923368a7376dc2abebbd79ba519f46eebdaf8c1179055600580549091167346c4dda239d7c13592c763fb1f0bcf26eb2508131790556002600a9081556000600b55601280547409000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000b891600160a01b90910460ff1690620009e6565b620000c890633b9aca0062000aa5565b6013819055620000db9060001962000b1e565b620000e99060001962000ac7565b60145560408051808201909152600880825267050757368696e20560c41b60209092019182526200011d9160169162000846565b5060408051808201909152600780825266050757368696e560cc1b60209092019182526200014e9160179162000846565b50620001866002620001726064601354620006c960201b620022641790919060201c565b6200071c60201b620022a61790919060201c565b601855620001ad6002620001726103e8601354620006c960201b620022641790919060201c565b6019556000601a8190556014601b8190556050601c819055601d839055601e80556064601f55602082815560218490556032602281905560238590556024839055602584905560268590556027805460ff19169055610e106028556200023d949093620002299390928492919062002325620007a7821b17901c565b620007a760201b620023251790919060201c565b602a55602a54602b556200026a600562000172612710601354620006c960201b620022641790919060201c565b602c55602e805462ffffff60a81b1916600160b81b1790553480156200028f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506014543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e9190620008ec565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b757600080fd5b505afa158015620003cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f29190620008ec565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200043b57600080fd5b505af115801562000450573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004769190620008ec565b602e80546001600160a01b03199081166001600160a01b0393841617909155602d80549091169183169190911790556001600c6000620004be6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620005176000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602e54821684528284208054861682179055601254909116835290822080549093168117909255600f90620005996000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602e549091168152600f909252812080549092166001908117909255601090620005f96000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526010909252812080548316600190811790915561dead9091527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b698054909216179055620006723390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601354604051620006ba91815260200190565b60405180910390a35062000b61565b60006200071383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200080a60201b60201c565b90505b92915050565b6000826200072d5750600062000716565b60006200073b838562000aa5565b9050826200074a858362000986565b14620007135760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620007b683856200096b565b905083811015620007135760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200079e565b600081836200082e5760405162461bcd60e51b81526004016200079e919062000915565b5060006200083d848662000986565b95945050505050565b828054620008549062000ae1565b90600052602060002090601f016020900481019282620008785760008555620008c3565b82601f106200089357805160ff1916838001178555620008c3565b82800160010185558215620008c3579182015b82811115620008c3578251825591602001919060010190620008a6565b50620008d1929150620008d5565b5090565b5b80821115620008d15760008155600101620008d6565b600060208284031215620008fe578081fd5b81516001600160a01b038116811462000713578182fd5b6000602080835283518082850152825b81811015620009435785810183015185820160400152820162000925565b81811115620009555783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000981576200098162000b35565b500190565b60008262000998576200099862000b4b565b500490565b600181815b80851115620009de578160001904821115620009c257620009c262000b35565b80851615620009d057918102915b93841c9390800290620009a2565b509250929050565b60006200071360ff84168360008262000a025750600162000716565b8162000a115750600062000716565b816001811462000a2a576002811462000a355762000a55565b600191505062000716565b60ff84111562000a495762000a4962000b35565b50506001821b62000716565b5060208310610133831016604e8410600b841016171562000a7a575081810a62000716565b62000a8683836200099d565b806000190482111562000a9d5762000a9d62000b35565b029392505050565b600081600019048311821515161562000ac25762000ac262000b35565b500290565b60008282101562000adc5762000adc62000b35565b500390565b600181811c9082168062000af657607f821691505b6020821081141562000b1857634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000b305762000b3062000b4b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6140a78062000b716000396000f3fe6080604052600436106103c75760003560e01c806370a08231116101f2578063a457c2d71161010d578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610b46578063f2fde38b14610b66578063fabb0b4f14610b86578063ffb54a9914610b9c57600080fd5b8063dc44b6a014610aaa578063dd62ed3e14610ac0578063ea2f0b3714610b06578063eafb5a3c14610b2657600080fd5b8063c142c5ba116100dc578063c142c5ba14610a48578063c5d2418914610a68578063c860795214610a7e578063c9cf778914610a9457600080fd5b8063a457c2d7146109d8578063a9059cbb146109f8578063a985ceef14610a18578063bf56b37114610a3257600080fd5b80637d5d3944116101855780638da5cb5b116101545780638da5cb5b146109655780638f4590d21461098357806395d89b41146109a3578063a3b84b6b146109b857600080fd5b80637d5d3944146108e057806384530c46146108f657806388790a681461091657806388f820201461092c57600080fd5b8063743942b6116101c1578063743942b6146108745780637598f8bc1461089457806375cb1bd1146108aa57806378109e54146108ca57600080fd5b806370a0823114610809578063715018a61461082957806371b9189c1461083e578063722b62ad1461085e57600080fd5b8063313ce567116102e257806349bd5a5e1161027557806350db71fb1161024457806350db71fb1461079357806352390c02146107b357806362015852146107d35780636ce37fa0146107e957600080fd5b806349bd5a5e146106ea5780634a4fbeec1461070a5780634b01547f1461074357806350af449e1461076357600080fd5b80633bd5d173116102b15780633bd5d173146106745780633ddf65ab14610694578063401aa5c0146106b45780634549b039146106ca57600080fd5b8063313ce567146105f35780633685d4191461061f57806337533c911461063f578063395093511461065457600080fd5b806318160ddd1161035a5780632691bc80116103295780632691bc80146105725780632d4103d6146105935780632d838119146105b35780632dd5efe7146105d357600080fd5b806318160ddd146104fd57806323ab8a931461051257806323b872dd1461053257806325b86edf1461055257600080fd5b80630d45c0e3116103965780630d45c0e3146104705780630e49767d1461049057806313114a9d146104b05780631694505e146104c557600080fd5b80630445b667146103d357806306fdde03146103fc57806309302dc61461041e578063095ea7b31461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e9602c5481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b50610411610bbd565b6040516103f39190613d51565b34801561042a57600080fd5b5061043e610439366004613c01565b610c4f565b005b34801561044c57600080fd5b5061046061045b366004613ae5565b610ca9565b60405190151581526020016103f3565b34801561047c57600080fd5b5061043e61048b366004613bd2565b610cc0565b34801561049c57600080fd5b5061043e6104ab366004613c01565b610d48565b3480156104bc57600080fd5b506015546103e9565b3480156104d157600080fd5b50602d546104e5906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b34801561050957600080fd5b506013546103e9565b34801561051e57600080fd5b5061043e61052d366004613a5e565b610d93565b34801561053e57600080fd5b5061046061054d366004613a1e565b610f35565b34801561055e57600080fd5b5061043e61056d366004613bef565b610f9e565b34801561057e57600080fd5b50602e5461046090600160b01b900460ff1681565b34801561059f57600080fd5b5061043e6105ae366004613bd2565b6110ce565b3480156105bf57600080fd5b506103e96105ce366004613c01565b611159565b3480156105df57600080fd5b5061043e6105ee366004613964565b6111dd565b3480156105ff57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103f3565b34801561062b57600080fd5b5061043e61063a366004613964565b61122b565b34801561064b57600080fd5b5061043e611416565b34801561066057600080fd5b5061046061066f366004613ae5565b611486565b34801561068057600080fd5b5061043e61068f366004613c01565b6114bc565b3480156106a057600080fd5b5061043e6106af366004613b9a565b6115a6565b3480156106c057600080fd5b506103e9601d5481565b3480156106d657600080fd5b506103e96106e5366004613c31565b6115ee565b3480156106f657600080fd5b50602e546104e5906001600160a01b031681565b34801561071657600080fd5b50610460610725366004613964565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561074f57600080fd5b5061043e61075e366004613b9a565b61167b565b34801561076f57600080fd5b5061046061077e366004613964565b60106020526000908152604090205460ff1681565b34801561079f57600080fd5b5061043e6107ae366004613ab8565b6116c3565b3480156107bf57600080fd5b5061043e6107ce366004613964565b611718565b3480156107df57600080fd5b506103e9601b5481565b3480156107f557600080fd5b5061043e610804366004613ca3565b611802565b34801561081557600080fd5b506103e9610824366004613964565b61183d565b34801561083557600080fd5b5061043e61189c565b34801561084a57600080fd5b5061043e610859366004613b10565b611910565b34801561086a57600080fd5b506103e960285481565b34801561088057600080fd5b5061043e61088f366004613964565b6119bd565b3480156108a057600080fd5b506103e960215481565b3480156108b657600080fd5b5061043e6108c53660046139d4565b611a1c565b3480156108d657600080fd5b506103e960185481565b3480156108ec57600080fd5b506103e960195481565b34801561090257600080fd5b5061043e610911366004613b10565b611a85565b34801561092257600080fd5b506103e9601e5481565b34801561093857600080fd5b50610460610947366004613964565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561097157600080fd5b506000546001600160a01b03166104e5565b34801561098f57600080fd5b5061043e61099e366004613c55565b611b2d565b3480156109af57600080fd5b50610411611b77565b3480156109c457600080fd5b5061043e6109d3366004613cd4565b611b86565b3480156109e457600080fd5b506104606109f3366004613ae5565b611bfd565b348015610a0457600080fd5b50610460610a13366004613ae5565b611c4c565b348015610a2457600080fd5b506027546104609060ff1681565b348015610a3e57600080fd5b506103e9600b5481565b348015610a5457600080fd5b5061043e610a63366004613b50565b611c59565b348015610a7457600080fd5b506103e9601c5481565b348015610a8a57600080fd5b506103e9601f5481565b348015610aa057600080fd5b506103e960205481565b348015610ab657600080fd5b506103e9601a5481565b348015610acc57600080fd5b506103e9610adb36600461399c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b1257600080fd5b5061043e610b21366004613964565b611d5b565b348015610b3257600080fd5b5061043e610b41366004613964565b611da6565b348015610b5257600080fd5b5061043e610b61366004613964565b61212c565b348015610b7257600080fd5b5061043e610b81366004613964565b61217a565b348015610b9257600080fd5b506103e9600a5481565b348015610ba857600080fd5b50602e5461046090600160a81b900460ff1681565b606060168054610bcc90613f92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf890613f92565b8015610c455780601f10610c1a57610100808354040283529160200191610c45565b820191906000526020600020905b815481529060010190602001808311610c2857829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c825760405162461bcd60e51b8152600401610c7990613da4565b60405180910390fd5b610ca381610c9d6103e860135461226490919063ffffffff16565b906122a6565b60185550565b6000610cb6338484612384565b5060015b92915050565b6000546001600160a01b03163314610cea5760405162461bcd60e51b8152600401610c7990613da4565b62015180811115610d315760405162461bcd60e51b8152602060048201526011602482015270115e18d959591cc81d1a19481b1a5b5a5d607a1b6044820152606401610c79565b6027805460ff191692151592909217909155602855565b6000546001600160a01b03163314610d725760405162461bcd60e51b8152600401610c7990613da4565b610d8d81610c9d6103e860135461226490919063ffffffff16565b60195550565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b8152600401610c7990613da4565b6107d18210610e255760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610c79565b6012546000908390610e4290600160a01b900460ff16600a613eb1565b610e4c9084613f5c565b610e569190613f5c565b905080610e628661183d565b1015610eb05760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c79565b60005b83811015610f2d57610f1b86868684818110610edf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ef49190613964565b601254610f0c90600160a01b900460ff16600a613eb1565b610f169087613f5c565b6124a8565b80610f2581613fcd565b915050610eb3565b505050505050565b6000610f428484846124a8565b610f948433610f8f85604051806060016040528060288152602001614025602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612b0e565b612384565b5060019392505050565b6000546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610c7990613da4565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110429190613c19565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190613bb6565b50505050565b6000546001600160a01b031633146110f85760405162461bcd60e51b8152600401610c7990613da4565b602e805460ff60a81b1916600160a81b8415150217905561111830611718565b602e5461112d906001600160a01b0316611718565b602e54600160a81b900460ff1680156111465750600b54155b156111555743600b55600a8190555b5050565b60006014548211156111c05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c79565b60006111ca612b48565b90506111d68382612264565b9392505050565b6000546001600160a01b031633146112075760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166000908152600e602052604090205460ff166112bd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c79565b60005b60115481101561115557816001600160a01b0316601182815481106112f557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611404576011805461132090600190613f7b565b8154811061133e57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601180546001600160a01b03909216918390811061137857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560118054806113de57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061140e81613fcd565b9150506112c0565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610c7990613da4565b602e805460ff60b81b1916905560135461146390600290610c9d906103e8612264565b6018556027805460ff1916600117905561148461147f3061183d565b612b6b565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610cb6918590610f8f9086612325565b336000818152600e602052604090205460ff16156115315760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c79565b600061153c83612d4f565b505050506001600160a01b03841660009081526006602052604090205491925061156891905082612d9e565b6001600160a01b03831660009081526006602052604090205560145461158e9082612d9e565b60145560155461159e9084612325565b601555505050565b6000546001600160a01b031633146115d05760405162461bcd60e51b8152600401610c7990613da4565b602e8054911515600160b81b0260ff60b81b19909216919091179055565b60006013548311156116425760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c79565b8161166157600061165284612d4f565b50939550610cba945050505050565b600061166c84612d4f565b50929550610cba945050505050565b6000546001600160a01b031633146116a55760405162461bcd60e51b8152600401610c7990613da4565b602e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166000908152600660205260409020541561179c576001600160a01b03811660009081526006602052604090205461178290611159565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6000546001600160a01b0316331461182c5760405162461bcd60e51b8152600401610c7990613da4565b601e92909255601f55602055602155565b6001600160a01b0381166000908152600e602052604081205460ff161561187a57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610cba90611159565b6000546001600160a01b031633146118c65760405162461bcd60e51b8152600401610c7990613da4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461193a5760405162461bcd60e51b8152600401610c7990613da4565b60005b818110156119b8576001600c600085858581811061196b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119809190613964565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556119b181613fcd565b905061193d565b505050565b6000546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c7990613da4565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611155573d6000803e3d6000fd5b6000546001600160a01b03163314611a465760405162461bcd60e51b8152600401610c7990613da4565b600380546001600160a01b039485166001600160a01b031991821617909155600580549285169282169290921790915560048054929093169116179055565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610c7990613da4565b60005b818110156119b8576001600f6000858585818110611ae057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611af59190613964565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611b2681613fcd565b9050611ab2565b6000546001600160a01b03163314611b575760405162461bcd60e51b8152600401610c7990613da4565b8082601354611b669190613f5c565b611b709190613e4e565b602c555050565b606060178054610bcc90613f92565b6000546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610c7990613da4565b601a849055601c839055601b829055601d85905560268590556023849055602582905560248390556022819055611bf381611bed84818888612325565b90612325565b602a555050505050565b6000610cb63384610f8f8560405180606001604052806025815260200161404d602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612b0e565b6000610cb63384846124a8565b6000546001600160a01b03163314611c835760405162461bcd60e51b8152600401610c7990613da4565b60005b828110156110c857600f6000858584818110611cb257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611cc79190613964565b6001600160a01b0316815260208101919091526040016000205460ff16611d4b578160096000868685818110611d0d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611d229190613964565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b611d5481613fcd565b9050611c86565b6000546001600160a01b03163314611d855760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c7990613da4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1057600080fd5b505afa158015611e24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e489190613980565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e9057600080fd5b505afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec89190613980565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611f0e57600080fd5b505afa158015611f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f469190613980565b90506001600160a01b0381166120ec57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8f57600080fd5b505afa158015611fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc79190613980565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561200f57600080fd5b505afa158015612023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120479190613980565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561208f57600080fd5b505af11580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190613980565b602e80546001600160a01b0319166001600160a01b0392909216919091179055612108565b602e80546001600160a01b0319166001600160a01b0383161790555b50602d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146121565760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b031633146121a45760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166122095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006111d683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612de0565b6000826122b557506000610cba565b60006122c18385613f5c565b9050826122ce8583613e4e565b146111d65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c79565b6000806123328385613e36565b9050838110156111d65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c79565b6001600160a01b0383166123e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c79565b6001600160a01b0382166124475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c79565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661250c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c79565b6001600160a01b03821661256e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c79565b600081116125d05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c79565b6001600160a01b03831660009081526009602052604090205460ff16156126395760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610c79565b6000546001600160a01b0384811691161480159061266557506000546001600160a01b03838116911614155b156126c357602e54600160a81b900460ff166126c35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c79565b602e546000906001600160a01b03858116911614806126ef5750602e546001600160a01b038481169116145b801561273757506001600160a01b0384166000908152600c602052604090205460ff168061273557506001600160a01b0383166000908152600c602052604090205460ff165b155b15612740575060015b6000600b5411801561278457506001600160a01b0383166000908152600d602052604090205460ff1615801561278457506000546001600160a01b03858116911614155b801561279f575043600a54600b5461279c9190613e36565b11155b15612813576018546127b08461183d565b6127ba9084613e36565b11156128135760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610c79565b60275460ff1680156128325750602e546001600160a01b038481169116145b801561285757506001600160a01b03841660009081526010602052604090205460ff16155b156128f9576001600160a01b03841660009081526029602052604090205442116128d25760405162461bcd60e51b815260206004820152602660248201527f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e6044820152652073656c6c7360d01b6064820152608401610c79565b6028546128df9042613e36565b6001600160a01b0385166000908152602960205260409020555b602a54602b55601d54602655602e54600160a81b900460ff16801561292b5750602e546001600160a01b038481169116145b156129b45760195482111561298d5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742047726561746572207468616e206d61782073656c6c206c696d6044820152611a5d60f21b6064820152608401610c79565b6129aa602054611bed601f54601e5461232590919063ffffffff16565b602b556021546026555b6000600b541180156129d4575043600a54600b546129d29190613e36565b115b156129fd576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b54118015612a1d57506000546001600160a01b03858116911614155b8015612a385750600a54600b54612a349190613e36565b4310155b8015612a4d5750602e54600160b81b900460ff165b15612a59576103de602b555b602e54600160b01b900460ff1615612a9c57602e54600160a81b900460ff168015612a915750602e546001600160a01b038581169116145b15612a9c576000602b555b602e54600160a01b900460ff16158015612abf5750602e54600160a81b900460ff165b8015612ad85750602e546001600160a01b038481169116145b15612b02576000612ae83061183d565b9050602c548110612b005750602c54612b0081612e0e565b505b6110c884848484612f5e565b60008184841115612b325760405162461bcd60e51b8152600401610c799190613d51565b506000612b3f8486613f7b565b95945050505050565b6000806000612b5561308a565b9092509050612b648282612264565b9250505090565b602e805460ff60a01b1916600160a01b179055602a54602354600091612ba191600291612b9b91829087906122a6565b90612264565b90506000612baf8383612d9e565b9050612bba81613244565b6023544790600090612bda90612bd1906002612264565b602a5490612d9e565b90506000612bfc6002612b9b84612b9b602354886122a690919063ffffffff16565b90506000612c1983612b9b602554876122a690919063ffffffff16565b90506000612c3684612b9b602454886122a690919063ffffffff16565b90506000612c5385612b9b602254896122a690919063ffffffff16565b9050478015612ca157600354612c739084906001600160a01b0316613402565b600454612c8a9083906001600160a01b0316613402565b600554612ca19085906001600160a01b0316613402565b8815612cb157612cb18986613438565b602e54601254612cce916001600160a01b0390811691168c6124a8565b602e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b5050602e805460ff60a01b19169055505050505050505050505050565b6000806000806000806000806000612d668a61351c565b9250925092506000806000612d848d8686612d7f612b48565b61355e565b919f909e50909c50959a5093985091965092945050505050565b60006111d683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b0e565b60008183612e015760405162461bcd60e51b8152600401610c799190613d51565b506000612b3f8486613e4e565b602e805460ff60a01b1916600160a01b179055602a54602354600091612e3e91600291612b9b91829087906122a6565b90506000612e4c8383612d9e565b9050612e5781613244565b6023544790600090612e6e90612bd1906002612264565b90506000612e906002612b9b84612b9b602354886122a690919063ffffffff16565b90506000612ead83612b9b602554876122a690919063ffffffff16565b90506000612eca84612b9b602454886122a690919063ffffffff16565b90506000612ee785612b9b602254896122a690919063ffffffff16565b9050478015612f3557600354612f079084906001600160a01b0316613402565b600454612f1e9083906001600160a01b0316613402565b600554612f359085906001600160a01b0316613402565b8815612f4557612f458986613438565b5050602e805460ff60a01b191690555050505050505050565b602654602b5482612f745760006026819055602b555b6001600160a01b0386166000908152600e602052604090205460ff168015612fb557506001600160a01b0385166000908152600e602052604090205460ff16155b15612fca57612fc58686866135ae565b613076565b6001600160a01b0386166000908152600e602052604090205460ff1615801561300b57506001600160a01b0385166000908152600e602052604090205460ff165b1561301b57612fc58686866136d4565b6001600160a01b0386166000908152600e602052604090205460ff16801561305b57506001600160a01b0385166000908152600e602052604090205460ff165b1561306b57612fc586868661377d565b6130768686866137f0565b82610f2d57602691909155602b5550505050565b6014546013546000918291825b601154811015613214578260066000601184815481106130c757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613140575081600760006011848154811061311957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561315657601454601354945094505050509091565b6131aa600660006011848154811061317e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d9e565b925061320060076000601184815481106131d457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d9e565b91508061320c81613fcd565b915050613097565b5060135460145461322491612264565b82101561323b576014546013549350935050509091565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061328757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190613980565b8160018151811061333457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602d5461335a9130911684612384565b602d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613393908590600090869030904290600401613dfa565b600060405180830381600087803b1580156133ad57600080fd5b505af11580156133c1573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516133f6929190613dd9565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156119b8573d6000803e3d6000fd5b602d546134509030906001600160a01b031684612384565b602d546001600160a01b031663f305d7198230856000806134796000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135159190613c76565b5050505050565b60008060008061352b85613834565b9050600061353886613851565b905060006135508261354a8986612d9e565b90612d9e565b979296509094509092505050565b600080808061356d88866122a6565b9050600061357b88876122a6565b9050600061358988886122a6565b9050600061359b8261354a8686612d9e565b939b939a50919850919650505050505050565b6000806000806000806135c087612d4f565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506135f29088612d9e565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546136219087612d9e565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136509086612325565b6001600160a01b0389166000908152600660205260409020556136728161386e565b61367c84836138f6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806136e687612d4f565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506137189087612d9e565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461374e9084612325565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136509086612325565b60008060008060008061378f87612d4f565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506137c19088612d9e565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546137189087612d9e565b60008060008060008061380287612d4f565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136219087612d9e565b6000610cba6103e8612b9b602654856122a690919063ffffffff16565b6000610cba6103e8612b9b602b54856122a690919063ffffffff16565b6000613878612b48565b9050600061388683836122a6565b306000908152600660205260409020549091506138a39082612325565b30600090815260066020908152604080832093909355600e9052205460ff16156119b857306000908152600760205260409020546138e19084612325565b30600090815260076020526040902055505050565b6014546139039083612d9e565b6014556015546139139082612325565b6015555050565b60008083601f84011261392b578182fd5b50813567ffffffffffffffff811115613942578182fd5b6020830191508360208260051b850101111561395d57600080fd5b9250929050565b600060208284031215613975578081fd5b81356111d681613ffe565b600060208284031215613991578081fd5b81516111d681613ffe565b600080604083850312156139ae578081fd5b82356139b981613ffe565b915060208301356139c981613ffe565b809150509250929050565b6000806000606084860312156139e8578081fd5b83356139f381613ffe565b92506020840135613a0381613ffe565b91506040840135613a1381613ffe565b809150509250925092565b600080600060608486031215613a32578283fd5b8335613a3d81613ffe565b92506020840135613a4d81613ffe565b929592945050506040919091013590565b60008060008060608587031215613a73578081fd5b8435613a7e81613ffe565b9350602085013567ffffffffffffffff811115613a99578182fd5b613aa58782880161391a565b9598909750949560400135949350505050565b60008060408385031215613aca578182fd5b8235613ad581613ffe565b915060208301356139c981614016565b60008060408385031215613af7578182fd5b8235613b0281613ffe565b946020939093013593505050565b60008060208385031215613b22578182fd5b823567ffffffffffffffff811115613b38578283fd5b613b448582860161391a565b90969095509350505050565b600080600060408486031215613b64578283fd5b833567ffffffffffffffff811115613b7a578384fd5b613b868682870161391a565b9094509250506020840135613a1381614016565b600060208284031215613bab578081fd5b81356111d681614016565b600060208284031215613bc7578081fd5b81516111d681614016565b60008060408385031215613be4578182fd5b8235613b0281614016565b600080604083850312156139ae578182fd5b600060208284031215613c12578081fd5b5035919050565b600060208284031215613c2a578081fd5b5051919050565b60008060408385031215613c43578182fd5b8235915060208301356139c981614016565b60008060408385031215613c67578182fd5b50508035926020909101359150565b600080600060608486031215613c8a578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613cb8578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613ceb578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b83811015613d465781516001600160a01b031687529582019590820190600101613d21565b509495945050505050565b6000602080835283518082850152825b81811015613d7d57858101830151858201604001528201613d61565b81811115613d8e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613df26040830184613d0e565b949350505050565b85815284602082015260a060408201526000613e1960a0830186613d0e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613e4957613e49613fe8565b500190565b600082613e6957634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613ea9578160001904821115613e8f57613e8f613fe8565b80851615613e9c57918102915b93841c9390800290613e73565b509250929050565b60006111d660ff841683600082613eca57506001610cba565b81613ed757506000610cba565b8160018114613eed5760028114613ef757613f13565b6001915050610cba565b60ff841115613f0857613f08613fe8565b50506001821b610cba565b5060208310610133831016604e8410600b8410161715613f36575081810a610cba565b613f408383613e6e565b8060001904821115613f5457613f54613fe8565b029392505050565b6000816000190483118215151615613f7657613f76613fe8565b500290565b600082821015613f8d57613f8d613fe8565b500390565b600181811c90821680613fa657607f821691505b60208210811415613fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613fe157613fe1613fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461401357600080fd5b50565b801515811461401357600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e0afdd4aaeb5d711ef09a3ad62a2fdac4de5b8aa83eb509cb7c2bff8d88e70664736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806370a08231116101f2578063a457c2d71161010d578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610b46578063f2fde38b14610b66578063fabb0b4f14610b86578063ffb54a9914610b9c57600080fd5b8063dc44b6a014610aaa578063dd62ed3e14610ac0578063ea2f0b3714610b06578063eafb5a3c14610b2657600080fd5b8063c142c5ba116100dc578063c142c5ba14610a48578063c5d2418914610a68578063c860795214610a7e578063c9cf778914610a9457600080fd5b8063a457c2d7146109d8578063a9059cbb146109f8578063a985ceef14610a18578063bf56b37114610a3257600080fd5b80637d5d3944116101855780638da5cb5b116101545780638da5cb5b146109655780638f4590d21461098357806395d89b41146109a3578063a3b84b6b146109b857600080fd5b80637d5d3944146108e057806384530c46146108f657806388790a681461091657806388f820201461092c57600080fd5b8063743942b6116101c1578063743942b6146108745780637598f8bc1461089457806375cb1bd1146108aa57806378109e54146108ca57600080fd5b806370a0823114610809578063715018a61461082957806371b9189c1461083e578063722b62ad1461085e57600080fd5b8063313ce567116102e257806349bd5a5e1161027557806350db71fb1161024457806350db71fb1461079357806352390c02146107b357806362015852146107d35780636ce37fa0146107e957600080fd5b806349bd5a5e146106ea5780634a4fbeec1461070a5780634b01547f1461074357806350af449e1461076357600080fd5b80633bd5d173116102b15780633bd5d173146106745780633ddf65ab14610694578063401aa5c0146106b45780634549b039146106ca57600080fd5b8063313ce567146105f35780633685d4191461061f57806337533c911461063f578063395093511461065457600080fd5b806318160ddd1161035a5780632691bc80116103295780632691bc80146105725780632d4103d6146105935780632d838119146105b35780632dd5efe7146105d357600080fd5b806318160ddd146104fd57806323ab8a931461051257806323b872dd1461053257806325b86edf1461055257600080fd5b80630d45c0e3116103965780630d45c0e3146104705780630e49767d1461049057806313114a9d146104b05780631694505e146104c557600080fd5b80630445b667146103d357806306fdde03146103fc57806309302dc61461041e578063095ea7b31461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e9602c5481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b50610411610bbd565b6040516103f39190613d51565b34801561042a57600080fd5b5061043e610439366004613c01565b610c4f565b005b34801561044c57600080fd5b5061046061045b366004613ae5565b610ca9565b60405190151581526020016103f3565b34801561047c57600080fd5b5061043e61048b366004613bd2565b610cc0565b34801561049c57600080fd5b5061043e6104ab366004613c01565b610d48565b3480156104bc57600080fd5b506015546103e9565b3480156104d157600080fd5b50602d546104e5906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b34801561050957600080fd5b506013546103e9565b34801561051e57600080fd5b5061043e61052d366004613a5e565b610d93565b34801561053e57600080fd5b5061046061054d366004613a1e565b610f35565b34801561055e57600080fd5b5061043e61056d366004613bef565b610f9e565b34801561057e57600080fd5b50602e5461046090600160b01b900460ff1681565b34801561059f57600080fd5b5061043e6105ae366004613bd2565b6110ce565b3480156105bf57600080fd5b506103e96105ce366004613c01565b611159565b3480156105df57600080fd5b5061043e6105ee366004613964565b6111dd565b3480156105ff57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103f3565b34801561062b57600080fd5b5061043e61063a366004613964565b61122b565b34801561064b57600080fd5b5061043e611416565b34801561066057600080fd5b5061046061066f366004613ae5565b611486565b34801561068057600080fd5b5061043e61068f366004613c01565b6114bc565b3480156106a057600080fd5b5061043e6106af366004613b9a565b6115a6565b3480156106c057600080fd5b506103e9601d5481565b3480156106d657600080fd5b506103e96106e5366004613c31565b6115ee565b3480156106f657600080fd5b50602e546104e5906001600160a01b031681565b34801561071657600080fd5b50610460610725366004613964565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561074f57600080fd5b5061043e61075e366004613b9a565b61167b565b34801561076f57600080fd5b5061046061077e366004613964565b60106020526000908152604090205460ff1681565b34801561079f57600080fd5b5061043e6107ae366004613ab8565b6116c3565b3480156107bf57600080fd5b5061043e6107ce366004613964565b611718565b3480156107df57600080fd5b506103e9601b5481565b3480156107f557600080fd5b5061043e610804366004613ca3565b611802565b34801561081557600080fd5b506103e9610824366004613964565b61183d565b34801561083557600080fd5b5061043e61189c565b34801561084a57600080fd5b5061043e610859366004613b10565b611910565b34801561086a57600080fd5b506103e960285481565b34801561088057600080fd5b5061043e61088f366004613964565b6119bd565b3480156108a057600080fd5b506103e960215481565b3480156108b657600080fd5b5061043e6108c53660046139d4565b611a1c565b3480156108d657600080fd5b506103e960185481565b3480156108ec57600080fd5b506103e960195481565b34801561090257600080fd5b5061043e610911366004613b10565b611a85565b34801561092257600080fd5b506103e9601e5481565b34801561093857600080fd5b50610460610947366004613964565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561097157600080fd5b506000546001600160a01b03166104e5565b34801561098f57600080fd5b5061043e61099e366004613c55565b611b2d565b3480156109af57600080fd5b50610411611b77565b3480156109c457600080fd5b5061043e6109d3366004613cd4565b611b86565b3480156109e457600080fd5b506104606109f3366004613ae5565b611bfd565b348015610a0457600080fd5b50610460610a13366004613ae5565b611c4c565b348015610a2457600080fd5b506027546104609060ff1681565b348015610a3e57600080fd5b506103e9600b5481565b348015610a5457600080fd5b5061043e610a63366004613b50565b611c59565b348015610a7457600080fd5b506103e9601c5481565b348015610a8a57600080fd5b506103e9601f5481565b348015610aa057600080fd5b506103e960205481565b348015610ab657600080fd5b506103e9601a5481565b348015610acc57600080fd5b506103e9610adb36600461399c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b1257600080fd5b5061043e610b21366004613964565b611d5b565b348015610b3257600080fd5b5061043e610b41366004613964565b611da6565b348015610b5257600080fd5b5061043e610b61366004613964565b61212c565b348015610b7257600080fd5b5061043e610b81366004613964565b61217a565b348015610b9257600080fd5b506103e9600a5481565b348015610ba857600080fd5b50602e5461046090600160a81b900460ff1681565b606060168054610bcc90613f92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf890613f92565b8015610c455780601f10610c1a57610100808354040283529160200191610c45565b820191906000526020600020905b815481529060010190602001808311610c2857829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c825760405162461bcd60e51b8152600401610c7990613da4565b60405180910390fd5b610ca381610c9d6103e860135461226490919063ffffffff16565b906122a6565b60185550565b6000610cb6338484612384565b5060015b92915050565b6000546001600160a01b03163314610cea5760405162461bcd60e51b8152600401610c7990613da4565b62015180811115610d315760405162461bcd60e51b8152602060048201526011602482015270115e18d959591cc81d1a19481b1a5b5a5d607a1b6044820152606401610c79565b6027805460ff191692151592909217909155602855565b6000546001600160a01b03163314610d725760405162461bcd60e51b8152600401610c7990613da4565b610d8d81610c9d6103e860135461226490919063ffffffff16565b60195550565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b8152600401610c7990613da4565b6107d18210610e255760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610c79565b6012546000908390610e4290600160a01b900460ff16600a613eb1565b610e4c9084613f5c565b610e569190613f5c565b905080610e628661183d565b1015610eb05760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c79565b60005b83811015610f2d57610f1b86868684818110610edf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ef49190613964565b601254610f0c90600160a01b900460ff16600a613eb1565b610f169087613f5c565b6124a8565b80610f2581613fcd565b915050610eb3565b505050505050565b6000610f428484846124a8565b610f948433610f8f85604051806060016040528060288152602001614025602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612b0e565b612384565b5060019392505050565b6000546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610c7990613da4565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561100a57600080fd5b505afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110429190613c19565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190613bb6565b50505050565b6000546001600160a01b031633146110f85760405162461bcd60e51b8152600401610c7990613da4565b602e805460ff60a81b1916600160a81b8415150217905561111830611718565b602e5461112d906001600160a01b0316611718565b602e54600160a81b900460ff1680156111465750600b54155b156111555743600b55600a8190555b5050565b60006014548211156111c05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c79565b60006111ca612b48565b90506111d68382612264565b9392505050565b6000546001600160a01b031633146112075760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166000908152600e602052604090205460ff166112bd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c79565b60005b60115481101561115557816001600160a01b0316601182815481106112f557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611404576011805461132090600190613f7b565b8154811061133e57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601180546001600160a01b03909216918390811061137857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560118054806113de57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061140e81613fcd565b9150506112c0565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610c7990613da4565b602e805460ff60b81b1916905560135461146390600290610c9d906103e8612264565b6018556027805460ff1916600117905561148461147f3061183d565b612b6b565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610cb6918590610f8f9086612325565b336000818152600e602052604090205460ff16156115315760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c79565b600061153c83612d4f565b505050506001600160a01b03841660009081526006602052604090205491925061156891905082612d9e565b6001600160a01b03831660009081526006602052604090205560145461158e9082612d9e565b60145560155461159e9084612325565b601555505050565b6000546001600160a01b031633146115d05760405162461bcd60e51b8152600401610c7990613da4565b602e8054911515600160b81b0260ff60b81b19909216919091179055565b60006013548311156116425760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c79565b8161166157600061165284612d4f565b50939550610cba945050505050565b600061166c84612d4f565b50929550610cba945050505050565b6000546001600160a01b031633146116a55760405162461bcd60e51b8152600401610c7990613da4565b602e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166000908152600660205260409020541561179c576001600160a01b03811660009081526006602052604090205461178290611159565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6000546001600160a01b0316331461182c5760405162461bcd60e51b8152600401610c7990613da4565b601e92909255601f55602055602155565b6001600160a01b0381166000908152600e602052604081205460ff161561187a57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610cba90611159565b6000546001600160a01b031633146118c65760405162461bcd60e51b8152600401610c7990613da4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461193a5760405162461bcd60e51b8152600401610c7990613da4565b60005b818110156119b8576001600c600085858581811061196b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119809190613964565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556119b181613fcd565b905061193d565b505050565b6000546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c7990613da4565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611155573d6000803e3d6000fd5b6000546001600160a01b03163314611a465760405162461bcd60e51b8152600401610c7990613da4565b600380546001600160a01b039485166001600160a01b031991821617909155600580549285169282169290921790915560048054929093169116179055565b6000546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610c7990613da4565b60005b818110156119b8576001600f6000858585818110611ae057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611af59190613964565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611b2681613fcd565b9050611ab2565b6000546001600160a01b03163314611b575760405162461bcd60e51b8152600401610c7990613da4565b8082601354611b669190613f5c565b611b709190613e4e565b602c555050565b606060178054610bcc90613f92565b6000546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610c7990613da4565b601a849055601c839055601b829055601d85905560268590556023849055602582905560248390556022819055611bf381611bed84818888612325565b90612325565b602a555050505050565b6000610cb63384610f8f8560405180606001604052806025815260200161404d602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612b0e565b6000610cb63384846124a8565b6000546001600160a01b03163314611c835760405162461bcd60e51b8152600401610c7990613da4565b60005b828110156110c857600f6000858584818110611cb257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611cc79190613964565b6001600160a01b0316815260208101919091526040016000205460ff16611d4b578160096000868685818110611d0d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611d229190613964565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b611d5481613fcd565b9050611c86565b6000546001600160a01b03163314611d855760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c7990613da4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1057600080fd5b505afa158015611e24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e489190613980565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e9057600080fd5b505afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec89190613980565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611f0e57600080fd5b505afa158015611f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f469190613980565b90506001600160a01b0381166120ec57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8f57600080fd5b505afa158015611fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc79190613980565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561200f57600080fd5b505afa158015612023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120479190613980565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561208f57600080fd5b505af11580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190613980565b602e80546001600160a01b0319166001600160a01b0392909216919091179055612108565b602e80546001600160a01b0319166001600160a01b0383161790555b50602d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146121565760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b031633146121a45760405162461bcd60e51b8152600401610c7990613da4565b6001600160a01b0381166122095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006111d683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612de0565b6000826122b557506000610cba565b60006122c18385613f5c565b9050826122ce8583613e4e565b146111d65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c79565b6000806123328385613e36565b9050838110156111d65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c79565b6001600160a01b0383166123e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c79565b6001600160a01b0382166124475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c79565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661250c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c79565b6001600160a01b03821661256e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c79565b600081116125d05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c79565b6001600160a01b03831660009081526009602052604090205460ff16156126395760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610c79565b6000546001600160a01b0384811691161480159061266557506000546001600160a01b03838116911614155b156126c357602e54600160a81b900460ff166126c35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c79565b602e546000906001600160a01b03858116911614806126ef5750602e546001600160a01b038481169116145b801561273757506001600160a01b0384166000908152600c602052604090205460ff168061273557506001600160a01b0383166000908152600c602052604090205460ff165b155b15612740575060015b6000600b5411801561278457506001600160a01b0383166000908152600d602052604090205460ff1615801561278457506000546001600160a01b03858116911614155b801561279f575043600a54600b5461279c9190613e36565b11155b15612813576018546127b08461183d565b6127ba9084613e36565b11156128135760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610c79565b60275460ff1680156128325750602e546001600160a01b038481169116145b801561285757506001600160a01b03841660009081526010602052604090205460ff16155b156128f9576001600160a01b03841660009081526029602052604090205442116128d25760405162461bcd60e51b815260206004820152602660248201527f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e6044820152652073656c6c7360d01b6064820152608401610c79565b6028546128df9042613e36565b6001600160a01b0385166000908152602960205260409020555b602a54602b55601d54602655602e54600160a81b900460ff16801561292b5750602e546001600160a01b038481169116145b156129b45760195482111561298d5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742047726561746572207468616e206d61782073656c6c206c696d6044820152611a5d60f21b6064820152608401610c79565b6129aa602054611bed601f54601e5461232590919063ffffffff16565b602b556021546026555b6000600b541180156129d4575043600a54600b546129d29190613e36565b115b156129fd576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b54118015612a1d57506000546001600160a01b03858116911614155b8015612a385750600a54600b54612a349190613e36565b4310155b8015612a4d5750602e54600160b81b900460ff165b15612a59576103de602b555b602e54600160b01b900460ff1615612a9c57602e54600160a81b900460ff168015612a915750602e546001600160a01b038581169116145b15612a9c576000602b555b602e54600160a01b900460ff16158015612abf5750602e54600160a81b900460ff165b8015612ad85750602e546001600160a01b038481169116145b15612b02576000612ae83061183d565b9050602c548110612b005750602c54612b0081612e0e565b505b6110c884848484612f5e565b60008184841115612b325760405162461bcd60e51b8152600401610c799190613d51565b506000612b3f8486613f7b565b95945050505050565b6000806000612b5561308a565b9092509050612b648282612264565b9250505090565b602e805460ff60a01b1916600160a01b179055602a54602354600091612ba191600291612b9b91829087906122a6565b90612264565b90506000612baf8383612d9e565b9050612bba81613244565b6023544790600090612bda90612bd1906002612264565b602a5490612d9e565b90506000612bfc6002612b9b84612b9b602354886122a690919063ffffffff16565b90506000612c1983612b9b602554876122a690919063ffffffff16565b90506000612c3684612b9b602454886122a690919063ffffffff16565b90506000612c5385612b9b602254896122a690919063ffffffff16565b9050478015612ca157600354612c739084906001600160a01b0316613402565b600454612c8a9083906001600160a01b0316613402565b600554612ca19085906001600160a01b0316613402565b8815612cb157612cb18986613438565b602e54601254612cce916001600160a01b0390811691168c6124a8565b602e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b5050602e805460ff60a01b19169055505050505050505050505050565b6000806000806000806000806000612d668a61351c565b9250925092506000806000612d848d8686612d7f612b48565b61355e565b919f909e50909c50959a5093985091965092945050505050565b60006111d683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b0e565b60008183612e015760405162461bcd60e51b8152600401610c799190613d51565b506000612b3f8486613e4e565b602e805460ff60a01b1916600160a01b179055602a54602354600091612e3e91600291612b9b91829087906122a6565b90506000612e4c8383612d9e565b9050612e5781613244565b6023544790600090612e6e90612bd1906002612264565b90506000612e906002612b9b84612b9b602354886122a690919063ffffffff16565b90506000612ead83612b9b602554876122a690919063ffffffff16565b90506000612eca84612b9b602454886122a690919063ffffffff16565b90506000612ee785612b9b602254896122a690919063ffffffff16565b9050478015612f3557600354612f079084906001600160a01b0316613402565b600454612f1e9083906001600160a01b0316613402565b600554612f359085906001600160a01b0316613402565b8815612f4557612f458986613438565b5050602e805460ff60a01b191690555050505050505050565b602654602b5482612f745760006026819055602b555b6001600160a01b0386166000908152600e602052604090205460ff168015612fb557506001600160a01b0385166000908152600e602052604090205460ff16155b15612fca57612fc58686866135ae565b613076565b6001600160a01b0386166000908152600e602052604090205460ff1615801561300b57506001600160a01b0385166000908152600e602052604090205460ff165b1561301b57612fc58686866136d4565b6001600160a01b0386166000908152600e602052604090205460ff16801561305b57506001600160a01b0385166000908152600e602052604090205460ff165b1561306b57612fc586868661377d565b6130768686866137f0565b82610f2d57602691909155602b5550505050565b6014546013546000918291825b601154811015613214578260066000601184815481106130c757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613140575081600760006011848154811061311957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561315657601454601354945094505050509091565b6131aa600660006011848154811061317e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d9e565b925061320060076000601184815481106131d457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d9e565b91508061320c81613fcd565b915050613097565b5060135460145461322491612264565b82101561323b576014546013549350935050509091565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061328757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190613980565b8160018151811061333457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602d5461335a9130911684612384565b602d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613393908590600090869030904290600401613dfa565b600060405180830381600087803b1580156133ad57600080fd5b505af11580156133c1573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516133f6929190613dd9565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156119b8573d6000803e3d6000fd5b602d546134509030906001600160a01b031684612384565b602d546001600160a01b031663f305d7198230856000806134796000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135159190613c76565b5050505050565b60008060008061352b85613834565b9050600061353886613851565b905060006135508261354a8986612d9e565b90612d9e565b979296509094509092505050565b600080808061356d88866122a6565b9050600061357b88876122a6565b9050600061358988886122a6565b9050600061359b8261354a8686612d9e565b939b939a50919850919650505050505050565b6000806000806000806135c087612d4f565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506135f29088612d9e565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546136219087612d9e565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136509086612325565b6001600160a01b0389166000908152600660205260409020556136728161386e565b61367c84836138f6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806136e687612d4f565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506137189087612d9e565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461374e9084612325565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136509086612325565b60008060008060008061378f87612d4f565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506137c19088612d9e565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546137189087612d9e565b60008060008060008061380287612d4f565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136219087612d9e565b6000610cba6103e8612b9b602654856122a690919063ffffffff16565b6000610cba6103e8612b9b602b54856122a690919063ffffffff16565b6000613878612b48565b9050600061388683836122a6565b306000908152600660205260409020549091506138a39082612325565b30600090815260066020908152604080832093909355600e9052205460ff16156119b857306000908152600760205260409020546138e19084612325565b30600090815260076020526040902055505050565b6014546139039083612d9e565b6014556015546139139082612325565b6015555050565b60008083601f84011261392b578182fd5b50813567ffffffffffffffff811115613942578182fd5b6020830191508360208260051b850101111561395d57600080fd5b9250929050565b600060208284031215613975578081fd5b81356111d681613ffe565b600060208284031215613991578081fd5b81516111d681613ffe565b600080604083850312156139ae578081fd5b82356139b981613ffe565b915060208301356139c981613ffe565b809150509250929050565b6000806000606084860312156139e8578081fd5b83356139f381613ffe565b92506020840135613a0381613ffe565b91506040840135613a1381613ffe565b809150509250925092565b600080600060608486031215613a32578283fd5b8335613a3d81613ffe565b92506020840135613a4d81613ffe565b929592945050506040919091013590565b60008060008060608587031215613a73578081fd5b8435613a7e81613ffe565b9350602085013567ffffffffffffffff811115613a99578182fd5b613aa58782880161391a565b9598909750949560400135949350505050565b60008060408385031215613aca578182fd5b8235613ad581613ffe565b915060208301356139c981614016565b60008060408385031215613af7578182fd5b8235613b0281613ffe565b946020939093013593505050565b60008060208385031215613b22578182fd5b823567ffffffffffffffff811115613b38578283fd5b613b448582860161391a565b90969095509350505050565b600080600060408486031215613b64578283fd5b833567ffffffffffffffff811115613b7a578384fd5b613b868682870161391a565b9094509250506020840135613a1381614016565b600060208284031215613bab578081fd5b81356111d681614016565b600060208284031215613bc7578081fd5b81516111d681614016565b60008060408385031215613be4578182fd5b8235613b0281614016565b600080604083850312156139ae578182fd5b600060208284031215613c12578081fd5b5035919050565b600060208284031215613c2a578081fd5b5051919050565b60008060408385031215613c43578182fd5b8235915060208301356139c981614016565b60008060408385031215613c67578182fd5b50508035926020909101359150565b600080600060608486031215613c8a578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613cb8578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613ceb578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b83811015613d465781516001600160a01b031687529582019590820190600101613d21565b509495945050505050565b6000602080835283518082850152825b81811015613d7d57858101830151858201604001528201613d61565b81811115613d8e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613df26040830184613d0e565b949350505050565b85815284602082015260a060408201526000613e1960a0830186613d0e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613e4957613e49613fe8565b500190565b600082613e6957634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613ea9578160001904821115613e8f57613e8f613fe8565b80851615613e9c57918102915b93841c9390800290613e73565b509250929050565b60006111d660ff841683600082613eca57506001610cba565b81613ed757506000610cba565b8160018114613eed5760028114613ef757613f13565b6001915050610cba565b60ff841115613f0857613f08613fe8565b50506001821b610cba565b5060208310610133831016604e8410600b8410161715613f36575081810a610cba565b613f408383613e6e565b8060001904821115613f5457613f54613fe8565b029392505050565b6000816000190483118215151615613f7657613f76613fe8565b500290565b600082821015613f8d57613f8d613fe8565b500390565b600181811c90821680613fa657607f821691505b60208210811415613fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613fe157613fe1613fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461401357600080fd5b50565b801515811461401357600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e0afdd4aaeb5d711ef09a3ad62a2fdac4de5b8aa83eb509cb7c2bff8d88e70664736f6c63430008040033

Deployed Bytecode Sourcemap

14399:27227:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16968:56;;;;;;;;;;;;;;;;;;;19688:25:1;;;19676:2;19661:18;16968:56:0;;;;;;;;19886:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39490:175::-;;;;;;;;;;-1:-1:-1;39490:175:0;;;;;:::i;:::-;;:::i;:::-;;20798:161;;;;;;;;;;-1:-1:-1;20798:161:0;;;;;:::i;:::-;;:::i;:::-;;;10543:14:1;;10536:22;10518:41;;10506:2;10491:18;20798:161:0;10473:92:1;36001:244:0;;;;;;;;;;-1:-1:-1;36001:244:0;;;;;:::i;:::-;;:::i;39673:171::-;;;;;;;;;;-1:-1:-1;39673:171:0;;;;;:::i;:::-;;:::i;21919:87::-;;;;;;;;;;-1:-1:-1;21988:10:0;;21919:87;;17044:41;;;;;;;;;;-1:-1:-1;17044:41:0;;;;-1:-1:-1;;;;;17044:41:0;;;;;;-1:-1:-1;;;;;9134:32:1;;;9116:51;;9104:2;9089:18;17044:41:0;9071:102:1;20163:95:0;;;;;;;;;;-1:-1:-1;20243:7:0;;20163:95;;40159:511;;;;;;;;;;-1:-1:-1;40159:511:0;;;;;:::i;:::-;;:::i;20967:313::-;;;;;;;;;;-1:-1:-1;20967:313:0;;;;;:::i;:::-;;:::i;39305:177::-;;;;;;;;;;-1:-1:-1;39305:177:0;;;;;:::i;:::-;;:::i;17195:34::-;;;;;;;;;;-1:-1:-1;17195:34:0;;;;-1:-1:-1;;;17195:34:0;;;;;;18540:337;;;;;;;;;;-1:-1:-1;18540:337:0;;;;;:::i;:::-;;:::i;22851:253::-;;;;;;;;;;-1:-1:-1;22851:253:0;;;;;:::i;:::-;;:::i;39852:113::-;;;;;;;;;;-1:-1:-1;39852:113:0;;;;;:::i;:::-;;:::i;20072:83::-;;;;;;;;;;-1:-1:-1;20138:9:0;;-1:-1:-1;;;20138:9:0;;;;20072:83;;20820:4:1;20808:17;;;20790:36;;20778:2;20763:18;20072:83:0;20745:87:1;23383:479:0;;;;;;;;;;-1:-1:-1;23383:479:0;;;;;:::i;:::-;;:::i;19109:238::-;;;;;;;;;;;;;:::i;21288:218::-;;;;;;;;;;-1:-1:-1;21288:218:0;;;;;:::i;:::-;;:::i;22018:377::-;;;;;;;;;;-1:-1:-1;22018:377:0;;;;;:::i;:::-;;:::i;19001:96::-;;;;;;;;;;-1:-1:-1;19001:96:0;;;;;:::i;:::-;;:::i;16169:36::-;;;;;;;;;;;;;;;;22407:436;;;;;;;;;;-1:-1:-1;22407:436:0;;;;;:::i;:::-;;:::i;17092:28::-;;;;;;;;;;-1:-1:-1;17092:28:0;;;;-1:-1:-1;;;;;17092:28:0;;;38423:106;;;;;;;;;;-1:-1:-1;38423:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;38503:18:0;38479:4;38503:18;;;:9;:18;;;;;;;;;38423:106;18891:102;;;;;;;;;;-1:-1:-1;18891:102:0;;;;;:::i;:::-;;:::i;15406:49::-;;;;;;;;;;-1:-1:-1;15406:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38815:129;;;;;;;;;;-1:-1:-1;38815:129:0;;;;;:::i;:::-;;:::i;23112:263::-;;;;;;;;;;-1:-1:-1;23112:263:0;;;;;:::i;:::-;;:::i;16082:30::-;;;;;;;;;;;;;;;;41283:299;;;;;;;;;;-1:-1:-1;41283:299:0;;;;;:::i;:::-;;:::i;20266:198::-;;;;;;;;;;-1:-1:-1;20266:198:0;;;;;:::i;:::-;;:::i;6030:148::-;;;;;;;;;;;;;:::i;37667:198::-;;;;;;;;;;-1:-1:-1;37667:198:0;;;;;:::i;:::-;;:::i;16701:46::-;;;;;;;;;;;;;;;;39162:135;;;;;;;;;;-1:-1:-1;39162:135:0;;;;;:::i;:::-;;:::i;16356:37::-;;;;;;;;;;;;;;;;38005:270;;;;;;;;;;-1:-1:-1;38005:270:0;;;;;:::i;:::-;;:::i;15901:56::-;;;;;;;;;;;;;;;;15964:55;;;;;;;;;;;;;;;;38958:188;;;;;;;;;;-1:-1:-1;38958:188:0;;;;;:::i;:::-;;:::i;16214:37::-;;;;;;;;;;;;;;;;21791:120;;;;;;;;;;-1:-1:-1;21791:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21883:20:0;21859:4;21883:20;;;:11;:20;;;;;;;;;21791:120;5805:79;;;;;;;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;5870:6:0;5805:79;;39973:178;;;;;;;;;;-1:-1:-1;39973:178:0;;;;;:::i;:::-;;:::i;19977:87::-;;;;;;;;;;;;;:::i;40679:596::-;;;;;;;;;;-1:-1:-1;40679:596:0;;;;;:::i;:::-;;:::i;21514:269::-;;;;;;;;;;-1:-1:-1;21514:269:0;;;;;:::i;:::-;;:::i;20472:167::-;;;;;;;;;;-1:-1:-1;20472:167:0;;;;;:::i;:::-;;:::i;16659:35::-;;;;;;;;;;-1:-1:-1;16659:35:0;;;;;;;;15141:29;;;;;;;;;;;;;;;;38541:266;;;;;;;;;;-1:-1:-1;38541:266:0;;;;;:::i;:::-;;:::i;16123:36::-;;;;;;;;;;;;;;;;16258:38;;;;;;;;;;;;;;;;16310:31;;;;;;;;;;;;;;;;16035:35;;;;;;;;;;;;;;;;20647:143;;;;;;;;;;-1:-1:-1;20647:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20755:18:0;;;20728:7;20755:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20647:143;37883:110;;;;;;;;;;-1:-1:-1;37883:110:0;;;;;:::i;:::-;;:::i;19355:523::-;;;;;;;;;;-1:-1:-1;19355:523:0;;;;;:::i;:::-;;:::i;37547:112::-;;;;;;;;;;-1:-1:-1;37547:112:0;;;;;:::i;:::-;;:::i;6186:244::-;;;;;;;;;;-1:-1:-1;6186:244:0;;;;;:::i;:::-;;:::i;15105:29::-;;;;;;;;;;;;;;;;17157:31;;;;;;;;;;-1:-1:-1;17157:31:0;;;;-1:-1:-1;;;17157:31:0;;;;;;19886:83;19923:13;19956:5;19949:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19886:83;:::o;39490:175::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;;;;;;;;;39611:46:::1;39633:23;39611:17;39623:4;39611:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;39593:15;:64:::0;-1:-1:-1;39490:175:0:o;20798:161::-;20873:4;20890:39;189:10;20913:7;20922:6;20890:8;:39::i;:::-;-1:-1:-1;20947:4:0;20798:161;;;;;:::o;36001:244::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36123:8:::1;36108:11;:23;;36100:53;;;::::0;-1:-1:-1;;;36100:53:0;;12019:2:1;36100:53:0::1;::::0;::::1;12001:21:1::0;12058:2;12038:18;;;12031:30;-1:-1:-1;;;12077:18:1;;;12070:47;12134:18;;36100:53:0::1;11991:167:1::0;36100:53:0::1;36164:15;:27:::0;;-1:-1:-1;;36164:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36202:21:::1;:35:::0;36001:244::o;39673:171::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39790:46:::1;39812:23;39790:17;39802:4;39790:7;;:11;;:17;;;;:::i;:46::-;39774:13;:62:::0;-1:-1:-1;39673:171:0:o;40159:511::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;40306:4:::1;40287:23:::0;::::1;40279:81;;;::::0;-1:-1:-1;;;40279:81:0;;15824:2:1;40279:81:0::1;::::0;::::1;15806:21:1::0;15863:2;15843:18;;;15836:30;15902:34;15882:18;;;15875:62;-1:-1:-1;;;15953:18:1;;;15946:44;16007:19;;40279:81:0::1;15796:236:1::0;40279:81:0::1;40423:9;::::0;40396:12:::1;::::0;40435:9;;40419:13:::1;::::0;-1:-1:-1;;;40423:9:0;::::1;;;40419:2;:13;:::i;:::-;40411:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;40396:55;;40491:4;40472:15;40482:4;40472:9;:15::i;:::-;:23;;40464:63;;;::::0;-1:-1:-1;;;40464:63:0;;15108:2:1;40464:63:0::1;::::0;::::1;15090:21:1::0;15147:2;15127:18;;;15120:30;15186:29;15166:18;;;15159:57;15233:18;;40464:63:0::1;15080:177:1::0;40464:63:0::1;40544:6;40540:123;40554:20:::0;;::::1;40540:123;;;40595:52;40605:4;40610:9;;40620:1;40610:12;;;;;-1:-1:-1::0;;;40610:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40636:9;::::0;40632:13:::1;::::0;-1:-1:-1;;;40636:9:0;::::1;;;40632:2;:13;:::i;:::-;40624:21;::::0;:6;:21:::1;:::i;:::-;40595:9;:52::i;:::-;40576:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40540:123;;;;6009:1;40159:511:::0;;;;:::o;20967:313::-;21065:4;21082:36;21092:6;21100:9;21111:6;21082:9;:36::i;:::-;21129:121;21138:6;189:10;21160:89;21198:6;21160:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21160:19:0;;;;;;:11;:19;;;;;;;;189:10;21160:33;;;;;;;;;;:37;:89::i;:::-;21129:8;:121::i;:::-;-1:-1:-1;21268:4:0;20967:313;;;;;:::o;39305:177::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39406:30:::1;::::0;-1:-1:-1;;;39406:30:0;;39430:4:::1;39406:30;::::0;::::1;9116:51:1::0;39388:15:0::1;::::0;-1:-1:-1;;;;;39406:15:0;::::1;::::0;::::1;::::0;9089:18:1;;39406:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39447:27;::::0;-1:-1:-1;;;39447:27:0;;-1:-1:-1;;;;;9679:32:1;;;39447:27:0::1;::::0;::::1;9661:51:1::0;9728:18;;;9721:34;;;39388:48:0;;-1:-1:-1;39447:14:0;;::::1;::::0;::::1;::::0;9634:18:1;;39447:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6009:1;39305:177:::0;;:::o;18540:337::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18627:11:::1;:21:::0;;-1:-1:-1;;;;18627:21:0::1;-1:-1:-1::0;;;18627:21:0;::::1;;;;::::0;;18659:32:::1;18685:4;18659:17;:32::i;:::-;18720:13;::::0;18702:32:::1;::::0;-1:-1:-1;;;;;18720:13:0::1;18702:17;:32::i;:::-;18748:11;::::0;-1:-1:-1;;;18748:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18763:10:0::1;::::0;:15;18748:30:::1;18745:125;;;18807:12;18794:10;:25:::0;18834:10:::1;:24:::0;;;18745:125:::1;18540:337:::0;;:::o;22851:253::-;22917:7;22956;;22945;:18;;22937:73;;;;-1:-1:-1;;;22937:73:0;;13175:2:1;22937:73:0;;;13157:21:1;13214:2;13194:18;;;13187:30;13253:34;13233:18;;;13226:62;-1:-1:-1;;;13304:18:1;;;13297:40;13354:19;;22937:73:0;13147:232:1;22937:73:0;23021:19;23044:10;:8;:10::i;:::-;23021:33;-1:-1:-1;23072:24:0;:7;23021:33;23072:11;:24::i;:::-;23065:31;22851:253;-1:-1:-1;;;22851:253:0:o;39852:113::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39925:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;39925:32:0::1;39953:4;39925:32;::::0;;39852:113::o;23383:479::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23465:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23457:60;;;::::0;-1:-1:-1;;;23457:60:0;;14752:2:1;23457:60:0::1;::::0;::::1;14734:21:1::0;14791:2;14771:18;;;14764:30;14830:29;14810:18;;;14803:57;14877:18;;23457:60:0::1;14724:177:1::0;23457:60:0::1;23533:9;23528:327;23552:9;:16:::0;23548:20;::::1;23528:327;;;23610:7;-1:-1:-1::0;;;;;23594:23:0::1;:9;23604:1;23594:12;;;;;;-1:-1:-1::0;;;23594:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23594:12:0::1;:23;23590:254;;;23653:9;23663:16:::0;;:20:::1;::::0;23682:1:::1;::::0;23663:20:::1;:::i;:::-;23653:31;;;;;;-1:-1:-1::0;;;23653:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23638:9:::1;:12:::0;;-1:-1:-1;;;;;23653:31:0;;::::1;::::0;23648:1;;23638:12;::::1;;;-1:-1:-1::0;;;23638:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23638:46:0::1;-1:-1:-1::0;;;;;23638:46:0;;::::1;;::::0;;23703:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23742:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23742:28:0::1;::::0;;23789:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23789:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23789:15:0;;;;;-1:-1:-1;;;;;;23789:15:0::1;::::0;;;;;18540:337;;:::o;23590:254::-:1;23570:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23528:327;;19109:238:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;19170:11:::1;:17:::0;;-1:-1:-1;;;;19170:17:0::1;::::0;;19215:7:::1;::::0;:24:::1;::::0;19237:1:::1;::::0;19215:17:::1;::::0;19227:4:::1;19215:11;:17::i;:24::-;19197:15;:42:::0;19258:15:::1;:22:::0;;-1:-1:-1;;19258:22:0::1;19276:4;19258:22;::::0;;19290:49:::1;19314:24;19332:4;19314:9;:24::i;:::-;19290:23;:49::i;:::-;19109:238::o:0;21288:218::-;189:10;21376:4;21425:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21425:34:0;;;;;;;;;;21376:4;;21393:83;;21416:7;;21425:50;;21464:10;21425:38;:50::i;22018:377::-;189:10;22070:14;22119:19;;;:11;:19;;;;;;;;22118:20;22110:77;;;;-1:-1:-1;;;22110:77:0;;18979:2:1;22110:77:0;;;18961:21:1;19018:2;18998:18;;;18991:30;19057:34;19037:18;;;19030:62;-1:-1:-1;;;19108:18:1;;;19101:42;19160:19;;22110:77:0;18951:234:1;22110:77:0;22199:15;22223:19;22234:7;22223:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22271:15:0;;;;;;:7;:15;;;;;;22198:44;;-1:-1:-1;22271:28:0;;:15;-1:-1:-1;22198:44:0;22271:19;:28::i;:::-;-1:-1:-1;;;;;22253:15:0;;;;;;:7;:15;;;;;:46;22320:7;;:20;;22332:7;22320:11;:20::i;:::-;22310:7;:30;22364:10;;:23;;22379:7;22364:14;:23::i;:::-;22351:10;:36;-1:-1:-1;;;22018:377:0:o;19001:96::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;19070:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;19070:19:0::1;-1:-1:-1::0;;;;19070:19:0;;::::1;::::0;;;::::1;::::0;;19001:96::o;22407:436::-;22497:7;22536;;22525;:18;;22517:62;;;;-1:-1:-1;;;22517:62:0;;15464:2:1;22517:62:0;;;15446:21:1;15503:2;15483:18;;;15476:30;15542:33;15522:18;;;15515:61;15593:18;;22517:62:0;15436:181:1;22517:62:0;22595:17;22590:246;;22630:15;22654:19;22665:7;22654:10;:19::i;:::-;-1:-1:-1;22629:44:0;;-1:-1:-1;22688:14:0;;-1:-1:-1;;;;;22688:14:0;22590:246;22737:23;22768:19;22779:7;22768:10;:19::i;:::-;-1:-1:-1;22735:52:0;;-1:-1:-1;22802:22:0;;-1:-1:-1;;;;;22802:22:0;18891:102;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18963:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18963:22:0::1;-1:-1:-1::0;;;;18963:22:0;;::::1;::::0;;;::::1;::::0;;18891:102::o;38815:129::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38903:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;38903:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38815:129::o;23112:263::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23191:16:0;::::1;23210:1;23191:16:::0;;;:7:::1;:16;::::0;;;;;:20;23188:108:::1;;-1:-1:-1::0;;;;;23267:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23247:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23228:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23188:108:::1;-1:-1:-1::0;;;;;23306:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23306:27:0::1;23329:4;23306:27:::0;;::::1;::::0;;;23344:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23344:23:0::1;::::0;;::::1;::::0;;23112:263::o;41283:299::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;41420:17:::1;:33:::0;;;;41464:17:::1;:33:::0;41508:11:::1;:21:::0;41540:18:::1;:34:::0;41283:299::o;20266:198::-;-1:-1:-1;;;;;20356:20:0;;20332:7;20356:20;;;:11;:20;;;;;;;;20352:49;;;-1:-1:-1;;;;;;20385:16:0;;;;;:7;:16;;;;;;;20266:198::o;20352:49::-;-1:-1:-1;;;;;20439:16:0;;;;;;:7;:16;;;;;;20419:37;;:19;:37::i;6030:148::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;6137:1:::1;6121:6:::0;;6100:40:::1;::::0;-1:-1:-1;;;;;6121:6:0;;::::1;::::0;6100:40:::1;::::0;6137:1;;6100:40:::1;6168:1;6151:19:::0;;-1:-1:-1;;;;;;6151:19:0::1;::::0;;6030:148::o;37667:198::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37754:9:::1;37749:109;37765:20:::0;;::::1;37749:109;;;37842:4;37807:18;:32;37826:9;;37836:1;37826:12;;;;;-1:-1:-1::0;;;37826:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37807:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37807:32:0;:39;;-1:-1:-1;;37807:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37787:3:::1;::::0;::::1;:::i;:::-;;;37749:109;;;;37667:198:::0;;:::o;39162:135::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39247:42:::1;::::0;-1:-1:-1;;;;;39247:19:0;::::1;::::0;39267:21:::1;39247:42:::0;::::1;;;::::0;::::1;::::0;;;39267:21;39247:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;38005:270:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;38128:15:::1;:43:::0;;-1:-1:-1;;;;;38128:43:0;;::::1;-1:-1:-1::0;;;;;;38128:43:0;;::::1;;::::0;;;38182:9:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;38224:15:::1;:43:::0;;;;;::::1;::::0;::::1;;::::0;;38005:270::o;38958:188::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39045:9:::1;39040:99;39056:20:::0;;::::1;39040:99;;;39123:4;39098:10;:24;39109:9;;39119:1;39109:12;;;;;-1:-1:-1::0;;;39109:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39098:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39098:24:0;:29;;-1:-1:-1;;39098:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39078:3:::1;::::0;::::1;:::i;:::-;;;39040:99;;39973:178:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;40127:16:::1;40107;40097:7;;:26;;;;:::i;:::-;40096:47;;;;:::i;:::-;40080:13;:63:::0;-1:-1:-1;;39973:178:0:o;19977:87::-;20016:13;20049:7;20042:14;;;;;:::i;40679:596::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;40847:16:::1;:32:::0;;;40890:16:::1;:32:::0;;;40933:10:::1;:20:::0;;;40964:17:::1;:33:::0;;;41010:13:::1;:29:::0;;;41050:12:::1;:28:::0;;;41089:6:::1;:16:::0;;;41116:12:::1;:28:::0;;;41155:12:::1;:26:::0;;;41205:60:::1;41168:13:::0;41205:42:::1;40946:7:::0;41205:42;40866:13;40909;41205:16:::1;:30::i;:::-;:34:::0;::::1;:42::i;:60::-;41194:8;:71:::0;-1:-1:-1;;;;;40679:596:0:o;21514:269::-;21607:4;21624:129;189:10;21647:7;21656:96;21695:15;21656:96;;;;;;;;;;;;;;;;;189:10;21656:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21656:34:0;;;;;;;;;;;;:38;:96::i;20472:167::-;20550:4;20567:42;189:10;20591:9;20602:6;20567:9;:42::i;38541:266::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;38640:9:::1;38635:165;38651:20:::0;;::::1;38635:165;;;38697:10;:24;38708:9;;38718:1;38708:12;;;;;-1:-1:-1::0;;;38708:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38697:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38697:24:0;;::::1;;38693:96;;38767:6;38741:9;:23;38751:9;;38761:1;38751:12;;;;;-1:-1:-1::0;;;38751:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38741:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38741:23:0;:32;;-1:-1:-1;;38741:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38693:96:::1;38673:3;::::0;::::1;:::i;:::-;;;38635:165;;37883:110:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37950:27:0::1;37980:5;37950:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37950:35:0::1;::::0;;37883:110::o;19355:523::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;19428:29:::1;19479:9;19428:61;;19500:16;19537:10;-1:-1:-1::0;;;;;19537:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19519:47:0::1;;19575:4;19582:10;-1:-1:-1::0;;;;;19582:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19519:81;::::0;-1:-1:-1;;;;;;19519:81:0::1;::::0;;;;;;-1:-1:-1;;;;;9408:15:1;;;19519:81:0::1;::::0;::::1;9390:34:1::0;9460:15;;9440:18;;;9433:43;9325:18;;19519:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19500:100:::0;-1:-1:-1;;;;;;19615:22:0;::::1;19611:221;;19688:10;-1:-1:-1::0;;;;;19688:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19670:50:0::1;;19729:4;19736:10;-1:-1:-1::0;;;;;19736:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19670:84;::::0;-1:-1:-1;;;;;;19670:84:0::1;::::0;;;;;;-1:-1:-1;;;;;9408:15:1;;;19670:84:0::1;::::0;::::1;9390:34:1::0;9460:15;;9440:18;;;9433:43;9325:18;;19670:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19654:13;:100:::0;;-1:-1:-1;;;;;;19654:100:0::1;-1:-1:-1::0;;;;;19654:100:0;;;::::1;::::0;;;::::1;::::0;;19611:221:::1;;;19796:13;:24:::0;;-1:-1:-1;;;;;;19796:24:0::1;-1:-1:-1::0;;;;;19796:24:0;::::1;;::::0;;19611:221:::1;-1:-1:-1::0;19842:15:0::1;:28:::0;;-1:-1:-1;;;;;;19842:28:0::1;-1:-1:-1::0;;;;;19842:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;19355:523:0:o;37547:112::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37617:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37617:34:0::1;37647:4;37617:34;::::0;;37547:112::o;6186:244::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6275:22:0;::::1;6267:73;;;::::0;-1:-1:-1;;;6267:73:0;;13586:2:1;6267:73:0::1;::::0;::::1;13568:21:1::0;13625:2;13605:18;;;13598:30;13664:34;13644:18;;;13637:62;-1:-1:-1;;;13715:18:1;;;13708:36;13761:19;;6267:73:0::1;13558:228:1::0;6267:73:0::1;6377:6;::::0;;6356:38:::1;::::0;-1:-1:-1;;;;;6356:38:0;;::::1;::::0;6377:6;::::1;::::0;6356:38:::1;::::0;::::1;6405:6;:17:::0;;-1:-1:-1;;;;;;6405:17:0::1;-1:-1:-1::0;;;;;6405:17:0;;;::::1;::::0;;;::::1;::::0;;6186:244::o;1964:132::-;2022:7;2049:39;2053:1;2056;2049:39;;;;;;;;;;;;;;;;;:3;:39::i;1704:250::-;1762:7;1786:6;1782:47;;-1:-1:-1;1816:1:0;1809:8;;1782:47;1841:9;1853:5;1857:1;1853;:5;:::i;:::-;1841:17;-1:-1:-1;1886:1:0;1877:5;1881:1;1841:17;1877:5;:::i;:::-;:10;1869:56;;;;-1:-1:-1;;;1869:56:0;;16239:2:1;1869:56:0;;;16221:21:1;16278:2;16258:18;;;16251:30;16317:34;16297:18;;;16290:62;-1:-1:-1;;;16368:18:1;;;16361:31;16409:19;;1869:56:0;16211:223:1;1171:181:0;1229:7;;1261:5;1265:1;1261;:5;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;-1:-1:-1;;;1277:46:0;;14396:2:1;1277:46:0;;;14378:21:1;14435:2;14415:18;;;14408:30;14474:29;14454:18;;;14447:57;14521:18;;1277:46:0;14368:177:1;23870:337:0;-1:-1:-1;;;;;23963:19:0;;23955:68;;;;-1:-1:-1;;;23955:68:0;;18221:2:1;23955:68:0;;;18203:21:1;18260:2;18240:18;;;18233:30;18299:34;18279:18;;;18272:62;-1:-1:-1;;;18350:18:1;;;18343:34;18394:19;;23955:68:0;18193:226:1;23955:68:0;-1:-1:-1;;;;;24042:21:0;;24034:68;;;;-1:-1:-1;;;24034:68:0;;13993:2:1;24034:68:0;;;13975:21:1;14032:2;14012:18;;;14005:30;14071:34;14051:18;;;14044:62;-1:-1:-1;;;14122:18:1;;;14115:32;14164:19;;24034:68:0;13965:224:1;24034:68:0;-1:-1:-1;;;;;24115:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24167:32;;19688:25:1;;;24167:32:0;;19661:18:1;24167:32:0;;;;;;;23870:337;;;:::o;24215:2686::-;-1:-1:-1;;;;;24337:18:0;;24329:68;;;;-1:-1:-1;;;24329:68:0;;17412:2:1;24329:68:0;;;17394:21:1;17451:2;17431:18;;;17424:30;17490:34;17470:18;;;17463:62;-1:-1:-1;;;17541:18:1;;;17534:35;17586:19;;24329:68:0;17384:227:1;24329:68:0;-1:-1:-1;;;;;24416:16:0;;24408:64;;;;-1:-1:-1;;;24408:64:0;;11615:2:1;24408:64:0;;;11597:21:1;11654:2;11634:18;;;11627:30;11693:34;11673:18;;;11666:62;-1:-1:-1;;;11744:18:1;;;11737:33;11787:19;;24408:64:0;11587:225:1;24408:64:0;24500:1;24491:6;:10;24483:64;;;;-1:-1:-1;;;24483:64:0;;17002:2:1;24483:64:0;;;16984:21:1;17041:2;17021:18;;;17014:30;17080:34;17060:18;;;17053:62;-1:-1:-1;;;17131:18:1;;;17124:39;17180:19;;24483:64:0;16974:231:1;24483:64:0;-1:-1:-1;;;;;24567:15:0;;;;;;:9;:15;;;;;;;;24566:16;24558:52;;;;-1:-1:-1;;;24558:52:0;;19392:2:1;24558:52:0;;;19374:21:1;19431:2;19411:18;;;19404:30;19470:25;19450:18;;;19443:53;19513:18;;24558:52:0;19364:173:1;24558:52:0;5843:7;5870:6;-1:-1:-1;;;;;24625:14:0;;;5870:6;;24625:14;;;;:30;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;24643:12:0;;;5870:6;;24643:12;;24625:30;24621:84;;;24665:11;;-1:-1:-1;;;24665:11:0;;;;24657:48;;;;-1:-1:-1;;;24657:48:0;;18626:2:1;24657:48:0;;;18608:21:1;18665:2;18645:18;;;18638:30;18704:26;18684:18;;;18677:54;18748:18;;24657:48:0;18598:174:1;24657:48:0;24844:13;;24767:12;;-1:-1:-1;;;;;24838:19:0;;;24844:13;;24838:19;;:40;;-1:-1:-1;24865:13:0;;-1:-1:-1;;;;;24861:17:0;;;24865:13;;24861:17;24838:40;24837:99;;;;-1:-1:-1;;;;;;24885:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24913:22:0;;;;;;:18;:22;;;;;;;;24885:50;24883:53;24837:99;24832:148;;;-1:-1:-1;24964:4:0;24832:148;25006:1;24995:10;;:12;:59;;;;-1:-1:-1;;;;;;25013:22:0;;;;;;:18;:22;;;;;;;;25012:23;:41;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;25039:14:0;;;5870:6;;25039:14;;25012:41;24995:106;;;;;25088:12;25074:10;;25061;;:23;;;;:::i;:::-;25060:40;25058:43;24995:106;24992:247;;;25152:15;;25137:13;25147:2;25137:9;:13::i;:::-;25129:21;;:6;:21;:::i;:::-;:38;;25121:106;;;;-1:-1:-1;;;25121:106:0;;17818:2:1;25121:106:0;;;17800:21:1;17857:2;17837:18;;;17830:30;17896:34;17876:18;;;17869:62;-1:-1:-1;;;17947:18:1;;;17940:32;17989:19;;25121:106:0;17790:224:1;25121:106:0;25262:15;;;;:38;;;;-1:-1:-1;25287:13:0;;-1:-1:-1;;;;;25281:19:0;;;25287:13;;25281:19;25262:38;:65;;;;-1:-1:-1;;;;;;25305:22:0;;;;;;:16;:22;;;;;;;;25304:23;25262:65;25259:260;;;-1:-1:-1;;;;;25351:19:0;;;;;;:13;:19;;;;;;25373:15;-1:-1:-1;25343:88:0;;;;-1:-1:-1;;;25343:88:0;;12768:2:1;25343:88:0;;;12750:21:1;12807:2;12787:18;;;12780:30;12846:34;12826:18;;;12819:62;-1:-1:-1;;;12897:18:1;;;12890:36;12943:19;;25343:88:0;12740:228:1;25343:88:0;25486:21;;25468:39;;:15;:39;:::i;:::-;-1:-1:-1;;;;;25446:19:0;;;;;;:13;:19;;;;;:61;25259:260;25549:8;;25533:15;:24;25582:17;;25568:13;:31;25615:11;;-1:-1:-1;;;25615:11:0;;;;:34;;;;-1:-1:-1;25636:13:0;;-1:-1:-1;;;;;25630:19:0;;;25636:13;;25630:19;25615:34;25612:276;;;25689:13;;25681:6;:21;;25673:67;;;;-1:-1:-1;;;25673:67:0;;12365:2:1;25673:67:0;;;12347:21:1;12404:2;12384:18;;;12377:30;12443:34;12423:18;;;12416:62;-1:-1:-1;;;12494:18:1;;;12487:32;12536:19;;25673:67:0;12337:224:1;25673:67:0;25772:57;25817:11;;25772:40;25794:17;;25772;;:21;;:40;;;;:::i;:57::-;25755:15;:74;25858:18;;25844:13;:32;25612:276;25958:1;25947:10;;:12;:56;;;;;25991:12;25977:10;;25964;;:23;;;;:::i;:::-;25963:40;25947:56;25944:109;;;-1:-1:-1;;;;;26023:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;26023:18:0;26037:4;26023:18;;;25944:109;26165:1;26154:10;;:12;:30;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;26170:14:0;;;5870:6;;26170:14;;26154:30;:75;;;;;26218:10;;26205;;:23;;;;:::i;:::-;26188:12;:41;;26154:75;:91;;;;-1:-1:-1;26234:11:0;;-1:-1:-1;;;26234:11:0;;;;26154:91;26151:154;;;26281:3;26265:15;:19;26151:154;26320:14;;-1:-1:-1;;;26320:14:0;;;;26317:150;;;26354:11;;-1:-1:-1;;;26354:11:0;;;;:36;;;;-1:-1:-1;26377:13:0;;-1:-1:-1;;;;;26369:21:0;;;26377:13;;26369:21;26354:36;26351:105;;;26438:1;26422:15;:17;26351:105;26500:6;;-1:-1:-1;;;26500:6:0;;;;26499:7;:22;;;;-1:-1:-1;26510:11:0;;-1:-1:-1;;;26510:11:0;;;;26499:22;:45;;;;-1:-1:-1;26531:13:0;;-1:-1:-1;;;;;26525:19:0;;;26531:13;;26525:19;26499:45;26495:350;;;26569:28;26600:24;26618:4;26600:9;:24::i;:::-;26569:55;;26678:13;;26656:20;:35;26653:169;;-1:-1:-1;26738:13:0;;26774:32;26738:13;26774:10;:32::i;:::-;26495:350;;26855:38;26870:4;26875:2;26878:6;26885:7;26855:14;:38::i;1504:192::-;1590:7;1626:12;1618:6;;;;1610:29;;;;-1:-1:-1;;;1610:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1650:9:0;1662:5;1666:1;1662;:5;:::i;:::-;1650:17;1504:192;-1:-1:-1;;;;;1504:192:0:o;35791:163::-;35832:7;35853:15;35870;35889:19;:17;:19::i;:::-;35852:56;;-1:-1:-1;35852:56:0;-1:-1:-1;35926:20:0;35852:56;;35926:11;:20::i;:::-;35919:27;;;;35791:163;:::o;28416:1519::-;17500:6;:13;;-1:-1:-1;;;;17500:13:0;-1:-1:-1;;;17500:13:0;;;28627:8:::1;::::0;28595:12:::1;::::0;17500:13;;28556:101:::1;::::0;28655:1:::1;::::0;28556:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;28530:127:::0;-1:-1:-1;28670:20:0::1;28693:41;:20:::0;28530:127;28693:24:::1;:41::i;:::-;28670:64;;28755:30;28772:12;28755:16;:30::i;:::-;28887:12;::::0;28818:21:::1;::::0;28798:17:::1;::::0;28874:33:::1;::::0;28887:19:::1;::::0;28904:1:::1;28887:16;:19::i;:::-;28874:8;::::0;;:12:::1;:33::i;:::-;28852:55;;28920:26;28949:93;29040:1;28949:72;29009:11;28949:41;28977:12;;28949:9;:27;;:41;;;;:::i;:93::-;28920:122;;29063:20;29086:38;29112:11;29086:21;29100:6;;29086:9;:13;;:21;;;;:::i;:38::-;29063:61;;29135:26;29164:68;29210:11;29164:27;29178:12;;29164:9;:13;;:27;;;;:::i;:68::-;29135:97;;29245:26;29274:70;29321:11;29274:27;29288:12;;29274:9;:13;;:27;;;;:::i;:70::-;29245:99:::0;-1:-1:-1;29446:21:0::1;29481:22:::0;;29478:216:::1;;29552:15;::::0;29520:48:::1;::::0;29533:18;;-1:-1:-1;;;;;29552:15:0::1;29520:12;:48::i;:::-;29615:15;::::0;29583:48:::1;::::0;29596:18;;-1:-1:-1;;;;;29615:15:0::1;29583:12;:48::i;:::-;29672:9;::::0;29646:36:::1;::::0;29659:12;;-1:-1:-1;;;;;29672:9:0::1;29646:12;:36::i;:::-;29708:19:::0;;29704:104:::1;;29748:48;29761:15;29777:18;29748:12;:48::i;:::-;29830:13;::::0;29844:4:::1;::::0;29820:50:::1;::::0;-1:-1:-1;;;;;29830:13:0;;::::1;::::0;29844:4:::1;29849:20:::0;29820:9:::1;:50::i;:::-;29896:13;;;;;;;;;-1:-1:-1::0;;;;;29896:13:0::1;-1:-1:-1::0;;;;;29881:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17536:6:0;:14;;-1:-1:-1;;;;17536:14:0;;;-1:-1:-1;;;;;;;;;;;;28416:1519:0:o;34589:419::-;34648:7;34657;34666;34675;34684;34693;34714:23;34739:12;34753:18;34775:20;34787:7;34775:11;:20::i;:::-;34713:82;;;;;;34807:15;34824:23;34849:12;34865:50;34877:7;34886:4;34892:10;34904;:8;:10::i;:::-;34865:11;:50::i;:::-;34806:109;;;;-1:-1:-1;34806:109:0;;-1:-1:-1;34966:15:0;;-1:-1:-1;34983:4:0;;-1:-1:-1;34989:10:0;;-1:-1:-1;34589:419:0;;-1:-1:-1;;;;;34589:419:0:o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;2104:278::-;2190:7;2225:12;2218:5;2210:28;;;;-1:-1:-1;;;2210:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2249:9:0;2261:5;2265:1;2261;:5;:::i;26909:1372::-;17500:6;:13;;-1:-1:-1;;;;17500:13:0;-1:-1:-1;;;17500:13:0;;;27107:8:::1;::::0;27075:12:::1;::::0;17500:13;;27036:101:::1;::::0;27135:1:::1;::::0;27036:80:::1;::::0;;;:20;;:38:::1;:52::i;:101::-;27010:127:::0;-1:-1:-1;27150:20:0::1;27173:41;:20:::0;27010:127;27173:24:::1;:41::i;:::-;27150:64;;27235:30;27252:12;27235:16;:30::i;:::-;27367:12;::::0;27298:21:::1;::::0;27278:17:::1;::::0;27354:33:::1;::::0;27367:19:::1;::::0;27384:1:::1;27367:16;:19::i;27354:33::-;27332:55;;27400:26;27429:93;27520:1;27429:72;27489:11;27429:41;27457:12;;27429:9;:27;;:41;;;;:::i;:93::-;27400:122;;27543:20;27566:38;27592:11;27566:21;27580:6;;27566:9;:13;;:21;;;;:::i;:38::-;27543:61;;27615:26;27644:68;27690:11;27644:27;27658:12;;27644:9;:13;;:27;;;;:::i;:68::-;27615:97;;27724:26;27753:68;27799:11;27753:27;27767:12;;27753:9;:13;;:27;;;;:::i;:68::-;27724:97:::0;-1:-1:-1;27912:21:0::1;27947:22:::0;;27944:216:::1;;28018:15;::::0;27986:48:::1;::::0;27999:18;;-1:-1:-1;;;;;28018:15:0::1;27986:12;:48::i;:::-;28081:15;::::0;28049:48:::1;::::0;28062:18;;-1:-1:-1;;;;;28081:15:0::1;28049:12;:48::i;:::-;28138:9;::::0;28112:36:::1;::::0;28125:12;;-1:-1:-1;;;;;28138:9:0::1;28112:12;:36::i;:::-;28174:19:::0;;28170:104:::1;;28214:48;28227:15;28243:18;28214:12;:48::i;:::-;-1:-1:-1::0;;17536:6:0;:14;;-1:-1:-1;;;;17536:14:0;;;-1:-1:-1;;;;;;;;26909:1372:0:o;31155:943::-;31295:13;;31345:15;;31375:7;31371:88;;31414:1;31398:13;:17;;;31430:15;:17;31371:88;-1:-1:-1;;;;;31483:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31507:22:0;;;;;;:11;:22;;;;;;;;31506:23;31483:46;31479:467;;;31546:48;31568:6;31576:9;31587:6;31546:21;:48::i;:::-;31479:467;;;-1:-1:-1;;;;;31617:19:0;;;;;;:11;:19;;;;;;;;31616:20;:46;;;;-1:-1:-1;;;;;;31640:22:0;;;;;;:11;:22;;;;;;;;31616:46;31612:334;;;31679:46;31699:6;31707:9;31718:6;31679:19;:46::i;31612:334::-;-1:-1:-1;;;;;31747:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31770:22:0;;;;;;:11;:22;;;;;;;;31747:45;31743:203;;;31809:48;31831:6;31839:9;31850:6;31809:21;:48::i;31743:203::-;31890:44;31908:6;31916:9;31927:6;31890:17;:44::i;:::-;31970:7;31966:125;;31993:13;:38;;;;32046:15;:33;-1:-1:-1;;;;31155:943:0:o;36255:561::-;36352:7;;36388;;36305;;;;;36412:289;36436:9;:16;36432:20;;36412:289;;;36502:7;36478;:21;36486:9;36496:1;36486:12;;;;;;-1:-1:-1;;;36486:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36486:12:0;36478:21;;;;;;;;;;;;;:31;;:66;;;36537:7;36513;:21;36521:9;36531:1;36521:12;;;;;;-1:-1:-1;;;36521:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36521:12:0;36513:21;;;;;;;;;;;;;:31;36478:66;36474:97;;;36554:7;;36563;;36546:25;;;;;;;36255:561;;:::o;36474:97::-;36596:34;36608:7;:21;36616:9;36626:1;36616:12;;;;;;-1:-1:-1;;;36616:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36616:12:0;36608:21;;;;;;;;;;;;;36596:7;;:11;:34::i;:::-;36586:44;;36655:34;36667:7;:21;36675:9;36685:1;36675:12;;;;;;-1:-1:-1;;;36675:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36675:12:0;36667:21;;;;;;;;;;;;;36655:7;;:11;:34::i;:::-;36645:44;-1:-1:-1;36454:3:0;;;;:::i;:::-;;;;36412:289;;;-1:-1:-1;36737:7:0;;36725;;:20;;:11;:20::i;:::-;36715:7;:30;36711:61;;;36755:7;;36764;;36747:25;;;;;;36255:561;;:::o;36711:61::-;36791:7;;36800;;-1:-1:-1;36255:561:0;-1:-1:-1;36255:561:0:o;29954:666::-;30104:16;;;30118:1;30104:16;;;;;;;;30080:21;;30104:16;;;;;;;;;;-1:-1:-1;30104:16:0;30080:40;;30149:4;30131;30136:1;30131:7;;;;;;-1:-1:-1;;;30131:7:0;;;;;;;;;-1:-1:-1;;;;;30131:23:0;;;:7;;;;;;;;;;:23;;;;30175:15;;:22;;;-1:-1:-1;;;30175:22:0;;;;:15;;;;;:20;;:22;;;;;30131:7;;30175:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30165:4;30170:1;30165:7;;;;;;-1:-1:-1;;;30165:7:0;;;;;;;;;-1:-1:-1;;;;;30165:32:0;;;:7;;;;;;;;;:32;30242:15;;30210:62;;30227:4;;30242:15;30260:11;30210:8;:62::i;:::-;30311:15;;:240;;-1:-1:-1;;;30311:240:0;;-1:-1:-1;;;;;30311:15:0;;;;:66;;:240;;30392:11;;30311:15;;30462:4;;30489;;30525:15;;30311:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30577:35;30594:11;30607:4;30577:35;;;;;;;:::i;:::-;;;;;;;;29954:666;;:::o;28293:111::-;28373:23;;-1:-1:-1;;;;;28373:15:0;;;:23;;;;;28389:6;;28373:23;;;;28389:6;28373:15;:23;;;;;;;;;;;;;;;;;;;30634:513;30814:15;;30782:62;;30799:4;;-1:-1:-1;;;;;30814:15:0;30832:11;30782:8;:62::i;:::-;30887:15;;-1:-1:-1;;;;;30887:15:0;:31;30926:9;30959:4;30979:11;30887:15;;31091:7;5843;5870:6;-1:-1:-1;;;;;5870:6:0;;5805:79;31091:7;30887:252;;;;;;-1:-1:-1;;;;;;30887:252:0;;;-1:-1:-1;;;;;10125:15:1;;;30887:252:0;;;10107:34:1;10157:18;;;10150:34;;;;10200:18;;;10193:34;;;;10243:18;;;10236:34;10307:15;;;10286:19;;;10279:44;31113:15:0;10339:19:1;;;10332:35;10041:19;;30887:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30634:513;;:::o;35016:330::-;35076:7;35085;35094;35114:12;35129:24;35145:7;35129:15;:24::i;:::-;35114:39;;35164:18;35185:30;35207:7;35185:21;:30::i;:::-;35164:51;-1:-1:-1;35226:23:0;35252:33;35164:51;35252:17;:7;35264:4;35252:11;:17::i;:::-;:21;;:33::i;:::-;35226:59;35321:4;;-1:-1:-1;35327:10:0;;-1:-1:-1;35016:330:0;;-1:-1:-1;;;35016:330:0:o;35354:429::-;35469:7;;;;35525:24;:7;35537:11;35525;:24::i;:::-;35507:42;-1:-1:-1;35560:12:0;35575:21;:4;35584:11;35575:8;:21::i;:::-;35560:36;-1:-1:-1;35607:18:0;35628:27;:10;35643:11;35628:14;:27::i;:::-;35607:48;-1:-1:-1;35666:23:0;35692:33;35607:48;35692:17;:7;35704:4;35692:11;:17::i;:33::-;35744:7;;;;-1:-1:-1;35770:4:0;;-1:-1:-1;35354:429:0;;-1:-1:-1;;;;;;;35354:429:0:o;33210:566::-;33313:15;33330:23;33355:12;33369:23;33394:12;33408:18;33430:19;33441:7;33430:10;:19::i;:::-;-1:-1:-1;;;;;33478:15:0;;;;;;:7;:15;;;;;;33312:137;;-1:-1:-1;33312:137:0;;-1:-1:-1;33312:137:0;;-1:-1:-1;33312:137:0;-1:-1:-1;33312:137:0;-1:-1:-1;33312:137:0;-1:-1:-1;33478:28:0;;33498:7;33478:19;:28::i;:::-;-1:-1:-1;;;;;33460:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33535:7;:15;;;;:28;;33555:7;33535:19;:28::i;:::-;-1:-1:-1;;;;;33517:15:0;;;;;;;:7;:15;;;;;;:46;;;;33595:18;;;;;;;:39;;33618:15;33595:22;:39::i;:::-;-1:-1:-1;;;;;33574:18:0;;;;;;:7;:18;;;;;:60;33648:26;33663:10;33648:14;:26::i;:::-;33685:23;33697:4;33703;33685:11;:23::i;:::-;33741:9;-1:-1:-1;;;;;33724:44:0;33733:6;-1:-1:-1;;;;;33724:44:0;;33752:15;33724:44;;;;19688:25:1;;19676:2;19661:18;;19643:76;33724:44:0;;;;;;;;33210:566;;;;;;;;;:::o;32616:586::-;32717:15;32734:23;32759:12;32773:23;32798:12;32812:18;32834:19;32845:7;32834:10;:19::i;:::-;-1:-1:-1;;;;;32882:15:0;;;;;;:7;:15;;;;;;32716:137;;-1:-1:-1;32716:137:0;;-1:-1:-1;32716:137:0;;-1:-1:-1;32716:137:0;-1:-1:-1;32716:137:0;-1:-1:-1;32716:137:0;-1:-1:-1;32882:28:0;;32716:137;32882:19;:28::i;:::-;-1:-1:-1;;;;;32864:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32942:18;;;;;:7;:18;;;;;:39;;32965:15;32942:22;:39::i;:::-;-1:-1:-1;;;;;32921:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33013:7;:18;;;;:39;;33036:15;33013:22;:39::i;33784:642::-;33887:15;33904:23;33929:12;33943:23;33968:12;33982:18;34004:19;34015:7;34004:10;:19::i;:::-;-1:-1:-1;;;;;34052:15:0;;;;;;:7;:15;;;;;;33886:137;;-1:-1:-1;33886:137:0;;-1:-1:-1;33886:137:0;;-1:-1:-1;33886:137:0;-1:-1:-1;33886:137:0;-1:-1:-1;33886:137:0;-1:-1:-1;34052:28:0;;34072:7;34052:19;:28::i;:::-;-1:-1:-1;;;;;34034:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34109:7;:15;;;;:28;;34129:7;34109:19;:28::i;32106:502::-;32205:15;32222:23;32247:12;32261:23;32286:12;32300:18;32322:19;32333:7;32322:10;:19::i;:::-;-1:-1:-1;;;;;32370:15:0;;;;;;:7;:15;;;;;;32204:137;;-1:-1:-1;32204:137:0;;-1:-1:-1;32204:137:0;;-1:-1:-1;32204:137:0;-1:-1:-1;32204:137:0;-1:-1:-1;32204:137:0;-1:-1:-1;32370:28:0;;32204:137;32370:19;:28::i;37195:160::-;37259:7;37286:61;37331:5;37286:26;37298:13;;37286:7;:11;;:26;;;;:::i;37367:168::-;37437:7;37464:63;37511:5;37464:28;37476:15;;37464:7;:11;;:28;;;;:::i;36828:355::-;36891:19;36914:10;:8;:10::i;:::-;36891:33;-1:-1:-1;36935:18:0;36956:27;:10;36891:33;36956:14;:27::i;:::-;37035:4;37019:22;;;;:7;:22;;;;;;36935:48;;-1:-1:-1;37019:38:0;;36935:48;37019:26;:38::i;:::-;37010:4;36994:22;;;;:7;:22;;;;;;;;:63;;;;37071:11;:26;;;;;;37068:107;;;37153:4;37137:22;;;;:7;:22;;;;;;:38;;37164:10;37137:26;:38::i;:::-;37128:4;37112:22;;;;:7;:22;;;;;:63;36828:355;;;:::o;34434:147::-;34512:7;;:17;;34524:4;34512:11;:17::i;:::-;34502:7;:27;34553:10;;:20;;34568:4;34553:14;:20::i;:::-;34540:10;:33;-1:-1:-1;;34434:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:539::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;2017:7;-1:-1:-1;2076:2:1;2061:18;;2048:32;2089:33;2048:32;2089:33;:::i;:::-;2141:7;2131:17;;;1719:435;;;;;:::o;2159:466::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:2;;;2326:6;2318;2311:22;2273:2;2370:9;2357:23;2389:31;2414:5;2389:31;:::i;:::-;2439:5;-1:-1:-1;2496:2:1;2481:18;;2468:32;2509:33;2468:32;2509:33;:::i;:::-;2263:362;;2561:7;;-1:-1:-1;;;2615:2:1;2600:18;;;;2587:32;;2263:362::o;2630:660::-;2734:6;2742;2750;2758;2811:2;2799:9;2790:7;2786:23;2782:32;2779:2;;;2832:6;2824;2817:22;2779:2;2876:9;2863:23;2895:31;2920:5;2895:31;:::i;:::-;2945:5;-1:-1:-1;3001:2:1;2986:18;;2973:32;3028:18;3017:30;;3014:2;;;3065:6;3057;3050:22;3014:2;3109:70;3171:7;3162:6;3151:9;3147:22;3109:70;:::i;:::-;2769:521;;3198:8;;-1:-1:-1;3083:96:1;;3280:2;3265:18;3252:32;;2769:521;-1:-1:-1;;;;2769:521:1:o;3295:392::-;3360:6;3368;3421:2;3409:9;3400:7;3396:23;3392:32;3389:2;;;3442:6;3434;3427:22;3389:2;3486:9;3473:23;3505:31;3530:5;3505:31;:::i;:::-;3555:5;-1:-1:-1;3612:2:1;3597:18;;3584:32;3625:30;3584:32;3625:30;:::i;3692:325::-;3760:6;3768;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:31;3930:5;3905:31;:::i;:::-;3955:5;4007:2;3992:18;;;;3979:32;;-1:-1:-1;;;3779:238:1:o;4022:457::-;4108:6;4116;4169:2;4157:9;4148:7;4144:23;4140:32;4137:2;;;4190:6;4182;4175:22;4137:2;4235:9;4222:23;4268:18;4260:6;4257:30;4254:2;;;4305:6;4297;4290:22;4254:2;4349:70;4411:7;4402:6;4391:9;4387:22;4349:70;:::i;:::-;4438:8;;4323:96;;-1:-1:-1;4127:352:1;-1:-1:-1;;;;4127:352:1:o;4484:586::-;4576:6;4584;4592;4645:2;4633:9;4624:7;4620:23;4616:32;4613:2;;;4666:6;4658;4651:22;4613:2;4711:9;4698:23;4744:18;4736:6;4733:30;4730:2;;;4781:6;4773;4766:22;4730:2;4825:70;4887:7;4878:6;4867:9;4863:22;4825:70;:::i;:::-;4914:8;;-1:-1:-1;4799:96:1;-1:-1:-1;;4999:2:1;4984:18;;4971:32;5012:28;4971:32;5012:28;:::i;5075:251::-;5131:6;5184:2;5172:9;5163:7;5159:23;5155:32;5152:2;;;5205:6;5197;5190:22;5152:2;5249:9;5236:23;5268:28;5290:5;5268:28;:::i;5331:255::-;5398:6;5451:2;5439:9;5430:7;5426:23;5422:32;5419:2;;;5472:6;5464;5457:22;5419:2;5509:9;5503:16;5528:28;5550:5;5528:28;:::i;5591:319::-;5656:6;5664;5717:2;5705:9;5696:7;5692:23;5688:32;5685:2;;;5738:6;5730;5723:22;5685:2;5782:9;5769:23;5801:28;5823:5;5801:28;:::i;5915:411::-;5996:6;6004;6057:2;6045:9;6036:7;6032:23;6028:32;6025:2;;;6078:6;6070;6063:22;6331:190;6390:6;6443:2;6431:9;6422:7;6418:23;6414:32;6411:2;;;6464:6;6456;6449:22;6411:2;-1:-1:-1;6492:23:1;;6401:120;-1:-1:-1;6401:120:1:o;6526:194::-;6596:6;6649:2;6637:9;6628:7;6624:23;6620:32;6617:2;;;6670:6;6662;6655:22;6617:2;-1:-1:-1;6698:16:1;;6607:113;-1:-1:-1;6607:113:1:o;6725:319::-;6790:6;6798;6851:2;6839:9;6830:7;6826:23;6822:32;6819:2;;;6872:6;6864;6857:22;6819:2;6913:9;6900:23;6890:33;;6973:2;6962:9;6958:18;6945:32;6986:28;7008:5;6986:28;:::i;7049:258::-;7117:6;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:2;;;7199:6;7191;7184:22;7146:2;-1:-1:-1;;7227:23:1;;;7297:2;7282:18;;;7269:32;;-1:-1:-1;7136:171:1:o;7312:316::-;7400:6;7408;7416;7469:2;7457:9;7448:7;7444:23;7440:32;7437:2;;;7490:6;7482;7475:22;7437:2;7524:9;7518:16;7508:26;;7574:2;7563:9;7559:18;7553:25;7543:35;;7618:2;7607:9;7603:18;7597:25;7587:35;;7427:201;;;;;:::o;7633:395::-;7719:6;7727;7735;7743;7796:3;7784:9;7775:7;7771:23;7767:33;7764:2;;;7818:6;7810;7803:22;7764:2;-1:-1:-1;;7846:23:1;;;7916:2;7901:18;;7888:32;;-1:-1:-1;7967:2:1;7952:18;;7939:32;;8018:2;8003:18;7990:32;;-1:-1:-1;7754:274:1;-1:-1:-1;7754:274:1:o;8033:464::-;8128:6;8136;8144;8152;8160;8213:3;8201:9;8192:7;8188:23;8184:33;8181:2;;;8235:6;8227;8220:22;8181:2;-1:-1:-1;;8263:23:1;;;8333:2;8318:18;;8305:32;;-1:-1:-1;8384:2:1;8369:18;;8356:32;;8435:2;8420:18;;8407:32;;-1:-1:-1;8486:3:1;8471:19;8458:33;;-1:-1:-1;8171:326:1;-1:-1:-1;8171:326:1:o;8502:463::-;8555:3;8593:5;8587:12;8620:6;8615:3;8608:19;8646:4;8675:2;8670:3;8666:12;8659:19;;8712:2;8705:5;8701:14;8733:3;8745:195;8759:6;8756:1;8753:13;8745:195;;;8824:13;;-1:-1:-1;;;;;8820:39:1;8808:52;;8880:12;;;;8915:15;;;;8856:1;8774:9;8745:195;;;-1:-1:-1;8956:3:1;;8563:402;-1:-1:-1;;;;;8563:402:1:o;10805:603::-;10917:4;10946:2;10975;10964:9;10957:21;11007:6;11001:13;11050:6;11045:2;11034:9;11030:18;11023:34;11075:4;11088:140;11102:6;11099:1;11096:13;11088:140;;;11197:14;;;11193:23;;11187:30;11163:17;;;11182:2;11159:26;11152:66;11117:10;;11088:140;;;11246:6;11243:1;11240:13;11237:2;;;11316:4;11311:2;11302:6;11291:9;11287:22;11283:31;11276:45;11237:2;-1:-1:-1;11392:2:1;11371:15;-1:-1:-1;;11367:29:1;11352:45;;;;11399:2;11348:54;;10926:482;-1:-1:-1;;;10926:482:1:o;16439:356::-;16641:2;16623:21;;;16660:18;;;16653:30;16719:34;16714:2;16699:18;;16692:62;16786:2;16771:18;;16613:182::o;19724:332::-;19931:6;19920:9;19913:25;19974:2;19969;19958:9;19954:18;19947:30;19894:4;19994:56;20046:2;20035:9;20031:18;20023:6;19994:56;:::i;:::-;19986:64;19903:153;-1:-1:-1;;;;19903:153:1:o;20061:582::-;20360:6;20349:9;20342:25;20403:6;20398:2;20387:9;20383:18;20376:34;20446:3;20441:2;20430:9;20426:18;20419:31;20323:4;20467:57;20519:3;20508:9;20504:19;20496:6;20467:57;:::i;:::-;-1:-1:-1;;;;;20560:32:1;;;;20555:2;20540:18;;20533:60;-1:-1:-1;20624:3:1;20609:19;20602:35;20459:65;20332:311;-1:-1:-1;;;20332:311:1:o;20837:128::-;20877:3;20908:1;20904:6;20901:1;20898:13;20895:2;;;20914:18;;:::i;:::-;-1:-1:-1;20950:9:1;;20885:80::o;20970:217::-;21010:1;21036;21026:2;;-1:-1:-1;;;21061:31:1;;21115:4;21112:1;21105:15;21143:4;21068:1;21133:15;21026:2;-1:-1:-1;21172:9:1;;21016:171::o;21192:422::-;21281:1;21324:5;21281:1;21338:270;21359:7;21349:8;21346:21;21338:270;;;21418:4;21414:1;21410:6;21406:17;21400:4;21397:27;21394:2;;;21427:18;;:::i;:::-;21477:7;21467:8;21463:22;21460:2;;;21497:16;;;;21460:2;21576:22;;;;21536:15;;;;21338:270;;;21342:3;21256:358;;;;;:::o;21619:140::-;21677:5;21706:47;21747:4;21737:8;21733:19;21727:4;21813:5;21843:8;21833:2;;-1:-1:-1;21884:1:1;21898:5;;21833:2;21932:4;21922:2;;-1:-1:-1;21969:1:1;21983:5;;21922:2;22014:4;22032:1;22027:59;;;;22100:1;22095:130;;;;22007:218;;22027:59;22057:1;22048:10;;22071:5;;;22095:130;22132:3;22122:8;22119:17;22116:2;;;22139:18;;:::i;:::-;-1:-1:-1;;22195:1:1;22181:16;;22210:5;;22007:218;;22309:2;22299:8;22296:16;22290:3;22284:4;22281:13;22277:36;22271:2;22261:8;22258:16;22253:2;22247:4;22244:12;22240:35;22237:77;22234:2;;;-1:-1:-1;22346:19:1;;;22378:5;;22234:2;22425:34;22450:8;22444:4;22425:34;:::i;:::-;22495:6;22491:1;22487:6;22483:19;22474:7;22471:32;22468:2;;;22506:18;;:::i;:::-;22544:20;;21823:747;-1:-1:-1;;;21823:747:1:o;22575:168::-;22615:7;22681:1;22677;22673:6;22669:14;22666:1;22663:21;22658:1;22651:9;22644:17;22640:45;22637:2;;;22688:18;;:::i;:::-;-1:-1:-1;22728:9:1;;22627:116::o;22748:125::-;22788:4;22816:1;22813;22810:8;22807:2;;;22821:18;;:::i;:::-;-1:-1:-1;22858:9:1;;22797:76::o;22878:380::-;22957:1;22953:12;;;;23000;;;23021:2;;23075:4;23067:6;23063:17;23053:27;;23021:2;23128;23120:6;23117:14;23097:18;23094:38;23091:2;;;23174:10;23169:3;23165:20;23162:1;23155:31;23209:4;23206:1;23199:15;23237:4;23234:1;23227:15;23091:2;;22933:325;;;:::o;23263:135::-;23302:3;-1:-1:-1;;23323:17:1;;23320:2;;;23343:18;;:::i;:::-;-1:-1:-1;23390:1:1;23379:13;;23310:88::o;23403:127::-;23464:10;23459:3;23455:20;23452:1;23445:31;23495:4;23492:1;23485:15;23519:4;23516:1;23509:15;23535:131;-1:-1:-1;;;;;23610:31:1;;23600:42;;23590:2;;23656:1;23653;23646:12;23590:2;23580:86;:::o;23671:118::-;23757:5;23750:13;23743:21;23736:5;23733:32;23723:2;;23779:1;23776;23769:12

Swarm Source

ipfs://3e0afdd4aaeb5d711ef09a3ad62a2fdac4de5b8aa83eb509cb7c2bff8d88e706
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.