ETH Price: $3,428.04 (+1.62%)

Token

Serbian Dancing Lady (сербскаяледи)
 

Overview

Max Total Supply

1,000,000,000,000 сербскаяледи

Holders

544

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
816,359,954.1476278093717403 сербскаяледи

Value
$0.00
0x64d707ef6132c9e42d20c3652f1f99f21290b573
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:
SERBIANDANCINGLADY

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/* Serbian Dancing Lady - $сербскаяледи

Мистерија српске плесачице први пут се догодила 26. септембра 1998. године. 
Наводи се да је снимак из Београда, Србија. Међутим, видео је изашао на видело 2019. године, када га је један од корисника поставио на ТикТок и Србија данас је објавила чланак о томе. 
Сада је поново постао виралан језиви видео где жена игра на улицама Србије покретима сличним српском фолклору.

https://serbian-dancing-lady.com/
https://t.me/SerbianDancingLady_ETH
*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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


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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
        function factory() external view returns (address);

}

// pragma solidity >=0.6.2;

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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {

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

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


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner
    {
        isOpen = true;
    }

    function includeToWhiteList(address _address) public onlyOwner {
        _whiteList[_address] = true;
    }

    function includeManyToWhiteList(address[] memory _addresses) public onlyOwner {
        for(uint i=0; i<_addresses.length; i++){
            _whiteList[_addresses[i]] = true;
        }
    }
}

contract SERBIANDANCINGLADY is Context, IERC20, LockToken 
{
    using SafeMath for uint256;
    address payable public marketingAddress = payable(0xfd3Be07FF4ee60ae224336e753740d0a70331393);
    address payable public devAddress = payable(0xfd3Be07FF4ee60ae224336e753740d0a70331393);
    address public newOwner = 0xAa0DbAC8de0BEAC52Fc5Be3f58CaC689b2C05Ca5;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromWhale;
    mapping (address => bool) private _isExcluded;

    address[] private _excluded;
   
    string private _name = "Serbian Dancing Lady";
    string private _symbol = unicode"сербскаяледи";
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 300;
    uint256 public _buyDevFee = 0;
    uint256 public buyTotalFee = _buyLiquidityFee+_buyMarketingFee+_buyDevFee;
    uint256[] public buyFeesBackup = [_buyLiquidityFee, _buyMarketingFee, _buyDevFee];        
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 300;
    uint256 public  _sellDevFee = 0;
    uint256 public sellTotalFee = _sellLiquidityFee+_sellMarketingFee+_sellDevFee;
    uint256 public _tfrLiquidityFee = 0;
    uint256 public _tfrMarketingFee = 0;
    uint256 public  _tfrDevFee = 0;
    uint256 public transferTotalFee = _tfrLiquidityFee+_tfrMarketingFee+_tfrDevFee;
    uint256 public _maxTxAmount = _tTotal.div(1000).mul(10); //x% of total supply
    uint256 public _walletHoldingMaxLimit =  _tTotal.div(1000).mul(20); //x% of total supply
    uint256 private minimumTokensBeforeSwap = 100000000 * 10**_decimals;
     
        
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
   
    constructor() {
        _rOwned[newOwner] = _rTotal;
        emit Transfer(address(0), newOwner, _tTotal);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[newOwner] = true;
        _isExcludedFromFee[address(this)] = true;
        includeToWhiteList(newOwner);
        _isExcludedFromWhale[newOwner] = true;
        excludeWalletsFromWhales();
        transferOwnership(newOwner);
    }

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

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

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

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

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

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

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

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

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

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

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


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

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



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



    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 open(from, to)
    {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

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

        checkForWhale(from, to, amount);

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair)
        {
            if (overMinimumTokenBalance)
            {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
        }

        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to])
        {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }


    function swapTokens(uint256 contractTokenBalance) private lockTheSwap
    {
        uint256 __buyTotalFee  = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);    
        uint256 __sellTotalFee = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
        uint256 totalSwapableFees = __buyTotalFee.add(__sellTotalFee);

        uint256 halfLiquidityTokens = contractTokenBalance.mul(_buyLiquidityFee+_sellLiquidityFee).div(totalSwapableFees).div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        swapTokensForEth(swapableTokens);

        uint256 newBalance = address(this).balance;
        uint256 ethForLiquidity = newBalance.mul(_buyLiquidityFee+_sellLiquidityFee).div(totalSwapableFees).div(2);

        if(halfLiquidityTokens>0 && ethForLiquidity>0)
        {
            addLiquidity(halfLiquidityTokens, ethForLiquidity);
        }

        uint256 ethForMarketing = newBalance.mul(_buyMarketingFee+_sellMarketingFee).div(totalSwapableFees);
        if(ethForMarketing>0)
        {
           marketingAddress.transfer(ethForMarketing);
        }

        uint256 ethForDev = newBalance.sub(ethForLiquidity).sub(ethForMarketing);
        if(ethForDev>0)
        {
            devAddress.transfer(ethForDev);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private
    {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }



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

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


    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private
    {
        if(!takeFee) 
        {
            removeAllFee();
        }
        else
        {
            if(recipient==uniswapV2Pair)
            {
                setSellFee();
            }

            if(sender != uniswapV2Pair && recipient != uniswapV2Pair)
            {
                setWalletToWalletTransferFee();
            }
        }


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

        restoreAllFee();

    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount,  uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }


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

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

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        }
    }


    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 fees = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);
        return _amount.mul(fees).div(1000);
    }


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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFeeMany(address[] memory accounts) public onlyOwner {
        for(uint i=0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = true;
        }
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function removeAllFee() private {
        _buyLiquidityFee = 0;
        _buyMarketingFee = 0;
        _buyDevFee = 0;
    }

    function restoreAllFee() private
    {
        _buyLiquidityFee = buyFeesBackup[0];
        _buyMarketingFee = buyFeesBackup[1];
        _buyDevFee = buyFeesBackup[2];
    }

    function setSellFee() private
    {
        _buyLiquidityFee = _sellLiquidityFee;
        _buyMarketingFee = _sellMarketingFee;
        _buyDevFee = _sellDevFee;
    }


    function setWalletToWalletTransferFee() private 
    {
        _buyLiquidityFee = _tfrLiquidityFee;
        _buyMarketingFee = _tfrMarketingFee;
        _buyDevFee = _tfrDevFee;        
    }


    function setBuyFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        buyFeesBackup = [_buyLiquidityFee, _buyMarketingFee, _buyDevFee];
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        buyTotalFee = _buyLiquidityFee+_buyMarketingFee+_buyDevFee;
        require(totalFee<=2500, "Too High Fee");
    }

    function setSellFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        sellTotalFee = _sellLiquidityFee+_sellMarketingFee+_sellDevFee;
        require(totalFee<=2500, "Too High Fee");
    }


    function setTransferFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _tfrLiquidityFee = _liquidityFee;
        _tfrMarketingFee = _marketingFee;
        _tfrDevFee = _devFee;
        transferTotalFee = _tfrLiquidityFee+_tfrMarketingFee+_tfrDevFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        require(totalFee<=100, "Too High Fee");
    }


    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner()
    {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount >= _tTotal.div(10000).mul(1), "Too low limit");
    }

    function setMinimumTokensBeforeSwap(uint256 _minimumTokensBeforeSwap) external onlyOwner()
    {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner()
    {
        marketingAddress = payable(_marketingAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner()
    {
        devAddress = payable(_devAddress);
    }

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

    function excludeWalletsFromWhales() private
    {
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
        _isExcludedFromWhale[devAddress]=true;
        _isExcludedFromWhale[marketingAddress]=true;
    }


    function checkForWhale(address from, address to, uint256 amount)  private view
    {
        uint256 newBalance = balanceOf(to).add(amount);
        if(!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to])
        {
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet");
        }
        if(from==uniswapV2Pair && !_isExcludedFromWhale[to])
        {
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet");
        }
    }

    function setExcludedFromWhale(address account, bool _enabled) public onlyOwner
    {
        _isExcludedFromWhale[account] = _enabled;
    }

    function setExcludedFromWhaleMany(address[] memory accounts, bool _enabled) public onlyOwner
    {
        for(uint i=0; i < accounts.length; i++){
           _isExcludedFromWhale[accounts[i]] = _enabled;
        }  
    }

    function  setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner
    {
        _walletHoldingMaxLimit = _amount;
        require(_walletHoldingMaxLimit > _tTotal.div(10000).mul(1), "Too less limit");

    }

    function rescueStuckBalance () public onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function triggerSwapback() public {
        uint256 allBalance = balanceOf(address(this));
        swapTokens(allBalance);
    }
    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyFeesBackup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeFromFeeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"includeManyToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhaleMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTransferFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapback","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"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b031990811673fd3be07ff4ee60ae224336e753740d0a7033139390811790925560068054821690921790915560078054821673aa0dbac8de0beac52fc5be3f58cac689b2c05ca517905560088054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055610100604052601460c09081527f5365726269616e2044616e63696e67204c61647900000000000000000000000060e052601090620000bd90826200096e565b5060408051808201909152601881527fd181d0b5d180d0b1d181d0bad0b0d18fd0bbd0b5d0b4d0b8000000000000000060208201526011906200010190826200096e565b506012805460ff1916811781556200011b90600a62000b4d565b6200012c9064e8d4a5100062000b5e565b60138190556200013f9060001962000b8e565b6200014d9060001962000ba5565b6014556000601681905561012c6017819055601882905562000170908262000bbb565b6200017c919062000bbb565b601955604051806060016040528060165481526020016017548152602001601854815250601a906003620001b292919062000862565b506000601b81905561012c601c819055601d829055620001d3908262000bbb565b620001df919062000bbb565b601e556000601f81905560208190556021819055620001ff818062000bbb565b6200020b919062000bbb565b6022556013546200022e90600a9062000227906103e862000544565b9062000597565b6023556013546200024a9060149062000227906103e862000544565b602455601254620002609060ff16600a62000b4d565b62000270906305f5e10062000b5e565b6025556026805461ff0019166101001790553480156200028f57600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003e46833981519152908290a3503360009081526004602090815260408083208054600160ff19918216811790925530855282852080549091169091179055601454600780546001600160a01b03908116865260098552838620929092555460135492519283521692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36008546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa15801562000393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000bd1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d919062000bd1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200047b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a1919062000bd1565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff199182168117909255308452919092208054909116909117905554620004f7911662000625565b6007546001600160a01b03166000908152600d60205260409020805460ff191660011790556200052662000694565b6007546200053d906001600160a01b03166200072a565b5062000c63565b60006200058e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200082660201b60201c565b90505b92915050565b600082600003620005ab5750600062000591565b6000620005b9838562000b5e565b905082620005c8858362000bfc565b146200058e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b03163314620006705760405162461bcd60e51b8152602060048201819052602482015260008051602062003e2683398151915260448201526064016200061c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d6000620006ad6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b03163314620007755760405162461bcd60e51b8152602060048201819052602482015260008051602062003e2683398151915260448201526064016200061c565b6001600160a01b038116620007dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200061c565b600080546040516001600160a01b038085169392169160008051602062003e4683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836200084a5760405162461bcd60e51b81526004016200061c919062000c13565b50600062000859848662000bfc565b95945050505050565b828054828255906000526020600020908101928215620008a0579160200282015b82811115620008a057825182559160200191906001019062000883565b50620008ae929150620008b2565b5090565b5b80821115620008ae5760008155600101620008b3565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008f457607f821691505b6020821081036200091557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096957600081815260208120601f850160051c81016020861015620009445750805b601f850160051c820191505b81811015620009655782815560010162000950565b5050505b505050565b81516001600160401b038111156200098a576200098a620008c9565b620009a2816200099b8454620008df565b846200091b565b602080601f831160018114620009da5760008415620009c15750858301515b600019600386901b1c1916600185901b17855562000965565b600085815260208120601f198616915b8281101562000a0b57888601518255948401946001909101908401620009ea565b508582101562000a2a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a9157816000190482111562000a755762000a7562000a3a565b8085161562000a8357918102915b93841c939080029062000a55565b509250929050565b60008262000aaa5750600162000591565b8162000ab95750600062000591565b816001811462000ad2576002811462000add5762000afd565b600191505062000591565b60ff84111562000af15762000af162000a3a565b50506001821b62000591565b5060208310610133831016604e8410600b841016171562000b22575081810a62000591565b62000b2e838362000a50565b806000190482111562000b455762000b4562000a3a565b029392505050565b60006200058e60ff84168362000a99565b808202811582820484141762000591576200059162000a3a565b634e487b7160e01b600052601260045260246000fd5b60008262000ba05762000ba062000b78565b500690565b8181038181111562000591576200059162000a3a565b8082018082111562000591576200059162000a3a565b60006020828403121562000be457600080fd5b81516001600160a01b03811681146200058e57600080fd5b60008262000c0e5762000c0e62000b78565b500490565b600060208083528351808285015260005b8181101562000c425785810183015185820160400152820162000c24565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05161315762000ccf600039600081816105c801528181611abf01528181611f2201528181611fc101528181612011015261204e01526000818161045f015281816122930152818161234c015281816123880152818161243b015261249701526131576000f3fe60806040526004361061038f5760003560e01c806388790a68116101dc578063c5d2418911610102578063dc44b6a0116100a0578063ec28438a1161006f578063ec28438a14610a28578063f2fde38b14610a48578063f887ea4014610a68578063fb201b1d14610a8857600080fd5b8063dc44b6a01461098c578063dd62ed3e146109a2578063ea2f0b37146109e8578063ea377c2a14610a0857600080fd5b8063d0d41fe1116100dc578063d0d41fe11461090c578063d4ee1d901461092c578063d6a694f51461094c578063d6c0e80d1461096c57600080fd5b8063c5d24189146108ca578063c8607952146108e0578063c9cf7789146108f657600080fd5b8063a457c2d71161017a578063b70ee79911610149578063b70ee7991461085f578063b863864c14610874578063bab184481461088a578063c49b9a80146108aa57600080fd5b8063a457c2d7146107df578063a5ece941146107ff578063a9059cbb1461081f578063aee50b1e1461083f57600080fd5b8063906e9dd0116101b6578063906e9dd01461077557806390a3dd9b1461079557806395d89b41146107b5578063a073d37f146107ca57600080fd5b806388790a68146107215780638986092d146107375780638da5cb5b1461075757600080fd5b806344d4225f116102c1578063620158521161025f57806372b28e451161022e57806372b28e45146106c95780637957bd59146106df5780637d1db4a5146106f557806385ab2b9e1461070b57600080fd5b806362015852146106695780636fee4f7a1461067f57806370a0823114610694578063715018a6146106b457600080fd5b80634a74bb021161029b5780634a74bb02146105ea5780634b880e88146106095780634e3c06b1146106295780635342acb41461064957600080fd5b806344d4225f1461057c57806347535d7b1461059c57806349bd5a5e146105b657600080fd5b806323b872dd1161032e5780633705b392116103085780633705b39214610506578063395093511461051c5780633ad10ef61461053c578063437823ec1461055c57600080fd5b806323b872dd146104ae578063313ce567146104ce57806334c56c28146104f057600080fd5b806312eb7c791161036a57806312eb7c791461041657806313114a9d146104385780631694505e1461044d57806318160ddd1461049957600080fd5b8062afb3251461039b57806306fdde03146103c4578063095ea7b3146103e657600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b1601e5481565b6040519081526020015b60405180910390f35b3480156103d057600080fd5b506103d9610a9d565b6040516103bb9190612b5f565b3480156103f257600080fd5b50610406610401366004612bcd565b610b2f565b60405190151581526020016103bb565b34801561042257600080fd5b50610436610431366004612bf9565b610b46565b005b34801561044457600080fd5b506015546103b1565b34801561045957600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103bb565b3480156104a557600080fd5b506013546103b1565b3480156104ba57600080fd5b506104066104c9366004612c25565b610bdf565b3480156104da57600080fd5b5060125460405160ff90911681526020016103bb565b3480156104fc57600080fd5b506103b160215481565b34801561051257600080fd5b506103b160195481565b34801561052857600080fd5b50610406610537366004612bcd565b610c48565b34801561054857600080fd5b50600654610481906001600160a01b031681565b34801561056857600080fd5b50610436610577366004612c66565b610c7e565b34801561058857600080fd5b50610436610597366004612c83565b610ccc565b3480156105a857600080fd5b506003546104069060ff1681565b3480156105c257600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f657600080fd5b5060265461040690610100900460ff1681565b34801561061557600080fd5b50610436610624366004612c66565b610d5b565b34801561063557600080fd5b50610436610644366004612cac565b610da9565b34801561065557600080fd5b50610406610664366004612c66565b610dfe565b34801561067557600080fd5b506103b160185481565b34801561068b57600080fd5b50610436610e4c565b3480156106a057600080fd5b506103b16106af366004612c66565b610f01565b3480156106c057600080fd5b50610436610f60565b3480156106d557600080fd5b506103b160245481565b3480156106eb57600080fd5b506103b1601f5481565b34801561070157600080fd5b506103b160235481565b34801561071757600080fd5b506103b160205481565b34801561072d57600080fd5b506103b1601b5481565b34801561074357600080fd5b506103b1610752366004612c83565b610fd4565b34801561076357600080fd5b506000546001600160a01b0316610481565b34801561078157600080fd5b50610436610790366004612c66565b610ff5565b3480156107a157600080fd5b506104366107b0366004612bf9565b611041565b3480156107c157600080fd5b506103d96110f7565b3480156107d657600080fd5b506025546103b1565b3480156107eb57600080fd5b506104066107fa366004612bcd565b611106565b34801561080b57600080fd5b50600554610481906001600160a01b031681565b34801561082b57600080fd5b5061040661083a366004612bcd565b611155565b34801561084b57600080fd5b5061043661085a366004612c83565b611162565b34801561086b57600080fd5b50610436611191565b34801561088057600080fd5b506103b160225481565b34801561089657600080fd5b506104366108a5366004612d99565b6111a7565b3480156108b657600080fd5b506104366108c5366004612dd6565b61123d565b3480156108d657600080fd5b506103b160175481565b3480156108ec57600080fd5b506103b1601c5481565b34801561090257600080fd5b506103b1601d5481565b34801561091857600080fd5b50610436610927366004612c66565b6112bb565b34801561093857600080fd5b50600754610481906001600160a01b031681565b34801561095857600080fd5b50610436610967366004612bf9565b611307565b34801561097857600080fd5b50610436610987366004612d99565b611394565b34801561099857600080fd5b506103b160165481565b3480156109ae57600080fd5b506103b16109bd366004612df1565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109f457600080fd5b50610436610a03366004612c66565b611426565b348015610a1457600080fd5b50610436610a23366004612e2a565b611471565b348015610a3457600080fd5b50610436610a43366004612c83565b611507565b348015610a5457600080fd5b50610436610a63366004612c66565b61158d565b348015610a7457600080fd5b50600854610481906001600160a01b031681565b348015610a9457600080fd5b50610436611677565b606060108054610aac90612e6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad890612e6f565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b6000610b3c3384846116b0565b5060015b92915050565b6000546001600160a01b03163314610b795760405162461bcd60e51b8152600401610b7090612ea9565b60405180910390fd5b601f8390556020829055602181905580610b938385612ef4565b610b9d9190612ef4565b6022556000610bb682610bb086866117d4565b906117d4565b90506064811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b50505050565b6000610bec84848461183a565b610c3e8433610c39856040518060600160405280602881526020016130d5602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b6e565b6116b0565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b3c918590610c3990866117d4565b6000546001600160a01b03163314610ca85760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610b7090612ea9565b6024819055601354610d1790600190610d1190612710611ba8565b90611bea565b60245411610d585760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b70565b50565b6000546001600160a01b03163314610d855760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e295760405162461bcd60e51b8152600401610b7090612ea9565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610e765760405162461bcd60e51b8152600401610b7090612ea9565b604051600090339047908381818185875af1925050503d8060008114610eb8576040519150601f19603f3d011682016040523d82523d6000602084013e610ebd565b606091505b5050905080610d585760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b70565b6001600160a01b0381166000908152600e602052604081205460ff1615610f3e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b4090611c6c565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610b7090612ea9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a8181548110610fe457600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610b7090612ea9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610b7090612ea9565b60168390556017829055601881905560408051606081018252848152602081018490529081018290526110a290601a906003612aff565b5060006110b382610bb086866117d4565b90506018546017546016546110c89190612ef4565b6110d29190612ef4565b6019556109c4811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b606060118054610aac90612e6f565b6000610b3c3384610c39856040518060600160405280602581526020016130fd60259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b6e565b6000610b3c33848461183a565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b7090612ea9565b602555565b600061119c30610f01565b9050610d5881611ce9565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b7090612ea9565b60005b8151811015611239576001600c60008484815181106111f5576111f5612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061123181612f43565b9150506111d4565b5050565b6000546001600160a01b031633146112675760405162461bcd60e51b8152600401610b7090612ea9565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906112b090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112e55760405162461bcd60e51b8152600401610b7090612ea9565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113315760405162461bcd60e51b8152600401610b7090612ea9565b601b839055601c829055601d819055600061135082610bb086866117d4565b9050601d54601c54601b546113659190612ef4565b61136f9190612ef4565b601e556109c4811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b6000546001600160a01b031633146113be5760405162461bcd60e51b8152600401610b7090612ea9565b60005b8151811015611239576001600460008484815181106113e2576113e2612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061141e81612f43565b9150506113c1565b6000546001600160a01b031633146114505760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610b7090612ea9565b60005b82518110156115025781600d60008584815181106114be576114be612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114fa81612f43565b91505061149e565b505050565b6000546001600160a01b031633146115315760405162461bcd60e51b8152600401610b7090612ea9565b602381905560135461154c90600190610d1190612710611ba8565b6023541015610d585760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b70565b6000546001600160a01b031633146115b75760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03811661161c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b70565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610b7090612ea9565b6003805460ff19166001179055565b6001600160a01b0383166117125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b70565b6001600160a01b0382166117735760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b70565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117e18385612ef4565b9050838110156118335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b70565b9392505050565b6003548390839060ff168061186757506001600160a01b03821660009081526004602052604090205460ff165b8061188a57506001600160a01b03811660009081526004602052604090205460ff165b6118c15760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b70565b6001600160a01b0385166119255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b70565b6001600160a01b0384166119875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b70565b600083116119e95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b70565b6000546001600160a01b03868116911614801590611a1557506000546001600160a01b03858116911614155b15611a7d57602354831115611a7d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b70565b6000611a8830610f01565b602554909150811015611a9c878787611ea5565b60265460ff16158015611ab65750602654610100900460ff165b8015611af457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b15611b0d578015611b0d576025549150611b0d82611ce9565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b4f57506001600160a01b0387166000908152600c602052604090205460ff165b15611b58575060005b611b6488888884611fa1565b5050505050505050565b60008184841115611b925760405162461bcd60e51b8152600401610b709190612b5f565b506000611b9f8486612f5c565b95945050505050565b600061183383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121a9565b600082600003611bfc57506000610b40565b6000611c088385612f6f565b905082611c158583612f86565b146118335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b70565b6000601454821115611cd35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b70565b6000611cdd6121d7565b90506118338382611ba8565b6026805460ff19166001179055601854601754601654600092611d11929091610bb0916117d4565b90506000611d32601d54610bb0601c54601b546117d490919063ffffffff16565b90506000611d4083836117d4565b90506000611d6d6002611d6784611d67601b54601654611d609190612ef4565b8a90611bea565b90611ba8565b90506000611d7b86836121fa565b9050611d868161223c565b60004790506000611db06002611d6787611d67601b54601654611da99190612ef4565b8790611bea565b9050600084118015611dc25750600081115b15611dd157611dd18482612435565b6000611df186611d67601c54601754611dea9190612ef4565b8690611bea565b90508015611e35576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e33573d6000803e3d6000fd5b505b6000611e4b82611e4586866121fa565b906121fa565b90508015611e8f576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e8d573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b6000611eb482610bb085610f01565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611ef957506001600160a01b0383166000908152600d602052604090205460ff16155b15611f2057602454811115611f205760405162461bcd60e51b8152600401610b7090612fa8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611f7a57506001600160a01b0383166000908152600d602052604090205460ff16155b15610bd957602454811115610bd95760405162461bcd60e51b8152600401610b7090612fa8565b80611fbf57611fba600060168190556017819055601855565b61209f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361200f5761200f601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561208357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561209f5761209f601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120e057506001600160a01b0383166000908152600e602052604090205460ff16155b156120f5576120f0848484612515565b6121a1565b6001600160a01b0384166000908152600e602052604090205460ff1615801561213657506001600160a01b0383166000908152600e602052604090205460ff165b15612146576120f084848461266e565b6001600160a01b0384166000908152600e602052604090205460ff16801561218657506001600160a01b0383166000908152600e602052604090205460ff165b15612196576120f084848461270f565b6121a184848461277a565b610bd96127b6565b600081836121ca5760405162461bcd60e51b8152600401610b709190612b5f565b506000611b9f8486612f86565b60008060006121e4612825565b90925090506121f38282611ba8565b9250505090565b600061183383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b6e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061227157612271612f2d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123139190612ff0565b8160018151811061232657612326612f2d565b60200260200101906001600160a01b031690816001600160a01b031681525050612371307f0000000000000000000000000000000000000000000000000000000000000000846116b0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123c6908590600090869030904290600401613051565b600060405180830381600087803b1580156123e057600080fd5b505af11580156123f4573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161242992919061308d565b60405180910390a15050565b612460307f0000000000000000000000000000000000000000000000000000000000000000846116b0565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061250e91906130a6565b5050505050565b600080600080612524856129a7565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061255190866121fa565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461258090856121fa565b6001600160a01b0380891660009081526009602052604080822093909355908816815220546125af90846117d4565b6001600160a01b0387166000908152600960205260409020556125d1816129e5565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161261691815260200190565b60405180910390a380156126655760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061267d856129a7565b6001600160a01b038b16600090815260096020526040902054939750919550935091506126aa90856121fa565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126e090836117d4565b6001600160a01b0387166000908152600a60209081526040808320939093556009905220546125af90846117d4565b60008060008061271e856129a7565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061274b90866121fa565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546126aa90856121fa565b600080600080612789856129a7565b6001600160a01b038b166000908152600960205260409020549397509195509350915061258090856121fa565b601a6000815481106127ca576127ca612f2d565b9060005260206000200154601681905550601a6001815481106127ef576127ef612f2d565b9060005260206000200154601781905550601a60028154811061281457612814612f2d565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612977578260096000600f848154811061285457612854612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128bf575081600a6000600f848154811061289857612898612f2d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d557601454601354945094505050509091565b61291b60096000600f84815481106128ef576128ef612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121fa565b9250612963600a6000600f848154811061293757612937612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121fa565b91508061296f81612f43565b915050612832565b5060135460145461298791611ba8565b82101561299e576014546013549350935050509091565b90939092509050565b6000806000806000806129b987612a6d565b915091506000806129d289846129cd6121d7565b612a94565b909a909950939750919550919350505050565b60006129ef6121d7565b905060006129fd8383611bea565b30600090815260096020526040902054909150612a1a90826117d4565b30600090815260096020908152604080832093909355600e9052205460ff161561150257306000908152600a6020526040902054612a5890846117d4565b306000908152600a6020526040902055505050565b6000806000612a7b84612acd565b90506000612a8985836121fa565b959194509092505050565b60008080612aa28685611bea565b90506000612ab08686611bea565b90506000612abe83836121fa565b92989297509195505050505050565b600080612aed601854610bb06017546016546117d490919063ffffffff16565b90506118336103e8611d678584611bea565b828054828255906000526020600020908101928215612b3a579160200282015b82811115612b3a578251825591602001919060010190612b1f565b50612b46929150612b4a565b5090565b5b80821115612b465760008155600101612b4b565b600060208083528351808285015260005b81811015612b8c57858101830151858201604001528201612b70565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5857600080fd5b8035610e4781612bad565b60008060408385031215612be057600080fd5b8235612beb81612bad565b946020939093013593505050565b600080600060608486031215612c0e57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c3a57600080fd5b8335612c4581612bad565b92506020840135612c5581612bad565b929592945050506040919091013590565b600060208284031215612c7857600080fd5b813561183381612bad565b600060208284031215612c9557600080fd5b5035919050565b80358015158114610e4757600080fd5b60008060408385031215612cbf57600080fd5b8235612cca81612bad565b9150612cd860208401612c9c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d0857600080fd5b8135602067ffffffffffffffff80831115612d2557612d25612ce1565b8260051b604051601f19603f83011681018181108482111715612d4a57612d4a612ce1565b604052938452858101830193838101925087851115612d6857600080fd5b83870191505b84821015612d8e57612d7f82612bc2565b83529183019190830190612d6e565b979650505050505050565b600060208284031215612dab57600080fd5b813567ffffffffffffffff811115612dc257600080fd5b612dce84828501612cf7565b949350505050565b600060208284031215612de857600080fd5b61183382612c9c565b60008060408385031215612e0457600080fd5b8235612e0f81612bad565b91506020830135612e1f81612bad565b809150509250929050565b60008060408385031215612e3d57600080fd5b823567ffffffffffffffff811115612e5457600080fd5b612e6085828601612cf7565b925050612cd860208401612c9c565b600181811c90821680612e8357607f821691505b602082108103612ea357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b4057610b40612ede565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f5557612f55612ede565b5060010190565b81810381811115610b4057610b40612ede565b8082028115828204841417610b4057610b40612ede565b600082612fa357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b60006020828403121561300257600080fd5b815161183381612bad565b600081518084526020808501945080840160005b838110156130465781516001600160a01b031687529582019590820190600101613021565b509495945050505050565b85815284602082015260a06040820152600061307060a083018661300d565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612dce604083018461300d565b6000806000606084860312156130bb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050f628f80225a25e6ed9836d2d73dd5e0c66d0d139302d62aabbc3f76a09d32264736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061038f5760003560e01c806388790a68116101dc578063c5d2418911610102578063dc44b6a0116100a0578063ec28438a1161006f578063ec28438a14610a28578063f2fde38b14610a48578063f887ea4014610a68578063fb201b1d14610a8857600080fd5b8063dc44b6a01461098c578063dd62ed3e146109a2578063ea2f0b37146109e8578063ea377c2a14610a0857600080fd5b8063d0d41fe1116100dc578063d0d41fe11461090c578063d4ee1d901461092c578063d6a694f51461094c578063d6c0e80d1461096c57600080fd5b8063c5d24189146108ca578063c8607952146108e0578063c9cf7789146108f657600080fd5b8063a457c2d71161017a578063b70ee79911610149578063b70ee7991461085f578063b863864c14610874578063bab184481461088a578063c49b9a80146108aa57600080fd5b8063a457c2d7146107df578063a5ece941146107ff578063a9059cbb1461081f578063aee50b1e1461083f57600080fd5b8063906e9dd0116101b6578063906e9dd01461077557806390a3dd9b1461079557806395d89b41146107b5578063a073d37f146107ca57600080fd5b806388790a68146107215780638986092d146107375780638da5cb5b1461075757600080fd5b806344d4225f116102c1578063620158521161025f57806372b28e451161022e57806372b28e45146106c95780637957bd59146106df5780637d1db4a5146106f557806385ab2b9e1461070b57600080fd5b806362015852146106695780636fee4f7a1461067f57806370a0823114610694578063715018a6146106b457600080fd5b80634a74bb021161029b5780634a74bb02146105ea5780634b880e88146106095780634e3c06b1146106295780635342acb41461064957600080fd5b806344d4225f1461057c57806347535d7b1461059c57806349bd5a5e146105b657600080fd5b806323b872dd1161032e5780633705b392116103085780633705b39214610506578063395093511461051c5780633ad10ef61461053c578063437823ec1461055c57600080fd5b806323b872dd146104ae578063313ce567146104ce57806334c56c28146104f057600080fd5b806312eb7c791161036a57806312eb7c791461041657806313114a9d146104385780631694505e1461044d57806318160ddd1461049957600080fd5b8062afb3251461039b57806306fdde03146103c4578063095ea7b3146103e657600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b1601e5481565b6040519081526020015b60405180910390f35b3480156103d057600080fd5b506103d9610a9d565b6040516103bb9190612b5f565b3480156103f257600080fd5b50610406610401366004612bcd565b610b2f565b60405190151581526020016103bb565b34801561042257600080fd5b50610436610431366004612bf9565b610b46565b005b34801561044457600080fd5b506015546103b1565b34801561045957600080fd5b506104817f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103bb565b3480156104a557600080fd5b506013546103b1565b3480156104ba57600080fd5b506104066104c9366004612c25565b610bdf565b3480156104da57600080fd5b5060125460405160ff90911681526020016103bb565b3480156104fc57600080fd5b506103b160215481565b34801561051257600080fd5b506103b160195481565b34801561052857600080fd5b50610406610537366004612bcd565b610c48565b34801561054857600080fd5b50600654610481906001600160a01b031681565b34801561056857600080fd5b50610436610577366004612c66565b610c7e565b34801561058857600080fd5b50610436610597366004612c83565b610ccc565b3480156105a857600080fd5b506003546104069060ff1681565b3480156105c257600080fd5b506104817f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f8037681565b3480156105f657600080fd5b5060265461040690610100900460ff1681565b34801561061557600080fd5b50610436610624366004612c66565b610d5b565b34801561063557600080fd5b50610436610644366004612cac565b610da9565b34801561065557600080fd5b50610406610664366004612c66565b610dfe565b34801561067557600080fd5b506103b160185481565b34801561068b57600080fd5b50610436610e4c565b3480156106a057600080fd5b506103b16106af366004612c66565b610f01565b3480156106c057600080fd5b50610436610f60565b3480156106d557600080fd5b506103b160245481565b3480156106eb57600080fd5b506103b1601f5481565b34801561070157600080fd5b506103b160235481565b34801561071757600080fd5b506103b160205481565b34801561072d57600080fd5b506103b1601b5481565b34801561074357600080fd5b506103b1610752366004612c83565b610fd4565b34801561076357600080fd5b506000546001600160a01b0316610481565b34801561078157600080fd5b50610436610790366004612c66565b610ff5565b3480156107a157600080fd5b506104366107b0366004612bf9565b611041565b3480156107c157600080fd5b506103d96110f7565b3480156107d657600080fd5b506025546103b1565b3480156107eb57600080fd5b506104066107fa366004612bcd565b611106565b34801561080b57600080fd5b50600554610481906001600160a01b031681565b34801561082b57600080fd5b5061040661083a366004612bcd565b611155565b34801561084b57600080fd5b5061043661085a366004612c83565b611162565b34801561086b57600080fd5b50610436611191565b34801561088057600080fd5b506103b160225481565b34801561089657600080fd5b506104366108a5366004612d99565b6111a7565b3480156108b657600080fd5b506104366108c5366004612dd6565b61123d565b3480156108d657600080fd5b506103b160175481565b3480156108ec57600080fd5b506103b1601c5481565b34801561090257600080fd5b506103b1601d5481565b34801561091857600080fd5b50610436610927366004612c66565b6112bb565b34801561093857600080fd5b50600754610481906001600160a01b031681565b34801561095857600080fd5b50610436610967366004612bf9565b611307565b34801561097857600080fd5b50610436610987366004612d99565b611394565b34801561099857600080fd5b506103b160165481565b3480156109ae57600080fd5b506103b16109bd366004612df1565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109f457600080fd5b50610436610a03366004612c66565b611426565b348015610a1457600080fd5b50610436610a23366004612e2a565b611471565b348015610a3457600080fd5b50610436610a43366004612c83565b611507565b348015610a5457600080fd5b50610436610a63366004612c66565b61158d565b348015610a7457600080fd5b50600854610481906001600160a01b031681565b348015610a9457600080fd5b50610436611677565b606060108054610aac90612e6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad890612e6f565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b6000610b3c3384846116b0565b5060015b92915050565b6000546001600160a01b03163314610b795760405162461bcd60e51b8152600401610b7090612ea9565b60405180910390fd5b601f8390556020829055602181905580610b938385612ef4565b610b9d9190612ef4565b6022556000610bb682610bb086866117d4565b906117d4565b90506064811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b50505050565b6000610bec84848461183a565b610c3e8433610c39856040518060600160405280602881526020016130d5602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b6e565b6116b0565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b3c918590610c3990866117d4565b6000546001600160a01b03163314610ca85760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610b7090612ea9565b6024819055601354610d1790600190610d1190612710611ba8565b90611bea565b60245411610d585760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b70565b50565b6000546001600160a01b03163314610d855760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e295760405162461bcd60e51b8152600401610b7090612ea9565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610e765760405162461bcd60e51b8152600401610b7090612ea9565b604051600090339047908381818185875af1925050503d8060008114610eb8576040519150601f19603f3d011682016040523d82523d6000602084013e610ebd565b606091505b5050905080610d585760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b70565b6001600160a01b0381166000908152600e602052604081205460ff1615610f3e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b4090611c6c565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610b7090612ea9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a8181548110610fe457600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610b7090612ea9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610b7090612ea9565b60168390556017829055601881905560408051606081018252848152602081018490529081018290526110a290601a906003612aff565b5060006110b382610bb086866117d4565b90506018546017546016546110c89190612ef4565b6110d29190612ef4565b6019556109c4811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b606060118054610aac90612e6f565b6000610b3c3384610c39856040518060600160405280602581526020016130fd60259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b6e565b6000610b3c33848461183a565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b7090612ea9565b602555565b600061119c30610f01565b9050610d5881611ce9565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b7090612ea9565b60005b8151811015611239576001600c60008484815181106111f5576111f5612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061123181612f43565b9150506111d4565b5050565b6000546001600160a01b031633146112675760405162461bcd60e51b8152600401610b7090612ea9565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906112b090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112e55760405162461bcd60e51b8152600401610b7090612ea9565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113315760405162461bcd60e51b8152600401610b7090612ea9565b601b839055601c829055601d819055600061135082610bb086866117d4565b9050601d54601c54601b546113659190612ef4565b61136f9190612ef4565b601e556109c4811115610bd95760405162461bcd60e51b8152600401610b7090612f07565b6000546001600160a01b031633146113be5760405162461bcd60e51b8152600401610b7090612ea9565b60005b8151811015611239576001600460008484815181106113e2576113e2612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061141e81612f43565b9150506113c1565b6000546001600160a01b031633146114505760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461149b5760405162461bcd60e51b8152600401610b7090612ea9565b60005b82518110156115025781600d60008584815181106114be576114be612f2d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114fa81612f43565b91505061149e565b505050565b6000546001600160a01b031633146115315760405162461bcd60e51b8152600401610b7090612ea9565b602381905560135461154c90600190610d1190612710611ba8565b6023541015610d585760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b70565b6000546001600160a01b031633146115b75760405162461bcd60e51b8152600401610b7090612ea9565b6001600160a01b03811661161c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b70565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610b7090612ea9565b6003805460ff19166001179055565b6001600160a01b0383166117125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b70565b6001600160a01b0382166117735760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b70565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117e18385612ef4565b9050838110156118335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b70565b9392505050565b6003548390839060ff168061186757506001600160a01b03821660009081526004602052604090205460ff165b8061188a57506001600160a01b03811660009081526004602052604090205460ff165b6118c15760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b70565b6001600160a01b0385166119255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b70565b6001600160a01b0384166119875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b70565b600083116119e95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b70565b6000546001600160a01b03868116911614801590611a1557506000546001600160a01b03858116911614155b15611a7d57602354831115611a7d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b70565b6000611a8830610f01565b602554909150811015611a9c878787611ea5565b60265460ff16158015611ab65750602654610100900460ff165b8015611af457507f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f803766001600160a01b0316876001600160a01b031614155b15611b0d578015611b0d576025549150611b0d82611ce9565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b4f57506001600160a01b0387166000908152600c602052604090205460ff165b15611b58575060005b611b6488888884611fa1565b5050505050505050565b60008184841115611b925760405162461bcd60e51b8152600401610b709190612b5f565b506000611b9f8486612f5c565b95945050505050565b600061183383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121a9565b600082600003611bfc57506000610b40565b6000611c088385612f6f565b905082611c158583612f86565b146118335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b70565b6000601454821115611cd35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b70565b6000611cdd6121d7565b90506118338382611ba8565b6026805460ff19166001179055601854601754601654600092611d11929091610bb0916117d4565b90506000611d32601d54610bb0601c54601b546117d490919063ffffffff16565b90506000611d4083836117d4565b90506000611d6d6002611d6784611d67601b54601654611d609190612ef4565b8a90611bea565b90611ba8565b90506000611d7b86836121fa565b9050611d868161223c565b60004790506000611db06002611d6787611d67601b54601654611da99190612ef4565b8790611bea565b9050600084118015611dc25750600081115b15611dd157611dd18482612435565b6000611df186611d67601c54601754611dea9190612ef4565b8690611bea565b90508015611e35576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e33573d6000803e3d6000fd5b505b6000611e4b82611e4586866121fa565b906121fa565b90508015611e8f576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e8d573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b6000611eb482610bb085610f01565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611ef957506001600160a01b0383166000908152600d602052604090205460ff16155b15611f2057602454811115611f205760405162461bcd60e51b8152600401610b7090612fa8565b7f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f803766001600160a01b0316846001600160a01b0316148015611f7a57506001600160a01b0383166000908152600d602052604090205460ff16155b15610bd957602454811115610bd95760405162461bcd60e51b8152600401610b7090612fa8565b80611fbf57611fba600060168190556017819055601855565b61209f565b7f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f803766001600160a01b0316836001600160a01b03160361200f5761200f601b54601655601c54601755601d54601855565b7f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f803766001600160a01b0316846001600160a01b03161415801561208357507f0000000000000000000000002c3e7e0f246e004f5f1997da3d816aaec0f803766001600160a01b0316836001600160a01b031614155b1561209f5761209f601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120e057506001600160a01b0383166000908152600e602052604090205460ff16155b156120f5576120f0848484612515565b6121a1565b6001600160a01b0384166000908152600e602052604090205460ff1615801561213657506001600160a01b0383166000908152600e602052604090205460ff165b15612146576120f084848461266e565b6001600160a01b0384166000908152600e602052604090205460ff16801561218657506001600160a01b0383166000908152600e602052604090205460ff165b15612196576120f084848461270f565b6121a184848461277a565b610bd96127b6565b600081836121ca5760405162461bcd60e51b8152600401610b709190612b5f565b506000611b9f8486612f86565b60008060006121e4612825565b90925090506121f38282611ba8565b9250505090565b600061183383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b6e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061227157612271612f2d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123139190612ff0565b8160018151811061232657612326612f2d565b60200260200101906001600160a01b031690816001600160a01b031681525050612371307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116b0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123c6908590600090869030904290600401613051565b600060405180830381600087803b1580156123e057600080fd5b505af11580156123f4573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161242992919061308d565b60405180910390a15050565b612460307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116b0565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061250e91906130a6565b5050505050565b600080600080612524856129a7565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061255190866121fa565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461258090856121fa565b6001600160a01b0380891660009081526009602052604080822093909355908816815220546125af90846117d4565b6001600160a01b0387166000908152600960205260409020556125d1816129e5565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161261691815260200190565b60405180910390a380156126655760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061267d856129a7565b6001600160a01b038b16600090815260096020526040902054939750919550935091506126aa90856121fa565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126e090836117d4565b6001600160a01b0387166000908152600a60209081526040808320939093556009905220546125af90846117d4565b60008060008061271e856129a7565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061274b90866121fa565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546126aa90856121fa565b600080600080612789856129a7565b6001600160a01b038b166000908152600960205260409020549397509195509350915061258090856121fa565b601a6000815481106127ca576127ca612f2d565b9060005260206000200154601681905550601a6001815481106127ef576127ef612f2d565b9060005260206000200154601781905550601a60028154811061281457612814612f2d565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612977578260096000600f848154811061285457612854612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128bf575081600a6000600f848154811061289857612898612f2d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d557601454601354945094505050509091565b61291b60096000600f84815481106128ef576128ef612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121fa565b9250612963600a6000600f848154811061293757612937612f2d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121fa565b91508061296f81612f43565b915050612832565b5060135460145461298791611ba8565b82101561299e576014546013549350935050509091565b90939092509050565b6000806000806000806129b987612a6d565b915091506000806129d289846129cd6121d7565b612a94565b909a909950939750919550919350505050565b60006129ef6121d7565b905060006129fd8383611bea565b30600090815260096020526040902054909150612a1a90826117d4565b30600090815260096020908152604080832093909355600e9052205460ff161561150257306000908152600a6020526040902054612a5890846117d4565b306000908152600a6020526040902055505050565b6000806000612a7b84612acd565b90506000612a8985836121fa565b959194509092505050565b60008080612aa28685611bea565b90506000612ab08686611bea565b90506000612abe83836121fa565b92989297509195505050505050565b600080612aed601854610bb06017546016546117d490919063ffffffff16565b90506118336103e8611d678584611bea565b828054828255906000526020600020908101928215612b3a579160200282015b82811115612b3a578251825591602001919060010190612b1f565b50612b46929150612b4a565b5090565b5b80821115612b465760008155600101612b4b565b600060208083528351808285015260005b81811015612b8c57858101830151858201604001528201612b70565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5857600080fd5b8035610e4781612bad565b60008060408385031215612be057600080fd5b8235612beb81612bad565b946020939093013593505050565b600080600060608486031215612c0e57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c3a57600080fd5b8335612c4581612bad565b92506020840135612c5581612bad565b929592945050506040919091013590565b600060208284031215612c7857600080fd5b813561183381612bad565b600060208284031215612c9557600080fd5b5035919050565b80358015158114610e4757600080fd5b60008060408385031215612cbf57600080fd5b8235612cca81612bad565b9150612cd860208401612c9c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d0857600080fd5b8135602067ffffffffffffffff80831115612d2557612d25612ce1565b8260051b604051601f19603f83011681018181108482111715612d4a57612d4a612ce1565b604052938452858101830193838101925087851115612d6857600080fd5b83870191505b84821015612d8e57612d7f82612bc2565b83529183019190830190612d6e565b979650505050505050565b600060208284031215612dab57600080fd5b813567ffffffffffffffff811115612dc257600080fd5b612dce84828501612cf7565b949350505050565b600060208284031215612de857600080fd5b61183382612c9c565b60008060408385031215612e0457600080fd5b8235612e0f81612bad565b91506020830135612e1f81612bad565b809150509250929050565b60008060408385031215612e3d57600080fd5b823567ffffffffffffffff811115612e5457600080fd5b612e6085828601612cf7565b925050612cd860208401612c9c565b600181811c90821680612e8357607f821691505b602082108103612ea357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b4057610b40612ede565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f5557612f55612ede565b5060010190565b81810381811115610b4057610b40612ede565b8082028115828204841417610b4057610b40612ede565b600082612fa357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b60006020828403121561300257600080fd5b815161183381612bad565b600081518084526020808501945080840160005b838110156130465781516001600160a01b031687529582019590820190600101613021565b509495945050505050565b85815284602082015260a06040820152600061307060a083018661300d565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612dce604083018461300d565b6000806000606084860312156130bb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050f628f80225a25e6ed9836d2d73dd5e0c66d0d139302d62aabbc3f76a09d32264736f6c63430008130033

Deployed Bytecode Sourcemap

6715:20908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8326:77;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8326:77:0;;;;;;;;10130:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11042:161::-;;;;;;;;;;-1:-1:-1;11042:161:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;11042:161:0;1344:187:1;24490:453:0;;;;;;;;;;-1:-1:-1;24490:453:0;;;;;:::i;:::-;;:::i;:::-;;12037:87;;;;;;;;;;-1:-1:-1;12106:10:0;;12037:87;;8884:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;8884:51:0;1857:229:1;10407:95:0;;;;;;;;;;-1:-1:-1;10487:7:0;;10407:95;;11211:313;;;;;;;;;;-1:-1:-1;11211:313:0;;;;;:::i;:::-;;:::i;10316:83::-;;;;;;;;;;-1:-1:-1;10382:9:0;;10316:83;;10382:9;;;;2694:36:1;;2682:2;2667:18;10316:83:0;2552:184:1;8494:30:0;;;;;;;;;;;;;;;;8024:73;;;;;;;;;;;;;;;;11532:218;;;;;;;;;;-1:-1:-1;11532:218:0;;;;;:::i;:::-;;:::i;6915:87::-;;;;;;;;;;-1:-1:-1;6915:87:0;;;;-1:-1:-1;;;;;6915:87:0;;;22353:111;;;;;;;;;;-1:-1:-1;22353:111:0;;;;;:::i;:::-;;:::i;27039:215::-;;;;;;;;;;-1:-1:-1;27039:215:0;;;;;:::i;:::-;;:::i;5972:26::-;;;;;;;;;;-1:-1:-1;5972:26:0;;;;;;;;8942:38;;;;;;;;;;;;;;;9021:40;;;;;;;;;;-1:-1:-1;9021:40:0;;;;;;;;;;;6397:109;;;;;;;;;;-1:-1:-1;6397:109:0;;;;;:::i;:::-;;:::i;26653:143::-;;;;;;;;;;-1:-1:-1;26653:143:0;;;;;:::i;:::-;;:::i;22211:134::-;;;;;;;;;;-1:-1:-1;22211:134:0;;;;;:::i;:::-;;:::i;7988:29::-;;;;;;;;;;;;;;;;27262:182;;;;;;;;;;;;;:::i;10510:198::-;;;;;;;;;;-1:-1:-1;10510:198:0;;;;;:::i;:::-;;:::i;4096:148::-;;;;;;;;;;;;;:::i;8699:66::-;;;;;;;;;;;;;;;;8410:35;;;;;;;;;;;;;;;;8616:55;;;;;;;;;;;;;;;;8452:35;;;;;;;;;;;;;;;;8200:36;;;;;;;;;;;;;;;;8104:81;;;;;;;;;;-1:-1:-1;8104:81:0;;;;;:::i;:::-;;:::i;3882:79::-;;;;;;;;;;-1:-1:-1;3920:7:0;3947:6;-1:-1:-1;;;;;3947:6:0;3882:79;;25328:146;;;;;;;;;;-1:-1:-1;25328:146:0;;;;;:::i;:::-;;:::i;23501:519::-;;;;;;;;;;-1:-1:-1;23501:519:0;;;;;:::i;:::-;;:::i;10221:87::-;;;;;;;;;;;;;:::i;12132:120::-;;;;;;;;;;-1:-1:-1;12221:23:0;;12132:120;;11758:269;;;;;;;;;;-1:-1:-1;11758:269:0;;;;;:::i;:::-;;:::i;6815:93::-;;;;;;;;;;-1:-1:-1;6815:93:0;;;;-1:-1:-1;;;;;6815:93:0;;;10716:167;;;;;;;;;;-1:-1:-1;10716:167:0;;;;;:::i;:::-;;:::i;25155:165::-;;;;;;;;;;-1:-1:-1;25155:165:0;;;;;:::i;:::-;;:::i;27452:131::-;;;;;;;;;;;;;:::i;8531:78::-;;;;;;;;;;;;;;;;22472:194;;;;;;;;;;-1:-1:-1;22472:194:0;;;;;:::i;:::-;;:::i;25612:176::-;;;;;;;;;;-1:-1:-1;25612:176:0;;;;;:::i;:::-;;:::i;7944:37::-;;;;;;;;;;;;;;;;8243:38;;;;;;;;;;;;;;;;8288:31;;;;;;;;;;;;;;;;25482:122;;;;;;;;;;-1:-1:-1;25482:122:0;;;;;:::i;:::-;;:::i;7009:68::-;;;;;;;;;;-1:-1:-1;7009:68:0;;;;-1:-1:-1;;;;;7009:68:0;;;24028:452;;;;;;;;;;-1:-1:-1;24028:452:0;;;;;:::i;:::-;;:::i;6514:194::-;;;;;;;;;;-1:-1:-1;6514:194:0;;;;;:::i;:::-;;:::i;7902:35::-;;;;;;;;;;;;;;;;10891:143;;;;;;;;;;-1:-1:-1;10891:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10999:18:0;;;10972:7;10999:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10891:143;22674:110;;;;;;;;;;-1:-1:-1;22674:110:0;;;;;:::i;:::-;;:::i;26804:227::-;;;;;;;;;;-1:-1:-1;26804:227:0;;;;;:::i;:::-;;:::i;24953:194::-;;;;;;;;;;-1:-1:-1;24953:194:0;;;;;:::i;:::-;;:::i;4252:244::-;;;;;;;;;;-1:-1:-1;4252:244:0;;;;;:::i;:::-;;:::i;7084:66::-;;;;;;;;;;-1:-1:-1;7084:66:0;;;;-1:-1:-1;;;;;7084:66:0;;;6312:77;;;;;;;;;;;;;:::i;10130:83::-;10167:13;10200:5;10193:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10130:83;:::o;11042:161::-;11117:4;11134:39;990:10;11157:7;11166:6;11134:8;:39::i;:::-;-1:-1:-1;11191:4:0;11042:161;;;;;:::o;24490:453::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;;;;;;;;;24631:16:::1;:32:::0;;;24674:16:::1;:32:::0;;;24717:10:::1;:20:::0;;;24730:7;24767:33:::1;24693:13:::0;24650;24767:33:::1;:::i;:::-;:44;;;;:::i;:::-;24748:16;:63:::0;24822:16:::1;24841:45;24878:7:::0;24841:32:::1;:13:::0;24859;24841:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;24822:64;;24915:3;24905:8;:13;;24897:38;;;;-1:-1:-1::0;;;24897:38:0::1;;;;;;;:::i;:::-;24620:323;24490:453:::0;;;:::o;11211:313::-;11309:4;11326:36;11336:6;11344:9;11355:6;11326:9;:36::i;:::-;11373:121;11382:6;990:10;11404:89;11442:6;11404:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11404:19:0;;;;;;:11;:19;;;;;;;;990:10;11404:33;;;;;;;;;;:37;:89::i;:::-;11373:8;:121::i;:::-;-1:-1:-1;11512:4:0;11211:313;;;;;:::o;11532:218::-;990:10;11620:4;11669:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11669:34:0;;;;;;;;;;11620:4;;11637:83;;11660:7;;11669:50;;11708:10;11669:38;:50::i;22353:111::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22422:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22422:34:0::1;22452:4;22422:34;::::0;;22353:111::o;27039:215::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;27124:22:::1;:32:::0;;;27200:7:::1;::::0;:25:::1;::::0;27223:1:::1;::::0;27200:18:::1;::::0;27212:5:::1;27200:11;:18::i;:::-;:22:::0;::::1;:25::i;:::-;27175:22;;:50;27167:77;;;::::0;-1:-1:-1;;;27167:77:0;;8043:2:1;27167:77:0::1;::::0;::::1;8025:21:1::0;8082:2;8062:18;;;8055:30;-1:-1:-1;;;8101:18:1;;;8094:44;8155:18;;27167:77:0::1;7841:338:1::0;27167:77:0::1;27039:215:::0;:::o;6397:109::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6471:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;6471:27:0::1;6494:4;6471:27;::::0;;6397:109::o;26653:143::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26748:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26748:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26653:143::o;22211:134::-;22285:4;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22310:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;4079:1;22211:134:::0;;;:::o;27262:182::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;27340:49:::1;::::0;27322:12:::1;::::0;27340:10:::1;::::0;27363:21:::1;::::0;27322:12;27340:49;27322:12;27340:49;27363:21;27340:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27321:68;;;27408:7;27400:36;;;::::0;-1:-1:-1;;;27400:36:0;;8596:2:1;27400:36:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;-1:-1:-1;;;8654:18:1;;;8647:46;8710:18;;27400:36:0::1;8394:340:1::0;10510:198:0;-1:-1:-1;;;;;10600:20:0;;10576:7;10600:20;;;:11;:20;;;;;;;;10596:49;;;-1:-1:-1;;;;;;10629:16:0;;;;;:7;:16;;;;;;;10510:198::o;10596:49::-;-1:-1:-1;;;;;10683:16:0;;;;;;:7;:16;;;;;;10663:37;;:19;:37::i;4096:148::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;4203:1:::1;4187:6:::0;;4166:40:::1;::::0;-1:-1:-1;;;;;4187:6:0;;::::1;::::0;4166:40:::1;::::0;4203:1;;4166:40:::1;4234:1;4217:19:::0;;-1:-1:-1;;;;;;4217:19:0::1;::::0;;4096:148::o;8104:81::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8104:81:0;:::o;25328:146::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;25421:16:::1;:45:::0;;-1:-1:-1;;;;;;25421:45:0::1;-1:-1:-1::0;;;;;25421:45:0;;;::::1;::::0;;;::::1;::::0;;25328:146::o;23501:519::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;23637:16:::1;:32:::0;;;23680:16:::1;:32:::0;;;23723:10:::1;:20:::0;;;23754:64:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:64:::1;;:::i;:::-;-1:-1:-1::0;23829:16:0::1;23848:45;23885:7:::0;23848:32:::1;:13:::0;23866;23848:17:::1;:32::i;:45::-;23829:64;;23952:10;;23935:16;;23918;;:33;;;;:::i;:::-;:44;;;;:::i;:::-;23904:11;:58:::0;23991:4:::1;23981:14:::0;::::1;;23973:39;;;;-1:-1:-1::0;;;23973:39:0::1;;;;;;;:::i;10221:87::-:0;10260:13;10293:7;10286:14;;;;;:::i;11758:269::-;11851:4;11868:129;990:10;11891:7;11900:96;11939:15;11900:96;;;;;;;;;;;;;;;;;990:10;11900:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11900:34:0;;;;;;;;;;;;:38;:96::i;10716:167::-;10794:4;10811:42;990:10;10835:9;10846:6;10811:9;:42::i;25155:165::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;25262:23:::1;:50:::0;25155:165::o;27452:131::-;27497:18;27518:24;27536:4;27518:9;:24::i;:::-;27497:45;;27553:22;27564:10;27553;:22::i;22472:194::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;22559:6:::1;22555:104;22573:8;:15;22569:1;:19;22555:104;;;22643:4;22609:18;:31;22628:8;22637:1;22628:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22609:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22609:31:0;:38;;-1:-1:-1;;22609:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22590:3;::::1;::::0;::::1;:::i;:::-;;;;22555:104;;;;22472:194:::0;:::o;25612:176::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;25694:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;25694:32:0;;::::1;;::::0;;25742:38:::1;::::0;::::1;::::0;::::1;::::0;25718:8;1509:14:1;1502:22;1484:41;;1472:2;1457:18;;1344:187;25742:38:0::1;;;;;;;;25612:176:::0;:::o;25482:122::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;25563:10:::1;:33:::0;;-1:-1:-1;;;;;;25563:33:0::1;-1:-1:-1::0;;;;;25563:33:0;;;::::1;::::0;;;::::1;::::0;;25482:122::o;24028:452::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;24165:17:::1;:33:::0;;;24209:17:::1;:33:::0;;;24253:11:::1;:21:::0;;;-1:-1:-1;24304:45:0::1;24267:7:::0;24304:32:::1;24185:13:::0;24229;24304:17:::1;:32::i;:45::-;24285:64;;24411:11;;24393:17;;24375;;:35;;;;:::i;:::-;:47;;;;:::i;:::-;24360:12;:62:::0;24451:4:::1;24441:14:::0;::::1;;24433:39;;;;-1:-1:-1::0;;;24433:39:0::1;;;;;;;:::i;6514:194::-:0;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;6607:6:::1;6603:98;6619:10;:17;6617:1;:19;6603:98;;;6685:4;6657:10;:25;6668:10;6679:1;6668:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6657:25:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;6657:25:0;:32;;-1:-1:-1;;6657:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;6638:3;::::1;::::0;::::1;:::i;:::-;;;;6603:98;;22674:110:::0;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22741:27:0::1;22771:5;22741:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22741:35:0::1;::::0;;22674:110::o;26804:227::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;26917:6:::1;26913:109;26931:8;:15;26927:1;:19;26913:109;;;27002:8;26966:20;:33;26987:8;26996:1;26987:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26966:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26966:33:0;:44;;-1:-1:-1;;26966:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26948:3;::::1;::::0;::::1;:::i;:::-;;;;26913:109;;;;26804:227:::0;;:::o;24953:194::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;25035:12:::1;:26:::0;;;25096:7:::1;::::0;:25:::1;::::0;25119:1:::1;::::0;25096:18:::1;::::0;25108:5:::1;25096:11;:18::i;:25::-;25080:12;;:41;;25072:67;;;::::0;-1:-1:-1;;;25072:67:0;;9213:2:1;25072:67:0::1;::::0;::::1;9195:21:1::0;9252:2;9232:18;;;9225:30;-1:-1:-1;;;9271:18:1;;;9264:43;9324:18;;25072:67:0::1;9011:337:1::0;4252:244:0;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4341:22:0;::::1;4333:73;;;::::0;-1:-1:-1;;;4333:73:0;;9555:2:1;4333:73:0::1;::::0;::::1;9537:21:1::0;9594:2;9574:18;;;9567:30;9633:34;9613:18;;;9606:62;-1:-1:-1;;;9684:18:1;;;9677:36;9730:19;;4333:73:0::1;9353:402:1::0;4333:73:0::1;4443:6;::::0;;4422:38:::1;::::0;-1:-1:-1;;;;;4422:38:0;;::::1;::::0;4443:6;::::1;::::0;4422:38:::1;::::0;::::1;4471:6;:17:::0;;-1:-1:-1;;;;;;4471:17:0::1;-1:-1:-1::0;;;;;4471:17:0;;;::::1;::::0;;;::::1;::::0;;4252:244::o;6312:77::-;4009:6;;-1:-1:-1;;;;;4009:6:0;990:10;4009:22;4001:67;;;;-1:-1:-1;;;4001:67:0;;;;;;;:::i;:::-;6368:6:::1;:13:::0;;-1:-1:-1;;6368:13:0::1;6377:4;6368:13;::::0;;6312:77::o;12530:340::-;-1:-1:-1;;;;;12628:19:0;;12620:68;;;;-1:-1:-1;;;12620:68:0;;9962:2:1;12620:68:0;;;9944:21:1;10001:2;9981:18;;;9974:30;10040:34;10020:18;;;10013:62;-1:-1:-1;;;10091:18:1;;;10084:34;10135:19;;12620:68:0;9760:400:1;12620:68:0;-1:-1:-1;;;;;12707:21:0;;12699:68;;;;-1:-1:-1;;;12699:68:0;;10367:2:1;12699:68:0;;;10349:21:1;10406:2;10386:18;;;10379:30;10445:34;10425:18;;;10418:62;-1:-1:-1;;;10496:18:1;;;10489:32;10538:19;;12699:68:0;10165:398:1;12699:68:0;-1:-1:-1;;;;;12778:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12830:32;;160:25:1;;;12830:32:0;;133:18:1;12830:32:0;;;;;;;12530:340;;;:::o;1963:181::-;2021:7;;2053:5;2057:1;2053;:5;:::i;:::-;2041:17;;2082:1;2077;:6;;2069:46;;;;-1:-1:-1;;;2069:46:0;;10770:2:1;2069:46:0;;;10752:21:1;10809:2;10789:18;;;10782:30;10848:29;10828:18;;;10821:57;10895:18;;2069:46:0;10568:351:1;2069:46:0;2135:1;1963:181;-1:-1:-1;;;1963:181:0:o;12878:1256::-;6114:6;;12952:4;;12958:2;;6114:6;;;:26;;-1:-1:-1;;;;;;6124:16:0;;;;;;:10;:16;;;;;;;;6114:26;:44;;;-1:-1:-1;;;;;;6144:14:0;;;;;;:10;:14;;;;;;;;6114:44;6106:65;;;;-1:-1:-1;;;6106:65:0;;11126:2:1;6106:65:0;;;11108:21:1;11165:1;11145:18;;;11138:29;-1:-1:-1;;;11183:18:1;;;11176:38;11231:18;;6106:65:0;10924:331:1;6106:65:0;-1:-1:-1;;;;;12986:18:0;::::1;12978:68;;;::::0;-1:-1:-1;;;12978:68:0;;11462:2:1;12978:68:0::1;::::0;::::1;11444:21:1::0;11501:2;11481:18;;;11474:30;11540:34;11520:18;;;11513:62;-1:-1:-1;;;11591:18:1;;;11584:35;11636:19;;12978:68:0::1;11260:401:1::0;12978:68:0::1;-1:-1:-1::0;;;;;13065:16:0;::::1;13057:64;;;::::0;-1:-1:-1;;;13057:64:0;;11868:2:1;13057:64:0::1;::::0;::::1;11850:21:1::0;11907:2;11887:18;;;11880:30;11946:34;11926:18;;;11919:62;-1:-1:-1;;;11997:18:1;;;11990:33;12040:19;;13057:64:0::1;11666:399:1::0;13057:64:0::1;13149:1;13140:6;:10;13132:64;;;::::0;-1:-1:-1;;;13132:64:0;;12272:2:1;13132:64:0::1;::::0;::::1;12254:21:1::0;12311:2;12291:18;;;12284:30;12350:34;12330:18;;;12323:62;-1:-1:-1;;;12401:18:1;;;12394:39;12450:19;;13132:64:0::1;12070:405:1::0;13132:64:0::1;3920:7:::0;3947:6;-1:-1:-1;;;;;13210:15:0;;::::1;3947:6:::0;;13210:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3920:7:0;3947:6;-1:-1:-1;;;;;13229:13:0;;::::1;3947:6:::0;;13229:13:::1;;13210:32;13207:139;;;13277:12;;13267:6;:22;;13259:75;;;::::0;-1:-1:-1;;;13259:75:0;;12682:2:1;13259:75:0::1;::::0;::::1;12664:21:1::0;12721:2;12701:18;;;12694:30;12760:34;12740:18;;;12733:62;-1:-1:-1;;;12811:18:1;;;12804:38;12859:19;;13259:75:0::1;12480:404:1::0;13259:75:0::1;13358:28;13389:24;13407:4;13389:9;:24::i;:::-;13479:23;::::0;13358:55;;-1:-1:-1;13455:47:0;::::1;;13515:31;13529:4:::0;13535:2;13539:6;13515:13:::1;:31::i;:::-;13564:16;::::0;::::1;;13563:17;:42:::0;::::1;;;-1:-1:-1::0;13584:21:0::1;::::0;::::1;::::0;::::1;;;13563:42;:67;;;;;13617:13;-1:-1:-1::0;;;;;13609:21:0::1;:4;-1:-1:-1::0;;;;;13609:21:0::1;;;13563:67;13559:282;;;13660:23;13656:174;;;13740:23;;13717:46;;13782:32;13793:20;13782:10;:32::i;:::-;-1:-1:-1::0;;;;;13972:24:0;::::1;13853:12;13972:24:::0;;;:18:::1;:24;::::0;;;;;13868:4:::1;::::0;13972:24:::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;14000:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;13972:50;13969:106;;;-1:-1:-1::0;14058:5:0::1;13969:106;14085:41;14100:4;14106:2;14110:6;14118:7;14085:14;:41::i;:::-;12967:1167;;;12878:1256:::0;;;;;:::o;2296:192::-;2382:7;2418:12;2410:6;;;;2402:29;;;;-1:-1:-1;;;2402:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2442:9:0;2454:5;2458:1;2454;:5;:::i;:::-;2442:17;2296:192;-1:-1:-1;;;;;2296:192:0:o;2756:132::-;2814:7;2841:39;2845:1;2848;2841:39;;;;;;;;;;;;;;;;;:3;:39::i;2496:250::-;2554:7;2578:1;2583;2578:6;2574:47;;-1:-1:-1;2608:1:0;2601:8;;2574:47;2633:9;2645:5;2649:1;2645;:5;:::i;:::-;2633:17;-1:-1:-1;2678:1:0;2669:5;2673:1;2633:17;2669:5;:::i;:::-;:10;2661:56;;;;-1:-1:-1;;;2661:56:0;;13619:2:1;2661:56:0;;;13601:21:1;13658:2;13638:18;;;13631:30;13697:34;13677:18;;;13670:62;-1:-1:-1;;;13748:18:1;;;13741:31;13789:19;;2661:56:0;13417:397:1;12264:254:0;12331:7;12370;;12359;:18;;12351:73;;;;-1:-1:-1;;;12351:73:0;;14021:2:1;12351:73:0;;;14003:21:1;14060:2;14040:18;;;14033:30;14099:34;14079:18;;;14072:62;-1:-1:-1;;;14150:18:1;;;14143:40;14200:19;;12351:73:0;13819:406:1;12351:73:0;12435:19;12458:10;:8;:10::i;:::-;12435:33;-1:-1:-1;12486:24:0;:7;12435:33;12486:11;:24::i;14144:1314::-;9396:16;:23;;-1:-1:-1;;9396:23:0;9415:4;9396:23;;;14298:10:::1;::::0;14276:16:::1;::::0;14255::::1;::::0;9396;;14255:54:::1;::::0;14298:10;;14255:38:::1;::::0;:20:::1;:38::i;:54::-;14230:79;;14324:22;14349:57;14394:11;;14349:40;14371:17;;14349;;:21;;:40;;;;:::i;:57::-;14324:82:::0;-1:-1:-1;14417:25:0::1;14445:33;:13:::0;14324:82;14445:17:::1;:33::i;:::-;14417:61;;14491:27;14521:90;14609:1;14521:83;14586:17;14521:60;14563:17;;14546:16;;:34;;;;:::i;:::-;14521:20:::0;;:24:::1;:60::i;:::-;:64:::0;::::1;:83::i;:90::-;14491:120:::0;-1:-1:-1;14622:22:0::1;14647:45;:20:::0;14491:120;14647:24:::1;:45::i;:::-;14622:70;;14703:32;14720:14;14703:16;:32::i;:::-;14748:18;14769:21;14748:42;;14801:23;14827:80;14905:1;14827:73;14882:17;14827:50;14859:17;;14842:16;;:34;;;;:::i;:::-;14827:10:::0;;:14:::1;:50::i;:80::-;14801:106;;14943:1;14923:19;:21;:42;;;;;14964:1;14948:15;:17;14923:42;14920:133;;;14991:50;15004:19;15025:15;14991:12;:50::i;:::-;15065:23;15091:73;15146:17;15091:50;15123:17;;15106:16;;:34;;;;:::i;:::-;15091:10:::0;;:14:::1;:50::i;:73::-;15065:99:::0;-1:-1:-1;15178:17:0;;15175:99:::1;;15220:16;::::0;:42:::1;::::0;-1:-1:-1;;;;;15220:16:0;;::::1;::::0;:42;::::1;;;::::0;15246:15;;15220:16:::1;:42:::0;:16;:42;15246:15;15220:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15175:99;15286:17;15306:52;15342:15:::0;15306:31:::1;:10:::0;15321:15;15306:14:::1;:31::i;:::-;:35:::0;::::1;:52::i;:::-;15286:72:::0;-1:-1:-1;15372:11:0;;15369:82:::1;;15409:10;::::0;:30:::1;::::0;-1:-1:-1;;;;;15409:10:0;;::::1;::::0;:30;::::1;;;::::0;15429:9;;15409:10:::1;:30:::0;:10;:30;15429:9;15409:10;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15369:82;-1:-1:-1::0;;9442:16:0;:24;;-1:-1:-1;;9442:24:0;;;-1:-1:-1;;;;;;;;14144:1314:0:o;26112:533::-;26207:18;26228:25;26246:6;26228:13;26238:2;26228:9;:13::i;:25::-;-1:-1:-1;;;;;26268:26:0;;;;;;:20;:26;;;;;;26207:46;;-1:-1:-1;26268:26:0;;26267:27;:56;;;;-1:-1:-1;;;;;;26299:24:0;;;;;;:20;:24;;;;;;;;26298:25;26267:56;26264:186;;;26371:22;;26357:10;:36;;26349:89;;;;-1:-1:-1;;;26349:89:0;;;;;;;:::i;:::-;26469:13;-1:-1:-1;;;;;26463:19:0;:4;-1:-1:-1;;;;;26463:19:0;;:48;;;;-1:-1:-1;;;;;;26487:24:0;;;;;;:20;:24;;;;;;;;26486:25;26463:48;26460:178;;;26559:22;;26545:10;:36;;26537:89;;;;-1:-1:-1;;;26537:89:0;;;;;;;:::i;16531:985::-;16647:7;16643:355;;16681:14;22854:1;22835:16;:20;;;22866:16;:20;;;22897:10;:14;22792:127;16681:14;16643:355;;;16760:13;-1:-1:-1;;;;;16749:24:0;:9;-1:-1:-1;;;;;16749:24:0;;16746:89;;16807:12;23178:17;;23159:16;:36;23225:17;;23206:16;:36;23266:11;;23253:10;:24;23113:172;16807:12;16864:13;-1:-1:-1;;;;;16854:23:0;:6;-1:-1:-1;;;;;16854:23:0;;;:53;;;;;16894:13;-1:-1:-1;;;;;16881:26:0;:9;-1:-1:-1;;;;;16881:26:0;;;16854:53;16851:136;;;16941:30;23379:16;;23360;:35;23425:16;;23406;:35;23465:10;;23452;:23;23295:196;16941:30;-1:-1:-1;;;;;17016:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;17040:22:0;;;;;;:11;:22;;;;;;;;17039:23;17016:46;17012:467;;;17079:48;17101:6;17109:9;17120:6;17079:21;:48::i;:::-;17012:467;;;-1:-1:-1;;;;;17150:19:0;;;;;;:11;:19;;;;;;;;17149:20;:46;;;;-1:-1:-1;;;;;;17173:22:0;;;;;;:11;:22;;;;;;;;17149:46;17145:334;;;17212:46;17232:6;17240:9;17251:6;17212:19;:46::i;17145:334::-;-1:-1:-1;;;;;17280:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;17303:22:0;;;;;;:11;:22;;;;;;;;17280:45;17276:203;;;17342:48;17364:6;17372:9;17383:6;17342:21;:48::i;17276:203::-;17423:44;17441:6;17449:9;17460:6;17423:17;:44::i;:::-;17491:15;:13;:15::i;2896:278::-;2982:7;3017:12;3010:5;3002:28;;;;-1:-1:-1;;;3002:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3041:9:0;3053:5;3057:1;3053;:5;:::i;20877:163::-;20918:7;20939:15;20956;20975:19;:17;:19::i;:::-;20938:56;;-1:-1:-1;20938:56:0;-1:-1:-1;21012:20:0;20938:56;;21012:11;:20::i;:::-;21005:27;;;;20877:163;:::o;2152:136::-;2210:7;2237:43;2241:1;2244;2237:43;;;;;;;;;;;;;;;;;:3;:43::i;15466:527::-;15561:16;;;15575:1;15561:16;;;;;;;;15537:21;;15561:16;;;;;;;;;;-1:-1:-1;15561:16:0;15537:40;;15606:4;15588;15593:1;15588:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15588:23:0;;;-1:-1:-1;;;;;15588:23:0;;;;;15632:15;-1:-1:-1;;;;;15632:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15622:4;15627:1;15622:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;15622:32:0;;;-1:-1:-1;;;;;15622:32:0;;;;;15665:62;15682:4;15697:15;15715:11;15665:8;:62::i;:::-;15738:196;;-1:-1:-1;;;15738:196:0;;-1:-1:-1;;;;;15738:15:0;:66;;;;:196;;15819:11;;15845:1;;15861:4;;15888;;15908:15;;15738:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15950:35;15967:11;15980:4;15950:35;;;;;;;:::i;:::-;;;;;;;;15526:467;15466:527;:::o;16005:516::-;16153:62;16170:4;16185:15;16203:11;16153:8;:62::i;:::-;16258:255;;-1:-1:-1;;;16258:255:0;;16330:4;16258:255;;;16626:34:1;16676:18;;;16669:34;;;16376:1:0;16719:18:1;;;16712:34;;;16762:18;;;16755:34;;;16805:19;;;16798:44;16487:15:0;16858:19:1;;;16851:35;16258:15:0;-1:-1:-1;;;;;16258:31:0;;;;16297:9;;16560:19:1;;16258:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16005:516;;:::o;18653:579::-;18756:15;18773:23;18798;18823:18;18845:19;18856:7;18845:10;:19::i;:::-;-1:-1:-1;;;;;18890:15:0;;;;;;:7;:15;;;;;;18755:109;;-1:-1:-1;18755:109:0;;-1:-1:-1;18755:109:0;-1:-1:-1;18755:109:0;-1:-1:-1;18890:28:0;;18910:7;18890:19;:28::i;:::-;-1:-1:-1;;;;;18872:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18947:7;:15;;;;:28;;18967:7;18947:19;:28::i;:::-;-1:-1:-1;;;;;18929:15:0;;;;;;;:7;:15;;;;;;:46;;;;19007:18;;;;;;;:39;;19030:15;19007:22;:39::i;:::-;-1:-1:-1;;;;;18986:18:0;;;;;;:7;:18;;;;;:60;19057:26;19072:10;19057:14;:26::i;:::-;19116:9;-1:-1:-1;;;;;19099:44:0;19108:6;-1:-1:-1;;;;;19099:44:0;;19127:15;19099:44;;;;160:25:1;;148:2;133:18;;14:177;19099:44:0;;;;;;;;19157:12;;19154:71;;19179:43;;160:25:1;;;19204:4:0;;-1:-1:-1;;;;;19179:43:0;;;;;148:2:1;133:18;19179:43:0;;;;;;;19154:71;18744:488;;;;18653:579;;;:::o;18054:591::-;18155:15;18172:23;18197;18222:18;18244:19;18255:7;18244:10;:19::i;:::-;-1:-1:-1;;;;;18289:15:0;;;;;;:7;:15;;;;;;18154:109;;-1:-1:-1;18154:109:0;;-1:-1:-1;18154:109:0;-1:-1:-1;18154:109:0;-1:-1:-1;18289:28:0;;18154:109;18289:19;:28::i;:::-;-1:-1:-1;;;;;18271:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;18349:18;;;;;:7;:18;;;;;:39;;18372:15;18349:22;:39::i;:::-;-1:-1:-1;;;;;18328:18:0;;;;;;:7;:18;;;;;;;;:60;;;;18420:7;:18;;;;:39;;18443:15;18420:22;:39::i;19240:650::-;19343:15;19360:23;19385;19410:18;19432:19;19443:7;19432:10;:19::i;:::-;-1:-1:-1;;;;;19477:15:0;;;;;;:7;:15;;;;;;19342:109;;-1:-1:-1;19342:109:0;;-1:-1:-1;19342:109:0;-1:-1:-1;19342:109:0;-1:-1:-1;19477:28:0;;19497:7;19477:19;:28::i;:::-;-1:-1:-1;;;;;19459:15:0;;;;;;:7;:15;;;;;;;;:46;;;;19534:7;:15;;;;:28;;19554:7;19534:19;:28::i;17524:522::-;17623:15;17640:23;17665;17691:18;17713:19;17724:7;17713:10;:19::i;:::-;-1:-1:-1;;;;;17761:15:0;;;;;;:7;:15;;;;;;17622:110;;-1:-1:-1;17622:110:0;;-1:-1:-1;17622:110:0;-1:-1:-1;17622:110:0;-1:-1:-1;17761:28:0;;17622:110;17761:19;:28::i;22927:178::-;22995:13;23009:1;22995:16;;;;;;;;:::i;:::-;;;;;;;;;22976;:35;;;;23041:13;23055:1;23041:16;;;;;;;;:::i;:::-;;;;;;;;;23022;:35;;;;23081:13;23095:1;23081:16;;;;;;;;:::i;:::-;;;;;;;;;;;23068:10;:29;22927:178::o;21048:555::-;21145:7;;21181;;21098;;;;;21199:289;21223:9;:16;21219:20;;21199:289;;;21289:7;21265;:21;21273:9;21283:1;21273:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21273:12:0;21265:21;;;;;;;;;;;;;:31;;:66;;;21324:7;21300;:21;21308:9;21318:1;21308:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21308:12:0;21300:21;;;;;;;;;;;;;:31;21265:66;21261:97;;;21341:7;;21350;;21333:25;;;;;;;21048:555;;:::o;21261:97::-;21383:34;21395:7;:21;21403:9;21413:1;21403:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21403:12:0;21395:21;;;;;;;;;;;;;21383:7;;:11;:34::i;:::-;21373:44;;21442:34;21454:7;:21;21462:9;21472:1;21462:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21462:12:0;21454:21;;;;;;;;;;;;;21442:7;;:11;:34::i;:::-;21432:44;-1:-1:-1;21241:3:0;;;;:::i;:::-;;;;21199:289;;;-1:-1:-1;21524:7:0;;21512;;:20;;:11;:20::i;:::-;21502:7;:30;21498:61;;;21542:7;;21551;;21534:25;;;;;;21048:555;;:::o;21498:61::-;21578:7;;21587;;-1:-1:-1;21048:555:0;-1:-1:-1;21048:555:0:o;19900:355::-;19959:7;19968;19977;19986;20007:23;20032:18;20054:20;20066:7;20054:11;:20::i;:::-;20006:68;;;;20086:15;20103:23;20130:44;20142:7;20151:10;20163;:8;:10::i;:::-;20130:11;:44::i;:::-;20085:89;;;;-1:-1:-1;20219:15:0;;-1:-1:-1;20236:10:0;;-1:-1:-1;19900:355:0;;-1:-1:-1;;;;19900:355:0:o;21611:368::-;21674:19;21697:10;:8;:10::i;:::-;21674:33;-1:-1:-1;21718:18:0;21739:27;:10;21674:33;21739:14;:27::i;:::-;21818:4;21802:22;;;;:7;:22;;;;;;21718:48;;-1:-1:-1;21802:38:0;;21718:48;21802:26;:38::i;:::-;21793:4;21777:22;;;;:7;:22;;;;;;;;:63;;;;21854:11;:26;;;;;;21851:121;;;21938:4;21922:22;;;;:7;:22;;;;;;:38;;21949:10;21922:26;:38::i;:::-;21913:4;21897:22;;;;:7;:22;;;;;:63;21663:316;;21611:368;:::o;20263:255::-;20323:7;20332;20352:18;20373:30;20395:7;20373:21;:30::i;:::-;20352:51;-1:-1:-1;20414:23:0;20440;:7;20352:51;20440:11;:23::i;:::-;20414:49;20499:10;;-1:-1:-1;20263:255:0;;-1:-1:-1;;;20263:255:0:o;20526:343::-;20627:7;;;20674:24;:7;20686:11;20674;:24::i;:::-;20656:42;-1:-1:-1;20709:18:0;20730:27;:10;20745:11;20730:14;:27::i;:::-;20709:48;-1:-1:-1;20768:23:0;20794;:7;20709:48;20794:11;:23::i;:::-;20836:7;;;;-1:-1:-1;20526:343:0;;-1:-1:-1;;;;;;20526:343:0:o;21989:212::-;22059:7;22079:12;22094:54;22137:10;;22094:38;22115:16;;22094;;:20;;:38;;;;:::i;:54::-;22079:69;-1:-1:-1;22166:27:0;22188:4;22166:17;:7;22079:69;22166:11;:17::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:316::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;-1:-1:-1;;1721:23:1;;;1791:2;1776:18;;1763:32;;-1:-1:-1;1842:2:1;1827:18;;;1814:32;;1536:316;-1:-1:-1;1536:316:1:o;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2965:247::-;3024:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;3132:9;3119:23;3151:31;3176:5;3151:31;:::i;3217:180::-;3276:6;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;-1:-1:-1;3368:23:1;;3217:180;-1:-1:-1;3217:180:1:o;3610:160::-;3675:20;;3731:13;;3724:21;3714:32;;3704:60;;3760:1;3757;3750:12;3775:315;3840:6;3848;3901:2;3889:9;3880:7;3876:23;3872:32;3869:52;;;3917:1;3914;3907:12;3869:52;3956:9;3943:23;3975:31;4000:5;3975:31;:::i;:::-;4025:5;-1:-1:-1;4049:35:1;4080:2;4065:18;;4049:35;:::i;:::-;4039:45;;3775:315;;;;;:::o;4095:127::-;4156:10;4151:3;4147:20;4144:1;4137:31;4187:4;4184:1;4177:15;4211:4;4208:1;4201:15;4227:908;4281:5;4334:3;4327:4;4319:6;4315:17;4311:27;4301:55;;4352:1;4349;4342:12;4301:55;4388:6;4375:20;4414:4;4437:18;4474:2;4470;4467:10;4464:36;;;4480:18;;:::i;:::-;4526:2;4523:1;4519:10;4558:2;4552:9;4621:2;4617:7;4612:2;4608;4604:11;4600:25;4592:6;4588:38;4676:6;4664:10;4661:22;4656:2;4644:10;4641:18;4638:46;4635:72;;;4687:18;;:::i;:::-;4723:2;4716:22;4773:18;;;4849:15;;;4845:24;;;4807:15;;;;-1:-1:-1;4881:15:1;;;4878:35;;;4909:1;4906;4899:12;4878:35;4945:2;4937:6;4933:15;4922:26;;4957:148;4973:6;4968:3;4965:15;4957:148;;;5039:23;5058:3;5039:23;:::i;:::-;5027:36;;5083:12;;;;4990;;;;4957:148;;;5123:6;4227:908;-1:-1:-1;;;;;;;4227:908:1:o;5140:348::-;5224:6;5277:2;5265:9;5256:7;5252:23;5248:32;5245:52;;;5293:1;5290;5283:12;5245:52;5333:9;5320:23;5366:18;5358:6;5355:30;5352:50;;;5398:1;5395;5388:12;5352:50;5421:61;5474:7;5465:6;5454:9;5450:22;5421:61;:::i;:::-;5411:71;5140:348;-1:-1:-1;;;;5140:348:1:o;5493:180::-;5549:6;5602:2;5590:9;5581:7;5577:23;5573:32;5570:52;;;5618:1;5615;5608:12;5570:52;5641:26;5657:9;5641:26;:::i;5678:388::-;5746:6;5754;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;5862:9;5849:23;5881:31;5906:5;5881:31;:::i;:::-;5931:5;-1:-1:-1;5988:2:1;5973:18;;5960:32;6001:33;5960:32;6001:33;:::i;:::-;6053:7;6043:17;;;5678:388;;;;;:::o;6071:416::-;6161:6;6169;6222:2;6210:9;6201:7;6197:23;6193:32;6190:52;;;6238:1;6235;6228:12;6190:52;6278:9;6265:23;6311:18;6303:6;6300:30;6297:50;;;6343:1;6340;6333:12;6297:50;6366:61;6419:7;6410:6;6399:9;6395:22;6366:61;:::i;:::-;6356:71;;;6446:35;6477:2;6466:9;6462:18;6446:35;:::i;6492:380::-;6571:1;6567:12;;;;6614;;;6635:61;;6689:4;6681:6;6677:17;6667:27;;6635:61;6742:2;6734:6;6731:14;6711:18;6708:38;6705:161;;6788:10;6783:3;6779:20;6776:1;6769:31;6823:4;6820:1;6813:15;6851:4;6848:1;6841:15;6705:161;;6492:380;;;:::o;6877:356::-;7079:2;7061:21;;;7098:18;;;7091:30;7157:34;7152:2;7137:18;;7130:62;7224:2;7209:18;;6877:356::o;7238:127::-;7299:10;7294:3;7290:20;7287:1;7280:31;7330:4;7327:1;7320:15;7354:4;7351:1;7344:15;7370:125;7435:9;;;7456:10;;;7453:36;;;7469:18;;:::i;7500:336::-;7702:2;7684:21;;;7741:2;7721:18;;;7714:30;-1:-1:-1;;;7775:2:1;7760:18;;7753:42;7827:2;7812:18;;7500:336::o;8739:127::-;8800:10;8795:3;8791:20;8788:1;8781:31;8831:4;8828:1;8821:15;8855:4;8852:1;8845:15;8871:135;8910:3;8931:17;;;8928:43;;8951:18;;:::i;:::-;-1:-1:-1;8998:1:1;8987:13;;8871:135::o;12889:128::-;12956:9;;;12977:11;;;12974:37;;;12991:18;;:::i;13022:168::-;13095:9;;;13126;;13143:15;;;13137:22;;13123:37;13113:71;;13164:18;;:::i;13195:217::-;13235:1;13261;13251:132;;13305:10;13300:3;13296:20;13293:1;13286:31;13340:4;13337:1;13330:15;13368:4;13365:1;13358:15;13251:132;-1:-1:-1;13397:9:1;;13195:217::o;14230:404::-;14432:2;14414:21;;;14471:2;14451:18;;;14444:30;14510:34;14505:2;14490:18;;14483:62;-1:-1:-1;;;14576:2:1;14561:18;;14554:38;14624:3;14609:19;;14230:404::o;14639:251::-;14709:6;14762:2;14750:9;14741:7;14737:23;14733:32;14730:52;;;14778:1;14775;14768:12;14730:52;14810:9;14804:16;14829:31;14854:5;14829:31;:::i;14895:461::-;14948:3;14986:5;14980:12;15013:6;15008:3;15001:19;15039:4;15068:2;15063:3;15059:12;15052:19;;15105:2;15098:5;15094:14;15126:1;15136:195;15150:6;15147:1;15144:13;15136:195;;;15215:13;;-1:-1:-1;;;;;15211:39:1;15199:52;;15271:12;;;;15306:15;;;;15247:1;15165:9;15136:195;;;-1:-1:-1;15347:3:1;;14895:461;-1:-1:-1;;;;;14895:461:1:o;15361:582::-;15660:6;15649:9;15642:25;15703:6;15698:2;15687:9;15683:18;15676:34;15746:3;15741:2;15730:9;15726:18;15719:31;15623:4;15767:57;15819:3;15808:9;15804:19;15796:6;15767:57;:::i;:::-;-1:-1:-1;;;;;15860:32:1;;;;15855:2;15840:18;;15833:60;-1:-1:-1;15924:3:1;15909:19;15902:35;15759:65;15361:582;-1:-1:-1;;;15361:582:1:o;15948:332::-;16155:6;16144:9;16137:25;16198:2;16193;16182:9;16178:18;16171:30;16118:4;16218:56;16270:2;16259:9;16255:18;16247:6;16218:56;:::i;16897:306::-;16985:6;16993;17001;17054:2;17042:9;17033:7;17029:23;17025:32;17022:52;;;17070:1;17067;17060:12;17022:52;17099:9;17093:16;17083:26;;17149:2;17138:9;17134:18;17128:25;17118:35;;17193:2;17182:9;17178:18;17172:25;17162:35;;16897:306;;;;;:::o

Swarm Source

ipfs://50f628f80225a25e6ed9836d2d73dd5e0c66d0d139302d62aabbc3f76a09d322
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.