ETH Price: $3,469.80 (+3.01%)

Token

Chu Inu (CHU)
 

Overview

Max Total Supply

1,000,000,000,000 CHU

Holders

542

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
icculus.eth
Balance
909,195,757 CHU

Value
$0.00
0x0a0871c2ea6f24149758dc5bd1136d337b7f47b8
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:
CHUINU

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// 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 calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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() external 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 ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

contract CHUINU is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    TokenHandler public immutable tokenHandler;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public marketingAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    IERC20 public constant SHIBA = IERC20(0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE);  //Mainnet: 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    bool public zeroTaxMode;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);
    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Chu Inu", "CHU") {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);  //uniswap router

        _excludeFromMaxTransaction(address(_dexRouter), true);
        dexRouter = _dexRouter;
        
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), address(SHIBA));
        _setAutomatedMarketMakerPair(address(lpPair), true);

        tokenHandler = new TokenHandler();
 
        uint256 totalSupply = 1_000_000_000_000 * 1e18;
        
        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 2 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyOperationsFee = 14;
        buyMarketingFee = 14;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyMarketingFee + buyLiquidityFee;

        sellOperationsFee = 14;
        sellMarketingFee = 14;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellMarketingFee + sellLiquidityFee;
        zeroTaxMode = false;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        operationsAddress = address(0x8976469CA4dD4BFde5693D9467E204576CBdE5C7);
        marketingAddress = address(0xA657373f948605D77735fb536c132335A34A12a8);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdrop(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(uint256 _operationsFee, uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellMarketingFee + sellLiquidityFee;
    }

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

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

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 4 && _holderLastTransferTimestamp[to] < block.number - 4, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee && !zeroTaxMode){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

        super._transfer(from, to, amount);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 shibaAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);
        SHIBA.approve(address(dexRouter), shibaAmount);

        // add the liquidity
        dexRouter.addLiquidity(address(this), address(SHIBA), tokenAmount, shibaAmount, 0,  0,  address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForSHIBA(contractBalance - liquidityTokens); 

        tokenHandler.sendTokenToOwner(address(SHIBA));
        
        uint256 shibaBalance = SHIBA.balanceOf(address(this));
        uint256 shibaForLiquidity = shibaBalance;

        uint256 shibaForOperations = shibaBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 shibaForMarketing = shibaBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));

        shibaForLiquidity -= shibaForOperations + shibaForMarketing;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && shibaForLiquidity > 0){
            addLiquidity(liquidityTokens, shibaForLiquidity);
        }


        if(shibaForMarketing > 0){
            SHIBA.transfer(marketingAddress, shibaForMarketing);
        }

        if(SHIBA.balanceOf(address(this)) > 0){
            SHIBA.transfer(operationsAddress, SHIBA.balanceOf(address(this)));
        }
    }

    function swapTokensForSHIBA(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(SHIBA);
        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(tokenHandler),
            block.timestamp
        );
    }

  function withdrawStuckForeignTokens(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

     function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

     function setZeroTaxMode(bool _zeroTaxMode) external onlyOwner {
        zeroTaxMode = _zeroTaxMode;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"SHIBA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdrop","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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_zeroTaxMode","type":"bool"}],"name":"setZeroTaxMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckForeignTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroTaxMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526000600d55600e805462ffffff191660019081179091556010805460ff191690911790553480156200003557600080fd5b506040518060400160405280600781526020016643687520496e7560c81b8152506040518060400160405280600381526020016243485560e81b815250816003908162000083919062000814565b50600462000092828262000814565b5050506000620000a7620003fe60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620045db833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010781600162000402565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001789190620008e0565b6040516364e329cb60e11b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af1158015620001db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002019190620008e0565b6001600160a01b031660a08190526200021c90600162000465565b6040516200022a9062000761565b604051809103906000f08015801562000247573d6000803e3d6000fd5b506001600160a01b031660c0526c0c9f2c9cd04674edea4000000060646200027182600262000928565b6200027d919062000948565b60065560646200028f82600262000928565b6200029b919062000948565b6007556064620002ad82600262000928565b620002b9919062000948565b600855620186a0620002cd82601962000928565b620002d9919062000948565b600a55600e601281905560138190556000601481905590620002fc90806200096b565b6200030891906200096b565b601155600e6016819055601781905560006018819055906200032b90806200096b565b6200033791906200096b565b601555601c805460ff191690556200035183600162000402565b6200035e30600162000402565b6200036d61dead600162000402565b6200037a836001620004d1565b62000387306001620004d1565b6200039661dead6001620004d1565b600b80546001600160a01b0319908116738976469ca4dd4bfde5693d9467e204576cbde5c717909155600c805490911673a657373f948605d77735fb536c132335a34a12a8179055620003ea83826200057f565b620003f58362000664565b50505062000981565b3390565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601f60205260409020805460ff191682151517905562000495828262000402565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005205760405162461bcd60e51b81526020600482018190526024820152600080516020620045bb83398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005d75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000517565b8060026000828254620005eb91906200096b565b90915550506001600160a01b038216600090815260208190526040812080548392906200061a9084906200096b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006af5760405162461bcd60e51b81526020600482018190526024820152600080516020620045bb833981519152604482015260640162000517565b6001600160a01b038116620007165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000517565b6005546040516001600160a01b03808416921690600080516020620045db83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6104d680620040e583390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079a57607f821691505b602082108103620007bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080f57600081815260208120601f850160051c81016020861015620007ea5750805b601f850160051c820191505b818110156200080b57828155600101620007f6565b5050505b505050565b81516001600160401b038111156200083057620008306200076f565b620008488162000841845462000785565b84620007c1565b602080601f831160018114620008805760008415620008675750858301515b600019600386901b1c1916600185901b1785556200080b565b600085815260208120601f198616915b82811015620008b15788860151825594840194600190910190840162000890565b5085821015620008d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008f357600080fd5b81516001600160a01b03811681146200090b57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000942576200094262000912565b92915050565b6000826200096657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000942576200094262000912565b60805160a05160c0516136e7620009fe600039600081816104d0015281816128710152612ed70152600081816105980152818161112001528181611405015261207a0152600081816103ef0152818161203d01528181612e6701528181612ea301528181612f3d01528181612f79015261305f01526136e76000f3fe6080604052600436106103a65760003560e01c8063906e9dd0116101e7578063c876d0b91161010d578063ea4cfe12116100a0578063f2fde38b1161006f578063f2fde38b14610aca578063f5648a4f14610aea578063f637434214610aff578063fb002c9714610b1557600080fd5b8063ea4cfe1214610a56578063eb41548514610a76578063ee40166e14610a9e578063f11a24d314610ab457600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e2f4560514610a2b578063e884f26014610a4157600080fd5b8063c876d0b91461095b578063d257b34f14610975578063d798425714610995578063d85ba063146109af57600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fb578063c17b5b8c1461091b578063c18bc1951461093b57600080fd5b8063aa4bde2814610856578063b3bcca551461086c578063b561fe611461088c578063b62496f5146108ac57600080fd5b80639a7a23d6116101c15780639a7a23d6146107d6578063a457c2d7146107f6578063a5ece94114610816578063a9059cbb1461083657600080fd5b8063906e9dd01461078b57806392136913146107ab57806395d89b41146107c157600080fd5b80634f77f6c0116102cc578063715018a61161026a5780638095d564116102395780638095d5641461072257806388e765ff146107425780638a8c523c146107585780638da5cb5b1461076d57600080fd5b8063715018a6146106c2578063751039fc146106d75780637571336a146106ec5780637bce5a041461070c57600080fd5b806367243482116102a657806367243482146106365780636a486a8e146106565780636ddd17131461066c57806370a082311461068c57600080fd5b80634f77f6c0146105f45780635a139dd41461060a57806366d602ae1461062057600080fd5b80631f3fed8f1161034457806339509351116103135780633950935114610566578063452ed4f114610586578063499b8394146105ba5780634a62bb65146105da57600080fd5b80631f3fed8f146104f257806323b872dd146105085780632be32b6114610528578063313ce5671461054a57600080fd5b806310d5de531161038057806310d5de531461045957806318160ddd146104895780631a8145bb146104a85780631b3d6e87146104be57600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461042957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b2b565b6040516103d491906130dc565b60405180910390f35b3480156103e957600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103d4565b34801561043557600080fd5b50610449610444366004613146565b610bbd565b60405190151581526020016103d4565b34801561046557600080fd5b50610449610474366004613170565b601e6020526000908152604090205460ff1681565b34801561049557600080fd5b506002545b6040519081526020016103d4565b3480156104b457600080fd5b5061049a601b5481565b3480156104ca57600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fe57600080fd5b5061049a601a5481565b34801561051457600080fd5b50610449610523366004613192565b610bd4565b34801561053457600080fd5b506105486105433660046131ce565b610c83565b005b34801561055657600080fd5b50604051601281526020016103d4565b34801561057257600080fd5b50610449610581366004613146565b610d90565b34801561059257600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c657600080fd5b506105486105d5366004613170565b610dcc565b3480156105e657600080fd5b50600e546104499060ff1681565b34801561060057600080fd5b5061049a60165481565b34801561061657600080fd5b5061049a60125481565b34801561062c57600080fd5b5061049a60075481565b34801561064257600080fd5b506105486106513660046132bd565b610ea5565b34801561066257600080fd5b5061049a60155481565b34801561067857600080fd5b50600e546104499062010000900460ff1681565b34801561069857600080fd5b5061049a6106a7366004613170565b6001600160a01b031660009081526020819052604090205490565b3480156106ce57600080fd5b50610548611010565b3480156106e357600080fd5b50610548611084565b3480156106f857600080fd5b5061054861070736600461338e565b6110ef565b34801561071857600080fd5b5061049a60135481565b34801561072e57600080fd5b5061054861073d3660046133c5565b6111da565b34801561074e57600080fd5b5061049a60065481565b34801561076457600080fd5b50610548611230565b34801561077957600080fd5b506005546001600160a01b0316610411565b34801561079757600080fd5b506105486107a6366004613170565b6112f2565b3480156107b757600080fd5b5061049a60175481565b3480156107cd57600080fd5b506103c76113ca565b3480156107e257600080fd5b506105486107f136600461338e565b6113d9565b34801561080257600080fd5b50610449610811366004613146565b6114b8565b34801561082257600080fd5b50600c54610411906001600160a01b031681565b34801561084257600080fd5b50610449610851366004613146565b611551565b34801561086257600080fd5b5061049a60085481565b34801561087857600080fd5b506104496108873660046133f1565b61155e565b34801561089857600080fd5b506105486108a7366004613424565b611767565b3480156108b857600080fd5b506104496108c7366004613170565b601f6020526000908152604090205460ff1681565b3480156108e857600080fd5b50600e5461044990610100900460ff1681565b34801561090757600080fd5b5061054861091636600461338e565b6117a4565b34801561092757600080fd5b506105486109363660046133c5565b61182d565b34801561094757600080fd5b506105486109563660046131ce565b611883565b34801561096757600080fd5b506010546104499060ff1681565b34801561098157600080fd5b506105486109903660046131ce565b61198c565b3480156109a157600080fd5b50601c546104499060ff1681565b3480156109bb57600080fd5b5061049a60115481565b3480156109d157600080fd5b506105486109e03660046131ce565b611ad7565b3480156109f157600080fd5b5061049a610a003660046133f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b5061049a600a5481565b348015610a4d57600080fd5b50610548611bde565b348015610a6257600080fd5b50600b54610411906001600160a01b031681565b348015610a8257600080fd5b506104117395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81565b348015610aaa57600080fd5b5061049a600d5481565b348015610ac057600080fd5b5061049a60145481565b348015610ad657600080fd5b50610548610ae5366004613170565b611c14565b348015610af657600080fd5b50610548611cff565b348015610b0b57600080fd5b5061049a60185481565b348015610b2157600080fd5b5061049a60195481565b606060038054610b3a90613441565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613441565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bca338484611d76565b5060015b92915050565b6000610be1848484611e9a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c788533858403611d76565b506001949350505050565b6005546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8610cc260025490565b610ccd9060016134c6565b610cd791906134dd565b610ce191906134dd565b811015610d425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c62565b610d5481670de0b6b3a76400006134c6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bca918590610dc79086906134ff565b611d76565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c62565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610c629061347b565b8051825114610f205760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c62565b60c8825110610f905760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c62565b60005b825181101561100b576000838281518110610fb057610fb0613512565b602002602001015190506000838381518110610fce57610fce613512565b6020026020010151670de0b6b3a7640000610fe991906134c6565b9050610ff6338383611e9a565b5050808061100390613528565b915050610f93565b505050565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610c629061347b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610c629061347b565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111195760405162461bcd60e51b8152600401610c629061347b565b806111af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111af5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c62565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112045760405162461bcd60e51b8152600401610c629061347b565b6012839055601382905560148190558061121e83856134ff565b61122891906134ff565b601155505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c629061347b565b600e54610100900460ff16156112b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c62565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0381166113805760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c62565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610b3a90613441565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610c629061347b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036114aa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c62565b6114b48282612738565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561153a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c62565b6115473385858403611d76565b5060019392505050565b6000610bca338484611e9a565b6005546000906001600160a01b0316331461158b5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0383166115e15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c62565b306001600160a01b038416036116395760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c62565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190613541565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b919061355a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610c629061347b565b601c805460ff1916911515919091179055565b6005546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118575760405162461bcd60e51b8152600401610c629061347b565b6016839055601782905560188190558061187183856134ff565b61187b91906134ff565b601555505050565b6005546001600160a01b031633146118ad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e86118c260025490565b6118cd9060036134c6565b6118d791906134dd565b6118e191906134dd565b8110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c62565b61195781670de0b6b3a76400006134c6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d85565b6005546001600160a01b031633146119b65760405162461bcd60e51b8152600401610c629061347b565b620186a06119c360025490565b6119ce9060016134c6565b6119d891906134dd565b811015611a455760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c62565b6103e8611a5160025490565b611a5c9060016134c6565b611a6691906134dd565b811115611ad25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c62565b600a55565b6005546001600160a01b03163314611b015760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8611b1660025490565b611b219060016134c6565b611b2b91906134dd565b611b3591906134dd565b811015611b975760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c62565b611ba981670de0b6b3a76400006134c6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d85565b6005546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c629061347b565b6010805460ff19169055565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116611ca35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d295760405162461bcd60e51b8152600401610c629061347b565b604051600090339047908381818185875af1925050503d8060008114611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b50505050565b6001600160a01b038316611dd85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c62565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec05760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216611ee65760405162461bcd60e51b8152600401610c62906135bc565b60008111611f365760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c62565b600e5460ff161561240a576005546001600160a01b03848116911614801590611f6d57506005546001600160a01b03838116911614155b8015611f8157506001600160a01b03821615155b8015611f9857506001600160a01b03821661dead14155b1561240a57600e54610100900460ff16612030576001600160a01b0383166000908152601e602052604090205460ff1680611feb57506001600160a01b0382166000908152601e602052604090205460ff165b6120305760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c62565b60105460ff161561218c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156120af57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561218c576120bf6004436135ff565b326000908152600f60205260409020541080156120fd57506120e26004436135ff565b6001600160a01b0383166000908152600f6020526040902054105b6121675760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c62565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff1680156121cd57506001600160a01b0382166000908152601e602052604090205460ff16155b156122a9576006548111156122355760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c62565b6008546001600160a01b03831660009081526020819052604090205461225b90836134ff565b11156122a45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b61240a565b6001600160a01b0382166000908152601f602052604090205460ff1680156122ea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612354576007548111156122a45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c62565b6001600160a01b0382166000908152601e602052604090205460ff1615801561239657506001600160a01b0383166000908152601e602052604090205460ff16155b1561240a576008546001600160a01b0383166000908152602081905260409020546123c190836134ff565b111561240a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b30600090815260208190526040902054600a54811080159081906124365750600e5462010000900460ff165b8015612445575060095460ff16155b801561246a57506001600160a01b0385166000908152601f602052604090205460ff16155b801561248f57506001600160a01b0385166000908152601d602052604090205460ff16155b80156124b457506001600160a01b0384166000908152601d602052604090205460ff16155b156124d9576009805460ff191660011790556124ce6127a2565b6009805460ff191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061251b57506001600160a01b0385166000908152601d602052604090205460ff165b15612524575060005b6000808280156125375750601c5460ff16155b15612723576001600160a01b0387166000908152601f602052604090205460ff16801561256657506000601554115b1561261e5760646015548761257b91906134c6565b61258591906134dd565b91506015546018548361259891906134c6565b6125a291906134dd565b601b60008282546125b391906134ff565b90915550506015546016546125c890846134c6565b6125d291906134dd565b601960008282546125e391906134ff565b90915550506015546017546125f890846134c6565b61260291906134dd565b601a600082825461261391906134ff565b909155506126fb9050565b6001600160a01b0388166000908152601f602052604090205460ff16801561264857506000601154115b156126fb5760646011548761265d91906134c6565b61266791906134dd565b91506011546014548361267a91906134c6565b61268491906134dd565b601b600082825461269591906134ff565b90915550506011546012546126aa90846134c6565b6126b491906134dd565b601960008282546126c591906134ff565b90915550506011546013546126da90846134c6565b6126e491906134dd565b601a60008282546126f591906134ff565b90915550505b811561270c5761270c883084612c0c565b61271681836134ff565b61272090876135ff565b95505b61272e888888612c0c565b5050505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556127668282612d61565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601a54601954601b546127c991906134ff565b6127d391906134ff565b90508115806127e0575080155b156127e9575050565b600a80546127f6916134c6565b82111561280d57600a805461280a916134c6565b91505b6000600282601b548561282091906134c6565b61282a91906134dd565b61283491906134dd565b905061284861284382856135ff565b612dc4565b6040516304fa881160e21b81527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906313ea204490602401600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce91506370a0823190602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613541565b9050600081905060006002601b5461296391906134dd565b61296d90866135ff565b60195461297a90856134c6565b61298491906134dd565b905060006002601b5461299791906134dd565b6129a190876135ff565b601a546129ae90866134c6565b6129b891906134dd565b90506129c481836134ff565b6129ce90846135ff565b6000601b8190556019819055601a55925084158015906129ee5750600083115b156129fd576129fd8584612f37565b8015612a8e57600c5460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063a9059cbb906044016020604051808303816000875af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c919061355a565b505b6040516370a0823160e01b81523060048201526000907395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce906370a0823190602401602060405180830381865afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613541565b1115612c0357600b546040516370a0823160e01b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190613541565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e919061355a565b50505050505050565b6001600160a01b038316612c325760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216612c585760405162461bcd60e51b8152600401610c62906135bc565b6001600160a01b03831660009081526020819052604090205481811015612cd05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d079084906134ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d5391815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613512565b60200260200101906001600160a01b031690816001600160a01b0316815250507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81600181518110612e4157612e41613512565b60200260200101906001600160a01b031690816001600160a01b031681525050612e8c307f000000000000000000000000000000000000000000000000000000000000000084611d76565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590612f0190859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401613612565b600060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050505050565b612f62307f000000000000000000000000000000000000000000000000000000000000000084611d76565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063095ea7b3906044016020604051808303816000875af1158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613007919061355a565b5060405162e8e33760e81b815230600482018190527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce6024830152604482018490526064820183905260006084830181905260a483015260c48201524260e48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8e3370090610104016060604051808303816000875af11580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190613683565b5050505050565b600060208083528351808285015260005b81811015613109578581018301518582016040015282016130ed565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461314157600080fd5b919050565b6000806040838503121561315957600080fd5b6131628361312a565b946020939093013593505050565b60006020828403121561318257600080fd5b61318b8261312a565b9392505050565b6000806000606084860312156131a757600080fd5b6131b08461312a565b92506131be6020850161312a565b9150604084013590509250925092565b6000602082840312156131e057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613226576132266131e7565b604052919050565b600067ffffffffffffffff821115613248576132486131e7565b5060051b60200190565b600082601f83011261326357600080fd5b813560206132786132738361322e565b6131fd565b82815260059290921b8401810191818101908684111561329757600080fd5b8286015b848110156132b2578035835291830191830161329b565b509695505050505050565b600080604083850312156132d057600080fd5b823567ffffffffffffffff808211156132e857600080fd5b818501915085601f8301126132fc57600080fd5b8135602061330c6132738361322e565b82815260059290921b8401810191818101908984111561332b57600080fd5b948201945b83861015613350576133418661312a565b82529482019490820190613330565b9650508601359250508082111561336657600080fd5b5061337385828601613252565b9150509250929050565b801515811461338b57600080fd5b50565b600080604083850312156133a157600080fd5b6133aa8361312a565b915060208301356133ba8161337d565b809150509250929050565b6000806000606084860312156133da57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561340457600080fd5b61340d8361312a565b915061341b6020840161312a565b90509250929050565b60006020828403121561343657600080fd5b813561318b8161337d565b600181811c9082168061345557607f821691505b60208210810361347557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bce57610bce6134b0565b6000826134fa57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bce57610bce6134b0565b634e487b7160e01b600052603260045260246000fd5b60006001820161353a5761353a6134b0565b5060010190565b60006020828403121561355357600080fd5b5051919050565b60006020828403121561356c57600080fd5b815161318b8161337d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bce57610bce6134b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136625784516001600160a01b03168352938301939183019160010161363d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122013e41f470ddddb85d0a4af7e315049a86e2c98e370b6b30dc361b26861c06a8564736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610475806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461039f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461039f565b6102b5565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca906103cf565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e9190610404565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd9190610404565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c919061041d565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca906103cf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102df5760405162461bcd60e51b81526004016100ca906103cf565b6001600160a01b0381166103445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103b157600080fd5b81356001600160a01b03811681146103c857600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561041657600080fd5b5051919050565b60006020828403121561042f57600080fd5b815180151581146103c857600080fdfea2646970667358221220c0269c4a89f36cb465a4bff42cc2c8bee41921be7debb2c80d38f1f38df25a5664736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063906e9dd0116101e7578063c876d0b91161010d578063ea4cfe12116100a0578063f2fde38b1161006f578063f2fde38b14610aca578063f5648a4f14610aea578063f637434214610aff578063fb002c9714610b1557600080fd5b8063ea4cfe1214610a56578063eb41548514610a76578063ee40166e14610a9e578063f11a24d314610ab457600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e2f4560514610a2b578063e884f26014610a4157600080fd5b8063c876d0b91461095b578063d257b34f14610975578063d798425714610995578063d85ba063146109af57600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fb578063c17b5b8c1461091b578063c18bc1951461093b57600080fd5b8063aa4bde2814610856578063b3bcca551461086c578063b561fe611461088c578063b62496f5146108ac57600080fd5b80639a7a23d6116101c15780639a7a23d6146107d6578063a457c2d7146107f6578063a5ece94114610816578063a9059cbb1461083657600080fd5b8063906e9dd01461078b57806392136913146107ab57806395d89b41146107c157600080fd5b80634f77f6c0116102cc578063715018a61161026a5780638095d564116102395780638095d5641461072257806388e765ff146107425780638a8c523c146107585780638da5cb5b1461076d57600080fd5b8063715018a6146106c2578063751039fc146106d75780637571336a146106ec5780637bce5a041461070c57600080fd5b806367243482116102a657806367243482146106365780636a486a8e146106565780636ddd17131461066c57806370a082311461068c57600080fd5b80634f77f6c0146105f45780635a139dd41461060a57806366d602ae1461062057600080fd5b80631f3fed8f1161034457806339509351116103135780633950935114610566578063452ed4f114610586578063499b8394146105ba5780634a62bb65146105da57600080fd5b80631f3fed8f146104f257806323b872dd146105085780632be32b6114610528578063313ce5671461054a57600080fd5b806310d5de531161038057806310d5de531461045957806318160ddd146104895780631a8145bb146104a85780631b3d6e87146104be57600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461042957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b2b565b6040516103d491906130dc565b60405180910390f35b3480156103e957600080fd5b506104117f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103d4565b34801561043557600080fd5b50610449610444366004613146565b610bbd565b60405190151581526020016103d4565b34801561046557600080fd5b50610449610474366004613170565b601e6020526000908152604090205460ff1681565b34801561049557600080fd5b506002545b6040519081526020016103d4565b3480156104b457600080fd5b5061049a601b5481565b3480156104ca57600080fd5b506104117f000000000000000000000000515e758e4986ec154a6f627e425d10f2aae8b58881565b3480156104fe57600080fd5b5061049a601a5481565b34801561051457600080fd5b50610449610523366004613192565b610bd4565b34801561053457600080fd5b506105486105433660046131ce565b610c83565b005b34801561055657600080fd5b50604051601281526020016103d4565b34801561057257600080fd5b50610449610581366004613146565b610d90565b34801561059257600080fd5b506104117f00000000000000000000000023bad6429d9ef7be3473c454ebcf5122e433d6d581565b3480156105c657600080fd5b506105486105d5366004613170565b610dcc565b3480156105e657600080fd5b50600e546104499060ff1681565b34801561060057600080fd5b5061049a60165481565b34801561061657600080fd5b5061049a60125481565b34801561062c57600080fd5b5061049a60075481565b34801561064257600080fd5b506105486106513660046132bd565b610ea5565b34801561066257600080fd5b5061049a60155481565b34801561067857600080fd5b50600e546104499062010000900460ff1681565b34801561069857600080fd5b5061049a6106a7366004613170565b6001600160a01b031660009081526020819052604090205490565b3480156106ce57600080fd5b50610548611010565b3480156106e357600080fd5b50610548611084565b3480156106f857600080fd5b5061054861070736600461338e565b6110ef565b34801561071857600080fd5b5061049a60135481565b34801561072e57600080fd5b5061054861073d3660046133c5565b6111da565b34801561074e57600080fd5b5061049a60065481565b34801561076457600080fd5b50610548611230565b34801561077957600080fd5b506005546001600160a01b0316610411565b34801561079757600080fd5b506105486107a6366004613170565b6112f2565b3480156107b757600080fd5b5061049a60175481565b3480156107cd57600080fd5b506103c76113ca565b3480156107e257600080fd5b506105486107f136600461338e565b6113d9565b34801561080257600080fd5b50610449610811366004613146565b6114b8565b34801561082257600080fd5b50600c54610411906001600160a01b031681565b34801561084257600080fd5b50610449610851366004613146565b611551565b34801561086257600080fd5b5061049a60085481565b34801561087857600080fd5b506104496108873660046133f1565b61155e565b34801561089857600080fd5b506105486108a7366004613424565b611767565b3480156108b857600080fd5b506104496108c7366004613170565b601f6020526000908152604090205460ff1681565b3480156108e857600080fd5b50600e5461044990610100900460ff1681565b34801561090757600080fd5b5061054861091636600461338e565b6117a4565b34801561092757600080fd5b506105486109363660046133c5565b61182d565b34801561094757600080fd5b506105486109563660046131ce565b611883565b34801561096757600080fd5b506010546104499060ff1681565b34801561098157600080fd5b506105486109903660046131ce565b61198c565b3480156109a157600080fd5b50601c546104499060ff1681565b3480156109bb57600080fd5b5061049a60115481565b3480156109d157600080fd5b506105486109e03660046131ce565b611ad7565b3480156109f157600080fd5b5061049a610a003660046133f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b5061049a600a5481565b348015610a4d57600080fd5b50610548611bde565b348015610a6257600080fd5b50600b54610411906001600160a01b031681565b348015610a8257600080fd5b506104117395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81565b348015610aaa57600080fd5b5061049a600d5481565b348015610ac057600080fd5b5061049a60145481565b348015610ad657600080fd5b50610548610ae5366004613170565b611c14565b348015610af657600080fd5b50610548611cff565b348015610b0b57600080fd5b5061049a60185481565b348015610b2157600080fd5b5061049a60195481565b606060038054610b3a90613441565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613441565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bca338484611d76565b5060015b92915050565b6000610be1848484611e9a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c788533858403611d76565b506001949350505050565b6005546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8610cc260025490565b610ccd9060016134c6565b610cd791906134dd565b610ce191906134dd565b811015610d425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c62565b610d5481670de0b6b3a76400006134c6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bca918590610dc79086906134ff565b611d76565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c62565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610c629061347b565b8051825114610f205760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c62565b60c8825110610f905760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c62565b60005b825181101561100b576000838281518110610fb057610fb0613512565b602002602001015190506000838381518110610fce57610fce613512565b6020026020010151670de0b6b3a7640000610fe991906134c6565b9050610ff6338383611e9a565b5050808061100390613528565b915050610f93565b505050565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610c629061347b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610c629061347b565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111195760405162461bcd60e51b8152600401610c629061347b565b806111af577f00000000000000000000000023bad6429d9ef7be3473c454ebcf5122e433d6d56001600160a01b0316826001600160a01b0316036111af5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c62565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112045760405162461bcd60e51b8152600401610c629061347b565b6012839055601382905560148190558061121e83856134ff565b61122891906134ff565b601155505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c629061347b565b600e54610100900460ff16156112b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c62565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0381166113805760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c62565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610b3a90613441565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610c629061347b565b7f00000000000000000000000023bad6429d9ef7be3473c454ebcf5122e433d6d56001600160a01b0316826001600160a01b0316036114aa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c62565b6114b48282612738565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561153a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c62565b6115473385858403611d76565b5060019392505050565b6000610bca338484611e9a565b6005546000906001600160a01b0316331461158b5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0383166115e15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c62565b306001600160a01b038416036116395760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c62565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190613541565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b919061355a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610c629061347b565b601c805460ff1916911515919091179055565b6005546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118575760405162461bcd60e51b8152600401610c629061347b565b6016839055601782905560188190558061187183856134ff565b61187b91906134ff565b601555505050565b6005546001600160a01b031633146118ad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e86118c260025490565b6118cd9060036134c6565b6118d791906134dd565b6118e191906134dd565b8110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c62565b61195781670de0b6b3a76400006134c6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d85565b6005546001600160a01b031633146119b65760405162461bcd60e51b8152600401610c629061347b565b620186a06119c360025490565b6119ce9060016134c6565b6119d891906134dd565b811015611a455760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c62565b6103e8611a5160025490565b611a5c9060016134c6565b611a6691906134dd565b811115611ad25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c62565b600a55565b6005546001600160a01b03163314611b015760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8611b1660025490565b611b219060016134c6565b611b2b91906134dd565b611b3591906134dd565b811015611b975760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c62565b611ba981670de0b6b3a76400006134c6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d85565b6005546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c629061347b565b6010805460ff19169055565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116611ca35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d295760405162461bcd60e51b8152600401610c629061347b565b604051600090339047908381818185875af1925050503d8060008114611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b50505050565b6001600160a01b038316611dd85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c62565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec05760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216611ee65760405162461bcd60e51b8152600401610c62906135bc565b60008111611f365760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c62565b600e5460ff161561240a576005546001600160a01b03848116911614801590611f6d57506005546001600160a01b03838116911614155b8015611f8157506001600160a01b03821615155b8015611f9857506001600160a01b03821661dead14155b1561240a57600e54610100900460ff16612030576001600160a01b0383166000908152601e602052604090205460ff1680611feb57506001600160a01b0382166000908152601e602052604090205460ff165b6120305760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c62565b60105460ff161561218c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316141580156120af57507f00000000000000000000000023bad6429d9ef7be3473c454ebcf5122e433d6d56001600160a01b0316826001600160a01b031614155b1561218c576120bf6004436135ff565b326000908152600f60205260409020541080156120fd57506120e26004436135ff565b6001600160a01b0383166000908152600f6020526040902054105b6121675760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c62565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff1680156121cd57506001600160a01b0382166000908152601e602052604090205460ff16155b156122a9576006548111156122355760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c62565b6008546001600160a01b03831660009081526020819052604090205461225b90836134ff565b11156122a45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b61240a565b6001600160a01b0382166000908152601f602052604090205460ff1680156122ea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612354576007548111156122a45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c62565b6001600160a01b0382166000908152601e602052604090205460ff1615801561239657506001600160a01b0383166000908152601e602052604090205460ff16155b1561240a576008546001600160a01b0383166000908152602081905260409020546123c190836134ff565b111561240a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b30600090815260208190526040902054600a54811080159081906124365750600e5462010000900460ff165b8015612445575060095460ff16155b801561246a57506001600160a01b0385166000908152601f602052604090205460ff16155b801561248f57506001600160a01b0385166000908152601d602052604090205460ff16155b80156124b457506001600160a01b0384166000908152601d602052604090205460ff16155b156124d9576009805460ff191660011790556124ce6127a2565b6009805460ff191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061251b57506001600160a01b0385166000908152601d602052604090205460ff165b15612524575060005b6000808280156125375750601c5460ff16155b15612723576001600160a01b0387166000908152601f602052604090205460ff16801561256657506000601554115b1561261e5760646015548761257b91906134c6565b61258591906134dd565b91506015546018548361259891906134c6565b6125a291906134dd565b601b60008282546125b391906134ff565b90915550506015546016546125c890846134c6565b6125d291906134dd565b601960008282546125e391906134ff565b90915550506015546017546125f890846134c6565b61260291906134dd565b601a600082825461261391906134ff565b909155506126fb9050565b6001600160a01b0388166000908152601f602052604090205460ff16801561264857506000601154115b156126fb5760646011548761265d91906134c6565b61266791906134dd565b91506011546014548361267a91906134c6565b61268491906134dd565b601b600082825461269591906134ff565b90915550506011546012546126aa90846134c6565b6126b491906134dd565b601960008282546126c591906134ff565b90915550506011546013546126da90846134c6565b6126e491906134dd565b601a60008282546126f591906134ff565b90915550505b811561270c5761270c883084612c0c565b61271681836134ff565b61272090876135ff565b95505b61272e888888612c0c565b5050505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556127668282612d61565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601a54601954601b546127c991906134ff565b6127d391906134ff565b90508115806127e0575080155b156127e9575050565b600a80546127f6916134c6565b82111561280d57600a805461280a916134c6565b91505b6000600282601b548561282091906134c6565b61282a91906134dd565b61283491906134dd565b905061284861284382856135ff565b612dc4565b6040516304fa881160e21b81527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60048201527f000000000000000000000000515e758e4986ec154a6f627e425d10f2aae8b5886001600160a01b0316906313ea204490602401600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce91506370a0823190602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613541565b9050600081905060006002601b5461296391906134dd565b61296d90866135ff565b60195461297a90856134c6565b61298491906134dd565b905060006002601b5461299791906134dd565b6129a190876135ff565b601a546129ae90866134c6565b6129b891906134dd565b90506129c481836134ff565b6129ce90846135ff565b6000601b8190556019819055601a55925084158015906129ee5750600083115b156129fd576129fd8584612f37565b8015612a8e57600c5460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063a9059cbb906044016020604051808303816000875af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c919061355a565b505b6040516370a0823160e01b81523060048201526000907395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce906370a0823190602401602060405180830381865afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613541565b1115612c0357600b546040516370a0823160e01b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190613541565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e919061355a565b50505050505050565b6001600160a01b038316612c325760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216612c585760405162461bcd60e51b8152600401610c62906135bc565b6001600160a01b03831660009081526020819052604090205481811015612cd05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d079084906134ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d5391815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613512565b60200260200101906001600160a01b031690816001600160a01b0316815250507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81600181518110612e4157612e41613512565b60200260200101906001600160a01b031690816001600160a01b031681525050612e8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d76565b604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d79590612f0190859060009086907f000000000000000000000000515e758e4986ec154a6f627e425d10f2aae8b588904290600401613612565b600060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050505050565b612f62307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d76565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063095ea7b3906044016020604051808303816000875af1158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613007919061355a565b5060405162e8e33760e81b815230600482018190527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce6024830152604482018490526064820183905260006084830181905260a483015260c48201524260e48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063e8e3370090610104016060604051808303816000875af11580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190613683565b5050505050565b600060208083528351808285015260005b81811015613109578581018301518582016040015282016130ed565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461314157600080fd5b919050565b6000806040838503121561315957600080fd5b6131628361312a565b946020939093013593505050565b60006020828403121561318257600080fd5b61318b8261312a565b9392505050565b6000806000606084860312156131a757600080fd5b6131b08461312a565b92506131be6020850161312a565b9150604084013590509250925092565b6000602082840312156131e057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613226576132266131e7565b604052919050565b600067ffffffffffffffff821115613248576132486131e7565b5060051b60200190565b600082601f83011261326357600080fd5b813560206132786132738361322e565b6131fd565b82815260059290921b8401810191818101908684111561329757600080fd5b8286015b848110156132b2578035835291830191830161329b565b509695505050505050565b600080604083850312156132d057600080fd5b823567ffffffffffffffff808211156132e857600080fd5b818501915085601f8301126132fc57600080fd5b8135602061330c6132738361322e565b82815260059290921b8401810191818101908984111561332b57600080fd5b948201945b83861015613350576133418661312a565b82529482019490820190613330565b9650508601359250508082111561336657600080fd5b5061337385828601613252565b9150509250929050565b801515811461338b57600080fd5b50565b600080604083850312156133a157600080fd5b6133aa8361312a565b915060208301356133ba8161337d565b809150509250929050565b6000806000606084860312156133da57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561340457600080fd5b61340d8361312a565b915061341b6020840161312a565b90509250929050565b60006020828403121561343657600080fd5b813561318b8161337d565b600181811c9082168061345557607f821691505b60208210810361347557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bce57610bce6134b0565b6000826134fa57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bce57610bce6134b0565b634e487b7160e01b600052603260045260246000fd5b60006001820161353a5761353a6134b0565b5060010190565b60006020828403121561355357600080fd5b5051919050565b60006020828403121561356c57600080fd5b815161318b8161337d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bce57610bce6134b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136625784516001600160a01b03168352938301939183019160010161363d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122013e41f470ddddb85d0a4af7e315049a86e2c98e370b6b30dc361b26861c06a8564736f6c63430008110033

Deployed Bytecode Sourcemap

10207:17023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10358:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10358:37:0;567:221:1;4991:169:0;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1395:14:1;;1388:22;1370:41;;1358:2;1343:18;4991:169:0;1230:187:1;11817:64:0;;;;;;;;;;-1:-1:-1;11817:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4398:108;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;;1759:25:1;;;1747:2;1732:18;4398:108:0;1613:177:1;11598:33:0;;;;;;;;;;;;;;;;10442:42;;;;;;;;;;;;;;;11558:33;;;;;;;;;;;;;;;;5168:492;;;;;;;;;;-1:-1:-1;5168:492:0;;;;;:::i;:::-;;:::i;15439:269::-;;;;;;;;;;-1:-1:-1;15439:269:0;;;;;:::i;:::-;;:::i;:::-;;4297:93;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;2683:36:1;;2671:2;2656:18;4297:93:0;2541:184:1;5668:215:0;;;;;;;;;;-1:-1:-1;5668:215:0;;;;;:::i;:::-;;:::i;10402:31::-;;;;;;;;;;;;;;;26514:297;;;;;;;;;;-1:-1:-1;26514:297:0;;;;;:::i;:::-;;:::i;10721:33::-;;;;;;;;;;-1:-1:-1;10721:33:0;;;;;;;;11400:32;;;;;;;;;;;;;;;;11251:31;;;;;;;;;;;;;;;;10284:28;;;;;;;;;;;;;;;;16929:510;;;;;;;;;;-1:-1:-1;16929:510:0;;;;;:::i;:::-;;:::i;11365:28::-;;;;;;;;;;;;;;;;10801:31;;;;;;;;;;-1:-1:-1;10801:31:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127;8158:150;;;;;;;;;;;;;:::i;15105:154::-;;;;;;;;;;;;;:::i;17451:260::-;;;;;;;;;;-1:-1:-1;17451:260:0;;;;;:::i;:::-;;:::i;11289:30::-;;;;;;;;;;;;;;;;18222:326;;;;;;;;;;-1:-1:-1;18222:326:0;;;;;:::i;:::-;;:::i;10250:27::-;;;;;;;;;;;;;;;;14800:249;;;;;;;;;;;;;:::i;7944:79::-;;;;;;;;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;8009:6:0;7944:79;;26820:289;;;;;;;;;;-1:-1:-1;26820:289:0;;;;;:::i;:::-;;:::i;11439:31::-;;;;;;;;;;;;;;;;4185:104;;;;;;;;;;;;;:::i;17719:239::-;;;;;;;;;;-1:-1:-1;17719:239:0;;;;;:::i;:::-;;:::i;5891:413::-;;;;;;;;;;-1:-1:-1;5891:413:0;;;;;:::i;:::-;;:::i;10602:31::-;;;;;;;;;;-1:-1:-1;10602:31:0;;;;-1:-1:-1;;;;;10602:31:0;;;4649:175;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;10319:30::-;;;;;;;;;;;;;;;;25814:462;;;;;;;;;;-1:-1:-1;25814:462:0;;;;;:::i;:::-;;:::i;27118:107::-;;;;;;;;;;-1:-1:-1;27118:107:0;;;;;:::i;:::-;;:::i;12039:58::-;;;;;;;;;;-1:-1:-1;12039:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10761:33;;;;;;;;;;-1:-1:-1;10761:33:0;;;;;;;;;;;18898:182;;;;;;;;;;-1:-1:-1;18898:182:0;;;;;:::i;:::-;;:::i;18556:334::-;;;;;;;;;;-1:-1:-1;18556:334:0;;;;;:::i;:::-;;:::i;16002:284::-;;;;;;;;;;-1:-1:-1;16002:284:0;;;;;:::i;:::-;;:::i;11024:39::-;;;;;;;;;;-1:-1:-1;11024:39:0;;;;;;;;16356:346;;;;;;;;;;-1:-1:-1;16356:346:0;;;;;:::i;:::-;;:::i;11640:23::-;;;;;;;;;;-1:-1:-1;11640:23:0;;;;;;;;11217:27;;;;;;;;;;;;;;;;15720:274;;;;;;;;;;-1:-1:-1;15720:274:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;10521:33;;;;;;;;;;;;;;;;15329:98;;;;;;;;;;;;;:::i;10563:32::-;;;;;;;;;;-1:-1:-1;10563:32:0;;;;-1:-1:-1;;;;;10563:32:0;;;11072:81;;;;;;;;;;;;11110:42;11072:81;;10642:37;;;;;;;;;;;;;;;;11326:30;;;;;;;;;;;;;;;;8316:244;;;;;;;;;;-1:-1:-1;8316:244:0;;;;;:::i;:::-;;:::i;26346:160::-;;;;;;;;;;;;;:::i;11477:31::-;;;;;;;;;;;;;;;;11517:34;;;;;;;;;;;;;;;;4077:100;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;;:::o;5168:492::-;5308:4;5325:36;5335:6;5343:9;5354:6;5325:9;:36::i;:::-;-1:-1:-1;;;;;5401:19:0;;5374:24;5401:19;;;:11;:19;;;;;;;;306:10;5401:33;;;;;;;;5453:26;;;;5445:79;;;;-1:-1:-1;;;5445:79:0;;7439:2:1;5445:79:0;;;7421:21:1;7478:2;7458:18;;;7451:30;7517:34;7497:18;;;7490:62;-1:-1:-1;;;7568:18:1;;;7561:38;7616:19;;5445:79:0;;;;;;;;;5560:57;5569:6;306:10;5610:6;5591:16;:25;5560:8;:57::i;:::-;-1:-1:-1;5648:4:0;;5168:492;-1:-1:-1;;;;5168:492:0:o;15439:269::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15558:4:::1;15552;15532:13;4486:12:::0;;;4398:108;15532:13:::1;:17;::::0;15548:1:::1;15532:17;:::i;:::-;:24;;;;:::i;:::-;15531:31;;;;:::i;:::-;15521:6;:41;;15513:95;;;::::0;-1:-1:-1;;;15513:95:0;;8736:2:1;15513:95:0::1;::::0;::::1;8718:21:1::0;8775:2;8755:18;;;8748:30;8814:34;8794:18;;;8787:62;-1:-1:-1;;;8865:18:1;;;8858:39;8914:19;;15513:95:0::1;8534:405:1::0;15513:95:0::1;15634:17;:6:::0;15644::::1;15634:17;:::i;:::-;15619:12;:32:::0;;;15667:33:::1;::::0;1759:25:1;;;15667:33:0::1;::::0;1747:2:1;1732:18;15667:33:0::1;;;;;;;;15439:269:::0;:::o;5668:215::-;306:10;5756:4;5805:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5805:34:0;;;;;;;;;;5756:4;;5773:80;;5796:7;;5805:47;;5842:10;;5805:47;:::i;:::-;5773:8;:80::i;26514:297::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26610:32:0;::::1;26602:83;;;::::0;-1:-1:-1;;;26602:83:0;;9276:2:1;26602:83:0::1;::::0;::::1;9258:21:1::0;9315:2;9295:18;;;9288:30;9354:34;9334:18;;;9327:62;-1:-1:-1;;;9405:18:1;;;9398:36;9451:19;;26602:83:0::1;9074:402:1::0;26602:83:0::1;26696:17;:47:::0;;-1:-1:-1;;;;;;26696:47:0::1;-1:-1:-1::0;;;;;26696:47:0;::::1;::::0;;::::1;::::0;;;26759:44:::1;::::0;::::1;::::0;-1:-1:-1;;26759:44:0::1;26514:297:::0;:::o;16929:510::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17062:15:::1;:22;17044:7;:14;:40;17036:83;;;::::0;-1:-1:-1;;;17036:83:0;;9683:2:1;17036:83:0::1;::::0;::::1;9665:21:1::0;9722:2;9702:18;;;9695:30;9761:32;9741:18;;;9734:60;9811:18;;17036:83:0::1;9481:354:1::0;17036:83:0::1;17155:3;17138:7;:14;:20;17130:87;;;::::0;-1:-1:-1;;;17130:87:0;;10042:2:1;17130:87:0::1;::::0;::::1;10024:21:1::0;10081:2;10061:18;;;10054:30;10120:34;10100:18;;;10093:62;-1:-1:-1;;;10171:18:1;;;10164:52;10233:19;;17130:87:0::1;9840:418:1::0;17130:87:0::1;17232:9;17228:204;17251:7;:14;17247:1;:18;17228:204;;;17286:14;17303:7;17311:1;17303:10;;;;;;;;:::i;:::-;;;;;;;17286:27;;17328:14;17345:15;17361:1;17345:18;;;;;;;;:::i;:::-;;;;;;;17364:4;17345:23;;;;:::i;:::-;17328:40;;17383:37;17393:10;17405:6;17413;17383:9;:37::i;:::-;17271:161;;17267:3;;;;;:::i;:::-;;;;17228:204;;;;16929:510:::0;;:::o;8158:150::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;8251:6:::1;::::0;8230:40:::1;::::0;8267:1:::1;::::0;-1:-1:-1;;;;;8251:6:0::1;::::0;8230:40:::1;::::0;8267:1;;8230:40:::1;8281:6;:19:::0;;-1:-1:-1;;;;;;8281:19:0::1;::::0;;8158:150::o;15105:154::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15159:14:::1;:22:::0;;-1:-1:-1;;15159:22:0;;::::1;::::0;;;15192:20:::1;:28:::0;;;;::::1;::::0;;15236:15:::1;::::0;::::1;::::0;15176:5:::1;::::0;15236:15:::1;15105:154::o:0;17451:260::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17547:4:::1;17543:104;;17585:6;-1:-1:-1::0;;;;;17575:16:0::1;:6;-1:-1:-1::0;;;;;17575:16:0::1;::::0;17567:68:::1;;;::::0;-1:-1:-1;;;17567:68:0;;10737:2:1;17567:68:0::1;::::0;::::1;10719:21:1::0;10776:2;10756:18;;;10749:30;10815:34;10795:18;;;10788:62;-1:-1:-1;;;10866:18:1;;;10859:37;10913:19;;17567:68:0::1;10535:403:1::0;17567:68:0::1;-1:-1:-1::0;;;;;17657:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17657:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17451:260::o;18222:326::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18345:16:::1;:33:::0;;;18389:15:::1;:31:::0;;;18431:15:::1;:31:::0;;;18449:13;18488:34:::1;18407:13:::0;18364:14;18488:34:::1;:::i;:::-;:52;;;;:::i;:::-;18473:12;:67:::0;-1:-1:-1;;;18222:326:0:o;14800:249::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;14864:13:::1;::::0;::::1;::::0;::::1;;;14863:14;14855:50;;;::::0;-1:-1:-1;;;14855:50:0;;11145:2:1;14855:50:0::1;::::0;::::1;11127:21:1::0;11184:2;11164:18;;;11157:30;11223:25;11203:18;;;11196:53;11266:18;;14855:50:0::1;10943:347:1::0;14855:50:0::1;14916:13;:20:::0;;-1:-1:-1;;14947:18:0;;;;;14997:12:::1;14976:18;:33:::0;15025:16:::1;::::0;::::1;::::0;-1:-1:-1;;15025:16:0::1;14800:249::o:0;26820:289::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26914:31:0;::::1;26906:81;;;::::0;-1:-1:-1;;;26906:81:0;;11497:2:1;26906:81:0::1;::::0;::::1;11479:21:1::0;11536:2;11516:18;;;11509:30;11575:34;11555:18;;;11548:62;-1:-1:-1;;;11626:18:1;;;11619:35;11671:19;;26906:81:0::1;11295:401:1::0;26906:81:0::1;26998:16;:45:::0;;-1:-1:-1;;;;;;26998:45:0::1;-1:-1:-1::0;;;;;26998:45:0;::::1;::::0;;::::1;::::0;;;27059:42:::1;::::0;::::1;::::0;-1:-1:-1;;27059:42:0::1;26820:289:::0;:::o;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;17719:239::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17828:6:::1;-1:-1:-1::0;;;;;17820:14:0::1;:4;-1:-1:-1::0;;;;;17820:14:0::1;::::0;17812:84:::1;;;::::0;-1:-1:-1;;;17812:84:0;;11903:2:1;17812:84:0::1;::::0;::::1;11885:21:1::0;11942:2;11922:18;;;11915:30;11981:34;11961:18;;;11954:62;12052:27;12032:18;;;12025:55;12097:19;;17812:84:0::1;11701:421:1::0;17812:84:0::1;17909:41;17938:4;17944:5;17909:28;:41::i;:::-;17719:239:::0;;:::o;5891:413::-;306:10;5984:4;6028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;6081:35;;;;6073:85;;;;-1:-1:-1;;;6073:85:0;;12329:2:1;6073:85:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:34;12387:18;;;12380:62;-1:-1:-1;;;12458:18:1;;;12451:35;12503:19;;6073:85:0;12127:401:1;6073:85:0;6194:67;306:10;6217:7;6245:15;6226:16;:34;6194:8;:67::i;:::-;-1:-1:-1;6292:4:0;;5891:413;-1:-1:-1;;;5891:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;25814:462::-;8071:6;;25907:10;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25938:20:0;::::1;25930:59;;;::::0;-1:-1:-1;;;25930:59:0;;12735:2:1;25930:59:0::1;::::0;::::1;12717:21:1::0;12774:2;12754:18;;;12747:30;12813:28;12793:18;;;12786:56;12859:18;;25930:59:0::1;12533:350:1::0;25930:59:0::1;26026:4;-1:-1:-1::0;;;;;26008:23:0;::::1;::::0;26000:64:::1;;;::::0;-1:-1:-1;;;26000:64:0;;13090:2:1;26000:64:0::1;::::0;::::1;13072:21:1::0;13129:2;13109:18;;;13102:30;13168;13148:18;;;13141:58;13216:18;;26000:64:0::1;12888:352:1::0;26000:64:0::1;26102:39;::::0;-1:-1:-1;;;26102:39:0;;26135:4:::1;26102:39;::::0;::::1;731:51:1::0;26075:24:0::1;::::0;-1:-1:-1;;;;;26102:24:0;::::1;::::0;::::1;::::0;704:18:1;;26102:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26160:46;::::0;-1:-1:-1;;;26160:46:0;;-1:-1:-1;;;;;13626:32:1;;;26160:46:0::1;::::0;::::1;13608:51:1::0;13675:18;;;13668:34;;;26075:66:0;;-1:-1:-1;26160:23:0;;::::1;::::0;::::1;::::0;13581:18:1;;26160:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26222;::::0;;-1:-1:-1;;;;;13626:32:1;;13608:51;;13690:2;13675:18;;13668:34;;;26152:54:0;;-1:-1:-1;26222:46:0::1;::::0;13581:18:1;26222:46:0::1;;;;;;;25919:357;25814:462:::0;;;;:::o;27118:107::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;27191:11:::1;:26:::0;;-1:-1:-1;;27191:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27118:107::o;18898:182::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18983:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18983:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19038:34;;1370:41:1;;;19038:34:0::1;::::0;1343:18:1;19038:34:0::1;;;;;;;18898:182:::0;;:::o;18556:334::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18680:17:::1;:34:::0;;;18725:16:::1;:32:::0;;;18768:16:::1;:32:::0;;;18787:13;18827:36:::1;18744:13:::0;18700:14;18827:36:::1;:::i;:::-;:55;;;;:::i;:::-;18811:13;:71:::0;-1:-1:-1;;;18556:334:0:o;16002:284::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16124:4:::1;16118;16098:13;4486:12:::0;;;4398:108;16098:13:::1;:17;::::0;16114:1:::1;16098:17;:::i;:::-;:24;;;;:::i;:::-;16097:31;;;;:::i;:::-;16087:6;:41;;16079:98;;;::::0;-1:-1:-1;;;16079:98:0;;14165:2:1;16079:98:0::1;::::0;::::1;14147:21:1::0;14204:2;14184:18;;;14177:30;14243:34;14223:18;;;14216:62;-1:-1:-1;;;14294:18:1;;;14287:42;14346:19;;16079:98:0::1;13963:408:1::0;16079:98:0::1;16206:17;:6:::0;16216::::1;16206:17;:::i;:::-;16188:15;:35:::0;;;16239:39:::1;::::0;1759:25:1;;;16239:39:0::1;::::0;1747:2:1;1732:18;16239:39:0::1;1613:177:1::0;16356:346:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16479:6:::1;16459:13;4486:12:::0;;;4398:108;16459:13:::1;:17;::::0;16475:1:::1;16459:17;:::i;:::-;:26;;;;:::i;:::-;16446:9;:39;;16438:105;;;::::0;-1:-1:-1;;;16438:105:0;;14578:2:1;16438:105:0::1;::::0;::::1;14560:21:1::0;14617:2;14597:18;;;14590:30;14656:34;14636:18;;;14629:62;-1:-1:-1;;;14707:18:1;;;14700:51;14768:19;;16438:105:0::1;14376:417:1::0;16438:105:0::1;16594:4;16574:13;4486:12:::0;;;4398:108;16574:13:::1;:17;::::0;16590:1:::1;16574:17;:::i;:::-;:24;;;;:::i;:::-;16561:9;:37;;16553:102;;;::::0;-1:-1:-1;;;16553:102:0;;15000:2:1;16553:102:0::1;::::0;::::1;14982:21:1::0;15039:2;15019:18;;;15012:30;15078:34;15058:18;;;15051:62;-1:-1:-1;;;15129:18:1;;;15122:50;15189:19;;16553:102:0::1;14798:416:1::0;16553:102:0::1;16665:18;:30:::0;16356:346::o;15720:274::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15840:4:::1;15834;15814:13;4486:12:::0;;;4398:108;15814:13:::1;:17;::::0;15830:1:::1;15814:17;:::i;:::-;:24;;;;:::i;:::-;15813:31;;;;:::i;:::-;15803:6;:41;;15795:96;;;::::0;-1:-1:-1;;;15795:96:0;;15421:2:1;15795:96:0::1;::::0;::::1;15403:21:1::0;15460:2;15440:18;;;15433:30;15499:34;15479:18;;;15472:62;-1:-1:-1;;;15550:18:1;;;15543:40;15600:19;;15795:96:0::1;15219:406:1::0;15795:96:0::1;15918:17;:6:::0;15928::::1;15918:17;:::i;:::-;15902:13;:33:::0;;;15951:35:::1;::::0;1759:25:1;;;15951:35:0::1;::::0;1747:2:1;1732:18;15951:35:0::1;1613:177:1::0;15329:98:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15391:20:::1;:28:::0;;-1:-1:-1;;15391:28:0::1;::::0;;15329:98::o;8316:244::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8405:22:0;::::1;8397:73;;;::::0;-1:-1:-1;;;8397:73:0;;15832:2:1;8397:73:0::1;::::0;::::1;15814:21:1::0;15871:2;15851:18;;;15844:30;15910:34;15890:18;;;15883:62;-1:-1:-1;;;15961:18:1;;;15954:36;16007:19;;8397:73:0::1;15630:402:1::0;8397:73:0::1;8507:6;::::0;8486:38:::1;::::0;-1:-1:-1;;;;;8486:38:0;;::::1;::::0;8507:6:::1;::::0;8486:38:::1;::::0;8507:6:::1;::::0;8486:38:::1;8535:6;:17:::0;;-1:-1:-1;;;;;;8535:17:0::1;-1:-1:-1::0;;;;;8535:17:0;;;::::1;::::0;;;::::1;::::0;;8316:244::o;26346:160::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;26440:58:::1;::::0;26404:12:::1;::::0;26448:10:::1;::::0;26472:21:::1;::::0;26404:12;26440:58;26404:12;26440:58;26472:21;26448:10;26440:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26346:160:0:o;7233:380::-;-1:-1:-1;;;;;7369:19:0;;7361:68;;;;-1:-1:-1;;;7361:68:0;;16449:2:1;7361:68:0;;;16431:21:1;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:34;16622:19;;7361:68:0;16247:400:1;7361:68:0;-1:-1:-1;;;;;7448:21:0;;7440:68;;;;-1:-1:-1;;;7440:68:0;;16854:2:1;7440:68:0;;;16836:21:1;16893:2;16873:18;;;16866:30;16932:34;16912:18;;;16905:62;-1:-1:-1;;;16983:18:1;;;16976:32;17025:19;;7440:68:0;16652:398:1;7440:68:0;-1:-1:-1;;;;;7521:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7573:32;;1759:25:1;;;7573:32:0;;1732:18:1;7573:32:0;;;;;;;7233:380;;;:::o;19088:4033::-;-1:-1:-1;;;;;19188:18:0;;19180:68;;;;-1:-1:-1;;;19180:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19267:16:0;;19259:64;;;;-1:-1:-1;;;19259:64:0;;;;;;;:::i;:::-;19351:1;19342:6;:10;19334:52;;;;-1:-1:-1;;;19334:52:0;;18067:2:1;19334:52:0;;;18049:21:1;18106:2;18086:18;;;18079:30;18145:31;18125:18;;;18118:59;18194:18;;19334:52:0;17865:353:1;19334:52:0;19420:14;;;;19417:1860;;;8009:6;;-1:-1:-1;;;;;19454:15:0;;;8009:6;;19454:15;;;;:32;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;19473:13:0;;;8009:6;;19473:13;;19454:32;:52;;;;-1:-1:-1;;;;;;19490:16:0;;;;19454:52;:77;;;;-1:-1:-1;;;;;;19510:21:0;;19524:6;19510:21;;19454:77;19450:1816;;;19555:13;;;;;;;19551:172;;-1:-1:-1;;;;;19600:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;19641:35:0;;;;;;:31;:35;;;;;;;;19600:76;19592:111;;;;-1:-1:-1;;;19592:111:0;;18425:2:1;19592:111:0;;;18407:21:1;18464:2;18444:18;;;18437:30;-1:-1:-1;;;18483:18:1;;;18476:52;18545:18;;19592:111:0;18223:346:1;19592:111:0;19897:20;;;;19893:506;;;19959:9;-1:-1:-1;;;;;19945:24:0;:2;-1:-1:-1;;;;;19945:24:0;;;:49;;;;;19987:6;-1:-1:-1;;;;;19973:21:0;:2;-1:-1:-1;;;;;19973:21:0;;;19945:49;19941:439;;;20072:16;20087:1;20072:12;:16;:::i;:::-;20059:9;20030:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;20127:16:0;20142:1;20127:12;:16;:::i;:::-;-1:-1:-1;;;;;20092:32:0;;;;;;:28;:32;;;;;;:51;20030:113;20022:179;;;;-1:-1:-1;;;20022:179:0;;18909:2:1;20022:179:0;;;18891:21:1;18948:2;18928:18;;;18921:30;18987:34;18967:18;;;18960:62;-1:-1:-1;;;19038:18:1;;;19031:51;19099:19;;20022:179:0;18707:417:1;20022:179:0;20257:9;20228:39;;;;:28;:39;;;;;;20270:12;20228:54;;;;-1:-1:-1;;;;;20309:32:0;;;;;;:47;19941:439;-1:-1:-1;;;;;20468:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20504:35:0;;;;;;:31;:35;;;;;;;;20503:36;20468:71;20464:787;;;20586:12;;20576:6;:22;;20568:75;;;;-1:-1:-1;;;20568:75:0;;19331:2:1;20568:75:0;;;19313:21:1;19370:2;19350:18;;;19343:30;19409:34;19389:18;;;19382:62;-1:-1:-1;;;19460:18:1;;;19453:38;19508:19;;20568:75:0;19129:404:1;20568:75:0;20704:15;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;20678:22;;:6;:22;:::i;:::-;:41;;20670:78;;;;-1:-1:-1;;;20670:78:0;;19740:2:1;20670:78:0;;;19722:21:1;19779:2;19759:18;;;19752:30;-1:-1:-1;;;19798:18:1;;;19791:54;19862:18;;20670:78:0;19538:348:1;20670:78:0;20464:787;;;-1:-1:-1;;;;;20825:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20859:37:0;;;;;;:31;:37;;;;;;;;20858:38;20825:71;20821:430;;;20943:13;;20933:6;:23;;20925:78;;;;-1:-1:-1;;;20925:78:0;;20093:2:1;20925:78:0;;;20075:21:1;20132:2;20112:18;;;20105:30;20171:34;20151:18;;;20144:62;-1:-1:-1;;;20222:18:1;;;20215:40;20272:19;;20925:78:0;19891:406:1;20821:430:0;-1:-1:-1;;;;;21052:35:0;;;;;;:31;:35;;;;;;;;21051:36;:78;;;;-1:-1:-1;;;;;;21092:37:0;;;;;;:31;:37;;;;;;;;21091:38;21051:78;21047:204;;;21187:15;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;21161:22;;:6;:22;:::i;:::-;:41;;21153:78;;;;-1:-1:-1;;;21153:78:0;;19740:2:1;21153:78:0;;;19722:21:1;19779:2;19759:18;;;19752:30;-1:-1:-1;;;19798:18:1;;;19791:54;19862:18;;21153:78:0;19538:348:1;21153:78:0;21338:4;21289:28;4615:18;;;;;;;;;;;21404;;21380:42;;;;;;;21438:22;;-1:-1:-1;21449:11:0;;;;;;;21438:22;:35;;;;-1:-1:-1;21465:8:0;;;;21464:9;21438:35;:71;;;;-1:-1:-1;;;;;;21478:31:0;;;;;;:25;:31;;;;;;;;21477:32;21438:71;:101;;;;-1:-1:-1;;;;;;21514:25:0;;;;;;:19;:25;;;;;;;;21513:26;21438:101;:129;;;;-1:-1:-1;;;;;;21544:23:0;;;;;;:19;:23;;;;;;;;21543:24;21438:129;21435:236;;;21584:8;:15;;-1:-1:-1;;21584:15:0;21595:4;21584:15;;;21616:10;:8;:10::i;:::-;21643:8;:16;;-1:-1:-1;;21643:16:0;;;21435:236;-1:-1:-1;;;;;21801:25:0;;21683:12;21801:25;;;:19;:25;;;;;;21698:4;;21801:25;;;:52;;-1:-1:-1;;;;;;21830:23:0;;;;;;:19;:23;;;;;;;;21801:52;21798:99;;;-1:-1:-1;21880:5:0;21798:99;21917:12;21944:21;22057:7;:23;;;;-1:-1:-1;22069:11:0;;;;22068:12;22057:23;22054:1014;;;-1:-1:-1;;;;;22124:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22173:1;22157:13;;:17;22124:50;22120:763;;;22225:3;22210:13;;22201:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;22194:34;;22295:13;;22276:16;;22269:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22247:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22377:13:0;;22357:17;;22350:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;22327:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22457:13:0;;22438:16;;22431:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;22409:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;22120:763:0;;-1:-1:-1;22120:763:0;;-1:-1:-1;;;;;22531:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22581:1;22566:12;;:16;22531:51;22528:355;;;22631:3;22616:12;;22607:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22600:34;;22697:12;;22679:15;;22672:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22650:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22777:12:0;;22758:16;;22751:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;22728:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22855:12:0;;22837:15;;22830:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;22808:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22528:355:0;22914:8;;22911:93;;22946:42;22962:4;22976;22983;22946:15;:42::i;:::-;23036:20;23043:13;23036:4;:20;:::i;:::-;23026:30;;;;:::i;:::-;;;22054:1014;23080:33;23096:4;23102:2;23106:6;23080:15;:33::i;:::-;19167:3954;;;;;19088:4033;;;:::o;17966:248::-;-1:-1:-1;;;;;18049:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18049:39:0;;;;;;;18109;18049:31;:39;18109:26;:39::i;:::-;18166:40;;;;;;-1:-1:-1;;;;;18166:40:0;;;;;;;;17966:248;;:::o;23574:1646::-;23657:4;23613:23;4615:18;;;;;;;;;;;23613:50;;23674:25;23745:18;;23723:19;;23702:18;;:40;;;;:::i;:::-;:61;;;;:::i;:::-;23674:89;-1:-1:-1;23787:20:0;;;:46;;-1:-1:-1;23811:22:0;;23787:46;23784:60;;;23836:7;;23574:1646::o;23784:60::-;23877:18;;;:23;;;:::i;:::-;23859:15;:41;23856:113;;;23934:18;;;:23;;;:::i;:::-;23916:41;;23856:113;24038:23;24123:1;24103:17;24082:18;;24064:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24038:86;-1:-1:-1;24145:53:0;24164:33;24038:86;24164:15;:33;:::i;:::-;24145:18;:53::i;:::-;24212:45;;-1:-1:-1;;;24212:45:0;;11110:42;24212:45;;;731:51:1;24212:12:0;-1:-1:-1;;;;;24212:29:0;;;;704:18:1;;24212:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24301:30:0;;-1:-1:-1;;;24301:30:0;;24325:4;24301:30;;;731:51:1;24278:20:0;;-1:-1:-1;11110:42:0;;-1:-1:-1;24301:15:0;;704:18:1;;24301:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24278:53;;24342:25;24370:12;24342:40;;24395:26;24502:1;24483:18;;:20;;;;:::i;:::-;24462:42;;:17;:42;:::i;:::-;24439:19;;24424:34;;:12;:34;:::i;:::-;:81;;;;:::i;:::-;24395:110;;24516:25;24621:1;24602:18;;:20;;;;:::i;:::-;24581:42;;:17;:42;:::i;:::-;24559:18;;24544:33;;:12;:33;:::i;:::-;:80;;;;:::i;:::-;24516:108;-1:-1:-1;24658:38:0;24516:108;24658:18;:38;:::i;:::-;24637:59;;;;:::i;:::-;24742:1;24721:18;:22;;;24754:19;:23;;;24788:18;:22;24637:59;-1:-1:-1;24834:19:0;;;;;:44;;;24877:1;24857:17;:21;24834:44;24831:123;;;24894:48;24907:15;24924:17;24894:12;:48::i;:::-;24971:21;;24968:103;;25023:16;;25008:51;;-1:-1:-1;;;25008:51:0;;-1:-1:-1;;;;;25023:16:0;;;25008:51;;;13608::1;13675:18;;;13668:34;;;11110:42:0;;25008:14;;13581:18:1;;25008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24968:103;25086:30;;-1:-1:-1;;;25086:30:0;;25110:4;25086:30;;;731:51:1;25119:1:0;;11110:42;;25086:15;;704:18:1;;25086:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;25083:130;;;25151:17;;25170:30;;-1:-1:-1;;;25170:30:0;;25194:4;25170:30;;;731:51:1;11110:42:0;;25136:14;;-1:-1:-1;;;;;25151:17:0;;;;11110:42;;25170:15;;704:18:1;;25170:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25136:65;;-1:-1:-1;;;;;;25136:65:0;;;;;;;-1:-1:-1;;;;;13626:32:1;;;25136:65:0;;;13608:51:1;13675:18;;;13668:34;13581:18;;25136:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25083:130::-;23602:1618;;;;;;;23574:1646::o;6312:614::-;-1:-1:-1;;;;;6452:20:0;;6444:70;;;;-1:-1:-1;;;6444:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6533:23:0;;6525:71;;;;-1:-1:-1;;;6525:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6633:17:0;;6609:21;6633:17;;;;;;;;;;;6669:23;;;;6661:74;;;;-1:-1:-1;;;6661:74:0;;20504:2:1;6661:74:0;;;20486:21:1;20543:2;20523:18;;;20516:30;20582:34;20562:18;;;20555:62;-1:-1:-1;;;20633:18:1;;;20626:36;20679:19;;6661:74:0;20302:402:1;6661:74:0;-1:-1:-1;;;;;6771:17:0;;;:9;:17;;;;;;;;;;;6791:22;;;6771:42;;6835:20;;;;;;;;:30;;6807:6;;6771:9;6835:30;;6807:6;;6835:30;:::i;:::-;;;;;;;;6900:9;-1:-1:-1;;;;;6883:35:0;6892:6;-1:-1:-1;;;;;6883:35:0;;6911:6;6883:35;;;;1759:25:1;;1747:2;1732:18;;1613:177;6883:35:0;;;;;;;;6433:493;6312:614;;;:::o;16714:207::-;-1:-1:-1;;;;;16802:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16802:52:0;;;;;;;;;;16870:43;;20877:51:1;;;20944:18;;;20937:50;16870:43:0;;20850:18:1;16870:43:0;;;;;;;16714:207;;:::o;25228:580::-;25380:16;;;25394:1;25380:16;;;;;;;;25356:21;;25380:16;;;;;;;;;;-1:-1:-1;25380:16:0;25356:40;;25425:4;25407;25412:1;25407:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25407:23:0;;;-1:-1:-1;;;;;25407:23:0;;;;;11110:42;25441:4;25446:1;25441:7;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;25441:24:0;;;-1:-1:-1;;;;;25441:24:0;;;;;25476:56;25493:4;25508:9;25520:11;25476:8;:56::i;:::-;25571:229;;-1:-1:-1;;;25571:229:0;;-1:-1:-1;;;;;25571:9:0;:63;;;;:229;;25649:11;;25675:1;;25719:4;;25746:12;;25774:15;;25571:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25285:523;25228:580;:::o;23133:433::-;23283:56;23300:4;23315:9;23327:11;23283:8;:56::i;:::-;23350:46;;-1:-1:-1;;;23350:46:0;;-1:-1:-1;;;;;23372:9:0;13626:32:1;23350:46:0;;;13608:51:1;13675:18;;;13668:34;;;11110:42:0;;23350:13;;13581:18:1;;23350:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23439:119:0;;-1:-1:-1;;;23439:119:0;;23470:4;23439:119;;;22380:34:1;;;11110:42:0;22430:18:1;;;22423:43;22482:18;;;22475:34;;;22525:18;;;22518:34;;;23519:1:0;22568:19:1;;;22561:35;;;22612:19;;;22605:35;22656:19;;;22649:44;23542:15:0;22709:19:1;;;22702:35;23439:9:0;-1:-1:-1;;;;;23439:22:0;;;;22314:19:1;;23439:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23133:433;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:173::-;861:20;;-1:-1:-1;;;;;910:31:1;;900:42;;890:70;;956:1;953;946:12;890:70;793:173;;;:::o;971:254::-;1039:6;1047;1100:2;1088:9;1079:7;1075:23;1071:32;1068:52;;;1116:1;1113;1106:12;1068:52;1139:29;1158:9;1139:29;:::i;:::-;1129:39;1215:2;1200:18;;;;1187:32;;-1:-1:-1;;;971:254:1:o;1422:186::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1422:186;-1:-1:-1;;;1422:186:1:o;2023:328::-;2100:6;2108;2116;2169:2;2157:9;2148:7;2144:23;2140:32;2137:52;;;2185:1;2182;2175:12;2137:52;2208:29;2227:9;2208:29;:::i;:::-;2198:39;;2256:38;2290:2;2279:9;2275:18;2256:38;:::i;:::-;2246:48;;2341:2;2330:9;2326:18;2313:32;2303:42;;2023:328;;;;;:::o;2356:180::-;2415:6;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;-1:-1:-1;2507:23:1;;2356:180;-1:-1:-1;2356:180:1:o;2938:127::-;2999:10;2994:3;2990:20;2987:1;2980:31;3030:4;3027:1;3020:15;3054:4;3051:1;3044:15;3070:275;3141:2;3135:9;3206:2;3187:13;;-1:-1:-1;;3183:27:1;3171:40;;3241:18;3226:34;;3262:22;;;3223:62;3220:88;;;3288:18;;:::i;:::-;3324:2;3317:22;3070:275;;-1:-1:-1;3070:275:1:o;3350:183::-;3410:4;3443:18;3435:6;3432:30;3429:56;;;3465:18;;:::i;:::-;-1:-1:-1;3510:1:1;3506:14;3522:4;3502:25;;3350:183::o;3538:662::-;3592:5;3645:3;3638:4;3630:6;3626:17;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:6;3686:20;3725:4;3749:60;3765:43;3805:2;3765:43;:::i;:::-;3749:60;:::i;:::-;3843:15;;;3929:1;3925:10;;;;3913:23;;3909:32;;;3874:12;;;;3953:15;;;3950:35;;;3981:1;3978;3971:12;3950:35;4017:2;4009:6;4005:15;4029:142;4045:6;4040:3;4037:15;4029:142;;;4111:17;;4099:30;;4149:12;;;;4062;;4029:142;;;-1:-1:-1;4189:5:1;3538:662;-1:-1:-1;;;;;;3538:662:1:o;4205:1146::-;4323:6;4331;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4440:9;4427:23;4469:18;4510:2;4502:6;4499:14;4496:34;;;4526:1;4523;4516:12;4496:34;4564:6;4553:9;4549:22;4539:32;;4609:7;4602:4;4598:2;4594:13;4590:27;4580:55;;4631:1;4628;4621:12;4580:55;4667:2;4654:16;4689:4;4713:60;4729:43;4769:2;4729:43;:::i;4713:60::-;4807:15;;;4889:1;4885:10;;;;4877:19;;4873:28;;;4838:12;;;;4913:19;;;4910:39;;;4945:1;4942;4935:12;4910:39;4969:11;;;;4989:148;5005:6;5000:3;4997:15;4989:148;;;5071:23;5090:3;5071:23;:::i;:::-;5059:36;;5022:12;;;;5115;;;;4989:148;;;5156:5;-1:-1:-1;;5199:18:1;;5186:32;;-1:-1:-1;;5230:16:1;;;5227:36;;;5259:1;5256;5249:12;5227:36;;5282:63;5337:7;5326:8;5315:9;5311:24;5282:63;:::i;:::-;5272:73;;;4205:1146;;;;;:::o;5356:118::-;5442:5;5435:13;5428:21;5421:5;5418:32;5408:60;;5464:1;5461;5454:12;5408:60;5356:118;:::o;5479:315::-;5544:6;5552;5605:2;5593:9;5584:7;5580:23;5576:32;5573:52;;;5621:1;5618;5611:12;5573:52;5644:29;5663:9;5644:29;:::i;:::-;5634:39;;5723:2;5712:9;5708:18;5695:32;5736:28;5758:5;5736:28;:::i;:::-;5783:5;5773:15;;;5479:315;;;;;:::o;5799:316::-;5876:6;5884;5892;5945:2;5933:9;5924:7;5920:23;5916:32;5913:52;;;5961:1;5958;5951:12;5913:52;-1:-1:-1;;5984:23:1;;;6054:2;6039:18;;6026:32;;-1:-1:-1;6105:2:1;6090:18;;;6077:32;;5799:316;-1:-1:-1;5799:316:1:o;6120:260::-;6188:6;6196;6249:2;6237:9;6228:7;6224:23;6220:32;6217:52;;;6265:1;6262;6255:12;6217:52;6288:29;6307:9;6288:29;:::i;:::-;6278:39;;6336:38;6370:2;6359:9;6355:18;6336:38;:::i;:::-;6326:48;;6120:260;;;;;:::o;6385:241::-;6441:6;6494:2;6482:9;6473:7;6469:23;6465:32;6462:52;;;6510:1;6507;6500:12;6462:52;6549:9;6536:23;6568:28;6590:5;6568:28;:::i;6852:380::-;6931:1;6927:12;;;;6974;;;6995:61;;7049:4;7041:6;7037:17;7027:27;;6995:61;7102:2;7094:6;7091:14;7071:18;7068:38;7065:161;;7148:10;7143:3;7139:20;7136:1;7129:31;7183:4;7180:1;7173:15;7211:4;7208:1;7201:15;7065:161;;6852:380;;;:::o;7646:356::-;7848:2;7830:21;;;7867:18;;;7860:30;7926:34;7921:2;7906:18;;7899:62;7993:2;7978:18;;7646:356::o;8007:127::-;8068:10;8063:3;8059:20;8056:1;8049:31;8099:4;8096:1;8089:15;8123:4;8120:1;8113:15;8139:168;8212:9;;;8243;;8260:15;;;8254:22;;8240:37;8230:71;;8281:18;;:::i;8312:217::-;8352:1;8378;8368:132;;8422:10;8417:3;8413:20;8410:1;8403:31;8457:4;8454:1;8447:15;8485:4;8482:1;8475:15;8368:132;-1:-1:-1;8514:9:1;;8312:217::o;8944:125::-;9009:9;;;9030:10;;;9027:36;;;9043:18;;:::i;10263:127::-;10324:10;10319:3;10315:20;10312:1;10305:31;10355:4;10352:1;10345:15;10379:4;10376:1;10369:15;10395:135;10434:3;10455:17;;;10452:43;;10475:18;;:::i;:::-;-1:-1:-1;10522:1:1;10511:13;;10395:135::o;13245:184::-;13315:6;13368:2;13356:9;13347:7;13343:23;13339:32;13336:52;;;13384:1;13381;13374:12;13336:52;-1:-1:-1;13407:16:1;;13245:184;-1:-1:-1;13245:184:1:o;13713:245::-;13780:6;13833:2;13821:9;13812:7;13808:23;13804:32;13801:52;;;13849:1;13846;13839:12;13801:52;13881:9;13875:16;13900:28;13922:5;13900:28;:::i;17055:401::-;17257:2;17239:21;;;17296:2;17276:18;;;17269:30;17335:34;17330:2;17315:18;;17308:62;-1:-1:-1;;;17401:2:1;17386:18;;17379:35;17446:3;17431:19;;17055:401::o;17461:399::-;17663:2;17645:21;;;17702:2;17682:18;;;17675:30;17741:34;17736:2;17721:18;;17714:62;-1:-1:-1;;;17807:2:1;17792:18;;17785:33;17850:3;17835:19;;17461:399::o;18574:128::-;18641:9;;;18662:11;;;18659:37;;;18676:18;;:::i;20998:980::-;21260:4;21308:3;21297:9;21293:19;21339:6;21328:9;21321:25;21365:2;21403:6;21398:2;21387:9;21383:18;21376:34;21446:3;21441:2;21430:9;21426:18;21419:31;21470:6;21505;21499:13;21536:6;21528;21521:22;21574:3;21563:9;21559:19;21552:26;;21613:2;21605:6;21601:15;21587:29;;21634:1;21644:195;21658:6;21655:1;21652:13;21644:195;;;21723:13;;-1:-1:-1;;;;;21719:39:1;21707:52;;21814:15;;;;21779:12;;;;21755:1;21673:9;21644:195;;;-1:-1:-1;;;;;;;21895:32:1;;;;21890:2;21875:18;;21868:60;-1:-1:-1;;;21959:3:1;21944:19;21937:35;21856:3;20998:980;-1:-1:-1;;;20998:980:1:o;22748:306::-;22836:6;22844;22852;22905:2;22893:9;22884:7;22880:23;22876:32;22873:52;;;22921:1;22918;22911:12;22873:52;22950:9;22944:16;22934:26;;23000:2;22989:9;22985:18;22979:25;22969:35;;23044:2;23033:9;23029:18;23023:25;23013:35;;22748:306;;;;;:::o

Swarm Source

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