ETH Price: $2,287.22 (-3.94%)

Token

Theatron (THEA)
 

Overview

Max Total Supply

1,000,000,000 THEA

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,565,161.253030195 THEA

Value
$0.00
0x2b1f442b39aa8e2483344dbe2c9b77eae7703783
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:
Theatron

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-29
*/

// SPDX-License-Identifier: MIT


pragma solidity 0.8.11;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

////Theatron.sol

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

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

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

    string private _name     = "Theatron";
    string private _symbol   = "THEA";
    uint8  private _decimals = 9;
   
    uint256 private constant MAX = type(uint256).max;
    uint256 private _tTotal = 1000000000 * (10 ** _decimals);  ///1 billion supply
    uint256 private _tTotalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

     
      mapping(address => bool) public bots;



    uint256 public taxFeeonBuy;
    uint256 public taxFeeonSell;

    uint256 public liquidityFeeonBuy;
    uint256 public liquidityFeeonSell;

    uint256 public marketingFeeonBuy;
    uint256 public marketingFeeonSell;


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

    uint256 private totalBuyFees;
    uint256 private totalSellFees;

    address public marketingWallet;

    bool public walletToWalletTransferWithoutFee;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event SwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 amount);
    event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event WalletToWalletTransferWithoutFeeEnabled(bool enabled);
    
    constructor() 
    {        
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


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

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

        taxFeeonBuy = 1; ///1%
        taxFeeonSell = 1; ///1%

        liquidityFeeonBuy = 0;
        liquidityFeeonSell = 0;

        marketingFeeonBuy = 2;  ///2%
        marketingFeeonSell = 2;  ///2%

       

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

        marketingWallet = 0xDe16385A9888e4463fEe9EC20c85B2E60e796221;
        
        swapEnabled = true;
        swapTokensAtAmount = _tTotal / 5000;
 
        walletToWalletTransferWithoutFee = true;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {}

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

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

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

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

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

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

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


        if (liquidityFeeonBuy + liquidityFeeonSell  > 0){
            liquidityAmount = tLiquidity * (liquidityFeeonBuy + liquidityFeeonSell) / (liquidityFeeonBuy + liquidityFeeonSell );
          
        }

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

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

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

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

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

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

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

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

    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

     

        
        if (from != owner() && to != owner()){
             require(!bots[from] && !bots[to], "Your account is blacklisted!");
        

        }

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

            uint256 totalShare = marketingShare + liquidityShare;

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

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

    }

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

        uint256 initialBalance = address(this).balance;

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

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

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

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

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

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

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

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

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

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

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

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

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy;

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

        emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, marketingFeeonBuy);
    }

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

        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell ;

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

        emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, marketingFeeonSell);
    }

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


  
      function blackListAddress(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
     function unblockBlackList(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blackListAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260086080819052672a3432b0ba3937b760c11b60a09081526200002b916007919062000688565b50604080518082019091526004808252635448454160e01b6020909201918252620000599160089162000688565b506009805460ff1916811781556200007390600a62000843565b6200008390633b9aca006200085b565b600a9081556009546200009c9160ff9091169062000843565b620000ac90633b9aca006200085b565b600b55600a54620000c09060001962000893565b620000ce90600019620008aa565b600c55601b80546001600160a01b03191661dead179055348015620000f257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000191573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b79190620008c4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620008c4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f9190620008c4565b601d80546001600160a01b039283166001600160a01b031991821617909155601c80549284169290911682179055620002dd9030906000196200054d565b6001600f8190556010819055600060118190556012819055600260138190556014819055916200030e9190620008ef565b6200031a9190620008ef565b601855601454601254601054620003329190620008ef565b6200033e9190620008ef565b601955601a80546001600160a01b03191673de16385a9888e4463fee9ec20c85b2e60e796221179055601d805460ff60a81b1916600160a81b179055600a546200038c90611388906200090a565b601e55601a805460ff60a01b1916600160a01b179055600160046000620003bb6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600484527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054861660019081179091553082528382208054871682179055600590945282812080548616851790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054861685179055601d54909116815290812080549093168217909255600c54916200048d6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a5460026000620004c86200067960201b60201c565b6001600160a01b03168152602081019190915260400160002055620004f56000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200053d91815260200190565b60405180910390a350506200095e565b6001600160a01b038316620005b55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006185760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620005ac565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b828054620006969062000921565b90600052602060002090601f016020900481019282620006ba576000855562000705565b82601f10620006d557805160ff191683800117855562000705565b8280016001018555821562000705579182015b8281111562000705578251825591602001919060010190620006e8565b506200071392915062000717565b5090565b5b8082111562000713576000815560010162000718565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007855781600019048211156200076957620007696200072e565b808516156200077757918102915b93841c939080029062000749565b509250929050565b6000826200079e575060016200083d565b81620007ad575060006200083d565b8160018114620007c65760028114620007d157620007f1565b60019150506200083d565b60ff841115620007e557620007e56200072e565b50506001821b6200083d565b5060208310610133831016604e8410600b841016171562000816575081810a6200083d565b62000822838362000744565b80600019048211156200083957620008396200072e565b0290505b92915050565b60006200085460ff8416836200078d565b9392505050565b60008160001904831182151516156200087857620008786200072e565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620008a557620008a56200087d565b500690565b600082821015620008bf57620008bf6200072e565b500390565b600060208284031215620008d757600080fd5b81516001600160a01b03811681146200085457600080fd5b600082198211156200090557620009056200072e565b500190565b6000826200091c576200091c6200087d565b500490565b600181811c908216806200093657607f821691505b602082108114156200095857634e487b7160e01b600052602260045260246000fd5b50919050565b6131af806200096e6000396000f3fe6080604052600436106102765760003560e01c80636a01e33b1161014f578063a9059cbb116100c1578063d6a694f51161007a578063d6a694f514610781578063dd62ed3e146107a1578063e01af92c146107e7578063e2f4560514610807578063f2fde38b1461081d578063f9d0831a1461083d57600080fd5b8063a9059cbb146106bc578063afa4f3b2146106dc578063b577554a146106fc578063bb85c6d114610711578063bfd7928414610731578063c02466681461076157600080fd5b806388f820201161011357806388f82020146105fa5780638da5cb5b1461063357806390a3dd9b1461065157806393a7781f1461067157806395d89b4114610687578063a457c2d71461069c57600080fd5b80636a01e33b146105645780636ddd17131461058457806370a08231146105a5578063715018a6146105c557806375f0a874146105da57600080fd5b80633bd5d173116101e85780635342acb4116101ac5780635342acb4146104a95780635654d0b3146104e2578063583a71b6146105025780635a04e035146105225780635f35bc5c1461053857806365a8ee4f1461054e57600080fd5b80633bd5d173146104135780634549b0391461043357806349bd5a5e146104535780634b93d0591461047357806352390c021461048957600080fd5b806318160ddd1161023a57806318160ddd1461035a57806323b872dd1461036f5780632d8381191461038f578063313ce567146103af5780633685d419146103d157806339509351146103f357600080fd5b806306fdde0314610282578063095ea7b3146102ad578063142725fc146102dd5780631529fbbf146103015780631694505e1461032257600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761085d565b6040516102a49190612c6f565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004612ce9565b6108ef565b60405190151581526020016102a4565b3480156102e957600080fd5b506102f360125481565b6040519081526020016102a4565b34801561030d57600080fd5b50601a546102cd90600160a01b900460ff1681565b34801561032e57600080fd5b50601c54610342906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561036657600080fd5b50600b546102f3565b34801561037b57600080fd5b506102cd61038a366004612d15565b610906565b34801561039b57600080fd5b506102f36103aa366004612d56565b610958565b3480156103bb57600080fd5b5060095460405160ff90911681526020016102a4565b3480156103dd57600080fd5b506103f16103ec366004612d6f565b6109e1565b005b3480156103ff57600080fd5b506102cd61040e366004612ce9565b610b98565b34801561041f57600080fd5b506103f161042e366004612d56565b610bcf565b34801561043f57600080fd5b506102f361044e366004612d9a565b610cbd565b34801561045f57600080fd5b50601d54610342906001600160a01b031681565b34801561047f57600080fd5b506102f360115481565b34801561049557600080fd5b506103f16104a4366004612d6f565b610d4c565b3480156104b557600080fd5b506102cd6104c4366004612d6f565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104ee57600080fd5b506103f16104fd366004612dca565b610e9f565b34801561050e57600080fd5b506103f161051d366004612dfd565b610fb3565b34801561052e57600080fd5b506102f360135481565b34801561054457600080fd5b506102f360105481565b34801561055a57600080fd5b506102f360145481565b34801561057057600080fd5b506103f161057f366004612d6f565b611045565b34801561059057600080fd5b50601d546102cd90600160a81b900460ff1681565b3480156105b157600080fd5b506102f36105c0366004612d6f565b611090565b3480156105d157600080fd5b506103f16110ef565b3480156105e657600080fd5b50601a54610342906001600160a01b031681565b34801561060657600080fd5b506102cd610615366004612d6f565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063f57600080fd5b506000546001600160a01b0316610342565b34801561065d57600080fd5b506103f161066c366004612ec2565b611163565b34801561067d57600080fd5b506102f3600f5481565b34801561069357600080fd5b50610297611261565b3480156106a857600080fd5b506102cd6106b7366004612ce9565b611270565b3480156106c857600080fd5b506102cd6106d7366004612ce9565b6112a7565b3480156106e857600080fd5b506103f16106f7366004612d56565b6112b4565b34801561070857600080fd5b50600d546102f3565b34801561071d57600080fd5b506103f161072c366004612d6f565b61139e565b34801561073d57600080fd5b506102cd61074c366004612d6f565b600e6020526000908152604090205460ff1681565b34801561076d57600080fd5b506103f161077c366004612eee565b6114e7565b34801561078d57600080fd5b506103f161079c366004612ec2565b6115f2565b3480156107ad57600080fd5b506102f36107bc366004612f1c565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107f357600080fd5b506103f1610802366004612dca565b6116e7565b34801561081357600080fd5b506102f3601e5481565b34801561082957600080fd5b506103f1610838366004612d6f565b61175e565b34801561084957600080fd5b506103f1610858366004612d6f565b611848565b60606007805461086c90612f4a565b80601f016020809104026020016040519081016040528092919081815260200182805461089890612f4a565b80156108e55780601f106108ba576101008083540402835291602001916108e5565b820191906000526020600020905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b60006108fc3384846119cb565b5060015b92915050565b6000610913848484611aef565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461094e918691610949908690612f9b565b6119cb565b5060019392505050565b6000600c548211156109c45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109ce611d99565b90506109da8184612fb2565b9392505050565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03811660009081526005602052604090205460ff16610a735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109bb565b60005b600654811015610b9457816001600160a01b031660068281548110610a9d57610a9d613009565b6000918252602090912001546001600160a01b03161415610b825760068054610ac890600190612f9b565b81548110610ad857610ad8613009565b600091825260209091200154600680546001600160a01b039092169183908110610b0457610b04613009565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610b5c57610b5c61301f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b8c81613035565b915050610a76565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108fc918590610949908690613050565b3360008181526005602052604090205460ff1615610c445760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109bb565b6000610c4f83611dbc565b505050506001600160a01b038516600090815260016020526040902054929350610c7d928492509050612f9b565b6001600160a01b038316600090815260016020526040902055600c54610ca4908290612f9b565b600c55600d54610cb5908490613050565b600d55505050565b6000600a54831115610d115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109bb565b81610d31576000610d2184611dbc565b5094965061090095505050505050565b6000610d3c84611dbc565b5093965061090095505050505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03811660009081526005602052604090205460ff1615610ddf5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109bb565b6001600160a01b03811660009081526001602052604090205415610e39576001600160a01b038116600090815260016020526040902054610e1f90610958565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ec95760405162461bcd60e51b81526004016109bb90612fd4565b601a5460ff600160a01b9091041615158115151415610f5b5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016109bb565b601a8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610fa890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610fdd5760405162461bcd60e51b81526004016109bb90612fd4565b60005b8151811015610b94576001600e600084848151811061100157611001613009565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061103d81613035565b915050610fe0565b6000546001600160a01b0316331461106f5760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6001600160a01b03811660009081526005602052604081205460ff16156110cd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461090090610958565b6000546001600160a01b031633146111195760405162461bcd60e51b81526004016109bb90612fd4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461118d5760405162461bcd60e51b81526004016109bb90612fd4565b600f83905560118290556013819055806111a78385613050565b6111b19190613050565b6018819055600a10156112125760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b60648201526084016109bb565b600f54601154601354604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b60606008805461086c90612f4a565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108fc918590610949908690612f9b565b60006108fc338484611aef565b6000546001600160a01b031633146112de5760405162461bcd60e51b81526004016109bb90612fd4565b620186a06112eb600b5490565b6112f59190612fb2565b81116113695760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016109bb565b601e8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610fa8565b6000546001600160a01b031633146113c85760405162461bcd60e51b81526004016109bb90612fd4565b601a546001600160a01b03828116911614156114375760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109bb565b6001600160a01b0381166114995760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610fa8565b6000546001600160a01b031633146115115760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03821660009081526004602052604090205460ff16151581151514156115935760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016109bb565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461161c5760405162461bcd60e51b81526004016109bb90612fd4565b601083905560128290556014819055806116368385613050565b6116409190613050565b6019819055600a10156116a15760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b60648201526084016109bb565b601054601254601454604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611254565b6000546001600160a01b031633146117115760405162461bcd60e51b81526004016109bb90612fd4565b601d8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610fa890831515815260200190565b6000546001600160a01b031633146117885760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b0381166117ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118725760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b0381163014156118cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016109bb565b6001600160a01b0381166118e357610b943347611e17565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613068565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190613081565b5050505b50565b6001600160a01b038316611a2d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b038216611a8e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109bb565b60008111611bb55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109bb565b6000546001600160a01b03848116911614801590611be157506000546001600160a01b03838116911614155b15611c74576001600160a01b0383166000908152600e602052604090205460ff16158015611c2857506001600160a01b0382166000908152600e602052604090205460ff16155b611c745760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c61636b6c6973746564210000000060448201526064016109bb565b6000611c7f30611090565b601e5490915081108015908190611ca05750601d54600160a01b900460ff16155b8015611cb95750601d546001600160a01b038581169116145b8015611cce5750601d54600160a81b900460ff165b15611d8757601d805460ff60a01b1916600160a01b179055601454601354600091611cf891613050565b90506000601254601154611d0c9190613050565b90506000611d1a8284613050565b90508015611d76578115611d4c57600081611d35848861309e565b611d3f9190612fb2565b9050611d4a81611ec6565b505b8215611d7657600081611d5f858861309e565b611d699190612fb2565b9050611d7481612114565b505b5050601d805460ff60a01b19169055505b611d928585856122bc565b5050505050565b6000806000611da66124bf565b9092509050611db58183612fb2565b9250505090565b6000806000806000806000806000806000611dd68c612642565b93509350935093506000806000611df78f878787611df2611d99565b6126a1565b919f509d509b509599509397509195509350505050919395979092949650565b600081471015611e695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109bb565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114611eb6576040519150601f19603f3d011682016040523d82523d6000602084013e611ebb565b606091505b509095945050505050565b6000611ed3600283612fb2565b90506000611ee18284612f9b565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611f1b57611f1b613009565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9891906130bd565b81600181518110611fab57611fab613009565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b815291169063791ac94790611ff19087906000908690309042906004016130da565b600060405180830381600087803b15801561200b57600080fd5b505af115801561201f573d6000803e3d6000fd5b50505050600082476120319190612f9b565b601c54601b5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af11580156120a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120c8919061314b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061214d5761214d613009565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca91906130bd565b816001815181106121dd576121dd613009565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b815291169063791ac947906122239086906000908690309042906004016130da565b600060405180830381600087803b15801561223d57600080fd5b505af1158015612251573d6000803e3d6000fd5b50505050600082476122639190612f9b565b601a5490915061227c906001600160a01b031682611e17565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff16806122fb57506001600160a01b03821660009081526004602052604090205460ff165b1561230d57612308612713565b61236b565b601d546001600160a01b038381169116141561232b57612308612747565b601d546001600160a01b038481169116141561234957612308612787565b601a54600160a01b900460ff161561236357612308612713565b61236b612747565b6001600160a01b03831660009081526005602052604090205460ff1680156123ac57506001600160a01b03821660009081526005602052604090205460ff16155b156123c1576123bc8383836127c7565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561240257506001600160a01b03821660009081526005602052604090205460ff165b15612412576123bc838383612908565b6001600160a01b03831660009081526005602052604090205460ff1615801561245457506001600160a01b03821660009081526005602052604090205460ff16155b15612464576123bc8383836129c2565b6001600160a01b03831660009081526005602052604090205460ff1680156124a457506001600160a01b03821660009081526005602052604090205460ff165b156124b4576123bc838383612a15565b6123bc8383836129c2565b600c54600a546000918291825b600654811015612611578260016000600684815481106124ee576124ee613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612559575081600260006006848154811061253257612532613009565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561256f57600c54600a54945094505050509091565b600160006006838154811061258657612586613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125b59084612f9b565b925060026000600683815481106125ce576125ce613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125fd9083612f9b565b91508061260981613035565b9150506124cc565b50600a54600c546126229190612fb2565b82101561263957600c54600a549350935050509091565b90939092509050565b600080600080600061265386612a98565b9050600061266087612ab4565b9050600061266d88612ac6565b90506000818361267d868c612f9b565b6126879190612f9b565b6126919190612f9b565b9993985091965094509092505050565b60008080806126b0858a61309e565b905060006126be868a61309e565b905060006126cc878a61309e565b905060006126da888a61309e565b9050600081836126ea8688612f9b565b6126f49190612f9b565b6126fe9190612f9b565b949d949c50929a509298505050505050505050565b6015541580156127235750601654155b801561272f5750601754155b1561273657565b600060158190556017819055601655565b60105460155414801561275d5750601254601654145b801561276c5750601454601754145b1561277357565b601054601555601454601755601254601655565b600f5460155414801561279d5750601154601654145b80156127ac5750601354601754145b156127b357565b600f54601555601354601755601154601655565b60008060008060008060006127db88611dbc565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461281a9190612f9b565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461284a908890612f9b565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461287a908790613050565b6001600160a01b038a1660009081526001602052604090205561289c81612ad8565b6128a582612b68565b6128af8584612c49565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128f491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061291c88611dbc565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461295b9190612f9b565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612992908590613050565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461287a908790613050565b60008060008060008060006129d688611dbc565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461284a9190612f9b565b6000806000806000806000612a2988611dbc565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612a689190612f9b565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461295b908890612f9b565b6000606460155483612aaa919061309e565b6109009190612fb2565b6000606460165483612aaa919061309e565b6000606460175483612aaa919061309e565b80156119c8576000612ae8611d99565b90506000612af6828461309e565b30600090815260016020526040902054909150612b14908290613050565b3060009081526001602090815260408083209390935560059052205460ff16156123bc5730600090815260026020526040902054612b53908490613050565b30600090815260026020526040902055505050565b600080601254601154612b7b9190613050565b1115612bb857601254601154612b919190613050565b601254601154612ba19190613050565b612bab908461309e565b612bb59190612fb2565b90505b8015610b94576000612bc8611d99565b90506000612bd6828461309e565b30600090815260016020526040902054909150612bf4908290613050565b3060009081526001602090815260408083209390935560059052205460ff16156119c45730600090815260026020526040902054612c33908490613050565b3060009081526002602052604090205550505050565b81600c54612c579190612f9b565b600c55600d54612c68908290613050565b600d555050565b600060208083528351808285015260005b81811015612c9c57858101830151858201604001528201612c80565b81811115612cae576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146119c857600080fd5b8035612ce481612cc4565b919050565b60008060408385031215612cfc57600080fd5b8235612d0781612cc4565b946020939093013593505050565b600080600060608486031215612d2a57600080fd5b8335612d3581612cc4565b92506020840135612d4581612cc4565b929592945050506040919091013590565b600060208284031215612d6857600080fd5b5035919050565b600060208284031215612d8157600080fd5b81356109da81612cc4565b80151581146119c857600080fd5b60008060408385031215612dad57600080fd5b823591506020830135612dbf81612d8c565b809150509250929050565b600060208284031215612ddc57600080fd5b81356109da81612d8c565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612e1057600080fd5b823567ffffffffffffffff80821115612e2857600080fd5b818501915085601f830112612e3c57600080fd5b813581811115612e4e57612e4e612de7565b8060051b604051601f19603f83011681018181108582111715612e7357612e73612de7565b604052918252848201925083810185019188831115612e9157600080fd5b938501935b82851015612eb657612ea785612cd9565b84529385019392850192612e96565b98975050505050505050565b600080600060608486031215612ed757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f0157600080fd5b8235612f0c81612cc4565b91506020830135612dbf81612d8c565b60008060408385031215612f2f57600080fd5b8235612f3a81612cc4565b91506020830135612dbf81612cc4565b600181811c90821680612f5e57607f821691505b60208210811415612f7f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612fad57612fad612f85565b500390565b600082612fcf57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561304957613049612f85565b5060010190565b6000821982111561306357613063612f85565b500190565b60006020828403121561307a57600080fd5b5051919050565b60006020828403121561309357600080fd5b81516109da81612d8c565b60008160001904831182151516156130b8576130b8612f85565b500290565b6000602082840312156130cf57600080fd5b81516109da81612cc4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561312a5784516001600160a01b031683529383019391830191600101613105565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561316057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204ebbf91c7b8053d306c85a9ef88707331aea76f6b72f285404143f2a15c6940b64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80636a01e33b1161014f578063a9059cbb116100c1578063d6a694f51161007a578063d6a694f514610781578063dd62ed3e146107a1578063e01af92c146107e7578063e2f4560514610807578063f2fde38b1461081d578063f9d0831a1461083d57600080fd5b8063a9059cbb146106bc578063afa4f3b2146106dc578063b577554a146106fc578063bb85c6d114610711578063bfd7928414610731578063c02466681461076157600080fd5b806388f820201161011357806388f82020146105fa5780638da5cb5b1461063357806390a3dd9b1461065157806393a7781f1461067157806395d89b4114610687578063a457c2d71461069c57600080fd5b80636a01e33b146105645780636ddd17131461058457806370a08231146105a5578063715018a6146105c557806375f0a874146105da57600080fd5b80633bd5d173116101e85780635342acb4116101ac5780635342acb4146104a95780635654d0b3146104e2578063583a71b6146105025780635a04e035146105225780635f35bc5c1461053857806365a8ee4f1461054e57600080fd5b80633bd5d173146104135780634549b0391461043357806349bd5a5e146104535780634b93d0591461047357806352390c021461048957600080fd5b806318160ddd1161023a57806318160ddd1461035a57806323b872dd1461036f5780632d8381191461038f578063313ce567146103af5780633685d419146103d157806339509351146103f357600080fd5b806306fdde0314610282578063095ea7b3146102ad578063142725fc146102dd5780631529fbbf146103015780631694505e1461032257600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761085d565b6040516102a49190612c6f565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004612ce9565b6108ef565b60405190151581526020016102a4565b3480156102e957600080fd5b506102f360125481565b6040519081526020016102a4565b34801561030d57600080fd5b50601a546102cd90600160a01b900460ff1681565b34801561032e57600080fd5b50601c54610342906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561036657600080fd5b50600b546102f3565b34801561037b57600080fd5b506102cd61038a366004612d15565b610906565b34801561039b57600080fd5b506102f36103aa366004612d56565b610958565b3480156103bb57600080fd5b5060095460405160ff90911681526020016102a4565b3480156103dd57600080fd5b506103f16103ec366004612d6f565b6109e1565b005b3480156103ff57600080fd5b506102cd61040e366004612ce9565b610b98565b34801561041f57600080fd5b506103f161042e366004612d56565b610bcf565b34801561043f57600080fd5b506102f361044e366004612d9a565b610cbd565b34801561045f57600080fd5b50601d54610342906001600160a01b031681565b34801561047f57600080fd5b506102f360115481565b34801561049557600080fd5b506103f16104a4366004612d6f565b610d4c565b3480156104b557600080fd5b506102cd6104c4366004612d6f565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104ee57600080fd5b506103f16104fd366004612dca565b610e9f565b34801561050e57600080fd5b506103f161051d366004612dfd565b610fb3565b34801561052e57600080fd5b506102f360135481565b34801561054457600080fd5b506102f360105481565b34801561055a57600080fd5b506102f360145481565b34801561057057600080fd5b506103f161057f366004612d6f565b611045565b34801561059057600080fd5b50601d546102cd90600160a81b900460ff1681565b3480156105b157600080fd5b506102f36105c0366004612d6f565b611090565b3480156105d157600080fd5b506103f16110ef565b3480156105e657600080fd5b50601a54610342906001600160a01b031681565b34801561060657600080fd5b506102cd610615366004612d6f565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063f57600080fd5b506000546001600160a01b0316610342565b34801561065d57600080fd5b506103f161066c366004612ec2565b611163565b34801561067d57600080fd5b506102f3600f5481565b34801561069357600080fd5b50610297611261565b3480156106a857600080fd5b506102cd6106b7366004612ce9565b611270565b3480156106c857600080fd5b506102cd6106d7366004612ce9565b6112a7565b3480156106e857600080fd5b506103f16106f7366004612d56565b6112b4565b34801561070857600080fd5b50600d546102f3565b34801561071d57600080fd5b506103f161072c366004612d6f565b61139e565b34801561073d57600080fd5b506102cd61074c366004612d6f565b600e6020526000908152604090205460ff1681565b34801561076d57600080fd5b506103f161077c366004612eee565b6114e7565b34801561078d57600080fd5b506103f161079c366004612ec2565b6115f2565b3480156107ad57600080fd5b506102f36107bc366004612f1c565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107f357600080fd5b506103f1610802366004612dca565b6116e7565b34801561081357600080fd5b506102f3601e5481565b34801561082957600080fd5b506103f1610838366004612d6f565b61175e565b34801561084957600080fd5b506103f1610858366004612d6f565b611848565b60606007805461086c90612f4a565b80601f016020809104026020016040519081016040528092919081815260200182805461089890612f4a565b80156108e55780601f106108ba576101008083540402835291602001916108e5565b820191906000526020600020905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b60006108fc3384846119cb565b5060015b92915050565b6000610913848484611aef565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461094e918691610949908690612f9b565b6119cb565b5060019392505050565b6000600c548211156109c45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109ce611d99565b90506109da8184612fb2565b9392505050565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03811660009081526005602052604090205460ff16610a735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016109bb565b60005b600654811015610b9457816001600160a01b031660068281548110610a9d57610a9d613009565b6000918252602090912001546001600160a01b03161415610b825760068054610ac890600190612f9b565b81548110610ad857610ad8613009565b600091825260209091200154600680546001600160a01b039092169183908110610b0457610b04613009565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610b5c57610b5c61301f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b8c81613035565b915050610a76565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108fc918590610949908690613050565b3360008181526005602052604090205460ff1615610c445760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109bb565b6000610c4f83611dbc565b505050506001600160a01b038516600090815260016020526040902054929350610c7d928492509050612f9b565b6001600160a01b038316600090815260016020526040902055600c54610ca4908290612f9b565b600c55600d54610cb5908490613050565b600d55505050565b6000600a54831115610d115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109bb565b81610d31576000610d2184611dbc565b5094965061090095505050505050565b6000610d3c84611dbc565b5093965061090095505050505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03811660009081526005602052604090205460ff1615610ddf5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109bb565b6001600160a01b03811660009081526001602052604090205415610e39576001600160a01b038116600090815260016020526040902054610e1f90610958565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ec95760405162461bcd60e51b81526004016109bb90612fd4565b601a5460ff600160a01b9091041615158115151415610f5b5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016109bb565b601a8054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610fa890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610fdd5760405162461bcd60e51b81526004016109bb90612fd4565b60005b8151811015610b94576001600e600084848151811061100157611001613009565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061103d81613035565b915050610fe0565b6000546001600160a01b0316331461106f5760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6001600160a01b03811660009081526005602052604081205460ff16156110cd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461090090610958565b6000546001600160a01b031633146111195760405162461bcd60e51b81526004016109bb90612fd4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461118d5760405162461bcd60e51b81526004016109bb90612fd4565b600f83905560118290556013819055806111a78385613050565b6111b19190613050565b6018819055600a10156112125760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b60648201526084016109bb565b600f54601154601354604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b60606008805461086c90612f4a565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108fc918590610949908690612f9b565b60006108fc338484611aef565b6000546001600160a01b031633146112de5760405162461bcd60e51b81526004016109bb90612fd4565b620186a06112eb600b5490565b6112f59190612fb2565b81116113695760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016109bb565b601e8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610fa8565b6000546001600160a01b031633146113c85760405162461bcd60e51b81526004016109bb90612fd4565b601a546001600160a01b03828116911614156114375760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109bb565b6001600160a01b0381166114995760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610fa8565b6000546001600160a01b031633146115115760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b03821660009081526004602052604090205460ff16151581151514156115935760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016109bb565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461161c5760405162461bcd60e51b81526004016109bb90612fd4565b601083905560128290556014819055806116368385613050565b6116409190613050565b6019819055600a10156116a15760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b60648201526084016109bb565b601054601254601454604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001611254565b6000546001600160a01b031633146117115760405162461bcd60e51b81526004016109bb90612fd4565b601d8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610fa890831515815260200190565b6000546001600160a01b031633146117885760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b0381166117ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118725760405162461bcd60e51b81526004016109bb90612fd4565b6001600160a01b0381163014156118cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016109bb565b6001600160a01b0381166118e357610b943347611e17565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613068565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190613081565b5050505b50565b6001600160a01b038316611a2d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b038216611a8e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109bb565b60008111611bb55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109bb565b6000546001600160a01b03848116911614801590611be157506000546001600160a01b03838116911614155b15611c74576001600160a01b0383166000908152600e602052604090205460ff16158015611c2857506001600160a01b0382166000908152600e602052604090205460ff16155b611c745760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c61636b6c6973746564210000000060448201526064016109bb565b6000611c7f30611090565b601e5490915081108015908190611ca05750601d54600160a01b900460ff16155b8015611cb95750601d546001600160a01b038581169116145b8015611cce5750601d54600160a81b900460ff165b15611d8757601d805460ff60a01b1916600160a01b179055601454601354600091611cf891613050565b90506000601254601154611d0c9190613050565b90506000611d1a8284613050565b90508015611d76578115611d4c57600081611d35848861309e565b611d3f9190612fb2565b9050611d4a81611ec6565b505b8215611d7657600081611d5f858861309e565b611d699190612fb2565b9050611d7481612114565b505b5050601d805460ff60a01b19169055505b611d928585856122bc565b5050505050565b6000806000611da66124bf565b9092509050611db58183612fb2565b9250505090565b6000806000806000806000806000806000611dd68c612642565b93509350935093506000806000611df78f878787611df2611d99565b6126a1565b919f509d509b509599509397509195509350505050919395979092949650565b600081471015611e695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109bb565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114611eb6576040519150601f19603f3d011682016040523d82523d6000602084013e611ebb565b606091505b509095945050505050565b6000611ed3600283612fb2565b90506000611ee18284612f9b565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611f1b57611f1b613009565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9891906130bd565b81600181518110611fab57611fab613009565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b815291169063791ac94790611ff19087906000908690309042906004016130da565b600060405180830381600087803b15801561200b57600080fd5b505af115801561201f573d6000803e3d6000fd5b50505050600082476120319190612f9b565b601c54601b5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af11580156120a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120c8919061314b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061214d5761214d613009565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca91906130bd565b816001815181106121dd576121dd613009565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b815291169063791ac947906122239086906000908690309042906004016130da565b600060405180830381600087803b15801561223d57600080fd5b505af1158015612251573d6000803e3d6000fd5b50505050600082476122639190612f9b565b601a5490915061227c906001600160a01b031682611e17565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff16806122fb57506001600160a01b03821660009081526004602052604090205460ff165b1561230d57612308612713565b61236b565b601d546001600160a01b038381169116141561232b57612308612747565b601d546001600160a01b038481169116141561234957612308612787565b601a54600160a01b900460ff161561236357612308612713565b61236b612747565b6001600160a01b03831660009081526005602052604090205460ff1680156123ac57506001600160a01b03821660009081526005602052604090205460ff16155b156123c1576123bc8383836127c7565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561240257506001600160a01b03821660009081526005602052604090205460ff165b15612412576123bc838383612908565b6001600160a01b03831660009081526005602052604090205460ff1615801561245457506001600160a01b03821660009081526005602052604090205460ff16155b15612464576123bc8383836129c2565b6001600160a01b03831660009081526005602052604090205460ff1680156124a457506001600160a01b03821660009081526005602052604090205460ff165b156124b4576123bc838383612a15565b6123bc8383836129c2565b600c54600a546000918291825b600654811015612611578260016000600684815481106124ee576124ee613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612559575081600260006006848154811061253257612532613009565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561256f57600c54600a54945094505050509091565b600160006006838154811061258657612586613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125b59084612f9b565b925060026000600683815481106125ce576125ce613009565b60009182526020808320909101546001600160a01b031683528201929092526040019020546125fd9083612f9b565b91508061260981613035565b9150506124cc565b50600a54600c546126229190612fb2565b82101561263957600c54600a549350935050509091565b90939092509050565b600080600080600061265386612a98565b9050600061266087612ab4565b9050600061266d88612ac6565b90506000818361267d868c612f9b565b6126879190612f9b565b6126919190612f9b565b9993985091965094509092505050565b60008080806126b0858a61309e565b905060006126be868a61309e565b905060006126cc878a61309e565b905060006126da888a61309e565b9050600081836126ea8688612f9b565b6126f49190612f9b565b6126fe9190612f9b565b949d949c50929a509298505050505050505050565b6015541580156127235750601654155b801561272f5750601754155b1561273657565b600060158190556017819055601655565b60105460155414801561275d5750601254601654145b801561276c5750601454601754145b1561277357565b601054601555601454601755601254601655565b600f5460155414801561279d5750601154601654145b80156127ac5750601354601754145b156127b357565b600f54601555601354601755601154601655565b60008060008060008060006127db88611dbc565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461281a9190612f9b565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461284a908890612f9b565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461287a908790613050565b6001600160a01b038a1660009081526001602052604090205561289c81612ad8565b6128a582612b68565b6128af8584612c49565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128f491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061291c88611dbc565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461295b9190612f9b565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612992908590613050565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461287a908790613050565b60008060008060008060006129d688611dbc565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461284a9190612f9b565b6000806000806000806000612a2988611dbc565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054612a689190612f9b565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461295b908890612f9b565b6000606460155483612aaa919061309e565b6109009190612fb2565b6000606460165483612aaa919061309e565b6000606460175483612aaa919061309e565b80156119c8576000612ae8611d99565b90506000612af6828461309e565b30600090815260016020526040902054909150612b14908290613050565b3060009081526001602090815260408083209390935560059052205460ff16156123bc5730600090815260026020526040902054612b53908490613050565b30600090815260026020526040902055505050565b600080601254601154612b7b9190613050565b1115612bb857601254601154612b919190613050565b601254601154612ba19190613050565b612bab908461309e565b612bb59190612fb2565b90505b8015610b94576000612bc8611d99565b90506000612bd6828461309e565b30600090815260016020526040902054909150612bf4908290613050565b3060009081526001602090815260408083209390935560059052205460ff16156119c45730600090815260026020526040902054612c33908490613050565b3060009081526002602052604090205550505050565b81600c54612c579190612f9b565b600c55600d54612c68908290613050565b600d555050565b600060208083528351808285015260005b81811015612c9c57858101830151858201604001528201612c80565b81811115612cae576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146119c857600080fd5b8035612ce481612cc4565b919050565b60008060408385031215612cfc57600080fd5b8235612d0781612cc4565b946020939093013593505050565b600080600060608486031215612d2a57600080fd5b8335612d3581612cc4565b92506020840135612d4581612cc4565b929592945050506040919091013590565b600060208284031215612d6857600080fd5b5035919050565b600060208284031215612d8157600080fd5b81356109da81612cc4565b80151581146119c857600080fd5b60008060408385031215612dad57600080fd5b823591506020830135612dbf81612d8c565b809150509250929050565b600060208284031215612ddc57600080fd5b81356109da81612d8c565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612e1057600080fd5b823567ffffffffffffffff80821115612e2857600080fd5b818501915085601f830112612e3c57600080fd5b813581811115612e4e57612e4e612de7565b8060051b604051601f19603f83011681018181108582111715612e7357612e73612de7565b604052918252848201925083810185019188831115612e9157600080fd5b938501935b82851015612eb657612ea785612cd9565b84529385019392850192612e96565b98975050505050505050565b600080600060608486031215612ed757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f0157600080fd5b8235612f0c81612cc4565b91506020830135612dbf81612d8c565b60008060408385031215612f2f57600080fd5b8235612f3a81612cc4565b91506020830135612dbf81612cc4565b600181811c90821680612f5e57607f821691505b60208210811415612f7f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612fad57612fad612f85565b500390565b600082612fcf57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561304957613049612f85565b5060010190565b6000821982111561306357613063612f85565b500190565b60006020828403121561307a57600080fd5b5051919050565b60006020828403121561309357600080fd5b81516109da81612d8c565b60008160001904831182151516156130b8576130b8612f85565b500290565b6000602082840312156130cf57600080fd5b81516109da81612cc4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561312a5784516001600160a01b031683529383019391830191600101613105565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561316057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204ebbf91c7b8053d306c85a9ef88707331aea76f6b72f285404143f2a15c6940b64736f6c634300080b0033

Deployed Bytecode Sourcemap

12907:23265:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16754:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17672:161;;;;;;;;;;-1:-1:-1;17672:161:0;;;;;:::i;:::-;;:::i;:::-;;;1376:14:1;;1369:22;1351:41;;1339:2;1324:18;17672:161:0;1211:187:1;13951:33:0;;;;;;;;;;;;;;;;;;;1549:25:1;;;1537:2;1522:18;13951:33:0;1403:177:1;14292:44:0;;;;;;;;;;-1:-1:-1;14292:44:0;;;;-1:-1:-1;;;14292:44:0;;;;;;14423:42;;;;;;;;;;-1:-1:-1;14423:42:0;;;;-1:-1:-1;;;;;14423:42:0;;;;;;-1:-1:-1;;;;;1776:32:1;;;1758:51;;1746:2;1731:18;14423:42:0;1585:230:1;17031:101:0;;;;;;;;;;-1:-1:-1;17111:13:0;;17031:101;;17841:266;;;;;;;;;;-1:-1:-1;17841:266:0;;;;;:::i;:::-;;:::i;19634:250::-;;;;;;;;;;-1:-1:-1;19634:250:0;;;;;:::i;:::-;;:::i;16940:83::-;;;;;;;;;;-1:-1:-1;17006:9:0;;16940:83;;17006:9;;;;2608:36:1;;2596:2;2581:18;16940:83:0;2466:184:1;20233:479:0;;;;;;;;;;-1:-1:-1;20233:479:0;;;;;:::i;:::-;;:::i;:::-;;18115:215;;;;;;;;;;-1:-1:-1;18115:215:0;;;;;:::i;:::-;;:::i;18811:369::-;;;;;;;;;;-1:-1:-1;18811:369:0;;;;;:::i;:::-;;:::i;19188:438::-;;;;;;;;;;-1:-1:-1;19188:438:0;;;;;:::i;:::-;;:::i;14472:29::-;;;;;;;;;;-1:-1:-1;14472:29:0;;;;-1:-1:-1;;;;;14472:29:0;;;13912:32;;;;;;;;;;;;;;;;19892:333;;;;;;;;;;-1:-1:-1;19892:333:0;;;;;:::i;:::-;;:::i;25841:124::-;;;;;;;;;;-1:-1:-1;25841:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;25929:28:0;25905:4;25929:28;;;:19;:28;;;;;;;;;25841:124;35531:335;;;;;;;;;;-1:-1:-1;35531:335:0;;;;;:::i;:::-;;:::i;35882:176::-;;;;;;;;;;-1:-1:-1;35882:176:0;;;;;:::i;:::-;;:::i;13993:32::-;;;;;;;;;;;;;;;;13876:27;;;;;;;;;;;;;;;;14032:33;;;;;;;;;;;;;;;;36065:98;;;;;;;;;;-1:-1:-1;36065:98:0;;;;;:::i;:::-;;:::i;14546:23::-;;;;;;;;;;-1:-1:-1;14546:23:0;;;;-1:-1:-1;;;14546:23:0;;;;;;17140:198;;;;;;;;;;-1:-1:-1;17140:198:0;;;;;:::i;:::-;;:::i;1003:148::-;;;;;;;;;;;;;:::i;14253:30::-;;;;;;;;;;-1:-1:-1;14253:30:0;;;;-1:-1:-1;;;;;14253:30:0;;;18571:120;;;;;;;;;;-1:-1:-1;18571:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18663:20:0;18639:4;18663:20;;;:11;:20;;;;;;;;;18571:120;789:79;;;;;;;;;;-1:-1:-1;827:7:0;854:6;-1:-1:-1;;;;;854:6:0;789:79;;34458:520;;;;;;;;;;-1:-1:-1;34458:520:0;;;;;:::i;:::-;;:::i;13843:26::-;;;;;;;;;;;;;;;;16845:87;;;;;;;;;;;;;:::i;18338:225::-;;;;;;;;;;-1:-1:-1;18338:225:0;;;;;:::i;:::-;;:::i;17346:167::-;;;;;;;;;;-1:-1:-1;17346:167:0;;;;;:::i;:::-;;:::i;29678:289::-;;;;;;;;;;-1:-1:-1;29678:289:0;;;;;:::i;:::-;;:::i;18699:104::-;;;;;;;;;;-1:-1:-1;18785:10:0;;18699:104;;34079:371;;;;;;;;;;-1:-1:-1;34079:371:0;;;;;:::i;:::-;;:::i;13794:36::-;;;;;;;;;;-1:-1:-1;13794:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33775:292;;;;;;;;;;-1:-1:-1;33775:292:0;;;;;:::i;:::-;;:::i;34986:537::-;;;;;;;;;;-1:-1:-1;34986:537:0;;;;;:::i;:::-;;:::i;17521:143::-;;;;;;;;;;-1:-1:-1;17521:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17629:18:0;;;17602:7;17629:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17521:143;29979;;;;;;;;;;-1:-1:-1;29979:143:0;;;;;:::i;:::-;;:::i;14576:33::-;;;;;;;;;;;;;;;;1159:244;;;;;;;;;;-1:-1:-1;1159:244:0;;;;;:::i;:::-;;:::i;20757:442::-;;;;;;;;;;-1:-1:-1;20757:442:0;;;;;:::i;:::-;;:::i;16754:83::-;16791:13;16824:5;16817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16754:83;:::o;17672:161::-;17747:4;17764:39;193:10;17787:7;17796:6;17764:8;:39::i;:::-;-1:-1:-1;17821:4:0;17672:161;;;;;:::o;17841:266::-;17939:4;17956:36;17966:6;17974:9;17985:6;17956:9;:36::i;:::-;-1:-1:-1;;;;;18034:19:0;;;;;;:11;:19;;;;;;;;193:10;18034:33;;;;;;;;;18003:74;;18012:6;;18034:42;;18070:6;;18034:42;:::i;:::-;18003:8;:74::i;:::-;-1:-1:-1;18095:4:0;17841:266;;;;;:::o;19634:250::-;19700:7;19739;;19728;:18;;19720:73;;;;-1:-1:-1;;;19720:73:0;;7006:2:1;19720:73:0;;;6988:21:1;7045:2;7025:18;;;7018:30;7084:34;7064:18;;;7057:62;-1:-1:-1;;;7135:18:1;;;7128:40;7185:19;;19720:73:0;;;;;;;;;19804:19;19827:10;:8;:10::i;:::-;19804:33;-1:-1:-1;19855:21:0;19804:33;19855:7;:21;:::i;:::-;19848:28;19634:250;-1:-1:-1;;;19634:250:0:o;20233:479::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20315:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20307:60;;;::::0;-1:-1:-1;;;20307:60:0;;8000:2:1;20307:60:0::1;::::0;::::1;7982:21:1::0;8039:2;8019:18;;;8012:30;8078:29;8058:18;;;8051:57;8125:18;;20307:60:0::1;7798:351:1::0;20307:60:0::1;20383:9;20378:327;20402:9;:16:::0;20398:20;::::1;20378:327;;;20460:7;-1:-1:-1::0;;;;;20444:23:0::1;:9;20454:1;20444:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20444:12:0::1;:23;20440:254;;;20503:9;20513:16:::0;;:20:::1;::::0;20532:1:::1;::::0;20513:20:::1;:::i;:::-;20503:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20488:9:::1;:12:::0;;-1:-1:-1;;;;;20503:31:0;;::::1;::::0;20498:1;;20488:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20488:46:0::1;-1:-1:-1::0;;;;;20488:46:0;;::::1;;::::0;;20553:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20592:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20592:28:0::1;::::0;;20639:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20639:15:0;;;;;-1:-1:-1;;;;;;20639:15:0::1;::::0;;;;;20378:327:::1;20233:479:::0;:::o;20440:254::-:1;20420:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20378:327;;;;20233:479:::0;:::o;18115:215::-;193:10;18203:4;18252:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18252:34:0;;;;;;;;;;18203:4;;18220:80;;18243:7;;18252:47;;18289:10;;18252:47;:::i;18811:369::-;193:10;18863:14;18912:19;;;:11;:19;;;;;;;;18911:20;18903:77;;;;-1:-1:-1;;;18903:77:0;;8893:2:1;18903:77:0;;;8875:21:1;8932:2;8912:18;;;8905:30;8971:34;8951:18;;;8944:62;-1:-1:-1;;;9022:18:1;;;9015:42;9074:19;;18903:77:0;8691:408:1;18903:77:0;18992:15;19017:19;19028:7;19017:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19065:15:0;;;;;;:7;:15;;;;;;18991:45;;-1:-1:-1;19065:25:0;;18991:45;;-1:-1:-1;19065:15:0;-1:-1:-1;19065:25:0;:::i;:::-;-1:-1:-1;;;;;19047:15:0;;;;;;:7;:15;;;;;:43;19111:7;;:17;;19121:7;;19111:17;:::i;:::-;19101:7;:27;19152:10;;:20;;19165:7;;19152:20;:::i;:::-;19139:10;:33;-1:-1:-1;;;18811:369:0:o;19188:438::-;19278:7;19317;;19306;:18;;19298:62;;;;-1:-1:-1;;;19298:62:0;;9306:2:1;19298:62:0;;;9288:21:1;9345:2;9325:18;;;9318:30;9384:33;9364:18;;;9357:61;9435:18;;19298:62:0;9104:355:1;19298:62:0;19376:17;19371:248;;19411:15;19436:19;19447:7;19436:10;:19::i;:::-;-1:-1:-1;19410:45:0;;-1:-1:-1;19470:14:0;;-1:-1:-1;;;;;;19470:14:0;19371:248;19519:23;19551:19;19562:7;19551:10;:19::i;:::-;-1:-1:-1;19517:53:0;;-1:-1:-1;19585:22:0;;-1:-1:-1;;;;;;19585:22:0;19892:333;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19975:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19974:21;19966:61;;;::::0;-1:-1:-1;;;19966:61:0;;9666:2:1;19966:61:0::1;::::0;::::1;9648:21:1::0;9705:2;9685:18;;;9678:30;9744:29;9724:18;;;9717:57;9791:18;;19966:61:0::1;9464:351:1::0;19966:61:0::1;-1:-1:-1::0;;;;;20041:16:0;::::1;20060:1;20041:16:::0;;;:7:::1;:16;::::0;;;;;:20;20038:108:::1;;-1:-1:-1::0;;;;;20117:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20097:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20078:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20038:108:::1;-1:-1:-1::0;;;;;20156:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20156:27:0::1;20179:4;20156:27:::0;;::::1;::::0;;;20194:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20194:23:0::1;::::0;;::::1;::::0;;19892:333::o;35531:335::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;35630:32:::1;::::0;::::1;-1:-1:-1::0;;;35630:32:0;;::::1;;:42;;::::0;::::1;;;;35622:121;;;::::0;-1:-1:-1;;;35622:121:0;;10022:2:1;35622:121:0::1;::::0;::::1;10004:21:1::0;10061:2;10041:18;;;10034:30;10100:34;10080:18;;;10073:62;10171:34;10151:18;;;10144:62;-1:-1:-1;;;10222:19:1;;;10215:33;10265:19;;35622:121:0::1;9820:470:1::0;35622:121:0::1;35754:32;:41:::0;;;::::1;;-1:-1:-1::0;;;35754:41:0::1;-1:-1:-1::0;;;;35754:41:0;;::::1;;::::0;;35811:47:::1;::::0;::::1;::::0;::::1;::::0;35789:6;1376:14:1;1369:22;1351:41;;1339:2;1324:18;;1211:187;35811:47:0::1;;;;;;;;35531:335:::0;:::o;35882:176::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;35965:9:::1;35960:91;35984:5;:12;35980:1;:16;35960:91;;;36035:4;36018;:14;36023:5;36029:1;36023:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;36018:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;36018:14:0;:21;;-1:-1:-1;;36018:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35998:3;::::1;::::0;::::1;:::i;:::-;;;;35960:91;;36065:98:::0;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36135:12:0::1;36150:5;36135:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;36135:20:0::1;::::0;;36065:98::o;17140:198::-;-1:-1:-1;;;;;17230:20:0;;17206:7;17230:20;;;:11;:20;;;;;;;;17226:49;;;-1:-1:-1;;;;;;17259:16:0;;;;;:7;:16;;;;;;;17140:198::o;17226:49::-;-1:-1:-1;;;;;17313:16:0;;;;;;:7;:16;;;;;;17293:37;;:19;:37::i;1003:148::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;1110:1:::1;1094:6:::0;;1073:40:::1;::::0;-1:-1:-1;;;;;1094:6:0;;::::1;::::0;1073:40:::1;::::0;1110:1;;1073:40:::1;1141:1;1124:19:::0;;-1:-1:-1;;;;;;1124:19:0::1;::::0;;1003:148::o;34458:520::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;34596:11:::1;:26:::0;;;34633:17:::1;:38:::0;;;34682:17:::1;:38:::0;;;34702:18;34757:31:::1;34653:18:::0;34610:12;34757:31:::1;:::i;:::-;:51;;;;:::i;:::-;34742:12;:66:::0;;;34845:2:::1;-1:-1:-1::0;34829:18:0::1;34821:66;;;::::0;-1:-1:-1;;;34821:66:0;;10497:2:1;34821:66:0::1;::::0;::::1;10479:21:1::0;10536:2;10516:18;;;10509:30;10575:34;10555:18;;;10548:62;-1:-1:-1;;;10626:18:1;;;10619:33;10669:19;;34821:66:0::1;10295:399:1::0;34821:66:0::1;34920:11;::::0;34933:17:::1;::::0;34952::::1;::::0;34905:65:::1;::::0;;10901:25:1;;;10957:2;10942:18;;10935:34;;;;10985:18;;;10978:34;34905:65:0::1;::::0;10889:2:1;10874:18;34905:65:0::1;;;;;;;;34458:520:::0;;;:::o;16845:87::-;16884:13;16917:7;16910:14;;;;;:::i;18338:225::-;193:10;18431:4;18480:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18480:34:0;;;;;;;;;;18431:4;;18448:85;;18471:7;;18480:52;;18517:15;;18480:52;:::i;17346:167::-;17424:4;17441:42;193:10;17465:9;17476:6;17441:9;:42::i;29678:289::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;29796:3:::1;29780:13;17111::::0;;;17031:101;29780:13:::1;:19;;;;:::i;:::-;29768:9;:31;29760:106;;;::::0;-1:-1:-1;;;29760:106:0;;11225:2:1;29760:106:0::1;::::0;::::1;11207:21:1::0;11264:2;11244:18;;;11237:30;11303:34;11283:18;;;11276:62;11374:32;11354:18;;;11347:60;11424:19;;29760:106:0::1;11023:426:1::0;29760:106:0::1;29877:18;:30:::0;;;29923:36:::1;::::0;1549:25:1;;;29923:36:0::1;::::0;1537:2:1;1522:18;29923:36:0::1;1403:177:1::0;34079:371:0;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;34194:15:::1;::::0;-1:-1:-1;;;;;34174:35:0;;::::1;34194:15:::0;::::1;34174:35;;34166:88;;;::::0;-1:-1:-1;;;34166:88:0;;11656:2:1;34166:88:0::1;::::0;::::1;11638:21:1::0;11695:2;11675:18;;;11668:30;11734:34;11714:18;;;11707:62;-1:-1:-1;;;11785:18:1;;;11778:38;11833:19;;34166:88:0::1;11454:404:1::0;34166:88:0::1;-1:-1:-1::0;;;;;34273:28:0;::::1;34265:77;;;::::0;-1:-1:-1;;;34265:77:0;;12065:2:1;34265:77:0::1;::::0;::::1;12047:21:1::0;12104:2;12084:18;;;12077:30;12143:34;12123:18;;;12116:62;-1:-1:-1;;;12194:18:1;;;12187:34;12238:19;;34265:77:0::1;11863:400:1::0;34265:77:0::1;34353:15;:34:::0;;-1:-1:-1;;;;;;34353:34:0::1;-1:-1:-1::0;;;;;34353:34:0;::::1;::::0;;::::1;::::0;;;34403:39:::1;::::0;1758:51:1;;;34403:39:0::1;::::0;1746:2:1;1731:18;34403:39:0::1;1585:230:1::0;33775:292:0;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33870:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;33862:95;;;::::0;-1:-1:-1;;;33862:95:0;;12470:2:1;33862:95:0::1;::::0;::::1;12452:21:1::0;12509:2;12489:18;;;12482:30;12548:34;12528:18;;;12521:62;-1:-1:-1;;;12599:18:1;;;12592:40;12649:19;;33862:95:0::1;12268:406:1::0;33862:95:0::1;-1:-1:-1::0;;;;;33968:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;33968:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34025:34;;1351:41:1;;;34025:34:0::1;::::0;1324:18:1;34025:34:0::1;;;;;;;33775:292:::0;;:::o;34986:537::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;35128:12:::1;:28:::0;;;35167:18:::1;:40:::0;;;35218:18:::1;:40:::0;;;35239:19;35292:33:::1;35188:19:::0;35143:13;35292:33:::1;:::i;:::-;:54;;;;:::i;:::-;35276:13;:70:::0;;;35385:2:::1;-1:-1:-1::0;35368:19:0::1;35360:68;;;::::0;-1:-1:-1;;;35360:68:0;;12881:2:1;35360:68:0::1;::::0;::::1;12863:21:1::0;12920:2;12900:18;;;12893:30;12959:34;12939:18;;;12932:62;-1:-1:-1;;;13010:18:1;;;13003:34;13054:19;;35360:68:0::1;12679:400:1::0;35360:68:0::1;35462:12;::::0;35476:18:::1;::::0;35496::::1;::::0;35446:69:::1;::::0;;10901:25:1;;;10957:2;10942:18;;10935:34;;;;10985:18;;;10978:34;35446:69:0::1;::::0;10889:2:1;10874:18;35446:69:0::1;10699:319:1::0;29979:143:0;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;30048:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;30048:22:0::1;-1:-1:-1::0;;;;30048:22:0;;::::1;;::::0;;30086:28:::1;::::0;::::1;::::0;::::1;::::0;30062:8;1376:14:1;1369:22;1351:41;;1339:2;1324:18;;1211:187;1159:244:0;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1248:22:0;::::1;1240:73;;;::::0;-1:-1:-1;;;1240:73:0;;13286:2:1;1240:73:0::1;::::0;::::1;13268:21:1::0;13325:2;13305:18;;;13298:30;13364:34;13344:18;;;13337:62;-1:-1:-1;;;13415:18:1;;;13408:36;13461:19;;1240:73:0::1;13084:402:1::0;1240:73:0::1;1350:6;::::0;;1329:38:::1;::::0;-1:-1:-1;;;;;1329:38:0;;::::1;::::0;1350:6;::::1;::::0;1329:38:::1;::::0;::::1;1378:6;:17:::0;;-1:-1:-1;;;;;;1378:17:0::1;-1:-1:-1::0;;;;;1378:17:0;;;::::1;::::0;;;::::1;::::0;;1159:244::o;20757:442::-;916:6;;-1:-1:-1;;;;;916:6:0;193:10;916:22;908:67;;;;-1:-1:-1;;;908:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20836:22:0;::::1;20853:4;20836:22;;20828:67;;;::::0;-1:-1:-1;;;20828:67:0;;13693:2:1;20828:67:0::1;::::0;::::1;13675:21:1::0;;;13712:18;;;13705:30;13771:34;13751:18;;;13744:62;13823:18;;20828:67:0::1;13491:356:1::0;20828:67:0::1;-1:-1:-1::0;;;;;20910:21:0;::::1;20906:127;;20948:52;20956:10;20978:21;20948:29;:52::i;20906:127::-;21105:35;::::0;-1:-1:-1;;;21105:35:0;;21134:4:::1;21105:35;::::0;::::1;1758:51:1::0;21070:5:0;;21043:17:::1;::::0;-1:-1:-1;;;;;21105:20:0;::::1;::::0;::::1;::::0;1731:18:1;;21105:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21151:40;::::0;-1:-1:-1;;;21151:40:0;;21171:10:::1;21151:40;::::0;::::1;14215:51:1::0;14282:18;;;14275:34;;;21087:53:0;;-1:-1:-1;;;;;;21151:19:0;::::1;::::0;::::1;::::0;14188:18:1;;21151:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20817:382;;986:1;20757:442:::0;:::o;25973:337::-;-1:-1:-1;;;;;26066:19:0;;26058:68;;;;-1:-1:-1;;;26058:68:0;;14772:2:1;26058:68:0;;;14754:21:1;14811:2;14791:18;;;14784:30;14850:34;14830:18;;;14823:62;-1:-1:-1;;;14901:18:1;;;14894:34;14945:19;;26058:68:0;14570:400:1;26058:68:0;-1:-1:-1;;;;;26145:21:0;;26137:68;;;;-1:-1:-1;;;26137:68:0;;15177:2:1;26137:68:0;;;15159:21:1;15216:2;15196:18;;;15189:30;15255:34;15235:18;;;15228:62;-1:-1:-1;;;15306:18:1;;;15299:32;15348:19;;26137:68:0;14975:398:1;26137:68:0;-1:-1:-1;;;;;26218:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26270:32;;1549:25:1;;;26270:32:0;;1522:18:1;26270:32:0;;;;;;;25973:337;;;:::o;26324:1708::-;-1:-1:-1;;;;;26446:18:0;;26438:68;;;;-1:-1:-1;;;26438:68:0;;15580:2:1;26438:68:0;;;15562:21:1;15619:2;15599:18;;;15592:30;15658:34;15638:18;;;15631:62;-1:-1:-1;;;15709:18:1;;;15702:35;15754:19;;26438:68:0;15378:401:1;26438:68:0;26534:1;26525:6;:10;26517:64;;;;-1:-1:-1;;;26517:64:0;;15986:2:1;26517:64:0;;;15968:21:1;16025:2;16005:18;;;15998:30;16064:34;16044:18;;;16037:62;-1:-1:-1;;;16115:18:1;;;16108:39;16164:19;;26517:64:0;15784:405:1;26517:64:0;827:7;854:6;-1:-1:-1;;;;;26617:15:0;;;854:6;;26617:15;;;;:32;;-1:-1:-1;827:7:0;854:6;-1:-1:-1;;;;;26636:13:0;;;854:6;;26636:13;;26617:32;26613:142;;;-1:-1:-1;;;;;26675:10:0;;;;;;:4;:10;;;;;;;;26674:11;:24;;;;-1:-1:-1;;;;;;26690:8:0;;;;;;:4;:8;;;;;;;;26689:9;26674:24;26666:65;;;;-1:-1:-1;;;26666:65:0;;16396:2:1;26666:65:0;;;16378:21:1;16435:2;16415:18;;;16408:30;16474;16454:18;;;16447:58;16522:18;;26666:65:0;16194:352:1;26666:65:0;26767:28;26798:24;26816:4;26798:9;:24::i;:::-;26892:18;;26767:55;;-1:-1:-1;26868:42:0;;;;;;;26939:53;;-1:-1:-1;26976:16:0;;-1:-1:-1;;;26976:16:0;;;;26975:17;26939:53;:89;;;;-1:-1:-1;27015:13:0;;-1:-1:-1;;;;;27009:19:0;;;27015:13;;27009:19;26939:89;:117;;;;-1:-1:-1;27045:11:0;;-1:-1:-1;;;27045:11:0;;;;26939:117;26921:985;;;27083:16;:23;;-1:-1:-1;;;;27083:23:0;-1:-1:-1;;;27083:23:0;;;:16;27180:18;27160:17;;27083:23;;27160:38;;;:::i;:::-;27135:63;;27213:22;27258:18;;27238:17;;:38;;;;:::i;:::-;27213:63;-1:-1:-1;27293:18:0;27314:31;27213:63;27314:14;:31;:::i;:::-;27293:52;-1:-1:-1;27365:14:0;;27362:492;;27403:18;;27400:198;;27446:23;27514:10;27473:37;27496:14;27473:20;:37;:::i;:::-;27472:52;;;;:::i;:::-;27446:78;;27547:31;27562:15;27547:14;:31::i;:::-;27423:175;27400:198;27637:18;;27634:204;;27680:23;27748:10;27707:37;27730:14;27707:20;:37;:::i;:::-;27706:52;;;;:::i;:::-;27680:78;;27781:37;27802:15;27781:20;:37::i;:::-;27657:181;27634:204;-1:-1:-1;;27870:16:0;:24;;-1:-1:-1;;;;27870:24:0;;;-1:-1:-1;26921:985:0;27992:30;28007:4;28012:2;28015:6;27992:14;:30::i;:::-;26427:1605;;26324:1708;;;:::o;22775:160::-;22816:7;22837:15;22854;22873:19;:17;:19::i;:::-;22836:56;;-1:-1:-1;22836:56:0;-1:-1:-1;22910:17:0;22836:56;;22910:17;:::i;:::-;22903:24;;;;22775:160;:::o;21356:472::-;21415:7;21424;21433;21442;21451;21460;21469;21490:23;21515:12;21529:18;21549;21571:20;21583:7;21571:11;:20::i;:::-;21489:102;;;;;;;;21603:15;21620:23;21645:12;21661:62;21673:7;21682:4;21688:10;21700;21712;:8;:10::i;:::-;21661:11;:62::i;:::-;21602:121;;-1:-1:-1;21602:121:0;-1:-1:-1;21602:121:0;-1:-1:-1;21774:15:0;;-1:-1:-1;21791:4:0;;-1:-1:-1;21797:10:0;;-1:-1:-1;21809:10:0;-1:-1:-1;;;;21356:472:0;;;;;;;;;:::o;2776:346::-;2855:4;2904:6;2879:21;:31;;2871:73;;;;-1:-1:-1;;;2871:73:0;;16926:2:1;2871:73:0;;;16908:21:1;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;2871:73:0;16724:353:1;2871:73:0;3036:12;3054:9;-1:-1:-1;;;;;3054:14:0;3077:6;3054:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3035:54:0;;2776:346;-1:-1:-1;;;;;2776:346:0:o;28040:947::-;28099:12;28114:10;28123:1;28114:6;:10;:::i;:::-;28099:25;-1:-1:-1;28135:17:0;28155:13;28099:25;28155:6;:13;:::i;:::-;28264:16;;;28278:1;28264:16;;;;;;;;28135:33;;-1:-1:-1;28206:21:0;;28181:22;;28264:16;;;;;;;;;;-1:-1:-1;28264:16:0;28240:40;;28309:4;28291;28296:1;28291:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28291:23:0;;;:7;;;;;;;;;;:23;;;;28335:15;;:22;;;-1:-1:-1;;;28335:22:0;;;;:15;;;;;:20;;:22;;;;;28291:7;;28335:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28325:4;28330:1;28325:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28325:32:0;;;:7;;;;;;;;;:32;28370:15;;:207;;-1:-1:-1;;;28370:207:0;;:15;;;:66;;:207;;28451:4;;28370:15;;28514:4;;28541;;28561:15;;28370:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28598:18;28643:14;28619:21;:38;;;;:::i;:::-;28670:15;;28873:4;;28670:248;;-1:-1:-1;;;28670:248:0;;28743:4;28670:248;;;18874:34:1;18924:18;;;18917:34;;;28670:15:0;18967:18:1;;;18960:34;;;19010:18;;;19003:34;-1:-1:-1;;;;;28873:4:0;;;19053:19:1;;;19046:44;28892:15:0;19106:19:1;;;19099:35;28598:59:0;;-1:-1:-1;28670:15:0;;:31;;28598:59;;18808:19:1;;28670:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;28936:43:0;;;10901:25:1;;;10957:2;10942:18;;10935:34;;;10985:18;;;10978:34;;;28936:43:0;;-1:-1:-1;10889:2:1;10874:18;28936:43:0;;;;;;;28088:899;;;;;28040:947;:::o;28995:675::-;29148:16;;;29162:1;29148:16;;;;;;;;29090:21;;29065:22;;29148:16;29162:1;29148:16;;;;;;;;;;-1:-1:-1;29148:16:0;29124:40;;29193:4;29175;29180:1;29175:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29175:23:0;;;:7;;;;;;;;;;:23;;;;29219:15;;:22;;;-1:-1:-1;;;29219:22:0;;;;:15;;;;;:20;;:22;;;;;29175:7;;29219:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29209:4;29214:1;29209:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29209:32:0;;;:7;;;;;;;;;:32;29254:15;;:214;;-1:-1:-1;;;29254:214:0;;:15;;;:66;;:214;;29335:11;;29254:15;;29405:4;;29432;;29452:15;;29254:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29481:18;29526:14;29502:21;:38;;;;:::i;:::-;29561:15;;29481:59;;-1:-1:-1;29553:46:0;;-1:-1:-1;;;;;29561:15:0;29481:59;29553:34;:46::i;:::-;-1:-1:-1;29617:45:0;;;19630:25:1;;;19686:2;19671:18;;19664:34;;;29617:45:0;;19603:18:1;29617:45:0;;;;;;;29054:616;;;28995:675;:::o;30130:1117::-;-1:-1:-1;;;;;30229:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;30274:30:0;;;;;;:19;:30;;;;;;;;30229:75;30225:406;;;30336:14;:12;:14::i;:::-;30225:406;;;30383:13;;-1:-1:-1;;;;;30370:26:0;;;30383:13;;30370:26;30367:264;;;30412:12;:10;:12::i;30367:264::-;30454:13;;-1:-1:-1;;;;;30444:23:0;;;30454:13;;30444:23;30441:190;;;30483:11;:9;:11::i;30441:190::-;30514:32;;-1:-1:-1;;;30514:32:0;;;;30511:120;;;30562:14;:12;:14::i;30511:120::-;30607:12;:10;:12::i;:::-;-1:-1:-1;;;;;30647:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30671:22:0;;;;;;:11;:22;;;;;;;;30670:23;30647:46;30643:597;;;30710:48;30732:6;30740:9;30751:6;30710:21;:48::i;:::-;30130:1117;;;:::o;30643:597::-;-1:-1:-1;;;;;30781:19:0;;;;;;:11;:19;;;;;;;;30780:20;:46;;;;-1:-1:-1;;;;;;30804:22:0;;;;;;:11;:22;;;;;;;;30780:46;30776:464;;;30843:46;30863:6;30871:9;30882:6;30843:19;:46::i;30776:464::-;-1:-1:-1;;;;;30912:19:0;;;;;;:11;:19;;;;;;;;30911:20;:47;;;;-1:-1:-1;;;;;;30936:22:0;;;;;;:11;:22;;;;;;;;30935:23;30911:47;30907:333;;;30975:44;30993:6;31001:9;31012:6;30975:17;:44::i;30907:333::-;-1:-1:-1;;;;;31041:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31064:22:0;;;;;;:11;:22;;;;;;;;31041:45;31037:203;;;31103:48;31125:6;31133:9;31144:6;31103:21;:48::i;31037:203::-;31184:44;31202:6;31210:9;31221:6;31184:17;:44::i;22943:552::-;23040:7;;23076;;22993;;;;;23100:283;23124:9;:16;23120:20;;23100:283;;;23190:7;23166;:21;23174:9;23184:1;23174:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23174:12:0;23166:21;;;;;;;;;;;;;:31;;:66;;;23225:7;23201;:21;23209:9;23219:1;23209:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23209:12:0;23201:21;;;;;;;;;;;;;:31;23166:66;23162:97;;;23242:7;;23251;;23234:25;;;;;;;22943:552;;:::o;23162:97::-;23294:7;:21;23302:9;23312:1;23302:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23302:12:0;23294:21;;;;;;;;;;;;;23284:31;;:7;:31;:::i;:::-;23274:41;;23350:7;:21;23358:9;23368:1;23358:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23358:12:0;23350:21;;;;;;;;;;;;;23340:31;;:7;:31;:::i;:::-;23330:41;-1:-1:-1;23142:3:0;;;;:::i;:::-;;;;23100:283;;;;23417:7;;23407;;:17;;;;:::i;:::-;23397:7;:27;23393:58;;;23434:7;;23443;;23426:25;;;;;;22943:552;;:::o;23393:58::-;23470:7;;23479;;-1:-1:-1;22943:552:0;-1:-1:-1;22943:552:0:o;21836:420::-;21896:7;21905;21914;21923;21943:12;21958:24;21974:7;21958:15;:24::i;:::-;21943:39;;21993:18;22014:30;22036:7;22014:21;:30::i;:::-;21993:51;;22055:18;22076:30;22098:7;22076:21;:30::i;:::-;22055:51;-1:-1:-1;22117:23:0;22055:51;22160:10;22143:14;22153:4;22143:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;22117:66;22219:4;;-1:-1:-1;22225:10:0;;-1:-1:-1;22225:10:0;-1:-1:-1;21836:420:0;;-1:-1:-1;;;21836:420:0:o;22264:503::-;22399:7;;;;22455:21;22465:11;22455:7;:21;:::i;:::-;22437:39;-1:-1:-1;22487:12:0;22502:18;22509:11;22502:4;:18;:::i;:::-;22487:33;-1:-1:-1;22531:18:0;22552:24;22565:11;22552:10;:24;:::i;:::-;22531:45;-1:-1:-1;22587:18:0;22608:24;22621:11;22608:10;:24;:::i;:::-;22587:45;-1:-1:-1;22643:23:0;22587:45;22686:10;22669:14;22679:4;22669:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;22728:7;;;;-1:-1:-1;22754:4:0;;-1:-1:-1;22264:503:0;;-1:-1:-1;;;;;;;;;22264:503:0:o;25030:206::-;25076:7;;:12;:34;;;;-1:-1:-1;25092:13:0;;:18;25076:34;:56;;;;-1:-1:-1;25114:13:0;;:18;25076:56;25073:68;;;25030:206::o;25073:68::-;25171:1;25161:7;:11;;;25183:13;:17;;;25211:13;:17;25030:206::o;25539:290::-;25593:12;;25582:7;;:23;:65;;;;;25627:18;;25609:13;;:38;25582:65;:104;;;;;25668:18;;25651:13;;:35;25582:104;25579:117;;;25539:290::o;25579:117::-;25718:12;;25708:7;:22;25757:18;;25741:13;:34;25802:18;;25786:13;:34;25539:290::o;25248:283::-;25301:11;;25290:7;;:22;:63;;;;;25334:17;;25316:13;;:37;25290:63;:101;;;;;25374:17;;25357:13;;:34;25290:101;25287:114;;;25248:283::o;25287:114::-;25423:11;;25413:7;:21;25461:17;;25445:13;:33;25505:17;;25489:13;:33;25248:283::o;32458:614::-;32561:15;32578:23;32603:12;32617:23;32642:12;32656:18;32676;32698:19;32709:7;32698:10;:19::i;:::-;32560:157;;;;;;;;;;;;;;32764:7;32746;:15;32754:6;-1:-1:-1;;;;;32746:15:0;-1:-1:-1;;;;;32746:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;32728:15:0;;;;;;:7;:15;;;;;;;;:43;;;;32800:7;:15;;;;:25;;32818:7;;32800:25;:::i;:::-;-1:-1:-1;;;;;32782:15:0;;;;;;;:7;:15;;;;;;:43;;;;32857:18;;;;;;;:36;;32878:15;;32857:36;:::i;:::-;-1:-1:-1;;;;;32836:18:0;;;;;;:7;:18;;;;;:57;32905:26;32920:10;32905:14;:26::i;:::-;32944;32959:10;32944:14;:26::i;:::-;32981:23;32993:4;32999;32981:11;:23::i;:::-;33037:9;-1:-1:-1;;;;;33020:44:0;33029:6;-1:-1:-1;;;;;33020:44:0;;33048:15;33020:44;;;;1549:25:1;;1537:2;1522:18;;1403:177;33020:44:0;;;;;;;;32549:523;;;;;;;32458:614;;;:::o;31816:634::-;31917:15;31934:23;31959:12;31973:23;31998:12;32012:18;32032;32054:19;32065:7;32054:10;:19::i;:::-;31916:157;;;;;;;;;;;;;;32120:7;32102;:15;32110:6;-1:-1:-1;;;;;32102:15:0;-1:-1:-1;;;;;32102:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;32084:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;32159:18;;;;;:7;:18;;;;;:36;;32180:15;;32159:36;:::i;:::-;-1:-1:-1;;;;;32138:18:0;;;;;;:7;:18;;;;;;;;:57;;;;32227:7;:18;;;;:36;;32248:15;;32227:36;:::i;31255:553::-;31354:15;31371:23;31396:12;31410:23;31435:12;31449:18;31469;31491:19;31502:7;31491:10;:19::i;:::-;31353:157;;;;;;;;;;;;;;31557:7;31539;:15;31547:6;-1:-1:-1;;;;;31539:15:0;-1:-1:-1;;;;;31539:15:0;;;;;;;;;;;;;:25;;;;:::i;33080:687::-;33183:15;33200:23;33225:12;33239:23;33264:12;33278:18;33298;33320:19;33331:7;33320:10;:19::i;:::-;33182:157;;;;;;;;;;;;;;33386:7;33368;:15;33376:6;-1:-1:-1;;;;;33368:15:0;-1:-1:-1;;;;;33368:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;33350:15:0;;;;;;:7;:15;;;;;;;;:43;;;;33422:7;:15;;;;:25;;33440:7;;33422:25;:::i;24608:122::-;24672:7;24719:3;24709:7;;24699;:17;;;;:::i;:::-;:23;;;;:::i;24738:134::-;24808:7;24861:3;24845:13;;24835:7;:23;;;;:::i;24884:134::-;24954:7;25007:3;24991:13;;24981:7;:23;;;;:::i;24188:408::-;24255:14;;24251:338;;24286:19;24309:10;:8;:10::i;:::-;24286:33;-1:-1:-1;24334:18:0;24355:24;24286:33;24355:10;:24;:::i;:::-;24435:4;24419:22;;;;:7;:22;;;;;;24334:45;;-1:-1:-1;24419:35:0;;24334:45;;24419:35;:::i;:::-;24410:4;24394:22;;;;:7;:22;;;;;;;;:60;;;;24472:11;:26;;;;;;24469:108;;;24558:4;24542:22;;;;:7;:22;;;;;;:35;;24567:10;;24542:35;:::i;:::-;24533:4;24517:22;;;;:7;:22;;;;;:60;24271:318;;24188:408;:::o;23507:673::-;23570:23;23654:1;23632:18;;23612:17;;:38;;;;:::i;:::-;:43;23608:202;;;23766:18;;23746:17;;:38;;;;:::i;:::-;23723:18;;23703:17;;:38;;;;:::i;:::-;23689:53;;:10;:53;:::i;:::-;:97;;;;:::i;:::-;23671:115;;23608:202;23825:19;;23822:351;;23860:19;23883:10;:8;:10::i;:::-;23860:33;-1:-1:-1;23908:18:0;23929:29;23860:33;23929:15;:29;:::i;:::-;24014:4;23998:22;;;;:7;:22;;;;;;23908:50;;-1:-1:-1;23998:35:0;;23908:50;;23998:35;:::i;:::-;23989:4;23973:22;;;;:7;:22;;;;;;;;:60;;;;24051:11;:26;;;;;;24048:113;;;24137:4;24121:22;;;;:7;:22;;;;;;:40;;24146:15;;24121:40;:::i;:::-;24112:4;24096:22;;;;:7;:22;;;;;:65;23845:328;;23559:621;23507:673;:::o;21207:141::-;21295:4;21285:7;;:14;;;;:::i;:::-;21275:7;:24;21323:10;;:17;;21336:4;;21323:17;:::i;:::-;21310:10;:30;-1:-1:-1;;21207:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:134;820:20;;849:31;820:20;849:31;:::i;:::-;752:134;;;:::o;891:315::-;959:6;967;1020:2;1008:9;999:7;995:23;991:32;988:52;;;1036:1;1033;1026:12;988:52;1075:9;1062:23;1094:31;1119:5;1094:31;:::i;:::-;1144:5;1196:2;1181:18;;;;1168:32;;-1:-1:-1;;;891:315:1:o;1820:456::-;1897:6;1905;1913;1966:2;1954:9;1945:7;1941:23;1937:32;1934:52;;;1982:1;1979;1972:12;1934:52;2021:9;2008:23;2040:31;2065:5;2040:31;:::i;:::-;2090:5;-1:-1:-1;2147:2:1;2132:18;;2119:32;2160:33;2119:32;2160:33;:::i;:::-;1820:456;;2212:7;;-1:-1:-1;;;2266:2:1;2251:18;;;;2238:32;;1820:456::o;2281:180::-;2340:6;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;-1:-1:-1;2432:23:1;;2281:180;-1:-1:-1;2281:180:1:o;2655:247::-;2714:6;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2822:9;2809:23;2841:31;2866:5;2841:31;:::i;2907:118::-;2993:5;2986:13;2979:21;2972:5;2969:32;2959:60;;3015:1;3012;3005:12;3030:309;3095:6;3103;3156:2;3144:9;3135:7;3131:23;3127:32;3124:52;;;3172:1;3169;3162:12;3124:52;3208:9;3195:23;3185:33;;3268:2;3257:9;3253:18;3240:32;3281:28;3303:5;3281:28;:::i;:::-;3328:5;3318:15;;;3030:309;;;;;:::o;3552:241::-;3608:6;3661:2;3649:9;3640:7;3636:23;3632:32;3629:52;;;3677:1;3674;3667:12;3629:52;3716:9;3703:23;3735:28;3757:5;3735:28;:::i;3798:127::-;3859:10;3854:3;3850:20;3847:1;3840:31;3890:4;3887:1;3880:15;3914:4;3911:1;3904:15;3930:1121;4014:6;4045:2;4088;4076:9;4067:7;4063:23;4059:32;4056:52;;;4104:1;4101;4094:12;4056:52;4144:9;4131:23;4173:18;4214:2;4206:6;4203:14;4200:34;;;4230:1;4227;4220:12;4200:34;4268:6;4257:9;4253:22;4243:32;;4313:7;4306:4;4302:2;4298:13;4294:27;4284:55;;4335:1;4332;4325:12;4284:55;4371:2;4358:16;4393:2;4389;4386:10;4383:36;;;4399:18;;:::i;:::-;4445:2;4442:1;4438:10;4477:2;4471:9;4540:2;4536:7;4531:2;4527;4523:11;4519:25;4511:6;4507:38;4595:6;4583:10;4580:22;4575:2;4563:10;4560:18;4557:46;4554:72;;;4606:18;;:::i;:::-;4642:2;4635:22;4692:18;;;4726:15;;;;-1:-1:-1;4768:11:1;;;4764:20;;;4796:19;;;4793:39;;;4828:1;4825;4818:12;4793:39;4852:11;;;;4872:148;4888:6;4883:3;4880:15;4872:148;;;4954:23;4973:3;4954:23;:::i;:::-;4942:36;;4905:12;;;;4998;;;;4872:148;;;5039:6;3930:1121;-1:-1:-1;;;;;;;;3930:1121:1:o;5056:316::-;5133:6;5141;5149;5202:2;5190:9;5181:7;5177:23;5173:32;5170:52;;;5218:1;5215;5208:12;5170:52;-1:-1:-1;;5241:23:1;;;5311:2;5296:18;;5283:32;;-1:-1:-1;5362:2:1;5347:18;;;5334:32;;5056:316;-1:-1:-1;5056:316:1:o;5377:382::-;5442:6;5450;5503:2;5491:9;5482:7;5478:23;5474:32;5471:52;;;5519:1;5516;5509:12;5471:52;5558:9;5545:23;5577:31;5602:5;5577:31;:::i;:::-;5627:5;-1:-1:-1;5684:2:1;5669:18;;5656:32;5697:30;5656:32;5697:30;:::i;5764:388::-;5832:6;5840;5893:2;5881:9;5872:7;5868:23;5864:32;5861:52;;;5909:1;5906;5899:12;5861:52;5948:9;5935:23;5967:31;5992:5;5967:31;:::i;:::-;6017:5;-1:-1:-1;6074:2:1;6059:18;;6046:32;6087:33;6046:32;6087:33;:::i;6157:380::-;6236:1;6232:12;;;;6279;;;6300:61;;6354:4;6346:6;6342:17;6332:27;;6300:61;6407:2;6399:6;6396:14;6376:18;6373:38;6370:161;;;6453:10;6448:3;6444:20;6441:1;6434:31;6488:4;6485:1;6478:15;6516:4;6513:1;6506:15;6370:161;;6157:380;;;:::o;6542:127::-;6603:10;6598:3;6594:20;6591:1;6584:31;6634:4;6631:1;6624:15;6658:4;6655:1;6648:15;6674:125;6714:4;6742:1;6739;6736:8;6733:34;;;6747:18;;:::i;:::-;-1:-1:-1;6784:9:1;;6674:125::o;7215:217::-;7255:1;7281;7271:132;;7325:10;7320:3;7316:20;7313:1;7306:31;7360:4;7357:1;7350:15;7388:4;7385:1;7378:15;7271:132;-1:-1:-1;7417:9:1;;7215:217::o;7437:356::-;7639:2;7621:21;;;7658:18;;;7651:30;7717:34;7712:2;7697:18;;7690:62;7784:2;7769:18;;7437:356::o;8154:127::-;8215:10;8210:3;8206:20;8203:1;8196:31;8246:4;8243:1;8236:15;8270:4;8267:1;8260:15;8286:127;8347:10;8342:3;8338:20;8335:1;8328:31;8378:4;8375:1;8368:15;8402:4;8399:1;8392:15;8418:135;8457:3;-1:-1:-1;;8478:17:1;;8475:43;;;8498:18;;:::i;:::-;-1:-1:-1;8545:1:1;8534:13;;8418:135::o;8558:128::-;8598:3;8629:1;8625:6;8622:1;8619:13;8616:39;;;8635:18;;:::i;:::-;-1:-1:-1;8671:9:1;;8558:128::o;13852:184::-;13922:6;13975:2;13963:9;13954:7;13950:23;13946:32;13943:52;;;13991:1;13988;13981:12;13943:52;-1:-1:-1;14014:16:1;;13852:184;-1:-1:-1;13852:184:1:o;14320:245::-;14387:6;14440:2;14428:9;14419:7;14415:23;14411:32;14408:52;;;14456:1;14453;14446:12;14408:52;14488:9;14482:16;14507:28;14529:5;14507:28;:::i;16551:168::-;16591:7;16657:1;16653;16649:6;16645:14;16642:1;16639:21;16634:1;16627:9;16620:17;16616:45;16613:71;;;16664:18;;:::i;:::-;-1:-1:-1;16704:9:1;;16551:168::o;17292:251::-;17362:6;17415:2;17403:9;17394:7;17390:23;17386:32;17383:52;;;17431:1;17428;17421:12;17383:52;17463:9;17457:16;17482:31;17507:5;17482:31;:::i;17548:980::-;17810:4;17858:3;17847:9;17843:19;17889:6;17878:9;17871:25;17915:2;17953:6;17948:2;17937:9;17933:18;17926:34;17996:3;17991:2;17980:9;17976:18;17969:31;18020:6;18055;18049:13;18086:6;18078;18071:22;18124:3;18113:9;18109:19;18102:26;;18163:2;18155:6;18151:15;18137:29;;18184:1;18194:195;18208:6;18205:1;18202:13;18194:195;;;18273:13;;-1:-1:-1;;;;;18269:39:1;18257:52;;18364:15;;;;18329:12;;;;18305:1;18223:9;18194:195;;;-1:-1:-1;;;;;;;18445:32:1;;;;18440:2;18425:18;;18418:60;-1:-1:-1;;;18509:3:1;18494:19;18487:35;18406:3;17548:980;-1:-1:-1;;;17548:980:1:o;19145:306::-;19233:6;19241;19249;19302:2;19290:9;19281:7;19277:23;19273:32;19270:52;;;19318:1;19315;19308:12;19270:52;19347:9;19341:16;19331:26;;19397:2;19386:9;19382:18;19376:25;19366:35;;19441:2;19430:9;19426:18;19420:25;19410:35;;19145:306;;;;;:::o

Swarm Source

ipfs://4ebbf91c7b8053d306c85a9ef88707331aea76f6b72f285404143f2a15c6940b
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.