ETH Price: $2,923.31 (+4.63%)
 

Overview

Max Total Supply

666,000,000 $EYE

Holders

114

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Illuminati

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-22
*/

/**
 *Submitted for verification at Etherscan.io on 2023-05-11
*/
//
//https://t.me/illuminatiPortal
//  https://twitter.com/IlluminatiERC20
//     
/* 
*/

// 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 Illuminati 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; 
    address payable public DonationWallet;


    uint256 public maxWallet;
    uint256 public maxTX;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDonationFee;
    uint256 public sellDonationFee;


    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 updateDonationWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

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

    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("Illuminati", "$EYE") { 
        marketingWallet = payable(0x86acc27cebc69Acb6778cAE39C2724CA3591E20a); 
        DonationWallet = payable(0x86acc27cebc69Acb6778cAE39C2724CA3591E20a); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        
        buyMarketingFees = 2;
        sellMarketingFees = 2;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDonationFee = 2;
        sellDonationFee = 2;


        
        totalBuyFees = buyMarketingFees.add(buyDonationFee);
        totalSellFees = sellMarketingFees.add(sellDonationFee);

        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 = (666_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 enableTrading(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 setDonationWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        DonationWallet = payable(wallet);
        emit updateDonationWallet(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 updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 DonationBuy, uint256 DonationSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDonationFee = DonationBuy;
        sellDonationFee = DonationSell;


        totalSellFees = sellMarketingFees.add(sellDonationFee);
        totalBuyFees = buyMarketingFees.add(buyDonationFee);


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

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

    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;
        uint256 DonationFee;
 

        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];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                DonationFee = sellDonationFee;
 

                 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;
                DonationFee = buyDonationFee;
 

               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.add(DonationFee);

            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.add(sellDonationFee) + buyMarketingFees.add(buyDonationFee);

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

        emit SendDividends(
            marketingPayout + DonationPayout,
            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"},{"indexed":false,"internalType":"uint256","name":"buyDonationFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDonationFee","type":"uint256"}],"name":"UpdateFees","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":"updateDonationWallet","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":"DonationWallet","outputs":[{"internalType":"address payable","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":"buyDonationFee","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":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"enableTrading","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDonationFee","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":"wallet","type":"address"}],"name":"setDonationWallet","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":[{"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"},{"internalType":"uint256","name":"DonationBuy","type":"uint256"},{"internalType":"uint256","name":"DonationSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560016009819055600a8190556018805460ff19908116909155601c80549091169091179055601e6024553480156200005057600080fd5b506040518060400160405280600a815260200169496c6c756d696e61746960b01b815250604051806040016040528060048152602001632445594560e01b8152508160039081620000a29190620006c0565b506004620000b18282620006c0565b5050506000620000c66200045360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80547386acc27cebc69acb6778cae39c2724ca3591e20a6001600160a01b03199182168117909255600e805490911690911790556002601481905560128190556000601581905560135560168190556017819055737a250d5630b4cf539739df2c5dacb4c659f2488d9062000198908062000457602090811b6200190a17901c565b600c81905550620001bc6017546012546200045760201b6200190a1790919060201c565b600b55600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f91906200078c565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c891906200078c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c91906200078c565b600780546001600160a01b0319166001600160a01b0392909216918217905562000368906001620004c7565b306000908152601960205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b0226e6fc58012234da000000620003dc620003d56005546001600160a01b031690565b826200051b565b6103e8600254620003ee9190620007b7565b6011556001601b60006200040a6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601b90925290208054909116600117905550620007fc9050565b3390565b600080620004668385620007da565b905083811015620004be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005735760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004b5565b6200058f816002546200045760201b6200190a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005c29183906200190a62000457821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200064757607f821691505b6020821081036200066857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061757600081815260208120601f850160051c81016020861015620006975750805b601f850160051c820191505b81811015620006b857828155600101620006a3565b505050505050565b81516001600160401b03811115620006dc57620006dc6200061c565b620006f481620006ed845462000632565b846200066e565b602080601f8311600181146200072c5760008415620007135750858301515b600019600386901b1c1916600185901b178555620006b8565b600085815260208120601f198616915b828110156200075d578886015182559484019460019091019084016200073c565b50858210156200077c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200079f57600080fd5b81516001600160a01b0381168114620004be57600080fd5b600082620007d557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620004c157634e487b7160e01b600052601160045260246000fd5b612d13806200080c6000396000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063b4942988116100f7578063e14a93d611610095578063ebae7c1c1161006f578063ebae7c1c146109b5578063f2fde38b146109cb578063f8b45b05146109eb578063fc6b151c14610a0157600080fd5b8063e14a93d614610969578063e2f4560514610989578063e71dc3f51461099f57600080fd5b8063d5e37251116100d1578063d5e37251146108cd578063d6a51466146108ed578063dbe47fe91461090d578063dd62ed3e1461092357600080fd5b8063b494298814610867578063b62496f51461087d578063b74e3b11146108ad57600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107f1578063a457c2d714610811578063a9059cbb14610831578063adb873bd1461085157600080fd5b806395451c29146107a657806395d89b41146107bc578063992c58e4146107d157600080fd5b806375f0a874116101a057806375f0a874146107325780637fdde05c146107525780638c3c82b2146107725780638da5cb5b1461078857600080fd5b806370a08231146106c7578063715018a6146106fd57806375829def1461071257600080fd5b806349bd5a5e116102a05780635a96cdd71161023e57806366236b4a1161021857806366236b4a1461065c578063679ca6e91461067c5780636a42b8f81461069c5780637088fb7f146106b257600080fd5b80635a96cdd7146105fc5780635d098b381461061c5780635eee4bae1461063c57600080fd5b80634ada218b1161027a5780634ada218b146105765780634fbee193146105975780635124f874146105d0578063536bcd8a146105e657600080fd5b806349bd5a5e146105225780634a62bb65146105425780634a74bb021461055c57600080fd5b80631694505e1161030d5780632307b441116102e75780632307b441146104a657806323b872dd146104c6578063313ce567146104e6578063395093511461050257600080fd5b80631694505e1461045157806318160ddd146104715780631d7b1fb41461049057600080fd5b806303fd2a451461036057806305ca5f081461039d57806306fdde03146103bf57806308dfe8a5146103e15780630923160214610401578063095ea7b31461042157600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50600854610380906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a957600080fd5b506103bd6103b8366004612718565b610a21565b005b3480156103cb57600080fd5b506103d4610af2565b6040516103949190612731565b3480156103ed57600080fd5b506103bd6103fc3660046127a9565b610b84565b34801561040d57600080fd5b506103bd61041c366004612718565b610c0d565b34801561042d57600080fd5b5061044161043c3660046127de565b610c9c565b6040519015158152602001610394565b34801561045d57600080fd5b50600654610380906001600160a01b031681565b34801561047d57600080fd5b506002545b604051908152602001610394565b34801561049c57600080fd5b5061048260245481565b3480156104b257600080fd5b506103bd6104c13660046128e0565b610cb3565b3480156104d257600080fd5b506104416104e13660046129a2565b610e0b565b3480156104f257600080fd5b5060405160128152602001610394565b34801561050e57600080fd5b5061044161051d3660046127de565b610e74565b34801561052e57600080fd5b50600754610380906001600160a01b031681565b34801561054e57600080fd5b50601c546104419060ff1681565b34801561056857600080fd5b506018546104419060ff1681565b34801561058257600080fd5b5060085461044190600160a81b900460ff1681565b3480156105a357600080fd5b506104416105b23660046129e3565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105dc57600080fd5b5061048260145481565b3480156105f257600080fd5b5061048260175481565b34801561060857600080fd5b506103bd6106173660046129e3565b610eaa565b34801561062857600080fd5b506103bd6106373660046129e3565b610f41565b34801561064857600080fd5b506103bd610657366004612718565b610fd1565b34801561066857600080fd5b506103bd610677366004612718565b611013565b34801561068857600080fd5b506103bd610697366004612a00565b6110c4565b3480156106a857600080fd5b5061048260215481565b3480156106be57600080fd5b506103bd611101565b3480156106d357600080fd5b506104826106e23660046129e3565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506103bd61115e565b34801561071e57600080fd5b506103bd61072d3660046129e3565b6111d2565b34801561073e57600080fd5b50600d54610380906001600160a01b031681565b34801561075e57600080fd5b506103bd61076d3660046127a9565b611243565b34801561077e57600080fd5b5061048260235481565b34801561079457600080fd5b506005546001600160a01b0316610380565b3480156107b257600080fd5b5061048260125481565b3480156107c857600080fd5b506103d4611298565b3480156107dd57600080fd5b506103bd6107ec366004612a1b565b6112a7565b3480156107fd57600080fd5b506103bd61080c3660046127a9565b611446565b34801561081d57600080fd5b5061044161082c3660046127de565b61147a565b34801561083d57600080fd5b5061044161084c3660046127de565b6114c9565b34801561085d57600080fd5b5061048260135481565b34801561087357600080fd5b5061048260205481565b34801561088957600080fd5b506104416108983660046129e3565b601a6020526000908152604090205460ff1681565b3480156108b957600080fd5b506103bd6108c8366004612718565b6114d6565b3480156108d957600080fd5b506103bd6108e8366004612a00565b611566565b3480156108f957600080fd5b50600e54610380906001600160a01b031681565b34801561091957600080fd5b5061048260165481565b34801561092f57600080fd5b5061048261093e366004612a5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b506103bd610984366004612a97565b6115e8565b34801561099557600080fd5b5061048260115481565b3480156109ab57600080fd5b5061048260155481565b3480156109c157600080fd5b5061048260105481565b3480156109d757600080fd5b506103bd6109e63660046129e3565b61176a565b3480156109f757600080fd5b50610482600f5481565b348015610a0d57600080fd5b506103bd610a1c366004612718565b611855565b6005546001600160a01b03163314610a545760405162461bcd60e51b8152600401610a4b90612ac9565b60405180910390fd5b610a6681670de0b6b3a7640000612b14565b90506000610a81600954600a5461190a90919063ffffffff16565b90506000610aa482610a9e600a548661197090919063ffffffff16565b906119f2565b90506000610ac183610a9e6009548761197090919063ffffffff16565b9050610acc84611a34565b600a54610ad99083611bee565b600a55600954610ae99082611bee565b60095550505050565b606060038054610b0190612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d90612b2b565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610c375760405162461bcd60e51b8152600401610a4b90612ac9565b6032811015610c885760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610a4b565b610c9681633b9aca00612b14565b601d5550565b6000610ca9338484611c30565b5060015b92915050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610a4b90612ac9565b8051825114610d2e5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a4b565b60c882511115610d8b5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610a4b565b60005b8251811015610e06576000838281518110610dab57610dab612b65565b602002602001015190506000838381518110610dc957610dc9612b65565b6020026020010151670de0b6b3a7640000610de49190612b14565b9050610df1338383611d55565b50508080610dfe90612b7b565b915050610d8e565b505050565b6000610e18848484611ed8565b610e6a8433610e6585604051806060016040528060288152602001612c6b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061250a565b611c30565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca9918590610e65908661190a565b6005546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f2a088da61c87ce48f816be3118449d451e4e587ef240986420a8763855c3e07b91015b60405180910390a150565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610f36565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610a4b90612ac9565b61100d81670de0b6b3a7640000612b14565b60115550565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610a4b90612ac9565b61104f81670de0b6b3a7640000612b14565b90506103e86002546110619190612b94565b8110156110bf5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610a4b565b601055565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a4b90612ac9565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610a4b90612ac9565b6040514790339082156108fc029083906000818181858888f1935050505015801561115a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111885760405162461bcd60e51b8152600401610a4b90612ac9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b9093529220805490911690911790556112408161176a565b50565b6005546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b606060048054610b0190612b2b565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610a4b90612ac9565b6014869055601584905560128590556013839055601682905560178190556112f9858261190a565b600b5560165460145461130b9161190a565b600c5560018411801590611320575060018311155b61136c5760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610a4b565b6004600b541115801561138257506004600c5411155b6113da5760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610a4b565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146114705760405162461bcd60e51b8152600401610a4b90612ac9565b61115a8282612544565b6000610ca93384610e6585604051806060016040528060258152602001612cb9602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610ca9338484611ed8565b6005546001600160a01b031633146115005760405162461bcd60e51b8152600401610a4b90612ac9565b61012c8111156115615760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610a4b565b602455565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610a4b90612ac9565b60185481151560ff9091161515036115a757600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610f36565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610a4b90612ac9565b61162483670de0b6b3a7640000612b14565b925061163882670de0b6b3a7640000612b14565b600854909250600160a81b900460ff161561165257600080fd5b6103e86002546116629190612b94565b8310156116a95760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b6103e86002546116b99190612b94565b8210156117005760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b600f839055601082905561171884633b9aca00612b14565b601d556008805460ff60a81b1916600160a81b179055436020554260235560218190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610a4b90612ac9565b61189181670de0b6b3a7640000612b14565b90506103e86002546118a39190612b94565b8110156119055760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610a4b565b600f55565b6000806119178385612bb6565b9050838110156119695760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a4b565b9392505050565b60008260000361198257506000610cad565b600061198e8385612b14565b90508261199b8583612b94565b146119695760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a4b565b600061196983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612598565b80600003611a3f5750565b611a48816125c6565b6016546014546001918291600091611a60919061190a565b601754601254611a6f9161190a565b611a799190612bb6565b905060008115611a9057611a8d47836119f2565b90505b600081611aaa60125460145461190a90919063ffffffff16565b611ab49190612b14565b9050600082611ad060175460165461190a90919063ffffffff16565b611ada9190612b14565b90508115611b3a57600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50909650505b8015611b9857600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611b8d576040519150601f19603f3d011682016040523d82523d6000602084013e611b92565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9611bc38284612bb6565b878015611bcd5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061196983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061250a565b6001600160a01b038316611c925760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db95760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4b565b611e5881604051806060016040528060268152602001612c93602691396001600160a01b038616600090815260208190526040902054919061250a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e87908261190a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d48565b6001600160a01b038316611f3d5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6001600160a01b038216611f9f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b0383166000908152601b60205260408120548190819060ff1661201c57600854600160a81b900460ff1661201c5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610a4b565b836000036120385761203086866000611d55565b505050505050565b6008546001600160a01b039081169086160361207157612059868686611d55565b6002546120669085611bee565b600255505050505050565b600854600160a01b900460ff161580156120a457506001600160a01b03861660009081526019602052604090205460ff16155b80156120c957506001600160a01b03851660009081526019602052604090205460ff16155b156124ff576001600160a01b0385166000908152601a602052604090205460ff1680156121db57601254601354601754601c54929650909450925060ff16156121d657602454326000908152601f60205260409020546121299190612bb6565b4210156121715760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610a4b565b6010548511156121c35760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601f602052604090204290555b6123d9565b601454601554601654601c54929650909450925060ff1615612357576021546023546122079190612bb6565b421161224a5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610a4b565b601d543a111561229c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a4b565b326000908152601e60205260409020544390036122f25760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610a4b565b6010548511156123445760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601e602052604090204390555b6001600160a01b038616600090815260208190526040902054600f5461237d8783612bb6565b11156123d75760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a4b565b505b60006123e5858461190a565b30600090815260208190526040902054601154919250908110801590819061240a5750835b15612456576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061243d81611a34565b506001600a8190556009556008805460ff60a01b191690555b60006124676064610a9e8b87611970565b9050600061247a6064610a9e8c8b611970565b90506124906124898284612bb6565b8b90611bee565b995085156124ad576009546124a5908361190a565b6009556124be565b600a546124ba908361190a565b600a555b6124c98c3084611d55565b80156124f8576008546124e7908d906001600160a01b031683611d55565b6002546124f49082611bee565b6002555b5050505050505b612030868686611d55565b6000818484111561252e5760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612bc9565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836125b95760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612b94565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125fb576125fb612b65565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126789190612bdc565b8160018151811061268b5761268b612b65565b6001600160a01b0392831660209182029290920101526006546126b19130911684611c30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126ea908590600090869030904290600401612bf9565b600060405180830381600087803b15801561270457600080fd5b505af1158015612030573d6000803e3d6000fd5b60006020828403121561272a57600080fd5b5035919050565b600060208083528351808285015260005b8181101561275e57858101830151858201604001528201612742565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461124057600080fd5b803580151581146127a457600080fd5b919050565b600080604083850312156127bc57600080fd5b82356127c78161277f565b91506127d560208401612794565b90509250929050565b600080604083850312156127f157600080fd5b82356127fc8161277f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128495761284961280a565b604052919050565b600067ffffffffffffffff82111561286b5761286b61280a565b5060051b60200190565b600082601f83011261288657600080fd5b8135602061289b61289683612851565b612820565b82815260059290921b840181019181810190868411156128ba57600080fd5b8286015b848110156128d557803583529183019183016128be565b509695505050505050565b600080604083850312156128f357600080fd5b823567ffffffffffffffff8082111561290b57600080fd5b818501915085601f83011261291f57600080fd5b8135602061292f61289683612851565b82815260059290921b8401810191818101908984111561294e57600080fd5b948201945b838610156129755785356129668161277f565b82529482019490820190612953565b9650508601359250508082111561298b57600080fd5b5061299885828601612875565b9150509250929050565b6000806000606084860312156129b757600080fd5b83356129c28161277f565b925060208401356129d28161277f565b929592945050506040919091013590565b6000602082840312156129f557600080fd5b81356119698161277f565b600060208284031215612a1257600080fd5b61196982612794565b60008060008060008060c08789031215612a3457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612a7157600080fd5b8235612a7c8161277f565b91506020830135612a8c8161277f565b809150509250929050565b60008060008060808587031215612aad57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cad57610cad612afe565b600181811c90821680612b3f57607f821691505b602082108103612b5f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8d57612b8d612afe565b5060010190565b600082612bb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cad57610cad612afe565b81810381811115610cad57610cad612afe565b600060208284031215612bee57600080fd5b81516119698161277f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c495784516001600160a01b031683529383019391830191600101612c24565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fa00efd8e4b3e6508307dec12908c74b4adc6393305514869d0059d77275e3064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063b4942988116100f7578063e14a93d611610095578063ebae7c1c1161006f578063ebae7c1c146109b5578063f2fde38b146109cb578063f8b45b05146109eb578063fc6b151c14610a0157600080fd5b8063e14a93d614610969578063e2f4560514610989578063e71dc3f51461099f57600080fd5b8063d5e37251116100d1578063d5e37251146108cd578063d6a51466146108ed578063dbe47fe91461090d578063dd62ed3e1461092357600080fd5b8063b494298814610867578063b62496f51461087d578063b74e3b11146108ad57600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107f1578063a457c2d714610811578063a9059cbb14610831578063adb873bd1461085157600080fd5b806395451c29146107a657806395d89b41146107bc578063992c58e4146107d157600080fd5b806375f0a874116101a057806375f0a874146107325780637fdde05c146107525780638c3c82b2146107725780638da5cb5b1461078857600080fd5b806370a08231146106c7578063715018a6146106fd57806375829def1461071257600080fd5b806349bd5a5e116102a05780635a96cdd71161023e57806366236b4a1161021857806366236b4a1461065c578063679ca6e91461067c5780636a42b8f81461069c5780637088fb7f146106b257600080fd5b80635a96cdd7146105fc5780635d098b381461061c5780635eee4bae1461063c57600080fd5b80634ada218b1161027a5780634ada218b146105765780634fbee193146105975780635124f874146105d0578063536bcd8a146105e657600080fd5b806349bd5a5e146105225780634a62bb65146105425780634a74bb021461055c57600080fd5b80631694505e1161030d5780632307b441116102e75780632307b441146104a657806323b872dd146104c6578063313ce567146104e6578063395093511461050257600080fd5b80631694505e1461045157806318160ddd146104715780631d7b1fb41461049057600080fd5b806303fd2a451461036057806305ca5f081461039d57806306fdde03146103bf57806308dfe8a5146103e15780630923160214610401578063095ea7b31461042157600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50600854610380906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a957600080fd5b506103bd6103b8366004612718565b610a21565b005b3480156103cb57600080fd5b506103d4610af2565b6040516103949190612731565b3480156103ed57600080fd5b506103bd6103fc3660046127a9565b610b84565b34801561040d57600080fd5b506103bd61041c366004612718565b610c0d565b34801561042d57600080fd5b5061044161043c3660046127de565b610c9c565b6040519015158152602001610394565b34801561045d57600080fd5b50600654610380906001600160a01b031681565b34801561047d57600080fd5b506002545b604051908152602001610394565b34801561049c57600080fd5b5061048260245481565b3480156104b257600080fd5b506103bd6104c13660046128e0565b610cb3565b3480156104d257600080fd5b506104416104e13660046129a2565b610e0b565b3480156104f257600080fd5b5060405160128152602001610394565b34801561050e57600080fd5b5061044161051d3660046127de565b610e74565b34801561052e57600080fd5b50600754610380906001600160a01b031681565b34801561054e57600080fd5b50601c546104419060ff1681565b34801561056857600080fd5b506018546104419060ff1681565b34801561058257600080fd5b5060085461044190600160a81b900460ff1681565b3480156105a357600080fd5b506104416105b23660046129e3565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105dc57600080fd5b5061048260145481565b3480156105f257600080fd5b5061048260175481565b34801561060857600080fd5b506103bd6106173660046129e3565b610eaa565b34801561062857600080fd5b506103bd6106373660046129e3565b610f41565b34801561064857600080fd5b506103bd610657366004612718565b610fd1565b34801561066857600080fd5b506103bd610677366004612718565b611013565b34801561068857600080fd5b506103bd610697366004612a00565b6110c4565b3480156106a857600080fd5b5061048260215481565b3480156106be57600080fd5b506103bd611101565b3480156106d357600080fd5b506104826106e23660046129e3565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506103bd61115e565b34801561071e57600080fd5b506103bd61072d3660046129e3565b6111d2565b34801561073e57600080fd5b50600d54610380906001600160a01b031681565b34801561075e57600080fd5b506103bd61076d3660046127a9565b611243565b34801561077e57600080fd5b5061048260235481565b34801561079457600080fd5b506005546001600160a01b0316610380565b3480156107b257600080fd5b5061048260125481565b3480156107c857600080fd5b506103d4611298565b3480156107dd57600080fd5b506103bd6107ec366004612a1b565b6112a7565b3480156107fd57600080fd5b506103bd61080c3660046127a9565b611446565b34801561081d57600080fd5b5061044161082c3660046127de565b61147a565b34801561083d57600080fd5b5061044161084c3660046127de565b6114c9565b34801561085d57600080fd5b5061048260135481565b34801561087357600080fd5b5061048260205481565b34801561088957600080fd5b506104416108983660046129e3565b601a6020526000908152604090205460ff1681565b3480156108b957600080fd5b506103bd6108c8366004612718565b6114d6565b3480156108d957600080fd5b506103bd6108e8366004612a00565b611566565b3480156108f957600080fd5b50600e54610380906001600160a01b031681565b34801561091957600080fd5b5061048260165481565b34801561092f57600080fd5b5061048261093e366004612a5e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b506103bd610984366004612a97565b6115e8565b34801561099557600080fd5b5061048260115481565b3480156109ab57600080fd5b5061048260155481565b3480156109c157600080fd5b5061048260105481565b3480156109d757600080fd5b506103bd6109e63660046129e3565b61176a565b3480156109f757600080fd5b50610482600f5481565b348015610a0d57600080fd5b506103bd610a1c366004612718565b611855565b6005546001600160a01b03163314610a545760405162461bcd60e51b8152600401610a4b90612ac9565b60405180910390fd5b610a6681670de0b6b3a7640000612b14565b90506000610a81600954600a5461190a90919063ffffffff16565b90506000610aa482610a9e600a548661197090919063ffffffff16565b906119f2565b90506000610ac183610a9e6009548761197090919063ffffffff16565b9050610acc84611a34565b600a54610ad99083611bee565b600a55600954610ae99082611bee565b60095550505050565b606060038054610b0190612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d90612b2b565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610c375760405162461bcd60e51b8152600401610a4b90612ac9565b6032811015610c885760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f77203530000000000000006044820152606401610a4b565b610c9681633b9aca00612b14565b601d5550565b6000610ca9338484611c30565b5060015b92915050565b6005546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610a4b90612ac9565b8051825114610d2e5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a4b565b60c882511115610d8b5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610a4b565b60005b8251811015610e06576000838281518110610dab57610dab612b65565b602002602001015190506000838381518110610dc957610dc9612b65565b6020026020010151670de0b6b3a7640000610de49190612b14565b9050610df1338383611d55565b50508080610dfe90612b7b565b915050610d8e565b505050565b6000610e18848484611ed8565b610e6a8433610e6585604051806060016040528060288152602001612c6b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061250a565b611c30565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca9918590610e65908661190a565b6005546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f2a088da61c87ce48f816be3118449d451e4e587ef240986420a8763855c3e07b91015b60405180910390a150565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610f36565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610a4b90612ac9565b61100d81670de0b6b3a7640000612b14565b60115550565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610a4b90612ac9565b61104f81670de0b6b3a7640000612b14565b90506103e86002546110619190612b94565b8110156110bf5760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610a4b565b601055565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a4b90612ac9565b601c805460ff1916911515919091179055565b6005546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610a4b90612ac9565b6040514790339082156108fc029083906000818181858888f1935050505015801561115a573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111885760405162461bcd60e51b8152600401610a4b90612ac9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111fc5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b9093529220805490911690911790556112408161176a565b50565b6005546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b606060048054610b0190612b2b565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610a4b90612ac9565b6014869055601584905560128590556013839055601682905560178190556112f9858261190a565b600b5560165460145461130b9161190a565b600c5560018411801590611320575060018311155b61136c5760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f74206578636565642031250000000000006044820152606401610a4b565b6004600b541115801561138257506004600c5411155b6113da5760405162461bcd60e51b815260206004820152602360248201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60448201526220342560e81b6064820152608401610a4b565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146114705760405162461bcd60e51b8152600401610a4b90612ac9565b61115a8282612544565b6000610ca93384610e6585604051806060016040528060258152602001612cb9602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061250a565b6000610ca9338484611ed8565b6005546001600160a01b031633146115005760405162461bcd60e51b8152600401610a4b90612ac9565b61012c8111156115615760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610a4b565b602455565b6005546001600160a01b031633146115905760405162461bcd60e51b8152600401610a4b90612ac9565b60185481151560ff9091161515036115a757600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610f36565b6005546001600160a01b031633146116125760405162461bcd60e51b8152600401610a4b90612ac9565b61162483670de0b6b3a7640000612b14565b925061163882670de0b6b3a7640000612b14565b600854909250600160a81b900460ff161561165257600080fd5b6103e86002546116629190612b94565b8310156116a95760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b6103e86002546116b99190612b94565b8210156117005760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610a4b565b600f839055601082905561171884633b9aca00612b14565b601d556008805460ff60a81b1916600160a81b179055436020554260235560218190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610a4b90612ac9565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610a4b90612ac9565b61189181670de0b6b3a7640000612b14565b90506103e86002546118a39190612b94565b8110156119055760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610a4b565b600f55565b6000806119178385612bb6565b9050838110156119695760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a4b565b9392505050565b60008260000361198257506000610cad565b600061198e8385612b14565b90508261199b8583612b94565b146119695760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a4b565b600061196983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612598565b80600003611a3f5750565b611a48816125c6565b6016546014546001918291600091611a60919061190a565b601754601254611a6f9161190a565b611a799190612bb6565b905060008115611a9057611a8d47836119f2565b90505b600081611aaa60125460145461190a90919063ffffffff16565b611ab49190612b14565b9050600082611ad060175460165461190a90919063ffffffff16565b611ada9190612b14565b90508115611b3a57600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611b2f576040519150601f19603f3d011682016040523d82523d6000602084013e611b34565b606091505b50909650505b8015611b9857600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611b8d576040519150601f19603f3d011682016040523d82523d6000602084013e611b92565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9611bc38284612bb6565b878015611bcd5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061196983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061250a565b6001600160a01b038316611c925760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db95760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4b565b611e5881604051806060016040528060268152602001612c93602691396001600160a01b038616600090815260208190526040902054919061250a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e87908261190a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611d48565b6001600160a01b038316611f3d5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610a4b565b6001600160a01b038216611f9f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4b565b6001600160a01b0383166000908152601b60205260408120548190819060ff1661201c57600854600160a81b900460ff1661201c5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610a4b565b836000036120385761203086866000611d55565b505050505050565b6008546001600160a01b039081169086160361207157612059868686611d55565b6002546120669085611bee565b600255505050505050565b600854600160a01b900460ff161580156120a457506001600160a01b03861660009081526019602052604090205460ff16155b80156120c957506001600160a01b03851660009081526019602052604090205460ff16155b156124ff576001600160a01b0385166000908152601a602052604090205460ff1680156121db57601254601354601754601c54929650909450925060ff16156121d657602454326000908152601f60205260409020546121299190612bb6565b4210156121715760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610a4b565b6010548511156121c35760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601f602052604090204290555b6123d9565b601454601554601654601c54929650909450925060ff1615612357576021546023546122079190612bb6565b421161224a5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610a4b565b601d543a111561229c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a4b565b326000908152601e60205260409020544390036122f25760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610a4b565b6010548511156123445760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610a4b565b326000908152601e602052604090204390555b6001600160a01b038616600090815260208190526040902054600f5461237d8783612bb6565b11156123d75760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a4b565b505b60006123e5858461190a565b30600090815260208190526040902054601154919250908110801590819061240a5750835b15612456576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061243d81611a34565b506001600a8190556009556008805460ff60a01b191690555b60006124676064610a9e8b87611970565b9050600061247a6064610a9e8c8b611970565b90506124906124898284612bb6565b8b90611bee565b995085156124ad576009546124a5908361190a565b6009556124be565b600a546124ba908361190a565b600a555b6124c98c3084611d55565b80156124f8576008546124e7908d906001600160a01b031683611d55565b6002546124f49082611bee565b6002555b5050505050505b612030868686611d55565b6000818484111561252e5760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612bc9565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836125b95760405162461bcd60e51b8152600401610a4b9190612731565b50600061253b8486612b94565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125fb576125fb612b65565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126789190612bdc565b8160018151811061268b5761268b612b65565b6001600160a01b0392831660209182029290920101526006546126b19130911684611c30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126ea908590600090869030904290600401612bf9565b600060405180830381600087803b15801561270457600080fd5b505af1158015612030573d6000803e3d6000fd5b60006020828403121561272a57600080fd5b5035919050565b600060208083528351808285015260005b8181101561275e57858101830151858201604001528201612742565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461124057600080fd5b803580151581146127a457600080fd5b919050565b600080604083850312156127bc57600080fd5b82356127c78161277f565b91506127d560208401612794565b90509250929050565b600080604083850312156127f157600080fd5b82356127fc8161277f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128495761284961280a565b604052919050565b600067ffffffffffffffff82111561286b5761286b61280a565b5060051b60200190565b600082601f83011261288657600080fd5b8135602061289b61289683612851565b612820565b82815260059290921b840181019181810190868411156128ba57600080fd5b8286015b848110156128d557803583529183019183016128be565b509695505050505050565b600080604083850312156128f357600080fd5b823567ffffffffffffffff8082111561290b57600080fd5b818501915085601f83011261291f57600080fd5b8135602061292f61289683612851565b82815260059290921b8401810191818101908984111561294e57600080fd5b948201945b838610156129755785356129668161277f565b82529482019490820190612953565b9650508601359250508082111561298b57600080fd5b5061299885828601612875565b9150509250929050565b6000806000606084860312156129b757600080fd5b83356129c28161277f565b925060208401356129d28161277f565b929592945050506040919091013590565b6000602082840312156129f557600080fd5b81356119698161277f565b600060208284031215612a1257600080fd5b61196982612794565b60008060008060008060c08789031215612a3457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612a7157600080fd5b8235612a7c8161277f565b91506020830135612a8c8161277f565b809150509250929050565b60008060008060808587031215612aad57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cad57610cad612afe565b600181811c90821680612b3f57607f821691505b602082108103612b5f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8d57612b8d612afe565b5060010190565b600082612bb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cad57610cad612afe565b81810381811115610cad57610cad612afe565b600060208284031215612bee57600080fd5b81516119698161277f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c495784516001600160a01b031683529383019391830191600101612c24565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fa00efd8e4b3e6508307dec12908c74b4adc6393305514869d0059d77275e3064736f6c63430008110033

Deployed Bytecode Sourcemap

15518:15793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15685:64;;;;;;;;;;-1:-1:-1;15685:64:0;;;;-1:-1:-1;;;;;15685:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15685:64:0;;;;;;;;29187:443;;;;;;;;;;-1:-1:-1;29187:443:0;;;;;:::i;:::-;;:::i;:::-;;3401:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20730:181::-;;;;;;;;;;-1:-1:-1;20730:181:0;;;;;:::i;:::-;;:::i;21633:166::-;;;;;;;;;;-1:-1:-1;21633:166:0;;;;;:::i;:::-;;:::i;4315:169::-;;;;;;;;;;-1:-1:-1;4315:169:0;;;;;:::i;:::-;;:::i;:::-;;;2066:14:1;;2059:22;2041:41;;2029:2;2014:18;4315:169:0;1901:187:1;15600:41:0;;;;;;;;;;-1:-1:-1;15600:41:0;;;;-1:-1:-1;;;;;15600:41:0;;;3722:108;;;;;;;;;;-1:-1:-1;3810:12:0;;3722:108;;;2474:25:1;;;2462:2;2447:18;3722:108:0;2328:177:1;17049:33:0;;;;;;;;;;;;;;;;30747:561;;;;;;;;;;-1:-1:-1;30747:561:0;;;;;:::i;:::-;;:::i;4492:345::-;;;;;;;;;;-1:-1:-1;4492:345:0;;;;;:::i;:::-;;:::i;19386:93::-;;;;;;;;;;-1:-1:-1;19386:93:0;;19469:2;5600:36:1;;5588:2;5573:18;19386:93:0;5458:184:1;4845:218:0;;;;;;;;;;-1:-1:-1;4845:218:0;;;;;:::i;:::-;;:::i;15650:28::-;;;;;;;;;;-1:-1:-1;15650:28:0;;;;-1:-1:-1;;;;;15650:28:0;;;16636:33;;;;;;;;;;-1:-1:-1;16636:33:0;;;;;;;;16388:41;;;;;;;;;;-1:-1:-1;16388:41:0;;;;;;;;15784:34;;;;;;;;;;-1:-1:-1;15784:34:0;;;;-1:-1:-1;;;15784:34:0;;;;;;23952:126;;;;;;;;;;-1:-1:-1;23952:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24042:28:0;24018:4;24042:28;;;:19;:28;;;;;;;;;23952:126;16241:31;;;;;;;;;;;;;;;;16347:30;;;;;;;;;;;;;;;;20512:202;;;;;;;;;;-1:-1:-1;20512:202:0;;;;;:::i;:::-;;:::i;20299:205::-;;;;;;;;;;-1:-1:-1;20299:205:0;;;;;:::i;:::-;;:::i;22151:120::-;;;;;;;;;;-1:-1:-1;22151:120:0;;;;;:::i;:::-;;:::i;21416:209::-;;;;;;;;;;-1:-1:-1;21416:209:0;;;;;:::i;:::-;;:::i;21074:99::-;;;;;;;;;;-1:-1:-1;21074:99:0;;;;;:::i;:::-;;:::i;16951:20::-;;;;;;;;;;;;;;;;21997:146;;;;;;;;;;;;;:::i;3838:127::-;;;;;;;;;;-1:-1:-1;3838:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3939:18:0;3912:7;3939:18;;;;;;;;;;;;3838:127;7293:148;;;;;;;;;;;;;:::i;22839:212::-;;;;;;;;;;-1:-1:-1;22839:212:0;;;;;:::i;:::-;;:::i;15977:38::-;;;;;;;;;;-1:-1:-1;15977:38:0;;;;-1:-1:-1;;;;;15977:38:0;;;20919:147;;;;;;;;;;-1:-1:-1;20919:147:0;;;;;:::i;:::-;;:::i;17011:30::-;;;;;;;;;;;;;;;;7079:79;;;;;;;;;;-1:-1:-1;7144:6:0;;-1:-1:-1;;;;;7144:6:0;7079:79;;16169:32;;;;;;;;;;;;;;;;3509:104;;;;;;;;;;;;;:::i;23059:885::-;;;;;;;;;;-1:-1:-1;23059:885:0;;;;;:::i;:::-;;:::i;22495:140::-;;;;;;;;;;-1:-1:-1;22495:140:0;;;;;:::i;:::-;;:::i;5071:286::-;;;;;;;;;;-1:-1:-1;5071:286:0;;;;;:::i;:::-;;:::i;3973:175::-;;;;;;;;;;-1:-1:-1;3973:175:0;;;;;:::i;:::-;;:::i;16208:26::-;;;;;;;;;;;;;;;;16900;;;;;;;;;;;;;;;;16497:57;;;;;;;;;;-1:-1:-1;16497:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21807:174;;;;;;;;;;-1:-1:-1;21807:174:0;;;;;:::i;:::-;;:::i;22279:208::-;;;;;;;;;;-1:-1:-1;22279:208:0;;;;;:::i;:::-;;:::i;16023:37::-;;;;;;;;;;-1:-1:-1;16023:37:0;;;;-1:-1:-1;;;;;16023:37:0;;;16311:29;;;;;;;;;;;;;;;;4156:151;;;;;;;;;;-1:-1:-1;4156:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4272:18:0;;;4245:7;4272:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4156:151;19524:763;;;;;;;;;;-1:-1:-1;19524:763:0;;;;;:::i;:::-;;:::i;16129:33::-;;;;;;;;;;;;;;;;16279:25;;;;;;;;;;;;;;;;16102:20;;;;;;;;;;;;;;;;7449:244;;;;;;;;;;-1:-1:-1;7449:244:0;;;;;:::i;:::-;;:::i;16071:24::-;;;;;;;;;;;;;;;;21183:221;;;;;;;;;;-1:-1:-1;21183:221:0;;;;;:::i;:::-;;:::i;29187:443::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;;;;;;;;;29275:17:::1;:6:::0;29285::::1;29275:17;:::i;:::-;29266:26;;29303:19;29325:25;29339:10;;29325:9;;:13;;:25;;;;:::i;:::-;29303:47;;29361:15;29379:38;29405:11;29379:21;29390:9;;29379:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;29361:56;;29428:16;29447:39;29474:11;29447:22;29458:10;;29447:6;:10;;:22;;;;:::i;:39::-;29428:58;;29499:28;29520:6;29499:20;:28::i;:::-;29552:9;::::0;:22:::1;::::0;29566:7;29552:13:::1;:22::i;:::-;29540:9;:34:::0;29598:10:::1;::::0;:24:::1;::::0;29613:8;29598:14:::1;:24::i;:::-;29585:10;:37:::0;-1:-1:-1;;;;29187:443:0:o;3401:100::-;3455:13;3488:5;3481:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3401:100;:::o;20730:181::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20814:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20814:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20869:34;;2041:41:1;;;20869:34:0::1;::::0;2014:18:1;20869:34:0::1;;;;;;;20730:181:::0;;:::o;21633:166::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;21719:2:::1;21711:4;:10;;21703:48;;;::::0;-1:-1:-1;;;21703:48:0;;8872:2:1;21703:48:0::1;::::0;::::1;8854:21:1::0;8911:2;8891:18;;;8884:30;8950:27;8930:18;;;8923:55;8995:18;;21703:48:0::1;8670:349:1::0;21703:48:0::1;21778:13;:4:::0;21785:6:::1;21778:13;:::i;:::-;21762;:29:::0;-1:-1:-1;21633:166:0:o;4315:169::-;4398:4;4415:39;340:10;4438:7;4447:6;4415:8;:39::i;:::-;-1:-1:-1;4472:4:0;4315:169;;;;;:::o;30747:561::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;30919:6:::1;:13;30894:14;:21;:38;30886:81;;;::::0;-1:-1:-1;;;30886:81:0;;9226:2:1;30886:81:0::1;::::0;::::1;9208:21:1::0;9265:2;9245:18;;;9238:30;9304:32;9284:18;;;9277:60;9354:18;;30886:81:0::1;9024:354:1::0;30886:81:0::1;31011:3;30986:14;:21;:28;;30978:75;;;::::0;-1:-1:-1;;;30978:75:0;;9585:2:1;30978:75:0::1;::::0;::::1;9567:21:1::0;9624:2;9604:18;;;9597:30;9663:34;9643:18;;;9636:62;-1:-1:-1;;;9714:18:1;;;9707:32;9756:19;;30978:75:0::1;9383:398:1::0;30978:75:0::1;31069:9;31064:237;31088:14;:21;31084:1;:25;31064:237;;;31131:14;31148;31163:1;31148:17;;;;;;;;:::i;:::-;;;;;;;31131:34;;31180:21;31204:6;31211:1;31204:9;;;;;;;;:::i;:::-;;;;;;;31217:6;31204:20;;;;:::i;:::-;31180:44;;31239:50;31255:10;31267:6;31275:13;31239:15;:50::i;:::-;31116:185;;31111:3;;;;;:::i;:::-;;;;31064:237;;;;30747:561:::0;;:::o;4492:345::-;4605:4;4622:36;4632:6;4640:9;4651:6;4622:9;:36::i;:::-;4669:138;4678:6;340:10;4700:106;4738:6;4700:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4700:19:0;;;;;;:11;:19;;;;;;;;340:10;4700:33;;;;;;;;;;:37;:106::i;:::-;4669:8;:138::i;:::-;-1:-1:-1;4825:4:0;4492:345;;;;;:::o;4845:218::-;340:10;4933:4;4982:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4982:34:0;;;;;;;;;;4933:4;;4950:83;;4973:7;;4982:50;;5021:10;4982:38;:50::i;20512:202::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20585:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20585:34:0::1;20615:4;20585:34;::::0;;20630:14:::1;:32:::0;;-1:-1:-1;;;;;;20630:32:0::1;::::0;::::1;::::0;;20678:28;;160:51:1;;;20678:28:0::1;::::0;133:18:1;20678:28:0::1;;;;;;;;20512:202:::0;:::o;20299:205::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20373:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20373:34:0::1;20403:4;20373:34;::::0;;20418:15:::1;:33:::0;;-1:-1:-1;;;;;;20418:33:0::1;::::0;::::1;::::0;;20467:29;;160:51:1;;;20467:29:0::1;::::0;133:18:1;20467:29:0::1;14:203:1::0;22151:120:0;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;22246:17:::1;:6:::0;22256::::1;22246:17;:::i;:::-;22225:18;:38:::0;-1:-1:-1;22151:120:0:o;21416:209::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;21487:16:::1;:5:::0;21496:6:::1;21487:16;:::i;:::-;21479:24;;21546:4;21531:12;;:19;;;;:::i;:::-;21522:5;:28;;21514:79;;;::::0;-1:-1:-1;;;21514:79:0;;10482:2:1;21514:79:0::1;::::0;::::1;10464:21:1::0;10521:2;10501:18;;;10494:30;10560:34;10540:18;;;10533:62;-1:-1:-1;;;10611:18:1;;;10604:36;10657:19;;21514:79:0::1;10280:402:1::0;21514:79:0::1;21604:5;:13:::0;21416:209::o;21074:99::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;21143:14:::1;:22:::0;;-1:-1:-1;;21143:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21074:99::o;21997:146::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;22096:39:::1;::::0;22064:21:::1;::::0;22104:10:::1;::::0;22096:39;::::1;;;::::0;22064:21;;22044:17:::1;22096:39:::0;22044:17;22096:39;22064:21;22104:10;22096:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22033:110;21997:146::o:0;7293:148::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;7384:6:::1;::::0;7363:40:::1;::::0;7400:1:::1;::::0;-1:-1:-1;;;;;7384:6:0::1;::::0;7363:40:::1;::::0;7400:1;;7363:40:::1;7414:6;:19:::0;;-1:-1:-1;;;;;;7414:19:0::1;::::0;;7293:148::o;22839:212::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22908:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22940:4:::1;-1:-1:-1::0;;22908:36:0;;::::1;::::0;::::1;::::0;;;22955:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;23016:27:::1;22908:29:::0;23016:17:::1;:27::i;:::-;22839:212:::0;:::o;20919:147::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21008:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;21008:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20919:147::o;3509:104::-;3565:13;3598:7;3591:14;;;;;:::i;23059:885::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;23257:16:::1;:31:::0;;;23299:10:::1;:20:::0;;;23330:17:::1;:33:::0;;;23374:11:::1;:22:::0;;;23407:14:::1;:28:::0;;;23446:15:::1;:30:::0;;;23507:38:::1;23350:13:::0;23464:12;23507:21:::1;:38::i;:::-;23491:13;:54:::0;23592:14:::1;::::0;23571:16:::1;::::0;:36:::1;::::0;:20:::1;:36::i;:::-;23556:12;:51:::0;23641:1:::1;23630:12:::0;::::1;::::0;::::1;::::0;:29:::1;;;23658:1;23646:8;:13;;23630:29;23622:68;;;::::0;-1:-1:-1;;;23622:68:0;;10889:2:1;23622:68:0::1;::::0;::::1;10871:21:1::0;10928:2;10908:18;;;10901:30;10967:28;10947:18;;;10940:56;11013:18;;23622:68:0::1;10687:350:1::0;23622:68:0::1;23726:1;23709:13;;:18;;:39;;;;;23747:1;23731:12;;:17;;23709:39;23701:87;;;::::0;-1:-1:-1;;;23701:87:0;;11244:2:1;23701:87:0::1;::::0;::::1;11226:21:1::0;11283:2;11263:18;;;11256:30;11322:34;11302:18;;;11295:62;-1:-1:-1;;;11373:18:1;;;11366:33;11416:19;;23701:87:0::1;11042:399:1::0;23701:87:0::1;23817:17;::::0;23836:11:::1;::::0;23849:15:::1;::::0;23866:16:::1;::::0;23909:10:::1;::::0;23921:14:::1;::::0;23806:130:::1;::::0;;11733:25:1;;;11789:2;11774:18;;11767:34;;;;11817:18;;;11810:34;;;;11875:2;11860:18;;11853:34;11918:3;11903:19;;11896:35;11962:3;11947:19;;11940:35;23806:130:0::1;::::0;11720:3:1;11705:19;23806:130:0::1;;;;;;;23059:885:::0;;;;;;:::o;22495:140::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;22586:41:::1;22615:4;22621:5;22586:28;:41::i;5071:286::-:0;5164:4;5181:146;340:10;5204:7;5213:113;5252:15;5213:113;;;;;;;;;;;;;;;;;340:10;5213:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5213:34:0;;;;;;;;;;;;:38;:113::i;3973:175::-;4059:4;4076:42;340:10;4100:9;4111:6;4076:9;:42::i;21807:174::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;21895:3:::1;21886:5;:12;;21878:63;;;::::0;-1:-1:-1;;;21878:63:0;;12188:2:1;21878:63:0::1;::::0;::::1;12170:21:1::0;12227:2;12207:18;;;12200:30;12266:34;12246:18;;;12239:62;-1:-1:-1;;;12317:18:1;;;12310:36;12363:19;;21878:63:0::1;11986:402:1::0;21878:63:0::1;21952:13;:21:::0;21807:174::o;22279:208::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;22359:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;22351:41:::1;;;::::0;::::1;;22403:21;:31:::0;;-1:-1:-1;;22403:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22450:29:::1;::::0;2041:41:1;;;22450:29:0::1;::::0;2029:2:1;2014:18;22450:29:0::1;1901:187:1::0;19524:763:0;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;19714:27:::1;:16:::0;19734:6:::1;19714:27;:::i;:::-;19695:46:::0;-1:-1:-1;19767:23:0::1;:12:::0;19783:6:::1;19767:23;:::i;:::-;19810:14;::::0;19752:38;;-1:-1:-1;;;;19810:14:0;::::1;;;19809:15;19801:24;;;::::0;::::1;;19879:4;19864:12;;:19;;;;:::i;:::-;19844:16;:39;;19836:72;;;::::0;-1:-1:-1;;;19836:72:0;;12595:2:1;19836:72:0::1;::::0;::::1;12577:21:1::0;12634:2;12614:18;;;12607:30;-1:-1:-1;;;12653:18:1;;;12646:51;12714:18;;19836:72:0::1;12393:345:1::0;19836:72:0::1;19958:4;19943:12;;:19;;;;:::i;:::-;19927:12;:35;;19919:68;;;::::0;-1:-1:-1;;;19919:68:0;;12595:2:1;19919:68:0::1;::::0;::::1;12577:21:1::0;12634:2;12614:18;;;12607:30;-1:-1:-1;;;12653:18:1;;;12646:51;12714:18;;19919:68:0::1;12393:345:1::0;19919:68:0::1;19998:9;:28:::0;;;20037:5:::1;:20:::0;;;20084:23:::1;:14:::0;20101:6:::1;20084:23;:::i;:::-;20068:13;:39:::0;20118:14:::1;:21:::0;;-1:-1:-1;;;;20118:21:0::1;-1:-1:-1::0;;;20118:21:0::1;::::0;;20164:12:::1;20150:11;:26:::0;20205:15:::1;20187;:33:::0;20231:5:::1;:16:::0;;;20263::::1;::::0;::::1;::::0;20118:21;;20263:16:::1;19524:763:::0;;;;:::o;7449:244::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7538:22:0;::::1;7530:73;;;::::0;-1:-1:-1;;;7530:73:0;;12945:2:1;7530:73:0::1;::::0;::::1;12927:21:1::0;12984:2;12964:18;;;12957:30;13023:34;13003:18;;;12996:62;-1:-1:-1;;;13074:18:1;;;13067:36;13120:19;;7530:73:0::1;12743:402:1::0;7530:73:0::1;7640:6;::::0;7619:38:::1;::::0;-1:-1:-1;;;;;7619:38:0;;::::1;::::0;7640:6:::1;::::0;7619:38:::1;::::0;7640:6:::1;::::0;7619:38:::1;7668:6;:17:::0;;-1:-1:-1;;;;;;7668:17:0::1;-1:-1:-1::0;;;;;7668:17:0;;;::::1;::::0;;;::::1;::::0;;7449:244::o;21183:221::-;7206:6;;-1:-1:-1;;;;;7206:6:0;340:10;7206:22;7198:67;;;;-1:-1:-1;;;7198:67:0;;;;;;;:::i;:::-;21258:16:::1;:5:::0;21267:6:::1;21258:16;:::i;:::-;21250:24;;21317:4;21302:12;;:19;;;;:::i;:::-;21293:5;:28;;21285:83;;;::::0;-1:-1:-1;;;21285:83:0;;13352:2:1;21285:83:0::1;::::0;::::1;13334:21:1::0;13391:2;13371:18;;;13364:30;13430:34;13410:18;;;13403:62;-1:-1:-1;;;13481:18:1;;;13474:40;13531:19;;21285:83:0::1;13150:406:1::0;21285:83:0::1;21379:9;:17:::0;21183:221::o;636:179::-;694:7;;726:5;730:1;726;:5;:::i;:::-;714:17;;755:1;750;:6;;742:46;;;;-1:-1:-1;;;742:46:0;;13893:2:1;742:46:0;;;13875:21:1;13932:2;13912:18;;;13905:30;13971:29;13951:18;;;13944:57;14018:18;;742:46:0;13691:351:1;742:46:0;806:1;636:179;-1:-1:-1;;;636:179:0:o;1165:248::-;1223:7;1247:1;1252;1247:6;1243:47;;-1:-1:-1;1277:1:0;1270:8;;1243:47;1302:9;1314:5;1318:1;1314;:5;:::i;:::-;1302:17;-1:-1:-1;1347:1:0;1338:5;1342:1;1302:17;1338:5;:::i;:::-;:10;1330:56;;;;-1:-1:-1;;;1330:56:0;;14249:2:1;1330:56:0;;;14231:21:1;14288:2;14268:18;;;14261:30;14327:34;14307:18;;;14300:62;-1:-1:-1;;;14378:18:1;;;14371:31;14419:19;;1330:56:0;14047:397:1;1421:132:0;1479:7;1506:39;1510:1;1513;1506:39;;;;;;;;;;;;;;;;;:3;:39::i;29663:1076::-;29732:6;29742:1;29732:11;29728:50;;29663:1076;:::o;29728:50::-;29788:24;29805:6;29788:16;:24::i;:::-;29984:14;;29963:16;;29840:4;;;;29825:12;;29963:36;;:16;:20;:36::i;:::-;29944:15;;29922:17;;:38;;:21;:38::i;:::-;:77;;;;:::i;:::-;29898:101;-1:-1:-1;30012:19:0;30046:17;;30042:104;;30094:40;:21;30120:13;30094:25;:40::i;:::-;30080:54;;30042:104;30156:23;30224:11;30182:39;30203:17;;30182:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30156:79;;30246:22;30309:11;30271:35;30290:15;;30271:14;;:18;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;30246:74;-1:-1:-1;30345:19:0;;30341:123;;30403:15;;30395:57;;-1:-1:-1;;;;;30403:15:0;;;;30432;;30395:57;;;;30432:15;30403;30395:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30381:71:0;;-1:-1:-1;;30341:123:0;30488:18;;30484:123;;30548:14;;30540:55;;-1:-1:-1;;;;;30548:14:0;;;;30576;;30540:55;;;;30576:14;30548;30540:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30523:72:0;;-1:-1:-1;;30484:123:0;30624:107;30652:32;30670:14;30652:15;:32;:::i;:::-;30699:7;:21;;;;;30710:10;30699:21;30624:107;;;14827:25:1;;;14895:14;;14888:22;14883:2;14868:18;;14861:50;14800:18;30624:107:0;;;;;;;29717:1022;;;;;;29663:1076;:::o;823:136::-;881:7;908:43;912:1;915;908:43;;;;;;;;;;;;;;;;;:3;:43::i;6297:346::-;-1:-1:-1;;;;;6399:19:0;;6391:68;;;;-1:-1:-1;;;6391:68:0;;15124:2:1;6391:68:0;;;15106:21:1;15163:2;15143:18;;;15136:30;15202:34;15182:18;;;15175:62;-1:-1:-1;;;15253:18:1;;;15246:34;15297:19;;6391:68:0;14922:400:1;6391:68:0;-1:-1:-1;;;;;6478:21:0;;6470:68;;;;-1:-1:-1;;;6470:68:0;;15529:2:1;6470:68:0;;;15511:21:1;15568:2;15548:18;;;15541:30;15607:34;15587:18;;;15580:62;-1:-1:-1;;;15658:18:1;;;15651:32;15700:19;;6470:68:0;15327:398:1;6470:68:0;-1:-1:-1;;;;;6551:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6603:32;;2474:25:1;;;6603:32:0;;2447:18:1;6603:32:0;;;;;;;;6297:346;;;:::o;5365:538::-;-1:-1:-1;;;;;5471:20:0;;5463:70;;;;-1:-1:-1;;;5463:70:0;;15932:2:1;5463:70:0;;;15914:21:1;15971:2;15951:18;;;15944:30;16010:34;15990:18;;;15983:62;-1:-1:-1;;;16061:18:1;;;16054:35;16106:19;;5463:70:0;15730:401:1;5463:70:0;-1:-1:-1;;;;;5552:23:0;;5544:71;;;;-1:-1:-1;;;5544:71:0;;16338:2:1;5544:71:0;;;16320:21:1;16377:2;16357:18;;;16350:30;16416:34;16396:18;;;16389:62;-1:-1:-1;;;16467:18:1;;;16460:33;16510:19;;5544:71:0;16136:399:1;5544:71:0;5708:70;5730:6;5708:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5708:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5688:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5812:20;;;;;;;:32;;5837:6;5812:24;:32::i;:::-;-1:-1:-1;;;;;5789:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5860:35;2474:25:1;;;5789:20:0;;5860:35;;;;;;2447:18:1;5860:35:0;2328:177:1;24086:3577:0;-1:-1:-1;;;;;24196:18:0;;24188:69;;;;-1:-1:-1;;;24188:69:0;;16742:2:1;24188:69:0;;;16724:21:1;16781:2;16761:18;;;16754:30;16820:34;16800:18;;;16793:62;-1:-1:-1;;;16871:18:1;;;16864:36;16917:19;;24188:69:0;16540:402:1;24188:69:0;-1:-1:-1;;;;;24276:16:0;;24268:65;;;;-1:-1:-1;;;24268:65:0;;17149:2:1;24268:65:0;;;17131:21:1;17188:2;17168:18;;;17161:30;17227:34;17207:18;;;17200:62;-1:-1:-1;;;17278:18:1;;;17271:34;17322:19;;24268:65:0;16947:400:1;24268:65:0;-1:-1:-1;;;;;24444:39:0;;24346:21;24444:39;;;:33;:39;;;;;;24346:21;;;;24444:39;;24439:142;;24508:14;;-1:-1:-1;;;24508:14:0;;;;24500:59;;;;-1:-1:-1;;;24500:59:0;;17554:2:1;24500:59:0;;;17536:21:1;;;17573:18;;;17566:30;17632:34;17612:18;;;17605:62;17684:18;;24500:59:0;17352:356:1;24500:59:0;24597:6;24607:1;24597:11;24593:93;;24625:28;24641:4;24647:2;24651:1;24625:15;:28::i;:::-;24668:7;;;24086:3577;;;:::o;24593:93::-;24709:4;;-1:-1:-1;;;;;24709:4:0;;;24703:10;;;;24699:2901;;24730:33;24746:4;24752:2;24756:6;24730:15;:33::i;:::-;24793:12;;:24;;24810:6;24793:16;:24::i;:::-;24778:12;:39;-1:-1:-1;;;;;;24086:3577:0:o;24699:2901::-;24894:8;;-1:-1:-1;;;24894:8:0;;;;24893:9;:39;;;;-1:-1:-1;;;;;;24907:25:0;;;;;;:19;:25;;;;;;;;24906:26;24893:39;:67;;;;-1:-1:-1;;;;;;24937:23:0;;;;;;:19;:23;;;;;;;;24936:24;24893:67;24875:2725;;;-1:-1:-1;;;;;24994:29:0;;24977:14;24994:29;;;:25;:29;;;;;;;;25038:1411;;;;25088:17;;25134:11;;25178:15;;25222:14;;25088:17;;-1:-1:-1;25134:11:0;;-1:-1:-1;25178:15:0;-1:-1:-1;25222:14:0;;25218:344;;;25326:13;;25313:9;25284:39;;;;:28;:39;;;;;;:55;;25326:13;25284:55;:::i;:::-;25265:15;:74;;25257:134;;;;-1:-1:-1;;;25257:134:0;;17915:2:1;25257:134:0;;;17897:21:1;17954:2;17934:18;;;17927:30;-1:-1:-1;;;17973:18:1;;;17966:52;18035:18;;25257:134:0;17713:346:1;25257:134:0;25428:5;;25418:6;:15;;25410:54;;;;-1:-1:-1;;;25410:54:0;;18266:2:1;25410:54:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:29;18324:18;;;18317:57;18391:18;;25410:54:0;18064:351:1;25410:54:0;25512:9;25483:39;;;;:28;:39;;;;;25525:15;25483:57;;25218:344;25038:1411;;;25646:16;;25691:10;;25734:14;;25775;;25646:16;;-1:-1:-1;25691:10:0;;-1:-1:-1;25734:14:0;-1:-1:-1;25775:14:0;;25771:453;;;25854:5;;25836:15;;:23;;;;:::i;:::-;25818:15;:41;25810:71;;;;-1:-1:-1;;;25810:71:0;;18622:2:1;25810:71:0;;;18604:21:1;18661:2;18641:18;;;18634:30;-1:-1:-1;;;18680:18:1;;;18673:48;18738:18;;25810:71:0;18420:342:1;25810:71:0;25923:13;;25908:11;:28;;25900:64;;;;-1:-1:-1;;;25900:64:0;;18969:2:1;25900:64:0;;;18951:21:1;19008:2;18988:18;;;18981:30;19047:26;19027:18;;;19020:54;19091:18;;25900:64:0;18767:348:1;25900:64:0;26016:9;25991:35;;;;:24;:35;;;;;;26030:12;25991:51;;25983:83;;;;-1:-1:-1;;;25983:83:0;;19322:2:1;25983:83:0;;;19304:21:1;19361:2;19341:18;;;19334:30;-1:-1:-1;;;19380:18:1;;;19373:50;19440:18;;25983:83:0;19120:344:1;25983:83:0;26103:5;;26093:6;:15;;26085:54;;;;-1:-1:-1;;;26085:54:0;;18266:2:1;26085:54:0;;;18248:21:1;18305:2;18285:18;;;18278:30;18344:29;18324:18;;;18317:57;18391:18;;26085:54:0;18064:351:1;26085:54:0;26183:9;26158:35;;;;:24;:35;;;;;26196:12;26158:50;;25771:453;-1:-1:-1;;;;;3939:18:0;;26257:32;3939:18;;;;;;;;;;;26369:9;;26332:33;26359:6;3939:18;26332:33;:::i;:::-;:46;;26324:95;;;;-1:-1:-1;;;26324:95:0;;19671:2:1;26324:95:0;;;19653:21:1;19710:2;19690:18;;;19683:30;19749:34;19729:18;;;19722:62;-1:-1:-1;;;19800:18:1;;;19793:34;19844:19;;26324:95:0;19469:400:1;26324:95:0;25611:838;25038:1411;26465:17;26485:30;:13;26503:11;26485:17;:30::i;:::-;26581:4;26532:28;3939:18;;;;;;;;;;;26643;;26465:50;;-1:-1:-1;3939:18:0;26619:42;;;;;;;26682:20;;;26693:9;26682:20;26678:308;;;26723:8;:15;;-1:-1:-1;;;;26723:15:0;-1:-1:-1;;;26723:15:0;;;26812:4;-1:-1:-1;3939:18:0;;;;;;;;;;;26772:46;;26837:33;26858:11;26837:20;:33::i;:::-;-1:-1:-1;26901:1:0;26889:9;:13;;;26921:10;:14;26954:8;:16;;-1:-1:-1;;;;26954:16:0;;;26678:308;27002:12;27017:30;27043:3;27017:21;:6;27028:9;27017:10;:21::i;:30::-;27002:45;-1:-1:-1;27062:18:0;27083:28;27107:3;27083:19;:6;27094:7;27083:10;:19::i;:28::-;27062:49;-1:-1:-1;27139:29:0;27150:17;27062:49;27150:4;:17;:::i;:::-;27139:6;;:10;:29::i;:::-;27130:38;;27190:9;27186:155;;;27233:10;;:20;;27248:4;27233:14;:20::i;:::-;27220:10;:33;27186:155;;;27306:9;;:19;;27320:4;27306:13;:19::i;:::-;27294:9;:31;27186:155;27357:42;27373:4;27387;27394;27357:15;:42::i;:::-;27420:14;;27416:156;;27477:4;;27455:39;;27471:4;;-1:-1:-1;;;;;27477:4:0;27483:10;27455:15;:39::i;:::-;27528:12;;:28;;27545:10;27528:16;:28::i;:::-;27513:12;:43;27416:156;24962:2638;;;;;;24875:2725;27612:33;27628:4;27634:2;27638:6;27612:15;:33::i;967:190::-;1053:7;1089:12;1081:6;;;;1073:29;;;;-1:-1:-1;;;1073:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1113:9:0;1125:5;1129:1;1125;:5;:::i;:::-;1113:17;967:190;-1:-1:-1;;;;;967:190:0:o;22643:188::-;-1:-1:-1;;;;;22726:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22726:39:0;;;;;;;;;;22783:40;;22726:39;;:31;22783:40;;;22643:188;;:::o;1561:189::-;1647:7;1682:12;1675:5;1667:28;;;;-1:-1:-1;;;1667:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1706:9:0;1718:5;1722:1;1718;:5;:::i;28159:499::-;28249:16;;;28263:1;28249:16;;;;;;;;28225:21;;28249:16;;;;;;;;;;-1:-1:-1;28249:16:0;28225:40;;28294:4;28276;28281:1;28276:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28276:23:0;;;:7;;;;;;;;;;:23;;;;28320:15;;:22;;;-1:-1:-1;;;28320:22:0;;;;:15;;;;;:20;;:22;;;;;28276:7;;28320:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28310:4;28315:1;28310:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28310:32:0;;;:7;;;;;;;;;:32;28385:15;;28353:62;;28370:4;;28385:15;28403:11;28353:8;:62::i;:::-;28426:15;;:224;;-1:-1:-1;;;28426:224:0;;-1:-1:-1;;;;;28426:15:0;;;;:66;;:224;;28507:11;;28426:15;;28577:4;;28604;;28624:15;;28426:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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:523::-;6412:6;6420;6428;6436;6444;6452;6505:3;6493:9;6484:7;6480:23;6476:33;6473:53;;;6522:1;6519;6512:12;6473:53;-1:-1:-1;;6545:23:1;;;6615:2;6600:18;;6587:32;;-1:-1:-1;6666:2:1;6651:18;;6638:32;;6717:2;6702:18;;6689:32;;-1:-1:-1;6768:3:1;6753:19;;6740:33;;-1:-1:-1;6820:3:1;6805:19;6792:33;;-1:-1:-1;6308:523:1;-1:-1:-1;6308:523:1:o;6836:388::-;6904:6;6912;6965:2;6953:9;6944:7;6940:23;6936:32;6933:52;;;6981:1;6978;6971:12;6933:52;7020:9;7007:23;7039:31;7064:5;7039:31;:::i;:::-;7089:5;-1:-1:-1;7146:2:1;7131:18;;7118:32;7159:33;7118:32;7159:33;:::i;:::-;7211:7;7201:17;;;6836:388;;;;;:::o;7229:385::-;7315:6;7323;7331;7339;7392:3;7380:9;7371:7;7367:23;7363:33;7360:53;;;7409:1;7406;7399:12;7360:53;-1:-1:-1;;7432:23:1;;;7502:2;7487:18;;7474:32;;-1:-1:-1;7553:2:1;7538:18;;7525:32;;7604:2;7589:18;7576:32;;-1:-1:-1;7229:385:1;-1:-1:-1;7229:385:1:o;7619:356::-;7821:2;7803:21;;;7840:18;;;7833:30;7899:34;7894:2;7879:18;;7872:62;7966:2;7951:18;;7619:356::o;7980:127::-;8041:10;8036:3;8032:20;8029:1;8022:31;8072:4;8069:1;8062:15;8096:4;8093:1;8086:15;8112:168;8185:9;;;8216;;8233:15;;;8227:22;;8213:37;8203:71;;8254:18;;:::i;8285:380::-;8364:1;8360:12;;;;8407;;;8428:61;;8482:4;8474:6;8470:17;8460:27;;8428:61;8535:2;8527:6;8524:14;8504:18;8501:38;8498:161;;8581:10;8576:3;8572:20;8569:1;8562:31;8616:4;8613:1;8606:15;8644:4;8641:1;8634:15;8498:161;;8285:380;;;:::o;9786:127::-;9847:10;9842:3;9838:20;9835:1;9828:31;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9918:135;9957:3;9978:17;;;9975:43;;9998:18;;:::i;:::-;-1:-1:-1;10045:1:1;10034:13;;9918:135::o;10058:217::-;10098:1;10124;10114:132;;10168:10;10163:3;10159:20;10156:1;10149:31;10203:4;10200:1;10193:15;10231:4;10228:1;10221:15;10114:132;-1:-1:-1;10260:9:1;;10058:217::o;13561:125::-;13626:9;;;13647:10;;;13644:36;;;13660:18;;:::i;19874:128::-;19941:9;;;19962:11;;;19959:37;;;19976:18;;:::i;20007:251::-;20077:6;20130:2;20118:9;20109:7;20105:23;20101:32;20098:52;;;20146:1;20143;20136:12;20098:52;20178:9;20172:16;20197:31;20222:5;20197:31;:::i;20263:980::-;20525:4;20573:3;20562:9;20558:19;20604:6;20593:9;20586:25;20630:2;20668:6;20663:2;20652:9;20648:18;20641:34;20711:3;20706:2;20695:9;20691:18;20684:31;20735:6;20770;20764:13;20801:6;20793;20786:22;20839:3;20828:9;20824:19;20817:26;;20878:2;20870:6;20866:15;20852:29;;20899:1;20909:195;20923:6;20920:1;20917:13;20909:195;;;20988:13;;-1:-1:-1;;;;;20984:39:1;20972:52;;21079:15;;;;21044:12;;;;21020:1;20938:9;20909:195;;;-1:-1:-1;;;;;;;21160:32:1;;;;21155:2;21140:18;;21133:60;-1:-1:-1;;;21224:3:1;21209:19;21202:35;21121:3;20263:980;-1:-1:-1;;;20263:980:1:o

Swarm Source

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