ETH Price: $2,491.89 (-0.79%)

Token

Coinhiba (HIBA)
 

Overview

Max Total Supply

95,963,488.949578285108021417 HIBA

Holders

332

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
363,072.685102270443763668 HIBA

Value
$0.00
0xa1d719ac28f342fe327a53abddfb19152043b113
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Coinhiba

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

WEBSITE : https://coinhiba.com/#/

*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata{
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount 
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,
                "BEP20: 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,
                "BEP20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "BEP20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {

    address private _owner;

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

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

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);

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

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

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

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired,
                          uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
                          external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
                                uint256 amountETHMin, address to, uint256 deadline) 
                                external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;

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

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

contract Coinhiba is ERC20, Ownable { 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 1;
    uint256 internal buyAmount = 1;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; 



    uint256 public maxWallet;
    uint256 public maxTX;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public transferFee;




    bool public swapAndLiquifyEnabled = false;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = true; 
    uint256 private gasPriceLimit; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public delay;
    uint256 private deadblocks;
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 30; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee);

    event UpdateTransferFee(uint256 transferFee);
    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() ERC20("Coinhiba", "HIBA") { 
        marketingWallet = payable(0xd406057fFFa91F415D8f9393FFc6074608476DBC); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        
        buyMarketingFees = 30;
        sellMarketingFees = 30;
        buyBurnFee = 0;
        sellBurnFee = 0;
        transferFee = 0;

        totalBuyFees = buyMarketingFees;
        totalSellFees = sellMarketingFees;

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

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (100_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        swapTokensAtAmount = _totalSupply / 1000;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function rekbots(uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX,
                           uint256 setDelay) external onlyOwner {
        initialMaxWallet = initialMaxWallet * (10**18);
        initialMaxTX = initialMaxTX * (10**18);
        require(!tradingEnabled);
        require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%");
        require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%");
        maxWallet = initialMaxWallet;
        maxTX = initialMaxTX;
        gasPriceLimit = initialMaxGwei * 1 gwei;
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        delay = setDelay;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }


    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

      function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%");
        maxWallet = value;
    }

        function setmaxTX(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%");
        maxTX = value;
    }

    function setGasPriceLimit(uint256 GWEI) external onlyOwner {
        require(GWEI >= 50, "can never be set below 50");
        gasPriceLimit = GWEI * 1 gwei;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    

    function Sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateTransferFee(uint256 newTransferFee) public onlyOwner {
        require (newTransferFee <= 5, "transfer fee cannot exceed 5%");
        transferFee = newTransferFee;
        emit UpdateTransferFee(transferFee);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;

        totalSellFees = sellMarketingFees;
        totalBuyFees = buyMarketingFees;


        require(burnBuy <= 1 && burnSell <= 1, "Burn Fees cannot exceed 1%");
        require(totalSellFees <= 30 && totalBuyFees <= 30, "total fees cannot be higher than 30%");

        emit UpdateFees(sellMarketingFees, sellBurnFee, buyMarketingFees,
                        buyBurnFee);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        
        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;

 

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 

        if (to == DEAD) {
            super._transfer(from, to, amount);
            _totalSupply = _totalSupply.sub(amount);
            return;
        }
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            bool isSelling = automatedMarketMakerPairs[to];
            bool isBuying = automatedMarketMakerPairs[from];
            
            if (!isBuying && !isSelling) {
                uint256 tFees = amount.mul(transferFee).div(100);
                amount = amount.sub(tFees);
                super._transfer(from, address(this), tFees);
                super._transfer(from, to, amount);
                return;
            } else  if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
 

                 if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;

                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
 

               if (limitsInEffect) {
                require(block.timestamp > launchtimestamp + delay,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferBlock[tx.origin] = block.number;
            }

           
                uint256 contractBalanceRecipient = balanceOf(to);
                require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." );
            
            }

            uint256 totalFees = marketingFees;

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && isSelling) {
                swapping = true;
             
                uint256 swapBalance = balanceOf(address(this));
                swapAndSendDividends(swapBalance);
                buyAmount = 1;
                sellAmount = 1;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);


            amount = amount.sub(fees + burntokens) ;

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }


           
        }

        super._transfer(from, to, amount);
        
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _completeFees = sellMarketingFees + buyMarketingFees;

        uint256 feePortions;
        if (_completeFees > 0) {
            feePortions = address(this).balance.div(_completeFees);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":[],"name":"TradingEnabled","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":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"rekbots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560016009819055600a8190556016805460ff19908116909155601a80549091169091179055601e6022553480156200005057600080fd5b5060405180604001604052806008815260200167436f696e6869626160c01b815250604051806040016040528060048152602001634849424160e01b8152508160039081620000a0919062000660565b506004620000af828262000660565b5050506000620000c4620003f360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d805473d406057fffa91f415d8f9393ffc6074608476dbc6001600160a01b031991821617909155601e60138190556011819055600060148190556012819055601555600c819055600b5560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e091906200072c565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026991906200072c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd91906200072c565b600780546001600160a01b0319166001600160a01b0392909216918217905562000309906001620003f7565b306000908152601760205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556a52b7d2dcc80cd2e40000006200037c620003756005546001600160a01b031690565b826200044b565b6103e86002546200038e919062000757565b601055600160196000620003aa6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526019909252902080549091166001179055506200079c9050565b3390565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620004a75760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620004c3816002546200055060201b6200188a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620004f69183906200188a62000550821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000806200055f83856200077a565b905083811015620005b35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200049e565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e757607f821691505b6020821081036200060857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054b57600081815260208120601f850160051c81016020861015620006375750805b601f850160051c820191505b81811015620006585782815560010162000643565b505050505050565b81516001600160401b038111156200067c576200067c620005bc565b62000694816200068d8454620005d2565b846200060e565b602080601f831160018114620006cc5760008415620006b35750858301515b600019600386901b1c1916600185901b17855562000658565b600085815260208120601f198616915b82811015620006fd57888601518255948401946001909101908401620006dc565b50858210156200071c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073f57600080fd5b81516001600160a01b0381168114620005b357600080fd5b6000826200077557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005b657634e487b7160e01b600052601160045260246000fd5b612bfd80620007ac6000396000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063adb873bd116100f7578063dd62ed3e11610095578063ebae7c1c1161006f578063ebae7c1c14610949578063f2fde38b1461095f578063f8b45b051461097f578063fc6b151c1461099557600080fd5b8063dd62ed3e146108d7578063e2f456051461091d578063e71dc3f51461093357600080fd5b8063b74e3b11116100d1578063b74e3b1114610857578063bf402a7c14610877578063c6616ba114610897578063d5e37251146108b757600080fd5b8063adb873bd146107fb578063b494298814610811578063b62496f51461082757600080fd5b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610785578063a457c2d7146107a5578063a9059cbb146107c5578063acb2ad6f146107e557600080fd5b80638da5cb5b1461073c57806395451c291461075a57806395d89b411461077057600080fd5b8063715018a61461069157806375829def146106a657806375f0a874146106c65780637fdde05c146106e65780638577a6d5146107065780638c3c82b21461072657600080fd5b806349bd5a5e1161026a5780635d098b3811610223578063679ca6e9116101fd578063679ca6e9146106105780636a42b8f8146106305780637088fb7f1461064657806370a082311461065b57600080fd5b80635d098b38146105b05780635eee4bae146105d057806366236b4a146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b80631694505e116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b80631694505e1461041b57806318160ddd1461043b5780631d7b1fb41461045a57600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab57806309231602146103cb578063095ea7b3146103eb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b50610387610382366004612645565b6109b5565b005b34801561039557600080fd5b5061039e610a86565b60405161035e919061265e565b3480156103b757600080fd5b506103876103c63660046126d6565b610b18565b3480156103d757600080fd5b506103876103e6366004612645565b610ba1565b3480156103f757600080fd5b5061040b61040636600461270b565b610c30565b604051901515815260200161035e565b34801561042757600080fd5b5060065461034a906001600160a01b031681565b34801561044757600080fd5b506002545b60405190815260200161035e565b34801561046657600080fd5b5061044c60225481565b34801561047c57600080fd5b5061038761048b36600461280d565b610c47565b34801561049c57600080fd5b5061040b6104ab3660046128cf565b610d9f565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b5061040b6104e736600461270b565b610e08565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601a5461040b9060ff1681565b34801561053257600080fd5b5060165461040b9060ff1681565b34801561054c57600080fd5b5060085461040b90600160a81b900460ff1681565b34801561056d57600080fd5b5061040b61057c366004612910565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105a657600080fd5b5061044c60135481565b3480156105bc57600080fd5b506103876105cb366004612910565b610e3e565b3480156105dc57600080fd5b506103876105eb366004612645565b610ed5565b3480156105fc57600080fd5b5061038761060b366004612645565b610f17565b34801561061c57600080fd5b5061038761062b36600461292d565b610fc8565b34801561063c57600080fd5b5061044c601f5481565b34801561065257600080fd5b50610387611005565b34801561066757600080fd5b5061044c610676366004612910565b6001600160a01b031660009081526020819052604090205490565b34801561069d57600080fd5b50610387611062565b3480156106b257600080fd5b506103876106c1366004612910565b6110d6565b3480156106d257600080fd5b50600d5461034a906001600160a01b031681565b3480156106f257600080fd5b506103876107013660046126d6565b611147565b34801561071257600080fd5b50610387610721366004612645565b61119c565b34801561073257600080fd5b5061044c60215481565b34801561074857600080fd5b506005546001600160a01b031661034a565b34801561076657600080fd5b5061044c60115481565b34801561077c57600080fd5b5061039e61124c565b34801561079157600080fd5b506103876107a03660046126d6565b61125b565b3480156107b157600080fd5b5061040b6107c036600461270b565b61128f565b3480156107d157600080fd5b5061040b6107e036600461270b565b6112de565b3480156107f157600080fd5b5061044c60155481565b34801561080757600080fd5b5061044c60125481565b34801561081d57600080fd5b5061044c601e5481565b34801561083357600080fd5b5061040b610842366004612910565b60186020526000908152604090205460ff1681565b34801561086357600080fd5b50610387610872366004612645565b6112eb565b34801561088357600080fd5b50610387610892366004612948565b61137b565b3480156108a357600080fd5b506103876108b2366004612948565b6114fd565b3480156108c357600080fd5b506103876108d236600461292d565b611668565b3480156108e357600080fd5b5061044c6108f236600461297a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092957600080fd5b5061044c60105481565b34801561093f57600080fd5b5061044c60145481565b34801561095557600080fd5b5061044c600f5481565b34801561096b57600080fd5b5061038761097a366004612910565b6116ea565b34801561098b57600080fd5b5061044c600e5481565b3480156109a157600080fd5b506103876109b0366004612645565b6117d5565b6005546001600160a01b031633146109e85760405162461bcd60e51b81526004016109df906129b3565b60405180910390fd5b6109fa81670de0b6b3a76400006129fe565b90506000610a15600954600a5461188a90919063ffffffff16565b90506000610a3882610a32600a54866118f090919063ffffffff16565b90611972565b90506000610a5583610a32600954876118f090919063ffffffff16565b9050610a60846119b4565b600a54610a6d9083611ac6565b600a55600954610a7d9082611ac6565b60095550505050565b606060038054610a9590612a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190612a15565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b425760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b81526004016109df906129b3565b6032811015610c1c5760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f772035300000000000000060448201526064016109df565b610c2a81633b9aca006129fe565b601b5550565b6000610c3d338484611b08565b5060015b92915050565b6005546001600160a01b03163314610c715760405162461bcd60e51b81526004016109df906129b3565b8051825114610cc25760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109df565b60c882511115610d1f5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109df565b60005b8251811015610d9a576000838281518110610d3f57610d3f612a4f565b602002602001015190506000838381518110610d5d57610d5d612a4f565b6020026020010151670de0b6b3a7640000610d7891906129fe565b9050610d85338383611c2d565b50508080610d9290612a65565b915050610d22565b505050565b6000610dac848484611db0565b610dfe8433610df985604051806060016040528060288152602001612b55602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061242f565b611b08565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3d918590610df9908661188a565b6005546001600160a01b03163314610e685760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038116600081815260176020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6005546001600160a01b03163314610eff5760405162461bcd60e51b81526004016109df906129b3565b610f1181670de0b6b3a76400006129fe565b60105550565b6005546001600160a01b03163314610f415760405162461bcd60e51b81526004016109df906129b3565b610f5381670de0b6b3a76400006129fe565b90506103e8600254610f659190612a7e565b811015610fc35760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b60648201526084016109df565b600f55565b6005546001600160a01b03163314610ff25760405162461bcd60e51b81526004016109df906129b3565b601a805460ff1916911515919091179055565b6005546001600160a01b0316331461102f5760405162461bcd60e51b81526004016109df906129b3565b6040514790339082156108fc029083906000818181858888f1935050505015801561105e573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109df906129b3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111005760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03811660009081526017602090815260408083208054600160ff1991821681179092556019909352922080549091169091179055611144816116ea565b50565b6005546001600160a01b031633146111715760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111c65760405162461bcd60e51b81526004016109df906129b3565b60058111156112175760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016109df565b60158190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610eca565b606060048054610a9590612a15565b6005546001600160a01b031633146112855760405162461bcd60e51b81526004016109df906129b3565b61105e8282612469565b6000610c3d3384610df985604051806060016040528060258152602001612ba3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061242f565b6000610c3d338484611db0565b6005546001600160a01b031633146113155760405162461bcd60e51b81526004016109df906129b3565b61012c8111156113765760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109df565b602255565b6005546001600160a01b031633146113a55760405162461bcd60e51b81526004016109df906129b3565b6113b783670de0b6b3a76400006129fe565b92506113cb82670de0b6b3a76400006129fe565b600854909250600160a81b900460ff16156113e557600080fd5b6103e86002546113f59190612a7e565b83101561143c5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b6103e860025461144c9190612a7e565b8210156114935760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b600e839055600f8290556114ab84633b9aca006129fe565b601b556008805460ff60a81b1916600160a81b17905543601e5542602155601f8190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146115275760405162461bcd60e51b81526004016109df906129b3565b6013849055601482905560118390556012819055600b839055600c84905560018211801590611557575060018111155b6115a35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f742065786365656420312500000000000060448201526064016109df565b601e600b54111580156115b95750601e600c5411155b6116115760405162461bcd60e51b8152602060048201526024808201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e6044820152632033302560e01b60648201526084016109df565b6011546012546013546014546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146116925760405162461bcd60e51b81526004016109df906129b3565b60165481151560ff9091161515036116a957600080fd5b6016805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610eca565b6005546001600160a01b031633146117145760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b0381166117795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117ff5760405162461bcd60e51b81526004016109df906129b3565b61181181670de0b6b3a76400006129fe565b90506103e86002546118239190612a7e565b8110156118855760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016109df565b600e55565b6000806118978385612aa0565b9050838110156118e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109df565b9392505050565b60008260000361190257506000610c41565b600061190e83856129fe565b90508261191b8583612a7e565b146118e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109df565b60006118e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124bd565b806000036119bf5750565b6119c8816124eb565b60135460115460019182916000916119df91612aa0565b9050600081156119f6576119f34783611972565b90505b600081611a1060115460135461188a90919063ffffffff16565b611a1a91906129fe565b90508015611a7a57600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea981868015611aa65750855b6040805192835290151560208301520160405180910390a1505050505050565b60006118e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061242f565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109df565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109df565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109df565b611d3081604051806060016040528060268152602001612b7d602691396001600160a01b038616600090815260208190526040902054919061242f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d5f908261188a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c20565b6001600160a01b038316611e155760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6001600160a01b038216611e775760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038316600090815260196020526040812054819060ff16611ef257600854600160a81b900460ff16611ef25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109df565b82600003611f0d57611f0685856000611c2d565b5050505050565b6008546001600160a01b0390811690851603611f4557611f2e858585611c2d565b600254611f3b9084611ac6565b6002555050505050565b600854600160a01b900460ff16158015611f7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611f9d57506001600160a01b03841660009081526017602052604090205460ff16155b15612424576001600160a01b0380851660009081526018602052604080822054928816825290205460ff918216911680158015611fd8575081155b15612027576000611ff96064610a32601554896118f090919063ffffffff16565b90506120058682611ac6565b9550612012883083611c2d565b61201d888888611c2d565b5050505050505050565b811561211257601154601254601a54919550935060ff161561210d57602254326000908152601d60205260409020546120609190612aa0565b4210156120a85760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109df565b600f548511156120fa5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601d602052604090204290555b61230a565b601354601454601a54919550935060ff161561228857601f546021546121389190612aa0565b421161217b5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109df565b601b543a11156121cd5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109df565b326000908152601c60205260409020544390036122235760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109df565b600f548511156122755760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601c602052604090204390555b6001600160a01b038616600090815260208190526040902054600e546122ae8783612aa0565b11156123085760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109df565b505b306000908152602081905260409020546010548591908110801590819061232e5750845b1561237a576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612361816119b4565b506001600a8190556009556008805460ff60a01b191690555b600061238b6064610a328b876118f0565b9050600061239e6064610a328c8b6118f0565b90506123b46123ad8284612aa0565b8b90611ac6565b995086156123d1576009546123c9908361188a565b6009556123e2565b600a546123de908361188a565b600a555b6123ed8c3084611c2d565b801561241c5760085461240b908d906001600160a01b031683611c2d565b6002546124189082611ac6565b6002555b505050505050505b611f06858585611c2d565b600081848411156124535760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612ab3565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836124de5760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612a7e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061252057612520612a4f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d9190612ac6565b816001815181106125b0576125b0612a4f565b6001600160a01b0392831660209182029290920101526006546125d69130911684611b08565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061260f908590600090869030904290600401612ae3565b600060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050505050565b60006020828403121561265757600080fd5b5035919050565b600060208083528351808285015260005b8181101561268b5785810183015185820160400152820161266f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114457600080fd5b803580151581146126d157600080fd5b919050565b600080604083850312156126e957600080fd5b82356126f4816126ac565b9150612702602084016126c1565b90509250929050565b6000806040838503121561271e57600080fd5b8235612729816126ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561277657612776612737565b604052919050565b600067ffffffffffffffff82111561279857612798612737565b5060051b60200190565b600082601f8301126127b357600080fd5b813560206127c86127c38361277e565b61274d565b82815260059290921b840181019181810190868411156127e757600080fd5b8286015b8481101561280257803583529183019183016127eb565b509695505050505050565b6000806040838503121561282057600080fd5b823567ffffffffffffffff8082111561283857600080fd5b818501915085601f83011261284c57600080fd5b8135602061285c6127c38361277e565b82815260059290921b8401810191818101908984111561287b57600080fd5b948201945b838610156128a2578535612893816126ac565b82529482019490820190612880565b965050860135925050808211156128b857600080fd5b506128c5858286016127a2565b9150509250929050565b6000806000606084860312156128e457600080fd5b83356128ef816126ac565b925060208401356128ff816126ac565b929592945050506040919091013590565b60006020828403121561292257600080fd5b81356118e9816126ac565b60006020828403121561293f57600080fd5b6118e9826126c1565b6000806000806080858703121561295e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561298d57600080fd5b8235612998816126ac565b915060208301356129a8816126ac565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c4157610c416129e8565b600181811c90821680612a2957607f821691505b602082108103612a4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7757612a776129e8565b5060010190565b600082612a9b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4157610c416129e8565b81810381811115610c4157610c416129e8565b600060208284031215612ad857600080fd5b81516118e9816126ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b335784516001600160a01b031683529383019391830191600101612b0e565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fef01572bfd4ec49a1de936f41999052a81f2fbd1241245941074532065a6e4a64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063715018a6116101ab578063adb873bd116100f7578063dd62ed3e11610095578063ebae7c1c1161006f578063ebae7c1c14610949578063f2fde38b1461095f578063f8b45b051461097f578063fc6b151c1461099557600080fd5b8063dd62ed3e146108d7578063e2f456051461091d578063e71dc3f51461093357600080fd5b8063b74e3b11116100d1578063b74e3b1114610857578063bf402a7c14610877578063c6616ba114610897578063d5e37251146108b757600080fd5b8063adb873bd146107fb578063b494298814610811578063b62496f51461082757600080fd5b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610785578063a457c2d7146107a5578063a9059cbb146107c5578063acb2ad6f146107e557600080fd5b80638da5cb5b1461073c57806395451c291461075a57806395d89b411461077057600080fd5b8063715018a61461069157806375829def146106a657806375f0a874146106c65780637fdde05c146106e65780638577a6d5146107065780638c3c82b21461072657600080fd5b806349bd5a5e1161026a5780635d098b3811610223578063679ca6e9116101fd578063679ca6e9146106105780636a42b8f8146106305780637088fb7f1461064657806370a082311461065b57600080fd5b80635d098b38146105b05780635eee4bae146105d057806366236b4a146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b80631694505e116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b80631694505e1461041b57806318160ddd1461043b5780631d7b1fb41461045a57600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab57806309231602146103cb578063095ea7b3146103eb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b50610387610382366004612645565b6109b5565b005b34801561039557600080fd5b5061039e610a86565b60405161035e919061265e565b3480156103b757600080fd5b506103876103c63660046126d6565b610b18565b3480156103d757600080fd5b506103876103e6366004612645565b610ba1565b3480156103f757600080fd5b5061040b61040636600461270b565b610c30565b604051901515815260200161035e565b34801561042757600080fd5b5060065461034a906001600160a01b031681565b34801561044757600080fd5b506002545b60405190815260200161035e565b34801561046657600080fd5b5061044c60225481565b34801561047c57600080fd5b5061038761048b36600461280d565b610c47565b34801561049c57600080fd5b5061040b6104ab3660046128cf565b610d9f565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b5061040b6104e736600461270b565b610e08565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601a5461040b9060ff1681565b34801561053257600080fd5b5060165461040b9060ff1681565b34801561054c57600080fd5b5060085461040b90600160a81b900460ff1681565b34801561056d57600080fd5b5061040b61057c366004612910565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105a657600080fd5b5061044c60135481565b3480156105bc57600080fd5b506103876105cb366004612910565b610e3e565b3480156105dc57600080fd5b506103876105eb366004612645565b610ed5565b3480156105fc57600080fd5b5061038761060b366004612645565b610f17565b34801561061c57600080fd5b5061038761062b36600461292d565b610fc8565b34801561063c57600080fd5b5061044c601f5481565b34801561065257600080fd5b50610387611005565b34801561066757600080fd5b5061044c610676366004612910565b6001600160a01b031660009081526020819052604090205490565b34801561069d57600080fd5b50610387611062565b3480156106b257600080fd5b506103876106c1366004612910565b6110d6565b3480156106d257600080fd5b50600d5461034a906001600160a01b031681565b3480156106f257600080fd5b506103876107013660046126d6565b611147565b34801561071257600080fd5b50610387610721366004612645565b61119c565b34801561073257600080fd5b5061044c60215481565b34801561074857600080fd5b506005546001600160a01b031661034a565b34801561076657600080fd5b5061044c60115481565b34801561077c57600080fd5b5061039e61124c565b34801561079157600080fd5b506103876107a03660046126d6565b61125b565b3480156107b157600080fd5b5061040b6107c036600461270b565b61128f565b3480156107d157600080fd5b5061040b6107e036600461270b565b6112de565b3480156107f157600080fd5b5061044c60155481565b34801561080757600080fd5b5061044c60125481565b34801561081d57600080fd5b5061044c601e5481565b34801561083357600080fd5b5061040b610842366004612910565b60186020526000908152604090205460ff1681565b34801561086357600080fd5b50610387610872366004612645565b6112eb565b34801561088357600080fd5b50610387610892366004612948565b61137b565b3480156108a357600080fd5b506103876108b2366004612948565b6114fd565b3480156108c357600080fd5b506103876108d236600461292d565b611668565b3480156108e357600080fd5b5061044c6108f236600461297a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092957600080fd5b5061044c60105481565b34801561093f57600080fd5b5061044c60145481565b34801561095557600080fd5b5061044c600f5481565b34801561096b57600080fd5b5061038761097a366004612910565b6116ea565b34801561098b57600080fd5b5061044c600e5481565b3480156109a157600080fd5b506103876109b0366004612645565b6117d5565b6005546001600160a01b031633146109e85760405162461bcd60e51b81526004016109df906129b3565b60405180910390fd5b6109fa81670de0b6b3a76400006129fe565b90506000610a15600954600a5461188a90919063ffffffff16565b90506000610a3882610a32600a54866118f090919063ffffffff16565b90611972565b90506000610a5583610a32600954876118f090919063ffffffff16565b9050610a60846119b4565b600a54610a6d9083611ac6565b600a55600954610a7d9082611ac6565b60095550505050565b606060038054610a9590612a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190612a15565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b425760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b81526004016109df906129b3565b6032811015610c1c5760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f772035300000000000000060448201526064016109df565b610c2a81633b9aca006129fe565b601b5550565b6000610c3d338484611b08565b5060015b92915050565b6005546001600160a01b03163314610c715760405162461bcd60e51b81526004016109df906129b3565b8051825114610cc25760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109df565b60c882511115610d1f5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109df565b60005b8251811015610d9a576000838281518110610d3f57610d3f612a4f565b602002602001015190506000838381518110610d5d57610d5d612a4f565b6020026020010151670de0b6b3a7640000610d7891906129fe565b9050610d85338383611c2d565b50508080610d9290612a65565b915050610d22565b505050565b6000610dac848484611db0565b610dfe8433610df985604051806060016040528060288152602001612b55602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061242f565b611b08565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3d918590610df9908661188a565b6005546001600160a01b03163314610e685760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038116600081815260176020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6005546001600160a01b03163314610eff5760405162461bcd60e51b81526004016109df906129b3565b610f1181670de0b6b3a76400006129fe565b60105550565b6005546001600160a01b03163314610f415760405162461bcd60e51b81526004016109df906129b3565b610f5381670de0b6b3a76400006129fe565b90506103e8600254610f659190612a7e565b811015610fc35760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b60648201526084016109df565b600f55565b6005546001600160a01b03163314610ff25760405162461bcd60e51b81526004016109df906129b3565b601a805460ff1916911515919091179055565b6005546001600160a01b0316331461102f5760405162461bcd60e51b81526004016109df906129b3565b6040514790339082156108fc029083906000818181858888f1935050505015801561105e573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109df906129b3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111005760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03811660009081526017602090815260408083208054600160ff1991821681179092556019909352922080549091169091179055611144816116ea565b50565b6005546001600160a01b031633146111715760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111c65760405162461bcd60e51b81526004016109df906129b3565b60058111156112175760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016109df565b60158190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610eca565b606060048054610a9590612a15565b6005546001600160a01b031633146112855760405162461bcd60e51b81526004016109df906129b3565b61105e8282612469565b6000610c3d3384610df985604051806060016040528060258152602001612ba3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061242f565b6000610c3d338484611db0565b6005546001600160a01b031633146113155760405162461bcd60e51b81526004016109df906129b3565b61012c8111156113765760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109df565b602255565b6005546001600160a01b031633146113a55760405162461bcd60e51b81526004016109df906129b3565b6113b783670de0b6b3a76400006129fe565b92506113cb82670de0b6b3a76400006129fe565b600854909250600160a81b900460ff16156113e557600080fd5b6103e86002546113f59190612a7e565b83101561143c5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b6103e860025461144c9190612a7e565b8210156114935760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b600e839055600f8290556114ab84633b9aca006129fe565b601b556008805460ff60a81b1916600160a81b17905543601e5542602155601f8190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146115275760405162461bcd60e51b81526004016109df906129b3565b6013849055601482905560118390556012819055600b839055600c84905560018211801590611557575060018111155b6115a35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f742065786365656420312500000000000060448201526064016109df565b601e600b54111580156115b95750601e600c5411155b6116115760405162461bcd60e51b8152602060048201526024808201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e6044820152632033302560e01b60648201526084016109df565b6011546012546013546014546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146116925760405162461bcd60e51b81526004016109df906129b3565b60165481151560ff9091161515036116a957600080fd5b6016805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610eca565b6005546001600160a01b031633146117145760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b0381166117795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117ff5760405162461bcd60e51b81526004016109df906129b3565b61181181670de0b6b3a76400006129fe565b90506103e86002546118239190612a7e565b8110156118855760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016109df565b600e55565b6000806118978385612aa0565b9050838110156118e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109df565b9392505050565b60008260000361190257506000610c41565b600061190e83856129fe565b90508261191b8583612a7e565b146118e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109df565b60006118e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124bd565b806000036119bf5750565b6119c8816124eb565b60135460115460019182916000916119df91612aa0565b9050600081156119f6576119f34783611972565b90505b600081611a1060115460135461188a90919063ffffffff16565b611a1a91906129fe565b90508015611a7a57600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea981868015611aa65750855b6040805192835290151560208301520160405180910390a1505050505050565b60006118e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061242f565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109df565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109df565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109df565b611d3081604051806060016040528060268152602001612b7d602691396001600160a01b038616600090815260208190526040902054919061242f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d5f908261188a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c20565b6001600160a01b038316611e155760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6001600160a01b038216611e775760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038316600090815260196020526040812054819060ff16611ef257600854600160a81b900460ff16611ef25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109df565b82600003611f0d57611f0685856000611c2d565b5050505050565b6008546001600160a01b0390811690851603611f4557611f2e858585611c2d565b600254611f3b9084611ac6565b6002555050505050565b600854600160a01b900460ff16158015611f7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611f9d57506001600160a01b03841660009081526017602052604090205460ff16155b15612424576001600160a01b0380851660009081526018602052604080822054928816825290205460ff918216911680158015611fd8575081155b15612027576000611ff96064610a32601554896118f090919063ffffffff16565b90506120058682611ac6565b9550612012883083611c2d565b61201d888888611c2d565b5050505050505050565b811561211257601154601254601a54919550935060ff161561210d57602254326000908152601d60205260409020546120609190612aa0565b4210156120a85760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109df565b600f548511156120fa5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601d602052604090204290555b61230a565b601354601454601a54919550935060ff161561228857601f546021546121389190612aa0565b421161217b5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109df565b601b543a11156121cd5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109df565b326000908152601c60205260409020544390036122235760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109df565b600f548511156122755760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601c602052604090204390555b6001600160a01b038616600090815260208190526040902054600e546122ae8783612aa0565b11156123085760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109df565b505b306000908152602081905260409020546010548591908110801590819061232e5750845b1561237a576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612361816119b4565b506001600a8190556009556008805460ff60a01b191690555b600061238b6064610a328b876118f0565b9050600061239e6064610a328c8b6118f0565b90506123b46123ad8284612aa0565b8b90611ac6565b995086156123d1576009546123c9908361188a565b6009556123e2565b600a546123de908361188a565b600a555b6123ed8c3084611c2d565b801561241c5760085461240b908d906001600160a01b031683611c2d565b6002546124189082611ac6565b6002555b505050505050505b611f06858585611c2d565b600081848411156124535760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612ab3565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836124de5760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612a7e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061252057612520612a4f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d9190612ac6565b816001815181106125b0576125b0612a4f565b6001600160a01b0392831660209182029290920101526006546125d69130911684611b08565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061260f908590600090869030904290600401612ae3565b600060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050505050565b60006020828403121561265757600080fd5b5035919050565b600060208083528351808285015260005b8181101561268b5785810183015185820160400152820161266f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114457600080fd5b803580151581146126d157600080fd5b919050565b600080604083850312156126e957600080fd5b82356126f4816126ac565b9150612702602084016126c1565b90509250929050565b6000806040838503121561271e57600080fd5b8235612729816126ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561277657612776612737565b604052919050565b600067ffffffffffffffff82111561279857612798612737565b5060051b60200190565b600082601f8301126127b357600080fd5b813560206127c86127c38361277e565b61274d565b82815260059290921b840181019181810190868411156127e757600080fd5b8286015b8481101561280257803583529183019183016127eb565b509695505050505050565b6000806040838503121561282057600080fd5b823567ffffffffffffffff8082111561283857600080fd5b818501915085601f83011261284c57600080fd5b8135602061285c6127c38361277e565b82815260059290921b8401810191818101908984111561287b57600080fd5b948201945b838610156128a2578535612893816126ac565b82529482019490820190612880565b965050860135925050808211156128b857600080fd5b506128c5858286016127a2565b9150509250929050565b6000806000606084860312156128e457600080fd5b83356128ef816126ac565b925060208401356128ff816126ac565b929592945050506040919091013590565b60006020828403121561292257600080fd5b81356118e9816126ac565b60006020828403121561293f57600080fd5b6118e9826126c1565b6000806000806080858703121561295e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561298d57600080fd5b8235612998816126ac565b915060208301356129a8816126ac565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c4157610c416129e8565b600181811c90821680612a2957607f821691505b602082108103612a4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7757612a776129e8565b5060010190565b600082612a9b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4157610c416129e8565b81810381811115610c4157610c416129e8565b600060208284031215612ad857600080fd5b81516118e9816126ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b335784516001600160a01b031683529383019391830191600101612b0e565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fef01572bfd4ec49a1de936f41999052a81f2fbd1241245941074532065a6e4a64736f6c63430008110033

Deployed Bytecode Sourcemap

15400:15282:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15564:64;;;;;;;;;;-1:-1:-1;15564:64:0;;;;-1:-1:-1;;;;;15564:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15564:64:0;;;;;;;;28844:443;;;;;;;;;;-1:-1:-1;28844:443:0;;;;;:::i;:::-;;:::i;:::-;;3283:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20102:181::-;;;;;;;;;;-1:-1:-1;20102:181:0;;;;;:::i;:::-;;:::i;21005:166::-;;;;;;;;;;-1:-1:-1;21005:166:0;;;;;:::i;:::-;;:::i;4197:169::-;;;;;;;;;;-1:-1:-1;4197:169:0;;;;;:::i;:::-;;:::i;:::-;;;2066:14:1;;2059:22;2041:41;;2029:2;2014:18;4197:169:0;1901:187:1;15479:41:0;;;;;;;;;;-1:-1:-1;15479:41:0;;;;-1:-1:-1;;;;;15479:41:0;;;3604:108;;;;;;;;;;-1:-1:-1;3692:12:0;;3604:108;;;2474:25:1;;;2462:2;2447:18;3604:108:0;2328:177:1;16850:33:0;;;;;;;;;;;;;;;;30118:561;;;;;;;;;;-1:-1:-1;30118:561:0;;;;;:::i;:::-;;:::i;4374:345::-;;;;;;;;;;-1:-1:-1;4374:345:0;;;;;:::i;:::-;;:::i;18974:93::-;;;;;;;;;;-1:-1:-1;18974:93:0;;19057:2;5600:36:1;;5588:2;5573:18;18974:93:0;5458:184:1;4727:218:0;;;;;;;;;;-1:-1:-1;4727:218:0;;;;;:::i;:::-;;:::i;15529:28::-;;;;;;;;;;-1:-1:-1;15529:28:0;;;;-1:-1:-1;;;;;15529:28:0;;;16437:33;;;;;;;;;;-1:-1:-1;16437:33:0;;;;;;;;16189:41;;;;;;;;;;-1:-1:-1;16189:41:0;;;;;;;;15663:34;;;;;;;;;;-1:-1:-1;15663:34:0;;;;-1:-1:-1;;;15663:34:0;;;;;;23370:126;;;;;;;;;;-1:-1:-1;23370:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23460:28:0;23436:4;23460:28;;;:19;:28;;;;;;;;;23370:126;16078:31;;;;;;;;;;;;;;;;19881:205;;;;;;;;;;-1:-1:-1;19881:205:0;;;;;:::i;:::-;;:::i;21523:120::-;;;;;;;;;;-1:-1:-1;21523:120:0;;;;;:::i;:::-;;:::i;20788:209::-;;;;;;;;;;-1:-1:-1;20788:209:0;;;;;:::i;:::-;;:::i;20446:99::-;;;;;;;;;;-1:-1:-1;20446:99:0;;;;;:::i;:::-;;:::i;16752:20::-;;;;;;;;;;;;;;;;21369:146;;;;;;;;;;;;;:::i;3720:127::-;;;;;;;;;;-1:-1:-1;3720:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3821:18:0;3794:7;3821:18;;;;;;;;;;;;3720:127;7175:148;;;;;;;;;;;;;:::i;22211:212::-;;;;;;;;;;-1:-1:-1;22211:212:0;;;;;:::i;:::-;;:::i;15856:38::-;;;;;;;;;;-1:-1:-1;15856:38:0;;;;-1:-1:-1;;;;;15856:38:0;;;20291:147;;;;;;;;;;-1:-1:-1;20291:147:0;;;;;:::i;:::-;;:::i;22431:234::-;;;;;;;;;;-1:-1:-1;22431:234:0;;;;;:::i;:::-;;:::i;16812:30::-;;;;;;;;;;;;;;;;6961:79;;;;;;;;;;-1:-1:-1;7026:6:0;;-1:-1:-1;;;;;7026:6:0;6961:79;;16006:32;;;;;;;;;;;;;;;;3391:104;;;;;;;;;;;;;:::i;21867:140::-;;;;;;;;;;-1:-1:-1;21867:140:0;;;;;:::i;:::-;;:::i;4953:286::-;;;;;;;;;;-1:-1:-1;4953:286:0;;;;;:::i;:::-;;:::i;3855:175::-;;;;;;;;;;-1:-1:-1;3855:175:0;;;;;:::i;:::-;;:::i;16148:26::-;;;;;;;;;;;;;;;;16045;;;;;;;;;;;;;;;;16701;;;;;;;;;;;;;;;;16298:57;;;;;;;;;;-1:-1:-1;16298:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21179:174;;;;;;;;;;-1:-1:-1;21179:174:0;;;;;:::i;:::-;;:::i;19112:757::-;;;;;;;;;;-1:-1:-1;19112:757:0;;;;;:::i;:::-;;:::i;22673:689::-;;;;;;;;;;-1:-1:-1;22673:689:0;;;;;:::i;:::-;;:::i;21651:208::-;;;;;;;;;;-1:-1:-1;21651:208:0;;;;;:::i;:::-;;:::i;4038:151::-;;;;;;;;;;-1:-1:-1;4038:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4154:18:0;;;4127:7;4154:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4038:151;15966:33;;;;;;;;;;;;;;;;16116:25;;;;;;;;;;;;;;;;15939:20;;;;;;;;;;;;;;;;7331:244;;;;;;;;;;-1:-1:-1;7331:244:0;;;;;:::i;:::-;;:::i;15908:24::-;;;;;;;;;;;;;;;;20555:221;;;;;;;;;;-1:-1:-1;20555:221:0;;;;;:::i;:::-;;:::i;28844:443::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;;;;;;;;;28932:17:::1;:6:::0;28942::::1;28932:17;:::i;:::-;28923:26;;28960:19;28982:25;28996:10;;28982:9;;:13;;:25;;;;:::i;:::-;28960:47;;29018:15;29036:38;29062:11;29036:21;29047:9;;29036:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;29018:56;;29085:16;29104:39;29131:11;29104:22;29115:10;;29104:6;:10;;:22;;;;:::i;:39::-;29085:58;;29156:28;29177:6;29156:20;:28::i;:::-;29209:9;::::0;:22:::1;::::0;29223:7;29209:13:::1;:22::i;:::-;29197:9;:34:::0;29255:10:::1;::::0;:24:::1;::::0;29270:8;29255:14:::1;:24::i;:::-;29242:10;:37:::0;-1:-1:-1;;;;28844:443:0:o;3283:100::-;3337:13;3370:5;3363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:100;:::o;20102:181::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20186:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20186:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20241:34;;2041:41:1;;;20241:34:0::1;::::0;2014:18:1;20241:34:0::1;;;;;;;20102:181:::0;;:::o;21005:166::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21091:2:::1;21083:4;:10;;21075:48;;;::::0;-1:-1:-1;;;21075:48:0;;8344:2:1;21075:48:0::1;::::0;::::1;8326:21:1::0;8383:2;8363:18;;;8356:30;8422:27;8402:18;;;8395:55;8467:18;;21075:48:0::1;8142:349:1::0;21075:48:0::1;21150:13;:4:::0;21157:6:::1;21150:13;:::i;:::-;21134;:29:::0;-1:-1:-1;21005:166:0:o;4197:169::-;4280:4;4297:39;222:10;4320:7;4329:6;4297:8;:39::i;:::-;-1:-1:-1;4354:4:0;4197:169;;;;;:::o;30118:561::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;30290:6:::1;:13;30265:14;:21;:38;30257:81;;;::::0;-1:-1:-1;;;30257:81:0;;8698:2:1;30257:81:0::1;::::0;::::1;8680:21:1::0;8737:2;8717:18;;;8710:30;8776:32;8756:18;;;8749:60;8826:18;;30257:81:0::1;8496:354:1::0;30257:81:0::1;30382:3;30357:14;:21;:28;;30349:75;;;::::0;-1:-1:-1;;;30349:75:0;;9057:2:1;30349:75:0::1;::::0;::::1;9039:21:1::0;9096:2;9076:18;;;9069:30;9135:34;9115:18;;;9108:62;-1:-1:-1;;;9186:18:1;;;9179:32;9228:19;;30349:75:0::1;8855:398:1::0;30349:75:0::1;30440:9;30435:237;30459:14;:21;30455:1;:25;30435:237;;;30502:14;30519;30534:1;30519:17;;;;;;;;:::i;:::-;;;;;;;30502:34;;30551:21;30575:6;30582:1;30575:9;;;;;;;;:::i;:::-;;;;;;;30588:6;30575:20;;;;:::i;:::-;30551:44;;30610:50;30626:10;30638:6;30646:13;30610:15;:50::i;:::-;30487:185;;30482:3;;;;;:::i;:::-;;;;30435:237;;;;30118:561:::0;;:::o;4374:345::-;4487:4;4504:36;4514:6;4522:9;4533:6;4504:9;:36::i;:::-;4551:138;4560:6;222:10;4582:106;4620:6;4582:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4582:19:0;;;;;;:11;:19;;;;;;;;222:10;4582:33;;;;;;;;;;:37;:106::i;:::-;4551:8;:138::i;:::-;-1:-1:-1;4707:4:0;4374:345;;;;;:::o;4727:218::-;222:10;4815:4;4864:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4864:34:0;;;;;;;;;;4815:4;;4832:83;;4855:7;;4864:50;;4903:10;4864:38;:50::i;19881:205::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19955:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;19955:34:0::1;19985:4;19955:34;::::0;;20000:15:::1;:33:::0;;-1:-1:-1;;;;;;20000:33:0::1;::::0;::::1;::::0;;20049:29;;160:51:1;;;20049:29:0::1;::::0;133:18:1;20049:29:0::1;;;;;;;;19881:205:::0;:::o;21523:120::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21618:17:::1;:6:::0;21628::::1;21618:17;:::i;:::-;21597:18;:38:::0;-1:-1:-1;21523:120:0:o;20788:209::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;20859:16:::1;:5:::0;20868:6:::1;20859:16;:::i;:::-;20851:24;;20918:4;20903:12;;:19;;;;:::i;:::-;20894:5;:28;;20886:79;;;::::0;-1:-1:-1;;;20886:79:0;;9954:2:1;20886:79:0::1;::::0;::::1;9936:21:1::0;9993:2;9973:18;;;9966:30;10032:34;10012:18;;;10005:62;-1:-1:-1;;;10083:18:1;;;10076:36;10129:19;;20886:79:0::1;9752:402:1::0;20886:79:0::1;20976:5;:13:::0;20788:209::o;20446:99::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;20515:14:::1;:22:::0;;-1:-1:-1;;20515:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20446:99::o;21369:146::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21468:39:::1;::::0;21436:21:::1;::::0;21476:10:::1;::::0;21468:39;::::1;;;::::0;21436:21;;21416:17:::1;21468:39:::0;21416:17;21468:39;21436:21;21476:10;21468:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21405:110;21369:146::o:0;7175:148::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;7266:6:::1;::::0;7245:40:::1;::::0;7282:1:::1;::::0;-1:-1:-1;;;;;7266:6:0::1;::::0;7245:40:::1;::::0;7282:1;;7245:40:::1;7296:6;:19:::0;;-1:-1:-1;;;;;;7296:19:0::1;::::0;;7175:148::o;22211:212::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22280:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22312:4:::1;-1:-1:-1::0;;22280:36:0;;::::1;::::0;::::1;::::0;;;22327:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22388:27:::1;22280:29:::0;22388:17:::1;:27::i;:::-;22211:212:::0;:::o;20291:147::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20380:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20380:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20291:147::o;22431:234::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;22537:1:::1;22519:14;:19;;22510:62;;;::::0;-1:-1:-1;;;22510:62:0;;10361:2:1;22510:62:0::1;::::0;::::1;10343:21:1::0;10400:2;10380:18;;;10373:30;10439:31;10419:18;;;10412:59;10488:18;;22510:62:0::1;10159:353:1::0;22510:62:0::1;22583:11;:28:::0;;;22627:30:::1;::::0;2474:25:1;;;22627:30:0::1;::::0;2462:2:1;2447:18;22627:30:0::1;2328:177:1::0;3391:104:0;3447:13;3480:7;3473:14;;;;;:::i;21867:140::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21958:41:::1;21987:4;21993:5;21958:28;:41::i;4953:286::-:0;5046:4;5063:146;222:10;5086:7;5095:113;5134:15;5095:113;;;;;;;;;;;;;;;;;222:10;5095:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5095:34:0;;;;;;;;;;;;:38;:113::i;3855:175::-;3941:4;3958:42;222:10;3982:9;3993:6;3958:9;:42::i;21179:174::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21267:3:::1;21258:5;:12;;21250:63;;;::::0;-1:-1:-1;;;21250:63:0;;10719:2:1;21250:63:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:36;10894:19;;21250:63:0::1;10517:402:1::0;21250:63:0::1;21324:13;:21:::0;21179:174::o;19112:757::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;19296:27:::1;:16:::0;19316:6:::1;19296:27;:::i;:::-;19277:46:::0;-1:-1:-1;19349:23:0::1;:12:::0;19365:6:::1;19349:23;:::i;:::-;19392:14;::::0;19334:38;;-1:-1:-1;;;;19392:14:0;::::1;;;19391:15;19383:24;;;::::0;::::1;;19461:4;19446:12;;:19;;;;:::i;:::-;19426:16;:39;;19418:72;;;::::0;-1:-1:-1;;;19418:72:0;;11126:2:1;19418:72:0::1;::::0;::::1;11108:21:1::0;11165:2;11145:18;;;11138:30;-1:-1:-1;;;11184:18:1;;;11177:51;11245:18;;19418:72:0::1;10924:345:1::0;19418:72:0::1;19540:4;19525:12;;:19;;;;:::i;:::-;19509:12;:35;;19501:68;;;::::0;-1:-1:-1;;;19501:68:0;;11126:2:1;19501:68:0::1;::::0;::::1;11108:21:1::0;11165:2;11145:18;;;11138:30;-1:-1:-1;;;11184:18:1;;;11177:51;11245:18;;19501:68:0::1;10924:345:1::0;19501:68:0::1;19580:9;:28:::0;;;19619:5:::1;:20:::0;;;19666:23:::1;:14:::0;19683:6:::1;19666:23;:::i;:::-;19650:13;:39:::0;19700:14:::1;:21:::0;;-1:-1:-1;;;;19700:21:0::1;-1:-1:-1::0;;;19700:21:0::1;::::0;;19746:12:::1;19732:11;:26:::0;19787:15:::1;19769;:33:::0;19813:5:::1;:16:::0;;;19845::::1;::::0;::::1;::::0;19700:21;;19845:16:::1;19112:757:::0;;;;:::o;22673:689::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;22828:16:::1;:31:::0;;;22870:10:::1;:20:::0;;;22901:17:::1;:33:::0;;;22945:11:::1;:22:::0;;;22980:13:::1;:33:::0;;;23024:12:::1;:31:::0;;;-1:-1:-1;23078:12:0;::::1;::::0;::::1;::::0;:29:::1;;;23106:1;23094:8;:13;;23078:29;23070:68;;;::::0;-1:-1:-1;;;23070:68:0;;11476:2:1;23070:68:0::1;::::0;::::1;11458:21:1::0;11515:2;11495:18;;;11488:30;11554:28;11534:18;;;11527:56;11600:18;;23070:68:0::1;11274:350:1::0;23070:68:0::1;23174:2;23157:13;;:19;;:41;;;;;23196:2;23180:12;;:18;;23157:41;23149:90;;;::::0;-1:-1:-1;;;23149:90:0;;11831:2:1;23149:90:0::1;::::0;::::1;11813:21:1::0;11870:2;11850:18;;;11843:30;11909:34;11889:18;;;11882:62;-1:-1:-1;;;11960:18:1;;;11953:34;12004:19;;23149:90:0::1;11629:400:1::0;23149:90:0::1;23268:17;::::0;23287:11:::1;::::0;23300:16:::1;::::0;23343:10:::1;::::0;23257:97:::1;::::0;;12265:25:1;;;12321:2;12306:18;;12299:34;;;;12349:18;;;12342:34;12407:2;12392:18;;12385:34;23257:97:0::1;::::0;12252:3:1;12237:19;23257:97:0::1;;;;;;;22673:689:::0;;;;:::o;21651:208::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;21731:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;21723:41:::1;;;::::0;::::1;;21775:21;:31:::0;;-1:-1:-1;;21775:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21822:29:::1;::::0;2041:41:1;;;21822:29:0::1;::::0;2029:2:1;2014:18;21822:29:0::1;1901:187:1::0;7331:244:0;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7420:22:0;::::1;7412:73;;;::::0;-1:-1:-1;;;7412:73:0;;12632:2:1;7412:73:0::1;::::0;::::1;12614:21:1::0;12671:2;12651:18;;;12644:30;12710:34;12690:18;;;12683:62;-1:-1:-1;;;12761:18:1;;;12754:36;12807:19;;7412:73:0::1;12430:402:1::0;7412:73:0::1;7522:6;::::0;7501:38:::1;::::0;-1:-1:-1;;;;;7501:38:0;;::::1;::::0;7522:6:::1;::::0;7501:38:::1;::::0;7522:6:::1;::::0;7501:38:::1;7550:6;:17:::0;;-1:-1:-1;;;;;;7550:17:0::1;-1:-1:-1::0;;;;;7550:17:0;;;::::1;::::0;;;::::1;::::0;;7331:244::o;20555:221::-;7088:6;;-1:-1:-1;;;;;7088:6:0;222:10;7088:22;7080:67;;;;-1:-1:-1;;;7080:67:0;;;;;;;:::i;:::-;20630:16:::1;:5:::0;20639:6:::1;20630:16;:::i;:::-;20622:24;;20689:4;20674:12;;:19;;;;:::i;:::-;20665:5;:28;;20657:83;;;::::0;-1:-1:-1;;;20657:83:0;;13039:2:1;20657:83:0::1;::::0;::::1;13021:21:1::0;13078:2;13058:18;;;13051:30;13117:34;13097:18;;;13090:62;-1:-1:-1;;;13168:18:1;;;13161:40;13218:19;;20657:83:0::1;12837:406:1::0;20657:83:0::1;20751:9;:17:::0;20555:221::o;518:179::-;576:7;;608:5;612:1;608;:5;:::i;:::-;596:17;;637:1;632;:6;;624:46;;;;-1:-1:-1;;;624:46:0;;13580:2:1;624:46:0;;;13562:21:1;13619:2;13599:18;;;13592:30;13658:29;13638:18;;;13631:57;13705:18;;624:46:0;13378:351:1;624:46:0;688:1;518:179;-1:-1:-1;;;518:179:0:o;1047:248::-;1105:7;1129:1;1134;1129:6;1125:47;;-1:-1:-1;1159:1:0;1152:8;;1125:47;1184:9;1196:5;1200:1;1196;:5;:::i;:::-;1184:17;-1:-1:-1;1229:1:0;1220:5;1224:1;1184:17;1220:5;:::i;:::-;:10;1212:56;;;;-1:-1:-1;;;1212:56:0;;13936:2:1;1212:56:0;;;13918:21:1;13975:2;13955:18;;;13948:30;14014:34;13994:18;;;13987:62;-1:-1:-1;;;14065:18:1;;;14058:31;14106:19;;1212:56:0;13734:397:1;1303:132:0;1361:7;1388:39;1392:1;1395;1388:39;;;;;;;;;;;;;;;;;:3;:39::i;29320:790::-;29389:6;29399:1;29389:11;29385:50;;29320:790;:::o;29385:50::-;29445:24;29462:6;29445:16;:24::i;:::-;29599:16;;29579:17;;29497:4;;;;29482:12;;29579:36;;;:::i;:::-;29555:60;-1:-1:-1;29628:19:0;29662:17;;29658:104;;29710:40;:21;29736:13;29710:25;:40::i;:::-;29696:54;;29658:104;29772:23;29840:11;29798:39;29819:17;;29798:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29772:79;-1:-1:-1;29876:19:0;;29872:123;;29934:15;;29926:57;;-1:-1:-1;;;;;29934:15:0;;;;29963;;29926:57;;;;29963:15;29934;29926:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29912:71:0;;-1:-1:-1;;29872:123:0;30012:90;30040:15;30070:7;:21;;;;;30081:10;30070:21;30012:90;;;14514:25:1;;;14582:14;;14575:22;14570:2;14555:18;;14548:50;14487:18;30012:90:0;;;;;;;29374:736;;;;;29320:790;:::o;705:136::-;763:7;790:43;794:1;797;790:43;;;;;;;;;;;;;;;;;:3;:43::i;6179:346::-;-1:-1:-1;;;;;6281:19:0;;6273:68;;;;-1:-1:-1;;;6273:68:0;;14811:2:1;6273:68:0;;;14793:21:1;14850:2;14830:18;;;14823:30;14889:34;14869:18;;;14862:62;-1:-1:-1;;;14940:18:1;;;14933:34;14984:19;;6273:68:0;14609:400:1;6273:68:0;-1:-1:-1;;;;;6360:21:0;;6352:68;;;;-1:-1:-1;;;6352:68:0;;15216:2:1;6352:68:0;;;15198:21:1;15255:2;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;-1:-1:-1;;;15345:18:1;;;15338:32;15387:19;;6352:68:0;15014:398:1;6352:68:0;-1:-1:-1;;;;;6433:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6485:32;;2474:25:1;;;6485:32:0;;2447:18:1;6485:32:0;;;;;;;;6179:346;;;:::o;5247:538::-;-1:-1:-1;;;;;5353:20:0;;5345:70;;;;-1:-1:-1;;;5345:70:0;;15619:2:1;5345:70:0;;;15601:21:1;15658:2;15638:18;;;15631:30;15697:34;15677:18;;;15670:62;-1:-1:-1;;;15748:18:1;;;15741:35;15793:19;;5345:70:0;15417:401:1;5345:70:0;-1:-1:-1;;;;;5434:23:0;;5426:71;;;;-1:-1:-1;;;5426:71:0;;16025:2:1;5426:71:0;;;16007:21:1;16064:2;16044:18;;;16037:30;16103:34;16083:18;;;16076:62;-1:-1:-1;;;16154:18:1;;;16147:33;16197:19;;5426:71:0;15823:399:1;5426:71:0;5590:70;5612:6;5590:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5590:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5570:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5694:20;;;;;;;:32;;5719:6;5694:24;:32::i;:::-;-1:-1:-1;;;;;5671:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5742:35;2474:25:1;;;5671:20:0;;5742:35;;;;;;2447:18:1;5742:35:0;2328:177:1;23504:3816:0;-1:-1:-1;;;;;23614:18:0;;23606:69;;;;-1:-1:-1;;;23606:69:0;;16429:2:1;23606:69:0;;;16411:21:1;16468:2;16448:18;;;16441:30;16507:34;16487:18;;;16480:62;-1:-1:-1;;;16558:18:1;;;16551:36;16604:19;;23606:69:0;16227:402:1;23606:69:0;-1:-1:-1;;;;;23694:16:0;;23686:65;;;;-1:-1:-1;;;23686:65:0;;16836:2:1;23686:65:0;;;16818:21:1;16875:2;16855:18;;;16848:30;16914:34;16894:18;;;16887:62;-1:-1:-1;;;16965:18:1;;;16958:34;17009:19;;23686:65:0;16634:400:1;23686:65:0;-1:-1:-1;;;;;23834:39:0;;23764:21;23834:39;;;:33;:39;;;;;;23764:21;;23834:39;;23829:142;;23898:14;;-1:-1:-1;;;23898:14:0;;;;23890:59;;;;-1:-1:-1;;;23890:59:0;;17241:2:1;23890:59:0;;;17223:21:1;;;17260:18;;;17253:30;17319:34;17299:18;;;17292:62;17371:18;;23890:59:0;17039:356:1;23890:59:0;23987:6;23997:1;23987:11;23983:93;;24015:28;24031:4;24037:2;24041:1;24015:15;:28::i;:::-;24058:7;;23504:3816;;;:::o;23983:93::-;24099:4;;-1:-1:-1;;;;;24099:4:0;;;24093:10;;;;24089:3168;;24120:33;24136:4;24142:2;24146:6;24120:15;:33::i;:::-;24183:12;;:24;;24200:6;24183:16;:24::i;:::-;24168:12;:39;-1:-1:-1;;;;;23504:3816:0:o;24089:3168::-;24284:8;;-1:-1:-1;;;24284:8:0;;;;24283:9;:39;;;;-1:-1:-1;;;;;;24297:25:0;;;;;;:19;:25;;;;;;;;24296:26;24283:39;:67;;;;-1:-1:-1;;;;;;24327:23:0;;;;;;:19;:23;;;;;;;;24326:24;24283:67;24265:2992;;;-1:-1:-1;;;;;24384:29:0;;;24367:14;24384:29;;;:25;:29;;;;;;;24444:31;;;;;;;;24384:29;;;;;24444:31;24508:9;;:23;;;;;24522:9;24521:10;24508:23;24504:1619;;;24552:13;24568:32;24596:3;24568:23;24579:11;;24568:6;:10;;:23;;;;:::i;:32::-;24552:48;-1:-1:-1;24628:17:0;:6;24552:48;24628:10;:17::i;:::-;24619:26;;24664:43;24680:4;24694;24701:5;24664:15;:43::i;:::-;24726:33;24742:4;24748:2;24752:6;24726:15;:33::i;:::-;24778:7;;;;;23504:3816;;;:::o;24504:1619::-;24811:9;24807:1316;;;24857:17;;24903:11;;24943:14;;24857:17;;-1:-1:-1;24903:11:0;-1:-1:-1;24943:14:0;;24939:344;;;25047:13;;25034:9;25005:39;;;;:28;:39;;;;;;:55;;25047:13;25005:55;:::i;:::-;24986:15;:74;;24978:134;;;;-1:-1:-1;;;24978:134:0;;17602:2:1;24978:134:0;;;17584:21:1;17641:2;17621:18;;;17614:30;-1:-1:-1;;;17660:18:1;;;17653:52;17722:18;;24978:134:0;17400:346:1;24978:134:0;25149:5;;25139:6;:15;;25131:54;;;;-1:-1:-1;;;25131:54:0;;17953:2:1;25131:54:0;;;17935:21:1;17992:2;17972:18;;;17965:30;18031:29;18011:18;;;18004:57;18078:18;;25131:54:0;17751:351:1;25131:54:0;25233:9;25204:39;;;;:28;:39;;;;;25246:15;25204:57;;24939:344;24807:1316;;;25367:16;;25412:10;;25449:14;;25367:16;;-1:-1:-1;25412:10:0;-1:-1:-1;25449:14:0;;25445:453;;;25528:5;;25510:15;;:23;;;;:::i;:::-;25492:15;:41;25484:71;;;;-1:-1:-1;;;25484:71:0;;18309:2:1;25484:71:0;;;18291:21:1;18348:2;18328:18;;;18321:30;-1:-1:-1;;;18367:18:1;;;18360:48;18425:18;;25484:71:0;18107:342:1;25484:71:0;25597:13;;25582:11;:28;;25574:64;;;;-1:-1:-1;;;25574:64:0;;18656:2:1;25574:64:0;;;18638:21:1;18695:2;18675:18;;;18668:30;18734:26;18714:18;;;18707:54;18778:18;;25574:64:0;18454:348:1;25574:64:0;25690:9;25665:35;;;;:24;:35;;;;;;25704:12;25665:51;;25657:83;;;;-1:-1:-1;;;25657:83:0;;19009:2:1;25657:83:0;;;18991:21:1;19048:2;19028:18;;;19021:30;-1:-1:-1;;;19067:18:1;;;19060:50;19127:18;;25657:83:0;18807:344:1;25657:83:0;25777:5;;25767:6;:15;;25759:54;;;;-1:-1:-1;;;25759:54:0;;17953:2:1;25759:54:0;;;17935:21:1;17992:2;17972:18;;;17965:30;18031:29;18011:18;;;18004:57;18078:18;;25759:54:0;17751:351:1;25759:54:0;25857:9;25832:35;;;;:24;:35;;;;;25870:12;25832:50;;25445:453;-1:-1:-1;;;;;3821:18:0;;25931:32;3821:18;;;;;;;;;;;26043:9;;26006:33;26033:6;3821:18;26006:33;:::i;:::-;:46;;25998:95;;;;-1:-1:-1;;;25998:95:0;;19358:2:1;25998:95:0;;;19340:21:1;19397:2;19377:18;;;19370:30;19436:34;19416:18;;;19409:62;-1:-1:-1;;;19487:18:1;;;19480:34;19531:19;;25998:95:0;19156:400:1;25998:95:0;25332:791;24807:1316;26238:4;26139:17;3821:18;;;;;;;;;;;26300;;26159:13;;3821:18;26276:42;;;;;;;26339:20;;;26350:9;26339:20;26335:308;;;26380:8;:15;;-1:-1:-1;;;;26380:15:0;-1:-1:-1;;;26380:15:0;;;26469:4;-1:-1:-1;3821:18:0;;;;;;;;;;;26429:46;;26494:33;26515:11;26494:20;:33::i;:::-;-1:-1:-1;26558:1:0;26546:9;:13;;;26578:10;:14;26611:8;:16;;-1:-1:-1;;;;26611:16:0;;;26335:308;26659:12;26674:30;26700:3;26674:21;:6;26685:9;26674:10;:21::i;:30::-;26659:45;-1:-1:-1;26719:18:0;26740:28;26764:3;26740:19;:6;26751:7;26740:10;:19::i;:28::-;26719:49;-1:-1:-1;26796:29:0;26807:17;26719:49;26807:4;:17;:::i;:::-;26796:6;;:10;:29::i;:::-;26787:38;;26847:9;26843:155;;;26890:10;;:20;;26905:4;26890:14;:20::i;:::-;26877:10;:33;26843:155;;;26963:9;;:19;;26977:4;26963:13;:19::i;:::-;26951:9;:31;26843:155;27014:42;27030:4;27044;27051;27014:15;:42::i;:::-;27077:14;;27073:156;;27134:4;;27112:39;;27128:4;;-1:-1:-1;;;;;27134:4:0;27140:10;27112:15;:39::i;:::-;27185:12;;:28;;27202:10;27185:16;:28::i;:::-;27170:12;:43;27073:156;24352:2905;;;;;;;24265:2992;27269:33;27285:4;27291:2;27295:6;27269:15;:33::i;849:190::-;935:7;971:12;963:6;;;;955:29;;;;-1:-1:-1;;;955:29:0;;;;;;;;:::i;:::-;-1:-1:-1;995:9:0;1007:5;1011:1;1007;:5;:::i;:::-;995:17;849:190;-1:-1:-1;;;;;849:190:0:o;22015:188::-;-1:-1:-1;;;;;22098:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22098:39:0;;;;;;;;;;22155:40;;22098:39;;:31;22155:40;;;22015:188;;:::o;1443:189::-;1529:7;1564:12;1557:5;1549:28;;;;-1:-1:-1;;;1549:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1588:9:0;1600:5;1604:1;1600;:5;:::i;27816:499::-;27906:16;;;27920:1;27906:16;;;;;;;;27882:21;;27906:16;;;;;;;;;;-1:-1:-1;27906:16:0;27882:40;;27951:4;27933;27938:1;27933:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27933:23:0;;;:7;;;;;;;;;;:23;;;;27977:15;;:22;;;-1:-1:-1;;;27977:22:0;;;;:15;;;;;:20;;:22;;;;;27933:7;;27977:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27967:4;27972:1;27967:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27967:32:0;;;:7;;;;;;;;;:32;28042:15;;28010:62;;28027:4;;28042:15;28060:11;28010:8;:62::i;:::-;28083:15;;:224;;-1:-1:-1;;;28083:224:0;;-1:-1:-1;;;;;28083:15:0;;;;:66;;:224;;28164:11;;28083:15;;28234:4;;28261;;28281:15;;28083:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27871:444;27816:499;:::o;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:160;1161:20;;1217:13;;1210:21;1200:32;;1190:60;;1246:1;1243;1236:12;1190:60;1096:160;;;:::o;1261:315::-;1326:6;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1442:9;1429:23;1461:31;1486:5;1461:31;:::i;:::-;1511:5;-1:-1:-1;1535:35:1;1566:2;1551:18;;1535:35;:::i;:::-;1525:45;;1261:315;;;;;:::o;1581:::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:52;;;1726:1;1723;1716:12;1678:52;1765:9;1752:23;1784:31;1809:5;1784:31;:::i;:::-;1834:5;1886:2;1871:18;;;;1858:32;;-1:-1:-1;;;1581:315:1:o;2510:127::-;2571:10;2566:3;2562:20;2559:1;2552:31;2602:4;2599:1;2592:15;2626:4;2623:1;2616:15;2642:275;2713:2;2707:9;2778:2;2759:13;;-1:-1:-1;;2755:27:1;2743:40;;2813:18;2798:34;;2834:22;;;2795:62;2792:88;;;2860:18;;:::i;:::-;2896:2;2889:22;2642:275;;-1:-1:-1;2642:275:1:o;2922:183::-;2982:4;3015:18;3007:6;3004:30;3001:56;;;3037:18;;:::i;:::-;-1:-1:-1;3082:1:1;3078:14;3094:4;3074:25;;2922:183::o;3110:662::-;3164:5;3217:3;3210:4;3202:6;3198:17;3194:27;3184:55;;3235:1;3232;3225:12;3184:55;3271:6;3258:20;3297:4;3321:60;3337:43;3377:2;3337:43;:::i;:::-;3321:60;:::i;:::-;3415:15;;;3501:1;3497:10;;;;3485:23;;3481:32;;;3446:12;;;;3525:15;;;3522:35;;;3553:1;3550;3543:12;3522:35;3589:2;3581:6;3577:15;3601:142;3617:6;3612:3;3609:15;3601:142;;;3683:17;;3671:30;;3721:12;;;;3634;;3601:142;;;-1:-1:-1;3761:5:1;3110:662;-1:-1:-1;;;;;;3110:662:1:o;3777:1215::-;3895:6;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;4012:9;3999:23;4041:18;4082:2;4074:6;4071:14;4068:34;;;4098:1;4095;4088:12;4068:34;4136:6;4125:9;4121:22;4111:32;;4181:7;4174:4;4170:2;4166:13;4162:27;4152:55;;4203:1;4200;4193:12;4152:55;4239:2;4226:16;4261:4;4285:60;4301:43;4341:2;4301:43;:::i;4285:60::-;4379:15;;;4461:1;4457:10;;;;4449:19;;4445:28;;;4410:12;;;;4485:19;;;4482:39;;;4517:1;4514;4507:12;4482:39;4541:11;;;;4561:217;4577:6;4572:3;4569:15;4561:217;;;4657:3;4644:17;4674:31;4699:5;4674:31;:::i;:::-;4718:18;;4594:12;;;;4756;;;;4561:217;;;4797:5;-1:-1:-1;;4840:18:1;;4827:32;;-1:-1:-1;;4871:16:1;;;4868:36;;;4900:1;4897;4890:12;4868:36;;4923:63;4978:7;4967:8;4956:9;4952:24;4923:63;:::i;:::-;4913:73;;;3777:1215;;;;;:::o;4997:456::-;5074:6;5082;5090;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;5198:9;5185:23;5217:31;5242:5;5217:31;:::i;:::-;5267:5;-1:-1:-1;5324:2:1;5309:18;;5296:32;5337:33;5296:32;5337:33;:::i;:::-;4997:456;;5389:7;;-1:-1:-1;;;5443:2:1;5428:18;;;;5415:32;;4997:456::o;5647:247::-;5706:6;5759:2;5747:9;5738:7;5734:23;5730:32;5727:52;;;5775:1;5772;5765:12;5727:52;5814:9;5801:23;5833:31;5858:5;5833:31;:::i;5899:180::-;5955:6;6008:2;5996:9;5987:7;5983:23;5979:32;5976:52;;;6024:1;6021;6014:12;5976:52;6047:26;6063:9;6047:26;:::i;6308:385::-;6394:6;6402;6410;6418;6471:3;6459:9;6450:7;6446:23;6442:33;6439:53;;;6488:1;6485;6478:12;6439:53;-1:-1:-1;;6511:23:1;;;6581:2;6566:18;;6553:32;;-1:-1:-1;6632:2:1;6617:18;;6604:32;;6683:2;6668:18;6655:32;;-1:-1:-1;6308:385:1;-1:-1:-1;6308:385:1:o;6698:388::-;6766:6;6774;6827:2;6815:9;6806:7;6802:23;6798:32;6795:52;;;6843:1;6840;6833:12;6795:52;6882:9;6869:23;6901:31;6926:5;6901:31;:::i;:::-;6951:5;-1:-1:-1;7008:2:1;6993:18;;6980:32;7021:33;6980:32;7021:33;:::i;:::-;7073:7;7063:17;;;6698:388;;;;;:::o;7091:356::-;7293:2;7275:21;;;7312:18;;;7305:30;7371:34;7366:2;7351:18;;7344:62;7438:2;7423:18;;7091:356::o;7452:127::-;7513:10;7508:3;7504:20;7501:1;7494:31;7544:4;7541:1;7534:15;7568:4;7565:1;7558:15;7584:168;7657:9;;;7688;;7705:15;;;7699:22;;7685:37;7675:71;;7726:18;;:::i;7757:380::-;7836:1;7832:12;;;;7879;;;7900:61;;7954:4;7946:6;7942:17;7932:27;;7900:61;8007:2;7999:6;7996:14;7976:18;7973:38;7970:161;;8053:10;8048:3;8044:20;8041:1;8034:31;8088:4;8085:1;8078:15;8116:4;8113:1;8106:15;7970:161;;7757:380;;;:::o;9258:127::-;9319:10;9314:3;9310:20;9307:1;9300:31;9350:4;9347:1;9340:15;9374:4;9371:1;9364:15;9390:135;9429:3;9450:17;;;9447:43;;9470:18;;:::i;:::-;-1:-1:-1;9517:1:1;9506:13;;9390:135::o;9530:217::-;9570:1;9596;9586:132;;9640:10;9635:3;9631:20;9628:1;9621:31;9675:4;9672:1;9665:15;9703:4;9700:1;9693:15;9586:132;-1:-1:-1;9732:9:1;;9530:217::o;13248:125::-;13313:9;;;13334:10;;;13331:36;;;13347:18;;:::i;19561:128::-;19628:9;;;19649:11;;;19646:37;;;19663:18;;:::i;19694:251::-;19764:6;19817:2;19805:9;19796:7;19792:23;19788:32;19785:52;;;19833:1;19830;19823:12;19785:52;19865:9;19859:16;19884:31;19909:5;19884:31;:::i;19950:980::-;20212:4;20260:3;20249:9;20245:19;20291:6;20280:9;20273:25;20317:2;20355:6;20350:2;20339:9;20335:18;20328:34;20398:3;20393:2;20382:9;20378:18;20371:31;20422:6;20457;20451:13;20488:6;20480;20473:22;20526:3;20515:9;20511:19;20504:26;;20565:2;20557:6;20553:15;20539:29;;20586:1;20596:195;20610:6;20607:1;20604:13;20596:195;;;20675:13;;-1:-1:-1;;;;;20671:39:1;20659:52;;20766:15;;;;20731:12;;;;20707:1;20625:9;20596:195;;;-1:-1:-1;;;;;;;20847:32:1;;;;20842:2;20827:18;;20820:60;-1:-1:-1;;;20911:3:1;20896:19;20889:35;20808:3;19950:980;-1:-1:-1;;;19950:980:1:o

Swarm Source

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