ETH Price: $3,483.68 (-0.94%)
Gas: 6 Gwei

Token

KITORA INU (KITORA)
 

Overview

Max Total Supply

100,000,000,000,000 KITORA

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,007,589,242,723.012721884680056172 KITORA

Value
$0.00
0x6B6B1C0a3e5Ae34BAc162296A9E2cea4a0a00E60
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
KitoraInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: 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), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
contract KitoraInu is IERC20, Context, ERC20Ownable {
    using SafeMath for uint256;
    address dead = 0x000000000000000000000000000000000000dEaD;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint) private _setCoolDown;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _maxWalletExclude;
	mapping (address => bool) private _isBot;
	mapping(address => bool) public boughtEarly;
	uint256 public tradingActiveBlock = 0;
    uint256 public earlyBuyPenaltyEnd;
    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e14 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _maxTxAmount = _tTotal;
    uint256 private _tFeeTotal;
    uint256 private _maxWalletSize = 3000000000000 * 10**18;
    string private constant _name = "KITORA INU";
    string private constant _tick = "KITORA";
    uint8 private constant _deci = 18;
    uint8 private _refTax = 0;
    uint8 private _previousRefTax = _refTax;
    uint8 private _burnTax = 0;
    uint8 private _previouseBurnTax = _burnTax;
    uint8 private _liqTax = 2; 
    uint8 private _previousLiqTax = _liqTax;
    uint8 private _devTax = 4; 
    uint8 private _previousDevTax = _devTax;
    uint8 private _buyBack = 3;
    uint8 private _previousBuyBack = _buyBack;
    uint8 private _liqDiv = _liqTax + _devTax + _buyBack + _burnTax;
    uint256 private burnTokens;
    uint256 private MarketingTokens;
    uint256 private LiquidityTokens;
    uint256 private BuyBackTokens;
    IUniswapV2Router02 private pcsV2Router;
    address private pcsV2Pair;
    address payable private feeWallet;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private coolDownEnabled = false;
    bool private _firstTrans = true;
    bool private _limitBuys = false;
    bool private _clearClog = false;
    bool private _maxWalletOn = false;
    uint256 private numTokensSellToAddToLiquidity;
    uint256 private buyBackUpperLimit = 1 * 10**18;
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event updateMxAmt(uint256 mxAmt);
    event BoughtEarly(address indexed sniper);
    event RemovedSniper(address indexed notsnipersupposedly);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        feeWallet = payable(0xdfe3ad0F184F0A8B833974E559626396ba914946);
        numTokensSellToAddToLiquidity = _tTotal.mul(1).div(1000);
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _maxWalletExclude[address(this)] = true;
        _maxWalletExclude[_msgSender()] = true;
        _maxWalletExclude[address(dead)] = true;
        addBot(0x41B0320bEb1563A048e2431c8C1cC155A0DFA967);
        addBot(0x91B305F0890Fd0534B66D8d479da6529C35A3eeC);

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    function name() public pure override returns (string memory) {
        return _name;
    }
    function symbol() public pure override returns (string memory) {
        return _tick;
    }
    function decimals() public pure override returns (uint8) {
        return _deci;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        coolDownEnabled = onoff;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    receive() external payable {}
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    function _getValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256,uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }
    function _getTValues(uint256 tAmount)private view returns (uint256,uint256,uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }
    function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 currentRate) private pure returns (uint256,uint256,uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    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 {
        burnTokens += tLiquidity * _burnTax / _liqDiv;
        MarketingTokens += tLiquidity * _devTax / _liqDiv;
		LiquidityTokens += tLiquidity * _liqTax / _liqDiv;
        BuyBackTokens += tLiquidity * _buyBack / _liqDiv;
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_refTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devTax + _burnTax + _liqTax + _buyBack).div(10**2);
    }
    function removeAllFee() private {
        if (_refTax == 0 && _liqTax == 0 && _devTax == 0 && _burnTax == 0 && _buyBack == 0) return;

        _previousRefTax = _refTax;
        _previousLiqTax = _liqTax;
        _previousDevTax = _devTax;
        _previouseBurnTax = _burnTax;
        _previousBuyBack = _buyBack;

        _refTax = 0;
        _liqTax = 0;
        _devTax = 0;
        _burnTax = 0;
        _buyBack = 0;
    }
    function restoreAllFee() private {
        _refTax = _previousRefTax;
        _liqTax = _previousLiqTax;
        _devTax = _previousDevTax;
        _burnTax = _previouseBurnTax;
        _buyBack = _previousBuyBack;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _transfer(address from,address to,uint256 amount) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
		require(!_isBot[from]);
		require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over.  DM a Mod.");
		if (_maxWalletOn == true && ! _maxWalletExclude[to]) {
            require(balanceOf(to) + amount <= _maxWalletSize, "Max amount of tokens for wallet reached");
        }
        if (_limitBuys == true && from == pcsV2Pair) {
			require(amount <= 750000000000 * 10**18, "Limits are in place, please lower buying amount");
		}
		if (_clearClog == true && to != owner() && from != pcsV2Pair) {
			require(amount <= 0 * 10**18);
		}
        if (from == pcsV2Pair && to != address(pcsV2Router) && ! _isExcludedFromFee[to] && coolDownEnabled) {
                require(amount <= _maxTxAmount);
                require(_setCoolDown[to] < block.timestamp);
                _setCoolDown[to] = block.timestamp + (30 seconds);
            }
        if(_firstTrans == true) {
            IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            pcsV2Router = _pcsV2Router;
            pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).getPair(address(this), _pcsV2Router.WETH());
            tradingActiveBlock = block.number;
            earlyBuyPenaltyEnd = block.timestamp + 72 hours;
            _maxWalletExclude[address(pcsV2Pair)] = true;
            _maxWalletExclude[address(pcsV2Router)] = true;
            _limitBuys = true;
            _firstTrans = false;
            _maxWalletOn = true;
        }
		if(from != owner() && to != pcsV2Pair && block.number == tradingActiveBlock){
			boughtEarly[to] = true;
            emit BoughtEarly(to);
		}
        uint256 contractTokenBalance = balanceOf(address(this));
        if (!inSwapAndLiquify && to == pcsV2Pair && swapAndLiquifyEnabled) {
            if (contractTokenBalance >= numTokensSellToAddToLiquidity) {
				swapBackLiq();
            }
        }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
		if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _refTax = _refTax * 5;
                    _liqTax = _liqTax * 5;
                    _devTax = _devTax * 5;
                    _buyBack = _buyBack * 5;
                }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function buyBackTokens(uint256 amount) public onlyOwner lockTheSwap {
        if (amount <= BuyBackTokens) {
            swapETHForTokens(amount);
        }
    }
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = pcsV2Router.WETH();
        path[1] = address(this);

        // make the swap
        pcsV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            dead, // Burn address
            block.timestamp.add(300)
        );
    }
	function addBot(address _user) public onlyOwner {
        require(_user != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        require(!_isBot[_user], "user already blacklisted");
        _isBot[_user] = true;
    }
	function removeBot(address _user) public onlyOwner {
        require(_isBot[_user], "user already whitelisted");
        _isBot[_user] = false;
    }
	function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }
	function swapBackNoLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + BuyBackTokens;
        uint256 amountToSwapForETH = contractBalance;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        MarketingTokens = 0;
        BuyBackTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        if(address(this).balance.sub(initialETHBalance) > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance.sub(initialETHBalance)}("");
        }
    }
    //  FOR USE IF TAKING LIQUIDITY AND ADDING BACK TO POOL
	function swapBackLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + LiquidityTokens + BuyBackTokens;
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = LiquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        LiquidityTokens = 0;
        MarketingTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        if(address(this).balance > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp.add(300)
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp.add(300)
        );
    }
    // Initiate true from deployment
    function Initiate() external onlyOwner {
        _firstTrans = true;
    }
    function TaxSwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function TaxSwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function LimitBuysOn() external onlyOwner {
        _limitBuys = true;
    }
    function LimitBuysOff() external onlyOwner {
        _limitBuys = false;
    }
    function turnMaxWalletOn() external onlyOwner {
        _maxWalletOn = true;
    }
    function turnMaxWalletOff() external onlyOwner {
        _maxWalletOn = false;
    }
    // FOR USE TO CLEAR IF CLOGS OCCUR IN THE ROUTER
    // STOPS ALL TRANSACTIONS SO OWNER CAN TRANSFER 1 TOKEN TO CLEAR CLOG
    function ClearClog() external onlyOwner {
        _clearClog = true;
    }
    function ClearClogReset() external onlyOwner {
        _clearClog = false;
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mxAmt","type":"uint256"}],"name":"updateMxAmt","type":"event"},{"inputs":[],"name":"ClearClog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClearClogReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Initiate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"turnMaxWalletOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnMaxWalletOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b03191661dead1790556000600b55620000396d04ee2d6d415b85acef810000000060001962000545565b62000047906000196200052b565b600e556d04ee2d6d415b85acef8100000000600f556c25dd85d670d35ec9bec00000006011556012805460ff60481b1961ffff60381b1961ffff60281b1964ffffffffff19841660ff6201000062ffffff19909616869004811663010000000260ff60201b19169190911764020000000017918216640100000000928390048216650100000000000260ff60301b19161766040000000000001792831666010000000000009384900482166701000000000000000260ff60401b191617680300000000000000001793841668010000000000000000948590048216690100000000000000000002179586905593850484169492830484169362000155939283048116929190910416620004ca565b620001619190620004ca565b6200016d9190620004ca565b6012805460ff929092166a01000000000000000000000260ff60501b199092169190911790556019805465ffffffffffff60a81b19166201000160a81b179055670de0b6b3a7640000601b55348015620001c657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e5433600090815260026020908152604090912091909155601980546001600160a01b03191673dfe3ad0f184f0a8b833974e559626396ba9149461790556200028b906103e89062000277906d04ee2d6d415b85acef8100000000906001906200106f6200037f821b17901c565b6200039460201b6200107b1790919060201c565b601a553360008181526006602090815260408083208054600160ff199182168117909255308552828520805482168317905560089093528184208054841682179055938352808320805483168517905583546001600160a01b0316835290912080549091169091179055620003147341b0320beb1563a048e2431c8c1cc155a0dfa967620003a2565b620003337391b305f0890fd0534b66d8d479da6529c35a3eec620003a2565b6040516d04ee2d6d415b85acef8100000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000588565b60006200038d828462000509565b9392505050565b60006200038d8284620004f2565b6000546001600160a01b03163314620004105760405162461bcd60e51b815260206004820152602560248201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156200043b57600080fd5b6001600160a01b03811660009081526009602052604090205460ff1615620004a65760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015260640162000407565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600060ff821660ff84168060ff03821115620004ea57620004ea6200055c565b019392505050565b60008262000504576200050462000572565b500490565b60008160001904831182151516156200052657620005266200055c565b500290565b6000828210156200054057620005406200055c565b500390565b60008262000557576200055762000572565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612f9280620005986000396000f3fe60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b14610670578063f5648a4f14610690578063f5eb223d146106a5578063fc155d1d146106ba578063ffecf516146106da57600080fd5b8063a457c2d7146105bf578063a9059cbb146105df578063d3dbc861146105ff578063dd62ed3e14610614578063ee40166e1461065a57600080fd5b806380f0f48b116100f257806380f0f48b146104ea57806385ecfd28146104ff57806388f820201461052f5780638da5cb5b1461056857806395d89b411461059057600080fd5b80636e86ea8b1461048b57806370a08231146104a0578063715018a6146104c05780637b7141e4146104d557600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c91461040c5780635c0fdd4c1461042c5780635fecd92614610441578063620b4bfc146104615780636465de5d1461047657600080fd5b8063437823ec146103735780634549b039146103935780635342acb4146103b35780635932ead1146103ec57600080fd5b806323b872dd116101ed57806323b872dd146102e05780632d83811914610300578063313ce56714610320578063395093511461033c5780633f97d3f41461035c57600080fd5b806306fdde031461022a578063095ea7b31461026f57806318160ddd1461029f5780631fc851bd146102ca57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060408051808201909152600a8152694b49544f524120494e5560b01b60208201525b6040516102669190612d1c565b60405180910390f35b34801561027b57600080fd5b5061028f61028a366004612be9565b6106fa565b6040519015158152602001610266565b3480156102ab57600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610266565b3480156102d657600080fd5b506102bc600c5481565b3480156102ec57600080fd5b5061028f6102fb366004612ba8565b610711565b34801561030c57600080fd5b506102bc61031b366004612c30565b61077a565b34801561032c57600080fd5b5060405160128152602001610266565b34801561034857600080fd5b5061028f610357366004612be9565b6107f0565b34801561036857600080fd5b50610371610826565b005b34801561037f57600080fd5b5061037161038e366004612b35565b610865565b34801561039f57600080fd5b506102bc6103ae366004612c49565b6108b3565b3480156103bf57600080fd5b5061028f6103ce366004612b35565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103f857600080fd5b50610371610407366004612c15565b61094c565b34801561041857600080fd5b50610371610427366004612b35565b610994565b34801561043857600080fd5b50610371610a07565b34801561044d57600080fd5b5061037161045c366004612b35565b610a40565b34801561046d57600080fd5b50610371610af3565b34801561048257600080fd5b50610371610b2c565b34801561049757600080fd5b50610371610b65565b3480156104ac57600080fd5b506102bc6104bb366004612b35565b610ba4565b3480156104cc57600080fd5b50610371610c03565b3480156104e157600080fd5b50610371610c77565b3480156104f657600080fd5b50610371610cb0565b34801561050b57600080fd5b5061028f61051a366004612b35565b600a6020526000908152604090205460ff1681565b34801561053b57600080fd5b5061028f61054a366004612b35565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561057457600080fd5b506000546040516001600160a01b039091168152602001610266565b34801561059c57600080fd5b506040805180820190915260068152654b49544f524160d01b6020820152610259565b3480156105cb57600080fd5b5061028f6105da366004612be9565b610cef565b3480156105eb57600080fd5b5061028f6105fa366004612be9565b610d3e565b34801561060b57600080fd5b50610371610d4b565b34801561062057600080fd5b506102bc61062f366004612b6f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561066657600080fd5b506102bc600b5481565b34801561067c57600080fd5b5061037161068b366004612b35565b610d8a565b34801561069c57600080fd5b50610371610e79565b3480156106b157600080fd5b50610371610ef0565b3480156106c657600080fd5b506103716106d5366004612c30565b610f2f565b3480156106e657600080fd5b506103716106f5366004612b35565b610f8e565b6000610707338484611087565b5060015b92915050565b600061071e848484611194565b610770843361076b85604051806060016040528060288152602001612f10602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a63565b611087565b5060019392505050565b6000600e548211156107d35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107dd611a8f565b90506107e9838261107b565b9392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161070791859061076b9086611ab2565b6000546001600160a01b031633146108505760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461088f5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef81000000008311156109135760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107ca565b8161093257600061092384611abe565b5093955061070b945050505050565b600061093d84611abe565b5092955061070b945050505050565b6000546001600160a01b031633146109765760405162461bcd60e51b81526004016107ca90612d71565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109be5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610a315760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a6a5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b03811660009081526009602052604090205460ff16610ad25760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107ca565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610b1d5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b565760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610be157506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461070b9061077a565b6000546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107ca90612d71565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610ca15760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610cda5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c81b1916600160c81b179055565b6000610707338461076b85604051806060016040528060258152602001612f38602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a63565b6000610707338484611194565b6000546001600160a01b03163314610d755760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610db45760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b038116610e1e5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea35760405162461bcd60e51b81526004016107ca90612d71565b604051600090339047908381818185875af1925050503d8060008114610ee5576040519150601f19603f3d011682016040523d82523d6000602084013e610eea565b606091505b50505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f595760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a01b1916600160a01b1790556016548111610f7e57610f7e81611b0d565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610fb85760405162461bcd60e51b81526004016107ca90612d71565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fe257600080fd5b6001600160a01b03811660009081526009602052604090205460ff161561104b5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107ca565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107e98284612e51565b60006107e98284612e2f565b6001600160a01b0383166110dd5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107ca565b6001600160a01b0382166111335760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107ca565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111f45760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016107ca565b6001600160a01b03821661124a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016107ca565b600081116112ac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ca565b6001600160a01b03831660009081526009602052604090205460ff16156112d257600080fd5b6001600160a01b0383166000908152600a602052604090205460ff1615806112fc575042600c5411155b6113945760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a4016107ca565b601954600160d01b900460ff16151560011480156113cb57506001600160a01b03821660009081526008602052604090205460ff16155b1561144557601154816113dd84610ba4565b6113e79190612df2565b11156114455760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b60648201526084016107ca565b601954600160c01b900460ff161515600114801561147057506018546001600160a01b038481169116145b156114ea576c097761759c34d7b26fb00000008111156114ea5760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b60648201526084016107ca565b601954600160c81b900460ff161515600114801561151657506000546001600160a01b03838116911614155b801561153057506018546001600160a01b03848116911614155b1561154057801561154057600080fd5b6018546001600160a01b03848116911614801561156b57506017546001600160a01b03838116911614155b801561159057506001600160a01b03821660009081526006602052604090205460ff16155b80156115a55750601954600160b01b900460ff165b1561160257600f548111156115b957600080fd5b6001600160a01b03821660009081526005602052604090205442116115dd57600080fd5b6115e842601e612df2565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561183b57601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561167957600080fd5b505afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190612b52565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f957600080fd5b505afa15801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190612b52565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190612b52565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117e0426203f480612df2565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061186757506018546001600160a01b03838116911614155b80156118745750600b5443145b156118c3576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006118ce30610ba4565b601954909150600160a01b900460ff161580156118f857506018546001600160a01b038481169116145b801561190d5750601954600160a81b900460ff165b1561192357601a54811061192357611923611c80565b6001600160a01b03841660009081526006602052604090205460019060ff168061196557506001600160a01b03841660009081526006602052604090205460ff165b1561196e575060005b6001600160a01b0385166000908152600a602052604090205460ff168015611997575042600c54115b15611a50576012546119ad9060ff166005612e70565b6012805460ff191660ff92831617908190556119d391600160201b909104166005612e70565b6012805464ff000000001916600160201b60ff938416021790819055611a0391600160301b909104166005612e70565b6012805466ff0000000000001916600160301b60ff938416021790819055611a3591600160401b909104166005612e70565b601260086101000a81548160ff021916908360ff1602179055505b611a5c85858584611e8b565b5050505050565b60008184841115611a875760405162461bcd60e51b81526004016107ca9190612d1c565b505050900390565b6000806000611a9c612097565b9092509050611aab828261107b565b9250505090565b60006107e98284612df2565b6000806000806000806000806000611ad58a612247565b9250925092506000806000611af38d8686611aee611a8f565b612289565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b7257600080fd5b505afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612b52565b81600081518110611bbd57611bbd612ee1565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bf157611bf1612ee1565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611c2b4261012c611ab2565b6040518663ffffffff1660e01b8152600401611c4a9493929190612ce7565b6000604051808303818588803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611cc757600154601354611cc19130916001600160a01b0390911690611194565b60006013555b6000611cd230610ba4565b90506000601654601554601454611ce99190612df2565b611cf39190612df2565b90506000611d0d600260155461107b90919063ffffffff16565b90506000611d1b84836122d9565b905047611d27826122e5565b6000611d3347836122d9565b90506000611d5686611d506014548561106f90919063ffffffff16565b9061107b565b90506000611d6483836122d9565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611dc1576040519150601f19603f3d011682016040523d82523d6000602084013e611dc6565b606091505b50509050611dd48783612457565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e73576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e68576040519150601f19603f3d011682016040523d82523d6000602084013e611e6d565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611e9857611e98612540565b6001600160a01b03841660009081526007602052604090205460ff168015611ed957506001600160a01b03831660009081526007602052604090205460ff16155b15611eee57611ee984848461266a565b611fec565b6001600160a01b03841660009081526007602052604090205460ff16158015611f2f57506001600160a01b03831660009081526007602052604090205460ff165b15611f3f57611ee9848484612790565b6001600160a01b03841660009081526007602052604090205460ff16158015611f8157506001600160a01b03831660009081526007602052604090205460ff16155b15611f9157611ee9848484612839565b6001600160a01b03841660009081526007602052604090205460ff168015611fd157506001600160a01b03831660009081526007602052604090205460ff165b15611fe157611ee984848461287d565b611fec848484612839565b80610eea576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610eea565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d54811015612200578260026000600d84815481106120d2576120d2612ee1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061213d57508160036000600d848154811061211657612116612ee1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561215e575050600e54936d04ee2d6d415b85acef81000000009350915050565b6121a460026000600d848154811061217857612178612ee1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b92506121ec60036000600d84815481106121c0576121c0612ee1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b9150806121f881612eb0565b9150506120b0565b50600e5461221c906d04ee2d6d415b85acef810000000061107b565b82101561223e575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b600080600080612256856128f0565b905060006122638661290b565b9050600061227b8261227589866122d9565b906122d9565b979296509094509092505050565b6000808080612298888661106f565b905060006122a6888761106f565b905060006122b4888861106f565b905060006122c68261227586866122d9565b939b939a50919850919650505050505050565b60006107e98284612e99565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061231a5761231a612ee1565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b52565b816001815181106123b9576123b9612ee1565b6001600160a01b0392831660209182029290920101526017546123df9130911684611087565b6017546001600160a01b031663791ac94783600084306124014261012c611ab2565b6040518663ffffffff1660e01b8152600401612421959493929190612db6565b600060405180830381600087803b15801561243b57600080fd5b505af115801561244f573d6000803e3d6000fd5b505050505050565b60175461246f9030906001600160a01b031684611087565b6017546001546001600160a01b039182169163f305d7199184913091879160009182911661249f4261012c611ab2565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561250757600080fd5b505af115801561251b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a5c9190612c75565b60125460ff1615801561255d5750601254600160201b900460ff16155b80156125735750601254600160301b900460ff16155b8015612588575060125462010000900460ff16155b801561259e5750601254600160401b900460ff16155b156125a557565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061267c87611abe565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126ae90886122d9565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126dd90876122d9565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461270c9086611ab2565b6001600160a01b03891660009081526002602052604090205561272e8161296b565b6127388483612afc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161277d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806127a287611abe565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506127d490876122d9565b6001600160a01b03808b16600090815260026020908152604080832094909455918b1681526003909152205461280a9084611ab2565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461270c9086611ab2565b60008060008060008061284b87611abe565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126dd90876122d9565b60008060008060008061288f87611abe565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128c190886122d9565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546127d490876122d9565b60125460009061070b90606490611d5090859060ff1661106f565b60125460009061070b90606490611d509060ff600160401b8204811691600160201b810482169161294d91620100008104821691600160301b90910416612e0a565b6129579190612e0a565b6129619190612e0a565b859060ff1661106f565b60125460ff600160501b820481169161298c91620100009091041683612e51565b6129969190612e2f565b601360008282546129a79190612df2565b909155505060125460ff600160501b82048116916129ce91600160301b9091041683612e51565b6129d89190612e2f565b601460008282546129e99190612df2565b909155505060125460ff600160501b8204811691612a1091600160201b9091041683612e51565b612a1a9190612e2f565b60156000828254612a2b9190612df2565b909155505060125460ff600160501b8204811691612a5291600160401b9091041683612e51565b612a5c9190612e2f565b60166000828254612a6d9190612df2565b9091555060009050612a7d611a8f565b90506000612a8b838361106f565b30600090815260026020526040902054909150612aa89082611ab2565b3060009081526002602090815260408083209390935560079052205460ff1615612af75730600090815260036020526040902054612ae69084611ab2565b306000908152600360205260409020555b505050565b600e54612b0990836122d9565b600e55601054612b199082611ab2565b6010555050565b80358015158114612b3057600080fd5b919050565b600060208284031215612b4757600080fd5b81356107e981612ef7565b600060208284031215612b6457600080fd5b81516107e981612ef7565b60008060408385031215612b8257600080fd5b8235612b8d81612ef7565b91506020830135612b9d81612ef7565b809150509250929050565b600080600060608486031215612bbd57600080fd5b8335612bc881612ef7565b92506020840135612bd881612ef7565b929592945050506040919091013590565b60008060408385031215612bfc57600080fd5b8235612c0781612ef7565b946020939093013593505050565b600060208284031215612c2757600080fd5b6107e982612b20565b600060208284031215612c4257600080fd5b5035919050565b60008060408385031215612c5c57600080fd5b82359150612c6c60208401612b20565b90509250929050565b600080600060608486031215612c8a57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612cdc5781516001600160a01b031687529582019590820190600101612cb7565b509495945050505050565b848152608060208201526000612d006080830186612ca3565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d4957858101830151858201604001528201612d2d565b81811115612d5b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612dd560a0830186612ca3565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612e0557612e05612ecb565b500190565b600060ff821660ff84168060ff03821115612e2757612e27612ecb565b019392505050565b600082612e4c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e6b57612e6b612ecb565b500290565b600060ff821660ff84168160ff0481118215151615612e9157612e91612ecb565b029392505050565b600082821015612eab57612eab612ecb565b500390565b6000600019821415612ec457612ec4612ecb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612f0c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206a7efa61e41efaf95af43017122c7e031c69c8befba47e2fa172054be5d09db364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b14610670578063f5648a4f14610690578063f5eb223d146106a5578063fc155d1d146106ba578063ffecf516146106da57600080fd5b8063a457c2d7146105bf578063a9059cbb146105df578063d3dbc861146105ff578063dd62ed3e14610614578063ee40166e1461065a57600080fd5b806380f0f48b116100f257806380f0f48b146104ea57806385ecfd28146104ff57806388f820201461052f5780638da5cb5b1461056857806395d89b411461059057600080fd5b80636e86ea8b1461048b57806370a08231146104a0578063715018a6146104c05780637b7141e4146104d557600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c91461040c5780635c0fdd4c1461042c5780635fecd92614610441578063620b4bfc146104615780636465de5d1461047657600080fd5b8063437823ec146103735780634549b039146103935780635342acb4146103b35780635932ead1146103ec57600080fd5b806323b872dd116101ed57806323b872dd146102e05780632d83811914610300578063313ce56714610320578063395093511461033c5780633f97d3f41461035c57600080fd5b806306fdde031461022a578063095ea7b31461026f57806318160ddd1461029f5780631fc851bd146102ca57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5060408051808201909152600a8152694b49544f524120494e5560b01b60208201525b6040516102669190612d1c565b60405180910390f35b34801561027b57600080fd5b5061028f61028a366004612be9565b6106fa565b6040519015158152602001610266565b3480156102ab57600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610266565b3480156102d657600080fd5b506102bc600c5481565b3480156102ec57600080fd5b5061028f6102fb366004612ba8565b610711565b34801561030c57600080fd5b506102bc61031b366004612c30565b61077a565b34801561032c57600080fd5b5060405160128152602001610266565b34801561034857600080fd5b5061028f610357366004612be9565b6107f0565b34801561036857600080fd5b50610371610826565b005b34801561037f57600080fd5b5061037161038e366004612b35565b610865565b34801561039f57600080fd5b506102bc6103ae366004612c49565b6108b3565b3480156103bf57600080fd5b5061028f6103ce366004612b35565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103f857600080fd5b50610371610407366004612c15565b61094c565b34801561041857600080fd5b50610371610427366004612b35565b610994565b34801561043857600080fd5b50610371610a07565b34801561044d57600080fd5b5061037161045c366004612b35565b610a40565b34801561046d57600080fd5b50610371610af3565b34801561048257600080fd5b50610371610b2c565b34801561049757600080fd5b50610371610b65565b3480156104ac57600080fd5b506102bc6104bb366004612b35565b610ba4565b3480156104cc57600080fd5b50610371610c03565b3480156104e157600080fd5b50610371610c77565b3480156104f657600080fd5b50610371610cb0565b34801561050b57600080fd5b5061028f61051a366004612b35565b600a6020526000908152604090205460ff1681565b34801561053b57600080fd5b5061028f61054a366004612b35565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561057457600080fd5b506000546040516001600160a01b039091168152602001610266565b34801561059c57600080fd5b506040805180820190915260068152654b49544f524160d01b6020820152610259565b3480156105cb57600080fd5b5061028f6105da366004612be9565b610cef565b3480156105eb57600080fd5b5061028f6105fa366004612be9565b610d3e565b34801561060b57600080fd5b50610371610d4b565b34801561062057600080fd5b506102bc61062f366004612b6f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561066657600080fd5b506102bc600b5481565b34801561067c57600080fd5b5061037161068b366004612b35565b610d8a565b34801561069c57600080fd5b50610371610e79565b3480156106b157600080fd5b50610371610ef0565b3480156106c657600080fd5b506103716106d5366004612c30565b610f2f565b3480156106e657600080fd5b506103716106f5366004612b35565b610f8e565b6000610707338484611087565b5060015b92915050565b600061071e848484611194565b610770843361076b85604051806060016040528060288152602001612f10602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a63565b611087565b5060019392505050565b6000600e548211156107d35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107dd611a8f565b90506107e9838261107b565b9392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161070791859061076b9086611ab2565b6000546001600160a01b031633146108505760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461088f5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef81000000008311156109135760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107ca565b8161093257600061092384611abe565b5093955061070b945050505050565b600061093d84611abe565b5092955061070b945050505050565b6000546001600160a01b031633146109765760405162461bcd60e51b81526004016107ca90612d71565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109be5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b03163314610a315760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a6a5760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b03811660009081526009602052604090205460ff16610ad25760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107ca565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610b1d5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b565760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610be157506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461070b9061077a565b6000546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107ca90612d71565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610ca15760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610cda5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60c81b1916600160c81b179055565b6000610707338461076b85604051806060016040528060258152602001612f38602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a63565b6000610707338484611194565b6000546001600160a01b03163314610d755760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610db45760405162461bcd60e51b81526004016107ca90612d71565b6001600160a01b038116610e1e5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea35760405162461bcd60e51b81526004016107ca90612d71565b604051600090339047908381818185875af1925050503d8060008114610ee5576040519150601f19603f3d011682016040523d82523d6000602084013e610eea565b606091505b50505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f595760405162461bcd60e51b81526004016107ca90612d71565b6019805460ff60a01b1916600160a01b1790556016548111610f7e57610f7e81611b0d565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610fb85760405162461bcd60e51b81526004016107ca90612d71565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fe257600080fd5b6001600160a01b03811660009081526009602052604090205460ff161561104b5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107ca565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107e98284612e51565b60006107e98284612e2f565b6001600160a01b0383166110dd5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107ca565b6001600160a01b0382166111335760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107ca565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111f45760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b60648201526084016107ca565b6001600160a01b03821661124a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f20616464726573730060448201526064016107ca565b600081116112ac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ca565b6001600160a01b03831660009081526009602052604090205460ff16156112d257600080fd5b6001600160a01b0383166000908152600a602052604090205460ff1615806112fc575042600c5411155b6113945760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a4016107ca565b601954600160d01b900460ff16151560011480156113cb57506001600160a01b03821660009081526008602052604090205460ff16155b1561144557601154816113dd84610ba4565b6113e79190612df2565b11156114455760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b60648201526084016107ca565b601954600160c01b900460ff161515600114801561147057506018546001600160a01b038481169116145b156114ea576c097761759c34d7b26fb00000008111156114ea5760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b60648201526084016107ca565b601954600160c81b900460ff161515600114801561151657506000546001600160a01b03838116911614155b801561153057506018546001600160a01b03848116911614155b1561154057801561154057600080fd5b6018546001600160a01b03848116911614801561156b57506017546001600160a01b03838116911614155b801561159057506001600160a01b03821660009081526006602052604090205460ff16155b80156115a55750601954600160b01b900460ff165b1561160257600f548111156115b957600080fd5b6001600160a01b03821660009081526005602052604090205442116115dd57600080fd5b6115e842601e612df2565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561183b57601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561167957600080fd5b505afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190612b52565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f957600080fd5b505afa15801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190612b52565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190612b52565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117e0426203f480612df2565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061186757506018546001600160a01b03838116911614155b80156118745750600b5443145b156118c3576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60006118ce30610ba4565b601954909150600160a01b900460ff161580156118f857506018546001600160a01b038481169116145b801561190d5750601954600160a81b900460ff165b1561192357601a54811061192357611923611c80565b6001600160a01b03841660009081526006602052604090205460019060ff168061196557506001600160a01b03841660009081526006602052604090205460ff165b1561196e575060005b6001600160a01b0385166000908152600a602052604090205460ff168015611997575042600c54115b15611a50576012546119ad9060ff166005612e70565b6012805460ff191660ff92831617908190556119d391600160201b909104166005612e70565b6012805464ff000000001916600160201b60ff938416021790819055611a0391600160301b909104166005612e70565b6012805466ff0000000000001916600160301b60ff938416021790819055611a3591600160401b909104166005612e70565b601260086101000a81548160ff021916908360ff1602179055505b611a5c85858584611e8b565b5050505050565b60008184841115611a875760405162461bcd60e51b81526004016107ca9190612d1c565b505050900390565b6000806000611a9c612097565b9092509050611aab828261107b565b9250505090565b60006107e98284612df2565b6000806000806000806000806000611ad58a612247565b9250925092506000806000611af38d8686611aee611a8f565b612289565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b7257600080fd5b505afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612b52565b81600081518110611bbd57611bbd612ee1565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bf157611bf1612ee1565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611c2b4261012c611ab2565b6040518663ffffffff1660e01b8152600401611c4a9493929190612ce7565b6000604051808303818588803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611cc757600154601354611cc19130916001600160a01b0390911690611194565b60006013555b6000611cd230610ba4565b90506000601654601554601454611ce99190612df2565b611cf39190612df2565b90506000611d0d600260155461107b90919063ffffffff16565b90506000611d1b84836122d9565b905047611d27826122e5565b6000611d3347836122d9565b90506000611d5686611d506014548561106f90919063ffffffff16565b9061107b565b90506000611d6483836122d9565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611dc1576040519150601f19603f3d011682016040523d82523d6000602084013e611dc6565b606091505b50509050611dd48783612457565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e73576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e68576040519150601f19603f3d011682016040523d82523d6000602084013e611e6d565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611e9857611e98612540565b6001600160a01b03841660009081526007602052604090205460ff168015611ed957506001600160a01b03831660009081526007602052604090205460ff16155b15611eee57611ee984848461266a565b611fec565b6001600160a01b03841660009081526007602052604090205460ff16158015611f2f57506001600160a01b03831660009081526007602052604090205460ff165b15611f3f57611ee9848484612790565b6001600160a01b03841660009081526007602052604090205460ff16158015611f8157506001600160a01b03831660009081526007602052604090205460ff16155b15611f9157611ee9848484612839565b6001600160a01b03841660009081526007602052604090205460ff168015611fd157506001600160a01b03831660009081526007602052604090205460ff165b15611fe157611ee984848461287d565b611fec848484612839565b80610eea576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610eea565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d54811015612200578260026000600d84815481106120d2576120d2612ee1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061213d57508160036000600d848154811061211657612116612ee1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561215e575050600e54936d04ee2d6d415b85acef81000000009350915050565b6121a460026000600d848154811061217857612178612ee1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b92506121ec60036000600d84815481106121c0576121c0612ee1565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b9150806121f881612eb0565b9150506120b0565b50600e5461221c906d04ee2d6d415b85acef810000000061107b565b82101561223e575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b600080600080612256856128f0565b905060006122638661290b565b9050600061227b8261227589866122d9565b906122d9565b979296509094509092505050565b6000808080612298888661106f565b905060006122a6888761106f565b905060006122b4888861106f565b905060006122c68261227586866122d9565b939b939a50919850919650505050505050565b60006107e98284612e99565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061231a5761231a612ee1565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b52565b816001815181106123b9576123b9612ee1565b6001600160a01b0392831660209182029290920101526017546123df9130911684611087565b6017546001600160a01b031663791ac94783600084306124014261012c611ab2565b6040518663ffffffff1660e01b8152600401612421959493929190612db6565b600060405180830381600087803b15801561243b57600080fd5b505af115801561244f573d6000803e3d6000fd5b505050505050565b60175461246f9030906001600160a01b031684611087565b6017546001546001600160a01b039182169163f305d7199184913091879160009182911661249f4261012c611ab2565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561250757600080fd5b505af115801561251b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a5c9190612c75565b60125460ff1615801561255d5750601254600160201b900460ff16155b80156125735750601254600160301b900460ff16155b8015612588575060125462010000900460ff16155b801561259e5750601254600160401b900460ff16155b156125a557565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061267c87611abe565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506126ae90886122d9565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126dd90876122d9565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461270c9086611ab2565b6001600160a01b03891660009081526002602052604090205561272e8161296b565b6127388483612afc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161277d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806127a287611abe565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506127d490876122d9565b6001600160a01b03808b16600090815260026020908152604080832094909455918b1681526003909152205461280a9084611ab2565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461270c9086611ab2565b60008060008060008061284b87611abe565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126dd90876122d9565b60008060008060008061288f87611abe565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128c190886122d9565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546127d490876122d9565b60125460009061070b90606490611d5090859060ff1661106f565b60125460009061070b90606490611d509060ff600160401b8204811691600160201b810482169161294d91620100008104821691600160301b90910416612e0a565b6129579190612e0a565b6129619190612e0a565b859060ff1661106f565b60125460ff600160501b820481169161298c91620100009091041683612e51565b6129969190612e2f565b601360008282546129a79190612df2565b909155505060125460ff600160501b82048116916129ce91600160301b9091041683612e51565b6129d89190612e2f565b601460008282546129e99190612df2565b909155505060125460ff600160501b8204811691612a1091600160201b9091041683612e51565b612a1a9190612e2f565b60156000828254612a2b9190612df2565b909155505060125460ff600160501b8204811691612a5291600160401b9091041683612e51565b612a5c9190612e2f565b60166000828254612a6d9190612df2565b9091555060009050612a7d611a8f565b90506000612a8b838361106f565b30600090815260026020526040902054909150612aa89082611ab2565b3060009081526002602090815260408083209390935560079052205460ff1615612af75730600090815260036020526040902054612ae69084611ab2565b306000908152600360205260409020555b505050565b600e54612b0990836122d9565b600e55601054612b199082611ab2565b6010555050565b80358015158114612b3057600080fd5b919050565b600060208284031215612b4757600080fd5b81356107e981612ef7565b600060208284031215612b6457600080fd5b81516107e981612ef7565b60008060408385031215612b8257600080fd5b8235612b8d81612ef7565b91506020830135612b9d81612ef7565b809150509250929050565b600080600060608486031215612bbd57600080fd5b8335612bc881612ef7565b92506020840135612bd881612ef7565b929592945050506040919091013590565b60008060408385031215612bfc57600080fd5b8235612c0781612ef7565b946020939093013593505050565b600060208284031215612c2757600080fd5b6107e982612b20565b600060208284031215612c4257600080fd5b5035919050565b60008060408385031215612c5c57600080fd5b82359150612c6c60208401612b20565b90509250929050565b600080600060608486031215612c8a57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612cdc5781516001600160a01b031687529582019590820190600101612cb7565b509495945050505050565b848152608060208201526000612d006080830186612ca3565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d4957858101830151858201604001528201612d2d565b81811115612d5b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612dd560a0830186612ca3565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612e0557612e05612ecb565b500190565b600060ff821660ff84168060ff03821115612e2757612e27612ecb565b019392505050565b600082612e4c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e6b57612e6b612ecb565b500290565b600060ff821660ff84168160ff0481118215151615612e9157612e91612ecb565b029392505050565b600082821015612eab57612eab612ecb565b500390565b6000600019821415612ec457612ec4612ecb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612f0c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206a7efa61e41efaf95af43017122c7e031c69c8befba47e2fa172054be5d09db364736f6c63430008070033

Deployed Bytecode Sourcemap

12889:22847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16307:92;;;;;;;;;;-1:-1:-1;16386:5:0;;;;;;;;;;;;-1:-1:-1;;;16386:5:0;;;;16307:92;;;;;;;:::i;:::-;;;;;;;;17226:161;;;;;;;;;;-1:-1:-1;17226:161:0;;;;;:::i;:::-;;:::i;:::-;;;4765:14:1;;4758:22;4740:41;;4728:2;4713:18;17226:161:0;4600:187:1;16599:95:0;;;;;;;;;;-1:-1:-1;13728:13:0;16599:95;;;11509:25:1;;;11497:2;11482:18;16599:95:0;11363:177:1;13570:33:0;;;;;;;;;;;;;;;;17393:329;;;;;;;;;;-1:-1:-1;17393:329:0;;;;;:::i;:::-;;:::i;18964:241::-;;;;;;;;;;-1:-1:-1;18964:241:0;;;;;:::i;:::-;;:::i;16505:88::-;;;;;;;;;;-1:-1:-1;16505:88:0;;14073:2;12598:36:1;;12586:2;12571:18;16505:88:0;12456:184:1;17728:218:0;;;;;;;;;;-1:-1:-1;17728:218:0;;;;;:::i;:::-;;:::i;30988:78::-;;;;;;;;;;;;;:::i;:::-;;22881:111;;;;;;;;;;-1:-1:-1;22881:111:0;;;;;:::i;:::-;;:::i;18514:444::-;;;;;;;;;;-1:-1:-1;18514:444:0;;;;;:::i;:::-;;:::i;22998:124::-;;;;;;;;;;-1:-1:-1;22998:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23087:27:0;23063:4;23087:27;;;:18;:27;;;;;;;;;22998:124;18405:103;;;;;;;;;;-1:-1:-1;18405:103:0;;;;;:::i;:::-;;:::i;27269:148::-;;;;;;;;;;-1:-1:-1;27269:148:0;;;;;:::i;:::-;;:::i;31248:86::-;;;;;;;;;;;;;:::i;27114:152::-;;;;;;;;;;-1:-1:-1;27114:152:0;;;;;:::i;:::-;;:::i;30889:93::-;;;;;;;;;;;;;:::i;31551:82::-;;;;;;;;;;;;;:::i;30792:91::-;;;;;;;;;;;;;:::i;16700:198::-;;;;;;;;;;-1:-1:-1;16700:198:0;;;;;:::i;:::-;;:::i;744:148::-;;;;;;;;;;;;;:::i;31072:80::-;;;;;;;;;;;;;:::i;31469:76::-;;;;;;;;;;;;;:::i;13479:43::-;;;;;;;;;;-1:-1:-1;13479:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18277:120;;;;;;;;;;-1:-1:-1;18277:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18369:20:0;18345:4;18369:20;;;:11;:20;;;;;;;;;18277:120;516:87;;;;;;;;;;-1:-1:-1;562:7:0;589:6;516:87;;-1:-1:-1;;;;;589:6:0;;;3617:51:1;;3605:2;3590:18;516:87:0;3471:203:1;16405:94:0;;;;;;;;;;-1:-1:-1;16486:5:0;;;;;;;;;;;;-1:-1:-1;;;16486:5:0;;;;16405:94;;17952:319;;;;;;;;;;-1:-1:-1;17952:319:0;;;;;:::i;:::-;;:::i;16904:167::-;;;;;;;;;;-1:-1:-1;16904:167:0;;;;;:::i;:::-;;:::i;30710:76::-;;;;;;;;;;;;;:::i;17077:143::-;;;;;;;;;;-1:-1:-1;17077:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17185:18:0;;;17158:7;17185:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17077:143;13526:37;;;;;;;;;;;;;;;;900:249;;;;;;;;;;-1:-1:-1;900:249:0;;;;;:::i;:::-;;:::i;31639:160::-;;;;;;;;;;;;;:::i;31158:84::-;;;;;;;;;;;;;:::i;26207:166::-;;;;;;;;;;-1:-1:-1;26207:166:0;;;;;:::i;:::-;;:::i;26891:220::-;;;;;;;;;;-1:-1:-1;26891:220:0;;;;;:::i;:::-;;:::i;17226:161::-;17301:4;17318:39;169:10;17341:7;17350:6;17318:8;:39::i;:::-;-1:-1:-1;17375:4:0;17226:161;;;;;:::o;17393:329::-;17489:4;17506:36;17516:6;17524:9;17535:6;17506:9;:36::i;:::-;17553:139;17562:6;169:10;17592:89;17630:6;17592:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17592:19:0;;;;;;:11;:19;;;;;;;;169:10;17592:33;;;;;;;;;;:37;:89::i;:::-;17553:8;:139::i;:::-;-1:-1:-1;17710:4:0;17393:329;;;;;:::o;18964:241::-;19031:7;19070;;19059;:18;;19051:61;;;;-1:-1:-1;;;19051:61:0;;8413:2:1;19051:61:0;;;8395:21:1;8452:2;8432:18;;;8425:30;8491:32;8471:18;;;8464:60;8541:18;;19051:61:0;;;;;;;;;19123:19;19145:10;:8;:10::i;:::-;19123:32;-1:-1:-1;19173:24:0;:7;19123:32;19173:11;:24::i;:::-;19166:31;18964:241;-1:-1:-1;;;18964:241:0:o;17728:218::-;169:10;17816:4;17865:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17865:34:0;;;;;;;;;;17816:4;;17833:83;;17856:7;;17865:50;;17904:10;17865:38;:50::i;30988:78::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31041:10:::1;:17:::0;;-1:-1:-1;;;;31041:17:0::1;-1:-1:-1::0;;;31041:17:0::1;::::0;;30988:78::o;22881:111::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22950:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22950:34:0::1;22980:4;22950:34;::::0;;22881:111::o;18514:444::-;18605:7;13728:13;18633:7;:18;;18625:59;;;;-1:-1:-1;;;18625:59:0;;6470:2:1;18625:59:0;;;6452:21:1;6509:2;6489:18;;;6482:30;6548;6528:18;;;6521:58;6596:18;;18625:59:0;6268:352:1;18625:59:0;18700:17;18695:256;;18735:15;18764:19;18775:7;18764:10;:19::i;:::-;-1:-1:-1;18734:49:0;;-1:-1:-1;18798:14:0;;-1:-1:-1;;;;;18798:14:0;18695:256;18848:23;18883:19;18894:7;18883:10;:19::i;:::-;-1:-1:-1;18845:57:0;;-1:-1:-1;18917:22:0;;-1:-1:-1;;;;;18917:22:0;18405:103;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;18477:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;18477:23:0::1;-1:-1:-1::0;;;;18477:23:0;;::::1;::::0;;;::::1;::::0;;18405:103::o;27269:148::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27343:20:0;::::1;27366:5;27343:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;27343:28:0::1;::::0;;27387:22;::::1;::::0;27366:5;27387:22:::1;27269:148:::0;:::o;31248:86::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31306:12:::1;:20:::0;;-1:-1:-1;;;;31306:20:0::1;::::0;;31248:86::o;27114:152::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27184:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;27176:50;;;::::0;-1:-1:-1;;;27176:50:0;;9125:2:1;27176:50:0::1;::::0;::::1;9107:21:1::0;9164:2;9144:18;;;9137:30;9203:26;9183:18;;;9176:54;9247:18;;27176:50:0::1;8923:348:1::0;27176:50:0::1;-1:-1:-1::0;;;;;27237:13:0::1;27253:5;27237:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;27237:21:0::1;::::0;;27114:152::o;30889:93::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;30945:21:::1;:29:::0;;-1:-1:-1;;;;30945:29:0::1;::::0;;30889:93::o;31551:82::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31607:10:::1;:18:::0;;-1:-1:-1;;;;31607:18:0::1;::::0;;31551:82::o;30792:91::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;30847:21:::1;:28:::0;;-1:-1:-1;;;;30847:28:0::1;-1:-1:-1::0;;;30847:28:0::1;::::0;;30792:91::o;16700:198::-;-1:-1:-1;;;;;16790:20:0;;16766:7;16790:20;;;:11;:20;;;;;;;;16786:49;;;-1:-1:-1;;;;;;16819:16:0;;;;;:7;:16;;;;;;;16700:198::o;16786:49::-;-1:-1:-1;;;;;16873:16:0;;;;;;:7;:16;;;;;;16853:37;;:19;:37::i;744:148::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;851:1:::1;835:6:::0;;814:40:::1;::::0;-1:-1:-1;;;;;835:6:0;;::::1;::::0;814:40:::1;::::0;851:1;;814:40:::1;882:1;865:19:::0;;-1:-1:-1;;;;;;865:19:0::1;::::0;;744:148::o;31072:80::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31126:10:::1;:18:::0;;-1:-1:-1;;;;31126:18:0::1;::::0;;31072:80::o;31469:76::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31520:10:::1;:17:::0;;-1:-1:-1;;;;31520:17:0::1;-1:-1:-1::0;;;31520:17:0::1;::::0;;31469:76::o;17952:319::-;18045:4;18062:179;169:10;18112:7;18134:96;18173:15;18134:96;;;;;;;;;;;;;;;;;169:10;18134:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18134:34:0;;;;;;;;;;;;:38;:96::i;16904:167::-;16982:4;16999:42;169:10;17023:9;17034:6;16999:9;:42::i;30710:76::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;30760:11:::1;:18:::0;;-1:-1:-1;;;;30760:18:0::1;-1:-1:-1::0;;;30760:18:0::1;::::0;;30710:76::o;900:249::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;989:22:0;::::1;981:78;;;::::0;-1:-1:-1;;;981:78:0;;9478:2:1;981:78:0::1;::::0;::::1;9460:21:1::0;9517:2;9497:18;;;9490:30;9556:34;9536:18;;;9529:62;-1:-1:-1;;;9607:18:1;;;9600:41;9658:19;;981:78:0::1;9276:407:1::0;981:78:0::1;1096:6;::::0;;1075:38:::1;::::0;-1:-1:-1;;;;;1075:38:0;;::::1;::::0;1096:6;::::1;::::0;1075:38:::1;::::0;::::1;1124:6;:17:::0;;-1:-1:-1;;;;;;1124:17:0::1;-1:-1:-1::0;;;;;1124:17:0;;;::::1;::::0;;;::::1;::::0;;900:249::o;31639:160::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31733:58:::1;::::0;31697:12:::1;::::0;31741:10:::1;::::0;31765:21:::1;::::0;31697:12;31733:58;31697:12;31733:58;31765:21;31741:10;31733:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31639:160:0:o;31158:84::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;31215:12:::1;:19:::0;;-1:-1:-1;;;;31215:19:0::1;-1:-1:-1::0;;;31215:19:0::1;::::0;;31158:84::o;26207:166::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;15579:16:::1;:23:::0;;-1:-1:-1;;;;15579:23:0::1;-1:-1:-1::0;;;15579:23:0::1;::::0;;26300:13:::2;::::0;26290:23;::::2;26286:80;;26330:24;26347:6;26330:16;:24::i;:::-;-1:-1:-1::0;15625:16:0::1;:24:::0;;-1:-1:-1;;;;15625:24:0::1;::::0;;26207:166::o;26891:220::-;562:7;589:6;-1:-1:-1;;;;;589:6:0;169:10;651:23;643:73;;;;-1:-1:-1;;;643:73:0;;;;;;;:::i;:::-;26967:42:::1;-1:-1:-1::0;;;;;26958:51:0;::::1;;;26950:60;;;::::0;::::1;;-1:-1:-1::0;;;;;27030:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;27029:14;27021:51;;;::::0;-1:-1:-1;;;27021:51:0;;8772:2:1;27021:51:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:26;8830:18;;;8823:54;8894:18;;27021:51:0::1;8570:348:1::0;27021:51:0::1;-1:-1:-1::0;;;;;27083:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;27083:20:0::1;27099:4;27083:20;::::0;;26891:220::o;2880:98::-;2938:7;2965:5;2969:1;2965;:5;:::i;2984:98::-;3042:7;3069:5;3073:1;3069;:5;:::i;23128:325::-;-1:-1:-1;;;;;23219:19:0;;23211:64;;;;-1:-1:-1;;;23211:64:0;;11204:2:1;23211:64:0;;;11186:21:1;;;11223:18;;;11216:30;11282:34;11262:18;;;11255:62;11334:18;;23211:64:0;11002:356:1;23211:64:0;-1:-1:-1;;;;;23294:21:0;;23286:64;;;;-1:-1:-1;;;23286:64:0;;6111:2:1;23286:64:0;;;6093:21:1;6150:2;6130:18;;;6123:30;6189:32;6169:18;;;6162:60;6239:18;;23286:64:0;5909:354:1;23286:64:0;-1:-1:-1;;;;;23361:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23413:32;;11509:25:1;;;23413:32:0;;11482:18:1;23413:32:0;;;;;;;23128:325;;;:::o;23459:2742::-;-1:-1:-1;;;;;23545:18:0;;23537:64;;;;-1:-1:-1;;;23537:64:0;;7243:2:1;23537:64:0;;;7225:21:1;7282:2;7262:18;;;7255:30;7321:34;7301:18;;;7294:62;-1:-1:-1;;;7372:18:1;;;7365:31;7413:19;;23537:64:0;7041:397:1;23537:64:0;-1:-1:-1;;;;;23620:16:0;;23612:60;;;;-1:-1:-1;;;23612:60:0;;7645:2:1;23612:60:0;;;7627:21:1;7684:2;7664:18;;;7657:30;7723:33;7703:18;;;7696:61;7774:18;;23612:60:0;7443:355:1;23612:60:0;23700:1;23691:6;:10;23683:64;;;;-1:-1:-1;;;23683:64:0;;10296:2:1;23683:64:0;;;10278:21:1;10335:2;10315:18;;;10308:30;10374:34;10354:18;;;10347:62;-1:-1:-1;;;10425:18:1;;;10418:39;10474:19;;23683:64:0;10094:405:1;23683:64:0;-1:-1:-1;;;;;23761:12:0;;;;;;:6;:12;;;;;;;;23760:13;23752:22;;;;;;-1:-1:-1;;;;;23788:17:0;;;;;;:11;:17;;;;;;;;23787:18;;:59;;;23831:15;23809:18;;:37;;23787:59;23779:161;;;;-1:-1:-1;;;23779:161:0;;10706:2:1;23779:161:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;10855:34;10835:18;;;10828:62;10927:27;10906:19;;;10899:56;10972:19;;23779:161:0;10504:493:1;23779:161:0;23949:12;;-1:-1:-1;;;23949:12:0;;;;:20;;23965:4;23949:20;:47;;;;-1:-1:-1;;;;;;23975:21:0;;;;;;:17;:21;;;;;;;;23973:23;23949:47;23945:172;;;24047:14;;24037:6;24021:13;24031:2;24021:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24013:92;;;;-1:-1:-1;;;24013:92:0;;8005:2:1;24013:92:0;;;7987:21:1;8044:2;8024:18;;;8017:30;8083:34;8063:18;;;8056:62;-1:-1:-1;;;8134:18:1;;;8127:37;8181:19;;24013:92:0;7803:403:1;24013:92:0;24131:10;;-1:-1:-1;;;24131:10:0;;;;:18;;24145:4;24131:18;:39;;;;-1:-1:-1;24161:9:0;;-1:-1:-1;;;;;24153:17:0;;;24161:9;;24153:17;24131:39;24127:148;;;24196:21;24186:6;:31;;24178:91;;;;-1:-1:-1;;;24178:91:0;;6827:2:1;24178:91:0;;;6809:21:1;6866:2;6846:18;;;6839:30;6905:34;6885:18;;;6878:62;-1:-1:-1;;;6956:18:1;;;6949:45;7011:19;;24178:91:0;6625:411:1;24178:91:0;24283:10;;-1:-1:-1;;;24283:10:0;;;;:18;;24297:4;24283:18;:35;;;;-1:-1:-1;562:7:0;589:6;-1:-1:-1;;;;;24305:13:0;;;589:6;;24305:13;;24283:35;:56;;;;-1:-1:-1;24330:9:0;;-1:-1:-1;;;;;24322:17:0;;;24330:9;;24322:17;;24283:56;24279:103;;;24355:20;;24347:29;;;;;;24404:9;;-1:-1:-1;;;;;24396:17:0;;;24404:9;;24396:17;:47;;;;-1:-1:-1;24431:11:0;;-1:-1:-1;;;;;24417:26:0;;;24431:11;;24417:26;;24396:47;:75;;;;-1:-1:-1;;;;;;24449:22:0;;;;;;:18;:22;;;;;;;;24447:24;24396:75;:94;;;;-1:-1:-1;24475:15:0;;-1:-1:-1;;;24475:15:0;;;;24396:94;24392:296;;;24529:12;;24519:6;:22;;24511:31;;;;;;-1:-1:-1;;;;;24569:16:0;;;;;;:12;:16;;;;;;24588:15;-1:-1:-1;24561:43:0;;;;;;24642:30;:15;24661:10;24642:30;:::i;:::-;-1:-1:-1;;;;;24623:16:0;;;;;;:12;:16;;;;;:49;24392:296;24701:11;;-1:-1:-1;;;24701:11:0;;;;:19;;24716:4;24701:19;24698:630;;;24848:11;:26;;-1:-1:-1;;;;;;24848:26:0;24790:42;24848:26;;;;;;24919:22;;;-1:-1:-1;;;24919:22:0;;;;24790:42;;24919:20;;:22;;;;;;;;;;;;;;24790:42;24919:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24901:49:0;;24959:4;24966:12;-1:-1:-1;;;;;24966:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24901:85;;-1:-1:-1;;;;;;24901:85:0;;;;;;;-1:-1:-1;;;;;3909:15:1;;;24901:85:0;;;3891:34:1;3961:15;;3941:18;;;3934:43;3826:18;;24901:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24889:9;:97;;-1:-1:-1;;;;;;24889:97:0;-1:-1:-1;;;;;24889:97:0;;;;;;;;;;25022:12;25001:18;:33;25070:26;:15;25088:8;25070:26;:::i;:::-;25049:18;:47;-1:-1:-1;25137:9:0;;-1:-1:-1;;;;;25137:9:0;;;25111:37;;;;:17;:37;;;;;;:44;;25151:4;-1:-1:-1;;25111:44:0;;;;;;;;25196:11;;;;;25170:39;;;;:46;;;;;;;;25231:10;:17;;-1:-1:-1;;;;25297:19:0;-1:-1:-1;;;25297:19:0;;;24698:630;562:7;589:6;-1:-1:-1;;;;;25335:15:0;;;589:6;;25335:15;;;;:34;;-1:-1:-1;25360:9:0;;-1:-1:-1;;;;;25354:15:0;;;25360:9;;25354:15;;25335:34;:72;;;;;25389:18;;25373:12;:34;25335:72;25332:145;;;-1:-1:-1;;;;;25414:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;25414:22:0;25432:4;25414:22;;;25456:15;;;25414;25456;25332:145;25487:28;25518:24;25536:4;25518:9;:24::i;:::-;25558:16;;25487:55;;-1:-1:-1;;;;25558:16:0;;;;25557:17;:36;;;;-1:-1:-1;25584:9:0;;-1:-1:-1;;;;;25578:15:0;;;25584:9;;25578:15;25557:36;:61;;;;-1:-1:-1;25597:21:0;;-1:-1:-1;;;25597:21:0;;;;25557:61;25553:188;;;25663:29;;25639:20;:53;25635:95;;25701:13;:11;:13::i;:::-;-1:-1:-1;;;;;25785:24:0;;25751:12;25785:24;;;:18;:24;;;;;;25766:4;;25785:24;;;:50;;-1:-1:-1;;;;;;25813:22:0;;;;;;:18;:22;;;;;;;;25785:50;25781:98;;;-1:-1:-1;25862:5:0;25781:98;-1:-1:-1;;;;;25886:17:0;;;;;;:11;:17;;;;;;;;:57;;;;;25928:15;25907:18;;:36;25886:57;25883:259;;;25977:7;;:11;;:7;;25987:1;25977:11;:::i;:::-;25967:7;:21;;-1:-1:-1;;25967:21:0;;;;;;;;;;26021:11;;-1:-1:-1;;;26021:7:0;;;;26031:1;26021:11;:::i;:::-;26011:7;:21;;-1:-1:-1;;26011:21:0;-1:-1:-1;;;26011:21:0;;;;;;;;;;26065:11;;-1:-1:-1;;;26065:7:0;;;;26075:1;26065:11;:::i;:::-;26055:7;:21;;-1:-1:-1;;26055:21:0;-1:-1:-1;;;26055:21:0;;;;;;;;;;26110:12;;-1:-1:-1;;;26110:8:0;;;;26121:1;26110:12;:::i;:::-;26099:8;;:23;;;;;;;;;;;;;;;;;;25883:259;26152:41;26167:4;26173:2;26177:6;26185:7;26152:14;:41::i;:::-;23526:2675;;23459:2742;;;:::o;3192:206::-;3278:7;3339:12;3331:6;;;;3323:29;;;;-1:-1:-1;;;3323:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3374:5:0;;;3192:206::o;20582:164::-;20624:7;20645:15;20662;20681:19;:17;:19::i;:::-;20644:56;;-1:-1:-1;20644:56:0;-1:-1:-1;20718:20:0;20644:56;;20718:11;:20::i;:::-;20711:27;;;;20582:164;:::o;2672:98::-;2730:7;2757:5;2761:1;2757;:5;:::i;19399:414::-;19458:7;19466;19474;19482;19490;19498;19519:23;19544:12;19558:18;19580:20;19592:7;19580:11;:20::i;:::-;19518:82;;;;;;19612:15;19629:23;19654:12;19670:50;19682:7;19691:4;19697:10;19709;:8;:10::i;:::-;19670:11;:50::i;:::-;19611:109;;;;-1:-1:-1;19611:109:0;;-1:-1:-1;19771:15:0;;-1:-1:-1;19788:4:0;;-1:-1:-1;19794:10:0;;-1:-1:-1;19399:414:0;;-1:-1:-1;;;;;19399:414:0:o;26379:509::-;26524:16;;;26538:1;26524:16;;;;;;;;26500:21;;26524:16;;;;;;;;-1:-1:-1;;26561:11:0;;:18;;;-1:-1:-1;;;26561:18:0;;;;26500:40;;-1:-1:-1;;;;;;26561:11:0;;;;:16;;-1:-1:-1;26561:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26551:4;26556:1;26551:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;26551:28:0;;;-1:-1:-1;;;;;26551:28:0;;;;;26608:4;26590;26595:1;26590:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26590:23:0;;;:7;;;;;;;;;:23;26652:11;;;26810:4;26652:11;;;;:62;;26722:6;;26652:11;;26791:4;;26810;26845:24;:15;26865:3;26845:19;:24::i;:::-;26652:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26429:459;26379:509;:::o;28453:1291::-;15579:16;:23;;-1:-1:-1;;;;15579:23:0;-1:-1:-1;;;15579:23:0;;;28510:8:::1;::::0;;;::::1;15579:23:::0;28510:8:::1;:13:::0;28507:116:::1;;28565:4;::::0;28571:10:::1;::::0;28540:42:::1;::::0;28558:4:::1;::::0;-1:-1:-1;;;;;28565:4:0;;::::1;::::0;28540:9:::1;:42::i;:::-;28610:1;28597:10;:14:::0;28507:116:::1;28633:23;28659:24;28677:4;28659:9;:24::i;:::-;28633:50;;28694:25;28758:13;;28740:15;;28722;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;28694:77;;28831:26;28860:22;28880:1;28860:15;;:19;;:22;;;;:::i;:::-;28831:51:::0;-1:-1:-1;28893:26:0::1;28922:39;:15:::0;28831:51;28922:19:::1;:39::i;:::-;28893:68:::0;-1:-1:-1;29000:21:0::1;29032:36;28893:68:::0;29032:16:::1;:36::i;:::-;29080:18;29101:44;:21;29127:17:::0;29101:25:::1;:44::i;:::-;29080:65;;29156:23;29182:54;29218:17;29182:31;29197:15;;29182:10;:14;;:31;;;;:::i;:::-;:35:::0;::::1;:54::i;:::-;29156:80:::0;-1:-1:-1;29247:23:0::1;29273:31;:10:::0;29156:80;29273:14:::1;:31::i;:::-;29333:1;29315:15;:19:::0;;;29345:15:::1;:19:::0;;;29401:9:::1;::::0;29393:51:::1;::::0;29247:57;;-1:-1:-1;29333:1:0;;-1:-1:-1;;;;;29401:9:0;;::::1;::::0;29424:15;;29333:1;29393:51;29333:1;29393:51;29424:15;29401:9;29393:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29375:69;;;29455:49;29468:18;29488:15;29455:12;:49::i;:::-;29520:71;::::0;;12334:25:1;;;12390:2;12375:18;;12368:34;;;12418:18;;;12411:34;;;29520:71:0::1;::::0;12322:2:1;12307:18;29520:71:0::1;;;;;;;29605:21;:34:::0;29602:135:::1;;29676:9;::::0;29668:57:::1;::::0;-1:-1:-1;;;;;29676:9:0;;::::1;::::0;29699:21:::1;::::0;29668:57:::1;::::0;;;29699:21;29676:9;29668:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29655:70:0;;-1:-1:-1;;29602:135:0::1;-1:-1:-1::0;;15625:16:0;:24;;-1:-1:-1;;;;15625:24:0;;;-1:-1:-1;;;;;;;28453:1291:0:o;31805:788::-;31915:7;31910:28;;31924:14;:12;:14::i;:::-;-1:-1:-1;;;;;31953:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31977:22:0;;;;;;:11;:22;;;;;;;;31976:23;31953:46;31949:597;;;32016:48;32038:6;32046:9;32057:6;32016:21;:48::i;:::-;31949:597;;;-1:-1:-1;;;;;32087:19:0;;;;;;:11;:19;;;;;;;;32086:20;:46;;;;-1:-1:-1;;;;;;32110:22:0;;;;;;:11;:22;;;;;;;;32086:46;32082:464;;;32149:46;32169:6;32177:9;32188:6;32149:19;:46::i;32082:464::-;-1:-1:-1;;;;;32218:19:0;;;;;;:11;:19;;;;;;;;32217:20;:47;;;;-1:-1:-1;;;;;;32242:22:0;;;;;;:11;:22;;;;;;;;32241:23;32217:47;32213:333;;;32281:44;32299:6;32307:9;32318:6;32281:17;:44::i;32213:333::-;-1:-1:-1;;;;;32347:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32370:22:0;;;;;;:11;:22;;;;;;;;32347:45;32343:203;;;32409:48;32431:6;32439:9;32450:6;32409:21;:48::i;32343:203::-;32490:44;32508:6;32516:9;32527:6;32490:17;:44::i;:::-;32561:7;32556:29;;22703:15;;;-1:-1:-1;;;;;;22729:25:0;;22703:15;;;;;;;22729:25;;;22739:15;-1:-1:-1;;22693:25:0;;;;;;;22739:15;;;;;;-1:-1:-1;;;22729:25:0;;22801:28;;;-1:-1:-1;;;;;22775:15:0;;;;-1:-1:-1;;;22765:25:0;22801:28;;;;;;;22812:17;-1:-1:-1;;22765:25:0;;;;;;22812:17;;;;;;22801:28;;;22840:27;;;-1:-1:-1;;;22851:16:0;;;;;;-1:-1:-1;;;22840:27:0;;;;32570:15;22649:226;20752:556;20850:7;;20803;;;;13728:13;20803:7;20904:289;20928:9;:16;20924:20;;20904:289;;;20994:7;20970;:21;20978:9;20988:1;20978:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20978:12:0;20970:21;;;;;;;;;;;;;:31;;:66;;;21029:7;21005;:21;21013:9;21023:1;21013:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21013:12:0;21005:21;;;;;;;;;;;;;:31;20970:66;20966:97;;;-1:-1:-1;;21046:7:0;;;13728:13;;-1:-1:-1;20752:556:0;-1:-1:-1;;20752:556:0:o;20966:97::-;21088:34;21100:7;:21;21108:9;21118:1;21108:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21108:12:0;21100:21;;;;;;;;;;;;;21088:7;;:11;:34::i;:::-;21078:44;;21147:34;21159:7;:21;21167:9;21177:1;21167:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21167:12:0;21159:21;;;;;;;;;;;;;21147:7;;:11;:34::i;:::-;21137:44;-1:-1:-1;20946:3:0;;;;:::i;:::-;;;;20904:289;;;-1:-1:-1;21217:7:0;;:20;;13728:13;21217:11;:20::i;:::-;21207:7;:30;21203:61;;;-1:-1:-1;;21247:7:0;;;13728:13;;-1:-1:-1;20752:556:0;-1:-1:-1;20752:556:0:o;21203:61::-;21283:7;;21292;;-1:-1:-1;20752:556:0;-1:-1:-1;20752:556:0:o;19819:327::-;19878:7;19886;19894;19914:12;19929:24;19945:7;19929:15;:24::i;:::-;19914:39;;19964:18;19985:30;20007:7;19985:21;:30::i;:::-;19964:51;-1:-1:-1;20026:23:0;20052:33;19964:51;20052:17;:7;20064:4;20052:11;:17::i;:::-;:21;;:33::i;:::-;20026:59;20121:4;;-1:-1:-1;20127:10:0;;-1:-1:-1;19819:327:0;;-1:-1:-1;;;19819:327:0:o;20152:424::-;20264:7;;;;20318:24;:7;20330:11;20318;:24::i;:::-;20300:42;-1:-1:-1;20353:12:0;20368:21;:4;20377:11;20368:8;:21::i;:::-;20353:36;-1:-1:-1;20400:18:0;20421:27;:10;20436:11;20421:14;:27::i;:::-;20400:48;-1:-1:-1;20459:23:0;20485:33;20400:48;20485:17;:7;20497:4;20485:11;:17::i;:33::-;20537:7;;;;-1:-1:-1;20563:4:0;;-1:-1:-1;20152:424:0;;-1:-1:-1;;;;;;;20152:424:0:o;2776:98::-;2834:7;2861:5;2865:1;2861;:5;:::i;29752:496::-;29842:16;;;29856:1;29842:16;;;;;;;;29818:21;;29842:16;;;;;;;;;;-1:-1:-1;29842:16:0;29818:40;;29887:4;29869;29874:1;29869:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29869:23:0;;;:7;;;;;;;;;;:23;;;;29913:11;;:18;;;-1:-1:-1;;;29913:18:0;;;;:11;;;;;:16;;:18;;;;;29869:7;;29913:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29903:4;29908:1;29903:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29903:28:0;;;:7;;;;;;;;;:28;29974:11;;29942:58;;29959:4;;29974:11;29988;29942:8;:58::i;:::-;30011:11;;-1:-1:-1;;;;;30011:11:0;:62;30088:11;30011;30158:4;30185;30205:24;:15;30225:3;30205:19;:24::i;:::-;30011:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29807:441;29752:496;:::o;30254:412::-;30367:11;;30335:58;;30352:4;;-1:-1:-1;;;;;30367:11:0;30381;30335:8;:58::i;:::-;30404:11;;;30604:4;-1:-1:-1;;;;;30404:11:0;;;;:27;;30439:9;;30472:4;;30492:11;;30404;;;;30604:4;30623:24;:15;30643:3;30623:19;:24::i;:::-;30404:254;;;;;;-1:-1:-1;;;;;;30404:254:0;;;-1:-1:-1;;;;;4347:15:1;;;30404:254:0;;;4329:34:1;4379:18;;;4372:34;;;;4422:18;;;4415:34;;;;4465:18;;;4458:34;;;;4529:15;;;4508:19;;;4501:44;4561:19;;;4554:35;;;;4263:19;;30404:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22201:442::-;22248:7;;;;:12;:28;;;;-1:-1:-1;22264:7:0;;-1:-1:-1;;;22264:7:0;;;;:12;22248:28;:44;;;;-1:-1:-1;22280:7:0;;-1:-1:-1;;;22280:7:0;;;;:12;22248:44;:61;;;;-1:-1:-1;22296:8:0;;;;;;;:13;22248:61;:78;;;;-1:-1:-1;22313:8:0;;-1:-1:-1;;;22313:8:0;;;;:13;22248:78;22244:91;;;22201:442::o;22244:91::-;22365:7;;;-1:-1:-1;;;;;;22383:25:0;;-1:-1:-1;;22365:7:0;;;;;22347:25;;;;22383;;;;;;;-1:-1:-1;;;;;22347:25:0;;;;;;22401:7;;;;;;22383:25;;;;;;22455:28;;;-1:-1:-1;;;;;22437:7:0;;;;-1:-1:-1;;;22419:25:0;22455:28;;;;;;;22475:8;-1:-1:-1;;22419:25:0;;;;;;22475:8;;;;;;22455:28;;;22623:12;;;-1:-1:-1;;;22513:8:0;;;;;;-1:-1:-1;;;22494:27:0;-1:-1:-1;;22623:12:0;;;;22201:442::o;33862:650::-;33977:15;34007:23;34045:12;34072:23;34110:12;34137:18;34169:19;34180:7;34169:10;:19::i;:::-;-1:-1:-1;;;;;34217:15:0;;;;;;:7;:15;;;;;;33962:226;;-1:-1:-1;33962:226:0;;-1:-1:-1;33962:226:0;;-1:-1:-1;33962:226:0;-1:-1:-1;33962:226:0;-1:-1:-1;33962:226:0;-1:-1:-1;34217:28:0;;34237:7;34217:19;:28::i;:::-;-1:-1:-1;;;;;34199:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34274:7;:15;;;;:28;;34294:7;34274:19;:28::i;:::-;-1:-1:-1;;;;;34256:15:0;;;;;;;:7;:15;;;;;;:46;;;;34334:18;;;;;;;:39;;34357:15;34334:22;:39::i;:::-;-1:-1:-1;;;;;34313:18:0;;;;;;:7;:18;;;;;:60;34384:26;34399:10;34384:14;:26::i;:::-;34421:23;34433:4;34439;34421:11;:23::i;:::-;34477:9;-1:-1:-1;;;;;34460:44:0;34469:6;-1:-1:-1;;;;;34460:44:0;;34488:15;34460:44;;;;11509:25:1;;11497:2;11482:18;;11363:177;34460:44:0;;;;;;;;33951:561;;;;;;33862:650;;;:::o;33194:662::-;33307:15;33337:23;33375:12;33402:23;33440:12;33467:18;33499:19;33510:7;33499:10;:19::i;:::-;-1:-1:-1;;;;;33547:15:0;;;;;;:7;:15;;;;;;33292:226;;-1:-1:-1;33292:226:0;;-1:-1:-1;33292:226:0;;-1:-1:-1;33292:226:0;-1:-1:-1;33292:226:0;-1:-1:-1;33292:226:0;-1:-1:-1;33547:28:0;;33292:226;33547:19;:28::i;:::-;-1:-1:-1;;;;;33529:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33607:18;;;;;:7;:18;;;;;:39;;33630:15;33607:22;:39::i;:::-;-1:-1:-1;;;;;33586:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33678:7;:18;;;;:39;;33701:15;33678:22;:39::i;32599:589::-;32710:15;32740:23;32778:12;32805:23;32843:12;32870:18;32902:19;32913:7;32902:10;:19::i;:::-;-1:-1:-1;;;;;32950:15:0;;;;;;:7;:15;;;;;;32695:226;;-1:-1:-1;32695:226:0;;-1:-1:-1;32695:226:0;;-1:-1:-1;32695:226:0;-1:-1:-1;32695:226:0;-1:-1:-1;32695:226:0;-1:-1:-1;32950:28:0;;32695:226;32950:19;:28::i;34518:721::-;34633:15;34663:23;34701:12;34728:23;34766:12;34793:18;34825:19;34836:7;34825:10;:19::i;:::-;-1:-1:-1;;;;;34873:15:0;;;;;;:7;:15;;;;;;34618:226;;-1:-1:-1;34618:226:0;;-1:-1:-1;34618:226:0;;-1:-1:-1;34618:226:0;-1:-1:-1;34618:226:0;-1:-1:-1;34618:226:0;-1:-1:-1;34873:28:0;;34893:7;34873:19;:28::i;:::-;-1:-1:-1;;;;;34855:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34930:7;:15;;;;:28;;34950:7;34930:19;:28::i;21891:130::-;21994:7;;21955;;21982:31;;22007:5;;21982:20;;:7;;21994;;21982:11;:20::i;22027:168::-;22167:8;;22097:7;;22124:63;;22181:5;;22124:52;;22167:8;-1:-1:-1;;;22167:8:0;;;;;-1:-1:-1;;;22157:7:0;;;;;22136:18;;22146:8;;;;;;-1:-1:-1;;;22136:7:0;;;;:18;:::i;:::-;:28;;;;:::i;:::-;:39;;;;:::i;:::-;22124:7;;:52;;:11;:52::i;21314:571::-;21415:7;;;-1:-1:-1;;;21415:7:0;;;;;21391:21;;21404:8;;;;;21391:10;:21;:::i;:::-;:31;;;;:::i;:::-;21377:10;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;21475:7:0;;;-1:-1:-1;;;21475:7:0;;;;;21452:20;;-1:-1:-1;;;21465:7:0;;;;21452:10;:20;:::i;:::-;:30;;;;:::i;:::-;21433:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21529:7:0;;;-1:-1:-1;;;21529:7:0;;;;;21506:20;;-1:-1:-1;;;21519:7:0;;;;21506:10;:20;:::i;:::-;:30;;;;:::i;:::-;21487:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21588:7:0;;;-1:-1:-1;;;21588:7:0;;;;;21564:21;;-1:-1:-1;;;21577:8:0;;;;21564:10;:21;:::i;:::-;:31;;;;:::i;:::-;21547:13;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;21606:19:0;;-1:-1:-1;21628:10:0;:8;:10::i;:::-;21606:32;-1:-1:-1;21649:18:0;21670:27;:10;21606:32;21670:14;:27::i;:::-;21749:4;21733:22;;;;:7;:22;;;;;;21649:48;;-1:-1:-1;21733:38:0;;21649:48;21733:26;:38::i;:::-;21724:4;21708:22;;;;:7;:22;;;;;;;;:63;;;;21786:11;:26;;;;;;21782:95;;;21855:4;21839:22;;;;:7;:22;;;;;;:38;;21866:10;21839:26;:38::i;:::-;21830:4;21814:22;;;;:7;:22;;;;;:63;21782:95;21366:519;;21314:571;:::o;19246:147::-;19324:7;;:17;;19336:4;19324:11;:17::i;:::-;19314:7;:27;19365:10;;:20;;19380:4;19365:14;:20::i;:::-;19352:10;:33;-1:-1:-1;;19246:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2484:306;;;;;:::o;2795:461::-;2848:3;2886:5;2880:12;2913:6;2908:3;2901:19;2939:4;2968:2;2963:3;2959:12;2952:19;;3005:2;2998:5;2994:14;3026:1;3036:195;3050:6;3047:1;3044:13;3036:195;;;3115:13;;-1:-1:-1;;;;;3111:39:1;3099:52;;3171:12;;;;3206:15;;;;3147:1;3065:9;3036:195;;;-1:-1:-1;3247:3:1;;2795:461;-1:-1:-1;;;;;2795:461:1:o;4792:510::-;5063:6;5052:9;5045:25;5106:3;5101:2;5090:9;5086:18;5079:31;5026:4;5127:57;5179:3;5168:9;5164:19;5156:6;5127:57;:::i;:::-;-1:-1:-1;;;;;5220:32:1;;;;5215:2;5200:18;;5193:60;-1:-1:-1;5284:2:1;5269:18;5262:34;5119:65;4792:510;-1:-1:-1;;4792:510:1:o;5307:597::-;5419:4;5448:2;5477;5466:9;5459:21;5509:6;5503:13;5552:6;5547:2;5536:9;5532:18;5525:34;5577:1;5587:140;5601:6;5598:1;5595:13;5587:140;;;5696:14;;;5692:23;;5686:30;5662:17;;;5681:2;5658:26;5651:66;5616:10;;5587:140;;;5745:6;5742:1;5739:13;5736:91;;;5815:1;5810:2;5801:6;5790:9;5786:22;5782:31;5775:42;5736:91;-1:-1:-1;5888:2:1;5867:15;-1:-1:-1;;5863:29:1;5848:45;;;;5895:2;5844:54;;5307:597;-1:-1:-1;;;5307:597:1:o;9688:401::-;9890:2;9872:21;;;9929:2;9909:18;;;9902:30;9968:34;9963:2;9948:18;;9941:62;-1:-1:-1;;;10034:2:1;10019:18;;10012:35;10079:3;10064:19;;9688:401::o;11545:582::-;11844:6;11833:9;11826:25;11887:6;11882:2;11871:9;11867:18;11860:34;11930:3;11925:2;11914:9;11910:18;11903:31;11807:4;11951:57;12003:3;11992:9;11988:19;11980:6;11951:57;:::i;:::-;-1:-1:-1;;;;;12044:32:1;;;;12039:2;12024:18;;12017:60;-1:-1:-1;12108:3:1;12093:19;12086:35;11943:65;11545:582;-1:-1:-1;;;11545:582:1:o;12645:128::-;12685:3;12716:1;12712:6;12709:1;12706:13;12703:39;;;12722:18;;:::i;:::-;-1:-1:-1;12758:9:1;;12645:128::o;12778:204::-;12816:3;12852:4;12849:1;12845:12;12884:4;12881:1;12877:12;12919:3;12913:4;12909:14;12904:3;12901:23;12898:49;;;12927:18;;:::i;:::-;12963:13;;12778:204;-1:-1:-1;;;12778:204:1:o;12987:217::-;13027:1;13053;13043:132;;13097:10;13092:3;13088:20;13085:1;13078:31;13132:4;13129:1;13122:15;13160:4;13157:1;13150:15;13043:132;-1:-1:-1;13189:9:1;;12987:217::o;13209:168::-;13249:7;13315:1;13311;13307:6;13303:14;13300:1;13297:21;13292:1;13285:9;13278:17;13274:45;13271:71;;;13322:18;;:::i;:::-;-1:-1:-1;13362:9:1;;13209:168::o;13382:238::-;13420:7;13460:4;13457:1;13453:12;13492:4;13489:1;13485:12;13552:3;13546:4;13542:14;13537:3;13534:23;13527:3;13520:11;13513:19;13509:49;13506:75;;;13561:18;;:::i;:::-;13601:13;;13382:238;-1:-1:-1;;;13382:238:1:o;13625:125::-;13665:4;13693:1;13690;13687:8;13684:34;;;13698:18;;:::i;:::-;-1:-1:-1;13735:9:1;;13625:125::o;13755:135::-;13794:3;-1:-1:-1;;13815:17:1;;13812:43;;;13835:18;;:::i;:::-;-1:-1:-1;13882:1:1;13871:13;;13755:135::o;13895:127::-;13956:10;13951:3;13947:20;13944:1;13937:31;13987:4;13984:1;13977:15;14011:4;14008:1;14001:15;14027:127;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14291:131;-1:-1:-1;;;;;14366:31:1;;14356:42;;14346:70;;14412:1;14409;14402:12;14346:70;14291:131;:::o

Swarm Source

ipfs://6a7efa61e41efaf95af43017122c7e031c69c8befba47e2fa172054be5d09db3
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.